Apache HTTP Server セキュリティ対策まとめ
2015-10-07
備忘録としてApacheのセキュリティ対策を簡潔に羅列していきます。ちゃんと対策ができているかの確認用(チェックリスト)なので、設定方法や動作等詳しく知りたい人は、改めてググってください。
Apacheのパフォーマンスチューニングについては、こちらにまとめてありますので、よろしければどうぞ。
サーバー情報の隠蔽
ApacheやPHPのバージョン情報の公開は、脆弱性を突いた攻撃の温床となる場合があるため、控えましょう。
ヘッダーフィールドの隠蔽
httpd.conf等に下記を記述します。
ServerTokens ProductOnly
以上で、Serverヘッダーフィールドには「Apache」とだけ表示されるようになります。
フッターの隠蔽
httpd.conf等に下記を記述します。
ServerSignature Off
以上で、フッターにサーバー情報を表示させないようになります。
デフォルトコンテンツの置換
Apacheをバイナリパッケージでインストールした場合に、デフォルトで用意されているコンテンツを削除・置換します。
.htaccessを無効にする
httpd.conf等に下記を記述します。
AllowOverride None
管理者が関与しない場所でのサーバー設定を許可しないことで、セキュリティを高めます。
ドキュメントルートの変更
OSやプラットフォームの脆弱性(主にディレクトリトラバーサル脆弱性)によりサーバーへの侵入を許してしまった場合、ドキュメントルートをデフォルトパスのまま配置していると、コンテンツを狙われるリスクが高まるため、実施します。
httpd.conf等に下記を記述します。
DocumentRoot [新しいディレクトリ]
画像の直リンクを禁止する
自サイトの画像等のコンテンツが、第三者のサイトでインラインで表示され、サーバーへの負担が大きくなることを避けます。場合によってはDoS攻撃の温床となる可能性があるためです。
httpd.conf等に下記を記述します。
SetEnvIf REFERER "example.com" OK
Order Deny,Allow
Deny from all
Allow from env=OK
TimeOutを設定する
TCPタイムアウト時間を短くし、TCPコネクションの生成サイクルを早めることで、DoS攻撃等のダメージを緩和します。
httpd.conf等に下記を記述します。
Timeout 10
prefork MPMでプロセス数を制限する
DoS攻撃ではプロセスを大量に起動し、サーバーリソースを限界まで消費するため、Apacheが消費するリソースを抑えるよう、同時起動可能なプロセス数を設定します。
httpd.conf等に下記を記述します。
<ifmodule prefork.c="">
ServerLimit XXX # サーバリソースに適した値
MaxClients XXX # サーバリソースに適した値
</ifmodule>
クライアント単位でトラフィック量を制限する「mod_bw」を導入する
mod_bwはクライアントごとにトラフィック量やコネクション数を制限でき、ファイル拡張子別に最大コネクション数を設定することもできるモジュールです。クライアントの識別にはIPアドレスやブラウザタイプを指定できます。
Linuxのiptables/firewalld/SELinuxの利用
前提として、OSレベルでのセキュリティ対策を行うことも重要です。
DoS/DDoS/brute force攻撃に有効な「mod_evasive」を導入する
「mod_evasive」では、デフォルトでは次のような内容で不正アクセスリストを作り、アクセス制御を行います。
- 1秒間に同一ページに対し2回以上のアクセスがあった場合、不正アクセスリストに追加
- 1秒間に同一サイトに対し50回以上のアクセスがあった場合、不正アクセスリストに追加
- 最後のアクセスから10秒後に、不正アクセス対象リストから除外
DoS攻撃やBrute Force攻撃の緩和に役立ちます。
WAF(Webアプリケーションファイアウォール)を実装する
XSS攻撃やインジェクション攻撃への対策として、WAFと呼ばれる防御システムを導入します。
Apacheでは「mod_security」を利用することで、簡易的なWAFを専用サーバーを用意することなく低コストで導入できます。主な機能は以下のとおりです。
- HTTPリクエストがサーバーで処理される前に監査する
- フォームデータ、リクエストヘッダの中身などを監査する
- 監査ルールに引っかかった場合の処理を細かく設定できる
- HTTPレスポンスに対しても監査できる
- 監査ログを記録できる
まとめ
改めて言いますが、確認用で概要しか記述していないので、それぞれの項目については改めて学習してください。一つ一つの項目が、何気にきちんと突き詰めると、結構な学習量になるかと思います。
また、プロジェクトによっては設定できない(してはいけない)項目もあるかと思いますので、しっかりとした検証を行い、動作確認をとってから使用するようにしてください。
それではみなさん、安全・快適なApacheライフを!
続けて、Apacheのパフォーマンスチューニングについて知りたい方は、こちらからどうぞ!