本記事では、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強化

コメント