基本設定
設定ファイルの整形
apacheの設定ファイルはベースで丁寧にコメントが記載されています。
運用管理上は分かりにくいためコメントを削除します。
# cd /etc/httpd/conf
# cp -p httpd.conf httpd.conf.org
# sed -e "/^#/d" -e "/^$/d" -e "/^ #/d" httpd.conf.org > httpd.conf
サーバ設定
サーバヘッダー情報の隠蔽
Apacheの標準出力で、OS情報を表示しないよう設定する。
ServerTokens ProductOnly
ServerSignature Off
タイムアウト設定
TimeOutディレクティブは以下の3つの待ち時間を定義しています。
- GET リクエストを受け取るのにかかる総時間
- POST や PUTリクエストにおいて、次の TCP パケットが届くまでの待ち時間
- レスポンスを返す際、TCP の ACK が帰ってくるまでの時間
Timeout 60
KeepAlive設定
複数のリクエストが同じ TCP の接続で送られる、長時間持続する HTTP セッションを提供します
デフォルトONに変更されている
KeepAlive Off
サーバ管理者情報
サーバがクライアントに送るエラーメッセージに含める電子メールの アドレスを指定
ServerAdmin webmaster@サイトドメイン名
サーバーURL、Port解決方法の設定
Apacheは様々な状況で自己参照URLつまりサーバが自分自身を指し示すURLを生成する必要があります。
それはCGIであったり、PHPで合ったりします。
LB配下等で、クライアントからのリクエストポートと、サーバー上のポートが違う場合、
応答ポートをサーバー上のポートで返答しないよう設定する。
UseCanonicalName Off
parameter | example |
---|---|
ON | ServerName で指定されているポート番号 |
実際のポート番号 | |
デフォルトのポート番号 | |
Off / DNS | Host: ヘッダから抽出されたポート番号 |
実際のポート番号 | |
ServerName で指定されているポート番号 | |
デフォルトのポート番号 |
ディレクトリインデックス対策
ディレクトリインデックスが表示されないよう、ルートの設定から追加しておく
<Directory />
Options -Indexes
AllowOverride none
Require all denied
</Directory>
名前解決の無効化
アクセスログなどでアクセス元の名前解決を行なわないようOff
にする。
HostnameLookups Off
不要なリクエストメソッドの拒否
サーバがクライアントからの余計なリクエストメソッドに応答し、情報が漏れる事を防ぐ
TraceEnable Off
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(OPTIONS)
RewriteRule .* - [F]
DEFALATE設定
平分コンテンツは圧縮させる事で回線圧迫を抑制し、通信速度を向上させる。
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
IE nosniff対策
MSが独自で定義している項目で、Content-Typeだけでファイルタイプを決定するのではなく、
コンテンツ内容などもsniffして(調べて)ファイルタイプを決めており、その結果としてXSSが発生することがある
Header always set X-Content-Type-Option nosniff
Header always set X-XSS-Protection 1
クリックジャッキング対策
このレスポンスヘッダを、クリックジャッキング攻撃を防止するために使用することができます。
これは、自分のサイトのコンテンツが他のサイトに埋め込まれないと保証することによります。
Header always append X-Frame-Options SAMEORIGIN
サーバーポートの設定
サイト設計に基づきリスニングポートを設定
# vim /etc/httpd/conf/httpd.conf
Listen 18080
Litens 18443
サービスユーザーの設定
Apacheサービスユーザーで利用するユーザーを定義します。
動的にファイルを生成する機能がある場合、ここで定義したユーザー権限で作成されるため、
要件に適したユーザーを定義する。
# vim /etc/httpd/conf/httpd.conf
User apache
Group apache
セキュリティ上サービスユーザーにroot
は利用しない。
不要な設定の削除
サイト設計により、VirtualHostでApacheのサイト設定を行う場合、 デフォルトのサイト設定はコメントアウトしておきます。
ドキュメントルートの設定
#DocumentRoot "/var/www/html"
サイトコンテンツディレクトリ設定
#<Directory "/var/www">
# AllowOverride None
# # Allow open access:
# Require all granted
#</Directory>
#<Directory "/var/www/html">
# Options Indexes FollowSymLinks
# AllowOverride None
# Require all granted
#</Directory>
ディレクトリエイリアス設定
#<IfModule alias_module>
# ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
#</IfModule>
CGI設定
#<Directory "/var/www/cgi-bin">
# AllowOverride None
# Options None
# Require all granted
#</Directory>
SSI設定
#<IfModule mime_module>
# AddType text/html .shtml
# AddOutputFilter INCLUDES .shtml
#</IfModule>
ディレクトリインデックス設定
サイトのTOPコンテンツとして表示するコンテンツ拡張子を定義。
複数サイトの場合VirtualHost上に定義する事もできる。
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
アクセス拒否ファイルの定義
セキュリティファイルや分散設定ファイルなど、
エンドユーザーに間違っても公開されたくないファイルを定義しておきます。
分散設定ファイルのアクセス拒否
<Files ".ht*">
Require all denied
</Files>
ドットから始まるファイルはアクセス拒否
<Files ~ "^\..*">
Require all denied
</Files>
ログやCSVなど特定の拡張子ファイルはアクセス拒否
<Files ~ "\.(dat|log|csv)$">
Require all denied
</Files>
ロギング設定
サイトのログ設定はVirtualHostで定義し、ログフォーマットとシステムログの出力を定義します。
ロギングにはインストールしたcronolog
を利用する。
エラーログ設定
ErrorLog "|/usr/sbin/cronolog /var/log/httpd/%Y%m/apache_error.%Y%m%d.log"
ログフォーマット設定
応答時間とフォワードヘッダー情報を出力するようカスタマイズ
<IfModule log_config_module>
LogFormat "%h[%{X-Forwarded-For}i] %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combined
</IfModule>
カスタムログ設定
<IfModule log_config_module>
CustomLog "|/usr/sbin/cronolog /var/log/httpd/%Y%m/apache_access.%Y%m%d.log" combined
</IfModule>
不要ログの除外設定
サイトパーツ(cssやjsなど)のアクセスログはログに出力したくない。
ローカルからの監視や運用処理アクセスはログを分けたいなど出力ログを操作したい場合ば変数を利用する。
パーツコンテンツのアクセスログは出力しないように変数を定義
SetEnvIfNoCase Request_URI "\.(gif|jpg|png|css|swf|ico|js|flv)$" nolog
CustomLog
設定で呼び出し除外させる
CustomLog "|/usr/sbin/cronolog /var/log/httpd/%Y%m/apache_access.%Y%m%d.log" combined env=!nolog
デフォルキャラ設定
サイト側でエンコードするキャラクターセットを定義
基本的にはアプリケーション、コンテンツ側で定義されるべきものなのでサーバ側で定義はしない
AddDefaultCharset Off
インクルード設定ファイル
外部設定ファイルの読み込みディレクティブ設定が変更されています。
基本的には今までのIncludes
と同様に動きますが、インクルード対象ファイルが無い場合エラーを出力しません。
IncludeOptional conf.d/vhost_80.conf
IncludeOptional conf.d/vhost_433.conf
不要なコンフィグファイルを読み込まないようにしておく
AutoIndexコンフィグ
アイコン関連やIndexesオプション関連の設定は外部ファイルに設定されています。
conf.d/autoindex.conf
通常のWEBサービスとして利用する場合ほぼ使わない設定なので、使わない場合インクルードしないようにしておく。
UserDirコンフィグuserdir
モジュールを利用した構成を利用しない限り、不要なのでインクルードしない。
conf.d/autoindex.conf