Usando fail2ban en un contenedor acoplable para bloquear conexiones entrantes

Usando fail2ban en un contenedor acoplable para bloquear conexiones entrantes

Estoy intentando usar fail2ban en un contenedor acoplable para bloquear las conexiones entrantes a mi nextcloud (que también se ejecuta en un contenedor acoplable). Sin embargo, solo puedo hacer que fail2ban cambie las iptables de su propio contenedor y no las del host de la ventana acoplable.


Mi configuración actual se ve así:

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]

Esto da como resultado que iptables esté configurado correctamente en el contenedor fail2ban (por ejemplo, prohibición 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

pero las iptables del host permanecen sin cambios. Esto no me ayuda mucho ya que no quiero bloquear el tráfico al contenedor fail2ban sino al contenedor nextcloud (o en general todo el tráfico entrante desde la dirección IP prohibida al host de la ventana acoplable).


Busqué en línea algunas soluciones pero no pude armar el rompecabezas. Creo que tengo que usar la DOCKER-USERcadena. Sin embargo, al usarlo no se crearon iptables.

Algunos sugieren instalar fail2ban baremetal, lo cual no quiero.

También intenté usar docker-action.conf que encontré, pero tampoco ayudó, ya que también crea iptables en el contenedor fail2ban.

[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

Así que supongo que mi problema/pregunta es cómo decirle a fail2ban que instale iptables en el host de la ventana acoplable en lugar de en su propio contenedor. ¿Quizás tengo que cambiar el network_mode?

Como se describe en esta publicación.https://serverfault.com/a/1032094/1005675fail2ban se ejecutará como un pod adicional y debe escribir en las iptables del host

Cualquier ayuda es muy apreciada =)

Respuesta1

También estoy explorando esto. ¿Has hecho algún progreso aquí? Por lo que he entendido hasta ahora, probablemente sería más fácil integrar fai2ban dentro del contenedor Nextcloud.

Eso implica construir sobre la imagen de Nextcloud. Como ejemplo, ver:

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"]

Aquí el propósito es agregarlo supervisoral contenedor de Nextcloud, para que cronpueda ejecutarse sin otra imagen de Nextcloud dedicada a eso.

Este proyectopodría ser otra pieza del rompecabezas, ya que integra fail2ban a una imagen acoplable de Asterisk.

información relacionada