Skip to main content

programmatic access to Linux iptables

Project description

linuxnet-iptables

linuxnet-iptables provides programmatic access to the Linux iptables(8) (or ip6tables(8)) command. Using linuxnet-iptables one can view existing chains/rules, create new ones, or delete existing ones. The package documentation is available here.

For the following examples, Python3 (3.6 or later) is required.

>>> from linuxnet.iptables import IptablesPacketFilterTable
>>> table = IptablesPacketFilterTable('filter')
>>> table.read_system_config()
>>> input_chain = table.get_chain('INPUT')
>>> for rule in input_chain:
...    print(' '.join(rule.to_iptables_args()))
...
-j prod_bad_traffic
-m state --state RELATED,ESTABLISHED -j ACCEPT
-j prod_ingress
-j prod_INPUT_ldrop
>>>
>>> print(input_chain.get_packet_count())
183506560
>>>

The above code requires root access in order to successfully invoke the iptables command. If you are uncomfortable running it as root, you can extract the iptables output as root and then process it with linuxnet-iptables (note that the -xnv options must be specified):

# iptables -xnv -L > /tmp/iptables.output
#

Then, as a regular user:

>>> with open("/tmp/iptables.output") as f:
...    output = f.read()
...
>>> from linuxnet.iptables import IptablesPacketFilterTable
>>> table = IptablesPacketFilterTable('filter')
>>> table.init_from_output(output)
True
>>> input_chain = table.get_chain('INPUT')
>>> for rule in input_chain:
...     print(' '.join(rule.to_iptables_args()))
...
-j prod_bad_traffic
-m state --state RELATED,ESTABLISHED -j ACCEPT
-j prod_ingress
-j prod_INPUT_ldrop
>>>

Modifications to the chains are also supported as shown in the following (hereon, root permissions will be assumed).

Creating a new chain:

>>> from linuxnet.iptables import ChainRule, Targets
>>> newchain = table.create_chain('acceptall')
>>> newchain.append_rule(ChainRule(target=Targets.ACCEPT))
>>>
# iptables -nv -L acceptall
Chain acceptall (0 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0
#

Modifying the new chain to only accept TCP packets:

>>> newchain.flush()        # remove the existing rule
>>> from linuxnet.iptables import PacketMatch
>>> match_tcp = PacketMatch().protocol().equals('tcp')
>>> rule = ChainRule(match=match_tcp, target=Targets.ACCEPT)
>>> newchain.append_rule(rule)
>>> newchain.append_rule(ChainRule(target=Targets.DROP))
>>>
# iptables -L acceptall -nv
Chain acceptall (0 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0
#

Deleting the new chain:

>>> table.delete_chain(newchain)
>>>

Installation

Python3 is required.

Available Makefile targets can be listed by invoking make with no arguments.

make install will install the package.

make test runs the unit tests.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

linuxnet_iptables-7.6.5.tar.gz (109.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

linuxnet_iptables-7.6.5-py3-none-any.whl (116.7 kB view details)

Uploaded Python 3

File details

Details for the file linuxnet_iptables-7.6.5.tar.gz.

File metadata

  • Download URL: linuxnet_iptables-7.6.5.tar.gz
  • Upload date:
  • Size: 109.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.15

File hashes

Hashes for linuxnet_iptables-7.6.5.tar.gz
Algorithm Hash digest
SHA256 08f3464857cdf7efa2dbde5479e1c01231576f1620b553be5de7163d8dde4bf9
MD5 d95aa602d76656a6f7eafe129acde9c1
BLAKE2b-256 79fae050de42ea8fea5a09f1e158fa33f0f0292e069b9bc1bff68b4b9b799006

See more details on using hashes here.

File details

Details for the file linuxnet_iptables-7.6.5-py3-none-any.whl.

File metadata

File hashes

Hashes for linuxnet_iptables-7.6.5-py3-none-any.whl
Algorithm Hash digest
SHA256 6075bc0010fd155b16afb2e78e931a74678b9e272d5797c45f51385a528a5df1
MD5 e30051e6645d07b9f0c46ffc7c88bd32
BLAKE2b-256 d70737bea96256ccc3161005880ab56a6e8d8d734753477c0958d3a994f89744

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page