変なパケットを投げてくるサーバー

変なパケットを投げてくるサーバー

先日、Rejected IP Log Analysis (IP/ホスト名検索)というサイトをひっそり立ち上げました。今のところやっているのは自宅の公開サーバー(service.test.p-fox.jp)にアタックしてくる方々を収集するというものです。その中でも少し気になったものがありました。

頻繁にポートスキャンを行ってくるサーバー

どんな用件があるのか全く分かりませんが、海外サーバーから毎回毎回IPアドレスを変えて、頻繁にポートスキャンが行われます。別に開けて困るポートはないのですが、あまりにしつこいとこちらとしても気味が悪いものです。試しにCSVに落としてみたところ、すさまじい記録でした。

  • hosted-by.pfcloud[.]io:3715回
  • hosting-by.4cloud[.]mobi:1148回

ダントツの一位はpfcloud.ioさんです。おめでとうございます。何も嬉しくありませんが・・・。というわけで詳しく調べてみます。Cloudflare先生によると、pfcloudはドイツに拠点を置くホスティングサーバーのようです。AbuseIPDBでは見事なまでに真っ赤っかです。このようなサービスから接続されても何も嬉しくありません。ルーター側で明示的にルーティング設定したところ、30秒間隔で違うIPアドレスから延々とポートスキャンが行われます。別に困るわけではないのですが、しつこいです幾らなんでも。

ウェブサイト自体は普通のホスティングサービスそのものですが、検索するとやはり悪用されているらしく、TELNETやSSHにポートスキャンとログイン施行を仕掛けてきたり、フィッシングメール配信したり、Webシェルを送ってくるようです。原因で推察されるのは脆弱なサイト放置してWebシェル置かれてBOT化したとかその手合いですが、あまりに量が多すぎて手に負えません。残念ですがCIDRでブロックすることにしました。

IPアドレスの割り当てを受けている業者さんのようなので、Cloudflare Radarで割り当てIPアドレスを確認します。結構な数の割り当てを受けているようなので、これをそのままRTX1200のブロックリストに放り投げます。最終的にアタックの多かったこのあたりにご退場いただきました。

ip filter 50000 reject 3.148.147.222 * * * *
ip filter 50001 reject 1.206.197.55 * * * *
ip filter 50002 reject 199.45.154.131 * * * *
ip filter 50003 reject 116.58.254.0/24 * * * *
ip filter 50004 reject 79.124.62.0/24 * * * *
ip filter 50005 reject 176.65.148.0/24 * * * *
ip filter 50006 reject 204.76.203.0/24 * * * *
ip filter 50007 reject 5.189.160.0/20 * * * *
ip filter 50008 reject 94.74.191.0/24 * * * *
ip filter 50009 reject 176.65.149.0/24 * * * *
ip filter 50010 reject 176.65.151.0/24 * * * *
ip filter 50011 reject 176.65.132.0/24 * * * *
ip filter 50012 reject 45.135.193.0/24 * * * *
ip filter 50013 reject 45.135.194.0/24 * * * *
ip filter 50014 reject 45.153.34.0/24 * * * *
ip filter 50015 reject 45.156.87.0/24 * * * *

これでこのIPアドレスからのアクセスはルーティング段階でお断りすることになりました。もう二度と接続できません。

おまけ:IPアドレスからCIDRを作るpython

そのほか変なパケット投げてくる奴がいるので、IPアドレス放り込んだらCIDRに変換してくれるスクリプトを。使い方は簡単です。IPアドレス渡して範囲(基本は24)を渡せばCIDR変換してくれます。

#!/usr/bin/python
import ipaddress
import sys

def ip_to_cidr(ip_address, prefix_length):
    """
    IPアドレスとプレフィックス長から、対応するCIDRネットワークアドレスを計算します。

    Args:
        ip_address (str): 変換したいIPアドレス (例: '94.74.191.158')
        prefix_length (int): ネットワークプレフィックス長 (例: 24)

    Returns:
        str: CIDR表記のネットワークアドレス、またはエラーメッセージ
    """
    try:
        # IPアドレスとプレフィックス長を結合してネットワーク文字列を作成
        network_str = f"{ip_address}/{prefix_length}"

        # ip_networkオブジェクトを作成。
        # strict=Falseにすることで、入力IPがネットワークアドレスでなくても受け入れます。
        network = ipaddress.ip_network(network_str, strict=False)

        # ネットワークアドレスをCIDR表記の文字列として返します
        return str(network)
    except ValueError as e:
        # IPアドレスやプレフィックス長が無効な場合のエラー処理
        return f"エラー: 無効な入力です。 {e}"

if __name__ == "__main__":
    # コマンドライン引数 (IPアドレスとプレフィックス長) のチェック
    if len(sys.argv) < 3:
        print("使い方: python ip2cidr.py <IPアドレス> <プレフィックス長>")
        print("例 (94.74.191.158を/24で変換): python ip2cidr.py 94.74.191.158 24")
        sys.exit(1)

    ip_input = sys.argv[1]
    prefix_input = sys.argv[2]

    # プレフィックス長を整数に変換
    try:
        prefix_int = int(prefix_input)
    except ValueError:
        print(f"エラー: プレフィックス長 '{prefix_input}' は数値である必要があります。")
        sys.exit(1)

    # CIDR変換を実行
    cidr_result = ip_to_cidr(ip_input, prefix_int)

    if cidr_result.startswith("エラー"):
        print(cidr_result)
    else:
        print(f"入力IPアドレス: {ip_input}")
        print(f"プレフィックス長: /{prefix_int}")
        print("-" * 30)
        print(f"CIDRネットワーク: {cidr_result}")

$ ./.local/bin/ip2cidr 79.124.58.246 24
入力IPアドレス: 79.124.58.246
プレフィックス長: /24
------------------------------
CIDRネットワーク: 79.124.58.0/24

コメントを投稿する

メールアドレスは公開されませんのでご安心ください。 * が付いている欄は必須項目となります。

内容に問題なければ、下記の「コメントを送信する」ボタンを押してください。

ページの先頭