Dell Optiplex GXa Solaris 8  x86  6/00

戻る



こちらSolaris 9編に引っ越します。今後このページの更新はありません。

Apache/2.0.48 (Unix) mod_perl/1.99_10 Perl/v5.8.0 
PHP/4.3.3 DAV/2 mod_ssl/2.0.48 OpenSSL/0.9.7c


	事前に
	autoconf-2.54
	libtool-1.4.2
	の2つをインストールしておく必要がある



ポリシー

 ・簡易的にSSLを使い、一部のページのデータを暗号化させたい。

 ・トラフィックを抑えるため、対応しているブラウザからのアクセスの場合は、テキスト
  ベースのデータは圧縮(mod_deflate)して、クライアント側で解凍させる(1.3.x時代
  のmod_gzip) (相手がISDN以下の場合は特に効果が期待できる)

 ・HTTPヘッダー情報に表示されるApacheとそのバージョン名は架空のものを表示させ、
  ある程度のセキュリティを確保したい。

 ・バーチャルドメインを設定して、2個以上のドメイン名で運用したい。

 ・ などなど。




Domain 例:
	Domain1 = domain1.com
	Server Name = www.domain1.com
	
	バーチャルドメインとして、
	Domain2 = domain2.tv
	Server Name  = domain2.tv & www.domain2.tv
	と
	Domain3 = domain3.net
	Server Name = domain3.net
	と
	Domain4 = domain4.com
	Server Name = domain4.com & www.domain4.com



必要なソフトウェア:

httpd-2.0.48.tar.gz	(24-Oct-2003 Rerease)
http://www.apache.org/dist/httpd/

openssl-0.9.7c.tar.gz  (30-Sep-2003 Rerease)
http://www.openssl.org/source/

mod_perl-1.99_10.tar.gz	(29-Sep-2003 Rerease)
http://perl.apache.org/dist/

php-4.3.3.tar.gz  (25-Aug-2003 Rerease)
http://jp.php.net/


準備

※ これ以前にPerl-5.8.0-RC2をインストールしておく必要がある

作業ディレクトリを作成し、移動しておく
	$ mkdir /opt/src/apache-2.0.48/
	$ cd /opt/src/apache-2.0.48/



OpenSSL (0.9.7c) のインストール

アーカイブをダウンロードする
	$ wget http://www.openssl.org/source/openssl-0.9.7c.tar.gz

解凍展開する
	$ tar xozf ./openssl-0.9.7c.tar.gz

SuperUserになる
	$ su
	password:

オーナーとグループを変更しておく
	# chown -R root:other openssl-0.9.7c

解凍展開されたディレクトリに移る
	# cd openssl-0.9.7c

最適化する
	# ./config

コンパイルする
	# make

SuperUserになってインストールする
	# make install


シェアード・ライブラリをmakeする
	# make build-shared

出来上がったライブラリをそれぞれ/usr/local/lib内にコピー
	# cp libcrypto.a /usr/local/lib/
	# cp libcrypto.so /usr/local/lib/
	# cp libcrypto.so.0 /usr/local/lib/
	# cp libcrypto.so.0.9.7 /usr/local/lib/
	# cp libssl.a /usr/local/lib/
	# cp libssl.so /usr/local/lib/
	# cp libssl.so.0 /usr/local/lib/
	# cp libssl.so.0.9.7 /usr/local/lib/

コピーしたライブラリのシンボリックリンクを/usr/lib/内に張る
	# ln -s /usr/local/lib/libcrypto.a /usr/lib/
	# ln -s /usr/local/lib/libcrypto.so /usr/lib/
	# ln -s /usr/local/lib/libcrypto.so.0 /usr/lib/
	# ln -s /usr/local/lib/libcrypto.so.0.9.7 /usr/lib/
	# ln -s /usr/local/lib/libssl.a /usr/lib/
	# ln -s /usr/local/lib/libssl.so /usr/lib/
	# ln -s /usr/local/lib/libssl.so.0 /usr/lib/
	# ln -s /usr/local/lib/libssl.so.0.9.7 /usr/lib/

一般ユーザーに戻る
	# exit



Apache/2.0.48のインストール

アーカイブをダウンロードする
	$ wget http://www.apache.org/dist/httpd/httpd-2.0.48.tar.gz

解凍展開する
	$ tar xozf httpd-2.0.48.tar.gz

ディレクトリを移動する
	$ cd /opt/src/apache-2.0.48/httpd-2.0.48

cshやtcshではうまくいかないので、shかbashになる
	$ sh

環境変数を指定しつつ最適化スクリプトを実行する

	$ CC=gcc LDFLAGS=-L/usr/local/lib ./configure --enable-modules=mod_access \
	--enable-modules=mod_actions \
	--enable-modules=mod_alias \
	--enable-modules=mod_asis \
	--enable-modules=mod_auth \
	--enable-modules=mod_auth_anon \
	--enable-modules=mod_auth_db \
	--enable-modules=mod_auth_dbm \
	--enable-modules=mod_auth_digest \
	--enable-modules=enable-cern-meta \
	--enable-cache \
	--enable-disk-cache \
	--enable-mem-cache \
	--enable-file-cache \
	--enable-headers \
	--enable-ssl \
	--enable-dav \
	--enable-info \
	--enable-cgi \
	--enable-cgid \
	--enable-dav-fs \
	--enable-vhost-alias \
	--enable-speling \
	--enable-rewrite \
	--enable-expires \
	--enable-deflate \
	--with-z=/usr/local/lib \
	--with-mpm=prefork \
	--enable-so


