linux サーバー

firewalldコマンド一覧

2018年2月11日

CentOS7からiptablesからfirewalldに切り替わりました、案件によってCentOS6(RHEL6)とCentOS7(RHEL7)で入り乱れるようになり、よく忘れるのでメモ

基本情報

コマンドはfirewall-cmd
firewalldは使わないので注意(サービス起動・停止とかに使う)

一時的(リロード・再起動時にクリア)は「firewall-cmd <コマンド>」で
恒久(リロード・再起動後も情報保持)は「firewall-cmd --permanent <コマンド>」になるので注意。

恒久設定の場合、xmlにデータが記入される。場所はCentOS7の場合「/etc/firewalld/zones/」配下になる。

「--permanent」を入れないと忘れたころ(サーバ再起動時)に通信ができなくなったりしてあたふたする羽目になるので付けたほうがいいと思います。
コマンドからだとどっちなのか判断つかないのが厄介。

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のほうが、エラーメッセージを返さないのでキュリティは高くなる。
アプリ側はサーバの応答が遅いと判断し、アプリで設定したタイムアウトまで待つことになる。

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

-linux, サーバー
-,