私は長い間iptablesを使用してきましたが、最近まで firewalld を使用したことがありません。次のコマンドでポート3000 TCP firewalld経由で有効にしました:
# 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:
これでポートにアクセスできるようになりました。