How to Safely Reset iptables to Default in Ubuntu 12.04 Without Losing Remote Access


2 views

Resetting iptables to default settings in Ubuntu 12.04 can be risky if done improperly, especially when managing remote servers. The main concern is accidentally locking yourself out by dropping all connections, including your current SSH session. This guide provides a safe method to reset iptables while maintaining access.

Before making any changes, it's crucial to:

  1. Have physical access or an alternative way to access the machine (like a console in cloud environments)
  2. Create a backup of your current iptables rules
  3. Schedule the change during a maintenance window

Here's how to safely reset iptables:

# First, backup current rules
sudo iptables-save > ~/iptables-backup-$(date +%F).rules

# Set default policies to ACCEPT temporarily
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

# Flush all rules
sudo iptables -F

# Delete all user-defined chains
sudo iptables -X

# Reset counters
sudo iptables -Z

# Now you can load default Ubuntu rules or start fresh

For Ubuntu systems, using ufw (Uncomplicated Firewall) might be simpler:

# Reset ufw to default
sudo ufw --force reset

# Then enable with default rules
sudo ufw enable

After resetting, verify your rules:

sudo iptables -L -n -v

Test your SSH connection by opening a new session before closing your current one. If anything goes wrong, you can restore from backup:

sudo iptables-restore < ~/iptables-backup-[date].rules

If you specifically need the original Ubuntu 12.04 defaults, they typically include:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT

Resetting iptables incorrectly on a remote Ubuntu 12.04 server can immediately terminate your SSH connection, leaving you locked out. The default policy for INPUT chain in Ubuntu is ACCEPT, but flushing rules without preserving this can be dangerous.

First, check your current iptables configuration:

sudo iptables -L -v --line-numbers
sudo iptables-save > ~/iptables-backup-$(date +%F).rules

Create a failsafe script that will reset to accepting all traffic if something goes wrong:

#!/bin/bash
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -F
sudo iptables -X

Here's the safe sequence to reset iptables completely:

# Set default policies first
sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD ACCEPT

# Flush all rules
sudo iptables -F
sudo iptables -X

# Allow established connections
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Allow loopback
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

# Save the new rules
sudo /sbin/iptables-save | sudo tee /etc/iptables.rules

For easier management, create a reset script:

#!/bin/bash
echo "Resetting iptables to default Ubuntu 12.04 configuration"

# Reset all counters
iptables -Z

# Flush all rules and delete chains
iptables -F
iptables -X

# Set default policies
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

# Allow existing connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

echo "Current iptables configuration:"
iptables -L -v

# Make rules persistent
iptables-save > /etc/iptables.rules
printf '#!/bin/sh\niptables-restore < /etc/iptables.rules\n' > /etc/network/if-pre-up.d/iptables
chmod +x /etc/network/if-pre-up.d/iptables

After resetting, verify with:

sudo iptables -L -n

You should see:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           ctstate RELATED,ESTABLISHED
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           

For changes to survive reboot:

sudo apt-get install iptables-persistent
sudo service iptables-persistent start
sudo iptables-save > /etc/iptables/rules.v4