질문 1: 왜 차단되지 않았나요?

질문 1: 왜 차단되지 않았나요?

저는 iptables 전문가가 아니며 수정해야 할 두 가지 이상한 동작이 있습니다!

질문 1: 왜 차단되지 않았나요?

f2b-nginx-naxsi다음과 같은 iptable 규칙을 가진 사용자 정의 체인이 있습니다 .

$ sudo iptables -S f2b-nginx-naxsi
-N f2b-nginx-naxsi
-A f2b-nginx-naxsi -s 81.250.100.81/32 -j REJECT --reject-with icmp-port-unreachable #<== Here
-A f2b-nginx-naxsi -j RETURN

81.250.100.81내 공개 IP이므로 차단되어야 합니다.

작동하지 않습니다. 규칙이 잘못되었습니다!

체인에서 체인을 로드하는 방법은 INPUT다음과 같습니다.

sudo iptables -S INPUT
-P INPUT ACCEPT
-A INPUT -p tcp -m multiport --dports 80,443 -j f2b-nginx-naxsi    #<== Here
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j INPUT_direct
-A INPUT -j INPUT_ZONES_SOURCE
-A INPUT -j INPUT_ZONES
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -j REJECT --reject-with icmp-host-prohibited

질문 2: :80 대신 SSH를 사용하는 것이 차단되는 이유는 무엇입니까?

수리하기 위해질문 1나는 이전 규칙을 가져와 INPUT체인 내부에 설정했습니다.
-I INPUT -s 81.250.100.81/32 -j REJECT --reject-with icmp-port-unreachable

Enter를 누른 후 기계 연결이 끊어졌습니다. 하하.
하지만 어떤 이유에서인지 브라우저에서 nginx를 계속 ping할 수 있습니다.
SSH(22)는 종료되지만 표준 http 연결(80)은 종료되지 않는 이유는 무엇입니까?

미리 감사드립니다.
;-)

답변1

문제 해결 단계:

  1. 다중 포트 iptables 모듈이 로드되었는지 확인합니다.

     lsmod | grep multiport
     # Should see something like xt_multiport or ipt_multiport in the output
    
  2. nginx 서버가 실제로 포트 80 및/또는 443에서 수신 대기하고 있는지 확인하세요. 이를 프록시 뒤에서 구성할 수 있습니다.

     sudo ss -tlnp | grep nginx
     # Should see nginx listed listening on one of those two ports
    

(수정됨)

2b. Docker 호스트의 어떤 포트가 nginx 컨테이너에 매핑되어 있는지 확인하세요.

    docker port <container_name>

This command should show which port(s) you need to use in your custom IPtables chain running on the container host.

답변2

드디어 수수께끼를 풀었습니다!

문제는 내 iptable 규칙을 무시하는 docker에서 발생합니다.

Docker 컨테이너로 들어오는 연결을 삭제하려면 이름이 지정된 체인에 규칙을 배치해야 합니다 DOCKER-USER.
체인은 Docker 자체에 의해 생성되며 이러한 규칙은 Docker 엔진의 규칙보다 우선합니다.

예를 들어 특정 IP를 금지합니다.(예: Fail2ban에서)포트 443에서:

sudo iptables -I DOCKER-USER -i eth0 -s <SPECIFIC_IP> -p tcp --dport 443 -j DROP

( eth0외부 인터페이스로 변경)

  • 포트를 설정하는 것을 잊지 마십시오. 그렇지 않으면 규칙이 SSH 포트(22)에 적용될 수 있으며 자신이 금지됩니다...
  • INPUTDocker 컨테이너에 대한 액세스를 차단하려고 하면 체인에 규칙을 추가할 수 없습니다.
  • 호출 체인은 DOCKERDocker 콘텐츠에서만 작동합니다. 아무것도 넣지 마세요.

관련 정보