Kako osigurati NGINX s prilagođenim filterima Fail2ban

Fail2Ban je izvrsna sigurnosna mjera za implementaciju za vaš poslužitelj web aplikacija. Dolazi s nizom značajki, zadanih filtara i radnji koje mogu odmah utjecati na zabranu loših web botova, iscrpljivanje resursa vašeg sustava i zaustavljanje napada, što je najvažniji dio svake web stranice.

Međutim, većina ljudi administratori sustava i vlasnici web stranica ponekad traže nešto više od onoga što fail2ban može ponuditi. U sljedećem vodiču naučit ćete kako stvoriti i koristiti prilagođene filtre na vašem Nginx poslužitelju, koji se mogu fino prilagoditi vašim potrebama i kasnije proširiti.

Svakako testirajte i oprezno koristite sve nove filtere fail2ban. Imajte na umu da će postavke morati biti prilagođene vašim potrebama.

Dodajte nove Fail2Ban zatvore

Vodič pretpostavlja da imate instaliran Fail2ban i da ste upoznati s načinom konfiguriranja zatvora i postavki. U nastavku su neki dodatni zatvori koje ćete morati podesiti po svom ukusu ako koristite daljnje radnje zabrane kao što je Cloudflare ili prijavljivanje na AbuseIPDB.org itd.

Dodajte sljedeće zatvore koje želite koristiti u svoju /fail2ban/jail.local datoteku.

sudo nano /etc/fail2ban/jail.local
[nginx-403]
 enabled = true
 port     = http,https
 filter = nginx-403
 action = iptables-allports
 logpath = %(nginx_access_log)s
 bantime = 1440m # 1 day
 findtime = 1440m # 1 day
 maxretry = 4

[nginx-noagent]
 enabled = true
 port     = http,https
 filter = nginx-noagent
 action = iptables-allports
 logpath = %(nginx_access_log)s
 bantime = 1440m # 1 day
 findtime = 1440m # 1 day
 maxretry = 3

[nginx-noauth]
 enabled = true
 filter = nginx-noauth
 action = iptables-allports
 logpath = %(nginx_error_log)s
 bantime = 1440m # 1 day
 findtime = 1440m # 1 day
 maxretry = 5

[nginx-nologin]
 enabled = true
 filter = nginx-nologin
 action = iptables-allports
 logpath = %(nginx_access_log)s
 bantime = 1440m # 1 day
 findtime = 1440m # 1 day
 maxretry = 5

[nginx-noscript]
 enabled = true
 action = iptables-allports
 filter = nginx-noscript
 logpath = %(nginx_access_log)s
 bantime = 1440m # 1 day
 findtime = 1440m # 1 day
 maxretry = 3

[nginx-noproxy]
 enabled = true
 action = iptables-allports
 filter = nginx-noproxy
 logpath = %(nginx_access_log)s
 bantime = 1440m # 1 day
 findtime = 1440m # 1 day
 maxretry = 0

[nginx-nowordpress]
 enabled = true
 action = iptables-allports
 filter = nginx-nowordpress
 logpath = %(nginx_access_log)s
 bantime = 1440m # 1 day
 findtime = 1440m # 1 day
 maxretry = 3

[portscan-block]
 enabled = true
 action = iptables-allports
 filter = portscan-block
 logpath = %(ufw_log)s
 bantime = 1440m # 1 day
 findtime = 1440m # 1 day
 maxretry = 5

Oglas


Napravite nove Fail2Ban filtere

Zatim morate napraviti novu datoteku filtera za svaki od ovih filtara i staviti .konf na kraju datoteke.

Imajte na umu da je kreirana datoteka nešto što morate učiniti sami.

create file /location/fail2ban/filter.d/nginx-403.conf

 [Definition]
 failregex = ^ -."(GET|POST|HEAD).HTTP.*" 403
 ignoreregex =

create file /location/fail2ban/filter.d/nginx-noagent.conf

 [Definition]
 failregex = ^ -."-" "-"$             ^ -."-" "curl.*"$
 ignoreregex =

create file /location/fail2ban/filter.d/nginx-noauth.conf

 [Definition]
 failregex = no user/password was provided for basic authentication.client:              user . was not found in.client:              user . password mismatch.*client: 
 ignoreregex =

create file /location/fail2ban/filter.d/nginx-nologin.conf
 [Definition]
 failregex = ^ -.*POST /sessions HTTP/1.." 200
 ignoreregex =

