Many Ubuntu users coming from other Linux distributions get confused when trying to manage iptables as a service. The error message "unrecognized service" occurs because Ubuntu doesn't treat iptables as a traditional service like some other distributions do.
Since Ubuntu 16.04 and later versions, iptables rules are managed differently through these primary methods:
# View current iptables rules
sudo iptables -L -n -v
sudo iptables -S # Shows rules in command format
# Flush all rules (temporary until reboot)
sudo iptables -F
# Save current rules to make them persistent
sudo netfilter-persistent save
# Reload saved rules
sudo netfilter-persistent reload
To properly manage iptables rules that persist across reboots:
# Install persistence package if not present
sudo apt install iptables-persistent
# During installation, it will ask to save current rules
# To manually save rules later:
sudo netfilter-persistent save
# To load saved rules:
sudo netfilter-persistent reload
Ubuntu's Uncomplicated Firewall (ufw) provides a simpler interface:
# Enable ufw
sudo ufw enable
# Check status
sudo ufw status verbose
# Add a rule (e.g., allow SSH)
sudo ufw allow 22/tcp
# Disable ufw
sudo ufw disable
If you're having trouble with iptables not behaving as expected:
- Check if ufw is running (conflicts with direct iptables usage)
- Verify that the iptables-persistent package is installed
- Ensure rules are saved properly before rebooting
For complex setups, create and manage your own iptables scripts:
#!/bin/bash
# Basic firewall script example
iptables -F
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
Save this as firewall-rules.sh
, make it executable (chmod +x
), and run it with sudo. Remember to save the rules afterward.
Many Ubuntu users coming from other Linux distributions often get confused when trying to manage iptables. Unlike CentOS/RHEL systems where iptables runs as a standalone service, Ubuntu handles firewall rules differently.
The error "unrecognized service"
occurs because modern Ubuntu versions don't use a traditional iptables service. Instead, they utilize:
1. netfilter-persistent (for saving rules)
2. ufw (Uncomplicated Firewall) as frontend
3. Direct iptables commands
Method 1: Using iptables Directly
To flush all rules (temporary):
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
Method 2: Using netfilter-persistent
For systems with iptables-persistent
package:
# Save current rules
sudo netfilter-persistent save
# Reload saved rules
sudo netfilter-persistent reload
# Flush all rules (doesn't affect permanent storage)
sudo systemctl restart netfilter-persistent
Method 3: Using UFW (Recommended)
Ubuntu's default firewall management tool:
# Disable firewall
sudo ufw disable
# Enable firewall
sudo ufw enable
# Reset all rules
sudo ufw reset
After modifying rules with direct iptables commands, save them permanently:
sudo iptables-save > /etc/iptables/rules.v4
sudo ip6tables-save > /etc/iptables/rules.v6
If rules don't persist after reboot:
# Install persistence package
sudo apt install iptables-persistent
# During installation, choose to save current rules
# Verify the service is enabled
sudo systemctl enable netfilter-persistent
Remember that modern Ubuntu systems (20.04+) often use nftables as backend while maintaining iptables compatibility. For new deployments, consider learning nftables syntax.