firewalld検証

動作検証

それでは、動作検証として、以下の設定をします。

  1. pingの応答リクエストを無効化
  2. http通信の許可
  3. ポート8080の許可
  4. 特定のソースIPからの通信を遮断
  5. すべての通信の遮断
  6. すべての通信の遮断の解除

 

1.pingの応答リクエストを無効化
IPアドレスを確認します。
対象サーバのIPアドレスは192.168.136.138です。
クライアントPCからping応答確認します。

応答がありました。
それでは、永続的にブロックする設定をします。

# firewall-cmd --add-icmp-block=echo-request --permanent
success
# firewall-cmd --reload
success
# firewall-cmd --list-icmp-blocks
echo-request

再度確認します。

ブロックされました。

2. http通信の許可
http通信の許可をします。
※Apacheをインストールしてください。
現在の設定状況を確認します。httpサービスは許可していません。
# firewall-cmd --list-all

public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks: echo-request
rich rules:

 

下記URLへアクセスします。
http://192.168.136.138
当然ブラウザからアクセスできません。

それでは、httpサービスを永続的に許可します。

# firewall-cmd --add-service=http --permanent
success
# firewall-cmd --reload
success
# firewall-cmd --list-all

public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client http ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:

 

再度アクセスします。
Apacheのテストページが表示され、アクセスできました。

 

3.ポート8080の許可
※/etc/http/conf/httpd.confのリッスンするポートを80から8080へ変更してください。
# cp -p /etc/http/conf/httpd.conf /etc/http/conf/httpd.conf.org
# vi /etc/http/conf/httpd.conf
=============
#Listen 12.34.56.78:80
Listen 8080
=============

下記URLへアクセスします。
http://192.168.136.138:8080
タイムアウトし、表示されません。

それでは、ポート8080を永続的に許可します。

# firewall-cmd --add-port=8080/tcp --permanent
success
# firewall-cmd --reload
success
# firewall-cmd --list-all

public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client http ssh
ports: 8080/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks: echo-request
rich rules:

 

再度アクセスします。
先ほど同様Apacheのテストページが表示され、アクセスできました。

1.特定のソースIPからの通信を遮断
特定のソースIPから通信を遮断します。
対象ソースはIP:192.168.136.132です。

一旦ping応答のブロックを解除します。
# firewall-cmd --remove-icmp-block=echo-request
success
# firewall-cmd --list-icmp-blocks
[何も表示されないことを確認]

IPアドレスを確認します。
ping応答も確認できます。

blockゾーンへ登録・設定します。

# firewall-cmd --add-source=192.168.136.132 --zone=block
success
# firewall-cmd --get-active-zones

block
sources: 192.168.136.132

# firewall-cmd --zone=block --list-all

block (active)
target: %%REJECT%%
icmp-block-inversion: no
interfaces:
sources: 192.168.136.132
services:
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:

 

先ほどと同様にpingでアクセスします。

ブロックされていることを確認できました。

 

5.すべての通信の遮断
すべての通信を遮断します。
※ssh接続している場合は、セッションが遮断されますので、注意してください。
# firewall-cmd --panic-on
success

先ほどアクセスできていたブラウザのページをF5キーを押してリロードすると、アクセスできなくなっています。
localhostへのpingリクエストも遮断されています。

送受信すべてのアクセスの遮断が確認できました。

 

6.すべての通信の遮断の解除
送受信を含めたすべての通信の遮断を解除します。
# firewall-cmd --panic-on
success

下記の通り、アクセスできなかった通信が解除されました。

これまで設定した内容を確認します。
# firewall-cmd --list-all

You're performing an operation over default zone ('public'),
but your connections/interfaces are in zone 'block' (see --get-active-zones)
You most likely need to use --zone=block option.

public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client http ssh
ports: 8080/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:

 

# firewall-cmd --get-active-zones

block
sources: 192.168.136.132

 

例えば、ポートフォーワーディング設定など、上記以外の機能もあり、非常に拡張性が高いです。

今回はfirewalldの基本的な動作検証を行いました。

 

まとめ

・RHEL7以降、iptablesからfirewalldへ移行した。
・ファイアウォール設定方法は、GUI管理の「firewall-config」とCLI管理の「firewall-cmd」と2種類ある。
・firewalld の設定は、iptablesと違い、 XML ファイルで保存され、ファイルの差異を確認しているため、設定変更のたびにサービスを再起動する必要がない。
・firewalldは、「ゾーン」別にFWのフィルタ設定を定義し、各NICに割り当てることで、動作する。

 

参考:

RedHat Customer Portal 4.5. ファイアウォールの使用