Apache 2.0の必須設定と基本セキュリティ対策実用 Apache 2.0運用・管理術(1)(3/3 ページ)

» 2005年08月02日 00時00分 公開
[鶴長鎮一@IT]
前のページへ 1|2|3       

Apache 2.0の基本設定

 Apacheの設定のほとんどは、httpd.confだけで行えます。httpd.confを編集することでより高いパフォーマンスを引き出したり、セキュアなサイトを作れるなど、細かな挙動を制御できます。httpd.confの設定は奥深く、それだけを解説した書籍が発行されるほどのボリュームがあります。

 ここでは、多岐にわたる設定項目の中から要点をかいつまんで紹介します。なお、ソースからインストールした場合は「highperformance-std.conf」ファイルなど、用途に応じてhttpd.confファイルを選択することもできます。

Webサーバとして最小限やっておくべき設定

 httpdデーモン起動の前に、最低限動作に関係するディレクティブを確認します。

Listen 80
サービスポートの設定(通常は変更しない)
User nobody
httpdデーモンのユーザー権限、ユーザーID
Group #-1
httpdデーモンのユーザー権限、グループID
ServerAdmin you@example.com
サイト管理者のアドレス
ServerName www.example.com:80
ホスト名の指定。必ず設定するべきディレクティブである
絶対外せない基本設定とサーバの動作

パフォーマンスを引き出すには

 パフォーマンスを見直す際は、次のディレクティブを利用します。ただし、プロセス数やスレッド数などを変更すると、かえってパフォーマンスを悪化させることもあります。ほとんどの用途ではデフォルトのまま使用します。KeepAliveについてはApacheパフォーマンス・チューニングの実践も参考にしてください。

KeepAlive On
Onにすることで、同一クライアントに対してコネクションを使い回す
MaxKeepAliveRequests 100
1つのKeepAliveが接続から切断までに受け付けるリクエストの数。大きな値を設定すると一度の接続で処理できる要求数が多くなるが、1ページ当たりの平均的なファイル数+αぐらいにとどめておく
KeepAliveTimeout 15
指定された秒数の間、KeepAliveでコネクションを張っているクライアントからの接続がなくてもKeepAliveを維持する。サーバの状況を見ながら少しずつ小さな値を設定する
<IfModule prefork.c>
StartServers         5
MinSpareServers      5
MaxSpareServers     10
MaxClients         150
MaxRequestsPerChild  0 #0は無制限を意味する
</IfModule>
非マルチスレッドの場合のプロセス数の設定。Apache 2.0はプロセス処理が最適化されているため、まずはデフォルトのまま使用する
<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0 #0は無制限を意味する
</IfModule>
マルチスレッドの場合のプロセス/スレッド数の設定。Apache 2.0ではプロセス/スレッド処理が最適化されているため、まずはデフォルトのまま使用する
HostnameLookups Off
ログへの記録などで、ドメイン名の逆引きなどのDNS問い合わせ処理をしない

ドキュメントルートの変更

 Webコンテンツ(HTMLファイルなど)を格納するディレクトリを「ドキュメントルート」と呼びます。ドキュメントルートは任意の場所に配置できます。ただし、配置場所を変更する場合は、httpd.confの「DocumentRoot」とそれに対応したディレクティブ(Directory)を変更する必要があります。なお、ドキュメントルートに指定したディレクトリは、「Webサーバとして最小限やっておくべき設定」で紹介した「User」「Group」ディレクティブで設定したユーザー権限で読み込み可能である必要があります。

 以下の例では、/home/wwwを新たなドキュメントルートにしています。まず、新たなドキュメントルートのためのディレクトリを作成します。ドキュメントルートにはhtml、icons、cgi-bin、errorディレクトリを用意する必要がありますが、ここでは既存のドキュメントルートをコピーして使用します。cpコマンドに「-Rp」オプションを指定し、ディレクトリを丸ごとコピーしながらユーザー権限情報を保持するようにします。

# cp -Rp /var/www /home/www
既存のドキュメントルートが/var/wwwの場合

 次にhttpd.confを修正します。

DocumentRoot "/home/www/html"
新たなドキュメントルートを指定
<Directory "/home/www/html">
新たなドキュメントルートに合わせて適宜変更
Alias /icons/ "/home/www/icons/"
 
<Directory "/home/www/icons">
同様にiconsディレクトリの修正
ScriptAlias /cgi-bin/ "/home/www/cgi-bin/"
 
<Directory "/home/www/cgi-bin">
同様にcgi-binディレクトリの修正
Alias /error/ "/home/www/error/"
 
<Directory "/home/www/error">
同様にerrorディレクトリの修正

 ドキュメントルートを変更することで、バックアップが取りやすくなったり、より大きなディスクスペースを確保できます。しかし、MRTGやAnalogなど、Webコンテンツを使用するパッケージをRPMパッケージユーティリティでインストールすると古いドキュメントルートにインストールされるため注意が必要です。

