Docker 컨테이너에서 fall2ban을 사용하여 들어오는 연결 차단

Docker 컨테이너에서 fall2ban을 사용하여 들어오는 연결 차단

docker-container에서 fall2ban을 사용하여 nextcloud(또한 docker 컨테이너에서 실행 중)로 들어오는 연결을 차단하려고 합니다. 그러나 나는 docker 호스트가 아닌 자체 컨테이너의 iptables를 변경하기 위해 Fail2ban만 얻을 수 있습니다.


내 현재 설정은 다음과 같습니다.

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]

결과적으로 iptables는 Fail2ban 컨테이너(예: 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를 사용해 보았지만 이것도 도움이 되지 않았습니다. 왜냐하면 이 방법은 또한 failure2ban 컨테이너에 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

그래서 내 문제/질문은 자체 컨테이너 대신 docker 호스트에 iptables를 설치하도록 실패2ban에게 지시하는 방법에 관한 것 같습니다. Mabye 변경해야 합니까 network_mode?

이 게시물에 설명된 대로https://serverfault.com/a/1032094/1005675fall2ban은 추가 포드로 실행되며 호스트 iptables에 써야 합니다.

어떤 도움이라도 높이 평가됩니다 =)

답변1

나는 또한 이것을 탐구하고 있습니다. 여기서 진전이 있었나요? 지금까지 내가 이해한 바에 따르면 Nextcloud 컨테이너 자체 내에 fai2ban을 통합하는 것이 더 쉬울 것입니다.

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

여기서 목적은 supervisorNextcloud 컨테이너에 추가하여 cron해당 전용 Nextcloud 이미지 없이 실행할 수 있도록 하는 것입니다.

이 프로젝트실패2ban을 Asterisk 도커 이미지에 통합하기 때문에 퍼즐의 또 다른 조각이 될 수 있습니다.

관련 정보