이 MAC 주소 iptables 화이트리스트가 작동하지 않는 이유는 무엇입니까?

이 MAC 주소 iptables 화이트리스트가 작동하지 않는 이유는 무엇입니까?

이것은 라우터에 있습니다. 나는 hash:net 유형의 ipset인 $mac클라이언트의 MAC을 가지고 있습니다. $set내 의도는 네트워크에 액세스할 수 있는 사람을 제외한 모든 네트워크에 대한 액세스를 거부하는 것입니다 $set.$mac

-A lan_forward -m mac ! --mac-source $mac -m set --match-set $set dst -j REJECT

그러나 이것은 작동하지 않습니다. $setMAC 주소가 무엇이든 상관없이 모든 사람을 차단합니다. 문제가 무엇입니까? 이를 LOG대상 으로 바꾸면 다음과 같이 표시됩니다.

[ 4128.497456] Blocked website: IN=lanbridge OUT=tun0 MAC=XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX SRC=192.168.1.186 DST=XXX.XXX.XXX.XXX LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=21305 DF PROTO=TCP SPT=40030 DPT=443 WINDOW=64240 RES=0x00 SYN URGP=0

MAC이 화이트리스트에 있음에도 불구하고 TCP RST에 대한 연결을 거부한다는 것을 tcpdump를 통해 확인할 수 있습니다.

편집하다! 문제를 발견했습니다.

내 문제는 하나 이상의 규칙이 있다는 것입니다.

-A lan_forward -m mac ! --mac-source $mac1 -m set --match-set $set dst -j REJECT
-A lan_forward -m mac ! --mac-source $mac2 -m set --match-set $set dst -j REJECT
-A lan_forward -m mac ! --mac-source $mac3 -m set --match-set $set dst -j REJECT

따라서 첫 번째 항목이 일치하더라도 두 번째 항목은 실패하고 거부됩니다. MARK를 사용하기로 거의 결정했는데, 패킷 마킹의 올바른 사용은 아닌 것 같아서 그냥 ACCEPT모든 MAC에서 나가는 것을 모두 보내고, ipset에 지정된 네트워크로 나가는 것은 모두 차단합니다. ACCEPT필터링 중인 MAC에 적용하려는 규칙 뒤에 아무것도 추가 하지 않는다는 것을 기억하면 됩니다 .

답변1

한 가지 방법은 새로운 체인으로 점프하여 수락/거부 결정을 내리는 것입니다. 그러나 귀하의 설명에 따르면 사용자 정의 MAC 주소가 허용되는지 또는 차단되는지 확실하지 않으므로 여기의 논리를 뒤집어야 할 수도 있습니다.

-A lan_forward -m set --match-set $set dst -j a_new_chain
-A a_new_chain -m mac --mac-source $mac -j ACCEPT
-A a_new_chain -j REJECT

이는 관련된 모든 것이 컬렉션에 있지만 $mac허용되어야 하고 다른 모든 것은 거부되어야 한다고 가정합니다.

또 다른 문제는 연결 추적일 수 있습니다. 열린 연결을 차단해야 하는 경우 연결 추적을 적용하기 전에 위의 규칙을 적용하거나 일부 외부 도구를 사용하여 기존 연결을 종료해야 합니다. 그렇지 않으면 열린 연결에 대해 연결을 열린 상태로 유지할 수 있는 항목을 우회하여 ipset 테이블에 추가할 수 있습니다.

관련 정보