簡単な説明: (勝手な解釈なので間違ってるかも)
mod_access IPアドレスとHOST名でアクセス制御をする
mod_actions リクエストに応じたCGI処理をする
mod_alias DocumentRoot内にないディレクトリを、あたかもあるか
のように見せかけるように別途設定可能にする
mod_asis 拡張子に.htmlを使っていないファイルの送信時のHTTP
ヘッダーを省略させる
mod_auth パスワード認証機能(ベーシック認証)を使えるようにする
mod_auth_anon ベーシック認証パスワードをかけたディレクトリで、
匿名アクセスも可能にできる
mod_auth_db BerkrayDBを使ったベーシック認証を可能にする
mod_auth_dbm DBMを使ったベーシック認証を可能にする
mod_auth_digest MD5を使ったダイジェストユーザー認証を可能にする
cern-meta CERNをエミュレートする
file-cache メモリーにキャッシュさせて、応答速度を上げる
cache 一度リクエストされたファイルは、アンコールされる可能性
が高いので、ダイナミックなキャッシュをさせる
disk-cache ディスクキャッシュを使用する
mem-cache メモリーキャッシュを使用する
headers HTTPヘッダーをカスタマイズできる
ssl SSLを使用可能にする
dav WebDAVを使用可能にする
info 設定表示を使用可能にする
cgi CGIを使用可能にする
cgid マルチスレッドでもCGIを使用可能にする
dav-fs DAVファイルシステムを使用可能にする
vhost-alias バーチャルホストを使用可能にする
speling 間違ったリクエストに対し、近いと判断できる
リクエストにリダイレクトさせる
rewrite リダイレクトを使用可能にする
expires クライアントのキャッシュを指定期限が過ぎ
たら、無効にさせることが出来るようにする
deflate 圧縮送信を使用可能にする
with-z=/usr/local/lib 圧縮用のzlibが格納されているライブラリディレクトリ
を指定
with-mpm=prefork mod_perlを使用する時に、これを含める必要がある
so DSOを有効にする
makeする $ make (とっても時間がかかる) SuperUserになってインストールする $ su password: # make install # exit $ mod_perl-1.99_10のインストール 作業ディレクトリに戻る $ cd /opt/src/apache-2.0.48/ mod_perlのアーカイブをダウンロードする $ wget http://perl.apache.org/dist/mod_perl-1.99_10.tar.gz ダウンロードしたアーカイブを解凍展開する $ tar xozf ./mod_perl-1.99_10.tar.gz 展開したディレクトリに移動する cd mod_perl-1.99_10 perlで書かれた最適化スクリプトを走らせる $ /usr/local/bleedperl/bin/perl Makefile.PL MP_AP_PREFIX=/usr/local/apache2 コンパイルする $ make SuperUserになる $ su password: インストールする # make install PHP/4.3.3のインストール 作業ディレクトリを作成する $ mkdir /opt/src/php-4.3.3 作成したディレクトリに移動する $ cd /opt/src/php-4.3.3 アーカイブをダウンロードする $ wget http://jp.php.net/get/php-4.3.3.tar.gz/from/this/mirror 解凍展開する $ tar xozf ./php-4.3.3.tar.gz 展開されたディレクトリに移動する $ cd php-4.3.3 最適化スクリプトを実行する $ ./configure --with-apxs2=/usr/local/apache2/bin/apxs \ --with-mysql=/usr/local/mysql \ --enable-ftp コンパイルする $ make SuperUserになってインストールする $ su password: # # make install 設定ファイルを所定の位置にコピーする。 # cp php.ini-dist /usr/local/lib/php.ini # exit $ セキュリティ を高めるため、HTTPでアクセスされた時の応答メッセージ (httpd名とバージョン)を変える。 もしも自分が使っているバージョンにセキュリティホールが見つかってしまっ た場合、クラッカーはその情報を元に攻撃を仕掛けてくる可能性があるので、 ソースを少々書き換えて、表示させるhttpd名とバージョンを架空のHTTPDにして しまう。 面倒だが、Apacheをもう一度コンパイルし直し、再インストールする。 (PHPのインストール後にこれをしないとPHPのconfigureが途中で「Apacheの2.0以降 でやってくれぃ」というメッセージを残して止まってしまう) Apacheの作業ディレクトリのincludeディレクトリに移動する $ cd /opt/src/apache-2.0.48/httpd-2.0.48/include/ ap_release.hファイルをviで開く $ vi ap_release.h 最下項目(74行目以降)を以下のように書き換えて保存する (" " の中は適当に) /* ### 変更前 ### */ #define AP_SERVER_BASEVENDOR "Apache Software Foundation" #define AP_SERVER_BASEPRODUCT "Apache" #define AP_SERVER_MAJORVERSION "2" #define AP_SERVER_MINORVERSION "0" #define AP_SERVER_PATCHLEVEL "48" #define AP_SERVER_MINORREVISION AP_SERVER_MAJORVERSION "." AP_SERVER_MINORVERSION #define AP_SERVER_BASEREVISION AP_SERVER_MINORREVISION "." AP_SERVER_PATCHLEVEL #define AP_SERVER_BASEVERSION AP_SERVER_BASEPRODUCT "/" AP_SERVER_BASEREVISION #define AP_SERVER_VERSION AP_SERVER_BASEVERSION /* ### 変更後例 ### */ #define AP_SERVER_BASEVENDOR "MicroGates IOS" #define AP_SERVER_BASEPRODUCT "Netskirt-Entersurprise" #define AP_SERVER_MAJORVERSION "3" #define AP_SERVER_MINORVERSION "1" #define AP_SERVER_PATCHLEVEL "59" #define AP_SERVER_MINORREVISION AP_SERVER_MAJORVERSION "." AP_SERVER_MINORVERSION #define AP_SERVER_BASEREVISION AP_SERVER_MINORREVISION "." AP_SERVER_PATCHLEVEL #define AP_SERVER_BASEVERSION AP_SERVER_BASEPRODUCT "/" AP_SERVER_BASEREVISION #define AP_SERVER_VERSION AP_SERVER_BASEVERSION ※前回のconfigureでモジュールを含めた場合は、httpd.confに  「ServerTokens ProductOnly」 を記述することを忘れずに ひとつ上のディレクトリに戻る $ cd ../ 前回のコンパイルを無効にす $ make clean もう一度コンパイルする (やっぱり時間がかかる) $ make SuperUserになって再インストールする $ su password: # # make install # exit $ 証明書発行 Key を生成する時は、ランダムな情報を入力する必要があるが、例えば以下のようにすることで作成 することも可能 # cd /usr/local/ssl/bin # ./openssl md5 * > rand.dat Private Key を作成する # ./openssl genrsa -rand ./rand.dat -des 1024 > /usr/local/ssl/private/key.pem =========================================================== 95 semi-random bytes loaded Generating RSA private key, 1024 bit long modulus .................++++++ ....................++++++ e is 65537 (0x10001) Enter PEM pass phrase: ********** Verifying password - Enter PEM pass phrase: ********** =========================================================== Private Key からパスフレーズを外す # ./openssl rsa -in /usr/local/ssl/private/key.pem -out /usr/local/ssl/private/key2.pem read RSA key Enter PEM pass phrase: ********** writing RSA key 今回は認証局に依頼せず、自分で署名した証明を作成するので、下記のようになる # ./openssl req -new -x509 -key /usr/local/ssl/private/key2.pem -out /usr/local/ssl/certs/cert.pem =========================================================== You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:JP State or Province Name (full name) [Some-State]:Tokyo Locality Name (eg, city) []:Toshima-ku Organization Name (eg, company) [Internet Widgits Pty Ltd]:domain1 Organizational Unit Name (eg, section) []:tech Common Name (eg, YOUR name) []:www.domain1.com Email Address []:you@domain1.com =========================================================== httpd.confを修正する httpd.confの便利な日本語訳が、大阪のエンジニアスクールの"IT Boost社" に掲載されてます。トップページから、各種ソフトウェアのインストール・設定" →"Apache 2 httpd.conf 日本語訳"を辿ってみてください 念のためデフォルトのhttpd.confのバックアップを取っておく # cp /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.default viでhttpd.confを開く # vi /usr/local/apache2/conf/httpd.conf 見本 (Apache-2.0.48 httpd.conf) を参考に編集する。 =========================================================== ssl.confを修正する 念のためデフォルトのssl.confのバックアップを取っておく # cp /usr/local/apache2/conf/ssl.conf /usr/local/apache2/conf/ssl.conf.default viでssl.confを開く # vi /usr/local/apache2/conf/ssl.conf 見本 (Apache-2.0.48 ssl.conf) を参考に編集する。 =========================================================== httpd の起動 ログ用ディレクトリを作成しておく # mkdir /var/log/httpd デフォルトのログファイルを作成したディレクトリにコピーしておく # cp /usr/local/apache2/logs/* /var/log/httpd/ apacheの起動スクリプトを/etc/init.d/にコピーする # cp /usr/local/apache2/bin/apachectl /etc/init.d/httpd コピーした起動スクリプトを編集する # vi /etc/init.d/httpd 起動時にSSLも読み込むようにstartの部分を以下のように書き換えて保存する start) if [ $RUNNING -eq 1 ]; then echo "$0 $ARG: httpd (pid $PID) already running" continue fi if $HTTPD -DSSL; then echo "$0 $ARG: httpd started" else echo "$0 $ARG: httpd could not be started" ERROR=3 fi ;; ディレクトリを移動する # cd /etc/rc2.d/ 起動スクリプトのシンボリックリンクを張る # ln -s ../init.d/httpd ./S78httpd 起動させる # /etc/rc2.d/S78httpd start # exit