Я только что закончил настройку fail2ban на моем обратном прокси-сервере Centos. Мне удалось заставить его блокировать все запросы при соблюдении определенных критериев (довольно просто).
Однако теперь я хотел бы перенаправить пользователей-нарушителей, а не блокировать их. Я знаю, что можно использовать файл настраиваемых действий, но я просто не могу заставить его работать правильно. Я хотел бы перенаправить либо на другой порт на сервере (возможно, запустить Apache с настраиваемой веб-страницей, сообщающей, почему они были перенаправлены), либо на другой веб-сайт полностью.
Есть предположения? Вот моя попытка перенаправления на другой порт (намерение состояло в том, чтобы перенаправить пользователей-нарушителей на порт 8080 на том же сервере). Действие называется firewall-redirect, и оно было получено из firewallcmd-ipset.
# Fail2Ban action file for firewall-cmd/ipset
#
# This requires:
# ipset (package: ipset)
# firewall-cmd (package: firewalld)
#
# This is for ipset protocol 6 (and hopefully later) (ipset v6.14).
# Use ipset -V to see the protocol and version.
#
# IPset was a feature introduced in the linux kernel 2.6.39 and 3.0.0 kernels.
#
# If you are running on an older kernel you make need to patch in external
# modules.
[INCLUDES]
before = iptables-common.conf
[Definition]
actionstart = ipset create fail2ban-<name> hash:ip timeout <bantime>
firewall-cmd --add-forward-port=port=443:proto=tcp:toport=8080 -m set --match-set fail2ban-<name> src
actionstop = firewall-cmd --remove-forward-port=port=443:proto=tcp:toport=8080 -m set --match-set fail2ban-<name> src
ipset flush fail2ban-<name>
ipset destroy fail2ban-<name>
actionban = ipset add fail2ban-<name> <ip> timeout <bantime> -exist
actionunban = ipset del fail2ban-<name> <ip> -exist
[Init]
# Option: chain
# Notes specifies the iptables chain to which the fail2ban rules should be
# added
# Values: [ STRING ]
#
chain = INPUT_direct
# Option: bantime
# Notes: specifies the bantime in seconds (handled internally rather than by fail2ban)
# Values: [ NUM ] Default: 600
bantime = 600
# DEV NOTES:
#
# Author: Edgar Hoch and Daniel Black
# firewallcmd-new / iptables-ipset-proto6 combined for maximium goodness
Кроме того, вот фрагмент ошибки, которую я вижу в файле fail2ban.log. Я понимаю, в чем ошибка, просто не знаю, как ее исправить. :-)
2015-06-01 09:49:05,548 fail2ban.action [11334]: ERROR ipset create fail2ban-apache-gpd_flood hash:ip timeout 3600
firewall-cmd --add-forward-port=port=443:proto=tcp:toport=8080 -m set --match-set fail2ban-apache-gpd_flood src -- stdout: ''
2015-06-01 09:49:05,548 fail2ban.action [11334]: ERROR ipset create fail2ban-apache-gpd_flood hash:ip timeout 3600
firewall-cmd --add-forward-port=port=443:proto=tcp:toport=8080 -m set --match-set fail2ban-apache-gpd_flood src -- stderr: 'usage: see firewall-cmd man page\nfirewall-cmd: error: unrecognized arguments: -m set --match-set fail2ban-apache-gpd_flood src\n'
2015-06-01 09:49:05,549 fail2ban.action [11334]: ERROR ipset create fail2ban-apache-gpd_flood hash:ip timeout 3600
firewall-cmd --add-forward-port=port=443:proto=tcp:toport=8080 -m set --match-set fail2ban-apache-gpd_flood src -- returned 2
2015-06-01 09:49:05,549 fail2ban.actions [11334]: ERROR Failed to start jail 'apache-gpd_flood' action 'firewallcmd-redirect': Error starting action
Заранее спасибо!
Я не уверен, но вот мои предложения:
Вот остается, что ipset не всегда устанавливается вместе с fail2ban. Не могли бы вы проверить, установлен ли у вас ipset?
Ответ на https://serverfault.com/a/671839/118677 предлагает использовать iptables вместо firewalld. Если вы сделаете это, вы можете переписать actionban
так как:
iptables -t nat -A PREROUTING -i eth0 -p tcp -s bannedip --dport 443 -j REDIRECT --to-port 8080
и actionunban
так как:
iptables -t nat -D PREROUTING -i eth0 -p tcp -s bannedip --dport 443 -j REDIRECT --to-port 8080
(видеть Вот).
Ваше время бана (3600) в настоящее время не совпадает со временем бана в разделе Init вашей конфигурации. Видеть Дуэльные таймауты fail2ban и ipset.