PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : iptables (ipt_string) Packet too big to attempt sublinear string search



Flightbase
07.01.04, 20:02
Hallo!

ich suche mit ipt_string in tcp paketen nach einem bestimmten string und will das paket so validieren (eine GET anfrage ohne den string wird also gedroppt). das klappt grundsätzlich auch... nur leider nicht ganz:



ipt_string: Packet too big to attempt sublinear string search (1074 bytes)
ipt_string: Packet too big to attempt sublinear string search (1480 bytes)


resultat: die webseite wird nur halb angezeigt (lustiges feature eigentlich)

lustig kann ich aber gerade nicht gebrauchen.
was ich jetzt schon weiß: der string, welchen ich an den server sende, kann bis zu 3kb groß werden.

wie kann ich jetzt vorgehen? kann ich a) die max. erlaubte größe erhöhen - oder evtl. nur das erste paket prüfen und den rest als valid erklären? sowas wie
"RELATED" <= aufgeschnappt ;)

vielen dank für eure tips.

greets, Nik

Thomas
07.01.04, 22:47
Hm...
Wenn du größere Pakete zulassen willst müsstest du direkt an dem String-Match-Modul basteln denke ich. Wird wohl an zu kleinen Puffern liegen. Da du das sicher nicht machen willst: Vielleicht kannst du die MTU für diese Pakete an deinem Router heruntersetzten um so die maximale Paketgröße des Moduls nicht zu überschreiten?
Ich weiss aber weder ob man die MTU für einzelne Pakete regulieren kann noch wie das String-Match-Modul arbeitet, setzt das Modul die Segmente erst wieder zusammen und vergleicht dann? Müsste ja fast so sein, sonst könnte man das Modul ja sehr einfach aushebeln...

Thomas.

Thomas
07.01.04, 23:02
Falls das Modul die Pakete nicht zusammensetzt, dann probiere mal etwas in diese Richtung aus:


iptables -A FORWARD -p tcp --sport 80 --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1000

Die '1000' müsstest du dann an die maximale Segmentgröße anpassen, bei der die Pakete noch gefiltert werden können von dem String-Match-Modul.
Allerdings erzeugst du damit einen ziemlichen Overhead...

Aber wie gesagt, lies vorher nochmal nach, ich habe keine Ahnung von diesem Modul...

Thomas.

Flightbase
07.01.04, 23:10
danke für die tips (und die pn) - ich hab mal beim ipt_string.c den wert von 1024 auf 3600 gesetzt - nur zum testen....
resultat: die fehlermeldung kam nicht mehr - die seite wird trotzdem nicht weiter aufgebaut.
*amkopfkratz*

--set-mss 1000 klingt relativ interessant. wenn es dann noch klappt, dass die "dazugehörigen" folgepakete automatisch also gültig gelten, wäre das die lösung.
allerdings hat der versuch mit den folgepaketen nicht so recht geklappt ;/

greets, Nik

Thomas
07.01.04, 23:16
Wie meinste das mit den Folgepaketen?
Wegen dem SYN-Flag?

Die max. Seg.-Größe wird beim Verbindungsaufbau für die gesamte Verbindung festgelegt. Daher reicht die Angabe bei den Paketen mit gesetztem SYN-Flag aus.

Versuche es zuerstmal mit einer sehr kleinen MSS, z.B. 500. Wenn es damit geht, dann kannste dich ja an die Grenzen des Moduls annähern... *g*


Thomas.

Thomas
07.01.04, 23:25
Ach ja: Was für eine Meldung erhälst du, wenn du die MSS heruntergesetzt hast? Bei 1000 z.B. immer noch die Meldung dass es z.B. "1480 bytes" sind?
Wenn ja scheint das Modul die Segmente zusammenzusetzten, was ja auch vernünftig erscheint.

Thomas.

Flightbase
07.01.04, 23:27
wenn ich das paket "zerlegt" hab, hat ipt in den nachfolgenden paketen den string nicht gefunden und brav gedropt. irgendwas mache ich falsch ;)

greets, Nik

Thomas
07.01.04, 23:30
Hm, du willst das also gerade anders herum wie ich dachte, Pakete mit dem String sollen durch, nicht umgekehrt...

Werden die weiteren Regeln der Forward-Kette überhaupt noch abgearbeitet nach dem die in die "TCPMSS" geschickt wurden...?

Thomas.

