ip6tables – Firewall Software for Linux

IP6TABLES is a command-line tool used for configuring the IPv6 packet filtering rules in Linux systems. It is a part of the Netfilter project, which is a framework for packet filtering, network address translation, and other packet mangling operations in the Linux kernel. IP6TABLES allows administrators to define rules that determine which packets are allowed to pass through the firewall and which ones are blocked.


IP6TABLES works by manipulating the packet filtering rules in the kernel’s networking stack. The rules are organized into chains, which are sequences of rules that are applied to incoming and outgoing packets. Each rule in a chain specifies a set of conditions that must be met for the rule to be applied to the packet. If a packet matches a rule, the action associated with that rule is taken, which can be to allow or block the packet, or to modify it in some way.

IP6TABLES has several built-in chains, including the INPUT, OUTPUT, and FORWARD chains. The INPUT chain is used for packets that are destined for the local system, the OUTPUT chain is used for packets that originate from the local system, and the FORWARD chain is used for packets that are being routed through the system. In addition to the built-in chains, administrators can also create their own custom chains for more granular control over packet filtering.

Here is an example of how to use IP6TABLES to block all incoming traffic on port 80:

ip6tables -A INPUT -p tcp --dport 80 -j DROP

This command adds a rule to the INPUT chain that matches incoming TCP traffic on port 80 and drops (blocks) the packet.

Another example is to allow incoming SSH traffic (port 22) from a specific IP address:

ip6tables -A INPUT -p tcp -s 2001:db8::1 --dport 22 -j ACCEPT

This command adds a rule to the INPUT chain that matches incoming TCP traffic on port 22 from the IPv6 address 2001:db8::1 and allows the packet to pass through.


Here are the available options for the IP6TABLES command:

Option Description
-A Append a rule to a chain
-D Delete a rule from a chain
-I Insert a rule into a chain at a specific position
-R Replace a rule in a chain
-L List the rules in a chain
-F Flush (delete) all rules in a chain
-Z Zero (reset) the packet and byte counters in a chain
-N Create a new custom chain
-X Delete a custom chain
-P Set the default policy (allow or block) for a chain
-j Specify the action to take if a rule is matched
-p Specify the protocol (TCP, UDP, ICMPv6, etc.)
-s Specify the source IP address or subnet
-d Specify the destination IP address or subnet
–sport Specify the source port
–dport Specify the destination port
-i Specify the input network interface
-o Specify the output network interface

Troubleshooting Tips

  • If you are having trouble with IP6TABLES rules not being applied, make sure that the Netfilter framework is enabled in the kernel and that the necessary modules are loaded.
  • If you are having trouble with IP6TABLES rules not matching the packets you expect, use the --line-numbers option to list the rules in a chain with their line numbers. This can help you identify which rule is being applied to a packet.
  • If you are having trouble with IP6TABLES rules not being persistent across reboots, make sure that the rules are being saved to a file and loaded at boot time. The exact method for doing this can vary depending on your Linux distribution.


  • IP6TABLES is the IPv6 counterpart to the more commonly used IPtables command, which is used for IPv4 packet filtering.
  • IP6TABLES rules are applied in the order that they appear in a chain. If multiple rules match a packet, the first matching rule is applied.
  • IP6TABLES rules can be quite complex, with multiple conditions and actions specified in a single rule. It is recommended to use the --save option to save your IP6TABLES rules to a file, which can be edited and reloaded as needed.