firewalld環境構築

製品紹介

ファイアウォールは、基本実装として外部から発生するトラフィックは拒否し、内部から外部へ発生したトラフィックの戻りのトラフィックは許可する動作を行います。
ファイアウォール設定で通信を許可されない限り、外部ネットワークからパケットを受信することはできない、非常にシンプルかつ最も基本的なセキュリティ対策です。

ファイアウォールは、以下の2種類に分けられます。

・ネットワークの境界に置くゲートウェイ型
・PCやサーバにインストールするパーソナル型

今回はCentOSにfirewalldをインストールし、パケットフィルタリングの動作検証を行います。

目次

1.firewalldとは

2.firewalldとiptablesの違い

3.firewalldインストールと基本操作・設定

4.起動コマンド

5.ゾーン一覧

6.サービス確認コマンド

 

1.firewalldとは

RHEL6(CentOS6)までのファイアウォールサービスは、iptablesを使ったフィルタを実装するのが一般的でした。
このままiptablesをCentOS7で利用することも可能ですが、RHEL7(CentOS7)以降では新たなファイアウォールサービスとしてfirewalldが実装されました。

firewalld の設定は、様々な XML ファイルで /usr/lib/firewalld/ と /etc/firewalld/ に保存されます。

GUIで管理・設定する場合は「firewall-config」ツールを使用します。
CLIで管理・設定する場合は「firewall-cmd」コマンドを使用します。

今回はCLIで管理・設定していきます。

 

2.firewalldとiptablesの違い

Linuxカーネルでは、パケットフィルタリングとしてnetfilterという機能を参照して動作します。firewalldもiptablesも共通して参照しています。
このnetfilter機能は、一部のパケットを受け取ったり、通過させたりします。

iptablesは、設定を /etc/sysconfig/iptables に保存します
firewalld は、 各設定をXML ファイル形式で /usr/lib/firewalld/ および /etc/firewalld/ に保存します。

iptablesでは変更するたびに古いルールがフラッシュされ新しいルールが /etc/sysconfig/iptables から読み込まれます。
一方、firewalld では差異のみが適用されます。このため、firewalld では既存の接続が中断されることなく実行時に設定変更ができます。

 

3.firewalldインストールと基本操作・設定

firewalldはCentOS7 minimam install PKGではデフォルトでインストールされていません。
# yum list installed firewalld

読み込んだプラグイン:fastestmirror
base | 3.6 kB 00:00
extras | 3.4 kB 00:00
updates | 3.4 kB 00:00
(1/4): base/7/x86_64/group_gz | 155 kB 00:02
(2/4): extras/7/x86_64/primary_db | 183 kB 00:02
(3/4): updates/7/x86_64/primary_db | 1.2 MB 00:06
(4/4): base/7/x86_64/primary_db | 5.6 MB 00:14
Determining fastest mirrors
* base: ftp.tsukuba.wide.ad.jp
* extras: ftp.tsukuba.wide.ad.jp
* updates: ftp.tsukuba.wide.ad.jp
エラー: 表示するパッケージはありません

============================

利用可能なパッケージを確認します。
# yum list available firewalld

読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.tsukuba.wide.ad.jp
* extras: ftp.tsukuba.wide.ad.jp
* updates: ftp.tsukuba.wide.ad.jp
利用可能なパッケージ
firewalld.noarch 0.4.3.2-8.el7 base

 

インストールするには、下記コマンドを実行します。
# yum -y install firewalld
インストールパッケージを確認したい場合はこちらを参照ください。

firewalldのコンフィグファイル保存場所
# vi /etc/firewalld/firewalld.conf

# firewalld config file
 
# default zone
# The default zone used if an empty zone string is used.
# Default: public
DefaultZone=public
 
# Minimal mark
# Marks up to this minimum are free for use for example in the direct
# interface. If more free marks are needed, increase the minimum
# Default: 100
MinimalMark=100
 
# Clean up on exit
# If set to no or false the firewall configuration will not get cleaned up
# on exit or stop of firewalld
# Default: yes
CleanupOnExit=yes
 
# Lockdown
# If set to enabled, firewall changes with the D-Bus interface will be limited
# to applications that are listed in the lockdown whitelist.
# The lockdown whitelist file is lockdown-whitelist.xml
# Default: no
Lockdown=no
 
# IPv6_rpfilter
# Performs a reverse path filter test on a packet for IPv6. If a reply to the
# packet would be sent via the same interface that the packet arrived on, the
# packet will match and be accepted, otherwise dropped.
# The rp_filter for IPv4 is controlled using sysctl.
# Default: yes
IPv6_rpfilter=yes
 
# IndividualCalls
# Do not use combined -restore calls, but individual calls. This increases the
# time that is needed to apply changes and to start the daemon, but is good for
# debugging.
# Default: no
IndividualCalls=no
 
# LogDenied
# Add logging rules right before reject and drop rules in the INPUT, FORWARD
# and OUTPUT chains for the default rules and also final reject and drop rules
# in zones. Possible values are: all, unicast, broadcast, multicast and off.
# Default: off
LogDenied=off

 

4.起動停止コマンド

主に使用する基本的な起動停止コマンドです。

起動
# systemctl start firewalld

停止
# systemctl stop firewalld

サービス起動確認
# systemctl status firewalld

再起動
# systemctl restart firewalld

自動起動On
# systemctl enable firewalld

