以下の設定文をhttpd.confにコピペするだけで簡単にセキュリティを向上させることができます。
各種設定の意味や設定可能なオプションについても備忘録として書いておきました。
Windowsに入れたApache2.4を想定していますが、多分他の環境でも概ね役立ちます。
設定コピペ用
httpd.conf末尾に以下全文を追記してください。
###httpd.confに追記してセキュリティ対策
#ヘッダーでのバージョン情報隠匿
ServerTokens ProductOnly
#フッターでの情報隠匿
ServerSignature Off
#phpのバージョン情報隠匿
Header unset X-Powered-By
#逆引き禁止
HostnameLookups Off
#タイムアウトを短く
Timeout 10
#トレースの無効化
TraceEnable Off
#クリックジャッキング対策
Header append X-Frame-Options SAMEORIGIN
#XSSフィルター設定
Header set X-XSS-Protection "1; mode=block"
#MIMEタイプのスニッフィングを防止
Header set X-Content-Type-Options nosniff
#httpのリクエストをブラウザ側でhttpsに変える機能を有効化
Header always set Strict-Transport-Security "max-age=63072000"
※セキュリティ対策として示した一部は、既存の設定を書き換えるタイプのため上のコピペだけでは反映されません。ご注意下さい
ドキュメントルートのファイル一覧を隠す
ドキュメントルートのインデックスを無効にします。
httpd.confの以下の内容を書き換えます。
#デフォルト設定 Options Indexes FollowSymLinks
このようにします。
#変更後の設定 Options FollowSymLinks
サーバー情報を隠す
ApacheやPHPのバージョン情報を公開していると、特定のバージョンの脆弱性を突いた攻撃の温床となる場合があるため隠匿しておくことが推奨されます。
ヘッダーでの情報表示を隠す
httpd.confの末尾に以下のコマンドを追記。
ServerTokens ProductOnly
以上で、Serverヘッダーフィールドには「Apache」とだけ表示されるようになります。
フッターでの情報表示を隠す
httpd.confの末尾に以下のコマンドを追記。
ServerSignature Off
以上で、フッターにサーバー情報が表示されないようになります。
phpのバージョン情報も隠す
一応ということで、C:\php\php.iniにあるphp.iniの設定も編集します。
expose_php = Off
これでOK。
php.iniをわざわざ開くのが面倒ならhttpd.confで以下を追記すればOKです。
Header unset X-Powered-By
隠せているか確認
ヘッダー情報を、サイトのURLを入れることで確認できるウェブツールがあります。ここで確認しておきましょう。
こんな感じです。URLはフェイクなのでご注意ください。
サーバのIPアドレスからドメインを辿れなくする
逆引きを禁止します。
#逆引き禁止 HostnameLookups Off
.htaccessによる設定を無効にする
httpd.confのAllowOverrideを下のように書き換えます。
AllowOverride None
.htaccessによる設定を無効化して、設定をhttpd.confで一元管理することで予期せぬ設定ミスやバッティングを防ぎセキュリティを高めます。
ただし、.htaccessで色々設定をしている場合はこの項目はしなくてOK。
画像の直リンクを禁止する
自分のサイトのコンテンツが、第三者のサイトでインラインで表示されると、サーバーへの負担が大きくなるので、直リンクを禁止にします。
直リンク許可だとDoS攻撃の温床となる恐れがあるそうです。
httpd.confに下記を追記。
<Directory C:\apache\htdocs\public\image> SetEnvIf Referer "example.com" check Require env check </Directory>
TimeOutを設定する
TCPタイムアウト時間を短くすることにより、TCPコネクションの生成サイクルを早めるられます。
これによりDoS攻撃による被害を緩和します。
httpd.confに下記を追記。
Timeout 10
Traceの無効化
Apacheには「HTTP TRACEメソッド」というマイナーな機能があります。
これは、リクエスト内容をそのままレスポンスに含めて返すというデバッグ目的の機能のため、本番環境では不要です。
加えてXST(Cross-Site Tracing)攻撃というもので使われるため無効化しておくものとされています。
(実際にはブラウザがTraceを無効化しているので、XST攻撃が成立することは基本的にはありませんが、念のため!)
httpd.confに下記を追記。
TraceEnable Off
クリックジャッキング対策
ブラウザに備わっているデフォルトでは有効化されていないセキュリティ設定を有効化させます。
クリックジャッキングの対策をします。iframe による表示を許可しないことで対策となるので。
httpd.confに下記を追記。
Header append X-Frame-Options SAMEORIGIN
下の値をから選んで設定しますが、SAMEORIGINが万人向け。
値 | 説明 |
---|---|
DENY | ページをフレーム内に表示することを禁止 |
SAMEORIGIN | 自身と生成元が同じフレーム内に限り、ページを表示することができる |
ALLOW-FROM url | 指定された生成元に限り、ページをフレーム内に表示可能 |
なお、「Invalid command ‘Header’, perhaps misspelled or defined by a module not included in the server configuration」とエラーが出てしまう場合があります。
その際は、httpd.conf内で「LoadModule headers_module modules/mod_headers.so」を検索して、文頭の#を削除し、コメントアウト状態を解除してからapacheを再起動すると正常に動作してくれます。
XSSフィルター機能を設定
XSS(クロスサイトスクリプティング)フィルターを設定します。
httpd.confに下記を追記。
Header set X-XSS-Protection "1; mode=block"
以下の値を設定できます。ここでは一番厳格なものを。
値 | 説明 |
---|---|
0 | 無効 |
1 | 有効(部分的書き換え) |
1; mode=block | 有効(表示の完全停止) |
MIMEタイプのスニッフィングを対策
MIMEタイプのスニッフィングを防止します。
XSS(クロスサイトスクリプティング)の対策の一環です。
httpd.confに下記を追記。
Header set X-Content-Type-Options nosniff
HTST(中間者攻撃)対策
HTST(中間者攻撃)の対策を行います。
httpのリクエストをブラウザ側でhttpsに変える機能を有効化します。
httpd.confに下記を追記。
Header always set Strict-Transport-Security "max-age=63072000"
なお、この設定を非SSL化サイト(httpを使うサイト)に対して設定してはいけません!
安全性の低い暗号スイートをサポートしないようにする
C:\apache\conf\extra\httpd-ssl.conf
の設定を書き換えます。
httpd-ssl.confです。httpd.confではありません!!!
#デフォルト設定
SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
#書き換え後
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!RC4:!3DES:!DH:!SEED:!IDEA
拒否する暗号化方式を追加しました。
この設定が読み込まれるように、同じくhttpd-ssl.confの以下の設定も確認しておきます。
SSLHonorCipherOrder on
デフォルト設定でONですが、コメントアウトされていないか一応確認しましょう。
ちなみに、元々無効化されてますが、RC4の無効化をすると、ガラケーからサイト閲覧不能になります。一応注意!
まとめ Apache2.4のセキュリティ向上設定
httpd.confに追記するタイプの設定
以下をコピペすればOK。
###httpd.confに追記してセキュリティ対策
#ヘッダーでのバージョン情報隠匿
ServerTokens ProductOnly
#フッターでの情報隠匿
ServerSignature Off
#phpのバージョン情報隠匿
Header unset X-Powered-By
# 逆引き
HostnameLookups Off
#タイムアウトを短く
Timeout 10
#トレースの無効化
TraceEnable Off
#クリックジャッキング対策
Header append X-Frame-Options SAMEORIGIN
#XSSフィルター設定
Header set X-XSS-Protection "1; mode=block"
#MIMEタイプのスニッフィングを防止
Header set X-Content-Type-Options nosniff
#httpのリクエストをブラウザ側でhttpsに変える機能を有効化
Header always set Strict-Transport-Security "max-age=63072000"
設定ファイルを書き換えるタイプの設定
httpd.confの書き換え
#.htaccessによる設定を無効化 AllowOverride None
.htaccessで色々設定をしている場合はこの項目はしないように!
また、直リンクの禁止は、各々の状況に合わせて書き換えてコピペ。
<Directory C:\apache\htdocs\public\image> SetEnvIf Referer "example.com" check Require env check </Directory>
httpd-ssl.confの書き換え
#デフォルト設定
SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
#書き換え後。拒否する暗号化方式を追加
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!RC4:!3DES:!DH:!SEED:!IDEA
#設定がONか一応確認 SSLHonorCipherOrder on
関連して、読み込み高速化設定についてもごらん下さい
SSL化についてもどうぞ!