如何以编程方式访问iptables?

gau*_*nix 4 linux gnu iptables

有没有一种方法可以在不使用shell脚本的情况下以编程方式查询iptables?我没有自由使用shell脚本来运行iptables命令和grep输出.是否使用GNU C对iptables进行本地(API)级别的访问?至少我想查询iptables的默认策略.

我希望使用/ proc文件系统,但我认为它还没有实现.

Net*_*zer 5

您可以与所iptables调用的库进行交互libiptc.

这就是我创建Perl接口的方法iptables:CPAN IPTables :: libiptc

但是该libiptc库只为您提供了基本结构的API .访问和解析各个规则有点复杂,因为它取决于dyn-loading各个目标/匹配模块的共享库.

我的CPAN模块中的方法是我与do_command()from iptables.c进行链接,以进行规则更改.

您需要知道的另一件事是:

只需一次iptables调用,即可执行以下操作:

  1. 将整个规则集从内核复制到用户空间
  2. 解析它 libiptc
  3. 执行一个或多个更改(通常只通过iptables cmd进行一次更改)
  4. 通过libiptc将其转换为内核blob格式
  5. 将整个(新)规则集从用户空间复制到内核.

因此,如果您每次只进行一次更改,那么这是一个繁重的过程.但是你也可以利用这个优势,并一次执行许多更改,并将这些更改显示为内核的单个原子更改.


gau*_*nix 3

所以看起来没有任何办法,并且已经被Netfilter组承认了。

请参阅SO问题,如何以编程方式动态管理 iptables 规则?