Zum Inhalt springen

Jetzt Firewall nftables installieren und einrichten 2020

  • von
nftables installieren
nftables installieren

Als Firewall werden wir auf unserem Rootserver nftables installieren und einrichten. Seit Debian Buster wird die Firewall nftables in den Packages mitgeliefert und ersetzt die alten beliebten iptables, ip6tables, arptables und ebtables. Somit können wir die Firewall nftables einfach mit dem apt Befehl installieren.

sudo apt install nftables

nftables installieren und einrichten

Nachdem wir die Firewall nftables erfolgreich installiert haben, können wir uns mit dem nano Editor die Konfiguration Script Datei ansehen.

sudo nano /etc/nftables.conf

Nun sollten wir den Inhalten, wie unten abgebildet im nano Editor sehen. Hierbei handelt es sich um die Standard Konfiguration von nftables, welche wir dringend erweitern sollten.

#!/usr/sbin/nft -f

flush ruleset

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

nftables installieren und ssh Zugang akzeptieren

Bevor wir die Firewall aktivieren, sollten wir beachten das alle Ports blockiert werden. Somit auch der Port 22, womit wir uns per ssh über Putty eingeloggt haben. Daher sollten wir als Erstes zu mindestens den Port 22 freigeben, indem wir das Konfiguration Script entsprechend ändern. Dazu werden wir die rot markierten Passagen einfügen. Evtl. schauen uns wir noch mal unseren Beitrag debian ssh installieren an.

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
        chain input {
                type filter hook input priority 0;
                #accept ssh
                tcp dport { 22 } accept
        }
        chain forward {
                type filter hook forward priority 0;
        }
        chain output {
                type filter hook output priority 0;
        }
}

Localhost-Verkehr akzeptieren

Als Zweites sollten wir die Kommunikation von lokalen Programm zulassen, welche über das Loopback-Gerät mit dem Computer kommunizieren. Dazu fügen wir bereits an der zweiten Stelle folgende Zeile, welche wir rot Markiert haben, in unser Script ein.

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
        chain input {
                type filter hook input priority 0;
		# accept any localhost traffic
		iif lo accept
                #accept ssh
                tcp dport { 22 } accept
        }
        chain forward {
                type filter hook forward priority 0;
        }
        chain output {
                type filter hook output priority 0;
        }
}

Ausgehenden Verkehr akzeptieren

Um Pakete zuzulassen, die Teil einer bereits etablierten Kommunikation mit dem Netzwerk sind, können wir folgenden Eintrag in unserem Konfiguration-Skript an der zweiten Stelle einbinden. Durch den nächsten Eintrag wird jeder Versuch von einem Computer im Netzwerk, Ihren Computer zu erreichen, verworfen. Der Datenverkehr, der Teil eines von Ihnen gestarteten Datenflusses ist, wird jedoch akzeptiert.

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
        chain input {
                type filter hook input priority 0;
		# accept any localhost traffic
		iif lo accept
                # accept traffic originated from us 
                ct state established,related accept
                # drop invalid packets 
                ct state invalid counter drop
                #accept ssh
                tcp dport { 22 } accept
        }
        chain forward {
                type filter hook forward priority 0;
        }
        chain output {
                type filter hook output priority 0;
        }
}

imcp und imcpv6 Protokolle eintragen

Des Weiteren sollten wir noch die imcp und imcpv6 Protokolle akzeptieren. Denn die ICMP und ICMPv6 Protokolle sind die wichtigsten Unterstützungsprotokolle für das Internet. Diese Protokolle sind für Konnektivitätstests und Fehlersignalisierung vorgesehen, wenn ein Paket sein Ziel nicht erreicht. Durch den Empfang einer ICMP-Meldung kann eine Anwendung den Grund eines Fehlers nachvollziehen: Paket zu groß, keine Route verfügbar usw.

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
        chain input {
                type filter hook input priority 0;
		# accept any localhost traffic
		iif lo accept
                # accept traffic originated from us 
                ct state established,related accept
                # drop invalid packets 
                ct state invalid counter drop
                # accept icmp
                ip protocol icmp accept 
                # accept all icmpv6 
                ip6 nexthdr icmpv6 accept
                #accept ssh
                tcp dport { 22 } accept
        }
        chain forward {
                type filter hook forward priority 0;
        }
        chain output {
                type filter hook output priority 0;
        }
}

Alles Zählen und abweisen

Zum Schluss lassen wir noch alles zählen und ablehnen, so das nichts unerwünschte unseren Rootserver erreicht.

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
        chain input {
                type filter hook input priority 0;
		# accept any localhost traffic
		iif lo accept
                # accept traffic originated from us 
                ct state established,related accept
                # drop invalid packets 
                ct state invalid counter drop
                # accept icmp
                ip protocol icmp accept 
                # accept all icmpv6 
                ip6 nexthdr icmpv6 accept
                # accept ssh
                tcp dport { 22 } accept
                # count and reject everything else
                counter reject with icmpx type admin-prohibited
        }
        chain forward {
                type filter hook forward priority 0;
        }
        chain output {
                type filter hook output priority 0;
        }
}

nftables Firewall starten

Somit haben wir nun unsere nftables Grund Konfiguration für unsere Firewall, welche wir nun mit folgenden Befehlen aktivieren und starten.

sudo systemctl enable nftables
sudo systemctl start nftables

Bitte beachtet das es sich hierbei um eine Basic Konfiguration handelt, welche sämtliche Ports blockiert. Mit diesem Basic Skript werden sogar sämtliche Webseiten anfragen gefiltert und entsprechend blockiert. Damit euere Webseiten wieder entsprechend funktionieren, müssen wir die Ports 80 und gegeben Falls für SSL, Port 443 freigeben. Solltet Ihr einen email Service eingerichtet haben, müsste Ihr natürlich auch die Ports 143, 110 und 25 freigeben. Bei SSL sollten natürlich die Ports 993, 995 und 587 bzw. 465 auch freigeben werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.