ctmark처럼 nfmark를 볼 수 있는 방법이 있나요?

ctmark처럼 nfmark를 볼 수 있는 방법이 있나요?

나는 이것이 iptables --set-mark패킷에 태그를 추가하지 않는다는 것을 이해합니다. MARK목표는 태그를 커널 데이터 구조의 패킷과 연결하는 것입니다. 패킷 자체는 수정되지 않습니다. 하지만 연관된 태그가 있는 패킷을 볼 수 있는 방법이 있습니까?

ctmark(target에 의해 설정된 연결 태그를 사용하여 CONNMARK) 이를 볼 수 있습니다 /proc/net/nf_conntrack. nfmark(패킷 표시)를 보는 것과 비슷한 것을 찾고 있습니다 .

우리는 그것을 이렇게 볼 수 있습니다 ctmark.

iptables -I OUTPUT 1 -t mangle -j CONNMARK --restore-mark
iptables -I OUTPUT 2 -t mangle -m conntrack --ctorigdst 172.30.138.151 -m mark --mark 0 -j MARK --set-mark 2
iptables -A POSTROUTING -t mangle -j CONNMARK --save-mark

그러면 파일에서 연결 표시를 볼 수 있습니다 /proc/net/nf_conntrack.마크=2

ipv4     2 icmp     1 18 src=157.43.150.253 dst=172.30.138.151 type=8 code=0 id=54809 packets=4 bytes=336 src=172.30.138.151 dst=157.43.150.253 type=0 code=0 id=54809 packets=4 bytes=336 mark=2 zone=0 use=2

출력에 대한 질문도 있습니다 /proc/net/nf_conntrack. 필드는 무엇을 의미합니까 use? 봤어요 use=1잠깐만요use=2이 웹사이트"이 연결 구조의 사용 횟수"라고 가정해 보겠습니다.

답변1

질문은Fwamark그렇지 않으면표시(역사적으로는 다음과 같이 알려져 있습니다.노브마크하지만그냥으로 이름이 바뀌었어요표시동시에 더 이상 netfilter에 의존하지 않습니다. 이 단어노브마크지금은 약간 오해의 소지가 있지만 업데이트되지 않았거나 업데이트할 수 없는 곳이 여전히 있습니다.) 이 태그는 데이터 패킷에 있습니다.디스크 버퍼,그리고연속 추적 마커(일명CT마크등)이 있습니다항목을 추적하세요.

패킷 마커를 얻는 가장 쉬운 방법은 iptables를 통해 기록하는 것입니다.LOG표적. 다음과 같은 것(홍수 방지를 위한 제한 사항 있음):

iptables -A INPUT -m mark ! --mark 0 -m limit --limit 8/min --limit-burst 12 -j LOG --log-prefix "IPTables-Marks: "

패킷은 태그를 사용하여 기록되어야 합니다. 이 플래그(위에서 선택한 일치 항목과 같이 0이 아닌 경우)는 로그 줄 끝에 표시됩니다. (OP의 의견에서) 예:

kern.debug kernel: [11007.886926] IPTables-Marks: IN=wlan0 OUT= MAC=e4:xx:xx:xx:97:32:28:xx:xx:xx:fb:60:08:00 SRC=192.168.8.10 DST=192.168.8.1 LEN=40 TOS=0x00 PREC=0x00 TTL=128 ID=23698 DF PROTO=TCP SPT=36764 DPT=22 WINDOW=254 RES=0x00 ACK URGP=0 MARK=0x2

iptables와 같이 자동화에는 더 적합하지만 구현하기가 더 어려운 다른 방법이 있습니다.NFLOG목표는 netlink 소켓에서 수신 대기하는 로깅 프로그램으로 전체 패킷을 "전송"하는 것입니다. 이 프로그램은 다음을 사용하여 토큰을 검색할 수 있습니다.nflog_get_nfmark()(이전 이름...). tcpdumpnflog 기능(시도)을 듣고 선택된 패킷을 표시하는 것이 가능합니다. tcpdump --list-interfaces이는 때때로 로그 디버깅보다 더 편리하지만 마커도 표시하도록 하는 방법을 모릅니다(모르 nflog_get_nfmark()거나 어떻게 하는지는 모릅니다). libpcap에 문의하세요).

관련 정보