Installeer Fail2ban en koppel het aan SSH en Nginx

Wanneer we een server met Linux hebben aangekoppeld en deze vanaf internet willen beheren via SSH-afstandsbediening, kan het gebeuren dat we aanvallen beginnen te ontvangen met als doel het systeem binnen te gaan en het voor zijn doeleinden te kunnen besturen. Deze aanvallen worden meestal uitgevoerd door computerprogramma's (bots) die gedurende lange tijd met brute kracht toegang tot het systeem proberen te krijgen.

In eerdere berichten heb ik het gehad over het configureren van de SSH-service, maar sommige geavanceerde bots komen niet in de service, maar ze kunnen de SSH-service op de server uitschakelen door externe toegang uit te schakelen.

Volledige handleiding van SSH (Secure Shell)

We kunnen het vermijden door de fail2ban-tool, is zeer praktisch en biedt een grote veiligheidsmarge. Om even uit te leggen hoe het werkt. Het is in staat om iptables aan te maken vóór een mislukte inlogpoging voor meer dan 5 keer achter elkaar, waarbij elk type verbinding wordt geweigerd zodra het is verbannen.

Installeer Fail2ban


De installatie kan rechtstreeks vanuit apt worden gedaan. Eerst updaten we het systeem en daarna installeren we Fail2ban.
 apt-get update && apt-get -y upgrade
 apt-get install fail2ban
Dit installeert niet alleen het programma, maar laat het ook draaien en beginnen met het systeem.

Fail2ban configureren


De Fail2ban-service heeft zijn instellingen in de directory / etc / fail2ban. Je hebt een aantal voorgeconfigureerde opties in jail.conf, in dit geval is het het beste om het bestand te kopiëren en de wijzigingen er niet direct in aan te brengen, bij het bijwerken van fail2ban worden deze bestanden overschreven en kun je alle eerder gemaakte wijzigingen kwijtraken.

In dit geval kopiëren we het bestand en noemen het jail.local zodat het het kan vinden.

 sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Eenmaal gekopieerd, kunnen we het openen en zien hoe het werkt.
 vim /etc/fail2ban/jail.local
In het bestand hebben we verschillende parameters die we kunnen aanpassen. Elke parameter die onder de [DEFAULT]-tag staat, wordt toegepast op alle services die door Fail2ban zijn ingeschakeld, zoals SSH, NGINX, APACHE, we zullen dit globaal noemen, dan hebben we specifieke secties voor elke service.

We beginnen met het toevoegen van parameters aan de globale sectie.

 negeerip = 127.0.0.1
We voegen onze localhost toe op deze manier dat het al het lokale verkeer negeert, we kunnen extra adressen toevoegen die ze scheiden door een spatie.
 bantime = 600
De bantime is de periode dat de klant wordt verbannen nadat hij is geblokkeerd. De eenheid is in seconden 600 seconden zou 10 minuten zijn, is de standaardwaarde.
 vindtijd = 600 maxretry = 3
Dan hebben we findtime en maxretry. Zij zijn verantwoordelijk voor het vaststellen van de voorwaarden waaronder een client standaard wordt verbannen. Er kan worden gelezen dat elke gebruiker met meer dan 3 mislukte pogingen in minder dan 10 minuten zal worden verbannen.
 destemail = root @ localhost afzendernaam = Fail2Ban mta = sendmail
Als we waarschuwingen voor verbannen gebruikers willen maken, zijn deze 3 parameters nodig, we zullen de bestemming definiëren naar wie de waarschuwingse-mail moet worden verzonden, wie de e-mail zal verzenden en tot slot de mta om te bepalen welke e-mailservice we zullen gebruiken .
 actie = $ (action_) s
Hier zullen we bepalen welke actie moet worden ondernomen wanneer een verbod vereist is. De action_-waarde is de standaardactie die is gebaseerd op het weigeren van klantverkeer totdat de bantijd is verstreken.

Als we een waarschuwing per e-mail willen verzenden, moeten we de waarde wijzigen in action_mw, maar als we ook regels van het logboek in de hoofdtekst van de e-mail willen toevoegen, gebruiken we action_mwl. We moeten er zeker van zijn dat de e-mailinstellingen correct zijn voordat we deze waarde wijzigen.

Instellingen per service


Zodra de globale configuraties zijn voltooid, zullen we de parameters toevoegen die exclusief worden toegepast op de

SSH-service, zorgen we ervoor dat de opties onder de [SSH]-tag worden toegevoegd.

 ingeschakeld = waar
Standaard is de SSH-service ingeschakeld, maar we kunnen deze indien nodig wijzigen in deze optie.

Al deze secties zouden kunnen werken met de waarden die ik later zal beschrijven, maar u kunt deze wijzigen om deze aan uw behoeften aan te passen of ze allemaal standaard laten.

Een andere van de configuraties zijn de filters die aangeven of de login correct was of niet en kunnen worden toegevoegd voor andere services, we hebben bijvoorbeeld een server met nginx en een deel van de pagina is beveiligd met een wachtwoord, maar een client valt met brute kracht aan , kunnen we dit stoppen door het volgende toe te voegen onder de tag [nginx-http-auth].

 [nginx-http-auth] ingeschakeld = true filter = nginx-http-auth port = http, https logpath = /var/log/nginx/error.log
