11

我需要从 C++ 程序中控制进出 Linux 机器的入站和出站流量。我可以iptables从我的程序中调用,但我更愿意去掉中间人并自己访问内核 API 函数。

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

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

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

4

4 回答 4

9

一年前,我有同样的要求并四处探索。但是在联系了一些开源内核的人之后,我才知道——

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

-satish

于 2009-08-28T17:33:03.350 回答
1

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

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

于 2009-08-29T22:55:40.340 回答
0

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

于 2009-08-28T17:31:52.947 回答
0

在跨平台网络( https://bitbucket.org/ptroen/crossplatformnetwork/)中,我编写了一个非常优雅的 IPTables 防火墙包装器,您可以在其中通过 JSON 控制防火墙(最多两个不同的 nic)。来源在这里:

https://bitbucket.org/ptroen/crossplatformnetwork/src/master/Tools/FirewallScript/FirewallScript.cc

在此处制作文件:https ://bitbucket.org/ptroen/crossplatformnetwork/src/master/Tools/FirewallScript/FirewallScript.make

请注意,如果您的文件系统中没有它们的 json 文件,它会在您第一次运行时为您生成一个。

其余的源代码在这个文件夹中: https ://bitbucket.org/ptroen/crossplatformnetwork/src/master/OSManagement/Firewall/

我在最终的操作报告中也做了一些说明: https ://bitbucket.org/ptroen/crossplatformnetwork/src/master/Cross%20Platform%20High%20Concurrent%20Network%20Framework%20Final%20Report.pdf

我将粘贴您可能需要处理的内容以使其正常工作: sudo systemctl stop firewalld sudo systemctl disable firewalld install iptables services sudo dnf iptables-services start the iptables service systemctl start iptables.service sudo systemctl restart iptables sudo iptables -L检查

唯一的构建依赖项是 boost C++。

于 2022-03-02T06:48:49.673 回答