Debianのapache2は独自のルールがある。
まず、設定ファイルだが、
/etc/apache2/apache2.conf
基本設定
/etc/apache2/ports.conf
ポート設定
/etc/apache2/mods-enabled/
使用するモジュールへのリンクファイルが置かれるディレクトリ
/etc/apache2/mods-available/
モジュールファイルが置かれるディレクトリ
/etc/apache2/sites-enabled/
使用するサイト定義ファイルへのリンクファイルが置かれるディレクトリ
/etc/apache2/sites-available/
サイト定義ファイルが置かれるディレクトリ
となっている。
今回はサイト定義ファイルの設定とその内容について記載してみる。
apache2.confの末尾に記載してある Include /etc/apache2/sites-enabled/[^.#]* だが、こちらは sites-enabled 配下のファイルを全てincludeすると言う意味。
現在 /sites-enabled/ ディレクトリには 000-default という /sites-available/default へのシンボリックリンクがある。
なのでこの default ファイルを書き換えれば良いのだが、せっかくなのでファイルを作成してみる。
/etc/apache2# cp sites-available/default sites-available/siteconf /etc/apache2# ln -s /etc/apache2/sites-available/siteconf /etc/apache2/sites-enabled/001-siteconf
これでsiteconfというファイルを書き換えることで設定が可能となった。
siteconf
NameVirtualHost *
<VirtualHost *>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
RedirectMatch ^/$ /apache2-default/
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
上から見ていってみます。
NameVirtualHost
ネームベースのバーチャルホスト (一つの IP アドレスに複数のウェブサイト)を設定したいときに必要となるものです。
そんなときはIPを指定するのですが、現在は*でOK。
<VirtualHost *>~</VirtualHost>
特定のバーチャルホストに対してのみ適用されるディレクティブ群を括るためのものです。
もしバーチャルホストを設定する場合は*の部分にIPアドレスを入力しますが、こちらも*でOK。
他にこの階層に記述してあるものを見てみます。
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
Alias /doc/ "/usr/share/doc/"
ServerAdmin
管理者のメールアドレスです。
DocumentRoot
ドキュメントルートの場所です。
ScriptAlias
対象ディレクトリに mod_cgi の cgi-script ハンドラで処理される CGI スクリプトがある場合、ドキュメントを ローカルファイルシステムの DocumentRoot 以外の場所に保管することができます。
この場合は、/cgi-bin/ ディレクトリから処理対象CGIが呼び出された場合、/usr/local/cgi_bin ディレクトリにあるファイルが呼び出されます。
ErrorLog
サーバがエラーログを収集する場所を指定しています。
LogLevel
ログに記録するメッセージのレベルを設定します。
emerg,alert,crit,error,warn,notice,info,debugの8種で、運用時はnotice,warn、テスト時はinfo,debugを指定することが多い。
CustomLog
サーバへのリクエストログを収集する場所を指定します。2番目の引数はログの書式で、よく使われるものは以下のとおり。
Common Log Format (CLF)
"%h %l %u %t \"%r\" %>s %b"
バーチャルホスト付き Common Log Format
"%v %h %l %u %t \"%r\" %>s %b"
NCSA extended/combined ログ書式
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
Referer ログ書式
"%{Referer}i -> %U"
Agent (ブラウザ) ログ書式
"%{User-agent}i"
ServerSignature
サーバが生成するドキュメントに付与するフッタの設定で、on|Off|Emailがあり、OnにするとServerNameに書かれた行を追加し、EmailはさらにServerAdminを追加します。
Alias
ドキュメントを ローカルファイルシステムの DocumentRoot 以外の場所に保管することができます。
この場合は、/doc/ ディレクトリからファイルが呼び出された場合、/usr/share/doc/ ディレクトリにあるファイルが呼び出されます。
あとは、ServerNameを追加します。
ServerName
サーバが自分自身を示すホスト名とポートです。例えば、www.example.com:80のように設定します。
では次に<Directory >~</Directory>とその中の設定について見ていきます。
<Directory />~</Directory>
指定されたディレクトリとそのサブディレクトリへの設定を示します。
なので、"/"になっているとホスト全体。"/var/www/"になっているとその配下のディレクトリということなります。
次にこの間の設定について見ていきます。
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
RedirectMatch ^/$ /apache2-default/
</Directory>
Options
ディレクトリに対して使用可能な機能を設定します。以下のものが1個以上指定できます。
All:MultiViews を除いた全ての機能が有効(デフォルト)
ExecCGI:mod_cgi による CGI スクリプトの実行を許可
FollowSymlinks:ディレクトリ内でシンボリックリンクをたどれるようなる
Includes:mod_include が提供する SSI (ファイルがクライアントに送られる前に処理するフィルタ)を有効
IncludesNOEXEC:SSI は有効になりますが、CGIは無効。ただし、#include virtual により、ScriptAlias されたディレクトリで CGI を実行することは可能
Indexes:mod_autoindex (ファイルのツリー構造を表示する機能)が有効。
MultiViews:mod_negotiation による コンテントネゴシエーションされた "MultiViews" (特定のブラウザに対する最適化された表現)を許可。
SymLinksIfOwnerMatch:シンボリックリンクの所有ユーザ ID とファイルまたはディレクトリが同じ場合にのみシンボリックリンクを許可。
AllowOverride
.htaccess で許可されるディレクティブの種類を設定します。以下のキーワードから設定します。
ALL:.htaccessの全てのディレクティブを許可
None:.htaccessが無効
AuthConfig:認証に関するディレクティブの使用を許可
FileInfo:ドキュメントタイプを制御するためのディレクティブの使用を許可
Indexes:ディレクトリインデックスを制御するためのディレクティブの使用を許可
Limit:ホストへのアクセス制御を行うためのディレクティブの使用を許可
Options:特定のディレクトリにおける機能を指定するためのディレクティブの使用を許可
Allow
サーバのある領域にアクセスできるホストを制御します。
設定できる値は、ドメイン(とその一部)やIPアドレス(とその一部)、ネットワーク/ネットマスク の対、ネットワーク/nnn CIDR 指定が設定できます。
例> Allow from 10.1.2.3
Deny
Allowと同様の形式でアクセスを拒否するホストを制御します。
Order
デフォルトのアクセス可能な状態と、Allow と Deny が評価される順番を制御します。
Deny,Allow:Denyが Allowの前に評価。アクセスはデフォルトで許可。
Allow,Deny:AllowがDenyの前に評価。アクセスはデフォルトで拒否。
Mutual-failure:Allow,Denyと同様で、非推奨設定。
RedirectMatch
標準正規表現を利用して、外部へのリダイレクトを送ります。
上では、/var/www/にアクセスしてきたとき、apacheのデフォルトページに飛ばしているので、コメントにしてください。
基本の設定項目は以上です。
あとは、セキュリティについても調べながら設定してみました。
まず、こちら
全アクセスを拒否する
<Directory />
Options None
AllowOverride None
Order allow,deny
Deny from all
</Directory>
Webサーバーの全てのファイルにアクセス可能な状態だったので、全てのファイルに対してアクセスを遮断する設定にしました。
ディレクトリ毎にアクセス等の設定をしていきます。
TraceEnableを無効化
Basic 認証の ID とパスワードが漏洩する「クロスサイトトレーシング」という攻撃があるのですが、これの材料となるTraceメソッドを無効化します。
TraceEnable Off
サーバ情報を隠す
※ここの設定項目はapache.confにあります。
ServerSignature Off
フッターやmailto:を参照しないようにOffにしておきます。
ServerTokens Prod
初期設定はFullとなっているが、このままだと、apacheのバージョンやサーバマシンのOSやCGIの情報がクライアントに送信されてしまう。よって、Prod (ProductOnly)と設定することによって、「apache」としか情報が伝わらなくなる。
以上、Debianでのapache2の基本設定でした。
ピンバック: Apache2のインストール | ソースコード備忘録Press