Installer Fail2ban og knytt det til SSH og Nginx

Når vi har montert en server med Linux og vi ønsker å administrere den fra internett via SSH -fjernkontroll, kan det skje at vi begynner å motta angrep med det formål å gå inn i systemet og kunne kontrollere det for dets formål. Disse angrepene utføres vanligvis av dataprogrammer (bots) som i lang tid prøver å få tilgang til systemet ved å bruke brute force.

I tidligere innlegg har jeg snakket om hvordan du konfigurerer SSH -tjenesten, men noen avanserte bots kommer ikke inn i tjenesten, men de kan drepe SSH -tjenesten på serveren ved å deaktivere ekstern tilgang.

Komplett manual for SSH (Secure Shell)

Vi kan unngå det ved å bruke fail2ban verktøy, er veldig praktisk og gir stor sikkerhetsmargin. For å forklare litt hvordan det fungerer. Den er i stand til å lage iptables før et mislykket påloggingsforsøk mer enn 5 ganger på rad, og avviser enhver form for tilkobling når den er utestengt.

Installer Fail2ban


Installasjonen kan gjøres fra apt direkte. Først oppdaterer vi systemet og deretter installerer vi Fail2ban.
 apt-get oppdatering && apt-get -y oppgradering
 apt-get install fail2ban
Dette installerer ikke bare programmet, men lar det også kjøre og starte med systemet.

Konfigurering av Fail2ban


Fail2ban -tjenesten har sine innstillinger i katalogen / etc / fail2ban. Du har noen forhåndskonfigurerte alternativer i jail.conf, det beste i dette tilfellet er å kopiere filen og ikke gjøre endringene direkte i den, når du oppdaterer fail2ban blir disse filene overskrevet, og du kan miste alle endringene som er gjort tidligere.

I dette tilfellet kopierer vi filen og gir den navnet jail.local slik at den kan finne den.

 sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Når den er kopiert, kan vi åpne den og se hvordan den fungerer.
 vim /etc/fail2ban/jail.local
Inne i filen har vi flere parametere som vi kan justere. Enhver parameter som er under [DEFAULT] -taggen vil bli brukt på alle tjenestene som er aktivert av Fail2ban, for eksempel SSH, NGINX, APACHE, vi vil kalle dette globalt, så vil vi ha spesifikke seksjoner for hver tjeneste.

Vi starter med å legge til parametere i den globale delen.

 ignorip = 127.0.0.1
Vi legger til vår lokale vert på denne måten, den ignorerer all lokal trafikk, vi kan legge til flere adresser som skiller dem med et mellomrom.
 bantime = 600
Bantime er den tiden klienten vil bli utestengt etter å ha blitt blokkert. Enheten er i sekunder 600 sekunder ville være 10 minutter er standardverdien.
 findtime = 600 maxretry = 3
Da har vi funntid og maksretry. De er ansvarlige for å etablere vilkårene for at en klient skal utestenges som standard. Det kan leses at enhver bruker med mer enn 3 mislykkede forsøk på mindre enn 10 minutter vil bli utestengt.
 destemail = root @ localhost sendername = Fail2Ban mta = sendmail
Hvis vi ønsker å opprette varsler for forbudte brukere, er disse 3 parameterne nødvendige, vi definerer destinasjonen som vi skal sende varsel -e -posten til, hvem som skal ha ansvaret for å sende den, og til slutt mta for å definere hvilken e -posttjeneste vi skal bruke .
 action = $ (action_) s
Her vil vi definere hva som skal gjøres når et forbud er nødvendig. Action_ -verdien er standardhandlingen er basert på å avvise klienttrafikk til forbudstiden utløper.

Hvis vi ønsker å sende et varsel via e -post, må vi endre verdien til action_mw, men hvis vi også vil at den skal legge ved linjer i loggen i e -postens brødtekst, vil vi bruke action_mwl. Vi må være sikre på at e -postinnstillingene er riktige før vi endrer denne verdien.

Innstillinger etter service


Når de globale konfigurasjonene er fullført, vil vi legge til parametrene som utelukkende vil bli brukt på

SSH -tjeneste, vi sørger for å legge til alternativene under [SSH] -taggen.

 aktivert = sant
Som standard er SSH -tjenesten aktivert, men vi kan endre den om nødvendig i dette alternativet.

Hele denne delen kan fungere med verdiene som jeg vil beskrive senere, men du kan endre den for å tilpasse den til dine behov eller la dem stå som standard.

En annen av konfigurasjonene er filtrene som angir om påloggingen var riktig eller ikke og kan legges til for andre tjenester, for eksempel har vi en server med nginx og en del av siden er passordbeskyttet, men en klient angriper med brutal kraft , kan vi stoppe dette ved å legge til følgende under [nginx-http-auth] -taggen.

 [nginx-http-auth] aktivert = true filter = nginx-http-auth port = http, https logpath = /var/log/nginx/error.log
