Ich habe Ubuntu LTS
seit ein paar Jahren ein System am Laufen. Gestern hat ein Stromausfall meinen Computer zum Absturz gebracht. Als die Stromversorgung wiederhergestellt war, habe ich das System gebootet und alles schien einwandfrei zu starten, mit Ausnahme von iptables
. Wann immer ich dieses System neu gestartet habe, ufw
startet immer, obwohl ich es so konfiguriert habe, dass es nicht funktioniert. Ich bevorzuge es iptables
einfach, weil ich es weiß, also fahre ich „ufw“ herunter und konfiguriere es neu iptables
und starte es mit dem folgenden Verfahren neu:
sudo ufw disable
sudo ip_tables_reset.sh
sudo ip_tables_config.sh
sudo iptables restart
und verifizieren Sie mit
sudo iptables -S
was zurückgibt:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j DROP
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
Nun die Linie
sudo iptables restart
kehrt zurück mit
Bad argument 'restart'
Ich verwende dieses Verfahren jedoch seit Jahren treu. Ich habe meines Wissens nach in letzter Zeit keine Updates installiert.
Was hat sich geändert, dass diese zuverlässige Methode nun versagt?
Referenz: iptables v1.4.12
Antwort1
Sie erwähnen diesen Befehl
sudo iptables restart # wrong usage, its not a service
Mit den folgenden Skripten können Sie Ihre Firewall sichern, aktivieren oder deaktivieren ... Überprüfen Sie zunächst, ob das Paket installiert ist
dpkg -l | grep iptables
eine Möglichkeit, aktuelle iptable-Einstellungen anzuzeigen
sudo iptables -L -n
die kanonische Art, aktuelle iptable-Regeln anzuzeigen (nur anzeigen, keine Änderungen)
sudo iptables-save
Wenn Sie sich Ihre Regeln ansehen, blockieren Sie den eingehenden Verkehr nicht (Ihre Schutzschilde sind deaktiviert), wohingegen die folgenden Regeln den gesamten eingehenden Verkehr mit Ausnahme der angegebenen Ports blockieren.
*filter
:INPUT DROP [331:17104]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [9727:1360720]
:GitHubWebHooks - [0:0]
-A INPUT -p tcp -m tcp --dport 9000 -j GitHubWebHooks
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A GitHubWebHooks -s 192.30.252.0/22 -j ACCEPT
-A GitHubWebHooks -j DROP
COMMIT
Beachten Sie, dass ich eine bestimmte IP-Adresse 192.30.252.0/22 öffne, damit ich einen Server ausführen kann, der auf eingehenden Datenverkehr lauscht. Alle Erwähnungen von GitHubWebHooks sind also optional. Wenn Sie das Obige in einer Datei speichern und diese Datei dann als Ihre Regeln laden, können Sie loslegen. Schilde hoch
bevor Sie etwas ändern, lassen Sie uns Ihre aktuellen Regeln in eine Ausgabedatei übertragen
vi firewall_save_current_rules.sh
#!/usr/bin/env /bin/bash
set -o errexit # exit on error
# dump current iptable rules to file
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root"
exit 1
fi
# ........
curr_timestamp=$(date '+%H%M%S%N')
curr_rulesfile=/etc/iptables/rules.v4.${curr_timestamp}.current_rules
rulesdir=$( dirname $curr_rulesfile )
if [[ ! -d $rulesdir ]]; then
echo about to create dir $rulesdir
mkdir $rulesdir
fi
iptables-save > ${curr_rulesfile} # dump current iptable rules into output timestamped file
echo curr_rulesfile $curr_rulesfile
Führen Sie nun das obige Skript aus, um Ihre aktuellen iptable-Regeln zu speichern
sudo ./firewall_save_current_rules.sh
Der folgende Code definiert einen neuen Regelsatz, mit dem wir standardmäßig den gesamten eingehenden Datenverkehr mit Ausnahme bestimmter Teile blockieren (insbesondere den SSH-Port sowie die normalen HTTP- und HTTPS-Ports).
vi firewall_shields_up.sh
#!/usr/bin/env /bin/bash
set -o errexit # exit on error
# create new set of iptable rules from inline list of rules - Block all incoming traffic by default except specified
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root"
exit 1
fi
# ........
curr_timestamp=$(date '+%H%M%S%N')
new_rulesfile=/etc/iptables/rules.v4.${curr_timestamp}.new_rules
rulesdir=$( dirname $new_rulesfile )
if [[ ! -d $rulesdir ]]; then
echo about to create dir $rulesdir
mkdir $rulesdir
fi
# ..... park into a new file below list of iptable rules
cat << EOF > ${new_rulesfile}
*filter
:INPUT DROP [331:17104]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [9727:1360720]
:GitHubWebHooks - [0:0]
-A INPUT -p tcp -m tcp --dport 9000 -j GitHubWebHooks
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A GitHubWebHooks -s 192.30.252.0/22 -j ACCEPT
-A GitHubWebHooks -j DROP
COMMIT
EOF
echo new_rulesfile $new_rulesfile
iptables-restore < ${new_rulesfile} # engage new iptable rules from file
echo here is new iptable settings
iptables-save
# ... if you are running docker you will want to bounce its daemon
# sudo service docker restart
Führen Sie das obige Skript aus, um neue iptable-Regeln zu definieren
sudo ./firewall_shields_up.sh
der Vollständigkeit halber ist unten ein Skript zur Fehlerbehebung aufgeführt, das die Firewall effektiv deaktiviert, indem es den gesamten ein- und ausgehenden Datenverkehr öffnet ... führen Sie es aus, wenn Sie eine leere Seite wünschen, führen Sie jedoch „firewall_shields_up.sh“ aus, um eine ordnungsgemäße Firewall wiederherzustellen
vi firewall_shields_down.sh
#!/usr/bin/env /bin/bash
set -o errexit # exit on error
# open up all incoming and outgoing traffic ... effectively disabling the firewall
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root"
exit 1
fi
# ........ lets first backup current rules into timestamped file
curr_timestamp=$(date '+%H%M%S%N')
curr_rulesfile=/etc/iptables/rules.v4.${curr_timestamp}.current_rules_before_opening_up_all_traffic
rulesdir=$( dirname $curr_rulesfile )
if [[ ! -d $rulesdir ]]; then
echo about to create dir $rulesdir
mkdir $rulesdir
fi
iptables-save > ${curr_rulesfile} # dump current iptable rules into output timestamped file
echo curr_rulesfile $curr_rulesfile
# ... now alter iptables to lower shield
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
# ... display new iptable rules
echo
echo following are the new iptable rules after we opened up all incoming and outgoing traffic
echo
iptables-save