Um Systeme mit sensiblen Daten vor unbefugtem Zugriff zu schützen, können beim RRZE besondere Netzzugriffsfilter (ACLs) beantragt werden, die über netzseitige Hardware-Firewalls realisiert werden. In manchen Fällen kann es dennoch sinnvoll sein zusätzlich eine lokale Firewall zu pflegen, um zum Beispiel erhöhte Sicherheitsanforderungen oder sich häufig ändernde Regeln abbilden zu können.
Diese Anleitung beschreibt das vom RRZE empfohlene Anlegen und Verwalten einer IP-Tables basierten lokalen Firewall unter Ubuntu.
Vorbereitung
Bitte prüfen Sie die vorbereitenden Schritte bevor Sie versuchen einzelne Teile der Anleitung durchzuführen.
In der Regel müssen diese Voraussetzungen für ein sinnvolles Umsetzen der Anleitung erfüllt sein.
Voraussetzungen
Es werden Kenntnisse im Umgang mit Firewalls im Allgemeinen und IP-Tables im Speziellen vorausgesetzt.
Pakete
Die folgenden Pakete müssen installiert werden.
Ubuntu 16.04
bash$ sudo apt-get install netfilter-persistent iptables-persistent
Ubuntu 18.04
bash$ sudo apt-get install netfilter-persistent iptables-persistent
Einrichtung
Das netfilter-persistent Paket liefert bereits einige Möglichkeiten, um Firewall-Regeln aus dem laufenden Betrieb zu persistieren und beim Systemstart wieder zu laden.
Eine kurze Einführung in die wichtigsten Funktionen finden Sie unten.
Für weitere Informationen besuchen Sie am besten die Ubuntu Manpage zu netfilter-persistent
Systemdienst einrichten
Der netfilter-persistent Dienst wird über die Plugins in /usr/share/netfilter-persistent/plugins.d/
konfiguriert.
Die Aufrufe des Init-Systems werden im Wesentlichen an alle verfügbaren Plugins der Reihe nach weitergereicht.
Der netfilter-persistent Dienst kennt die folgenden Aufrufe:
# Load firewall rules from /etc/iptables/rules.v[4|6] # IMPORTANT: stop can be called but is essentially a no-op bash$ sudo systemctl start netfilter-persistent # Flush the firewall rules bash$ sudo netfilter-persistent flush # Show some status info bash$ sudo systemctl status netfilter-persistent # Enable loading of configured rules on startup bash$ sudo systemctl enable netfilter-persistent
Regeln erstellen/persistieren
Um Firewall Regeln zu erstellen nutzt man am besten die iptables
Kommandos, um die Firewall manuell zu konfigurieren.
Eine bestehende Konfiguration kann dann mittels
bash$ sudo systemctl save netfilter-persistent
gespeichert werden.
Nach dem Speichern kann die Konfiguration in den Dateien /etc/iptables/rules.v4
bzw /etc/iptables/rules.v6
wiedergefunden werden.
Weitere Änderungen können – dem Format folgend – auch direkt in diesen Dateien vorgenommen werden.
Beim Systemstart wird die Firewall aus den Regeln dieser Dateien wieder aufgebaut.
Regeln flushen/Firewall deaktivieren
Um die Regeln der Firewall komplett zu entladen und somit die Firewall zu deaktivieren, kann man entweder das entsprechende netfilter-persistent Kommando oder direkt IP-Tables verwenden.
WICHTIG: Ein Stoppen des netfilter-persistent Dienstes bewirkt kein deaktivieren der Firewall!
bash$ sudo netfilter-persistent flush bash$ sudo iptables -F
Erweiterung um benutzerdefinierte Skripte
Um es beispielsweise zu ermöglichen, dynamische Firewallregeln aus einem Bash-Skript zu laden oder zu generieren kann auch der Plugin-Mechanismus von netfilter-persistent, um ein Plugin zum Aufruf eines entsprechenden Bash-Skriptes erweitert werden.
Die beiden nötigen Dateien samt Inhalt können nach folgender Anleitung erstellt werden.
Im Anschluss nicht vergessen die entsprechenden Regeln zu definieren!
Skript für benutzerdefinierte Regeln
# create rules.custom skript and fill it with your firewall rules/generation script bash$ sudo touch /etc/iptables/rules.custom bash$ sudo chmod +x /etc/iptables/rules.custom bash$ sudo vi /etc/iptables/rules.custom #!/bin/bash set -e rc=0 load_rules() { # add config here echo "Called load_rules()!" } flush_rules() { # add config here echo "Called flush_rules()!" } case "$1" in start) load_rules ;; stop|flush) flush_rules ;; *) echo "Usage: $0 {start|stop|flush}" >&2 exit 1 ;; esac exit $rc
Plugin für netfilter-persistent
# create netfilter-persistent plugin to execute your rules.custom script bash$ sudo vi /usr/share/netfilter-persistent/plugins.d/99-custom #!/bin/sh set -e rc=0 load_rules(){ if [ ! -x /etc/iptables/rules.custom ]; then echo "Warning: skipping rules.custom (no rules to load)" else /etc/iptables/rules.custom start 2> /dev/null if [ $? -ne 0 ]; then rc=1 fi fi } flush_rules(){ if [ ! -x /etc/iptables/rules.custom ]; then echo "Warning: skipping rules.custom (no rules to flush)" else /etc/iptables/rules.custom flush 2> /dev/null if [ $? -ne 0 ]; then rc=1 fi fi } case "$1" in start|restart|reload|force-reload) load_rules ;; save) echo "Warning: skipping save_rules on rules.custom - not supported!" ;; stop) # Why? because if stop is used, the firewall gets flushed for a variable # amount of time during package upgrades, leaving the machine vulnerable # It's also not always desirable to flush during purge echo "Automatic flushing disabled, use \"flush\" instead of \"stop\"" ;; flush) flush_rules ;; *) echo "Usage: $0 {start|restart|reload|force-reload|save|flush}" >&2 exit 1 ;; esac exit $rc
Test
Testen Sie die korrekte Initialisierung der Firewall einfach mit
bash$ sudo iptables -L