firewalld: firewall-cmdコマンド


前提


ドキュメント


firewalldサービス

# デフォルトで有効・自動起動(CentOS7)
systemctl status firewalld

firewall-cmdコマンドを使ってファイアウォールを操作する。


設定ファイル


ゾーン

ネットワークインターフェース(NIC)に適用すべきルールをグループ化したもの。予め9種類の目的別ゾーンが用意されている。

ファイアウォールの基本操作

ただし、ソース(source)(アクセス元アドレス)を登録したゾーンは、NICに適用していなくても常に有効になる。

ゾーンのコンセプト

9種類のゾーン


9種類のゾーン概要

# 適用済みゾーンとそのインターフェース
firewall-cmd --get-active-zones

# ゾーンリスト
firewall-cmd --get-zones
block dmz drop external home internal public trusted work

# ゾーンリストと概要
firewall-cmd --list-all-zones
# (ゾーン指定)
firewall-cmd --list-all --zone=ゾーン

publichomeなどはデフォルトでは大きな違いはない。その目的に沿うように許可するアクセスを登録していく。


デフォルトのゾーン

# 確認
firewall-cmd --get-default-zone
# 変更(これはランタイムかつ恒久設定)
firewall-cmd --set-default-zone=ゾーン

ゾーンのターゲット

  1. DROPターゲット: 破棄(黙々と)
  2. REJECTターゲット: 拒否(ICMPの拒否返信メッセージあり)
    • デフォルトのため、defaultターゲットとも表示
  3. ACCEPTターゲット: 受け入れ

ゾーンにより適用されているターゲットが異なる。

ACCEPT以外のターゲットは、許可する方を定義し、定義にないものは破棄/拒否することになる。

DROPとREJECTの違い

# REJECTへのping(すぐ反応)
From REJECT.サーバ icmp_seq=1 Destination Host Prohibited
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

# DROPへのping
1 packets transmitted, 0 received, 100% packet loss, time 0ms

# REJECTへのcurl(すぐ反応)
curl: (7) Failed connect to REJECT.サーバ:80; ホストへの経路がありません

# DROPへのcurl
curl: (7) Failed connect to DROP.サーバ:80; 接続がタイムアウトしました

ランタイム設定と恒久設定

--permanentがないときは原則としてランタイム設定になるが例外もある。どちらを参照しているか、変更するのか、注意。

恒久設定に反映したいとき

作業例

# ポート確認(ランタイム設定)
firewall-cmd --zone=public --list-ports
# なしの場合

# ポート追加(ランタイム設定)
firewall-cmd --zone=public --add-port=80/tcp

# ポート確認(ランタイム設定)
firewall-cmd --zone=public --list-ports
80/tcp
# ポート確認(恒久設定)
firewall-cmd --zone=public --list-ports --permanent
# なし

# ランタイム設定を恒久設定に反映
firewall-cmd --runtime-to-permanent

サービス

よく使うオプション

作業例

# Webサーバを稼働したい:
# httpサービスの定義を確認
firewall-cmd --info-service=http
http
  ports: 80/tcp
  protocols: 
  source-ports: 
  modules: 
  destination:

# publicゾーンにhttpサービス追加(ランタイム設定)
firewall-cmd --zone=public --add-service=http

# 確認(ランタイム設定)
firewall-cmd --zone=public --list-services

# さらに恒久設定にしたいなら
firewall-cmd --runtime-to-permanent

ポートとプロトコル

サービスに必要なものがないときなど、個別に許可するポートとプロトコルをゾーンに追加する。

よく使うオプション

作業例

# publicゾーンにTCPで4200ポートを開けたい:
# 追加(ランタイム設定)
firewall-cmd --zone=public --add-port=4200/tcp

# 確認(ランタイム設定)
firewall-cmd --zone=public --list-ports

# さらに恒久設定にしたいなら
firewall-cmd --runtime-to-permanent

パニックモードでインもアウトも破棄

すべてのパケットを破棄する。

# 全部破棄
firewall-cmd --panic-on
# 解除
firewall-cmd --panic-off