打开守护进程特定端口

打开守护进程特定端口

如果特定守护进程使用临时端口范围内的随机端口,我们如何为它设置防火墙入站规则? Windows 中有可用的自定义规则向导。 LINUX 和 UNIX 是否具有类似的功能可用于允许守护程序特定的入站规则流量?谢谢。

答案1

我的Debian Linux 10下,iptables提供了一个owner模块:

root@avalon:~# iptables -m owner --help |tail -n4
owner match options:
[!] --uid-owner userid[-userid]      Match local UID
[!] --gid-owner groupid[-groupid]    Match local GID
[!] --socket-exists                  Match if socket exists
root@avalon:~# 

如果您可以在专用用户下部署此服务,那么您可能可以实现您的需求。

答案2

如果您知道守护进程的进程 ID (pid),您可以轻松编写脚本来动态修改防火墙规则。您没有说明您使用的是什么防火墙,或者它是“允许所有拒绝”还是“拒绝所有允许”规则集,但这里有一个基本脚本,您可以从中获得一些想法并进行构建。

此脚本在 4000 到 5000 之间的随机 TCP 端口上启动 netcat 侦听器。

nc -l $((RANDOM%1000+4000)) &
echo $!
sleep 2 #avoid bad way to avoid a race condition.
DYNAMICPORT=`netstat -lpdn | grep $! |  awk '{print $4}'`. 

echo $DYNAMICPORT
0.0.0.0:4078

然后,您可以使用 $DYNAMICPORT 动态相应地修改您的防火墙规则。

请记住,该过程完成后将删除您动态添加的任何规则。

该解决方案的问题在于,它必须定期运行,因为守护程序使用临时范围的端口。

此解决方案的问题#1:在守护程序打开/关闭端口的时间与脚本发现它的时间之间,您可能会面临多个竞争条件。

问题#2:从脚本动态管理 iptables 规则集可能会导致一团糟..

问题#3:如果守护程序分叉,并且该分叉打开 ports ,那么此脚本将失败

问题#4:如果守护进程继续打开侦听端口,那么脚本将需要不断运行,这又很麻烦。

问题#5:跟踪不再侦听和活动的侦听端口将很棘手,导致无法删除防火墙规则。

相关内容