今回は、CentOSにApacheをインストールしたら行うべき、Apacheのセキュリティ設定について説明します。
Apacheの各種セキュリティ設定は、主に、「/etc/httpd/conf」フォルダ配下にある「httpd.conf」ファイル(Apacheの設定ファイル)で設定します。
※以下の環境を例に説明します。
- サーバOS:CentOS6
- WEBサーバ:Apache2.2
目次
1.httpd.confのバックアップ
「httpd.conf」ファイルを編集する前に、「httpd.conf」ファイルのバックアップを行います。
① まず、サーバにrootユーザでログインします。
[root@ ~]#
② 次に、「httpd.conf」ファイルがある「/etc/httpd/conf」フォルダへ移動します。
「cd /etc/httpd/conf」と入力してEnterを押します。
[root@ ~]# cd /etc/httpd/conf
「/etc/httpd/conf」フォルダへ移動できました。
[root@ conf]#
③ 編集前の「httpd.conf」ファイルをバックアップするため、「httpd.conf」ファイルをコピーして、「httpd.conf.yyyymmdd」というファイル名で保存します。
「cp httpd.conf httpd.conf.yyyymmdd」と入力してEnterを押します。
なお、「yyyymmdd」は設定変更を行う日など任意の年月日とします。
(以下は、20170219とした例)
[root@ conf]# cp httpd.conf httpd.conf.20170219
これで、「httpd.conf」ファイルをバックアップできました。
2.httpd.confの編集
「httpd.conf」ファイルをバックアップできたら、「httpd.conf」ファイルを編集していきます。
「vim httpd.conf」と入力してEnterを押します。
[root@ conf]# vim httpd.conf
「httpd.conf」ファイルの内容が表示されます。
以降の手順に従って、一気に編集していきましょう。
2-1.ディレクトリの一覧表示の無効化
Apacheには、公開ディレクトリの内容を一覧表示する機能があります。
本機能が有効となっている場合、ブラウザで「http://サーバのIPアドレス/ディレクトリ名」や「http://サーバのドメイン名/ディレクトリ名」とアクセスすることで、サーバの任意のディレクトリ内のファイルやフォルダの一覧をブラウザ上に表示することができてしまいます。
これは、不用意にサーバ内の情報をネット上で公開することとなり、セキュリティ上危険な状態です。
そこで、本機能を無効化します。
① まず、「httpd.conf」ファイル内で、「Options Indexes FollowSymLinks」と記載されている箇所を探します。
Options Indexes FollowSymLinks
② この設定から「Indexes」を削除し、以下のように変更して下さい。
Options FollowSymLinks
上記を設定した後、httpd.confの有効化(以降の手順で実施)を行うことで、ディレクトリの一覧表示は無効化されます。
2-2.Apacheのバージョン表示の無効化
Apacheは、HTTPレスポンスヘッダーやエラー画面のフッターに、Apacheのバージョン情報を表示する機能がデフォルトで有効となっています。
例えば、「http://サーバのIPアドレス/」にアクセスすると、HTTPレスポンスヘッダーのServerのところにApacheのバージョン情報が表示されてしまいます。
また、「http://サーバのIPアドレス/任意の文字列」で存在しないページにアクセスすると、エラー画面が表示され、そのフッターにApacheのバージョン情報の他、様々なモジュールの情報が表示されてしまいます。
Apacheのバージョン情報をネット上で公開していると、悪意あるユーザによる攻撃の手がかりとされる可能性があるため、本機能を無効化しておきます。
① まず、HTTPレスポンスヘッダーにおけるApacheのバージョン表示を無効化します。
「httpd.conf」ファイル内で、「ServerTokens」と記載されている箇所を探します。
「ServerTokens」の設定値は、デフォルトでは「OS」となっており、ApacheのバージョンやOSの情報を表示する設定となっています。
ServerTokens OS
② この設定値「OS」を「ProductOnly(またはProd)」に変更して下さい。
ServerTokens ProductOnly
上記を設定した後、httpd.confの有効化(以降の手順で実施)を行うことで、HTTPレスポンスヘッダーにおけるApacheのバージョン表示は無効化されます。
③ 次に、エラー画面のフッター表示を無効化します。
「httpd.conf」ファイル内で、「ServerSignature」と記載されている箇所を探します。
「ServerSignature」の設定値は、デフォルトでは「On」となっており、エラー画面のフッターでApacheのバージョン情報の他、様々なモジュールの情報を表示する設定となっています。
ServerSignature On
④ この設定値「On」を「Off」に変更して下さい。
ServerSignature Off
上記を設定した後、httpd.confの有効化(以降の手順で実施)を行うことで、エラー画面のフッター表示は無効化されます。
2-3.クロスサイトトレーシング対策
Apacheでは、デフォルトでHTTP TRACEメソッドが有効となっています。
HTTP TRACEメソッドが有効な場合、クロスサイトトレーシングというセキュリティ上の問題が発生する可能性があります。
HTTP TRACEメソッドとは、ブラウザから送信されたリクエスト情報をサーバがそのまま返信する機能のことです。
クロスサイトトレーシングとは、このHTTP TRACEメソッドの機能を悪用して、Basic認証のIDやパスワードなどの情報を不正に入手する攻撃です。
このクロスサイトトレーシングに対して、HTTP TRACEメソッドを無効化することで対応します。
※現時点では、各種ブラウザにおける対応も進み、クロスサイトトレーシングの現実的な脅威は小さいとされていますが、設定も容易で副作用もないので、悩むくらいなら設定しておいた方がよいでしょう。
それでは、HTTP TRACEメソッドの無効化の設定を行います。
① まず、「httpd.conf」ファイル内で、「TraceEnable」と記載されている箇所を探します。
※デフォルトでは記載がありません。
② 以下のように設定して下さい。
TraceEnable off
上記を設定した後、httpd.confの有効化(以降の手順で実施)を行うことで、HTTP TRACEメソッドが無効化されます。
2-4.クリックジャッキング対策
クリックジャッキングとは、ボタンやリンクなどを偽装・隠ぺいしてユーザの意図しない操作を誘い、不正に情報を入手する攻撃です。
このクリックジャッキングの対策として、「X-FRAME-OPTIONS」ヘッダに「SAMEORIGIN」を設定します。
これにより、自分のサーバのページが別のサイトから読み込まれた場合に、正常に表示させないようにすることができます(非表示またはエラー表示とする)。
それでは、「X-FRAME-OPTIONS」ヘッダの設定を行います。
① まず、「httpd.conf」ファイル内で、「X-FRAME-OPTIONS」と記載されている箇所を探します。
※デフォルトでは記載がありません。
② 以下のように設定して下さい。
Header append X-FRAME-OPTIONS "SAMEORIGIN"
上記を設定した後、httpd.confの有効化(以降の手順で実施)を行うことで、「X-FRAME-OPTIONS」ヘッダの設定が有効化されます。
2-5.iconsフォルダの無効化
iconsフォルダは、Apacheのデフォルトコンテンツが利用する画像が配置されています。
Apacheのデフォルトコンテンツは使用しないため、このiconsフォルダも不要であり、無効化しておきます。
① httpd.confから以下のように記載されている箇所を探します。
Alias /icons/ "/var/www/icons/" <Directory "/var/www/icons"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
② 以下のようにすべて無効化します(先頭に「#」をつける)。
# Alias /icons/ "/var/www/icons/" # <Directory "/var/www/icons"> # Options Indexes MultiViews FollowSymLinks # AllowOverride None # Order allow,deny # Allow from all # </Directory>
上記を設定した後、httpd.confの有効化(以降の手順で実施)を行うことで、iconsフォルダが無効化されます。
2-6.errorフォルダの無効化
Apacheのデフォルトのエラーページは使用しないため、このerrorフォルダも不要であり、無効化しておきます。
① httpd.confから以下のように記載されている箇所を探します。
Alias /error/ "/var/www/error/" <IfModule mod_negotiation.c> <IfModule mod_include.c> <Directory "/var/www/error"> AllowOverride None Options IncludesNoExec AddOutputFilter Includes html AddHandler type-map var Order allow,deny Allow from all LanguagePriority en es de fr ForceLanguagePriority Prefer Fallback </Directory> </IfModule> </IfModule>
② 以下のようにすべて無効化します(先頭に「#」をつける)。
# Alias /error/ "/var/www/error/" # <IfModule mod_negotiation.c> # <IfModule mod_include.c> # <Directory "/var/www/error"> # AllowOverride None # Options IncludesNoExec # AddOutputFilter Includes html # AddHandler type-map var # Order allow,deny # Allow from all # LanguagePriority en es de fr # ForceLanguagePriority Prefer Fallback # </Directory> # </IfModule> # </IfModule>
上記を設定した後、httpd.confの有効化(以降の手順で実施)を行うことで、errorフォルダが無効化されます。
2-7.cgi-binフォルダの無効化
CGIは使用しないため、このcgi-binフォルダも不要であり、無効化しておきます。
① httpd.confから以下のように記載されている箇所を探します。
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" <Directory "/var/www/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory>
② 以下のようにすべて無効化します(先頭に「#」をつける)。
# ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" # <Directory "/var/www/cgi-bin"> # AllowOverride None # Options None # Order allow,deny # Allow from all # </Directory>
上記を設定した後、httpd.confの有効化(以降の手順で実施)を行うことで、cgi-binフォルダが無効化されます。
3.httpd.confの有効化
httpd.confの設定が完了したら、設定を保存して有効化します。
① では、vimで開いた「httpd.conf」ファイルの設定を保存し、ファイルを閉じます。
「:wq」と入力してEnterを押します。
:wq
② 設定した内容を有効化するために、Apacheを再起動します。
「service httpd restart」と入力してEnterを押します。
[root@ conf]# service httpd restart
Apacheの再起動が完了しました。
httpd を停止中: [ OK ] httpd を起動中: [ OK ]
これで、Apacheの各種セキュリティ設定が有効化されました。
4.welcomeページの無効化
Apacheのwelcomeページは使用しないため、無効化しておきます。
① まず、サーバにrootユーザでログインします。
[root@ ~]#
② 次に、「welcome.conf」ファイルがある「/etc/httpd/conf.d」フォルダへ移動します。
「cd /etc/httpd/conf.d」と入力してEnterを押します。
[root@ ~]# cd /etc/httpd/conf.d
「/etc/httpd/conf.d」フォルダへ移動できました。
[root@ conf.d]#
③ 「welcome.conf」ファイルのファイル名を「welcome.conf.yyyymmdd」に変更します。
「mv welcome.conf welcome.conf.yyyymmdd」と入力してEnterを押します。
なお、「yyyymmdd」は設定変更を行う日など任意の年月日とします。
(以下は、20170219とした例)
[root@ conf.d]# mv welcome.conf welcome.conf.20170219
これで、ブラウザから「http://サーバのIPアドレス」や「http://サーバのドメイン名」とアクセスしても、welcomeページが表示されなくなりました。