Linux で Ping (ICMP) の応答をブロックしたい場合、firewall-cmd --add-icmp-block=echo-request
を設定する方法があります。 これでも ICMP をブロックすることは出来ますが、送信元に対して「ICMP をブロックしている」旨のメッセージが返されます。 こういった場合は ICMP だけ DROP ゾーンで処理し、残りの TCP/UDP 通信は許可することで回避出来ます。 今回は CentOS8 で設定しました。
firewalld の設定を確認します。 ですが、firewalld が起動していないと設定を確認することが出来ません。
# firewall-cmd --list-all --zone=public
FirewallD is not running
このような場合は firewalld を起動します。
systemctl start firewalld
改めて設定を確認します。
# firewall-cmd --list-all --zone=public public (active) target: default icmp-block-inversion: no interfaces: ens192 sources: services: cockpit dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
TCP/UDP を全許可し、ICMP を含むその他全ての通信を DROP するには以下のように設定します。 設定後は --reload
を実行して設定を反映します。
firewall-cmd --add-port=0-65535/tcp --zone=public --permanent firewall-cmd --add-port=0-65535/udp --zone=public --permanent firewall-cmd --set-target=DROP --permanent firewall-cmd --reload
この状態で設定は以下のようになりました。
# firewall-cmd --list-all --zone=public public (active) target: DROP icmp-block-inversion: no interfaces: ens192 sources: services: cockpit dhcpv6-client ssh ports: 0-65535/tcp 0-65535/udp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
これで ICMP に対して「抑制している」というメッセージを応答しなくなります。