iptables-Regeln funktionieren nicht

iptables-Regeln funktionieren nicht

Ich bin ratlos, warum meine iptable-Regeln den Zugriff blockieren, https://example.com:9700obwohl accepteine Regel hinzugefügt wurde

Ich fange damit an, alles auszuräumen

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X

Dann alles löschen, Ausnahme für SSH und meinen 9700-Port hinzufügen

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 9700 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 9700 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Der Dienst funktioniert nach dem Löschen und funktioniert nach dem zweiten Regelsatz nicht mehr.

Beachten Sie, dass die Regel für SSH einwandfrei funktioniert. Ich kann mich nach dem Hinzufügen der Regel erneut über SSH mit meinem Server verbinden

DNS-Problem Laut einer der Antworten funktioniert verifizierter DNS nicht. Das erklärt jedoch nicht, warum ich immer noch nicht über die IP-Adresse darauf zugreifen kann:https://xx.xxx.xx.x:9700

Antwort1

Können Sie den Namen von example.com auflösen? Wenn Sie den Zugriff auf einen Namendienst blockieren, kann Ihr Computer example.com nicht erreichen. Sie müssten den Host example.com und seine IP-Adresse in /etc/hosts hinzufügen oder eine iptables-Ausnahme für Ihren DNS hinzufügen.

Wie veröffentlichtHier, eine Ausnahme für DNS-Lookups wäre:

iptables -A INPUT -p udp --source-port 53 -j ACCEPT

BEARBEITEN:

Da Sie DNS-Probleme ausgeschlossen haben, habe ich mir Ihre Regel genauer angesehen und nach meinem Verständnis von iptables kann sie nicht funktionieren. Sie erlauben INPUT-Verkehr (zu Ihrem Rechner) auf Zielport 9700 (auf Ihrem Rechner!) und OUTPUT-Verkehr (von Ihrem Rechner nach außen) von Ihrem lokalen Port 9700.

Sie möchten genau das Gegenteil (oder liege ich falsch?): Sie möchten, dass Ihr Computer einen externen Server über Port 9700 erreicht, und Sie möchten, dass dieser Server Ihnen antworten kann.

Ihre letzten beiden Regeln sollten also lauten:

iptables -A OUTPUT -p tcp -m tcp --dport 9700 -j ACCEPT
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

Dies ermöglicht Datenverkehr, der von einem beliebigen Port auf Ihrem Computer ausgeht (da Sie nicht steuern können, welchen Port ein Protokoll für ausgehenden Datenverkehr verwendet), zu jedem anderen Computer auf Port 9700 und ermöglicht Datenverkehr von jedem anderen Computer auf der Welt zu Ihrem Computer, WENN die Pakete Teil einer bereits hergestellten Verbindung sind.

Antwort2

Versuchen:

iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP

iptables -t filter -A INPUT -i lo -j ACCEPT

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

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

Ich gehe davon aus, dass der DNS-Server, der die IP-Adresse von example.com auflöst, nicht dieselbe Maschine ist.

Außerdem glaube ich nicht, dass es wirklich ein Problem ist, die Richtlinie der OUTPUT-Kette auf ACCEPT festzulegen. Probieren Sie es aus.

Dieser Regelsatz funktioniert für mich. Er sollte auch für Sie funktionieren.

Beste grüße!

verwandte Informationen