User-Agentのアクセス制限でApacheへの攻撃をブロックする

サーバー設定

Apache 2.4で、User-Agentをキーにしたアクセス制限の方法を紹介します。
特定のUser-Agentをブロックすることで、一部の攻撃を拒否することに有効です。

今回利用した環境は以下の通りです。

  • CentOS 7.5
  • Apache 2.4.6



Apache2.4でUser-Agent制限を設定する

Apacheの httpd.conf に設定を追加することで、アクセス制限を掛けることができます。
Mozilla/5.0 Jorgee からのアクセスを拒否する場合は以下のように記載します。

<Location />
  SetEnvIf User-Agent "Mozilla/5.0 Jorgee" block
  Deny from env=block
</Location>
  • <Location /> で全ディレクトリを対象としています。(必要に応じて / の部分を変更)
  • SetEnvIf の行では、User-Agentが一致した場合に block が設定されます。
  • block が設定されている場合はアクセスを拒否します。

アクセス拒否の対象を増やす場合は、SetEnvIf の行を複数記載すればOKです。
いずれか1行にヒットした時点でアクセス拒否の対象となります。

設定後は自分のブラウザからアクセスして、誤って制限が掛かっていないことを確認します。

User-Agentとは何か

アクセス制限に使用する「User-Agent」について簡単に説明します。
User-Agentとは、Web サイトにアクセスする際に送信される情報の一つです。

iPhoneのブラウザ(Safari)でWebサイトにアクセスした際は、以下のUser-Agent情報が送信されており、iOSやSafariのバージョンが含まれていることが分かります。

Mozilla/5.0 (iPhone; CPU iPhone OS 11_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1

この情報は以下のような場面で活用されています。

  • スマホからアクセスが来た場合はモバイル版へ誘導
  • PCユーザとスマホユーザの割合調査
  • Google Botなどのクローラー識別

User-Agentでアクセス制限を掛ける

アクセスしてくる環境によってUser-Agentは異なります。
Webサイトへの悪意あるアクセスでも、ほぼ間違いなくUser-Agentが設定されています。

攻撃ツールでよく使われるUser-Agentをブロックすることで、
Webサイトにやってくる攻撃アクセスをある程度ブロックすることが可能となります。

例えば、PHPやMySQLへ不正アクセスを試みるツールとして Mozilla/5.0 Jorgee などを見かけることがあります。
User-Agent自体は少し詳しい人であれば自由に書き換えられるのですが、ある程度の攻撃ブロックには効果があります。

まとめ

Apacheで、User-Agentによるアクセス制限を掛ける方法について紹介しました。

User-Agentを見ることで、アクセス元の環境をある程度知ることができます。
攻撃ツールでよく使われる名称をブロックしておくことで、ある程度の予防に繋がります。

Apacheで設定する際は、SetEnvIfDeny を組み合わせると簡単に設定できます。

【関連記事】

Webサイトの不正アクセス対策
Apacheアクセスログの解析手順
パスワードを使ったアクセス制限方法
User-Agentのアクセス制限(nginx)
AWS WAFでDoS攻撃をブロックする