我正在尝试在 Ubuntu 17.10 中打开一个端口,但首先了解一些背景知识。
在过去的 16 个小时里,我一直在努力在 dosbox 下设置 BBS 邮件程序。在我的 dosbox 配置中,我设置了“serial1=modem listenport:601”来监听端口 601。为了测试这一点,我打开了一个终端并执行“telnet localhost 601”,每次都可以连接。当我尝试在 iptables 和 ufw 中打开端口时(我从 stack exchange 中找到了方法),现在端口似乎已关闭,dosbox 报告“Serial1:调制解调器无法打开 TCP 端口 601”。
但这一切都持续了一整天,直到我打开端口。
以下是 iptables 和 ufw 的报告:
iptables -L | grep 601
接受 tcp -- 任何地方 任何地方 tcp dpt:601
接受 udp -- 任何地方 udp dpt:601
ufw status 状态: 活跃
至操作来自 -- ------ ---- 601 允许任何地方
601 (v6) 允许任何地方 (v6)
所以我的问题有两个:
1) 为什么在我打开端口之前它可以工作,但现在打开端口后却不工作了? 2) 我该如何让它工作?
我的最终目标是能够从我的网络外部访问 BBS 邮件程序,但现在我只需要在打开端口的情况下进行本地测试。(在此之后,我的下一步是获取动态 DNS,以便我可以从网络外部开始测试)
答案1
使用 UFW 后,您无需关心 iptables。UFW 将为您完成这项工作。
因此,对于可能发生的情况,有一个可能的解释:
- 当使用 telnet 进行测试时,UFW 当时并未处于活动状态。
- 然后您启动了 UFW,默认的 ufw 规则是
deny
或drop
传入流量。 - 然后,您已为 udp/tcp 打开了端口 601,但意外地仅为 IPv6 打开了端口 601。
- 现在 telnet 不再起作用,因为您通过 IPv4 连接,并且您的连接根据您的 ufw 设置被丢弃/拒绝。
但找出它之前为什么能工作并不重要。我想更重要的是让它再次工作。你可以通过添加正确的 UFW 规则来实现这一点:
sudo ufw allow proto tcp from any to any port 601
然后使用以下命令检查 ufw 设置:
sudo ufw status verbose
此命令的输出应如下所示,例如:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
601/tcp ALLOW IN Anywhere
601/tcp (v6) ALLOW IN Anywhere (v6)
然后它就可以再次工作了。