16 Firewalls unter Linux: iptables und nftables

16.1 Einführung

Firewalls sind essenziell für die Netzwerksicherheit und schützen Systeme vor unerwünschtem Netzwerkverkehr. Unter Linux gibt es zwei Haupttools zur Verwaltung von Firewalls: iptables und nftables.

16.2 iptables

iptables ist ein weit verbreitetes Tool zur Verwaltung der Netfilter-Firewall, die in den Linux-Kernel integriert ist.

16.2.1 Grundlagen

iptables arbeitet mit Tabellen, die wiederum aus Ketten bestehen. Jede Kette enthält eine Liste von Regeln, die nacheinander abgearbeitet werden. Die wichtigsten Tabellen sind:

16.2.2 Wichtige Ketten

16.2.3 Beispielkonfiguration

16.2.3.1 Anzeigen der aktuellen Regeln

Befehl:

sudo iptables -L

Ausgabe:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

16.2.3.2 Regel hinzufügen: Eingehenden SSH-Verkehr erlauben

Befehl:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Erklärung: Diese Regel erlaubt eingehenden TCP-Verkehr auf Port 22 (SSH).

16.2.3.3 Regel hinzufügen: Eingehenden HTTP-Verkehr erlauben

Befehl:

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Erklärung: Diese Regel erlaubt eingehenden TCP-Verkehr auf Port 80 (HTTP).

16.2.3.4 Regel hinzufügen: Eingehenden HTTPS-Verkehr erlauben

Befehl:

sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Erklärung: Diese Regel erlaubt eingehenden TCP-Verkehr auf Port 443 (HTTPS).

16.2.3.5 Regel hinzufügen: Alle anderen eingehenden Verbindungen blockieren

Befehl:

sudo iptables -P INPUT DROP

Erklärung: Diese Regel setzt die Standardpolitik für die INPUT-Kette auf DROP, wodurch alle nicht explizit erlaubten eingehenden Verbindungen blockiert werden.

16.3 nftables

nftables ist der moderne Nachfolger von iptables und bietet eine effizientere und flexiblere Möglichkeit zur Firewall-Verwaltung.

16.3.1 Grundlagen

nftables verwendet ebenfalls Tabellen und Ketten, jedoch mit einer einheitlicheren und einfacheren Syntax.

16.3.2 Beispielkonfiguration

16.3.2.1 Anzeigen der aktuellen Regeln

Befehl:

sudo nft list ruleset

Ausgabe:

table inet filter {
    chain input {
        type filter hook input priority 0; policy accept;
    }
    chain forward {
        type filter hook forward priority 0; policy accept;
    }
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

16.3.2.2 Tabelle und Ketten erstellen

Befehl:

sudo nft add table inet my_table
sudo nft add chain inet my_table input { type filter hook input priority 0 \; }

Erklärung: Diese Befehle erstellen eine neue Tabelle my_table und eine neue Kette input innerhalb dieser Tabelle.

16.3.2.3 Regel hinzufügen: Eingehenden SSH-Verkehr erlauben

Befehl:

sudo nft add rule inet my_table input tcp dport 22 accept

Erklärung: Diese Regel erlaubt eingehenden TCP-Verkehr auf Port 22 (SSH).

16.3.2.4 Regel hinzufügen: Eingehenden HTTP-Verkehr erlauben

Befehl:

sudo nft add rule inet my_table input tcp dport 80 accept

Erklärung: Diese Regel erlaubt eingehenden TCP-Verkehr auf Port 80 (HTTP).

16.3.2.5 Regel hinzufügen: Eingehenden HTTPS-Verkehr erlauben

Befehl:

sudo nft add rule inet my_table input tcp dport 443 accept

Erklärung: Diese Regel erlaubt eingehenden TCP-Verkehr auf Port 443 (HTTPS).

16.3.2.6 Regel hinzufügen: Alle anderen eingehenden Verbindungen blockieren

Befehl:

sudo nft add rule inet my_table input drop

Erklärung: Diese Regel blockiert alle anderen eingehenden Verbindungen, die nicht explizit erlaubt wurden.

Sowohl iptables als auch nftables bieten mächtige Werkzeuge zur Verwaltung der Netzwerksicherheit unter Linux. Während iptables weit verbreitet und gut dokumentiert ist, bietet nftables eine modernere und effizientere Alternative. Im nächsten Kapitel werden Sicherheitskonzepte wie AppArmor und SELinux behandelt.