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.