У меня есть docker -композиция, в которой есть контейнер, который действует как обратный прокси-сервер для других контейнеров, содержащих серверы.
Этот прокси-сервер запускает Nginx с включенным req_limit_module
и Fail2Ban для запрета в iptables всех IP-адресов, которые выполняют более 10 запросов в секунду. Для того, чтобы Fail2Ban работал, я дал возможности NET_ADMIN для прокси.
Это минимальная версия docker -compose.yaml:
version: "3.7"
services:
rest-server:
restart: "always"
image: api-rest-server:latest
expose:
- "8080"
env_file: .env
proxy:
restart: "always"
image: proxy:latest
expose:
- "80"
ports:
- "80:80"
cap_add:
- NET_ADMIN
depends_on:
- rest-server
env_file: .env
При такой настройке Fail2Ban работает, как и ожидалось, но проблема в том, что правила iptables не очищаются, когда перезапуск сочинения. Таким образом, если я наложу бан на мой IP и перезапущу прокси, я все равно забанен в его iptables, но Fail2Ban не знает об этом, в результате чего я никогда не получу бан.
Если я этого не сделаю Неправильно понимать, что это происходит из-за того, что правила iptables располагаются в пространстве имен для каждого контейнера, а идентификатор контейнера одинаков.
Существует ли способ автоматической очистки правил iptables, созданных контейнером при его удалении?