攻撃者の種は尽きまじという形。
この、ufwの効率化を図るスクリプトを試作です。
前提条件
上記リンク先にあるとおり、ipsetをipset-persistant抜きで入れている場合。なので、相当、対象者は限られます。
スクリプト内容
#!/bin/bash
# セット名の定義
SET_NAME="ufw-blocklist"
SAVE_FILE="/etc/ufw/ipsets.save"
# 1. root権限チェック
if [[ $EUID -ne 0 ]]; then
echo "エラー: このスクリプトは sudo または root 権限で実行してください。"
exit 1
fi
# 保存用関数
save_ipset() {
read -p "設定をファイルに保存しますか? (y/n): " confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
ipset save "$SET_NAME" -f "$SAVE_FILE"
echo "保存完了: $SAVE_FILE"
else
echo "保存をスキップしました(メモリ上の設定のみ更新)。"
fi
}
# ipsetが存在しない場合に作成
if ! ipset list "$SET_NAME" > /dev/null 2>&1; then
echo "情報: $SET_NAME が見つからないため新規作成します。"
ipset create "$SET_NAME" hash:net
fi
while true; do
echo "------------------------------------------"
echo " ipset 管理メニュー ($SET_NAME)"
echo "------------------------------------------"
echo "1) IP/ネットワークを追加 (例: 198.51.100.42, 203.0.113.0/24)"
echo "2) IP/ネットワークを削除"
echo "3) ステータス表示 (list)"
echo "q) 終了"
echo "------------------------------------------"
read -p "番号を選択してください: " choice
case $choice in
1)
echo "--- 追加モード ---"
read -p "追加する IP/NW: " target
if [ -n "$target" ]; then
if ipset add "$SET_NAME" "$target"; then
echo "追加成功: $target"
save_ipset
fi
fi
;;
2)
echo "--- 削除モード ---"
read -p "削除する IP/NW: " target
if [ -n "$target" ]; then
if ipset del "$SET_NAME" "$target"; then
echo "削除成功: $target"
save_ipset
fi
fi
;;
3)
echo "--- 現在のリスト ---"
ipset list "$SET_NAME"
;;
q)
echo "終了します。"
exit 0
;;
*)
echo "無効な選択です。"
;;
esac
echo ""
done
後は
sudo chmod 755 ipset-block.sh
等として実行権限を付与。
sudo bash ipset-block.sh
等で実行することで
------------------------------------------
ipset 管理メニュー (ufw-blocklist)
------------------------------------------
1) IP/ネットワークを追加 (例: 198.51.100.42, 203.0.113.0/24)
2) IP/ネットワークを削除
3) ステータス表示 (list)
q) 終了
------------------------------------------
番号表示。
--- 追加モード ---
追加する IP/NW:
で、IP/NWを設定すれば、後はセーブまでしてくれます。
今後の展望
- 引数
- ファイルからの一括入力
- 既にあるリストとの突き合わせ
など。興味は尽きません。
コメントを残す