--set-mark 옵션은 Netfilter(IPTABLES)에서 어떻게 작동합니까?

--set-mark 옵션은 Netfilter(IPTABLES)에서 어떻게 작동합니까?

--set-markNetfilter에서는 이 테이블을 통과하는 mangle패킷을 선택할 수 있습니다 .

인터넷에 있는 대부분의 튜토리얼과 예제에서는 아래와 같이 패킷에 플래그를 추가할 뿐이라고 말하지만 어떤 플래그가 설정되어 있고 패킷의 위치에 대한 자세한 내용은 없습니다.

iptables -A PREROUTING -t mangle -i eth0 -p tcp --dport 80 -j MARK --set-mark 1

내 질문은 다음과 같습니다

  • 어떤 플래그가 설정되어 있으며 패킷의 정확히 어디에 위치합니까?

답변1

태그는 네트워크 패킷에 첨부된 32비트 정수 값입니다. 상호 작용하는 네트워크의 일부 부분(아래 참조)은 이 값에 대해 비트 단위 연산을 수행할 수 있으며, 이는 처리 방식에 따라 32비트 값에서 32개 플래그 모음 또는 플래그와 더 작은 값의 혼합 사이에서 해석될 수 있습니다. 옵션은 용도를 구성합니다( tc이 작업을 수행할 수 없음). 물론 이 마크는Linux 커널에서 처리할 때만 존재합니다.. 이는 유선상에 존재하지 않기 때문에 순전히 가상이며 내부적입니다. 사용되는 위치에 따라 방화벽 마크, fwmark 또는 간단히 마크라고 부를 수 있습니다.

커널에 의해 처리되는 모든 네트워크 패킷은 다음과 같이 표시됩니다.sk_buff, 정의됨linux/include/linux/skbuff.h. 이 구조에는 IPsec 정보(있는 경우), 발견된 관련 conntrack 항목 및 해당 항목과 같은 패킷(해당되는 경우)과 관련된 다양한 메타데이터가 포함됩니다.표시.

네트워크 스택의 다양한 부분이 이 태그와 상호 작용하거나 변경할 수 있습니다. 예를 들면 다음과 같습니다.

  • tc,
  • 라우팅 스택은 특별한 규칙을 설정할 수 있습니다.ip rule(예를 들어 ip rule add fwmark 1 lookup 42) 이 fwmark를 사용하여 라우팅 결정을 변경합니다(예를 들어 라우팅 테이블을 사용하여 이러한 패킷을 기본 인터페이스가 아닌 다른 인터페이스로 보냅니다).
  • 틀림없이iptables,
  • 그의 후임 후보nftables,
  • 다양한(보통 터널) 인터페이스 유형은 플래그를 설정하거나 상호 작용할 수 있습니다.와트, ersspan, gre, gretap, ipip, 앉아,라인배커...또는 XFRM 변환( ip xfrm state/policy). 유형에 따라 이 플래그는 페이로드 또는 봉투(예: WireGuard)에 설정될 수 있으며 때로는 캡슐화 해제/캡슐화 프로세스 중에 상속될 수 있습니다.
  • 콘센트 옵션SO_MARK,
  • 전자 BPF,

다른 곳도 있을텐데...

이 태그의 주요 목표는 이를 일종의 메시지로 사용하여 이러한 모든 네트워크 부분이 서로 상호 작용할 수 있도록 하는 것입니다. 이것일반 네트워크의 Netfilter 및 패킷 흐름이러한 요소가 패킷 처리 및 해당 표시를 어떤 순서로 수신하는지 확인하는 것이 도움이 될 수 있습니다.

fwmark 외에도 다른 관련 마커가 있습니다:

  • connmark, 패킷의 sk_buff에는 저장되지 않고 conntrack 항목 추적 패킷에는 저장됩니다.흐름. 물론 iptables에서도 connmark를 사용할 수 있습니다.connmark일치하고CONNMARK사용 예가 있는 대상:Netfilter Connmark를 Linux 이상으로!. 이를 통해 단일 패킷을 기반으로 내린 결정을 기억한 다음 동일한 연결의 모든 패킷에 적용할 수 있습니다.
  • secmark마찬가지로 관련이 있습니다.connsecmark다음과 같은 Linux 보안 모듈과 상호 작용하도록 설계되었습니다.SELinux.

관련 정보