Iptables / Langsame Verbindungen

PEASANT KING

Commander
Registriert
Okt. 2008
Beiträge
2.397
Moin moin,

wie der Titel schon verrät habe ich beim Aufruf einer Website gehostet auf meinem Server nach der Konfiguration von iptables das Problem, das die Websites langsam sind. Ich habe schon einiges probiert was man so im Netz findet, allerdings hilft das alles nichts.
Hier mal meine Rules:
Code:
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:12121

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Es muss mir hier noch irgendwas fehlen, ich weiß aber nicht was...
Danke schon mal für die Hilfe.
 
Port 80 und 443 werden eingehend akzeptiert, von daher passt alles.
 
Eine Firewall sorgt bei Fehlkonfiguration nicht dafür, dass etwas langsam reagiert. Es funktioniert dann schlicht gar nicht mehr. Ich würde den Fehler daher woanders vermuten.
 
  • Gefällt mir
Reaktionen: nkler und madmax2010
Welcher Webserver? Was für eine Website? Welche Hardware?
Wirds schneller wenn du die Firewall aus machst?
 
Hast du vielleicht IPv6 per Firewall gesperrt? Das kann zu einer Verzögerung führen, wenn der Browser erst IPv6 probiert.
 
  • Gefällt mir
Reaktionen: TheCadillacMan und madmax2010
Ja ich Depp, also handelt sich um Debian 10, Apache2 und Website ist eine Nextcloud Instanz.
Sobald ich iptables deaktiviere läuft es wie es soll.
 
Wenn du meinst, dass es an iptables liegt, mach doch mal ein tcpdump und schau dir den Traffic an.
 
  • Gefällt mir
Reaktionen: madmax2010
Es liegt nur in Verbindung iptables mit nextcloud. Andere Aufrufe funktionieren ohne Probleme.
 
Ja, und?

Fakt ist, dass dein Setup keine offensichtlichen Fehler enthält. Established/related, ein paar accepts, default drop. Das ist ein übliches Regelwerk. Allein daran kann man daher keinerlei Probleme erkennen, iptables läuft mit ähnlichen Regeln auf Millionen von Servern. Um deinem Problem nu auf die Schliche zu kommen, musst du dir den Traffic im Detail ansehen. Dort siehst du dann vermutlich auch was konkret schiefgeht.
 
Danke für eure Antworten :), nachdem ich mehrmals Established/related entfernt und hinzugefügt habe, läuft es nun seit Tagen. Komisches Gebaren.
 
PEASANT KING schrieb:
Komisches Gebaren.
So etwas ist für mich immer unbefriedigend und ich würde der Sache auf den Grund gehen. 🙂

Auffällig sind für mich zwei Dinge:
  1. Du blockierst ICMP. Das ist keine gute Praxis.
  2. Deine Regeln sind bis auf die erste nicht stateful.

Ich würde es so machen:
Code:
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh state NEW
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http state NEW
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https state NEW
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:12121 state NEW
Zusätzlich habe ich ganz am Anfang noch eine Regel drin, die von localhost alles erlaubt. Je nach Setup kann das erforderlich sein.
Code:
iptables -I INPUT 1 -i lo -j ACCEPT
 
Zuletzt bearbeitet von einem Moderator:
??? schrieb:
Deine Regeln sind bis auf die erste nicht stateful.
Müssen sie auch nicht und es ist auch eher unüblich, alle Regeln per Connection State zu spezifizieren.

Es gibt 4 states: new, established, related und invalid.

Ein übliches Regelwerk sieht so aus:

1 Drop invalid
2 Accept established/related
3 Accept source x
4 Accept port y
5 Accept port z
Default drop

Ab Regel 3 kann es nur noch state=new sein, weil die anderen 3 states bereits in 1+2 abgefangen wurden. In @PEASANT KING Regeln könnten daher maximal new und drop nach seiner ersten Regel übrig bleiben, es fehlt also lediglich die drop invalid Regel.

Dein Ruleset unterscheidet sich effektiv nicht von @PEASANT KING's Regeln, weil deine state=new insofern überflüssig sind als dass invalid dadurch zustande kommt, dass zB ACKs, FINs und dergleichen ankommen ohne dass ein SYN nebst SYN ACK gekommen ist. Deine new-Trigger sind daher effektiv wirkungslos da invalid-Pakete die Regeln sowieso nicht triggern würden.
Besser wäre da wie eben dargestellt eine drop invalid Regel, die entsprechende fehlerhafte Pakete sofort zu Beginn aussortiert und gar nicht erst weitergehend geprüft werden können.

Ab und an sieht man zusätzlich zur drop invalid Regel auch sowas wie "drop bogon sources". Das sind letztendlich Pakete, die von fehlerhaften Quellen stammen. Beispielsweise Pakete mit source IPs aus den privaten IP Ranges nach RFC1918.

??? schrieb:
ich würde der Sache auf den Grund gehen. 🙂
Da bin ich aber voll bei dir.
 
Zuletzt bearbeitet:
Mein Ruleset unterscheidet sich primär darin, dass ICMP nicht blockiert wird.
Raijin schrieb:
Interessant. Das hatte ich bisher gar nicht auf dem Schirm und meine Regeln immer so gebaut.
Danke für den Hinweis.
 
Zurück
Oben