Fedora

Fedora 24:從伺服器掃描時埠顯示為打開,但從外部 nmap 時關閉

  • July 15, 2016

我有一個 Fedora 24 伺服器,服務於一個 Angular2 項目。Angular2 會在服務啟動後3000自動打開埠。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`

Acurl到伺服器的“外部”IP 地址在內部工作正常,但在從其他機器執行時將無法工作。

最後的解決方案是執行以下命令:

firewall-cmd --zone=FedoraServer --add-port=3000/tcp

似乎在 Fedora 24 或在 linodes 上設置的 Fedora 24 上,iptables 沒有 TCP 條目。

從描述來看,問題似乎是伺服器的防火牆阻止了對 Angular 開發埠的傳入請求。防火牆配置可以從相當簡單到非常複雜,請小心並確保您了解自己在做什麼。

話雖如此,最可能的解決方案是按照您正確假設的那樣打開防火牆中的埠。必須允許入站和出站流量通過,客戶端才能使用它。出站流量通常未經過濾,因此您可以保持原樣。OUTPUT只需更改INPUTiptables-commands 中的內容就足夠了。

如果這不起作用(或者甚至更好,在您嘗試上述方法之前),請查看輸出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相應地使用。

引用自:https://unix.stackexchange.com/questions/295042