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!

user71169
quelle
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
Cybernard
quelle
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

Fazer87
quelle
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.

mtak
quelle
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