ファイアウォール (iptables) を管理する
Back
HOME
iptables を使ったファイアウォールを構築する機会が有り一段落したので、その管理をする体制を構築してみた。
既に、iptables によるルールが適用されファイアウォールが稼働しているものとする。
また、AlmaLinux をメインとして Raspberry Pi OS の場合の差分を書き添える。
このページはChatGPTとの問答をこれからの運用のためまとめたものである。
前提条件の確認
$ sudo su - # sudo を付けても通らないケースが有るので su になる
systemctl status firewalld # disabled
iptables -L -n # ルールが表示される(稼働している)
ipset list # 表示が無くてもコマンドが通ること
Fail2ban をインストールする
- iptabels や ipset のログを収集し管理しやすいようにしてくれる超軽量のアプリ
# dnf install -y epel-release # 未インストールなら(多分GWには入っている)
# dnf install -y fail2ban
- 有効化する
systemctl enable -now fail2ban.service # -now は enable と start を同時にする
設定ファイルを編集して最小構成で確実に起動させる
- 設定ファイルの有るフォルダでの作業
nano /etc/fail2ban/jail.local # jail.conf はオリジナルとして保存
GNU nano 5.6.1 /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600 # or 1h
findtime = 600 # or 10m
maxretry = 5
banaction = iptables-ipset-proto4
ignoreip = 127.0.0.1/8 ::1 自分のIP(通常はグローバルアドレス)
[sshd]
enabled = true
- 設定を反映させ、稼働を確認する。
systemctl restart fail2ban.service
fail2ban-client status
fail2ban-client status sshd # SSH の失敗を表示する(3項にてテスト)
- 動作確認の為、SSH 別セッションでログイン、パスワードを敢えて撃ち間違え、設定した5回を越えて失敗させる
次のような表示が有れば成功で有る。
Name: f2b-sshd
Type: hash:ip
Revision: 6
Header: family inet hashsize 1024 maxelem 65536 bucketsize 12 initval 0x37xxxxxxx
Size in memory: 216
References: 1
Number of entries: 0
Members:
recidive(フランス語:レシディブ(ァ)=再犯)対策の追加
- jail.localに設定を追加する
GNU nano 5.6.1 /etc/fail2ban/jail.local
[recidive]
enabled = true
bantime = 86400 # 24hs
findtime = 86400
maxretry = 5
- 設定を反映させて状況を見る
systemctl restart fail2ban.service
fail2ban-client status recidive
Status for the jail: recidive # status の表示例
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/fail2ban.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
構築中の確認コマンド (ipset 使用)
fail2ban 全体の状況 fail2ban-client status
sshd 状態 fail2ban-client status sshd
recidive 状態 fail2ban-client status recidive
実際の遮断リスト ipset list
iptables 連携 iptables -L INPUT -n
ログ tail -f /var/log/fail2ban.log
管理用のコマンド一覧
- 状態確認
fail2ban-client status
fail2ban-client status sshd
fail2ban-client status recidive
- 手動 BAN 反映/解除
fail2ban-client set sshd banip IP
fail2ban-client set sshd unbanip IP
- BAN IP 実態確認
ipset list
- 設定変更後の反映
systemctl restart fail2ban
- デバッグ(設定確認)
fail2ban-client -d
- 間接的ログ管理コマンド
grep "Failed password" /var/log/secure # AlmaLinux
grep "Failed password" /var/log/auth.log # Raspberry Pi OS
パスワード・サーチされてミスした場合、ここにログが残ります。
SSH で敢えてパスワードをミスしてみると分かります。
運用上の注意
- fail2ban 再起動 ➡ BAN は解除される(仕様)
- ipset を永続化する
ipset save > /etc/sysconfig/ipset
Raspberry Pi OS の場合 /etc/sysconfig は存在しない。
GNU nano 5.6.1 /etc/systemd/system/ipset.service
[Unit]
Description=Restore ipset rules
Before=network-pre.target
Wants=network-pre.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/ipset restore -exist < /etc/ipset.conf
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
このユニットファイルを enable して再起動ごとに読ませる
最後にこれらのルールをクリアしたいとChatGPTに訪ねた結果
今後の勉強のため聞いたので、コマンドの検証はしていない。
おはよう!
ipset の list や iptables の domestic.save を空に(クリア)して、今からの状況把握をしたいと思うのですが
おはようございます!
状況把握のために ipset / iptables を一度クリアしたい、という理解で合っています
以下に一般的で安全寄りの手順を書きますね。
1️⃣ ipset をクリアする方法
▶ すべてのエントリーを削除(セット自体は残す)
ipset flush
特定のセットだけなら:
ipset flush セット名
▶ セット自体を完全に削除したい場合
ipset destroy
または個別に:
ipset destroy セット名
💡 おすすめ
「今からの状況把握」が目的なら
👉 flush のみ(destroy しない) が無難です。
2️⃣ iptables をクリアする方法
▶ フィルタテーブルを空にする
iptables -F
▶ チェーンのカウンタも含めて初期化
iptables -Z
▶ nat / mangle なども含めて全部クリアしたい場合
iptables -t nat -F
iptables -t mangle -F
iptables -t raw -F
⚠ 注意
SSH 接続中の場合、DROP が消えて逆に安全になることもありますが、
デフォルトポリシーが DROP の環境だと 通信不能になることも あります。
確認:
iptables -L -n -v
iptables -S
3️⃣ domestic.save を空にしたい場合
もし /etc/iptables/domestic.save のような 保存用ファイルであれば:
: > /etc/iptables/domestic.save
または
echo "" > /etc/iptables/domestic.save
💡 実運用ルールにロードされるファイルの場合は、
・先にバックアップ
cp domestic.save domestic.save.bak.$(date +%F)
👉 を強くおすすめします。
4️⃣ 状況把握向けのおすすめ確認コマンド
ipset
ipset list
ipset list セット名
iptables(カウンタ重視)
iptables -L -n -v --line-numbers
ログを見たいなら:
journalctl -u iptables
dmesg | grep IPT
Back
HOME

この 作品 は
クリエイティブ・コモンズ 表示 - 非営利 - 改変禁止 4.0 国際 ライセンス
の下に提供されています。
English
Powered by