Flushing IP table doesn’t flush NAT
When I execute sudo iptables -F
,my iptable rules for the nat table are not flushed. Why is this the case? What does the above command do?
I believe there are three tables: filter, nat, and mangle. I don’t think any of these tables are affected by sudo iptables -F
. Is this correct?
As the manual states, all iptables
commands work on a specific table.
When you omit the optional -t TABLE
flag the iptables -F
command will only work on the default table, the filter table.
Tables
There are currently three independent tables (which tables are present at any time depends on the kernel configuration options and which modules are present).
-t, --table table
This option specifies the packet matching table which the command should operate on. If the kernel is configured with automatic module loading, an attempt will be made to load the appropriate module for that table if it is not already there.The tables are as follows:
filter:
This is the default table (if no-t
option is passed). It contains the built-in chainsINPUT
(for packets destined to local sockets),FORWARD
(for packets being routed through the box), andOUTPUT
(for locally-generated packets).
nat:
This table is consulted when a packet that creates a new connection is encountered. It consists of three built-ins:PREROUTING
(for altering packets as soon as they come in),OUTPUT
(for altering locally-generated packets before routing), andPOSTROUTING
(for altering packets as they are about to go out).
mangle: This table is used for specialized packet alteration.
Until kernel 2.4.17 it had two built-in chains:PREROUTING
(for altering incoming packets before routing) andOUTPUT
(for altering locally-generated packets before routing).
Since kernel 2.4.18, three other built-in chains are also supported:INPUT
(for packets coming into the box itself),FORWARD
(for altering packets being routed through the box), andPOSTROUTING
(for altering packets as they are about to go out).
raw: This table is used mainly for configuring exemptions from connection tracking in combination with theNOTRACK
target. It registers at the netfilter hooks with higher priority and is thus called before ip_conntrack, or any other IP tables.
It provides the following built-in chains:PREROUTING
(for packets arriving via any network interface)OUTPUT
(for packets generated by local processes)
I believe you need to add -t <table_name>
option to flush nat
and mangle
tables.