Wie blockiere ich alle Ports außer 80.443 mit iptables? [Duplikat]


14

Das Sperren aller Ports (rein und raus) ist einfach, aber mit dem Wort "except" ist es schwierig. Ich kenne keine Regeln, die die Bedingung erfüllen.

PS: Ich weiß, dass diese Frage nichts Neues ist. Tatsächlich habe ich aber keine Hilfe gefunden. Also, hilf mir bitte!


Können Sie nicht ALLE Ports schließen und in der nächsten Zeile einen einzelnen Port ÖFFNEN?
sinni800

Ich mache das: iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -I INPUT -p tcp --dport 80 -j ACCEPT ------ Es funktioniert nicht!
user71169

Antworten:


24

Zuerst die ! ist das NICHT-Symbol.

iptables -A INPUT -p tcp -m tcp -m multiport ! --dports 80,443 -j DROP

Zweitens haben die Regeln, die Sie geschrieben haben, möglicherweise nicht die erwarteten Ergebnisse. Sie löschen alles, einschließlich der Antwort auf die Verbindung an Port 80. Daher können Sie für die Zwecke eines Webservers keine Verbindung zu diesem Port herstellen.

Diese Regeln ermöglichen RELATED- und ESTABLISHED-Verbindungen, sodass ein Webserver funktionieren sollte, wenn Sie dies tatsächlich versuchen.

iptables -A INPUT -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT
<insert further allowed list here>
iptables -A INPUT -m conntrack -j ACCEPT  --ctstate RELATED,ESTABLISHED
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -j DROP

2
Sollte nicht !so entkommen werden \!, wenn die Bash-Shell verwendet wird?
Cristian Ciupitu

@CristianCiupitu Nein, es sollte nicht nötig sein zu entkommen. Sie haben vielleicht etwas Seltsames vor sich, aber bei meiner Prügelstrafe muss ich nicht entkommen.
Cybernard

Ich habe die Ausgabe von "iptables -nvL" überprüft, um Pakete in Verbindung zu sehen. Es scheint zu funktionieren, deine Regeln. Aber ich kann nicht überprüfen, ob es wirklich funktioniert oder nicht, es sei denn, einige Apps verwenden diese Ports. Eine App, die einen Port verwendet, bedeutet nicht, dass sie nur diesen Port verwendet. Also, irgendjemand einen Vorschlag zur Überprüfung?
user71169

1
@cybernard, ja, du hast recht. Eine Ebene !muss nicht entkommen werden. Entschuldigung für den Fehlalarm.
Cristian Ciupitu

3
@MohammadShahid Regeln sind nicht automatisch permanent, starten Sie neu und es wird weg sein und Sie können sich anmelden. Sie müssen der Liste der Ports 22 hinzufügen, wenn Sie eine ssh-Verbindung aufrechterhalten möchten.
Cybernard

5
# Set the default policy of the INPUT chain to DROP
iptables -P INPUT DROP

# Accept incomming TCP connections from eth0 on port 80 and 443
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

Dies sollte Ihnen geben, was Sie brauchen


3
Denken Sie daran, wenn Sie über SSH verbunden sind, sollten Sie den TCP-Port 22
Maximilian Ast

Ja, vergessen Sie nicht Ihren SSH-Port. Fügen Sie wahrscheinlich Ihren SSH-Port hinzu, bevor Sie die Standardrichtlinie zum Löschen festlegen. ;)
James Little

3

Sie können die Standardaktion auf DROP setzen und dann Ausnahmeregeln erstellen, um 80 und 443 zuzulassen.

# Setting default policies:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Exceptions to default policy
iptables -A INPUT -p tcp --dport 80 -j ACCEPT       # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT      # HTTPS

iptables durchsucht die Liste der Ausnahmen, bis eine Übereinstimmung gefunden wird. Es führt dann die durch den -jParameter angegebene Aktion aus (in diesem Fall ACCEPT). Wenn keine Übereinstimmung gefunden wird, wird auf die Standardrichtlinie zurückgegriffen und das Paket verworfen.

Beachten Sie, dass mit dieser Problemumgehung alle Unterdomänen gesperrt werden. Beispiel: Mit dieser Methode funktioniert sie auf www.mydomain.com, aber Ihre Subdomain wird nicht für DNS-Fehler geöffnet.


Es sollte funktionieren, ist es aber nicht. Ich bin so verwirrt.
user71169

Was geht nicht Erlaubt es alle eingehenden Pakete oder keine? Können Sie Ihre Frage mit der Ausgabe von aktualisieren iptables -nvL?
MTAK

Warum abstimmen? Ich habe dies in der Produktion laufen, so dass ich 100% sicher bin, dass es funktioniert.
Mtak

Es tut uns leid! Ich bin es nicht, jemand hat das getan :)) Ja, du bist mir sicher, aber es funktioniert nicht. Deshalb muss ich die Frage stellen.
user71169

2
Mach das nicht zu lange ssh.
Ashesh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.