
docker コンテナで fail2ban を使用して、nextcloud (これも docker コンテナで実行中) への着信接続をブロックしようとしています。ただし、fail2ban で変更できるのは、docker ホストの iptables ではなく、自身のコンテナの iptables だけです。
現在の設定は次のようになります。
docker-compose
app:
image: nextcloud:latest
container_name: nextcloud_app
restart: always
ports:
- 7000:80
- 7001:443
...
fail2ban:
image: lscr.io/linuxserver/fail2ban:latest
container_name: nextcloud_fail2ban
network_mode: host
restart: always
environment:
- PUID=1000
- PGID=1000
volumes:
- ./data/fail2ban:/config
- ./data/nextcloud/data:/var/log:ro # the directory of the nextcloud log
cap_add:
- NET_ADMIN
- NET_RAW
jail.d/nextcloud.conf
[nextcloud]
enabled = true
port = 80,443,7000,7001
protocol = tcp
filter = nextcloud
Tlogpath = /var/log/nextcloud.log
maxretry = 3
bantime = 86400
findtime = 14400
# banaction = docker-action
# chain = DOCKER-USER
# action = iptables[actname=iptables-input, name=HTTPS, port=https, protocol=tcp]
# iptables[actname=iptables-forward, name=HTTPS-DOCKER, chain=FORWARD, port=443, protocol=tcp]
これにより、fail2ban コンテナに iptables が正しく設定されます (例: ban 192.168.1.125)。
root@grievous:/# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N f2b-nextcloud
-A INPUT -p tcp -m multiport --dports 80,443,7000,7001 -j f2b-nextcloud
-A f2b-nextcloud -s 192.168.1.125/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-nextcloud -j RETURN
しかし、ホストの iptables は変更されません。これはあまり役に立ちません。fail2ban コンテナへのトラフィックをブロックするのではなく、nextcloud コンテナへのトラフィック (または一般に、禁止された IP アドレスから docker ホストへのすべての着信トラフィック) をブロックしたいからです。
オンラインで解決策を探しましたが、パズルを組み立てることができませんでした。チェーンを使用する必要があると思いますDOCKER-USER
。ただし、それを使用すると、iptables は作成されませんでした。
fail2ban baremetal をインストールすることを勧める人もいますが、私はそれを望んでいません。
私が見つけたdocker-action.confも使用してみましたが、これもfail2banコンテナにiptablesを作成するため役に立ちませんでした。
[Definition]
actionstart = iptables -N f2b-npm-docker
iptables -A f2b-npm-docker -j RETURN
iptables -I FORWARD -p tcp -m multiport --dports 0:65535 -j f2b-npm-docker
actionstop = iptables -D FORWARD -p tcp -m multiport --dports 0:65535 -j f2b-npm-docker
iptables -F f2b-npm-docker
iptables -X f2b-npm-docker
actioncheck = iptables -n -L FORWARD | grep -q 'f2b-npm-docker[ \t]'
actionban = iptables -I f2b-npm-docker -s DROP <ip >-j
actionunban = iptables -D f2b-npm-docker -s DROP <ip >-j
私の問題/質問は、fail2ban に、独自のコンテナーではなく docker ホストに iptables をインストールするように指示する方法だと思います。 ? を変更する必要がありますかnetwork_mode
?
この投稿で説明されているようにhttps://serverfault.com/a/1032094/1005675fail2banは追加のポッドとして実行され、ホストのiptablesに書き込む必要があります。
どのような助けでも大歓迎です =)
答え1
私もこれを調査中です。何か進展はありましたか? これまでのところ、fai2ban を Nextcloud コンテナ自体に統合する方がおそらく簡単でしょう。
これは、Nextcloud イメージの上に構築することを意味します。例として、以下を参照してください。
FROM nextcloud:25.0.4-apache
RUN apt-get update && apt-get install -y supervisor \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir /var/log/supervisord /var/run/supervisord
COPY supervisord.conf /
ENV NEXTCLOUD_UPDATE=1
CMD ["/usr/bin/supervisord", "-c", "/supervisord.conf"]
ここでの目的は、supervisor
Nextcloud コンテナに追加して、cron
専用の別の Nextcloud イメージなしで実行できるようにすることです。
このプロジェクトこれは、fail2ban を Asterisk Docker イメージに統合するため、パズルのもう 1 つのピースになる可能性があります。