CentOS7 firewalldパケットフィルタリング設定

CentOS7
この記事は約9分で読めます。

概要

CentOS6でiptablesに慣れていた方は、CentOS7のfirewall設定をする際、非常に取っつきにくてストレスが溜まるのではないでしょうか。

私もその一人で「またコマンド覚えなきゃいけのかいっ!面倒だなぁ」って嘆いていますが、結局のところ覚えなければいけませんのでがんばって覚えます。。

ということで、基本的なコマンド類を載せてみましたが、適宜追記していきたいと思っています。

基本コマンド

firewalldのパケットフィルタリング基本書式

※基本書式
# firewall-cmd [--permanent] [--zone=<zone>] [<options>..] [--timeout=<timevalue>]

ヘルプ(コマンドの使い方)

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

サービスの起動/停止/状態確認

※「.service」は省略してもOK!です。
firewalldサービスの起動や停止は、systemctlコマンドを使用します。

1.firewalldの起動
# systemctl start firewalld.service

2.firewalldの停止
# systemctl stop firewalld.service

3.firewalldの状態確認(※詳細版)
# systemctl status firewalld.service

firewalldの状態確認(※簡易版)
# firewall-cmd --state

サービスの自動起動(有効化/無効化/状態確認)

4.firewalldの自動起動を有効化
# systemctl enable firewalld.service

5.firewalldの自動起動を無効化
# systemctl disable firewalld.service

6.firewalld自動起動設定の状態確認
# systemctl is-enabled firewalld.service

デフォルトゾーンの確認

永続設定を確認したい場合は「–permanent」オプションを付けて実行してください。

・全ゾーンを一覧表示
# firewall-cmd --list-all-zones

・デフォルトゾーンがどのゾーンに設定されているのかを確認
# firewall-cmd --get-default-zone

・現在のアクティブゾーンの設定確認
# firewall-cmd --get-active-zones

・デフォルトゾーンの設定確認
# firewall-cmd --list-all

・特定ゾーンの設定確認(※例としてdmzを指定)
# firewall-cmd --list-all --zone=dmz

・利用可能なゾーン名を一覧表示
# firewall-cmd --get-zones

・デフォルトゾーンを変更
# firewall-cmd --set-default-zone=dmz

パケットフィルタリング(その1)

現状のフィルタリング設定を確認

<ポート番号及びサービス名を含めた設定確認>
・デフォルトゾーンに指定されているruntime(再起動したら消える)の現状確認
# firewall-cmd --list-all

・デフォルトゾーンに指定されているpermanent(再起動しても消えない)の現状確認
# firewall-cmd --list-all --permanent

<ポート番号の確認>
・公開中のポート番号一覧
# firewall-cmd --list-ports

・デフォルトゾーンに指定されているポート番号の永続設定を確認
# firewall-cmd --list-port --permanent

・パブリックゾーンに指定されているポート番号の永続設定を確認(※ゾーン指定版)
# firewall-cmd --list-port --zone=public --permanent

<サービスの確認>
・デフォルトゾーンに指定されているサービスの確認
# firewall-cmd --list-service --permanent

・パブリックゾーンに指定されているサービスの確認(※ゾーン指定版)
# firewall-cmd --list-service --zone=public --permanent

ポートを開ける(任意のポート/サービスを許可)

任意のポート/サービス名を許可します。ポート番号で指定する方法とサービス名で指定する方法の2種類があります。

<ポート番号を指定する場合>
・80番ポート(HTTP)を許可
# firewall-cmd --add-port=80/tcp --permanent

・123番ポート(NTP)を許可
# firewall-cmd --add-port=123/udp --permanent

<サービス名を指定する場合>
・HTTPを許可
# firewall-cmd --add-service=http --permanent

・NTPを許可
# firewall-cmd --add-service=ntp --permanent

ポートを閉じる(任意のポート/サービスを拒否:受信拒否する場合)

事前に登録した許可設定を削除する場合

<ポート番号指定で削除する場合>
・80番ポート(HTTP)を拒否
# firewall-cmd --remove-port=80/tcp --permanent

・123番ポート(NTP)を拒否
# firewall-cmd --remove-port=123/udp --permanent

<サービス名を指定して削除する場合>
・HTTPを拒否
# firewall-cmd --remove-service=http --permanent

・NTPを拒否
# firewall-cmd --remove-service=ntp --permanent

設定を反映

・設定を反映
# firewall-cmd --reload

runtime設定を永続設定に上書きする

「–permanent」オプションなしで各コマンドを実行した場合、OS再起動や「# firewall-cmd –reload」を 実行するとruntime設定は破棄されてしまいます。

そのため、破棄される前に永続設定にしたい場合は
「–runtime-to-permanent」オプションを付けてコマンドを実行します。

・runtime設定を永続設定に上書きする
# firewall-cmd --runtime-to-permanent

runtime設定をリセット(永続設定を読み込む)

<永続設定を読み込む(既存セッションを維持)>
# firewall-cmd -reload

<永続設定を読み込む(既存セッションを破棄)>
# firewall-cmd --complete-reload

パケットフィルタリング(その2)

特定のIPアドレスからのアクセスをすべて拒否

サーバを運用していると世界中から不正アクセルされるので、ログを見ながら特定のIPアドレスからのアクセスを全て拒否します。

# firewall-cmd --zone=drop --add-source=xxx.xxx.xxx.0/24

上記コマンドはruntime用なので、永続設定にしたい場合は「–permanent」を付与してくださいね。

設定後はログを確認し、不正アクセスをしてくる輩のIPアドレスが弾かれていることを確認してください。

「–timeout」オプション

「–timeout」オプションは、runtime設定にしか登録できません。

また、指定した 通信を一定期間だけ許可することができます。

つまり、一定期間だけ通信を拒否することはできません。

・60分間のみhttpを許可
# firewall-cmd --add-service=http --timeout=60m
文字単位
s
m
h時間

サービス系コマンド

サービス名の一覧表示/公開/停止/公開中のサービス一覧表示コマンド

・サービス一覧の表示
# firewall-cmd --get-services

・サービスを公開(httpsの場合)
# firewall-cmd --add-service=https

・サービスの公開を停止(httpsの場合)
# firewall-cmd --remove-service=https

・公開されているサービス一覧を表示
# firewall-cmd --list-services

インターフェースとゾーン

現状確認や設定変更コマンド類

・インターフェースがどのゾーンに所属しているのか
# firewall-cmd --get-active-zones

・特定のインターフェースがどのゾーンに所属しているのか(runtimeの場合)。
# firewall-cmd --get-zone-of-interface=venet0

・特定のインターフェースがどのゾーンに所属しているのか(永続設定の場合)。
# firewall-cmd --get-zone-of-interface=venet0 --permanent

・インターフェースの所属ゾーンを変更
# firewall-cmd --zone=dmz --change-interface=venet0
※注意:上記コマンドではOS再起動をするとデフォルトゾーンに戻ってしまうので、
 NICの所属ゾーン変更をする際はNetworkManegerの設定で行うこと。

設定ファイルの場所

publicゾーン用の設定ファイル

publicゾーン用の設定ファイルは下記ファイルになりますので、直接編集してもOK!です。

firewall-cmd –reloadコマンドを実行した際に反映されるファイルですね。

# vi /etc/firewalld/zones/public.xml

まとめ

基本的なコマンド等を載せてみましたが、まだまだ追記したい部分もありますので、適宜更新していきたいと思います。

コメント

タイトルとURLをコピーしました