Installera Fail2ban och associera det med SSH och Nginx

När vi har monterat en server med Linux och vi vill hantera den från internet via SSH -fjärrkontroll kan det hända att vi börjar ta emot attacker i syfte att komma in i systemet och kunna styra det för dess ändamål. Dessa attacker utförs vanligtvis av datorprogram (bots) som under lång tid försöker komma åt systemet med brutal kraft.

I tidigare inlägg har jag pratat om hur man konfigurerar SSH -tjänsten men några avancerade bots kommer inte in i tjänsten men de kan döda SSH -tjänsten på servern genom att inaktivera fjärråtkomst.

Komplett manual för SSH (Secure Shell)

Vi kan undvika det genom att använda fail2ban -verktyg, är mycket praktiskt och erbjuder en stor säkerhetsmarginal. För att förklara lite hur det fungerar. Den kan skapa iptables före misslyckade inloggningsförsök mer än 5 gånger i rad, avvisa alla typer av anslutningar när den är förbjuden.

Installera Fail2ban


Installationen kan göras från apt direkt. Först uppdaterar vi systemet och sedan installerar vi Fail2ban.
 apt-get uppdatering && apt-get -y uppgradering
 apt-get installera fail2ban
Detta installerar inte bara programmet utan låter det också köra och börja med systemet.

Konfigurera Fail2ban


Fail2ban -tjänsten har sina inställningar i katalogen / etc / fail2ban. Du har några förkonfigurerade alternativ i jail.conf, det bästa i det här fallet är att kopiera filen och inte göra ändringarna direkt i den, när du uppdaterar fail2ban skrivs dessa filer över och du kan förlora alla ändringar som gjorts tidigare.

I det här fallet kopierar vi filen och ger den namnet jail.local så att den kan hitta den.

 sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
När vi har kopierat det kan vi öppna det och se hur det fungerar.
 vim /etc/fail2ban/jail.local
Inne i filen har vi flera parametrar som vi kan justera. Alla parametrar som finns under [DEFAULT] -taggen tillämpas på alla tjänster som aktiveras av Fail2ban, till exempel SSH, NGINX, APACHE, vi kommer att kalla detta globalt, sedan kommer vi att ha specifika avsnitt för varje tjänst.

Vi börjar med att lägga till parametrar i det globala avsnittet.

 ignorip = 127.0.0.1
Vi lägger till vår localhost på detta sätt, det kommer att ignorera all lokal trafik, vi kan lägga till ytterligare adresser som skiljer dem med ett mellanslag.
 bantime = 600
Bantiden är den tidsperiod som klienten kommer att spärras efter att ha blockerats. Enheten är i sekunder 600 sekunder skulle vara 10 minuter är standardvärdet.
 findtime = 600 maxretry = 3
Då har vi findtime och maxretry. De är ansvariga för att fastställa villkoren för att en klient ska förbjudas som standard, det kan läsas att alla användare med mer än 3 misslyckade försök på mindre än 10 minuter kommer att förbjudas.
 destemail = root @ localhost sendername = Fail2Ban mta = sendmail
Om vi ​​vill skapa varningar för förbjudna användare, är dessa tre parametrar nödvändiga, vi kommer att definiera destinationen till vilken vi ska skicka varningsmeddelandet, vem som ska skicka det och slutligen mta för att definiera vilken e -posttjänst vi ska använda .
 action = $ (action_) s
Här kommer vi att definiera vilka åtgärder som ska vidtas när ett förbud krävs. Action_ -värdet är standardåtgärden baseras på att avvisa eventuell klientrafik tills förbudstiden löper ut.

Om vi ​​vill skicka en varning via e -post måste vi ändra värdet till action_mw, men om vi också vill att det ska bifoga rader i loggen i e -postens kropp kommer vi att använda action_mwl. Vi måste vara säkra på att e -postinställningarna är korrekta innan vi ändrar detta värde.

Inställningar per tjänst


När de globala konfigurationerna har slutförts kommer vi att lägga till de parametrar som enbart kommer att tillämpas på

SSH -tjänst, vi ser till att lägga till alternativen under taggen [SSH].

 aktiverat = sant
Som standard är SSH -tjänsten aktiverad, men vi kan ändra den om det behövs i det här alternativet.

Allt detta avsnitt kan fungera med de värden som jag kommer att beskriva senare, men du kan ändra det för att anpassa det till dina behov eller lämna dem alla som standard.

