web-dev-qa-db-ja.com

Firewalldのパブリックゾーンにポートを追加しましたが、ポートにアクセスできません

私は長い間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でアプリへのアクセスを許可するには、他に何が必要ですか?

また、ポート経由でアクセスを追加することは正しいことですか?または、代わりにアプリにファイアウォールサービスを作成する必要がありますか?

3
mikemaccana

--permanentフラグを使用すると、変更は永続的な構成に書き込まれますが、実行中の構成には書き込まれません。 --permanentフラグなしで同じコマンドを再度実行して、すぐに有効にします。

RHEL 7.1以降 およびFedoraの現在のバージョンでは、実行中の構成を永続的な構成にコピーすることもできます。

firewall-cmd --runtime-to-permanent
9
Michael Hampton

奇妙なことに、ルールは設定ファイルに書き出されるだけで、すぐには適用されないように見えました。ファイアウォールをリロードする必要がありました:

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:

これでポートにアクセスできるようになりました。

4
mikemaccana