|
最近解决了一个问题,由于业务需要,我需要对路由器上运行的特定程序制定防火墙规则,iptables本身并没有专门针对进程的插件,找了一圈,最后通过iptables的owner插件来达到了这一目的
iptables owner模块介绍:
iptables-mod-extra 包含防火墙的owner模块,可用于Linux用户ID及用户组ID的匹配,在早期版本中支持pid-owner,sid-owner和cmd-owner的匹配,但由于效率太低,新版本的内核模块已经弃用这个俩个选项,目前owner支持以下参数匹配:
- owner match options:
- [!] --uid-owner userid[-userid] Match local UID
- [!] --gid-owner groupid[-groupid] Match local GID
- [!] --socket-exists Match if socket exists
复制代码 owner模块的说明如链接(pid-owner,sid-owner和cmd-owner已不再支持)
https://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH
根据owner模块的介绍,我们可以通过不同的用户ID和组ID来匹配规则,也就意味着,我只要以特定用户名或用户组运行程序,就可以达到防火墙匹配进程的目的。
这里我建议大家大家不要通过用户名去做匹配,因为你会遇到大量的权限问题(血的教训),最好是建立一个特定的用户组,然后将root加入用户组,这样可以避免权限问题
下面是配置步骤。
安装相关软件包
- opkg update
- opkg install iptables-mod-extra
- opkg install sudo
复制代码 添加用户组并将root加入用户组,组名为nonevpn, 组ID设置为65533
- echo nonevpn:x:65533:root >>/etc/group
复制代码 添加防火墙规则,我这里是数据打上特定标记
- iptables -t mangle -I OUTPUT -m owner --gid-owner 65533-j MARK --set-xmark 0x80000/0x80000
复制代码
以特定用户组执行应用程序
- sudo -g nonevpn /usr/lib/ddns/dynamic_dns_updater.sh
复制代码
|
|