Command-line utility iptables allows users to configure and view information about their Linux firewall. One of its key functions, however, is its ability to list the rules that have already been created and are active. In this quick guide, we're going to show you several ways to do just that.

Listing all iptables rules

Listing all iptables rules is quite simple. Just run:

iptables --list

This will output a simple table such as:

Chain ufw-skip-to-policy-forward (0 references)
target     prot opt source               destination
DROP       all  --  anywhere             anywhere

Chain ufw-skip-to-policy-input (7 references)
target     prot opt source               destination
DROP       all  --  anywhere             anywhere

Chain ufw-skip-to-policy-output (0 references)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere

Listing iptables rules by specification

More useful perhaps is listing the rules by their function or specification. For this, you can use the -S flag:

iptables -S

Your list will be presented in this format instead:

-N ufw-skip-to-policy-forward
-N ufw-skip-to-policy-input
-N ufw-skip-to-policy-output

You can filter to only the types of rule you want to display by writing the chain name after your -S flag. For example:

iptables -S INPUT

Now you'll see only your input rules:

-P INPUT DROP
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -j ufw-before-logging-input
-A INPUT -j ufw-before-input
-A INPUT -j ufw-after-input
-A INPUT -j ufw-after-logging-input
-A INPUT -j ufw-reject-input
-A INPUT -j ufw-track-input

Listing chains as tables

If you'd prefer to see your chains in the tabular format, you can do so using the -L option. For example, iptables -L OUTPUT might return the following:

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ufw-before-logging-output  all  --  anywhere             anywhere
ufw-before-output  all  --  anywhere             anywhere
ufw-after-output  all  --  anywhere             anywhere
ufw-after-logging-output  all  --  anywhere             anywhere
ufw-reject-output  all  --  anywhere             anywhere
ufw-track-output  all  --  anywhere             anywhere

Showing packet counts in iptables

That about covers the basics of viewing iptables. The only thing we'd like to add is that adding -v to your command will allow you to see the number of packets and aggregate size of packets that are matched to each rule. This can be very handy indeed if you're trying to work out which rules are working as intended. Here's another example:

iptables -L INPUT -v
Chain INPUT (policy DROP 36 packets, 1847 bytes)
 pkts bytes target     prot opt in     out     source               destination
  259 20898 f2b-sshd   tcp  --  any    any     anywhere             anywhere             multiport dports ssh
10639  178M ufw-before-logging-input  all  --  any    any     anywhere             anywhere
10639  178M ufw-before-input  all  --  any    any     anywhere             anywhere
  162  7774 ufw-after-input  all  --  any    any     anywhere             anywhere
  148  7086 ufw-after-logging-input  all  --  any    any     anywhere             anywhere
  148  7086 ufw-reject-input  all  --  any    any     anywhere             anywhere
  148  7086 ufw-track-input  all  --  any    any     anywhere             anywhere
root@digitalocean-wordpress-lon1-s-1vcpu-1gb:~#