Home > apache > debianでapache2を設定しながら理解を深める

debianでapache2を設定しながら理解を深める

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の基本設定でした。

関連記事

このブログを書いているsayjiroは最近会社を立ち上げました。小さな小さな会社ですが、一緒に働く仲間を探している今日この頃です。
社員が僕しかいない小規模零細企業ですが、自由に楽しく仕事をしつつWebを使って面白いことができればと思ってます。

募集している人物像:向上心がある・Webともの作りが好き(ある程度経験があると嬉しいですが、未経験でもやる気があれば可です)
お仕事内容:Web周り全般。サイト制作やデザイン、システム構築やiPhoneアプリ開発などいろいろです。
働く形態:その人に合わせて応相談(在宅とかでもいいです)


→興味がございましたらこちらからお気軽にご連絡ください!

コメント:0

コメントフォーム
設定を保存する

トラックバック:1

この記事のトラックバックURL
http://sj6.org/apache2%e3%81%ae%e7%90%86%e8%a7%a3%e3%82%92%e6%b7%b1%e3%82%81%e3%82%8b/trackback/
pingback from Apache2のインストール | ソースコード備忘録Press 10-02-04 (木) 15:43

[...] debianでapache2を設定しながら理解を深める – 適当な日々 [...]

Home > apache > debianでapache2を設定しながら理解を深める

フィードとか

ページの上へ