iptables is the traditional Linux packet filtering framework. While UFW provides a simplified interface, understanding iptables directly is valuable for advanced firewall rules, NAT, port forwarding, and Docker networking. This guide configures iptables on Ubuntu 26.04 LTS.

Tested and valid on:

  • Ubuntu 26.04 LTS

Prerequisites

  • Ubuntu 26.04 LTS
  • A user with sudo privileges
  • Basic networking knowledge

Step 1 – View Current Rules

sudo iptables -L -v -n
sudo iptables -L -v -n --line-numbers

Step 2 – Set Default Policies

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

Step 3 – Allow Established Connections

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Step 4 – Allow Loopback Traffic

sudo iptables -A INPUT -i lo -j ACCEPT

Step 5 – Allow SSH, HTTP, and HTTPS

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Step 6 – Block an IP Address

sudo iptables -A INPUT -s 203.0.113.100 -j DROP

Step 7 – Rate-Limit SSH Connections

sudo iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/min --limit-burst 5 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP

Step 8 – Save Rules Persistently

sudo apt install iptables-persistent -y
sudo netfilter-persistent save
# Rules saved to /etc/iptables/rules.v4

Conclusion

iptables is configured on Ubuntu 26.04 LTS with a default-deny policy and explicit allow rules. The rules persist across reboots via iptables-persistent. For most use cases, UFW provides the same capability with a simpler syntax.