nftables에서 임시 포트 범위 규칙 허용을 방지하는 방법

nftables에서 임시 포트 범위 규칙 허용을 방지하는 방법

저는 Ubuntu 20.04 운영 체제와 dnsjava 클라이언트 라이브러리를 사용하여 DNS 서버에 쿼리하고 있습니다.

이 시스템에는 dnsjava가 DNS 서버에서 결과를 얻는 데 사용할 임시 포트 범위 32768-61000을 제외한 포트의 모든 트래픽을 차단하는 nftables 규칙이 있습니다.

table inet tb {

        chain input {
                type filter hook input priority 0; policy drop;
                tcp dport 32768-61000 accept
                udp dport 32768-61000 accept
                ....
                ....
         }  
        chain forward {
                ....
         }
        chain output {
               .....
        }
}

32768-61000 범위를 허용하는 것은 보안 결함일 수 있는 것으로 보입니다. 그러나 이 포트 범위를 차단하면 DNS 확인 대기 시간이 완전히 늘어나고 시간 초과로 인해 많은 오류가 발생합니다.

nftables에서 포트 범위를 허용하는 이 규칙을 피할 수 있는 방법이 있습니까? DNS 확인 대기 시간에 영향을 주지 않고 이를 방지하기 위해 사용할 수 있는 nftable 기능이 있습니까?

답변1

상태 저장 방화벽 규칙을 사용합니다. 상태 저장 규칙의 연결 상태는 Netfilter에 의해 처리됩니다.연결하다하위 시스템을 사용할 수 있습니다nftables.

목표는 나가는 패킷을 허용(선택)하고 이를 (자동으로) 추적하는 것입니다.연결하다나가는 부분에서 원래 생성된 스트림의 일부만 들어오는 패킷으로 반환되도록 허용합니다.연결하다규칙이 이를 참조하면(모든 ct표현식) 자동으로 작동합니다. 또한 규칙이 없더라도 일단 로드되면 초기(호스트) 네트워크 네임스페이스에서 자동으로 작동해야 합니다.

OP가 완전한 규칙 세트를 제공하지 않았기 때문에 완전한 규칙 세트를 생성하지 않고 규칙만 교체하고 있습니다(예: 인터페이스에서 패킷을 허용하는 것이 lo일반적이거나 어쩌면산출체인점에도 드롭 정책이 있을 수 있습니다.) 단순화하려는 시도는 없습니다(예: 최근nftables/kernel은 TCP와 UDP가 단일 규칙을 사용하도록 허용합니다.

이는 다음과 같습니다:

table inet tb {

        chain input {
                type filter hook input priority 0; policy drop;
                ct state established,related accept
                ....
                ....
         }  
        chain forward {
                ....
         }
        chain output {
               .....
               ct state established accept
               udp dport 53 accept
               tcp dport 53 accept
        }
}

임시 포트는 더 이상 규칙 세트에서 사용되지 않습니다(소스 포트 53은 지정할 필요도 없음). 포트 53에서 나가는 패킷에 대한 응답인 들어오는 패킷은 자동으로 수락됩니다. 이 related섹션에서는 대상에 연결할 수 없을 때 ICMP 오류와 같은 관련 패킷을 허용할 수도 있습니다(이 경우 시간 초과를 방지함).

이제 다음 명령을 사용하여 프로세스 상태(컨테이너가 관련된 경우 애플리케이션과 동일한 네트워크 네임스페이스에서 실행 중)를 추적하는 것도 가능합니다.

목록의 경우:

conntrack -L

(거의 실시간) 이벤트의 경우:

conntrack -E

또는 더 구체적으로 예를 들면 다음 두 명령(두 터미널에서 실행)입니다.

conntrack -E -p tcp --dport 53
conntrack -E -p udp --dport 53

물론 이 모든 것에는 더 많은 것이 있습니다. 추가 문서:

관련 정보