Networking

我在 firewalld 的公共區域中添加了一個埠,但仍然無法訪問該埠

  • July 30, 2021

我已經使用 iptables 很長時間了,但直到最近才使用firewalld 。我使用以下命令通過 firewalld 啟用了埠 3000 TCP:

# firewall-cmd --zone=public --add-port=3000/tcp --permanent

但是我無法訪問埠 3000 上的伺服器。從外部盒子:

telnet 178.62.16.244 3000
Trying 178.62.16.244...
telnet: connect to address 178.62.16.244: Connection refused

沒有路由問題:我有一個單獨的規則,用於從埠 80 到埠 8000 的埠轉發,這在外部可以正常工作。我的應用程序肯定也在監聽埠:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      99         36797      18662/node

firewall-cmd似乎也沒有顯示埠 -看看它ports是空的。你可以看到我前面提到的轉發規則。

# firewall-cmd --list-all
public (default, active)
 interfaces: eth0
 sources:
 services: dhcpv6-client ssh
 ports:
 masquerade: no
 forward-ports: port=80:proto=tcp:toport=8000:toaddr=
 icmp-blocks:
 rich rules:

但是我可以在 XML 配置文件中看到規則:

# cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
 <short>Public</short>
 <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
 <service name="dhcpv6-client"/>
 <service name="ssh"/>
 <port protocol="tcp" port="3000"/>
 <forward-port to-port="8000" protocol="tcp" port="80"/>
</zone>

我還需要做什麼才能允許在埠 3000 上訪問我的應用程序?

另外:通過埠添加訪問權限是正確的做法嗎?或者我應該為我的應用程序創建一個防火牆“服務”嗎?

使用該--permanent標誌會將您的更改寫入持久配置,但不會寫入執行配置。在不帶標誌的情況下再次執行相同的命令--permanent以使其立即生效。

從 RHEL 7.1和目前版本的 Fedora 開始,您還可以使用以下命令將執行配置複製到永久配置:

firewall-cmd --runtime-to-permanent

奇怪的是,該規則似乎只被寫入配置文件,並沒有立即應用。我不得不重新載入防火牆:

firewall-cmd --reload

在此之後,規則出現了:

# firewall-cmd --zone=public --list-all
public (default, active)
 interfaces: eth0
 sources:
 services: dhcpv6-client ssh
 ports: 3000/tcp
 masquerade: no
 forward-ports: port=80:proto=tcp:toport=8000:toaddr=
 icmp-blocks:
 rich rules:

現在可以訪問該埠。

引用自:https://serverfault.com/questions/619803