De câteva zile primesc atacuri de la niște adrese IP către nginx-ul meu. Am decis să folosesc fail2ban pentru a-l interzice automat, dar am observat că nu funcționează foarte bine. Pot vedea în jurnale că detectează adresa IP, dar nu interzice așa cum era de așteptat.
Dosarul meu de închisoare este:
[nginx-40x-req]
activat = adevărat
bantime.rndtime = 2800
bantime.increment = adevărat
port = http,https
filtru = nginx-40x-req
logpath = /var/log/nginx/access.log
maxretry = 5
si filtrul meu arata cam asa:
[Definiție]
failregex = ^{"status": (400|401|403), "request_time": [0-9\.]+,\s+"remote_addr": "<HOST>",
Pe nginx-ul meu am adăugat o hartă pentru a-i detecta solicitările și returnează 403 când este detectat. Jurnalele arată astfel:
{"status": 403, "request_time": 0.000, "remote_addr": "xx.xx.xx.xx", "@timestamp": "2021-09-03T18:32:34+02:00", "type ": "nginx", "hostname": "vps-e642f340", "host": "d.itsyjd.com", "uri": "/v2/speed_test", "request": "GET https://d .itsyjd.com/v2/speed_test HTTP/1.1”, „request_method”: „GET”, „request_proto”: „http”, „request_proto_proxy”: „-”, „request_uri”: „/v2/speed_test”, „request_args” ": "-", "server_proto": "HTTP/1.1", "body_bytes_sent": 552, "http_referer": "-", "http_user_agent": "Mozilla/5.0 (Linux; Android 8.0; MHA-AL00 Build/HUAWEIMHA) -AL00; wv) AppleWebKit/537.36 (KHTML, ca Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044304 Mobile Safari/537.36 (compatibil; Baiduspider/2.0;+.http://www. search/spider.html)", "msec": 1630686754.923, "upstream_connect_time": -, "upstream_header_time": -, "upstream_response": -, "pipe": "p", "gzip_ratio": "-", "brotli_ratio" ": "-", "remote_user": "-", "bad_request": "1"}
Pe fail2ban-ul meu, pot vedea o mulțime de mesaje care spun că adresa IP a fost detectată:
2021-09-03 18:34:31,494 fail2ban.filter [32586]: INFORMAȚII [nginx-40x-req] Găsit xx.xx.xx.xx - 2021-09-03 18:29:33
Dar încă nu interzice acele adrese IP.
Un lucru pe care l-am observat este că viteza de citire fail2ban este mai mică decât viteza de jurnal, așa că am început să cred că poate asta este problema, pentru că atunci când acele IP sunt interzise și fail2ban citește în timp real, atunci alte adrese IP sunt interzise fără probleme. . Max_retry este 5 și toate adresele IP au fost detectate de mai mult de 5 ori, așa că trebuie să fie interzise.
Oricine știe ce pot greși (pentru că cu siguranță este ceva ce nu văd).
Toate cele bune.
EDIT: După ce am scris acest mesaj, am văzut că este interzis, dar funcționează foarte lent. În aproximativ 15 minute a interzis aproximativ 4 adrese IP de la aproximativ 11, când în fiecare secundă sunt detectate de multe ori.
EDIT2: Ștergerea jurnalului cu o simplă echo "" > <fișier jurnal>
a declanșat interdicțiile.
Versiunea mea fail2ban este 0.10.2
Cu atacatorul problematic interzis și primind doar câteva solicitări, fail2ban citește în timp real și interzice:
2021-09-03 18:46:13,759 fail2ban.filter [32586]: INFORMAȚII [nginx-40x-req] S-au găsit XX.XX.XX.XX - 2021-09-03 18:46:13
2021-09-03 18:46:13,909 fail2ban.actions [32586]: NOTIFICARE [nginx-40x-req] Ban XX.XX.XX.XX
2021-09-03 18:46:18,855 fail2ban.filter [32586]: INFORMAȚII [nginx-40x-req] S-au găsit XX.XX.XX.XX - 2021-09-03 18:46:18
2021-09-03 18:47:07,004 fail2ban.filter [32586]: INFORMAȚII [nginx-40x-req] S-au găsit XX.XX.XX.XX - 2021-09-03 18:47:06
2021-09-03 18:48:34,390 fail2ban.filter [32586]: INFORMAȚII [nginx-40x-req] S-au găsit XX.XX.XX.XX - 2021-09-03 18:48:34
2021-09-03 18:48:54,230 fail2ban.filter [32586]: INFORMAȚII [nginx-40x-req] S-au găsit XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,231 fail2ban.filter [32586]: INFORMAȚII [nginx-40x-req] S-au găsit XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,231 fail2ban.filter [32586]: INFORMAȚII [nginx-40x-req] S-au găsit XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,335 fail2ban.actions [32586]: NOTIFICARE [nginx-40x-req] Ban XX.XX.XX.XX
2021-09-03 18:50:08,488 fail2ban.filter [32586]: INFORMAȚII [nginx-40x-req] S-au găsit XX.XX.XX.XX - 2021-09-03 18:50:08
Deci tot ma gandesc ca problema poate este viteza de citire.
EDIT3:
În cele din urmă, am actualizat versiunea fail2ban la 0.11.2, am adăugat un datepattern și am schimbat detectorul de adrese. Acum pare să citești fișierul nginx mult mai repede.
[Definiție]
failregex = ^{"stare": (400|401|403), "request_time": [0-9\.]+,\s+"remote_addr": "<ADDR>",
datapattern = "@timestamp": "%%Y-%%m-%%dT%%H:%%M:%%S%%z"