Hvis en bruker har mer enn 3 mislykkede påloggingsforsøk, gjenspeiles det i loggene og fail2ban vil handle og blokkere all brukertrafikk.

Test miljø


Etter å ha forstått det grunnleggende, vil vi gjøre et lite testmiljø der vi vil beskytte SSH og Nginx gjennom Fail2ban ved å lage en forbudspolicy som vil varsle oss om IP -en som har blitt utestengt.

Vi installerer Nginx først hvis det ikke er installert

 apt-get installer nginx
Vi installerer en e -posttjeneste for varsler, det kan være sendmail
 apt-get install sendmail
endelig vil vi at iptables skal være vedvarende etter en oppstart, vi kan enten lage et rc.0-skript eller installere iptables-persistent-pakken.
 apt-get install iptables-persistent
Det vil bli installert.

Etablering av brannmuren vår


Etter at vi har installert ovenstående, må vi implementere en brannmur slik at den kan blokkere trafikken. Jeg vil lage en grunnleggende brannmur i senere innlegg. Jeg vil snakke mer om iptables.

Vi vil tillate etablerte tilkoblinger, servertrafikk som oppdateringer og trafikk som er bestemt for SSH- og Nginx -portene. All gjenværende trafikk vil bli nektet.

 sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED, RELATED -j ACCEPT sudo iptables -A INPUT -p tcp --port 22 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 80 -j GODTAK sudo iptables -A INPUT -j DROP
Vi kan se endringene med:
 iptables -S
Det burde gi et lignende resultat.
 -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban -ssh -A INPUT -p tcp -m multiport --ports 22 -j fail2ban -ssh -A INPUT -i lo -j ACCEPT -A INPUT -m conrack --ctstate RELATED, ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --port 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban -ssh -j RETUR

Justere Fail2ban -innstillinger


Nå må vi konfigurere jail.local -filen når det passer oss.
 vi /etc/fail2ban/jail.local
Vi kan forlenge tiden en bruker er utestengt i minst 30 minutter, husk å angi verdien i sekunder.
 bantime = 1800
Vi må konfigurere en e -post som mottar alle fail2ban ban -varslene, la oss se etter verdien av e -post i filen og sette e -posten.
 destemail = [email protected]
Vi kan endre avsenderen som sender varselet jeg vanligvis legger med navnet fail2ban, slik at vi bedre kan filtrere mellom alle loggene.

Etter at vi må endre handlingsverdien har vi to alternativer:

  • action_mw: sender et varsel med en rapport som ligner whois -kommandoen til den utestengte klienten.
  • action_mwl: send et mye mer detaljert varsel ved å inkludere en logg i meldingen.

I dette vil vi bruke det andre alternativet:

 handling =% (action_mwl) s 
Deretter går vi til [SSH] -delen, og vi kan redigere det maksimale antallet forsøk før forbudet, vi forlater det ved 5:
 maxretry = 5
Hvis vi har SSH -tjenesten på en annen port enn 22, som anbefales på det sterkeste, må vi nevne porten.
 port = 45024
Så vil vi se etter [nginx-http-auth] -taggen, vi lar den være som den er.
 [nginx-http-auth] aktivert = true
Vi er ferdige og kan lagre og lukke filen.

Start Fail2ban -tjenesten på nytt


For alle endringene som skal brukes, anbefaler jeg at du stopper tjenesten.
 service fail2ban stopp 
Så kan vi starte dem igjen
 service fail2ban start
Dette vil ta en stund, etter omtrent 5 minutter kan vi se reglene våre igjen med
 iptables -S
 -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban -nginx -http -auth -N fail2ban -ssh -A INPUT -p tcp -m multiport --ports 80,443 -j fail2ban -nginx -http -auth -A INPUT -p tcp -m multiport --ports 22 -j fail2ban -ssh -A INPUT -i lo -j ACCEPT -A INPUT -m conrack --ctstate RELATED, ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp - -dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban -nginx -http -auth -j RETURN -A fail2ban -ssh -j RETURN
Vi ser hvordan fail2ban har lagt til nye retningslinjer. Det kan variere avhengig av konfigurasjonen du har definert i /etc/fail2ban/jail.local.

KonklusjonerVi har installert fail2ban og konfigurert til å fungere med SSH og NGINX i tilfelle APACHE, vi må endre etikettene og katalogen til loggene, men det ligner veldig på nginx. Vi har bare konfigurert det grunnleggende, du kan lage filtre og mye mer avanserte regler, jeg anbefaler å lese mannssiden deres litt, konfigurasjonsfilene er godt kommentert, jeg anbefaler å gå litt etter litt for å oppdage alle funksjonene.

Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave