私のサーバーをスキャンしているボットはソース IP を変更することができますか? IP をブロックした後でも攻撃を受け続けるのはなぜですか?

私のサーバーをスキャンしているボットはソース IP を変更することができますか? IP をブロックした後でも攻撃を受け続けるのはなぜですか?

電話をかけるために電話を接続するPBX(VOIPサーバー)があります。私が使用しているPBXはアスタリスクそのサーバーは使用されておらず、攻撃を分析する目的のみに使用されています。

PBX サービスは重要ではありません。mongodb などの別のサービスを使用する場合、インターネット上のボットが脆弱性を検索してそのデータベースを攻撃することは間違いありません。

とにかく、私は UDP ポート 5060 (アスタリスクがリッスンする場所) でサーバーに到着するすべてのパケットを分析しており、到着するパケットは次のようになります。

IP (tos 0x0, ttl 113, id 654, offset 0, flags [none], proto UDP (17), length 521)
    43.249.129.89.58255 > 171.21.78.225.5060: SIP, length: 493
        REGISTER sip:54.84.215.2:5060 SIP/2.0
        To: <sip:[email protected]>
        From: <sip:[email protected]>;tag=824e5f4a7221279e4f7a
        Via: SIP/2.0/UDP 10.4.1.117:58255;branch=z9hG4bK183d5a24-59ec-4f05-8325-747389112824;rport
        Call-ID: e5f4a722128024e4f7a824
        CSeq: 1 REGISTER
        Contact: <sip:[email protected]:58255>
        Expires: 3600
        Max-Forwards: 70
        Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
        User-Agent: PolycomSoundPointIP SPIP_550 UA 3.3.2.0413
        Content-Length: 0

そのパケットはボットからのものです。なぜなら、私は自分のサーバーにパケットを送信していないからです。

このサーバーの唯一の目的は、ボットがどのように動作するかを理解し、ボットがどのように私のサーバーを攻撃するかを確認することです。私はその PBX を使用していないので、このサーバーに送信されるリクエストはすべて悪意のあるボットから送信されたものであるに違いありません。ポート 5060 に送信される UDP パケットを受信するたびに、その IP アドレスをブロックします。

さて、私の質問は次のとおりです。

私はそのサーバーを 1 か月間運用していますが、1 分ごとに攻撃を受けています。15,000 を超える IP をブロックしました。インターネットにはボットがいくつあるのでしょうか。ボットはソース IP アドレスを変更しているため、サーバーにアクセスし続けるのでしょうか。ボットがソース IP を変更できる場合、UDP プロトコルを使用しているためでしょうか。この問題を解決するには、UDP ではなく TCP を使用する必要がありますか。

また、異なる IP からの攻撃が非常に似ているのも面白いです。たとえば、電話と同じユーザー エージェントを使用していても、攻撃は異なる IP から行われます。すべてのボットが同じコードを持っているかのようです。

この問題を解決し、ボットの仕組みを理解したら、そのソリューションを実サーバーに実装したいと思います。実サーバーは使用していません。なぜなら、良いパケットと悪いパケットをフィルタリングするのが難しいからです。解決策としては、ファイアウォールで IP のホワイト リストを使用することですが、IP アドレスが頻繁に変わる可能性がある携帯電話からサービスを使用する場合、ユーザーが追加の認証を行わなければならない状況は避けたいと考えています。

答え1

人々が可能な限り多くのポートを閉じたままにしようとする理由が今ならわかります。私の場合は、ポートを開いて攻撃者をブロックしたかったのです。それが終わりのない戦いだとわかりました。

この問題を解決するために私が行ったのは、iptables がどのように機能するかを理解することでした。私のルールは次のようになります。

~# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source        destination
DROP       all  --  0.0.0.0/0     0.0.0.0/0       match-set MyBlackList src
ACCEPT     all  --  0.0.0.0/0     0.0.0.0/0       match-set MyWhiteList src
ACCEPT     tcp  --  0.0.0.0/0     0.0.0.0/0       tcp dpt:5060
DROP       udp  --  0.0.0.0/0     0.0.0.0/0       multiport dports 1:65535
DROP       tcp  --  0.0.0.0/0     0.0.0.0/0       multiport dports 1:65535

Chain FORWARD (policy ACCEPT)
target     prot opt source        destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source        destination

このルールでは、最初は TCP 経由のみでポート 5060 への接続を許可します。

電話機が誤ってそのポートに接続しようとすると、その IP は MyBlackList に追加されます。その場合、攻撃者はそれ以上のリクエストを行うことはできません。

電話が正しく接続されると、MyWhiteList に追加されます。その場合、他のポートにアクセスして電話をかけることができます。将来的に無効な要求を多数行った場合は、MyBlackList に追加される可能性があります。

このアプローチを使用してからは、攻撃を受けることはほとんどありません。今では、ブロックされる IP は数千ではなく 10 個だけです。

関連情報