FirewallD mit nftables installieren

Moderator: renaissance

Antworten
Benutzeravatar
renaissance
Site Admin
Beiträge: 38
Registriert: Freitag 30. April 2021, 13:30
Wohnort: Halle / Saale
Kontaktdaten:

FirewallD mit nftables installieren

Beitrag von renaissance »

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.

Code: Alles auswählen

/usr/bin/sudo /usr/bin/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.

Code: Alles auswählen

/usr/bin/sudo /usr/bin/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.

Code: Alles auswählen

#!/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.

Code: Alles auswählen

#!/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.

Code: Alles auswählen

#!/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.

Code: Alles auswählen

#!/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.

Code: Alles auswählen

#!/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.

Code: Alles auswählen

#!/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;
        }
}

Code: Alles auswählen

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

Code: Alles auswählen

/usr/bin/sudo /usr/bin/systemctl enable nftables
/usr/bin/sudo /usr/bin/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.

Quelle: [External Link Removed for Guests]
Antworten