Iptables

Iptables

Basic Concepts

Tables

iptables organizes rules into different tables. Each table contains a set of chains:

  • Filter Table: The default table for filtering packets. It has three built-in chains: INPUT, FORWARD, and OUTPUT.
  • NAT Table: Used for Network Address Translation (NAT). It has three built-in chains: PREROUTING, POSTROUTING, and OUTPUT.
  • Mangle Table: Used for specialized packet alterations. It has five built-in chains: PREROUTING, INPUT, FORWARD, OUTPUT, and POSTROUTING.
  • Raw Table: Used for configuring exemptions from connection tracking. It has two built-in chains: PREROUTING and OUTPUT.

Chains

Chains are lists of rules that iptables uses to determine the fate of packets:

  • INPUT: Handles packets destined for the local machine.
  • FORWARD: Handles packets routed through the machine.
  • OUTPUT: Handles packets originating from the local machine.

Rules

Each rule in a chain specifies conditions for matching packets and an action to take (e.g., ACCEPT, DROP).

Basic Commands

Here are some common iptables commands

View Existing Rules

To list rules in a specific table

sudo iptables -L -t filter
sudo iptables -L -t nat
sudo iptables -L -t mangle

To list rules with extended information

sudo iptables -L -v -n

Adding Rules

To append a rule to a chain

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

This rule allows incoming TCP traffic on port 22 (SSH)

To insert a rule at a specific position

sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT

This rule inserts a new rule at position 1 of the INPUT chain allowing incoming HTTP traffic.

Deleting Rules

To delete a specific rule

sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT

To delete a rule by its line number

sudo iptables -D INPUT 1

Flushing Rules

To remove all rules from a specific table

sudo iptables -F -t filter
sudo iptables -F -t nat
sudo iptables -F -t mangle

Saving Rules

To save rules so they persist across reboots, you can use

sudo iptables-save > /etc/iptables/rules.v4

To restore saved rules

sudo iptables-restore < /etc/iptables/rules.v4

Common Use Cases

Basic Firewall Setup

To set up a basic firewall that allows only SSH and HTTP traffic

# Flush existing rules
sudo iptables -F

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

# Allow incoming SSH and HTTP
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# Drop all other incoming traffic
sudo iptables -P INPUT DROP

NAT Configuration

To set up NAT (e.g., for a home router)

# Enable IP forwarding
sudo sysctl -w net.ipv4.ip_forward=1

# Configure NAT for outgoing traffic
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Port Forwarding

To forward traffic from port 8080 on the local machine to port 80 on a remote server

sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
sudo iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT

Advanced Features

Connection Tracking

iptables can track the state of connections

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

This rule allows incoming traffic that is part of an established or related connection.

Rate Limiting

To limit the rate of incoming connections

sudo iptables -A INPUT -p tcp --dport 22 -m limit --limit 2/minute -j ACCEPT

This rule limits SSH connections to 2 per minute.

Logging

To log packets that match a rule

sudo iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH Access: "

Logs will appear in /var/log/syslog or /var/log/messages, depending on your system

Configuration Files

iptables rules are typically saved in /etc/iptables/rules.v4 for IPv4 and /etc/iptables/rules.v6 for IPv6. You can use tools like iptables-persistent to automatically apply saved rules on boot

sudo apt-get install iptables-persistent

Transition to nftables

nftables is the successor to iptables and is intended to replace it in the future.

Testing: Use tools like curl, telnet, or netcat to test network connectivity and rule effectiveness.

Back to top