NOTE: !!!!PLEASE READ THIS!!!!

There has been a change in the semantics of IPTables::IPv4 as of 0.98. In the future, if you have changes which you intend to have applied back to the kernel, you must EXPLICITLY call the commit() method on the table handle. Letting the DESTROY handle execute will simply call iptc_free() now. This is useful for if someone wants to just see the rules, or play with adding rules to chains, without actually changing the kernel side. The ability to do this was provided through a recent update to libiptc.

Introduction

IPTables::IPv4 is a Perl module, written in C using the XS toolset, and built on top of libiptc from netfilter/iptables. It provides an interface over libiptc, with match and target module handling, to allow Perl scripts to manipulate kernel firewalling, NAT/masquerade, and packet mangling rules.

This particular module has certain advantages over other similar modules:

I am also now including support for IPv6 firewalling rules, by way of the IPTables::IPv6 module. I have ported several modules for use with IPTables::IPv6, so it should at least be moderately useful. I've ported all the standard modules, so it should be reasonably useful. I don't yet have embedded docs for the modules, but they function like the IPv4 ones (except for icmpv6 - there are fewer ICMPv6 types, and the field name is 'icmpv6-type' - look at the source if you're curious). HL and hl are like TTL and ttl for IPv4, so use them in the same way. eui64 takes no options.

Please see the embedded POD documentation (perldoc IPTables::IPv4), or the included PDF, for full details on using the IPTables::IPv4 module.

Quick how-to on building IPTables:

tar zxf IPTables-IPv4-<version>.tar.gz -C <target dir> cd <target dir>/IPTables-IPv4-<version> perl Makefile.PL
make
make test # from here on must be as root! this will fail if not! make install

Note about "make test":

Doing "make test" will save your current ruleset, clear all rules, and restore the saved rules when the test sequence finishes. If it starts 'make test' and doesn't complete, or you have to break out of it for some reason, do the following:

IPT_IPV4_MODPATH=${PWD}/modules perl -Iblib/lib -Iblib/arch \

t/99restore_ruleset.t

at a prompt, from within the IPTables-IPv4-<version> directory. This will restore the ruleset that the first test script saved (in /tmp/ruleset.txt).

Modules

Presently, match and target modules are provided for everything that is in the stock 2.4.20 kernel. Some of the matches and targets in patch-o-matic are also supported, but not all. If you want more supported, look at the modules sources in the modules/ subdirectory and use them as a model for constructing your own module. If you can write a test case as well, that would also be helpful - it will allow its behavior to be verified at build time.

Patches/Submissions:

Submissions of bug fixes, new modules, etc., will be gladly accepted into the CVS tree. Unified diffs ('diff -u' style) are preferred, as they are the most human-readable form. I will continue to develop and improve IPTables::IPv4, but I can't guarantee that I will support every match and target module in as timely a fashion as you may need. If it's not something I use, I may not be familiar enough with it to port it, or give it the testing and attention it deserves, so submissions of new modules are particularly welcome.

Mailing list:

I've set up a mailing list for discussion, bug reporting, etc. about the IPTables::IPv4 module. If you wish to subscribe, go to:

http://lists.sourceforge.net/lists/listinfo/iptperl-general

and subscribe. Non-member posting has been disabled for the list, so you must subscribe to post to the list.

Reporting bugs:

This code has been used in production scenarios, and has had some beating done on it. However, bugs may remain, but I have tried to eliminate all I can. If you come across a bug, please e-mail me about it. The more detail you can provide, the better - script examples and strace/ltrace output, GDB backtraces, and other such debugging material can be invaluable in tracking down what happened, and why.

--
Derrik Pates
dpates@dsdk12.net