Installer Fail2ban og tilknyt det til SSH og Nginx

Når vi har monteret en server med Linux, og vi vil styre den fra internettet via SSH -fjernbetjening, kan det ske, at vi begynder at modtage angreb med det formål at komme ind i systemet og kunne styre det til dets formål. Disse angreb udføres normalt af computerprogrammer (bots), der i lang tid forsøger at få adgang til systemet ved hjælp af brutal kraft.

I tidligere indlæg har jeg talt om, hvordan man konfigurerer SSH -tjenesten, men nogle avancerede bots kommer ikke ind i tjenesten, men de kan dræbe SSH -tjenesten på serveren ved at deaktivere fjernadgang.

Komplet manual til SSH (Secure Shell)

Vi kan undgå det ved at bruge fail2ban værktøj, er meget praktisk og giver en stor sikkerhedsmargin. For at forklare lidt hvordan det fungerer. Det er i stand til at oprette iptables før et mislykket loginforsøg mere end 5 gange i træk, og afvise enhver form for forbindelse, når det er blevet forbudt.

Installer Fail2ban


Installationen kan udføres direkte fra apt. Først opdaterer vi systemet, og derefter installerer vi Fail2ban.
 apt-get opdatering && apt-get -y opgradering
 apt-get install fail2ban
Dette installerer ikke kun programmet, men lader det også køre og starte med systemet.

Konfiguration af Fail2ban


Fail2ban -tjenesten har sine indstillinger i biblioteket / etc / fail2ban. Du har nogle forudkonfigurerede muligheder i jail.conf, det bedste i dette tilfælde er at kopiere filen og ikke foretage ændringerne direkte i den, når opdatering af fail2ban overskrives disse filer, og du kan miste alle de ændringer, der er foretaget tidligere.

I dette tilfælde kopierer vi filen og kalder den jail.local, så den kan finde den.

 sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Når det er kopieret, kan vi åbne det og se, hvordan det fungerer.
 vim /etc/fail2ban/jail.local
Inde i filen har vi flere parametre, som vi kan justere. Enhver parameter, der er under [DEFAULT] -tagget, vil blive anvendt på alle de tjenester, der er aktiveret af Fail2ban, såsom SSH, NGINX, APACHE, vi kalder dette globalt, så har vi specifikke sektioner for hver service.

Vi starter med at tilføje parametre til den globale sektion.

 ignorip = 127.0.0.1
Vi tilføjer vores localhost på denne måde, det ignorerer al lokal trafik, vi kan tilføje yderligere adresser, der adskiller dem med et mellemrum.
 bantime = 600
Bantime er den periode, hvor klienten vil blive udelukket efter at være blevet blokeret. Enheden er i sekunder 600 sekunder ville være 10 minutter er standardværdien.
 findtime = 600 maxretry = 3
Så har vi findetid og maxretry. De er ansvarlige for at fastsætte betingelserne for, at en klient som standard kan udelukkes, det kan læses, at enhver bruger med mere end 3 mislykkede forsøg på mindre end 10 minutter vil blive forbudt.
 destemail = root @ localhost sendername = Fail2Ban mta = sendmail
Hvis vi vil oprette advarsler til forbudte brugere, er disse 3 parametre nødvendige, vi definerer destinationen, til hvem vi skal sende advarsels -e -mailen, hvem der skal stå for at sende den, og til sidst mta for at definere, hvilken e -mail -service vi vil bruge .
 handling = $ (action_) s
Her vil vi definere, hvilken handling der skal foretages, når et forbud er påkrævet. Action_ -værdien er standardhandlingen er baseret på at afvise enhver klientrafik, indtil forbudstiden udløber.

Hvis vi vil sende en advarsel via mail, skal vi ændre værdien til action_mw, men hvis vi også vil have den til at vedhæfte linjer i loggen i mailens brødtekst, vil vi bruge action_mwl. Vi skal være sikre på, at mailindstillingerne er korrekte, før vi ændrer denne værdi.

Indstillinger efter service


Når de globale konfigurationer er gennemført, tilføjer vi de parametre, der udelukkende anvendes på

SSH -service, vi sørger for at tilføje mulighederne under [SSH] -tagget.

 aktiveret = sandt
Som standard er SSH -tjenesten aktiveret, men vi kan om nødvendigt ændre den i denne indstilling.

Hele dette afsnit kan fungere med de værdier, som jeg vil beskrive senere, men du kan ændre det for at tilpasse det til dine behov eller efterlade dem som standard.

