Die Zeichenfolgenübereinstimmung von iptables funktioniert nicht, wenn die Option --to < 52 ist.

Die Zeichenfolgenübereinstimmung von iptables funktioniert nicht, wenn die Option --to < 52 ist.

wenn ich iptables Regel eingeben, die Zeichenfolge übereinstimmen und die --toOption ist>= 52

Beispiel

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

Das Obige funktioniert ordnungsgemäß und blockiert IP-Pakete, die die Zeichenfolge „anypattern“ enthalten.

Wenn ich das jetzt --toin einen Wert ändere < 52, funktioniert es nicht

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

Und die IP-Pakete werden nicht blockiert!

Übersehe ich etwas? Oder handelt es sich hier um ein iptables-Problem?

Beispiel:

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>

Antwort1

Die --toOption gibt Ihnen diemaximalOffset, bei dem Ihr String beginnen kann. Der Offset ist relativ zum Start des IP-Pakets. Wenn Sie addieren:

  • 20Bytes für den IP-Header,
  • 20Bytes für den TCP-Header,
  • 12Bytes für einige TCP-Optionen

Sie erhalten 52 Bytes. Der Anfang der TCP-Nutzlast liegt also bei Offset 52, alles darunter entspricht nur den TCP/IP-Headern.

Beachten Sie, dass die TCP-Optionen keine feste Länge haben. Die Zahl 12 wurde experimentell ermittelt durchtcpdump, aber jedes System kann eine andere Anzahl Optionen senden.

verwandte Informationen