iptables-restore schlägt beim Neustart manchmal fehl

iptables-restore schlägt beim Neustart manchmal fehl

Heute und gestern wurde mein Server automatisch neu gestartet und konnte das Netzwerkgerät während des Bootvorgangs nicht starten. Wenn ich den Rechner erneut neu starte, startet er einwandfrei. Auch hier hatte ich in den letzten 2 Monaten keine Probleme.

Die einzigen Fehlerprotokolle, die ich hierzu finden kann, sind:

Aug 23 06:37:14 server systemd[1]: Started ifup for ens16.
Aug 23 06:37:14 server systemd[1]: [email protected]: Main process exited, code=exited, status=1/FAILURE

Und

Aug 23 06:37:14 server sh[281]: iptables-restore: line 10 failed
Aug 23 06:37:14 server systemd[1]: [email protected]: Main process exited, code=exited, status=1/FAILURE
Aug 23 06:37:14 server sh[281]: run-parts: /etc/network/if-pre-up.d/iptables exited with return code 1
Aug 23 06:37:14 server sh[281]: ifup: failed to bring up ens16

/etc/network/if-pre-up.d/iptablesenthält:

#!/bin/sh
/sbin/iptables-restore < /etc/iptables.up.rules

/etc/iptables.up.rulesenthält:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [896:90530]
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
COMMIT

Was könnte hier zeitweise schief laufen und wie kann ich sicherstellen, dass dies nicht erneut passiert?

Antwort1

/etc/network/if-pre-up.d/iptablesIch vermute immer noch, dass während des gesamten Startvorgangs zwei Ausführungen von gleichzeitig ausgeführt werden. Da systemdes normal ist, Dinge gleichzeitig zu starten, sofern nicht anders abgeraten wird, gehe ich davon aus, dass der Startvorgang einen Skriptprozess für die loSchnittstelle und einen anderen für die ens16Schnittstelle auslöst. Dies würde zu einer gleichzeitigen Ausführung von führen iptables-restore, was zu Fehlern wie führen kann iptables-restore: line 10 failed. Ich kann jedoch keine Beweise liefern.

Ich bin es gewohnt, CentOS- und Red Hat-Systeme zu verwalten. Es war einmal, als einer dieser Server iptablesden Dienst beim Booten nicht initialisieren konnte, weil er gleichzeitig systemdgestartet wurde ip6tables. Dieser spezielle Fehler ist hier dokumentiert:https://bugzilla.redhat.com/show_bug.cgi?id=1477413

Ich schlage vor, dass Sie die Parallelität in Ihrem Skript behandeln, beispielsweise indem Sie Folgendes verwenden flock:

#!/bin/sh
/usr/bin/flock /run/.iptables-restore /sbin/iptables-restore < /etc/iptables.up.rules

Alternativ können Sie den tatsächlichen Wert der ${IFACE}Variablen überprüfen, bevor Sie iptablesdie Regeln wiederherstellen (Referenz:man 5 Schnittstellen):

#!/bin/sh
if [ "${IFACE}" == ens16 ]; then
    /sbin/iptables-restore < /etc/iptables.up.rules
fi

iptablesWenn Sie außerdem nur Regeln beim Booten laden möchten , empfehle ich Ihnen iptables-persistentstattdessen Folgendes zu verwenden:

# apt-get install iptables-persistent netfilter-persistent
# mv -v /etc/iptables.up.rules /etc/iptables/rules.v4
# systemctl enable netfilter-persistent.service
# rm -v /etc/network/if-pre-up.d/iptables

verwandte Informationen