
Я хочу создать действие fail2ban, которое при запрете направляет трафик на другой IP-адрес и удаляет маршрут при разблокировке.
Файл: iptables-route.conf в /etc/fail2ban/action.d/
# Fail2Ban configuration file
#
#
[INCLUDES]
before = iptables-common.conf
[Definition]
# Option: actionstart
# Notes.: command executed once at the start of Fail2Ban.
# Values: CMD
#
actionstart = <iptables> -N f2b-<name>
<iptables> -A f2b-<name> -j <returntype>
<iptables> -I <chain> -p <protocol> -m multiport --dports <port> -j f2b-<name>
<iptables> -A FORWARD -i ens3 -p tcp -m state --state NEW --dport 80 -j ACCEPT
<iptables> -A FORWARD -i ens3 -p tcp -m state --state NEW --dport 443 -j ACCEPT
# Option: actionstop
# Notes.: command executed once at the end of Fail2Ban
# Values: CMD
#
actionstop = <iptables> -D <chain> -p <protocol> -m multiport --dports <port> -j f2b-<name>
<actionflush>
<iptables> -X f2b-<name>
<iptables> -D FORWARD -i ens3 -p tcp -m state --state NEW --dport 80 -j ACCEPT
<iptables> -D FORWARD -i ens3 -p tcp -m state --state NEW --dport 443 -j ACCEPT
# Option: actioncheck
# Notes.: command executed once before each actionban command
# Values: CMD
#
actioncheck = <iptables> -n -L <chain> | grep -q 'f2b-<name>[ \t]'
# Option: actionban
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: See jail.conf(5) man page
# Values: CMD
#
actionban = <iptables> -I f2b-<name> 1 PREROUTING -s <ip> -j DNAT --to-destination 188.68.45.124
# Option: actionunban
# Notes.: command executed when unbanning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: See jail.conf(5) man page
# Values: CMD
#
actionunban = <iptables> -D f2b-<name> -s <ip> -j DNAT --to-destination 188.68.45.124
[Init]
Файл apache-route.local в /etc/fail2ban/jail.d/:
[apache-route]
enabled = true
filter = apache-probe
port = http,https
banaction = iptables-route.conf
maxretry = 3
findtime = 1500
bantime = 600
logpath = /var/www/*/userdata/logs/*-access.log
Я даже не могу его протестировать, потому что он выдает следующую ошибку:
fail2ban-перезапуск клиента
Не найдено доступных файлов конфигурации для «action.d/iptables-route.conf» в /etc/fail2ban
Невозможно прочитать действие «iptables-route.conf»
Ошибки в jail 'apache-route'. Пропускаем...
Я пытаюсь заставить его работать, но понятия не имею, почему он выдает мне эту ошибку.
решение1
Невозможно прочитать действие «iptables-route.conf»
Просто удалите .conf
из названия действия:
-banaction = iptables-route.conf
+banaction = iptables-route
Кстати. Мне кажется, что ваши действия немного неверны. Почему бы просто не сделать default iptables-multiport
с указанным (перезаписанным) chain
и blocktype
?
Не уверен, что вы пытаетесь сделать, но разве не будет что-то вроде этого:
banaction = iptables-multiport[chain=PREROUTING, blocktype="DNAT --to-destination 188.68.45.124"]
сделать работу?
решение2
Почему бы просто не использовать iptables-multiport по умолчанию с указанной (перезаписанной) цепочкой и типом блока?
iptables-multiport не добавляет выходные цепочки:
-A ПЕРЕСЫЛКА -i ens3 -p tcp -m state --state НОВЫЙ --dport 80 -j ПРИНЯТЬ
-A ПЕРЕСЫЛКА -i ens3 -p tcp -m state --state НОВЫЙ --dport 443 -j ПРИНЯТЬ
поэтому я решил создать собственное действие, которое добавляет их и удаляет при загрузке/выгрузке.
Я забыл, что мне также нужно реализовать постмаршрутизацию, но мне нужно еще раз все обдумать, чтобы это заархивировать.
Что я хочу:
при бане запрос перенаправляется на другой IP-адрес, где размещена страница с сообщением «вы забанены из-за слишком большого количества недействительных запросов» вместо того, чтобы просто отклонить/сбросить запрос