问题 iptables c ++控件


我需要在C ++程序中控制进出linux框的入站和出站流量。我可以打电话 iptables 从我的程序中,但我更倾向于切断中间人并自己访问内核API函数。

我相信我需要使用 libnfnetlink但是,我无法找到任何API文档或示例程序。

我需要构建的规则非常简单 - 例如丢弃目标端口等于X的数据包等。我不打算编写完整的防火墙应用程序。

任何人都可以建议更好的方法,或提供一些文档或示例应用程序的链接?我宁愿避免阅读iptables代码,但我想我可能不得不,如果我找不到更好的资源。


3759
2017-08-28 15:04


起源

这是一个重复 stackoverflow.com/questions/109553/... - Claris
如果您担心popen / vfork开销,您可以使用另一个进程来堆叠所有iptables更改并使用iptables-restore暂时提交它们。 - anttir


答案:


一年前,我有相同的要求并进行了探测。但在联系了一些开源内核人员之后,这就是我所知道的 -

iptables的内核API没有外部化,也就是说,它们不是文档化的API。从某种意义上说,API可以随时改变。它们只能由iptables工具使用。它们不应该被应用程序开发人员使用。

-satish


9
2017-08-28 17:33



正如马克所说,没有人可以阻止你使用它,因为它是开源的。但是,应该小心,因为API可以在需要时改变。然后,您的应用程序需要处理API行为的更改。 - Satish
+1有趣的信息。我猜Thomi会做很多popen(“iptables ......”) - neuro
非常有趣 - 感谢您的信息! - Thomi


您通常不需要定期更改IP表规则(即经常在运行时)。因此调用/ sbin / iptables应该没问题。

如果您正在尝试这样做,那么您可能需要查看包含其自身智能的替代匹配或目标模块,或者使用NFQUEUE将数据包排入用户空间程序,该程序可以根据可以根据标准做出自己的决策随心所欲地改变(谨防向用户空间发送太多数据包,这是一个潜在的性能问题)


1
2017-08-29 22:55





为什么不直接获取iptables的源代码并像他们那样做呢?既然它是开源的......


0
2017-08-28 17:31



因为我需要一个稳定的界面 - 不能随时改变。 - Thomi