firewalld ipset自動更新|日本IPリストをcronで更新する方法(Ubuntu Server)

水冷パソコンの水温 Security

本記事では、firewalld + ipsetで設定した日本IPリストを自動更新する方法を解説します。


■ なぜ必要か

日本IPアドレスは日々変化します。

👉 更新しないと

・正規ユーザーがアクセスできない
・セキュリティが不完全になる


👉 定期更新が必須


■ 全体の流れ

IPリスト取得
↓
ipset更新
↓
cronで自動化

■ ① スクリプト作成

sudo vi /usr/local/bin/update-ipset-jp.sh

■ 内容(そのままコピペ)

#!/bin/bash

TMP_FILE="/tmp/jp.txt"
APNIC_URL="http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest"

# ダウンロード
curl -s $APNIC_URL -o /tmp/apnic.txt

# 日本IP抽出
grep '|JP|' /tmp/apnic.txt | grep ipv4 | \
awk -F '|' '{print $4"/"32-log($5)/log(2)}' > $TMP_FILE

# 既存リスト取得
EXISTING=$(firewall-cmd --permanent --ipset=jp --get-entries)

# 差分追加
while read line; do
  echo "$EXISTING" | grep -q "$line"
  if [ $? -ne 0 ]; then
    firewall-cmd --permanent --ipset=jp --add-entry=$line
  fi
done < $TMP_FILE

# 反映
firewall-cmd --reload


■ ② 実行権限付与

sudo chmod +x /usr/local/bin/update-ipset-jp.sh


■ ③ 手動テスト(重要)

sudo /usr/local/bin/update-ipset-jp.sh

👉 エラーが出なければOK



■ ④ cron設定

sudo crontab -e

■ 例:毎日3時

0 3 * * * /usr/local/bin/update-ipset-jp.sh

👉 毎日自動更新



■ ⑤ 動作確認

sudo firewall-cmd --ipset=jp --get-entries | head

👉 日本IPが表示されればOK



■ ログ確認(おすすめ)

journalctl -xe


■ よくあるトラブル

● ipsetが空になる

→ APNIC取得失敗


● 反映されない

→ reload忘れ


● cron動かない

→ パスミス



■ 改善版(おすすめ)

👉 ログ出力付き

0 3 * * * /usr/local/bin/update-ipset-jp.sh >> /var/log/ipset-update.log 2>&1


■ セキュリティ構成(完成形)

jp ipset → allow
blacklist → drop
fail2ban → 自動BAN

👉 完全防御



■ 本環境

・firewalld
・ipset
・fail2ban
・WordPress



■ 次の記事

👉 日本IP制限(完全版)googlebot対応
👉 firewall強化

コメント

タイトルとURLをコピーしました