Eu gostaria de adicionar uma regra descartando um IPv4
pacote com qualquer IP option
seguindo o cabeçalho. Eu entendo que IHL
o campo (Internet Header Length) no cabeçalho contém o número de palavras de 32 bits no cabeçalho IPv4, incluindo opções. Então, meu entendimento é que uma regra deve obter o comprimento do pacote+opções do IHL
campo e comparar com 20 (comprimento do cabeçalho IPv4 sem opções), e se for maior que 20, descarte o pacote.
Existe um iptables
módulo específico que permite inspecionar o IP
cabeçalho e avaliar (fazer operação aritmética)?
iptables
inclui ou32
método match que permite fazer algumas operações bit a bit (mas não aritméticas arbitrárias), comparações de intervalo e algumas indireções semelhantes a ponteiros na carga útil do pacote para corresponder às condições:Ele tem sua própria gramática de sublinguagem e a gramática e os exemplos no manual devem ser examinados.
IHL é o tamanho do cabeçalho IP (em pedaços de 32 bits em vez de bytes) e faz parte dos primeiros 32 bits do cabeçalho (4 bits para versão com valor 0x04 para IPv4 seguido dos 4 bits para IHL) e , portanto, se houver sem opção, este tamanho deve ser o tamanho mínimo: 20 (bytes) / 4 (bytes por palavras de 32 bits) então IHL = 5 (palavras de 32 bits). Não vou lidar com casos inválidos onde IHL < 5, a pilha IPv4 já deveria ter cuidado disso.
Isso se traduz em:
!
o da partida)Então, para descartar esse pacote de entrada com iptables :
sem inversão (correspondendo a 6 ou mais):
O manual tem um exemplo semelhante onde é deslocado por 24 bits e depois multiplicado por 4 (deslocado apenas por 22 bits) para ter bytes e não palavras de 32 bits (porque os
u32
ponteiros usados posteriormente usam endereços de 8 bits), para recuperar o início do carga útil da camada 4 e continue para outras operações:dando para o caso do OP:
sem inversão (e sem se importar com o fato de que o primeiro próximo valor possível não é 21, mas 24 nem sobre o valor máximo exato, desde que o valor dado seja maior):
O primeiro método pode ser simplificado em:
dando:
ou:
ou ainda:
dando:
ou:
Escolha sua escolha.