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で設定する際は、SetEnvIf
と Deny
を組み合わせると簡単に設定できます。
【関連記事】
⇒ Webサイトの不正アクセス対策
⇒ Apacheアクセスログの解析手順
⇒ パスワードを使ったアクセス制限方法
⇒ User-Agentのアクセス制限(nginx)
⇒ AWS WAFでDoS攻撃をブロックする