我有一台 Fedora 24 服务器,为 Angular2 项目提供服务。一旦服务启动,3000
Angular2就会自动打开端口。3001
但是,虽然运行nmap localhost
显示端口已打开,但当我从远程计算机运行 nmap 时,这些端口显示为关闭。
也许有一个iptables
设置可以用来公开打开这些端口?或者类似的东西?
我尝试运行:
iptables -A OUTPUT -p tcp -m tcp --dport 3000 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 3001 -j ACCEPT
但这没有帮助,从外部扫描时端口保持关闭状态,并且我无法查看提供的内容(内部请求功能正常)。
输出netstat --an | egrep "3000|3001"
:
tcp6 0 0 :::3000 :::* LISTEN
tcp6 0 0 :::3001 :::* LISTEN`
curl
服务器的“外部”IP 地址在内部工作正常,但在从其他计算机运行时将无法工作。
答案1
最后的解决方案是运行以下命令:
firewall-cmd --zone=FedoraServer --add-port=3000/tcp
似乎在 Fedora 24 上,或者在 linodes 上设置的 Fedora 24 上,iptables 没有 TCP 条目。
答案2
从描述来看,问题似乎是服务器的防火墙阻止了对 Angular 开发端口的传入请求。防火墙配置可能非常简单,也可能极其复杂,请小心并确保您了解自己在做什么。
话虽这么说,最可能的解决方案是打开防火墙中的端口,正如您正确假设的那样。必须允许入站和出站流量通过,客户端才能使用它。出站流量通常未经过滤,因此您可以保持原样。只需OUTPUT
更改INPUT
iptables 命令即可使其正常工作。
如果这不起作用(或者在尝试上述操作之前更好),请查看输出iptables -nvL --line-numbers
并检查与您要添加的规则类似的规则。在上方或下方插入您的规则,以尽量减少破坏任何内容的风险。
这是我使用的一台机器上的输出,举例说明了我的意思:
Chain INPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 5608K 815M ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
2 3010K 621M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
3 68754 3002K DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
4 14095 1083K ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
5 397K 21M TCP tcp -- * * 0.0.0.0/0 0.0.0.0/0 ctstate NEW
6 45083 8704K UDP udp -- * * 0.0.0.0/0 0.0.0.0/0 ctstate NEW
7 128K 6265K REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with tcp-reset
8 45085 8707K REJECT udp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
9 1 52 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-proto-unreachable
Chain FORWARD (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 4647K packets, 1421M bytes)
num pkts bytes target prot opt in out source destination
Chain TCP (1 references)
num pkts bytes target prot opt in out source destination
1 56599 3172K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 54495 2814K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
3 158K 9164K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
Chain UDP (1 references)
num pkts bytes target prot opt in out source destination
这仍然相当简单,但仅仅向INPUT
链添加新规则并没有帮助。与您想要的规则类似的规则在TCP
链中,因此我们将在其中添加规则:
iptables -A TCP -p tcp --dport 3000 -j ACCEPT
如果所有这些仍然没有帮助,请检查外部计算机是否使用 IPv6 访问服务器并进行ip6tables
相应的使用。