iptables aceita id de pacote específico

1

Eu quero permitir apenas pacotes com um ID específico (campo de identificação), por exemplo, pacotes com id = 3 são aceitos e outros descartados. E eu quero fazer a mesma coisa com o offset, por exemplo, este pacote é aceito:

09:59:29.216755 IP (tos 0x0, ttl 64, id 3, offset 0, flags [DF], proto UDP (17), length 35)
    XXX.XXX.XXX.XXX.XXXXX > XXX.XXX.XXX.XXX.XXXXX: UDP, length 7

Obrigado antecipadamente, desculpe pelo meu mau inglês.

    
por GAalexandres 14.10.2015 / 16:07

1 resposta

0

Você pode fazer isso, mas é preciso entender a horrível linguagem u32:

iptables -I INPUT 1 -m u32 --u32 "2 & 0xFFFF = 3" -j LOG

que leva a entradas de registro como a abaixo (observe o campo ID= ):

Oct 14 16:09:01 risby kernel: IN=p1p1 OUT= MAC=70:71:bc:ac:44:5a:00:13:72:ba:37:50:08:00 SRC=10.11.0.6 DST=192.168.3.11 LEN=1407 TOS=0x10 PREC=0x00 TTL=63 ID=3 DF PROTO=TCP SPT=45933 DPT=22 WINDOW=883 RES=0x00 ACK URGP=0

Os detalhes são:

  • 2 seleciona os quatro bytes que começam no byte 2 do cabeçalho, ou seja, bytes 2-5, dos quais 4 e 5 são o campo de ID

  • & 0xFFFF seleciona apenas os dois bytes inferiores do anterior, ou seja, o campo id

  • = 3 é verdadeiro IFO o anterior é 3.

Quanto ao offset, minha cópia de Stevens diz que o campo offset é o 13 bits inferior dos bytes 6 e 7, então para offset = 2 você provavelmente quer algo como

iptables -I INPUT 1 -m u32 --u32 "4 & 0x1FFF = 2" -j LOG

Use um destino diferente de LOG se desejar, por exemplo, ACCEPT ou DROP . No entanto, compartilho a curiosidade de guntbert sobre por que você quer fazer isso.

    
por 14.10.2015 / 17:24