CentOS7のFWはiptablesからfirewalldに切り替わりましたのでメモ。
基本情報
通信許可・拒否設定のコマンドは「firewall-cmd」です。
firewalldはサービス起動・停止とかに使います。
一時的(リロード・再起動時にクリア)は「firewall-cmd <コマンド>」でできますが、再起動すると設定情報した情報がクリアされます。
恒久(リロード・再起動後も情報保持)に指定場合は「firewall-cmd --permanent <コマンド>」になります。
恒久設定の場合、xmlにデータが記入される。場所はCentOS7の場合「/etc/firewalld/zones/」配下になる。
ZONE名は大文字小文字区別されるので注意です。
コマンド
再読み込み(リロード)
ポート設定やIP設定の場合、リロードしなくても反映されるけど、addzoneやset-targetの場合、リロードしないと反映されない場合あり。
#通常リロード
firewall-cmd --reload
#完全リロード(通常リロードでも設定が反映されない場合用)
firewall-cmd --complete-reload
[/shell]
ZONE操作
ZONE全体
アクティブZONEはIPアドレス・LANインターフェース設定があるとactive(有効)になるみたいです。
#ZONEの確認
firewall-cmd --get-active-zones
#ZONEの確認(詳細)
firewall-cmd --list-all-zones
#ZONEの確認(ZONE指定)
#--zoneがなければデフォルトZONEになる
firewall-cmd --list-all --zone=NewZone
#アクティブZONEの確認
firewall-cmd --get-active-zones
#デフォルトZONE(NewZone)の確認
firewall-cmd --get-default-zone
#デフォルトZONE(NewZone)の変更
firewall-cmd --set-default-zone=drop
ZONEの作成・削除
#ZONE(NewZone)の作成
firewall-cmd --permanent --new-zone=NewZone
#ZONE(NewZone)の削除
firewall-cmd --permanent --delete-zone=NewZone
通信制御
ZONE制御
ZONEに設定した条件にマッチした場合に動作する制御を設定します。
DROPとREJECTは言葉では似ているが送信元へ返す動作が異なります。
- DROP:送信元に何も返さない(無応答)
- REJECT:送信元にICMPエラーまたはTCPリセットを返す
DROPのほうが、エラーメッセージを返さないのでキュリティは高くなります。
ただし、DROPにするとサーバ側からの応答を行わないため通信元はアプリで設定したタイムアウトまで待つことになります。
REJECTはエラーを返すので、アプリ側にもエラー処理の実装で対応でます。
エラーメッセージを返すのでネットワークトラフィックは増える。DOS攻撃されたらネットワークの輻輳が発生する可能性があります。
攻撃者に情報を渡さないほうがいいので、DROPがオススメ。
defaultは小文字、ACCEPT、DROP、REJECTは大文字じゃないとエラーになるので注意
firewall-cmd --permanent --zone=NewZone --set-target=default
#通信の許可
firewall-cmd --permanent --zone=NewZone --set-target=ACCEPT
#通信の破棄
firewall-cmd --permanent --zone=NewZone --set-target=DROP
#通信の拒否
firewall-cmd --permanent --zone=NewZone --set-target=REJECT
サービス制御
http(80ポート)やftp(21ポート)などサービス名でポート制御ができます。
#登録されているサービス一覧
firewall-cmd --get-services
#サービスの登録
firewall-cmd --permanent --zone=NewZone --add-service=ftp
#サービスの削除
firewall-cmd --permanent --zone=NewZone --remove-service=ftp
ポート制御
サービスに登録されていないポート番号や敢えてポート番号で制御する際に使用します。
TCP・UDP単位で設定します。
#53/TCP(DNS)ポートの登録
firewall-cmd --permanent --zone=NewZone --add-port=53/tcp
#53/UDP(DNS)ポートの登録
firewall-cmd --permanent --zone=NewZone --add-port=53/udp
#53/TCP(DNS)ポートの削除
firewall-cmd --permanent --zone=NewZone --remove-port=53/tcp
#53/UDP(DNS)ポートの削除
firewall-cmd --permanent --zone=NewZone --remove-port=53/udp
IP制御
通信を許可・拒否したいIPアドレスを入力します。
デフォルトZONE以外の場合、IP制御を入れないとZONEが有効にならないです。
設定後、リロードしないと有効にならない場合あり。
#IPアドレスの登録
firewall-cmd --permanent --zone=NewZone --add-source=192.168.1.101/32
#マスクで範囲指定可能
firewall-cmd --permanent --zone=NewZone --add-source=192.168.1.1/24
#ipv6も設定可能
firewall-cmd --permanent --zone=NewZone --add-source=fe80::1/32
#IPアドレスの削除
firewall-cmd --permanent --zone=NewZone --remove-source=192.168.1.101/32
firewall-cmd --permanent --zone=NewZone --remove-source=192.168.1.1/24
firewall-cmd --permanent --zone=NewZone --remove-source=fe80::1/32
NIC(LANインタフェース)制御
LANインターフェースが複数あり、それぞれ異なったZONEを設定したい場合、firewalldだけでなく、nmcli等インターフェース直接の設定もいるみたいです。
interfaceのfirewallゾーン変更について
"firewalld"の一部の設定が反映されない?
#特定インタフェースのZONE変更
firewall-cmd --permanent --change-interface=eth1 --zone=NewZone