Fail2Ban установлен в HOST для ограничение DOCKER
Здравствуйте дорогие друзья! Как уже писал в заголовке есть хост на котором установлен Fail2Ban, есть настройки jail.local:
[nginx-noscript]
enabled = true
chain = DOCKER-USER
filter = nginx-noscript
port = http, https
logpath = /log/nginx/access.log
bantime = 365
maxretry = 3
action = iptables-allports[]
В логах пишет что работает в поте лица и успешно банит:
fail2ban.jail [11559]: INFO Jail 'nginx-noscript' started
fail2ban.filter [11559]: INFO [nginx-noscript] Found 192.168.1.47
fail2ban.actions [11559]: NOTICE [nginx-noscript] Ban 192.168.1.47
А вот при повторной попытке зайти на деле бан не останавливает:
fail2ban.filter [11559]: INFO [nginx-noscript] Found 192.168.1.47
fail2ban.filter [11559]: INFO [nginx-noscript] Found 192.168.1.47
fail2ban.filter [11559]: INFO [nginx-noscript] Found 192.168.1.47
fail2ban.filter [11559]: INFO [nginx-noscript] Found 192.168.1.47
fail2ban.actions [11559]: NOTICE [nginx-noscript] 192.168.1.47 already banned
Соответственно уведомляет об уже забаненом IP и пропускает. Дело в том что сам NGINX находится на хосте и в DOCKER контейнере. В таблице появляется запись но вероятно не в той цепочке:
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 f2b-nginx-noscript tcp -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy DROP)
num target prot opt source destination
1 DOCKER-USER all -- 0.0.0.0/0 0.0.0.0/0
2 DOCKER-ISOLATION-STAGE-1 all -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
4 DOCKER all -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
6 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
7 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
8 DOCKER all -- 0.0.0.0/0 0.0.0.0/0
9 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
10 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Chain DOCKER (2 references)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 172.19.0.4 tcp dpt:80
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
num target prot opt source destination
1 DOCKER-ISOLATION-STAGE-2 all -- 0.0.0.0/0 0.0.0.0/0
2 DOCKER-ISOLATION-STAGE-2 all -- 0.0.0.0/0 0.0.0.0/0
3 RETURN all -- 0.0.0.0/0 0.0.0.0/0
Chain DOCKER-ISOLATION-STAGE-2 (2 references)
num target prot opt source destination
1 DROP all -- 0.0.0.0/0 0.0.0.0/0
2 DROP all -- 0.0.0.0/0 0.0.0.0/0
3 RETURN all -- 0.0.0.0/0 0.0.0.0/0
Chain DOCKER-USER (1 references)
num target prot opt source destination
1 RETURN all -- 0.0.0.0/0 0.0.0.0/0
Chain f2b-nginx-noscript (1 references)
num target prot opt source destination
1 REJECT all -- 192.168.1.47 0.0.0.0/0 reject-with icmp-port-unreachable
2 RETURN all -- 0.0.0.0/0 0.0.0.0/0
Были испробованы такие методы как:
chain = INPUT
chain = FORWARD
Результат получается, вернее результата нет. Будте любезны, подскажите как еще можно решить эту проблему.
Ответы (2 шт):
Установить chain для banning action таким способом невозможно - параметры из jail больше не передаются если action тоже переопределена в jail.local.
См. jail.conf#L174 (action_) и jail.conf#L216 (action).
Переписывая action (или action_) интерполяция параметра %(chain)s отсутвует и передача параметра более не происходит, т.е. установка chain = DOCKER-USER и д.р. не работают в итоговой конфигурации (action использует собственные настройки по умолчанию, т.е. INPUT для chain).
Т.е. либо:
chain = DOCKER-USER
# need to set banaction (not action):
banaction = iptables-allports
либо:
# need to supply all parameters directly:
action = iptables-allports[chain=DOCKER-USER, ...другие-параметры-необходимые-для-action...]
Проверить что получилось, можно с помощью:
fail2ban-client -d | grep 'nginx-noscript.*action'
или
fail2ban-client --dp
Для тех кто столкнулся с данной проблемой вопрос решается путем добавления в /etc/fail2ban/action.d/iptables-allports.conf
[Init]
port = http, https
protocol = tcp
chain = DOCKER-USER
Соответственно в jail.conf
action = iptables-allports[]