Nftables Host absichern: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 6: Zeile 6:
 
*Wir wollen nun folgendes tun:
 
*Wir wollen nun folgendes tun:
 
*<span style="color:#202FF0">Der Rechner soll mit sich selbst über das Loopback Interface kommunizieren können.</span>
 
*<span style="color:#202FF0">Der Rechner soll mit sich selbst über das Loopback Interface kommunizieren können.</span>
*<span style="color:#004334">Vom Rechner selbst nach aussen soll zugelassen werden tcp 22,25,53,80,465,443, udp 53 und icmp</span>
+
*<span style="color:#004334">Vom Rechner selbst nach aussen soll alles zugelassen werden </span>
 
*<span style="color:#8a2be2">Auf den Rechner soll per "ssh, http und https" zugegriffen werden können.</span>
 
*<span style="color:#8a2be2">Auf den Rechner soll per "ssh, http und https" zugegriffen werden können.</span>
  
Zeile 12: Zeile 12:
 
*cat /etc/nftables.conf
 
*cat /etc/nftables.conf
 
  #!/usr/sbin/nft -f
 
  #!/usr/sbin/nft -f
 +
flush ruleset
 +
 
  <span style="color:#8a2be2">define local_tcp_ports = { 22 }</span>
 
  <span style="color:#8a2be2">define local_tcp_ports = { 22 }</span>
 
   
 
   
flush ruleset
 
 
  table inet filter {
 
  table inet filter {
 
         chain input {
 
         chain input {
Zeile 31: Zeile 32:
 
           }
 
           }
 
  }
 
  }
 +
 
=Wir schalten ping frei=
 
=Wir schalten ping frei=
 
*cat /etc/nftables.conf
 
*cat /etc/nftables.conf
Zeile 74: Zeile 76:
 
                 ct state new tcp dport $local_tcp_ports accept
 
                 ct state new tcp dport $local_tcp_ports accept
 
                 ct state new icmp type echo-request accept  
 
                 ct state new icmp type echo-request accept  
                 <span style="color:#FF0000">log prefix "--nftables-drop-input--"</span>
+
                 <span style="color:#FF0000">log prefix " --nftables-drop-input-- "</span>
 
         }
 
         }
 
   
 
   
Zeile 84: Zeile 86:
 
                 ct state new oifname "lo" accept
 
                 ct state new oifname "lo" accept
 
                 ct state new accept
 
                 ct state new accept
                 <span style="color:#FF0000">log prefix "--nftables-drop-output--"</span>
+
                 <span style="color:#FF0000">log prefix " --nftables-drop-output-- "</span>
 
         }
 
         }
 
  }
 
  }
 
</pre>
 
</pre>
 +
 +
  
 
==nftables Logging über journalctl ==
 
==nftables Logging über journalctl ==
Zeile 96: Zeile 100:
 
;Logausgabe mit ISO-Zeitformat
 
;Logausgabe mit ISO-Zeitformat
 
*journalctl -k -f -g nftables -o short-iso
 
*journalctl -k -f -g nftables -o short-iso
 +
;Nur drop-input
 +
*journalctl -k -f -g nftables-drop-input
  
 
=Aktivieren der Firewall beim Systemstart=
 
=Aktivieren der Firewall beim Systemstart=
 
*systemctl enable nftables --now
 
*systemctl enable nftables --now
 +
 +
=Source oder Destination IP oder Netze=
 +
;Hinweis für die Aufgaben.
 +
Source Ips oder Netze werden mit einem '''ip saddr IP''' angeben
 +
 +
Destination Ips oder Netze werden mit einem '''ip daddr IP''' angeben
 +
;Beispiele
 +
*ct state new ip daddr 192.168.2.8 tcp dport 22 accept
 +
*ct state new ip saddr 192.168.2.8 tcp dport 22 accept

Aktuelle Version vom 25. Juli 2025, 11:53 Uhr

Die ersten wirklichen Regeln die etwas bewirken

  • Momentan wollen wir nur den Host absichern.
  • Darum können wir die forward Kette erstmal aussen vor lassen.
  • Wir beziehen uns also nur auf den Host selbst.
  • Wir wollen nun folgendes tun:
  • Der Rechner soll mit sich selbst über das Loopback Interface kommunizieren können.
  • Vom Rechner selbst nach aussen soll alles zugelassen werden
  • Auf den Rechner soll per "ssh, http und https" zugegriffen werden können.

Die erste sinnvolle Konfiguration

  • cat /etc/nftables.conf
#!/usr/sbin/nft -f
flush ruleset 
define local_tcp_ports = { 22 }

table inet filter {
        chain input {
                type filter hook input priority filter; policy drop;
                ct state established,related accept
                ct state new iif "lo" accept
                ct state new tcp dport $local_tcp_ports accept 

        }
     

        chain output {
                type filter hook output priority filter; policy drop;
                ct state established,related accept
                ct state new accept
          }
}

Wir schalten ping frei

  • cat /etc/nftables.conf
#!/usr/sbin/nft -f
define local_tcp_ports = { 22 }

flush ruleset
table inet filter {
        chain input {
                type filter hook input priority filter; policy drop;
                ct state established,related accept
                ct state new iif "lo" accept
                ct state new tcp dport $local_tcp_ports accept
                ct state new icmp type echo-request accept 
        }
     

        chain output {
                type filter hook output priority filter; policy drop;
                ct state established,related accept
                ct state new accept
          }
}

Wir laden nun die Konfiguration

  • nft -f /etc/nftables.conf

Wir loggen

  • Wir wollen die abgelehnten Pakete loggen.
  • Die Idee dahinter ist, wir schreiben eine Regel kurz bevor die Default Policy greift.
  • Neu: Wir fügen in jeder Kette eine log-Regel ein, um verworfene Pakete zu protokollieren
  • cat /etc/nftables.conf
#!/usr/sbin/nft -f
define local_tcp_ports = { 22 }

flush ruleset
table inet filter {
        chain input {
                type filter hook input priority filter; policy drop;
                ct state established,related accept
                ct state new iifname "lo" accept
                ct state new tcp dport $local_tcp_ports accept
                ct state new icmp type echo-request accept 
                log prefix " --nftables-drop-input-- "
        }

     

        chain output {
                type filter hook output priority filter; policy drop;
                ct state established,related accept
                ct state new oifname "lo" accept
                ct state new accept
                log prefix " --nftables-drop-output-- "
        }
}


nftables Logging über journalctl

Erklärung
  • journalctl -k -f -g nftables
Nur Logtext ohne Metadaten
  • journalctl -k -f -g nftables -o cat
Logausgabe mit ISO-Zeitformat
  • journalctl -k -f -g nftables -o short-iso
Nur drop-input
  • journalctl -k -f -g nftables-drop-input

Aktivieren der Firewall beim Systemstart

  • systemctl enable nftables --now

Source oder Destination IP oder Netze

Hinweis für die Aufgaben.

Source Ips oder Netze werden mit einem ip saddr IP angeben

Destination Ips oder Netze werden mit einem ip daddr IP angeben

Beispiele
  • ct state new ip daddr 192.168.2.8 tcp dport 22 accept
  • ct state new ip saddr 192.168.2.8 tcp dport 22 accept