У меня такая тюрьма:
##To stop DOS attack from remote host.
[http-get-dos]
enabled = true
port = http,https
filter = http-get-dos
logpath = /usr/local/nginx/localhost-access.log
maxretry = 100
findtime = 300
bantime = 6000
action = iptables[name=HTTP, port=http, protocol=tcp]
Status for the jail: http-get-dos
|- Filter
| |- Currently failed: 18
| |- Total failed: 99871
| `- File list: /usr/local/nginx/localhost-access.log
`- Actions
|- Currently banned: 2
|- Total banned: 5
`- Banned IP list: 94.60.20.166 193.112.177.8
Однако после запуска fail2ban-client status http-get-dos
, где IP-адрес отмечен как заблокированный, я все еще получаю много входящих запросов с заблокированного IP-адреса, что приведет к высокой загрузке ЦП:
193.112.177.8 - - [01/Jul/2019:17:48:59 +0100] "GET /companies/xxx HTTP/1.1" 200 18935 "https://example.com/companies/xxx" "shelby/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0"
193.112.177.8 - - [01/Jul/2019:17:48:59 +0100] "GET /companies/xxx HTTP/1.1" 200 18935 "https://example.com/companies/xxx" "asdfgh/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0"
193.112.177.8 - - [01/Jul/2019:17:49:00 +0100] "GET /companies/xxx HTTP/1.1" 200 18935 "https://example.com/companies/xxx" "tigger/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0"
...
Теперь, если я это сделаю:
iptables -A INPUT -s 193.112.177.8 -j DROP
Больше запросов с этого IP в логах не вижу. Возникает вопрос, почему бан от fail2ban не работает, как указано выше?
Я считаю, что ваш сайт https
и поэтому вы все еще получаете запросы, потому что вы не баните https
но только http
Правильное действие
action = iptables-multiport[name=HTTP, port="http,https", protocol=tcp]