8. firewalld 設定

2025/10/27
元記事-Almalinux再構築手順

firewalld 設定の解説

メールサーバー構築の前準備として、最小限のファイアウォール設定を行います。
sudo systemctl enable --now firewalld
firewalldサービスを有効化かつ即座に起動
enable: システム起動時の自動起動を有効化
    • now: enableと同時にstartも実行(2つのコマンドを1つに)
詳細な動作:
# このコマンドは以下の2つと同等
sudo systemctl enable firewalld   # 自動起動を有効化
sudo systemctl start firewalld    # サービスを起動
# 状態確認
sudo systemctl status firewalld
#  firewalld.service - firewalld - dynamic firewall daemon
#  Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
#  Active: active (running) since ...

# 他の確認方法
sudo firewall-cmd --state         # running と表示
sudo firewall-cmd --permanent --add-service=ssh
SSH接続(22番ポート)を恒久的に許可
--permanent: 設定を永続化(再起動後も有効)
--add-service=ssh: SSHサービスの通信を許可
重要な概念:
# firewalldの2つの設定
1. Runtime(実行時): 現在動作中の設定
2. Permanent(永続): 保存された設定(再起動後に適用)

# --permanentなしの場合
sudo firewall-cmd --add-service=ssh # 即座に反映、再起動で消える

# --permanentありの場合
sudo firewall-cmd --permanent --add-service=ssh # 保存のみ、即座には反映されない
sudo firewall-cmd --reload # reloadで反映

# サービス定義の確認
sudo firewall-cmd --info-service=ssh
# ssh
# ports: 22/tcp
# protocols:
# source-ports:
# modules:
# destination:
sudo firewall-cmd --reload
永続設定を実行時設定に反映
既存の接続は維持される(安全なリロード)
permanent設定をruntime設定にコピー
reloadとrestartの違い:
# reload(推奨)
sudo firewall-cmd --reload
# - 既存接続を維持
# - 設定の再読み込みのみ
# - ダウンタイムなし

# restart(非推奨)
sudo systemctl restart firewalld
# - 全接続が一時切断
# - サービス全体を再起動
# - 瞬断が発生
# 設定の同期確認
sudo firewall-cmd --list-all                    # runtime設定
sudo firewall-cmd --permanent --list-all        # permanent設定
sudo firewall-cmd --list-all
現在の全ファイアウォール設定を表示
ゾーン、サービス、ポート、ルールなどを確認

出力例と解説:
public (active) # ゾーン名(デフォルト: public)
target: default # デフォルトアクション
icmp-block-inversion: no # ICMP反転ブロック
interfaces: eth0 # 適用インターフェース
sources: # ソースIP/ネットワーク
services: ssh # 許可サービス ← 重要
ports: # 許可ポート番号
protocols: # 許可プロトコル
forward: yes # 転送設定
masquerade: no # マスカレード(NAT)
forward-ports: # ポート転送
source-ports: # ソースポート
icmp-blocks: # ブロックするICMPタイプ
rich rules: # 詳細ルール

firewalldの基本概念

ゾーン(Zone)の理解
# 利用可能なゾーン一覧
sudo firewall-cmd --get-zones
# block dmz drop external home internal public trusted work

# 各ゾーンの特徴
drop      # 全て拒否(返答なし)
block     # 全て拒否(拒否通知あり)
public    # デフォルト、最小限許可 ← 現在使用中
external  # NAT用
dmz       # DMZ用
work      # 職場用(より多くを信頼)
home      # 自宅用(より多くを信頼)
internal  # 内部ネットワーク
trusted   # 全て許可
# アクティブゾーンの確認
sudo firewall-cmd --get-active-zones
サービスとポートの管理
# 利用可能なサービス一覧
sudo firewall-cmd --get-services | tr ' ' '\n' | grep -E 'mail|smtp|pop|imap'
# smtp
# smtps
# smtp-submission  # 587番ポート
# pop3
# pop3s
# imap
# imaps

# サービス定義ファイルの場所
ls /usr/lib/firewalld/services/
cat /usr/lib/firewalld/services/smtp.xml

# ポート番号で直接指定する方法
sudo firewall-cmd --permanent --add-port=25/tcp
sudo firewall-cmd --permanent --add-port=587/tcp