conntrack을 사용하여 알 수 없는 MAC 주소에서 들어오는 iptables 요청을 mark 99로 표시하는 방법

conntrack을 사용하여 알 수 없는 MAC 주소에서 들어오는 iptables 요청을 mark 99로 표시하는 방법

나는 수년간 사고 없이 iptables 규칙을 실행했지만 다음을 통해 신뢰할 수 있는 모든 MAC의 액세스를 허용한 후 다음을 수행했습니다.

/sbin/iptables -A INPUT -m mac --mac-source $MAC -j ACCEPT
/sbin/iptables -A FORWARD -m mac --mac-source $MAC -j ACCEPT

다음과 같은 다른 Mac 주소를 표시하려고 합니다.

/sbin/iptables -A PREROUTING -t mangle -i $INT_DEV -p tcp --dport 80 -j MARK --set-mark 99

하지만 지금 그 주소를 읽으려고 하면
conntrack -L | grep "src=10.1.1.234"
알 수 없는 10.1.1.234 프리로더가 어디에도 표시되지 않습니다...
하지만 iptables를 계속 사용하여 다음을 통해 프리로더를 로그인 페이지로 전환하고 싶습니다.

/sbin/iptables -t filter -A FORWARD -m mark --mark 99 -j DROP```  
And obviously it doesn't work because I can't even see it from my conntrack listing.  
What am I doing wrong here..?

답변1

다음과 같은 차이가 있습니다.패킷마크, 일명 그냥표시,방화벽 표시또는fwmark, conntrack 진입 표시(일명)ctmark,연결 표시또는콘마크: 전자는 패킷의스벅버프, 나중에 첨부됩니다conntrack 항목. 뚜렷한iptables 매트-체스그리고타르-얻다방법을 포함하여 두 가지 모두에 대해패킷의 표시를 연결 항목으로 전달또는연결 항목부터 패킷까지.

여기서는 이 마크를 사용할 필요가 없습니다.콘트랙이 경우에는 conntrack -L삭제된 패킷을 표시하는 데 적합한 도구가 아닙니다(마지막 단락 참조). 변형을 사용할 때 iptables-nft디버깅 목적으로 표시된 패킷을 보는 가장 쉬운 방법(그렇지 않으면 -j LOG로그에 패킷 표시를 추가함)은 이를 추적하고 xtables-monitor --trace해당 운명을 표시하는 것입니다( iptables-legacy이를 커널 로그로 보내면 로그가 쉽게 넘칠 수 있음). , 그 옆에는 네트워크 네임스페이스와 잘 작동하지 않습니다. 이는 -legacy와 -nft 변형 간에 호환되지 않는 드문 변경 사항입니다.

가능한 한 가지 예는 다음과 같습니다.

iptables -A PREROUTING -t mangle -i $INT_DEV -p tcp --dport 80 -j MARK --set-mark 99
iptables -A PREROUTING -t mangle -m mark --mark 99 -j TRACE

[...]

iptables -A FORWARD -m mark --mark 99 -j DROP

-j TRACE-j DROP(또는 -j ACCEPT선택된 소수에 대한 모든 추가 처리) 사이에 표시된 모든 패킷의 자세한 운명은 이제 다음과 같이 매우 장황하게 따를 수 있습니다.

xtables-monitor --trace

자세한 내용을 제한하려면 다음과 같이 규칙을 변경하여 새 흐름을 시작하는 패킷만 추적할 수 있습니다 TRACE.

iptables -A PREROUTING -t mangle -m mark --mark 99 -m conntrack --ctstate NEW -j TRACE

추가로, 그러한 흐름의 첫 번째 패킷은콘트랙표시가 없더라도 일반적으로 다음을 사용하여 이벤트 모드에서 볼 수 있는 항목입니다.conntrack -E -p tcp --dport 80 . 하지만 이 패킷이 삭제되면 임시 conntrack 항목은 절대로확인됨이벤트는 절대 에 제공되지 않습니다 conntrack. 명령 을 사용하면 표시되지 않지만 삭제되기 전에는 conntrack규칙 내에서 계속 표시됩니다 . -m conntrack --ctproto tcp --ctorigdstport 80추가 재시도는 다시 첫 번째 패킷이 되어 임시 항목을 생성하게 되며, 패킷이 삭제되는 등의 이유로 확인되지 않습니다.

따라서 conntrack첫 번째 패킷이 삭제되지 않은 흐름을 표시하는 데에만 사용할 수 있으며, 그렇지 않으면 사용할 수 있는 흐름이 없습니다.

관련 정보