-m conntrack --ctstate와 -m state --state의 차이점은 무엇입니까


85

하우투를 읽고 있는데 다음과 같은 것이 있습니다.

설정된 세션이 트래픽을 받도록 허용 할 수 있습니다.

$ sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

위의 규칙에는 ESTABLISHED, RELATED의 쉼표 양쪽에 공백이 없습니다.

위의 행이 작동하지 않으면 공급자가 확장을 제공하지 않은 거세 된 VPS에있을 수 있습니다.이 경우 하위 버전을 최후의 수단으로 사용할 수 있습니다.

$ sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-m conntrack --ctstate과 (과)의 작업에 큰 차이가 -m state --state있습니까? 그들은 작동하지 않을 수도 있지만 그 이유를 말하지는 않습니다. 왜 다른 것을 선호해야합니까?



이 질문을 제거해야합니까?
Mikhail Morfikov

1
@ John1024-중복은 단일 SE 사이트에만 있습니다. Q가 특정 SE 사이트를 지배하는 규칙 내에있는 한 여러 SE 사이트에 유사한 질문을 게시하는 것이 좋습니다.
slm

1
@MikhailMorfikov-귀하의 질문은 다른 SE 사이트의 다른 Q와 유사하지만 여기서 완벽하게 좋습니다!
slm

1
@Totor-내 답변에 "데이터 포인트 # 4" state가 표시되면의 별칭 conntrack입니다. 따라서 중요하지 않습니다. 나는 미래에 어느 시점에서 그들은 state완전히 제거 할 수 있다고 생각 하지만, 당분간 그것을 사용하더라도 그것은 중요하지 않습니다.
slm

답변:


99

나는 iptables규칙을 가진 전문가라고 주장하지 않지만 첫 번째 명령은 연결 추적 확장 ( conntrack)을 사용하고 두 번째 명령은 확장 을 사용 state합니다.

데이터 포인트 # 1

에 따르면 이 문서conntrack 확장 대체 state.

 Obsolete extensions:
  • -m state: replaced by -m conntrack

데이터 포인트 # 2

그렇더라도 SF 질문 및 답변 : 상태 및 정책에 대한 방화벽 질문? OP는 # iptables @ freenode에서 IRC에 대해이 질문을했다고 주장했습니다. 거기에서 토론 한 후에 그는 다음과 같은 결론에 도달했습니다.

기술적으로 conntrack 일치는 상태 일치를 대체하고 더 이상 사용되지 않습니다. 그러나 실질적으로 국가 경기는 어떤 식 으로든 더 이상 사용되지 않습니다.

데이터 포인트 # 3

마지막으로 SF 질문 및 답변 : Iptables, -m state와 -m conntrack의 차이점은 무엇입니까? . 이 질문의 답은 아마의 사용을 확인하는 방법에 대한 최고의 증거와 조언을 conntrack하고 state.

발췌

둘 다 아래의 동일한 커널 내부를 사용합니다 (연결 추적 하위 시스템).

xt_conntrack.c의 헤더 :

xt_conntrack - Netfilter module to match connection tracking
information. (Superset of Rusty's minimalistic state match.)

따라서 상태 모듈이 더 간단하고 오류가 발생할 가능성이 적습니다. 커널이 더 길다. 다른 쪽의 Conntrack에는 더 많은 옵션과 기능이 있습니다 [1] .

내 전화는 기능이 필요한 경우 conntrack을 사용하고, 그렇지 않으면 상태 모듈을 사용합니다.

[1]"-m conntrack --ctstate DNAT -j MASQUERADE" 라우팅 / DNAT 수정 과 같은 매우 유용 ;-)

데이터 포인트 # 4

나는 netfilter@vger.kernel.org netfilte에서이 스레드를 발견 / iptables에 토론 제목 : 상태 일치되지 않는 1.4.17이다 꽤 많은 것을 말한다, state그냥 별칭 conntrack그래서 정말 문제가 당신이 사용하지 않는 두 가지 상황을 모두 사용하고 conntrack있습니다.

발췌

사실, 동의해야합니다. "state"를 별칭으로 유지하고 "conntrack"의 이전 구문을 받아들이지 않는 이유는 무엇입니까?

커널의 상태는 현재 별칭이 있고 iptables에서 conntrack으로 변환됩니다. 스크립트가 깨지지 않았습니다.

사용자 공간에서 앨리어싱을 수행하면 커널 부분을 제거 할 수 있습니다.

앨리어싱은 이미 사용자 공간에서 수행됩니다. 하나는 "state"를 입력하고 "conntrack"으로 변환 된 다음 커널로 전송됩니다. (ipt_state 등의 모듈 별명이 conntrack 모듈에 추가되었는지 여부에 따라 상태 커널 모듈도 제거 될 수 있습니다.)

참고 문헌


3

나는 netfilter 전문가가 아니지만 iptables-extension 맨 페이지를 살펴보고 놀라게했습니다.

The "state" extension is a subset of the "conntrack" module.

따라서 state는 conntrack의 일부이며 conntrack의 더 멋진 기능이 아닌 --state가 정말로 필요한 경우 더 간단한 버전입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.