La coincidencia de cadenas de iptables no funciona cuando la opción --to es

La coincidencia de cadenas de iptables no funciona cuando la opción --to es

cuando entro en la regla de iptables que coincide con la cadena y la --toopción es>= 52

ejemplo

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

Lo anterior funciona correctamente y bloquea los paquetes IP que contienen una cadena "cualquier patrón".

Ahora, si cambio el valor --toa un valor < 52, no funcionará.

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

¡Y los paquetes IP no serán bloqueados!

Me estoy perdiendo de algo ? ¿O esto es un problema de iptables?

Ejemplo:

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>

Respuesta1

La --toopción te da lamáximodesplazamiento en el que puede comenzar su cadena. El desplazamiento es relativo al inicio del paquete IP. Si sumas:

  • 20bytes para el encabezado IP,
  • 20bytes para el encabezado TCP,
  • 12bytes para algunas opciones TCP

terminarás con 52 bytes. Entonces, el inicio de la carga útil TCP está en el desplazamiento 52, cualquier valor menor que eso coincidirá solo con los encabezados TCP/IP.

Observar que las opciones de TCP no tienen una longitud fija. El número 12 se obtuvo experimentalmente mediantetcpdump, pero cada sistema puede enviar una cantidad diferente de opciones.

información relacionada