Conntrack 및 동적 ipset/iptables 규칙

Conntrack 및 동적 ipset/iptables 규칙

conntrack 모듈의 몇 가지 기본 개념을 이해하지 못합니다.

우선, 내 시스템(Ubuntu 18.04)에서 활성화되어 있고 modinfonf_conntrack에 대한 정보를 표시하며 /proc/modules파일에서 nf_conntrack이 "live"임을 알려줍니다.

둘째, 다음과 같은 테스트 설정이 있습니다.

머신 A(192.168.1.2) <------> 라우터 머신(192.168.1.1 & 192.168.2.1) <----> 머신 B(192.168.2.2)

라우터 머신에는 다음과 같은 iptables 규칙이 있습니다.
iptables -t filter -A FORWARD -m set --match-set BlackListPort dst -j DROP

BlackListPort는 ipset 테이블입니다.
이제 머신 A(1.2)에서 머신 B(2.2)로 SSH 연결을 설정합니다. 작동하는지 확인한 후 BlackListPort 테이블에 포트 22(SSH 기본값)를 추가합니다.

해당 ipset 테이블에서 포트 22를 제거할 때까지 SSH 연결이 정지/중지됩니다.

이제 질문: 내 시스템에 conntrack이 있는데 왜 SSH 차단이 성공합니까? 포트 22가 ipset에 추가되기 전에 SSH 연결이 설정되었으므로 conntrack은 모든 패킷을 건너뛰고 SSH가 작동하도록 해야 합니다.

답변1

포트 22가 ipset에 추가되기 전에 SSH 연결이 설정되었으므로 conntrack은 모든 패킷을 건너뛰고 SSH가 작동하도록 해야 합니다.

이것은 정확하지 않습니다.

모든 패킷은 추적된 연결에 속해 있는지 여부에 관계없이 필터 규칙을 통해 처리됩니다.

FORWARD관련 규칙 체인의 시작 부분( 귀하의 예에서는) 근처에 다음과 같은 것을 배치하는 것은 iptables 규칙의 매우 일반적인 최적화입니다 .

iptables -t filter -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

이전 배포판에서는 다음 버전이 대신 표시될 수 있습니다.

iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

conntrack( 이제는 매치보다 매치가 더 선호된다는 점을 이해합니다 state. 일부 커널 버전에서는 이에 대해 잔소리까지 하는 것 같습니다.)

연결 추적 정보가 있는 경우 기존 연결에 속한 패킷을 허용합니다. 하지만 요점은,통제할 수 있다정확히 어디에당신이 그 규칙을 정했는지, 아니면 그것을 전혀 사용하는지. 따라서 방화벽 규칙이 원하는 만큼 연결 상태에 관심을 갖도록 할 수 있습니다.

관련 정보