IPTABLES: Warum wird mein Skript nicht angewendet?

519
Dave Teezo

Ich installiere einen neuen neuen VPS (von linode.com, wenn das wichtig ist) mit Ubuntu 16.04 LTS. Ich habe das folgende Skript für iptables geschrieben:

#!/bin/sh  iptables -F  iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP  iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT  iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT  iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT  iptables -A INPUT -j DROP iptables -A OUTPUT -j DROP iptables -A FORWARD -j DROP 

Dieses Skript sollte nur 22, 80 und 443 zulassen. Es ermöglicht auch ausgehende DNS-Auflösungen.

Ich habe dieses Skript iptables.shals root erstellt und benannt und es eingefügt /etc/network/if-pre-up.d. Habe ich auch gemacht chmod +x.

Nach dem Neustart scheint dieses Skript nicht angewendet zu werden. Ich habe dies durch Ausführen überprüft iptables -S, was Folgendes ergibt:

-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT 

Wie komme ich von hier aus voran? Ich bin jetzt ziemlich festgefahren.

aktualisieren

Ich habe keine Ahnung warum, aber nach dem Umbenennen uptables.shin iptableskann ich mich nach einem Neustart nicht mehr bei meinem Server anmelden. Das lässt mich denken, dass das Skript jetzt .shbeim Booten tatsächlich ausgeführt wird (und wenn es die Dateierweiterung nicht hat, warum?) Und dass in meinem Skript ein Fehler vorliegt. Ich bin so verwirrt.

0
Msgstr "Ich kann mich nach einem Neustart nicht mehr bei meinem Server anmelden." Ich denke, die Zeile "iptables -A OUTPUT -o eth0 -p tcp -m multiport --dports 22,80,443 ..." sollte `--sports" verwenden, da in "OUTPUT" die Antwort * von * Port 22 usw. Zugelassen werden soll Hinweis UDP / 53 hat die Regeln für "dport" / "sport", nicht jedoch für "dport" / "dport" oder "sport" / "sport". Kamil Maciorowski vor 6 Jahren 0
Ja natürlich! Ich werde es erneut versuchen, DANKE für diesen Tipp. Dave Teezo vor 6 Jahren 0
Das funktioniert nicht :(. Ich habe das Skript in meiner Frage aktualisiert, damit wird klar, was meine aktuelle Version ist. Dave Teezo vor 6 Jahren 0
Sind Sie sicher, dass die Schnittstelle "eth0" ist? Modernes Ubuntu kann so etwas wie "enpXsY" verwenden. [* Warum heißt meine Netzwerkschnittstelle enp0s25 anstelle von eth0? *] (Https://askubuntu.com/q/704361/693277) Kamil Maciorowski vor 6 Jahren 0
Es ist in der Tat "eth0" in meinem Fall. Ich habe das durch Ausführen von 'ifconfig' überprüft, was 'eth0' und 'lo' ergibt. Dave Teezo vor 6 Jahren 0
Ich habe folgendes über das Zustandsmodul gefunden: "` ESTABLISHED "bedeutet, dass das Paket einer Verbindung zugeordnet ist, die Pakete in beide Richtungen gesehen hat," NEW ", was bedeutet, dass das Paket eine neue Verbindung gestartet hat oder anderweitig mit einer Verbindung, die keine Pakete in beide Richtungen gesehen hat ". Dies legt nahe, dass Sie "NEW, ESTABLISHED" anstelle von "EINZIGARTIG" verwenden sollten. Ich habe jedoch keine praktische Erfahrung damit, ich könnte sehr falsch sein. Kamil Maciorowski vor 6 Jahren 0
Ich werde das ausprobieren! Dave Teezo vor 6 Jahren 0
So wie ich das sehe, lautet Ihre Frage "Warum wird das Skript nicht angewendet?" Meine Versuche * in Kommentaren *, das andere Problem (das sich nach der Umbenennung und Anwendung des Skripts manifestierte) zu lösen, waren aus Gründen der Höflichkeit, weil es keine einzige Frage dazu gibt; Es ist sicher ein separates Problem. Nun gibt es eine "Antwort", die versucht, Ihre `iptables'-Befehle zu korrigieren, ohne die explizite Frage zu beantworten. Meiner Meinung nach ist dies formal falsch. Bevor ich die Antwort ablehne, geben Sie bitte klar an, ob die Frage immer noch lautet: "Warum wurde das Skript nicht angewendet?" oder "wie kann ich meine Firewall vernünftig machen?" Kamil Maciorowski vor 6 Jahren 0
Sie haben absolut Recht, meine Frage war hauptsächlich, ob mein Skript etwas ** tun sollte. Das wurde gelöst. Ich sollte eine neue Ausgabe für Fragen bezüglich des tatsächlichen Inhalts / der Vernunft meiner Regeln eröffnen. Danke für Ihre Hilfe! Dave Teezo vor 6 Jahren 0

1 Antwort auf die Frage

0
cybernard

NEU ist von sich aus und ZUGEHÖRIGE, GESEHENE zusammen. Wenn Sie über ssh eine Verbindung herstellen, ist das Ziel möglicherweise Port 22, der Quellport ist jedoch zufällig. Deshalb funktioniert Regel # 2 in der Ausgabe wie erwartet.

iptables -I INPUT 1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -I OUTPUT 1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 

Sobald diese Regeln in Kraft sind, sind Ihre DNS-Anforderungen Teil des RELATED-, ESTABLISHED-Verkehrs und Sie können Ihre Port-53-Referenzen löschen.

Ich freue mich über Ihr Feedback. Ich denke nicht, dass es eine gute Idee ist, solche Dinge an allen Ports auszuführen? Sollte es nicht auch etwas wie "NEU, ERSTELLT" für den "to" -Fluss und "ERSTELLT, VERBUNDEN" für den "von" - Fluss sein? Dave Teezo vor 6 Jahren 0
Ich verstehe auch Ihre Bemerkung zu 53 nicht. Löscht eine ausgehende DNS-Anforderung eine "NEW" -Aufforderung? Dave Teezo vor 6 Jahren 0
@DaveTeezo Sie können OUTBOUND-Port 53 zulassen, aber INPUT 53 wird von RELATED, ESTABLISHED behandelt. RELATED, ESTABLISHED für alle Ports ist viel einfacher als zu versuchen, dies pro Dienst zu tun. Außerdem muss das Paket die OUTPUT-Kette durchlaufen, um RELATED, ESTABLISHED zu werden. Wenn Sie also die Verbindung in der OUTPUT-Kette blockieren, wird es niemals RELATED oder ESTABLISHED. cybernard vor 6 Jahren 0