Назад | Перейти на главную страницу

Перенаправление Fail2ban

Я только что закончил настройку 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

Заранее спасибо!

Я не уверен, но вот мои предложения:

  1. Вот остается, что ipset не всегда устанавливается вместе с fail2ban. Не могли бы вы проверить, установлен ли у вас ipset?

  2. Ответ на 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 
    

    (видеть Вот).

  3. Ваше время бана (3600) в настоящее время не совпадает со временем бана в разделе Init вашей конфигурации. Видеть Дуэльные таймауты fail2ban и ipset.