Firewall: Difference between revisions
		
		
		
		
		
		Jump to navigation
		Jump to search
		
				
		Using 
		
	
 (add docs for nftables firewall)  | 
				|||
| Line 1: | Line 1: | ||
Different ways to handle <code>iptables</code>.  | Different ways to handle <code>iptables</code> and <code>nftables</code>.  | ||
== Using <code>iptables-persistent</code> on Debian ==  | == Using <code>iptables-persistent</code> on Debian ==  | ||
| Line 25: | Line 25: | ||
  iptables -I OUTPUT -d 192.168.111.111 -j DROP  |   iptables -I OUTPUT -d 192.168.111.111 -j DROP  | ||
== nftables ==  | |||
''nftables'' is the hip new thing in the kernel. It has nicer, easier to read config syntax and has a bunch of performance improvements. Current Debian (12) comes with it installed (but turned off).  | |||
* enable the firewall  | |||
 systemctl enable nftables  | |||
* a basic firewall config you can drop into /etc/nftables.conf  | |||
<code>  | |||
#!/usr/sbin/nft -f  | |||
flush ruleset  | |||
table firewall {  | |||
  chain incoming {  | |||
    type filter hook input priority 0; policy drop;  | |||
    # established/related connections  | |||
    ct state established,related accept  | |||
    # loopback interface  | |||
    iifname lo accept  | |||
    # icmp  | |||
    icmp type echo-request accept  | |||
    # open tcp ports: sshd (22), httpd (80)  | |||
    tcp dport { ssh, http, https, 999 } accept  | |||
    # tinc  | |||
    udp dport { 60000-61000 } accept  | |||
  }  | |||
}  | |||
table ip6 firewall {  | |||
  chain incoming {  | |||
    type filter hook input priority 0; policy drop;  | |||
    # established/related connections  | |||
    ct state established,related accept  | |||
    # invalid connections  | |||
    ct state invalid drop  | |||
    # loopback interface  | |||
    iifname lo accept  | |||
    # icmp  | |||
    # routers may also want: mld-listener-query, nd-router-solicit  | |||
    icmpv6 type { echo-request, nd-neighbor-solicit } accept  | |||
    # open tcp ports: sshd (22), httpd (80)  | |||
    tcp dport { ssh, http, https, 999 } accept  | |||
    # tinc  | |||
    udp dport { 60000-61000 } accept  | |||
  }  | |||
}  | |||
</code>  | |||
* start the firewall  | |||
systemctl start nftables  | |||
* see how it looks (assuming you have not just accidentally locked yourself out of the server)  | |||
nft list ruleset  | |||
get rich off your NFT!  | |||
[[Category:System]]  | [[Category:System]]  | ||
Revision as of 12:30, 18 February 2025
Different ways to handle iptables and nftables.
Using iptables-persistent on Debian
Note: In use on vrijdagmiddagborrel.
It's basically a set of iptables plugins for netfilter-persistent, which itself is a loader for different netfilter configuration. Once installed, it will take care of restoring rules at boot time, and through a small helper, can be used to reload/update/save rules on the fly.
Installation and config
- Installation:
 
apt install iptables-persistent netfilter-persistent
- Add/change iptables rules located at 
/etc/iptables/rules.v4and/etc/iptables/rules.v6 
Usage
- Apply new rules after changes made to 
rules.v*files and check result 
netfilter-persistent reload iptables -L
iptables oneliners
- list all rules from all chains
 
iptables -L
- block an IP
 
iptables -I INPUT -s 192.168.111.111 -j DROP iptables -I OUTPUT -d 192.168.111.111 -j DROP
nftables
nftables is the hip new thing in the kernel. It has nicer, easier to read config syntax and has a bunch of performance improvements. Current Debian (12) comes with it installed (but turned off).
- enable the firewall
 
systemctl enable nftables
- a basic firewall config you can drop into /etc/nftables.conf
 
- !/usr/sbin/nft -f
 
flush ruleset
table firewall {
 chain incoming {
   type filter hook input priority 0; policy drop;
   # established/related connections
   ct state established,related accept
   # loopback interface
   iifname lo accept
   # icmp
   icmp type echo-request accept
   # open tcp ports: sshd (22), httpd (80)
   tcp dport { ssh, http, https, 999 } accept
   # tinc
   udp dport { 60000-61000 } accept
 }
}
table ip6 firewall {
 chain incoming {
   type filter hook input priority 0; policy drop;
   # established/related connections
   ct state established,related accept
   # invalid connections
   ct state invalid drop
   # loopback interface
   iifname lo accept
   # icmp
   # routers may also want: mld-listener-query, nd-router-solicit
   icmpv6 type { echo-request, nd-neighbor-solicit } accept
   # open tcp ports: sshd (22), httpd (80)
   tcp dport { ssh, http, https, 999 } accept
   # tinc
   udp dport { 60000-61000 } accept
 }
}
- start the firewall
 
systemctl start nftables
- see how it looks (assuming you have not just accidentally locked yourself out of the server)
 
nft list ruleset
get rich off your NFT!