Muss ich iptable-Regeln jedes Mal beim Booten wiederherstellen?

18

Jedes Mal, wenn ich neu starte, verliere ich die Iptables-Regeln, deren Eingabe so lange gedauert hat. Ich weiß, dass ich sie speichern und beim Booten wiederherstellen kann , aber gibt es eine Möglichkeit, sie für immer zu speichern? Muss ich sie wirklich jedes Mal beim Booten wiederherstellen? Ernsthaft?

Das Problem ist, dass ich eine RIESIGE Liste von IPs habe, in die ich sie mit einer while-Schleife lade. Dies kann bis zu 10 Minuten dauern.

Dies ist mein Heim-FTP-Server. Es ist ein kleines VM mit 1 GB RAM und sehr wenig Rechenleistung. Es gibt so viele IPs, weil ich auf dem asiatischen Kontinent so ziemlich aufgegeben habe. Ich brauche sie nicht, um meinen FTP-Server jeden Tag mit brachialer Gewalt zu erreichen. Ich blockiere auch die Regierung. Monitore, Tracker und Spammer.

Dies ist die while-Schleife, die ich zum Laden in die Liste verwende.

grep INPUT block.list | while read LISTA; do sudo iptables -A $LISTA; done
Capdragon
quelle
Ihre Frage ist ein bisschen mehrdeutig, wenn Sie sagen, dass Sie sie für immer speichern, dachte ich, Sie meinen, dass sie in einer Datei gespeichert sind, aber nach dem Lesen des Restes klingt es so, als wollten Sie sie nicht manuell neu laden jedes Mal beim Booten. Ich denke auch, dass die Anzahl der Regeln, die neu geladen werden müssen, gleich sein wird, so dass es noch eine Weile dauern wird, aber Sie müssen es nicht manuell tun, wenn Sie Pankajs Antwort folgen.
Jeff Welling
Möglicherweise wird ein Duplikat von iptables zurückgesetzt, wenn der Server neu gestartet wird
Eliah Kagan

Antworten:

21

Erstellen Sie zunächst eine Datei mit dem Inhalt von iptables-save:

sudo iptables-save > /etc/iptables_rules

Es spielt keine Rolle, wo Sie die Datei ablegen. Sie müssen lediglich sicherstellen, dass sich die nächste Zeile auf dieselbe Datei bezieht. Öffnen Sie /etc/rc.localals Nächstes diese Zeile und fügen Sie sie hinzu:

/sbin/iptables-restore < /etc/iptables_rules

Von nun an lädt iptables jedes Mal, wenn Ihr Computer hochfährt oder neu startet, Regeln aus der von Ihnen angegebenen Datei.

Pankaj Sharma
quelle
1
Ich erhalte -bash: /etc/iptables_rules: Permission deniedden ersten Befehl. Was seltsam ist, wenn man Sudo und alles benutzt.
Capdragon
5
Ich musste verwenden sudo sh -c '/sbin/iptables-save > /etc/iptables.save', um den Permission deniedFehler zu umgehen. Referenz
capdragon
Sie können Dateien in jedem beliebigen Verzeichnis erstellen. Es ist nicht obligatorisch, Dateien in / etc /
pankaj sharma
8
Ich würde nicht empfehlen, /etc/rc.localdafür zu verwenden. Sie wird später als der Rest Ihres Systemstarts ausgeführt und führt möglicherweise dazu, dass sich Ihr System in einem Zustand ohne Firewall befindet. Ich würde vorschlagen, dieses einzeilige Skript in /etc/network/if-up.d/firewall(neue Datei) zu platzieren. Dies stellt sicher, dass es jedes Mal ausgeführt wird, wenn Sie Ihre Netzwerkschnittstellen aktivieren.
Gertvdijk
2
Der Berechtigungsfehler ist normal / erwartet. sudo gilt nur für den Befehl vor dem ">", die Dateiumleitung erfolgt separat durch Ihre Shell.
ImaginaryRobots
16
apt-get install iptables-persistent

Bei der Installation sollte die aktuelle Konfiguration von iptables gespeichert werden. Andernfalls können Sie sie in diesen Dateien speichern (abhängig von v4 oder v6) und iptables-persistent lädt sie beim Booten :)

iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
Matt Fletcher
quelle
1

Wenn Sie viele Regeln haben, sollten Sie auch in Betracht ziehen, ipset in Verbindung mit iptables zu verwenden. Ipset verwendet eine indizierte Datenbanktabelle und ist viel schneller als iptables, wenn eine Adresse abgefragt wird, um zu entscheiden, ob sie akzeptiert oder abgelehnt werden soll.

http://ipset.netfilter.org/index.html

Bob Brunius
quelle