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

サーバー設定

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

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

  • CentOS 7.5
  • Apache 2.4.6

Apache 2.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 への不正アクセスを試みるツールの User-Agent として Mozilla/5.0 Jorgee などを見かけることがあります。

User-Agent 自体はクライアント側の自称でしかないため、少し詳しい人であれば自由に書き換えられるのですが、ある程度の攻撃ブロックには効果があります。

まとめ

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

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

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

【関連記事】

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