Networking
我在 firewalld 的公共區域中添加了一個埠,但仍然無法訪問該埠
我已經使用 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:
現在可以訪問該埠。