Docker 컨테이너 사이에 iptables와 fall2ban이 있습니까?

Docker 컨테이너 사이에 iptables와 fall2ban이 있습니까?

Nginx를 향한 공개가 있다고 가정 해 봅시다.역방향 프록시다운스트림 웹 서비스(B)로 트래픽을 보내는 컨테이너(A). 이 A 컨테이너는 TLS 연결이 종료되는 곳입니다. 도커 서버는반품외부 역방향 프록시 서비스 뒤에 있습니다. 그래요성공적으로전달 헤더에서 실제 IP를 추출하고 기록하는 기능. 괜찮아요.

실제 IP에서 컨테이너 A에서 나가는 트래픽을 감옥(예: DROP)으로 설정하려면 어떻게 Fail2ban 작업을 구성합니까? 다운스트림 웹 서비스 B에는 실제 IP가 포함된 XFF 헤더가 표시됩니다.

이것이 내 iptables가 지금 하고 있는 일입니다( iptables -nL):

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
fail2ban-auth-fail  tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
DOCKER-USER  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-ISOLATION-STAGE-1  all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER (2 references)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            172.20.128.1         tcp dpt:443
ACCEPT     tcp  --  0.0.0.0/0            172.20.128.1         tcp dpt:80

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination         
DOCKER-ISOLATION-STAGE-2  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-ISOLATION-STAGE-2  all  --  0.0.0.0/0            0.0.0.0/0           
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-ISOLATION-STAGE-2 (2 references)
target     prot opt source               destination         
DROP       all  --  0.0.0.0/0            0.0.0.0/0           
DROP       all  --  0.0.0.0/0            0.0.0.0/0           
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-USER (1 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           

Chain fail2ban-auth-fail (1 references)
target     prot opt source               destination         
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 STRING match  "X-Forwarded-For: 184.75.215.178" ALGO name bm TO 65535
RETURN     all  --  0.0.0.0/0            0.0.0.0/0 

보시다시피, 패킷을 XFF 문자열과 일치시켜 보았는데, IP 주소는 프록시 서버가 아닌 실제 IP입니다.

어쩌면 INPUT 체인이 범인일까요?

나의 주요 활동은 다음과 같습니다.

actionstart = iptables -N fail2ban-<name>
              iptables -A fail2ban-<name> -j RETURN
              iptables -I <chain> -p <protocol> --dport <port> -j fail2ban-<name>

actionban = iptables -I fail2ban-<name> 1 -p tcp --dport 80 -m string --algo bm --string 'X-Forwarded-For: <ip>' -j DROP

답변1

이봐https://github.com/fail2ban/fail2ban/issues/2292

규칙을 넣거나 fail2ban( 저처럼) 규칙을 복제하도록 구성해야 합니다 . 하나는 기본 체인을 사용하여 호스트를 보호하고 다른 하나는 노출된 도커 컨테이너를 보호하기 위한 것입니다.iptableschain DOCKER-USER

답변2

이는 비슷한 문제를 해결하는 데 도움이 되었습니다. Crowdsec 또는 failure2ban을 설정하는 경우:

그룹 제어:

sudo iptables -I FORWARD -m set --match-set crowdsec-blacklists src -j DROP

Fail2ban과 비슷한 것:

sudo iptables -I FORWARD 1 -p tcp -j f2b-HTTPS

실제로 Fail2ban의 iptables에는 자체 "대상"이 있으며 다음을 사용하여 찾을 수 있습니다.

sudo iptables -L | grep f2b

Docker 규칙에 도달하기 전에 요청을 거부(모든 요청 허용)하는 iptables의 Docker 규칙 앞에 항목을 배치합니다.

관련 정보