VPSを使って、WEBを公開すると不正なアクセスが大量にありfail2ban等のソフトを使用して防御する必要がある。(ありがとうfail2ban)
ただし、有効なIPをbanしてしまっていないかは気になるところ。
Gemini を使って、対象IPをチェックするツールを、python で作ってもらった。
banしたIPは増えていくので、差分のチェックができるようにしてあります。
日本以外からのアクセスは基本的には無視(日本語のサイト前提なので)。
日本のIPは、プロバイダ名と都市を出力する。AWSなどで乗っ取られているIPもありそうなので最後は、ログを詳細に確認して感覚での判断になると思います。
以下のコードのIPはたまたまbanしていたIPです。以下実行すると1件だけ出力されます。
import subprocess
import time
import json
#### ReadMe ######
# IP_Base にfail2ban の出力を入れる
# IP_OLD は、前回の出力(既にNGとして良いことを検証済み)を入れる
# 差分について、チェックし、日本のIPについては出処を詳細に出力する
# IPアドレスのリスト
IP_BASE = [
"157.254.237.17",
"171.243.86.21",
"13.112.209.189",
"165.232.144.26"
]
# 削除したいIPアドレスのリスト
IP_OLD = [
"157.254.237.17",
"171.243.86.21",
"165.232.144.26"
]
# APIのURL
API_URL = "https://ipinfo.io/"
# セットに変換することで、高速な検索が可能になる
IP_OLD_SET = set(IP_OLD)
# IP_OLDに存在しないIPアドレスのみを抽出
IP_LIST = [ip for ip in IP_BASE if ip not in IP_OLD_SET]
# 結果を出力
other_count = 0
for ip in IP_LIST:
response=subprocess.check_output(["curl", "-s", f"{API_URL}{ip}/json"]).decode()
# JSON形式の情報をパース
data = json.loads(response)
if data["country"] == "JP":
# 出力
print( f"{data['ip']} プロバイダ:{data['org']} CITY:{data['city']}")
else:
other_count += 1
# 公開サーバの負荷を考慮してスリープする
time.sleep(2)
print("-------------")
print(f"JP以外: {other_count}個")
有効なIPをbanしている場合は、以下のページを参考にunbanする。
Xserver が お友達紹介割引 で申込みが可能になります。
コメント