python中的书面程序,它选择可用于TCP和UDP通信的随机端口。如果我通过运行sudo ufw enable
启用Linux防火墙(ufw)。我们可以通过以下方式允许任何端口sudo ufw allow port_number
。由于程序可以在运行时获取任何随机端口,因此不能告诉ufw允许任何特定端口。有没有办法告诉ufw像Windows一样通过向ufw提供程序名称来允许prog访问任何随机端口。在Windows防火墙中,我们可以提供以下命令以允许访问myprog的所有端口
netsh advfirewall firewall add rule name=rule_name_udp dir=in action=allow protocol=UDP localport=any program=path/myprog.exe
是否可以通过启用ufw的自定义程序允许ufw访问udp / tcp通信?
感谢所有人。
您可以将您的应用程序包装到systemd服务中,并使用启动后挂钩来调用额外的bash脚本,这会在防火墙上造成漏洞。
// path / to / python / app / assistant-ufw-hole-puncher
#!/bin/bash
#extra sleep for prespawn script
sleep 2
#punch holes for TCP ports
ports=`sudo netstat -ntlp 2>&1 |grep yourapp | sed -r 's/(.*:)([0-9]*)(\s.*)/\2/'|sort|uniq`
for port in $ports ; do
sudo ufw allow $port
done
#punch holes for UDP ports
ports=`sudo netstat -nulp 2>&1 |grep yourapp | sed -r 's/(.*:)([0-9]*)(\s.*)/\2/'|sort|uniq`
for port in $ports ; do
sudo ufw allow $port
done
另外,您可以在启动脚本之前生成此脚本,但您需要增加额外的睡眠时间以等待python脚本启动。
#!/bin/bash
/path/to/python/app/assistant-ufw-hole-puncher &
python ./your-app.py