A correspondência de string do iptables não funciona quando a opção --to é

A correspondência de string do iptables não funciona quando a opção --to é

quando eu entro na regra iptables que corresponde à string e a --toopção é>= 52

exemplo

iptables -I FORWARD 1 -m string --string anypattern --algo bm --to 100 -j DROP

O procedimento acima funciona corretamente e bloqueia pacotes IP que contêm a string "anypattern".

Agora, se eu alterar --topara um valor < 52, não funcionará

iptables -I FORWARD 1 -m string --string anypattern --algo bm --to 50 -j DROP

E os pacotes IP não serão bloqueados!

Estou esquecendo de algo ? ou este é um problema do iptables?

Exemplo:

linux:~$ sudo iptables -I OUTPUT 1 -m string --algo bm --string 7oula --to 52 -j DROP
linux:~$ echo 7oulaaaaaaaaaaa | nc  212.227.247.109 80
^C  #<---- Blocked here ==> Good
linux:~$ sudo iptables -I OUTPUT 1 -m string --algo bm --string coula --to 51 -j DROP
linux:~$ echo coulaaaaaaaaaaa | nc  212.227.247.109 80
HTTP/1.1 400 Bad Request
Server: nginx
Date: Sun, 26 Jan 2020 15:35:55 GMT
Content-Type: text/html
Content-Length: 150
Connection: close

<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>

Responder1

A --toopção oferece a vocêmáximodeslocamento no qual sua string pode começar. O deslocamento é relativo ao início do pacote IP. Se você somar:

  • 20bytes para o cabeçalho IP,
  • 20bytes para o cabeçalho TCP,
  • 12bytes para algumas opções TCP

você terminará com 52 bytes. Portanto, o início da carga TCP está no deslocamento 52, qualquer coisa menor que isso corresponderá apenas aos cabeçalhos TCP/IP.

Observe que as opções TCP não possuem comprimento fixo. O número 12 foi obtido experimentalmente atravéstcpdump, mas cada sistema pode enviar um número diferente de opções.

informação relacionada