基本的なセキュリティ対策

 セキュリティ対策は一概に論ずることができないほど、多くの検討事項が存在します。ここでは、httpd.confの編集だけでできる対策に絞って解説します。IP認証によるアクセス制限のテクニックも参考にしてください。

 Apacheのデフォルト設定では、ApacheのバージョンやApacheを稼働させているサーバのOSなど、プラットフォームの情報を外部から取得することができます。こうした情報が取得されたからといって、即攻撃や不正アクセスの被害に遭うわけではありません。逆に、情報を隠したからといって被害に遭わないようになるわけでもありません。とはいえ、攻撃者に対して進んでサーバの情報を提供する必要はありません。

 サーバ情報の出力は、ServerTokensおよびServerSignatureディレクティブで制御します。それぞれ、以下のように設定します。

ServerTokens ProductOnly
 
ServerSignature Off

 「.htaccess」ファイルを使用すると、サーバのグローバル設定とは別に、そのディレクトリのみに限定した設定を行うことができます。しかし、管理者が意図しない設定をユーザーが実施するなどの危険もあります。次のようにしてデフォルトでは.htaccessファイルの使用を禁止し、必要なディレクトリに対してのみ解放するようにします。

 まず、すべての.htaccessファイルを無効にします。

<Directory />
(省略)
AllowOverride None ←.htaccessによる制限上書きを禁止
</Directory>

 次に、.htaccessファイルを許可するディレクトリを個別に指定します。

<Directory /許可するディレクトリのフルパス/>
(省略)
AllowOverride All ←.htaccessによる制限上書きを許可
</Directory>

 また、各ユーザーのホームディレクトリ中でコンテンツの公開を許可している場合、公開を許可しないユーザーを指定することができます。

<IfModule mod_userdir.c>
UserDir disable root	#最低限rootは公開しないようにする
UserDir public_html
</IfModule>

セキュリティに対する留意事項

 httpd.confで行うセキュリティ対策を紹介しましたが、httpd.confでできることには限りがあります。DDoS攻撃などはアプリケーションレイヤではなく、カーネルレイヤで対応する方が効果的です。ステートフルパケットフィルタを使ったサービスの公開で、iptablesを使ったWebサーバのセキュア化の手法を紹介しています。こちらも参考にしてください。

 セキュリティ対策は、何から何を守るのか、保護の対象となる情報やサービス、攻撃元として想定される外部のサーバや内部のユーザーなど、系統立てて対処する必要があります。セキュリティ対策は、ログの調査やサーバのステータス確認など、地道な定常運用の積み重ねが必要です。httpdのバージョンアップもその地味な努力の1つです。セキュリティについては、今後も必要に応じて随時取り上げていきます。

設定の確認

 httpd.confに間違いがあれば、httpdデーモン起動時にエラーを出力します。また、httpdの実行時に「-t」オプションを指定することで、起動前に確認できます。-tオプションを指定するとデーモンは起動せず、httpd.confのチェックのみを行います。

# /usr/sbin/httpd -t
Syntax OK

 apachectlコマンドで確認することもできます。

# /usr/sbin/apachectl configtest
Syntax OK

起動/終了、サービスの登録

 コマンドラインから起動する場合は、Apache 2.0の新機能とその実力で紹介されているように、apachectlを使用するのが簡単です。

# /usr/sbin/apachectl start

 Webブラウザでサーバにアクセスし、画面3のように表示されれば成功です。

画面3 起動の確認 画面3 起動の確認

 もし起動に失敗するようなら、/var/log/httpdディレクトリにあるerror_logを確認します。同じサービスポート番号でほかのサーバがすでに起動している場合にもエラーが発生しますが、大抵の場合はhttpd.confの記述に不備があることが原因です。

 終了は、apachectlの引数にstopを指定します。

# /usr/sbin/apachectl stop

 Webサーバを常時稼働させるなら、apachectlでいちいち起動するわけにはいきません。そこでシステム起動時のサービスとして登録し、サーバの起動/終了に合わせてデーモンも起動/終了するようにします。

 RPMでインストールした場合、起動スクリプトが/etc/init.d/httpdとしてインストールされています。ソースからインストールした場合は、ソースディレクトリ中のbuild/rpm/httpd.initファイルを利用します。Red Hat、Fedora Core、SUSE、Turbolinuxといったディストリビューションでは、サービスの登録にchkconfigコマンドを利用します()。

# chkconfig --level 35 httpd on	#ランレベル3、5でオン
# chkconfig --list httpd #登録状況の確認
httpd        0:off   1:off   2:off   3:on    4:off   5:on    6:off

注:ソースからインストールした場合は、事前に/etc/init.d/httpdを用意しておく必要があります。

# cp ..ソースディレクトリ/build/rpm/httpd.init /etc/init.d/httpd

 ディストリビューション付属のGUIユーティリティを使ってもサービスの登録が可能です。

画面4 Fedora Core4のsystem-config-service 画面4 Fedora Core4のsystem-config-service

 今回は、取りあえずApacheをWebサーバとして機能させるまでを駆け足で解説しました。すでに過去の記事で解説されている機能については、説明を最小限にとどめています。詳しくはリンク先の記事を参照ください。次回からは、Apacheのチューニングや負荷分散について解説する予定です。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。