En anden af ​​konfigurationerne er filtre, der angiver, om login var korrekt eller ej og kan tilføjes til andre tjenester, for eksempel har vi en server med nginx, og en del af siden er beskyttet med adgangskode, men en klient angriber med brutal kraft , kan vi stoppe dette ved at tilføje følgende under [nginx-http-auth] -tagget.

 [nginx-http-auth] enabled = true filter = nginx-http-auth port = http, https logpath = /var/log/nginx/error.log
Hvis en bruger nu har mere end 3 mislykkede loginforsøg, afspejles det i logfilerne, og fail2ban vil handle og blokere al brugertrafik.

Testmiljø


Efter at have forstået det grundlæggende, vil vi lave et lille testmiljø, hvor vi vil beskytte SSH og Nginx gennem Fail2ban ved at oprette en forbudspolitik, der giver os besked om den IP, der er blevet forbudt.

Vi installerer Nginx først, hvis det ikke er installeret

 apt-get installer nginx
vi installerer en mailtjeneste til meddelelser, det kan være sendmail
 apt-get install sendmail
endelig ønsker vi, at vores iptables skal være vedholdende efter en opstart, vi kan enten oprette et rc.0-script eller installere iptables-persistent-pakken.
 apt-get install iptables-persistent
Det vil blive installeret.

Etablering af vores firewall


Efter installation af ovenstående skal vi implementere en firewall, så den kan blokere trafikken. Jeg vil oprette en grundlæggende firewall i senere indlæg, jeg vil tale mere om iptables.

Vi tillader etablerede forbindelser, servertrafik såsom opdateringer og trafik bestemt til SSH- og Nginx -portene. Al resterende trafik nægtes.

 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 ACCEPTER sudo iptables -A INPUT -j DROP
Vi kan se ændringerne med:
 iptables -S
Det skulle give 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

Justering af Fail2ban -indstillinger


Nu skal vi konfigurere jail.local -filen når det passer os.
 vi /etc/fail2ban/jail.local
Vi kan forlænge den tid, en bruger er udelukket i mindst 30 minutter, husk at indstille værdien i sekunder.
 bantime = 1800
Vi skal konfigurere en e -mail, der modtager alle fail2ban ban -advarsler, lad os se efter værdien af ​​e -mail i filen og sætte e -mailen.
 destemail = [email protected]
Vi kan ændre afsenderen, der sender den advarsel, jeg normalt placerer med navnet fail2ban, så vi bedre kan filtrere mellem alle logfiler.

Efter at vi skal ændre handlingsværdien, har vi 2 muligheder:

  • action_mw: sender en advarsel med en rapport svarende til whois -kommandoen for den forbudte klient.
  • action_mwl: send en meget mere detaljeret advarsel ved at inkludere en log i meddelelsens brødtekst.

I dette vil vi bruge den anden mulighed:

 handling =% (action_mwl) s 
Derefter går vi til sektionen [SSH], og vi kan redigere det maksimale antal forsøg før forbuddet, vi forlader det klokken 5:
 maxretry = 5
Hvis vi har SSH -tjenesten på en anden havn end 22, hvilket stærkt kan anbefales, skal vi nævne dens port.
 port = 45024
Derefter leder vi efter [nginx-http-auth] -tagget, vi lader det være som det er.
 [nginx-http-auth] aktiveret = sandt
Vi er færdige og kan gemme og lukke filen.

Genstart af Fail2ban -tjenesten


For alle de ændringer, der skal anvendes, anbefaler jeg, at du stopper tjenesten.
 service fail2ban stop 
Så kan vi starte dem igen
 service fail2ban start
Dette vil tage et stykke tid, efter cirka 5 minutter kan vi se vores 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 --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 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, hvordan fail2ban har tilføjet nye politikker. Det kan variere afhængigt af den konfiguration, du har defineret i /etc/fail2ban/jail.local.

KonklusionerVi har installeret fail2ban og konfigureret til at arbejde med SSH og NGINX i tilfælde af APACHE, vi skal ændre etiketterne og bibliotekets logfiler, men det ligner meget nginx. Vi har kun konfigureret det grundlæggende, du kan oprette filtre og meget mere avancerede regler, jeg anbefaler at læse deres man -side lidt, konfigurationsfilerne er godt kommenteret, jeg anbefaler at gå lidt efter lidt for at opdage alle dens funktioner.

Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt
wave wave wave wave wave