
Ich versuche, fail2ban in einem Docker-Container zu verwenden, um eingehende Verbindungen zu meiner Nextcloud (die ebenfalls in einem Docker-Container läuft) zu blockieren. Ich kann fail2ban jedoch nur dazu bringen, die iptables seines eigenen Containers zu ändern, nicht die des Docker-Hosts.
Mein aktuelles Setup sieht folgendermaßen aus:
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]
Dies führt dazu, dass die iptables im Fail2ban-Container korrekt eingestellt werden (z. B. 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
aber die Host-IPtables bleiben unverändert. Das hilft mir nicht viel, da ich den Datenverkehr zum Fail2ban-Container nicht blockieren möchte, sondern zum Nextcloud-Container (oder generell den gesamten eingehenden Datenverkehr von der gesperrten IP-Adresse zum Docker-Host).
Ich habe online nach Lösungen gesucht, konnte das Puzzle aber nicht zusammensetzen. Ich glaube, ich muss die DOCKER-USER
Kette verwenden. Bei der Verwendung wurden jedoch keine iptables erstellt.
Einige schlagen vor, Fail2ban Baremetal zu installieren, was ich nicht möchte.
Ich habe auch versucht, eine docker-action.conf zu verwenden, die ich gefunden habe, aber das hat auch nicht geholfen, da es auch die iptables im fail2ban-Container erstellt
[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
Ich schätze, mein Problem/meine Frage ist, wie ich fail2ban anweise, die iptables auf dem Docker-Host statt in seinem eigenen Container zu installieren. Vielleicht muss ich das ändern network_mode
?
Wie in diesem Beitrag beschriebenhttps://serverfault.com/a/1032094/1005675fail2ban soll als zusätzlicher Pod laufen und muss in die iptables des Hosts schreiben
Für jede Hilfe bin ich sehr dankbar =)
Antwort1
Ich erforsche das auch. Haben Sie hier Fortschritte gemacht? So wie ich es bisher verstanden habe, wäre es wahrscheinlich einfacher, fai2ban in den Nextcloud-Container selbst zu integrieren.
Das bedeutet, dass auf dem Nextcloud-Image aufgebaut werden muss. Ein Beispiel finden Sie hier:
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
Der Zweck besteht hier darin , den Nextcloud-Container zu erweitern , sodass dieser cron
ohne ein weiteres dafür vorgesehenes Nextcloud-Image ausgeführt werden kann.
Dieses Projektkönnte ein weiteres Puzzleteil sein, da es fail2ban in ein Asterisk-Docker-Image integriert.