So lassen Sie ausgehendes SMTP auf iptables Debian Linux zu

13

Wenn ich den gesamten Datenverkehr in der OUTPUT-Kette zulasse ( iptables -P OUTPUT ACCEPT), werden die E-Mails ordnungsgemäß gesendet . Sobald ich meinen Server mit diesen Regeln sperre, funktioniert der Postausgang nicht mehr. Alles andere funktioniert jedoch, was seltsam ist.

Sieht hier jemand etwas, das den Versand meiner ausgehenden E-Mails verhindert? Ich bin ratlos, habe mir diese Regeln immer wieder angesehen und viele verschiedene Versionen ausprobiert.

 iptables -F
 iptables -P INPUT DROP
 iptables -P FORWARD DROP
 iptables -P OUTPUT DROP


 iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

 iptables -A INPUT  -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

 iptables -A INPUT  -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

 iptables -A INPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

 iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
 iptables -A OUTPUT -p tcp --dport 587 -j ACCEPT

 iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 587 -j ACCEPT

 iptables -A OUTPUT  -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

 iptables -A OUTPUT  -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A INPUT  -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

 iptables -A INPUT -i lo -j ACCEPT
 iptables -A OUTPUT -o lo -j ACCEPT

 iptables -A OUTPUT -p udp  --dport 53 -j ACCEPT
 iptables -A INPUT -p udp  --sport 53 -j ACCEPT

 iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
 iptables -A INPUT -p tcp --dport 443 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT


 iptables -N LOGGING
 iptables -A INPUT -j LOGGING
 iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
 iptables -A LOGGING -j DROP
916 Netzwerke
quelle

Antworten:

18

Sie haben eine Regel, um den Verkehr herauszulassen, aber Sie haben keine Regel, um den Rückverkehr hereinzulassen.

Ich vermute, Sie meinten -A INPUTstattdessen , dass diese beiden Regeln gelten :

iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 587 -j ACCEPT

Die Verwendung des Quellports als Methode zum Zulassen von Datenrückkehr ist jedoch eine schlechte Methode zum Sichern des Systems. Alles, was jemand tun muss, ist, einen dieser Quellports zu verwenden und Ihr Firewall-Regelsatz wird unbrauchbar.

Eine viel bessere Idee wäre, alle -A INPUT ... --sportRegeln zu entfernen und stattdessen nur diese eine Regel zu verwenden:

iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Diese Regel funktioniert folgendermaßen: Wenn Ihr System eine ausgehende Verbindung herstellt, zeichnet der Kernel die Verbindung in einer Nachverfolgungstabelle auf. Wenn dann Pakete vom fernen System zurückkommen, wird geprüft, ob diese Pakete Verbindungen in der Verfolgungstabelle zugeordnet sind.
Das ESTABLISHEDBit ist das Bit, das Datenverkehr zulässt, der in direktem Zusammenhang mit der Sitzung steht. Hierbei handelt es sich um TCP-Pakete, die im Stream zurückkommen.
DasRELATEDbit lässt Verkehr, der mit der Verbindung zusammenhängt, aber nicht Teil der Verbindung selbst ist, durch. Dies können beispielsweise ICMP-Pakete sein, z. B. "ICMP kann nicht fragmentieren". Diese Pakete sind nicht Teil des TCP-Streams, aber von entscheidender Bedeutung, um den Stream am Leben zu erhalten (was auch eine andere Sache ist, die Ihr Regelsatz nicht abdeckt und ohne die Sie seltsame Verbindungsprobleme und -verluste sehen werden).

Diese Regel gilt auch für UDP-Datenverkehr. Da UDP jedoch zustandslos ist, ist es nicht ganz dasselbe. Stattdessen muss der Kernel die ausgehenden UDP-Pakete nachverfolgen und davon ausgehen, dass UDP-Pakete innerhalb eines kurzen Zeitrahmens verwandt sind, wenn sie auf derselben Host / Port-Kombination zurückkommen.

Patrick
quelle
Danke für die Antwort. Ich glaube, ich möchte den Datenverkehr nicht wieder einleiten, weil ich nur eine ausgehende SMTP-Verbindung herstelle. Dachte mir, wenn ich die Regel zur INPUT-Kette hinzufügen würde, würde ich SMTP wieder zulassen. Dies ist ein Webserver, der nur eine Verbindung zu einem externen SMTP-Host herstellen muss, um E-Mails zu senden .... thx!
916 Networks
Wenn Sie den zurückkommenden Datenverkehr nicht wieder zulassen, wie wird Ihr System dann alle Nachrichten "Ja, ich habe Ihre Daten" empfangen, die von den TCP- und SMTP-Protokollen verwendet werden?
Patrick
Das macht Sinn. Ich habe gerade deine Regel hinzugefügt und es hat total funktioniert. Ich freue mich über die Antwort! Ich habe versucht abzustimmen, aber ich habe nicht genug Ruf (neu bei Unix StackExchange)
916 Networks
Ich habe eine Erklärung hinzugefügt, wie diese Regel funktioniert.
Patrick