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

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

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

예를 들어, 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 헤더에는 옵션이 포함되어 있지 않다고 가정합니다.

관련 정보