自動起動Off
# systemctl disable firewalld

5.ゾーン一覧

デフォルトの設定内容を確認します。
デフォルトでは、「public」ゾーンがデフォルトゾーンとしてネットワークインターフェースに適用され、 dhcpv6-client, ssh が許可されています。
「firewall-cmd」コマンドで各種設定行う際に、適用先のゾーン指定(--zone=***)を省略した場合、このデフォルトゾーンに対して設定が適用されます。
動作としては、「ゾーン」にFWのフィルタ設定を定義し、NICに割り当てていきます。

drop:
着信ネットワークパケットはすべて遮断され、返信されません。送信ネットワーク接続のみが可能です。

block:
IPv4 では icmp-host-prohibited メッセージで、IPv6 では icmp6-adm-prohibited メッセージですべての着信ネットワーク接続が拒否されます。システム内で開始されたネットワーク接続のみが可能です。

public:
公開エリア用です。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターを信頼しません。選択された着信接続のみが許可されます。

external:
マスカレードを特別にルーター用に有効にした外部ネットワーク上での使用向けです。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターを信頼しません。選択された着信接続のみが許可されます。

dmz:
公開アクセスが可能ではあるものの、内部ネットワークへのアクセスには制限がある非武装地帯にあるコンピューター用。選択された着信接続のみが許可されます。

work:
作業エリア用です。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターをほぼ信頼します。選択された着信接続のみが許可されます。

home:
ホームエリア用です。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターをほぼ信頼します。選択された着信接続のみが許可されます。

internal:
内部ネットワーク用です。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターをほぼ信頼します。選択された着信接続のみが許可されます。

trusted:
すべてのネットワーク接続が許可されます。

 

6.サービス確認コマンド

firewalldの各種設定を行うサービスコマンドの主な一例です。

バージョン表示
# firewall-cmd --version

ヘルプコマンド
# firewall-cmd --help

firewalld状態表示
# firewall-cmd --state

指定のNICが現在割り当てられているゾーンを表示(例としてeno1を表示)
# firewall-cmd --get-zone-of-interface=eno1

デフォルトゾーンを表示
# firewall-cmd --get-default-zone

現在の設定を表示
# firewall-cmd --list-all

定義されている全てのゾーンを表示
# firewall-cmd --list-all-zones

ゾーンを指定して許可されているサービスを表示(例としてexternalエリアの許可サービスを表示)
# firewall-cmd --list-service --zone=external

デフォルトゾーンを変更(例としてexternalエリアをデフォルトゾーンに変更)
# firewall-cmd --set-default-zone=external

定義されているサービスの一覧表示
# firewall-cmd --get-services

定義されているサービスのXMLファイル一覧表示
# ls /usr/lib/firewalld/services

サービスを一時的に追加(再起動後リセットされる。例としてhttpサービスを追加)
# firewall-cmd --add-service=http

サービスを削除(例としてhttpサービスを削除)
# firewall-cmd --remove-service=http

サービスを永続的に追加(例としてhttpサービスを追加)
# firewall-cmd --add-service=http --permanent

特定のゾーンでサービスを永続的に追加(例としてhttpサービスをpublicゾーンに追加)
# firewall-cmd --zone=public --add-service=http --permanent

設定を反映させるためのリロード
# firewall-cmd --reload

追加されているサービスを表示
# firewall-cmd --list-service

ポートの一時的な許可を追加(再起動後リセットされる。例としてポート番号8080を許可)
# firewall-cmd --add-port=8080/tcp

ポートの削除(例としてポート番号8080を削除)
# firewall-cmd --remove-port=8080/tcp

ポートを永続的に許可を追加(例としてポート番号8080を許可)
# firewall-cmd --add-port=8080/tcp --permanent

特定のゾーンでポートを永続的に許可を追加(例としてudpポート番号5060と5061を許可)
# firewall-cmd --zone=public --add-port=5060-5061/udp

追加されているポートを表示
# firewall-cmd --list-port
(例としてdmzゾーンの追加されているポートを表示)
# firewall-cmd --zone=dmz --list-ports

icmpのブロック(例としてecho-requestをブロック)
# firewall-cmd --add-icmp-block=echo-request

icmpのブロックの削除(例としてecho-requestをブロックを削除)
# firewall-cmd --remove-icmp-block=echo-request

icmpのブロックリスト表示
# firewall-cmd --list-icmp-blocks

指定可能な ICMP タイプの一覧を表示
# firewall-cmd --get-icmptypes

特定のネットワークから通信を特定のゾーンへ指定(例として192.168.1.0/24をブロック)
# firewall-cmd --add-source=192.168.1.0/24 --zone=block

アクティブなゾーンと、それらに割り当てられているインターフェースの一覧を表示
# firewall-cmd --get-active-zones

指定したゾーンの設定すべてを表示
# firewall-cmd --zone=zonearea --list-all

デフォルトのゾーンを設定(この変更は即座に有効になり、ファイアウォールのリロードは不要。例としてpublicゾーンを設定)
# firewall-cmd --set-default-zone=public

すべての送受信パケットの遮断(パニックモード)
# firewall-cmd --panic-on

すべての送受信パケットの受け渡しを再開(パニックモード)
# firewall-cmd --panic-off

パニックモードの有効、無効状態を表示
# firewall-cmd --query-panic

firewalld検証ページへ