create file /location/fail2ban/filter.d/nginx-noscript.conf
 [Definition]
 failregex = ^ -.GET.(.php|.asp|.exe|.pl|.cgi|\scgi)
 ignoreregex =

 create file /location/fail2ban/filter.d/nginx-noproxy.conf
 [Definition]
 failregex = ^ -.GET http.
 ignoreregex =

create file /location/fail2ban/filter.d/nginx-nowordpress.conf

 [Definition]
 failregex = ^ .* "(GET|POST|HEAD) /+(?i)(wp(-|/)|xmlrpc.php|\?author=1)
             ^ .* "(GET|POST|HEAD|PROPFIND) /+(?i)(a2billing|admin|apache|axis|blog|cfide|cgi|cms|config|etc|.git|hnap|inc|jenkins|jmx-|joomla|lib|linuxsucks|msd|muieblackcat|mysql|myadmin|n0w|owa-autodiscover|pbxip|pma|recordings|sap|sdk|script|service|shell|sqlite|vmskdl44rededd|vtigercrm|w00tw00t|webdav|websql|wordpress|xampp|xxbb)
             ^ .* "(GET|POST|HEAD) /[^"]+.(asp|cgi|exe|jsp|mvc|pl)( |\?)
             ^ .*(?i)(/bash|burger-imperia|changelog|hundejo|hvd-store|jorgee|masscan|pizza-imperia|pizza-tycoon|servlet|testproxy|uploadify)
 ignoreregex =
 journalmatch = _SYSTEMD_UNIT=nginx.service + _COMM=nginx

create file /location/fail2ban/filter.d/portscan-block.conf

 [Definition]
 failregex = .[UFW BLOCK] IN=. SRC=
 ignore common multicast device discovery calls on LOCAL IPv4/IPv6 networks
 still ban non-local (WAN) calls to any associated ports
 ignoreregex = SRC=(10.|172.1[6-9].|172.2[0-9].|172.3[0-1].|192.168.|fe\w:). DST=(static.ip.address.here|224.0.0.). PROTO=(2|UDP)(\s+|.* DPT=(1900|3702|5353|5355) LEN=\d*\s+)$

Testirajte nove Fail2ban zatvore/filtre

Da biste to dovršili, obavezno ponovno pokrenite fail2ban u svom operativnom sustavu putem njegove naredbe.

Za većinu Linux distribucija, sljedeća naredba trebala bi raditi ako se izvodi systemd.

sudo systemctl restart fail2ban

Druge ne-systemd distribucije ili drugi sustavi ponovno pokreću vaš sustav ili fail2ban uslugu.

Nakon što se fail2ban ponovno pokrene, pokrenite sljedeću naredbu statusa fail2ban-client da biste vidjeli zatvor.

sudo fail2ban-client status nginx-noscripts

Primjer rezultata:

Status for the jail: nginx-noscripts
 |- Filter
 | |- Currently failed: 0
 | |- Total failed: 0
 | - File list: /var/log/nginx/access.log - Actions
 |- Currently banned: 95
 |- Total banned: 107
 `- Banned IP list:

Kao što je prikazano iznad, imate 95 IP adresa zabranjenih, s ukupno 107 uključujući aktivne i neaktivne povijesne zabrane.


Oglas


Komentari i zaključak

Naučili ste kako konfigurirati neke dodatne zatvore za svoju fail2ban konfiguraciju za vaš Nginx poslužitelj u vodiču. Općenito, možete postići izvrsnu sigurnost na strani poslužitelja, filtere je moguće prilagoditi i podesiti, a ono što je prikazano je samo kratak o tome što se još može učiniti kako bi odgovaralo specifičnim situacijama i potrebama.

Jedini nedostatak kod fail2ban-a je pokretanje klastera poslužitelja, za sada, to nije izvodljivo osim ako ne koristite Cloudflare i blokirate ih na obrnutom proxyju, na primjer, ali za operatere s jednim poslužiteljem, možete praktički zaključati svoj poslužitelj kao fort Knox.

15 misli o "Kako osigurati NGINX s prilagođenim Fail2ban filterima"

  1. Bok tege! Bi li vam smetalo ako podijelim vaš blog sa svojim myspaceom
    skupina? Mnogo je ljudi za koje mislim da bi vas jako cijenili
    sadržaj. Molim te obavijesti me. Hvala

    odgovor
    • Pozdrav Mortaring,

      Svakako druže nema problema. Samo molim vas stavite link na članke na kraju (backlink) ako možete da mi pomognete, to je sve što tražim zauzvrat ako je moguće 🙂

      Hvala na poruci.

      odgovor
  2. Pozdrav,
    habe bereits Fail2Ban laufen mit 13 zatvora.
    Habe jetzt Deinen nginx-nowordpress Jail in meine Jail.local hinzugefügt und auch die nginx-nowordpress erstellt.
    Nach service fail2ban restart habe ich aber auf einmal nur noch 12 Jails, eigentlich müssten es aber 14 sein.

    2 Jails die nicht in der Jail.local sind, sondern in xy.local und xyz.local sind također weg…

    odgovor
    • Pozdrav,

      Kada se zatvor ne pojavi, to znači da nešto nije u redu s filterom/zatvorom.

      Koju verziju fail2ban-a koristite i na kojoj platformi? Vodič je napravljen s jednom od najnovijih verzija fail2ban-a, ali starije verzije mogu se malo poigrati ako mi možete javiti da ću testirati na svojoj strani.

      Drugo, uklonite journalmatch = _SYSTEMD_UNIT=nginx.service + _COMM=nginx, možda ovisno o vašoj verziji, stvarate li zasebne zatvore od onoga što ja razumijem? Možda je negdje samo netočna sintaksa.

      Javite mi i ja ću istražiti, jer na mojoj strani radi dobro uz ponovnu provjeru pomoću jedne od najnovijih verzija.

      Hvala

      Prijevod: https://www.linuxcapable.com/de/So-sichern-Sie-Nginx-mit-benutzerdefinierten-fail2ban-Filtern/

      odgovor
      • Bok,

        Ponovno sam provjerio zatvor bez WordPressa. Uklonjeno "journalmatch = _SYSTEMD_UNIT=nginx.service + _COMM=nginx" iz filtra. => Nakon toga jedan od mojih već postojećih zatvora više ne radi. Onemogućen vaš no-wordpress zatvor => svi moji zatvori ponovno rade.

        Isprobao svoj portscan-block zatvor uklj. filter. => Fail2ban se više ne pokreće. Morate ponovo onemogućiti svoj zatvor.

        odgovor
      • Pokušao sam ponovo zatvor bez WordPressa, uklonio "journalmatch = _SYSTEMD_UNIT=nginx.service + _COMM=nginx" iz filtera. => jedan od mojih već postojećih zatvora više ne radi. Onemogućio sam tvoj zatvor bez WordPressa, svi moji zatvori opet rade.

        Pokušao i portscan-block jail => fail2ban se više ne pokreće. Morate ponovo onemogućiti svoj zatvor i opet je sve u redu

        odgovor
        • Bok, Michael,

          Možete li mi nekako poslati svoje Fail2ban konfiguracijske datoteke? Nisam siguran imate li Github račun za kreiranje privatne probne grane ili nešto slično. Želim uzeti vaše postavke i testirati ih na svojoj strani.

          Ako je to previše posla ili niste sigurni, pošaljite mi samo svoj jail.local, + dodane filtere contact@linuxcapable.com, molim. Imamo istu postavku, nešto se događa ako dobijem ove datoteke možda mogu još malo pomoći i vidjeti što se događa 🙂

          AKO imate bilo kakve osjetljive informacije poput IP adrese ili e-pošte u konfiguracijskim datotekama, uklonite ih. Ionako sam jedini koji ima pristup.

          odgovor
  3. Vau, to je bio brz odgovor, hvala.
    Ja sam na Ubuntu 20.4 LTS s Fail2Ban V 1.57 (najnovije koje dobijete s apt ažuriranjem).
    Ne, imam 11 od 13 zatvora u zatvoru.local. Samo su 2 zatvora u odvojenim zatvorima iz bilo kojeg razloga...

    Hvala na provjeri

    Michael

    odgovor
    • bok michael,

      Koristio sam istu distro/fail2ban verziju za provjeru. Jeste li provjerili svoj fail2ban zapisnik?

      grep ne uspijeva /var/log/fail2ban.log

      ili grep greška /var/log/fail2ban.log

      Ako ovo ne radi, ponovno učitajte svoje zatvore, a zatim ručno otvorite dnevnik i pogledajte zašto se zatvor ne učitava, trebalo bi vam dati razlog zašto bi trebalo otkriti nešto korisno, jer kada se zatvori ne učitavaju to je obično problem sintakse, i možemo isključiti da nije kompatibilan s vašom verzijom, koristite ga s Nginxom?

      Hvala.

      odgovor
  4. Da s Nginxom, pokušat ću promijeniti sintaksu za filtar kao što je predloženo u vašem prvom citatu...

    Ali za sada moram u krevet :)

    Hvala na brzoj pomoći do sada :)

    odgovor

Ostavite komentar