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