Als een gebruiker nu meer dan 3 mislukte inlogpogingen heeft, wordt dit weergegeven in de logs en zal fail2ban optreden en al het gebruikersverkeer blokkeren.

Test omgeving


Nadat we de basis hebben begrepen, zullen we een kleine testomgeving doen waar we SSH en Nginx zullen beschermen via Fail2ban door een banbeleid te creëren dat ons op de hoogte stelt van het IP dat is verbannen.

We zullen Nginx eerst installeren als het niet is geïnstalleerd

 apt-get install nginx
we zullen een e-mailservice installeren voor meldingen, dit kan sendmail zijn
 apt-get install sendmail
tot slot willen we dat onze iptables persistent zijn na het opstarten. We kunnen ofwel een rc.0-script maken of het iptables-persistent pakket installeren.
 apt-get install iptables-persistent
Het zal worden geïnstalleerd.

Onze firewall opzetten


Na het installeren van het bovenstaande moeten we een firewall implementeren zodat deze het verkeer kan blokkeren. Ik zal een basisfirewall maken in latere berichten. Ik zal meer vertellen over iptables.

We zullen gevestigde verbindingen, serververkeer zoals updates en verkeer dat bestemd is voor de SSH- en Nginx-poorten toestaan. Al het overige verkeer wordt geweigerd.

 sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A INPUT -m conntrack --ctstate VASTGESTELD, GERELATEERD -j ACCEPT sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -j DROP
We kunnen de veranderingen zien met:
 iptables -S
Het zou een vergelijkbaar resultaat moeten geven.
 -P INGANG ACCEPT -P VOORUIT ACCEPT -P OUTPUT ACCEPT -N fail2ban-ssh -A INGANG -p tcp -m multipoort --dports 22 -j fail2ban-ssh -A INGANG -i lo -j ACCEPT -A INGANG -m conntrack --ctstate GERELATEERD, VASTGESTELD -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 -ssh -j RETURN

Fail2ban-instellingen aanpassen


Nu moeten we het jail.local-bestand op ons gemak configureren.
 vi /etc/fail2ban/jail.local
We kunnen de tijd dat een gebruiker wordt verbannen voor ten minste 30 minuten verlengen, vergeet niet om de waarde in seconden in te stellen.
 bantime = 1800
We moeten een e-mail configureren die alle fail2ban-ban-waarschuwingen ontvangt, laten we de waarde van e-mail in het bestand zoeken en de e-mail plaatsen.
 destemail = [email protected]
We kunnen de afzender wijzigen die de waarschuwing verzendt die ik meestal plaats met de naam fail2ban, zodat we beter kunnen filteren tussen alle logs.

Nadat we de waarde van actie moeten wijzigen, hebben we 2 opties:

  • action_mw: stuurt een waarschuwing met een rapport vergelijkbaar met het whois-commando van de verbannen client.
  • action_mwl: stuur een veel gedetailleerdere waarschuwing door een log in de hoofdtekst van het bericht op te nemen.

Hierbij gebruiken we de tweede optie:

 actie =% (action_mwl) s 
Dan gaan we naar de [SSH]-sectie en kunnen we het maximale aantal pogingen voor de ban aanpassen, we laten het op 5:
 maxretry = 5
Als we de SSH-service op een andere poort dan 22 hebben, wat ten zeerste wordt aanbevolen, moeten we de poort ervan vermelden.
 poort = 45024
Dan gaan we op zoek naar de [nginx-http-auth]-tag, we laten het zoals het is.
 [nginx-http-auth] ingeschakeld = waar
We zijn klaar en kunnen het bestand opslaan en sluiten.

De Fail2ban-service opnieuw starten


Voor alle wijzigingen die moeten worden toegepast, raad ik aan de service te stoppen.
 service fail2ban stop 
Dan kunnen we ze weer starten
 service fail2ban start
Dit duurt even, na ongeveer 5 minuten kunnen we onze regels weer zien met
 iptables -S
 -P INGANG ACCEPTEREN -P VOORUIT ACCEPTEREN -P UITVOER ACCEPTEREN -N fail2ban-nginx-http-auth -N fail2ban-ssh -A INGANG -p tcp -m multiport --dports 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 conntrack --ctstate GERELATEERD, GEVESTIGD -j ACCEPT -A INPUT -p tcp -m tcp - -dport 22 -j ACCEPTEREN -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
We zien hoe fail2ban nieuw beleid heeft toegevoegd, dit kan variëren afhankelijk van de configuratie die je hebt gedefinieerd in /etc/fail2ban/jail.local.

conclusiesWe hebben fail2ban geïnstalleerd en geconfigureerd om te werken met SSH en NGINX in het geval van APACHE moeten we de labels en de directory van de logs wijzigen, maar het lijkt erg op nginx. We hebben alleen de basis geconfigureerd, je kunt filters maken en veel meer geavanceerde regels, ik raad aan hun man-pagina een beetje te lezen, de configuratiebestanden zijn goed becommentarieerd, ik raad aan om beetje bij beetje alle functies te ontdekken.

Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een ​​positief punt te geven
wave wave wave wave wave