DROP um pacote dependendo de suas opções ou tipo

0

Por razões de teste, gostaria de bloquear pacotes específicos, dependendo de suas opções ou tipo.

Por exemplo, em uma transação DHCP DORA, gostaria de bloquear apenas pacotes DHCP ACK.

É possível fazer isso usando o iptables? Se não, quais são as possibilidades?

    
por Snake Hernandez 05.11.2016 / 14:01

1 resposta

2

Você pode usar o módulo u32 . (Veja a página de manual para iptables-extensions ). Não é muito amigável, mas deve ser utilizável.

O DHCP é um pouco difícil de analisar também porque partes dos dados, incluindo o tipo de mensagem DHCP, estão nas opções, que podem estar em ordem arbitrária. Embora a opção de tipo de mensagem seja provavelmente a primeira.

As opções de DHCP começam no deslocamento 236 no pacote UDP, e os cabeçalhos IP e UDP têm 20 + 8 bytes de comprimento. Portanto, estamos interessados nos bytes que começam no deslocamento 264. Os primeiros quatro bytes devem ser o identificador mágico e os próximos três podem ser verificados para a opção de tipo de mensagem. O código de tipo é 0x35 , o comprimento é sempre 0x01 e, para DHCPACK , o valor é 0x05 . (O formato de pacote DHCP é descrito, por exemplo, em tcpipguide.com )

Portanto, a expressão para u32 poderia ser:

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

O que significa simplesmente ler 4 bytes no deslocamento 268 (como número big-endian), deslocá-los 8 bits para a direita (para manter os primeiros três bytes) e compará-los ao valor esperado.

Também podemos verificar o número mágico:

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

Verificar se realmente temos um pacote UDP para a porta correta é mais fácil de fazer com as regras regulares de iptables , portanto, usamos algo como o seguinte para corresponder aos pacotes DHCP esperados.

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

Embora, como dito, as opções de DHCP podem estar em qualquer ordem, então este não é um método robusto, especialmente se alguém tenta ativamente contorná-lo. Mas talvez para testes, isso possa ser feito. Além disso, assumi que o cabeçalho IP não contém opções.

    
por 06.11.2016 / 00:10