En annan av konfigurationerna är filtren som anger om inloggningen var korrekt eller inte och kan läggas till för andra tjänster, till exempel har vi en server med nginx och en del av sidan är lösenordsskyddad, men en klient attackerar med brutal kraft , kan vi stoppa detta genom att lägga till följande under taggen [nginx-http-auth].

 [nginx-http-auth] enabled = true filter = nginx-http-auth port = http, https logpath = /var/log/nginx/error.log
Om en användare har mer än 3 misslyckade inloggningsförsök återspeglas det i loggarna och fail2ban kommer att agera och blockera all användartrafik.

Testmiljö


Efter att ha förstått grunderna kommer vi att göra en liten testmiljö där vi kommer att skydda SSH och Nginx genom Fail2ban genom att skapa en förbudspolicy som meddelar oss om IP som har förbjudits.

Vi installerar Nginx först om det inte är installerat

 apt-get installera nginx
vi kommer att installera en e -posttjänst för aviseringar, det kan vara sendmail
 apt-get install sendmail
äntligen vill vi att våra iptables ska vara beständiga efter en start kan vi antingen skapa ett rc.0-skript eller installera iptables-persistent-paketet.
 apt-get install iptables-persistent
Det kommer att installeras.

Upprätta vår brandvägg


Efter att ha installerat ovanstående måste vi implementera en brandvägg så att den kan blockera trafiken. Jag kommer att skapa en grundläggande brandvägg i senare inlägg. Jag kommer att prata mer om iptables.

Vi tillåter etablerade anslutningar, servertrafik som uppdateringar och trafik avsedd för SSH- och Nginx -portarna. All kvarvarande trafik kommer att nekas.

 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 --dport 22 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPTERA sudo iptables -A INPUT -j DROP
Vi kan se förändringarna med:
 iptables -S
Det borde ge ett liknande 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

Justera Fail2ban -inställningar


Nu måste vi konfigurera jail.local -filen när det passar oss.
 vi /etc/fail2ban/jail.local
Vi kan förlänga tiden en användare är bannad i minst 30 minuter, kom ihåg att ställa in värdet i sekunder.
 bantime = 1800
Vi måste konfigurera ett e -postmeddelande som tar emot alla fail2ban -avstängningsvarningar, låt oss leta efter värdet på e -post i filen och sätta e -postmeddelandet.
 destemail = [email protected]
Vi kan ändra avsändaren som skickar varningen jag brukar placera med namnet fail2ban så att vi bättre kan filtrera mellan alla loggar.

Efter att vi måste ändra åtgärdens värde har vi två alternativ:

  • action_mw: skickar en varning med en rapport som liknar whois -kommandot för den förbjudna klienten.
  • action_mwl: skicka en mycket mer detaljerad varning genom att inkludera en logg i meddelandets brödtext.

I detta kommer vi att använda det andra alternativet:

 åtgärd =% (action_mwl) s 
Sedan går vi till avsnittet [SSH] och vi kan redigera det maximala antalet försök innan förbudet, vi lämnar det vid 5:
 maxretry = 5
Om vi ​​har SSH -tjänsten på en annan port än 22, vilket rekommenderas starkt, måste vi nämna dess port.
 port = 45024
Sedan letar vi efter [nginx-http-auth] -taggen, vi lämnar den som den är.
 [nginx-http-auth] aktiverat = sant
Vi är klara och kan spara och stänga filen.

Starta om tjänsten Fail2ban


För alla ändringar som ska tillämpas rekommenderar jag att du stoppar tjänsten.
 service fail2ban stopp 
Sedan kan vi starta dem igen
 service fail2ban start
Detta kommer att ta ett tag, efter cirka 5 minuter kan vi se våra regler igen 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 --dports 22 -j fail2ban -ssh -A INPUT -i lo -j ACCEPT -A INPUT -m contrack --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 hur fail2ban har lagt till nya policyer, det kan variera beroende på konfigurationen du har definierat i /etc/fail2ban/jail.local.

SlutsatserVi har installerat fail2ban och konfigurerat för att fungera med SSH och NGINX vid APACHE vi måste ändra etiketterna och katalogen för loggarna men det liknar mycket nginx. Vi har bara konfigurerat grunderna, du kan skapa filter och mycket mer avancerade regler, jag rekommenderar att du läser deras man -sida lite, konfigurationsfilerna är välkommenterade, jag rekommenderar att du går gradvis för att upptäcka alla dess funktioner.

Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng
wave wave wave wave wave