IPアドレス

不正な海外IPとcurlというツールをブロックする「.htaccess」をメルマガCGIのフォルダに設置したら不正登録が止まりました

この記事は約6分で読めます。

不正な海外IPをブロックする「.htaccess」メルマガのCGIに海外からの不正な登録を試みるアタックが続いているWEBサイトがあります。サーバーのWAP(WEBファイヤーウォール)を強化してもまだアタックが続くため追加措置をしました。
メルマガのCGIを設置しているフォルダに海外からの不正なIPをブロックする「.htaccess」をカスタマイズしました。とりあえず不正と思われる海外IPアドレスを記述してみました。その後、curlというツールでアクセスする行為もブロックしたところ、不正な登録は0になりました。

不正な海外IPをブロックする

現状分析はアクセスログから

不正なアタックを受けているサーバーで、直近のアクセスログを調べてみました。アクセスがあったIPアドレスの記録が残っています。

このIPアドレスをすべてダウンロードして、テキストファイルにしました。

海外IPアドレスを抽出

そのテキストファイルを生成AI(今回はPerplexity)を使い、海外IPアドレスを抽出してもらいました。

どもども遠田
どもども遠田

サーバーのアクセスログからIPアドレスを収集しました。 このIPアドレスから分析したうえで
・日本のIPアドレスは通過
・海外のIPアドレスはブロック
というようにしたいと思います。
そこでブロックするIPアドレスの候補を
# 悪意のあるIPアドレスをブロック(最初のブロックのみ指定) Require not ip 185.0.0.0/8
というような形式で抽出してください。

AIの回答
AIの回答

承知しました。サーバーのアクセスログから収集されたIPアドレスを分析し、海外のIPアドレスをブロックするための候補を抽出します。日本のIPアドレスは通過させ、海外のIPアドレスをブロックする方針に基づいて、以下のように.htaccessファイルに記述する候補を提示します。

 

# 悪意のあるIPアドレスをブロック(最初のブロックのみ指定)
Require not ip 209.0.0.0/8
Require not ip 37.0.0.0/8
Require not ip 66.0.0.0/8
Require not ip 35.0.0.0/8
Require not ip 20.0.0.0/8
Require not ip 104.0.0.0/8
Require not ip 181.0.0.0/8
Require not ip 72.0.0.0/8
Require not ip 193.0.0.0/8
Require not ip 202.0.0.0/8
Require not ip 34.0.0.0/8
Require not ip 51.0.0.0/8
Require not ip 54.0.0.0/8
Require not ip 137.0.0.0/8
Require not ip 165.0.0.0/8
Require not ip 167.0.0.0/8
Require not ip 175.0.0.0/8
Require not ip 178.0.0.0/8
Require not ip 188.0.0.0/8
Require not ip 194.0.0.0/8
Require not ip 213.0.0.0/8
Require not ip 216.0.0.0/8
Require not ip 217.0.0.0/8
Require not ip 3.0.0.0/8
Require not ip 5.0.0.0/8

このようにIPアドレスの抽出ができました。

このIPアドレスのうち、日本国内のIPアドレスを含むものなど誤動作を起こす可能性があるかもしれないので、慎重に調整しました。

「.htaccess」の作成

「.htaccess」の作成も生成AIを使って実施しました。この一連の作業が生成AIで可能になったので作業は楽になりました。

▼作成した「.htaccess」

# BEGIN japan_only_IP
# 日本以外の悪意ある国からのアクセスを拒否
<RequireAll>
Require all granted
# 悪意のあるIPアドレスをブロック
Require not ip 1.0.0.0/8 # 中国
Require not ip 5.0.0.0/8 # ヨーロッパ(主にロシア)
Require not ip 37.0.0.0/8 # ヨーロッパ(主にロシア)
Require not ip 45.0.0.0/8 # ヨーロッパ(主にロシア)
Require not ip 47.0.0.0/8 # 中国
Require not ip 49.0.0.0/8 # 中国
Require not ip 87.0.0.0/8 # ヨーロッパ(ロシア)
Require not ip 91.0.0.0/8 # ヨーロッパ
Require not ip 185.0.0.0/8 # ヨーロッパ
Require not ip 188.0.0.0/8 # ヨーロッパ
Require not ip 178.0.0.0/8 # ヨーロッパ
Require not ip 179.0.0.0/8 # 南アメリカ
Require not ip 193.0.0.0/8 # ヨーロッパ
Require not ip 194.0.0.0/8 # ヨーロッパ
Require not ip 213.0.0.0/8 # ヨーロッパ
Require not ip 217.0.0.0/8 # ヨーロッパ
</RequireAll>
#end

この「.htaccess」をメルマガのCGIフォルダに設置しました。これでしばらく様子をみることにします。

特定のツール「curl」でのアクセスを禁止する

その後も不正なアクセスがありました。そこで別の対策を追加しました。アクセスログから「reg.cgi」にアクセスしているIPアドレスを抽出し、その特徴を調べてみるとあるコマンドでアクセスされていました。

生成AIでさらに調べると

全てのアクセスで「curl/7.54.0」というユーザーエージェントが使用されています。これは、コマンドラインツールのcurlを使用してアクセスしていることを示しています。

ということがわかりました。

そこで、コマンドラインツールのcurlを使用してのアクセスを禁止することにしました。

「.htaccess」ファイルへの記述方法

以下のコードを.htaccessファイルに追加することで、curlからのアクセスを禁止できます。

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} curl [NC] RewriteRule ^ – [F,L]

このコードは、ユーザーエージェントに”curl”という文字列が含まれている場合(大文字小文字を区別しない)、アクセスを拒否します。

この内容を「.htaccess」に追記しました。

生成AIでコードを書くのは本当に便利です

ちなみに、この作業は、Perplexity(パープレキシティ)とChatGPTの両方を使ってどちらが正確に作成するかについて試してみました。最終的に作成する「.htaccess」についてはどちらも同等レベルでした。

ただし、途中の試行錯誤についてはPerplexity(パープレキシティ)のほうが親切な回答をしてくれたように感じました。Perplexity(パープレキシティ)はpro版で生成AIにはClaud3.5sonnetを設定して利用しています。Claud3.5sonnetは日本語の扱いが自然なので本当に使いやすいでsね。

当面は、2つの生成AIを使い分けていきたいと思います。