为每个进程/服务创建iptables规则

cat*_*eof 22 linux iptables

是否可以使用iptables来允许由"进程"发起的流量,即使用进程名称?我想举例说明允许ping命令启动的所有内容.

bar*_*ddu 24

它看起来像所有者 iptables模块是你想要的.首先,检查您的系统中是否可用:

iptables -m owner --help
Run Code Online (Sandbox Code Playgroud)

您可以在这里阅读更多内容:http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH

  • 所有者仅允许您匹配拥有该进程的用户或组,而不是进程名称本身.(cmd-owner标志似乎已被删除). (6认同)
  • @MikeLundy:在你的系统中添加一个组(我自己使用`nonet`),然后在你的输出链中添加一条规则:`-A OUTPUT -m owner --gid-owner nonet -j REJECT --reject-with icmp-net-unreachable使用sg(`sg nonet"your_prog your_args"`)运行您事先知道要阻止的程序. (3认同)
  • 如果不支持,那么 [`​​control groups`](https://www.kernel.org/doc/Documentation/cgroup-v1/net_cls.txt) 就是解决方案。设置起来非常困难,但有标准内核支持。它需要可以手动构建的 iptables 1.6。我将发布一个关于如何设置应用程序并将其标记到 cgroup 中并让 iptables 识别它的答案。 (2认同)

Mic*_* D. 9

-m owner --pid-owner PID
Run Code Online (Sandbox Code Playgroud)

请参阅http://linuxpoison.blogspot.com/2010/11/how-to-limit-network-access-by-user.htmlhttp://linux.die.net/man/8/iptables

请注意,您需要ipt_owner模块,因为xt_owner不支持--pid-owner.

例如(这只是一个近似值)

#!/bin/bash
$@ &
iptables -m owner --pid-owner %1 -j REJECT
Run Code Online (Sandbox Code Playgroud)

但实际上,你最好使用--uid-owner和--gid-owner.首先, - pid-owner标准仅匹配精确的pid,这意味着您的程序可以轻松生成一个不会被此规则阻止的子进程.(至少我没有读过.)其次,iptables(8)警告--pid-owner在SMP系统上被破坏(这可能适用于你,也可能不适用于你,但在任何一种情况下都限制了可移植性).第三,上面的脚本中存在竞争条件,因为该进程在被阻止之前就已启动.(如果有一种方法可以在进程启动之前获取进程的pid,那么我从来没有听说过它.)