Thomas
07.01.04, 23:43
Ist das eigentlich die Firewall vom Webserver?
Dann müsstest du natürlich "--dport 80" schreiben.

Flightbase
07.01.04, 23:45
Original geschrieben von TThomas
Hm, du willst das also gerade anders herum wie ich dachte, Pakete mit dem String sollen durch, nicht umgekehrt...

Werden die weiteren Regeln der Forward-Kette überhaupt noch abgearbeitet nach dem die in die "TCPMSS" geschickt wurden...?

Thomas.

ok, das war jetzt ganz klar ne liga zu hoch ;)

moment ich versuch mal was ganz tolles *ja, ich weiß - nicht so viel bier in der woche...*


Mein string:

GET http://111.111.111.111/wundersamer-ordner/tolle-anwendung/aaaaBBBBccccDDDD[usw.]

was immer gleich ist:
http://111.111.111.111/wundersamer-ordner/

also wollte ich diesen neuen string als validierung nutzen: "http://111.111.111.111/wundersamer-ordner/"

nun denkt sich ipt: dat ist ok, dann suchen wir mal...

paket1 enthält:
"http://111.111.111.111/wundersamer-ordner/tolle-anwendung/aaaaBBBB"

paket2 enthält:
"ccccDDDD[usw.]"


offensichtlich sucht ipt auch in paket2 nach dem tollen string:
"http://111.111.111.111/wundersamer-ordner/"

welcher allerdings nicht mehr in paket2 enthalten ist - und ipt dropt das zweite paket. ziemlich unfair oder?

hab ich jetzt nen generellen, fatalen denkfehler gemacht?

greets. Nik

Thomas
07.01.04, 23:51
Hm, das scheint in der Tat so zu sein.
Normal wird das Modul dazu verwendet, Strings auszufiltern, dabei ist es egal ob alle Pakete gefiltert werden... Schwierige Sache. Aber das "too big" kam auch nimmer oder? *g*

Flightbase
07.01.04, 23:55
Original geschrieben von TThomas
Hm, das scheint in der Tat so zu sein.
Normal wird das Modul dazu verwendet, Strings auszufiltern, dabei ist es egal ob alle Pakete gefiltert werden... Schwierige Sache. Aber das "too big" kam auch nimmer oder? *g*

nein, aber die seite auch nicht...

nun hab ich echt nen problem - wie lös ich das denn nu?
am besten wäre halt, wenn das erste paket die nachfolgenden pakete validiert.
*schulterzuck*

mist gemeiner!

greets, Nik

Thomas
08.01.04, 00:02
Juhu, ich glaube ich habs!

Moment, ich muss das eben ausarbeiten...

Thomas
08.01.04, 00:27
AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH

Ich habe gerade ein RIIIIIIIIIIIIIIIIIIIIESIGES Skript geschrieben, leider einen sehr dummen Denkfehler gemacht, daher alles umsonst...

Sorry, aber da ich morgen um 6:30 Uhr raus muss gehe ich jetzt ins Bett.

N8!
Thomas.

Flightbase
08.01.04, 00:31
mist!

vielen dank für deine hilfe!

ich hau mich auch hin - morgen gehts früh raus - weiterärgern und grübeln.
wie gut, dass ich nicht admin bin - bei sowas bekomm ich immer schnell nen blutsturz ;)

greets, Nik

Flightbase
15.01.04, 16:32
nochmal ich...

ipt_string ist einfach nicht geeignet für ein solches vorhaben - wenn jemand jedoch mal in einer ähnlichen not stecken sollte:

http://sourceforge.net/projects/sproxy/

"sometimes it`s easier to code a solution by yourself."

greets, Nik

EOT

Thomas
15.01.04, 18:41
Schön dass du eine Lösung gefunden hast.

Aber warum hast du nicht gleich ein IPTables-Modul gecoded? Oder ist es ein Modul? Habe nicht so genau nachgelesen, bin im Lernstress... Proxy hat aber nicht danach geklungen.


Thomas.

Flightbase
15.01.04, 18:48
Original geschrieben von TThomas
Schön dass du eine Lösung gefunden hast.

Aber warum hast du nicht gleich ein IPTables-Modul gecoded? Oder ist es ein Modul? Habe nicht so genau nachgelesen, bin im Lernstress... Proxy hat aber nicht danach geklungen.


Thomas.

hm ja ne.
nen eigenständiges programm mit ner schönen config datei hat auch was.
vorallem, weil so die möglichkeit der anwendung wächst.

greets, Nik