我正在尝试使用 portmapper-2.1.1 (https://github.com/kaklakariada/portmapper)来获取到我的 ubuntu 16.04LTS 机器的 upnp 映射。
我已将 UFW 配置为允许所有传出并阻止传入(除了几个特定端口)。
我以为这会起作用,因为我在 ubuntu 机器上运行 portmapper(例如传出),但事实并非如此。我认为这是由于 upnp 设置查找客户端的方式。要清楚的是,禁用 UFW 后,portmapper 可以按预期工作。
我的第一个想法是只允许 upnp 服务“回复”的端口,但这似乎是随机的。例如(来自我的 UFW 日志):
4 月 26 日 19:07:34 [UFW BLOCK] IN=enp2s0 OUT= SRC=192.168.1.1 DST=192.168.1.161 LEN=411 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=1900 DPT=41927 LEN=391
4 月 26 日 19:33:32 [UFW BLOCK] IN=enp2s0 OUT= SRC=192.168.1.1 DST=192.168.1.161 LEN=411 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=1900 DPT=60212 LEN=391
(192.168.1.1 是我的路由器,192.168.1.161 是 ubuntu 盒子)
我不想为此而仅仅打开大多数/所有端口来接收传入的 udp 数据包,所以问题是:是否有一个 UFW/iptables 规则可以允许它工作,而不仅仅是“允许一切”?
答案1
您需要允许的数据包似乎具有以下特征:
- 它们通过接口 enp2s0 传入
- 它们的源 IP 地址是 192.168.1.1
- 它们的源 UDP 端口为 1900
因此,您需要允许来自 192.168.1.1 端口 1900 的所有传入 UDP 数据包。
使用此命令添加规则:
sudo ufw allow from 192.168.1.1 port 1900 to any proto udp
查看添加的规则:
me@ubuntu:~$ sudo ufw status
Status: active
To Action From
-- ------ ----
Anywhere ALLOW 192.168.1.1 1900/udp
希望这可以帮助!