옵션이나 유형에 따라 패킷을 삭제합니다.

옵션이나 유형에 따라 패킷을 삭제합니다.

테스트상의 이유로 옵션이나 유형에 따라 특정 패킷을 차단하고 싶습니다.

예를 들어 DHCP DORA 트랜잭션에서 DHCP ACK 패킷만 차단하고 싶습니다.

iptables를 사용하여 이 작업을 수행할 수 있습니까? 그렇지 않다면 어떤 가능성이 있습니까?

답변1

모듈 을 사용할 수 있습니다 u32. (참조맨페이지iptables-extensions). 너무 사용자 친화적이지는 않지만 사용할 수 있어야 합니다.

DHCP는 DHCP 메시지 유형을 포함한 데이터의 일부가 임의의 순서로 옵션에 포함되어 있기 때문에 구문 분석하기가 약간 어렵습니다. 메시지 유형 옵션이 첫 번째 옵션일 가능성이 높습니다.

DHCP 옵션은 UDP 패킷의 오프셋 236에서 시작하고 IP 및 UDP 헤더의 길이는 20+8바이트입니다. 따라서 우리는 오프셋 264에서 시작하는 바이트에 관심이 있습니다. 처음 4바이트는 매직 식별자여야 하며 다음 3바이트는 메시지 유형 옵션에 대해 확인할 수 있습니다. 유형 코드는 이고 0x35길이는 항상 0x01이며 DHCPACK값은 입니다 0x05. (그만큼DHCP 패킷 형식은 tcpipguide.com 등에 설명되어 있습니다.)

따라서 표현식은 다음 u32과 같습니다.

--u32 '268 >> 8 = 0x350105'

이는 단순히 오프셋 268(빅 엔디안 숫자)에서 4바이트를 읽고 이를 오른쪽으로 8비트 이동한 다음(처음 3바이트를 유지하기 위해) 예상 값과 비교하는 것을 의미합니다.

매직 넘버도 확인할 수 있습니다.

--u32 '264 = 0x63825363 && 268 >> 8 = 0x350105'

실제로 올바른 포트로 가는 UDP 패킷이 있는지 확인하는 것은 일반 iptables규칙을 사용하는 것이 더 쉽기 때문에 다음과 같은 것을 사용하여 예상되는 DHCP 패킷과 일치시킵니다.

iptables -A foo -m udp --dport bootpc -m u32 --u32 '264 = 0x63825363 && 268 >> 8 = 0x350105'

앞서 말했듯이 DHCP 옵션은 어떤 순서로든 가능하므로 이는 강력한 방법이 아닙니다. 특히 누군가 적극적으로 문제를 해결하려고 하는 경우에는 더욱 그렇습니다. 그러나 아마도 테스트를 위해서라면 가능할 수도 있습니다. 또한 IP 헤더에 옵션이 포함되어 있지 않다고 가정했습니다.

관련 정보