[apache2] webサーバのインストール

webを公開するためにwebサーバをインストールします。webサーバには、プロバイダなどでもよく使われているApacheを使用します。

Apacheには2種類のバージョンがありますが、今回はver2系のほう(httpd2)を使用します。
もちろん、ver1系のほうでも同様に動作させることが可能です。
ではでは早速、ソースをダウンロードし、コンパイル、インストールまで行います。
途中、注意するところがありますので気をつけて下さい。

> fetch http://www.apache.jp/dist/httpd/httpd-2.0.47.tar.gz
Receiving httpd-2.0.47.tar.gz (6217401 bytes): 100% (ETA 00:00)

> tar xzf httpd-2.0.47.tar.gz
(ソースを展開します。カレントにhttpd-2.0.47フォルダができます)

> cd httpd-2.0.47
> su (rootになりましょう)
# ./configure –enable-so –enable-ssl ※1
checking for chosen layout… Apache
checking for working mkdir -p… yes
checking build system type… i386-unknown-freebsd5.1
……(省略)

# make (コンパイルします。気長に待ちましょう。)
# make install ※2

ここで気をつけるのは2点です。

※1
–enable-so (soモジュールを有効にする)
これは、後述するPHPを使用できるするために必要なので、つけました。
–enable-ssl (sslを利用可能にする)
SSLページ (https://〜で始まる暗号化されたページ)を利用可能にするために、必要です。
通常であれば必要ないですが、セキュアなページには必要でしょう。(^^;
※2
今回、デフォルトのままインストールしましたので、インストールされる場所は、
/usr/local/apache2 以下にインストールされます。
インストールする場所を変えるには、※1の時に
./configure –prefix=/usr/local/httpd2 …
のように記述すれば変更可能です。

インストールが完了したら、早速設定ファイルを編集しましょう。

[ /usr/local/apache2/conf/httpd.conf ]


(216行あたり・使用ポートの設定と、IPV6を使わなければ#を)
Listen 80
#Listen [::]:80

(275行あたり・管理者のメールアドレスを書く)
ServerAdmin info@kenti.jp

(289行あたり・webサーバの名前を指定)

ServerName www.kenti.jp:80

(305行あたり・ドキュメントルートの指定)
DocumentRoot “/home/www/html”

(315行あたり・オプションの設定)
<Directory>
Options FollowSymLinks Includes ExecCGI
AllowOverride None
</Directory>

(330〜360行あたり・ドキュメントルートのオプションなど)
<Directory “/home/www/html”>
Options Includes ExecCGI FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>

(365〜385行あたり・ユーザディレクトリの設定)
UserDir public_html
AliasMatch ^/usrers/([^/]+)(.*) /home/$1/public_html/$2
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options ExecCGI MultiViews SymLinksIfOwnerMatch
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS PROPFIND>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>

(393行あたり・インデックスファイル名の指定)
DirectoryIndex index.php index.html index.htm index.shtml index.cgi

(794行あたり・デフォルトの文字コード)
AddDefaultCharset shift_jis

(857行あたり・.cgiや.phpファイルをCGIとして扱う設定云々)
AddHandler cgi-script .cgi
AddHandler cgi-script .pl
AddType application/x-httpd-php .php

(.shtmlファイルでSSIを利用できるように指定する設定)
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

上記の設定では、SSI・CGIを使えるようにする他、後述するPHPを実行できるように設定しています。

(ちょっと手抜きですね…。ここは後ほど、もう少し詳しくツッコミを書きたいと思います。)

設定ファイルを書いたら、上記設定ファイルにおかしいところがないかどうか、チェックをします。

# /usr/local/apache2/bin/apachectl
configtest

Syntax OK

Syntax OKと出てくれば、設定ファイルに間違いはなさそうです。

あとは起動するべし…。

# /usr/local/apache2/bin/apachectl
start

今回、ドキュメントルートには /home/www/html と設定をしたので、その中に適当なhtmlファイル云々を入れてみて表示されるかどうか確認してみましょう。うまくいけば、http://www.kenti.jp
のように表示できるはずです。(^_^)v

[php4]phpのインストール

webでPHPのスクリプトを扱えるようにするため、インストールをしてみましょう。

今回の場合、前回のApacheをインストールする際に、soモジュールというものを利用できるようにしていたので、インストール後に少しだけhttpd.confの設定を変更するだけで、簡単に使用することができます。

[ ソースのダウンロード・展開 ]# fetch http://www.php.net/get/php-4.3.3.tar.gz/from/jp.php.net/mirror
# mv mirror php-4.3.3.tar.gz (mirrorという名前でダウンロードしてしまうので名前変更)
# tar xzf php-4.3.3.tar.gz (カレントディレクトリに展開)
# cd php-4.3.3

[ 環境チェック・コンパイル前準備]# ./configure ¥
? –with-apxs2=/usr/local/apache2/bin/apxs ¥
? –with-xml –enable-mbstr-enc-trans –enable-mbstring ¥
? –with-mysql=/usr/local/mysql –with-tsrm-pth
creating cache ./config.cache
checking host system type… i386-unknown-freebsd5.1
checking for gcc… gcc
checking whether the C compiler (gcc ) works… yes
…………(環境チェックなどが始まります)

[コンパイルして、インストールする]# make ; make install
gcc -Iext/ctype/ -I/Users/kenti714/Desktop/php-4.3.3/ext/ctype/
-DPHP_ATOM_INC
…(コンパイル後、インストールされます)

コンパイル前に、Apache2を使用する、xmlを使用する、mbstring(日本語などの2bytes文字)を使用する、などの設定をしています。今回は必要な物だけをつけましたが、他に欲しい物は ./configure –help と入力すれば一覧を表示することが出来ます。
インストールが終わった後、httpd.confに以下のsoモジュール記述があるかどうか確認します。

[ /usr/local/apache2/conf/httpd.conf ]( 230行あたり )
LoadModule php4_module modules/libphp4.so

あとは、Apacheを再起動させて、web領域に以下のテストファイルを作成し、表示できるか確認してみましょう。

[ test.php ]<? phpinfo(); ?>

たったこれだけの記述ですが、うまく表示させることが出来ればにぎやかな表示が出ると思います。これで、Perlの他にもPHPを使ったCGIが使用できるようになります。

[apache2+SSL] SSLの構築・設定

SSLサイトを構築するために、当サイト用の公開鍵・秘密鍵・認証局提出用の認証鍵の作成をしてみます。

本当は…ベリサインとか、その手の認証局に提出して認証鍵に承認してもらうものですが、実験として自分で認証をすることにします。暗号化目的だけであれば、これはこれでいいのかもしれません(^^;

[ 秘密鍵の作成 ]

> openssl genrsa -des3 -rand /var/log/messages -out www.kenti.jp.pem
1024

23168 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:
(同じものをもういちど)

こうして、www.kenti.jp.pem という秘密鍵ファイルが出来ます。間違ってもweb領域に置かないように…。

それと、パスフレーズを忘れないようにしましょう。忘れると、以下の公開鍵などができませんです。。。

[ 認証局への認証鍵作成 ]

> openssl req -new -key www.kenti.jp.pem -out www.kenti.jp.csr

Using configuration from /etc/ssl/openssl.cnf

Enter PEM pass phrase: (秘密鍵を作成したパスフレーズを入力)

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]:Fukushima

Locality Name (eg, city) []:Koriyama

Organization Name (eg, company) [Internet
Widgits Pty Ltd]:
kenti

Organizational Unit Name (eg, section)
[]:

Common Name (eg, YOUR name) []:www.kenti.jp

Email Address []:info@kenti.jp

Please enter the following ‘extra’ attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

ここで、www.kenti.jp.csr というファイルができあがります。本来はこのファイルを認証局へ送って、費用を払えばいいらしいです。(^^ゞ

でも今回は、自分で認証してしまいます。

[ 自分が認証局のつもりで認証をし、公開鍵の作成 ]

> openssl x509 -req -days 365 -in www.kenti.jp.csr -signkey
www.kenti.jp.pem -out www.kenti.jp.crt

Signature ok

subject=/C=JP/ST=Fukushima/L=Koriyama/O=kenti/CN=www.kenti.jp/Email=info@kenti.jp

Getting Private key

Enter PEM pass phrase: (秘密鍵のパスフレーズを入力)

これで、自分が認証・署名した公開鍵、www.kenti.jp.crt ができあがります。

ここまでできあがれば大丈夫でしょう。

あとは、秘密鍵の中に、パスフレーズを埋め込んでおくと、SSLページを表示させるときにパスフレーズを入力する必要がなくなりますので、やっておくといいのかな…。

(我が家はこの方法じゃないと、SSLページをうまく表示してくれませんでした。)

[ 秘密鍵にパスフレーズを埋め込む ]

> mv www.kenti.jp.pem www.kenti.jp.pem.buckup (念のためバックアップ)

> openssl rsa -in www.kenti.jp.pem.buckup -out www.kenti.jp.pem

read RSA key

Enter PEM pass phrase: (秘密鍵のパスフレーズを入力)

writing RSA key

こうして、www.kenti.jp.pem という秘密鍵ファイルに、パスフレーズが埋め込まれました。

次に、ApacheのSSL設定を行います。設定は、ssl.confに書きます。

基本的には、デフォルトの設定のままで大丈夫ですが、当サイトの設定は以下の通りです。

(webからのパスワード変更、メールの転送設定のページなどに使っています。)

[ /usr/local/apache2/conf/ssl.conf
] ※白地部分が書き換えた場所です

<IfDefine SSL>

Listen 443

AddType application/x-x509-ca-cert .crt

AddType application/x-pkcs7-crl .crl

SSLSessionCache dbm:logs/ssl_scache

SSLSessionCacheTimeout 300

SSLMutex file:logs/ssl_mutex

SSLRandomSeed startup builtin

SSLRandomSeed connect builtin

<VirtualHost 61.206.126.90:443>

ServerName www.kenti.jp:443

ServerAdmin info@kenti.jp

DocumentRoot “/home/www/sslpage_html”

ScriptAlias /cgi-bin/ /home/www/sslpage_html/cgi-bin/

SSLEngine on

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

(公開鍵の場所を指定します)

SSLCertificateFile /usr/local/www/www.kenti.jp.crt

(秘密鍵の場所を指定します)

SSLCertificateKeyFile /usr/local/www/www.kenti.jp.pem

SetEnvIf User-Agent “.*MSIE.*”
¥

nokeepalive ssl-unclean-shutdown ¥

downgrade-1.0 force-response-1.0

</VirtualHost>

</IfDefine> 

我が家はIPベースで動かす方法をとったので、通常のwebページにもVirtualの設定を行いました。

こうすることで、普通のwebページと、SSLページを同居させることが出来ます。

[ /usr/local/apache2/conf/httpd.conf
] ※一番最後に追加

NameVirtualHost 61.206.126.90:80

<VirtualHost 61.206.126.90:80>

ServerName www.kenti.jp

DocumentRoot /home/www/html

</VirtualHost>

あとは、ApacheをSSL機能付きで、以下のように起動させます。

気をつけることは、通常の起動方法とは少しだけ変わります。

# /usr/local/apache2/bin/apachectl
stop (既に動作していたら、止めます)

# /usr/local/apache2/bin/apachectl sslstart (SSL機能付きでスタート)

普通に、start ではないことに注意して下さい。

無事起動したか、アクセスして確認してみて下さい。

[ 通常のwebページ ] http://www.kenti.jp

[ SSLのページ ] https://www.kenti.jp/

(自己認証のため、警告が出ますがそのまま進むとSSLページに行きます)

サーバを入れ替える。

自宅にあるこのwebサーバ(道楽サーバ?)ですが、Celeron300MHz/128MBで動いているマシンから、Pentium3 450MHz/320MBに入れ替えてみました。

HDDはそのまま引っこ抜いてなんとか動くだろう…ぐらいの甘い考えだったのですが、以下のような問題にぶち当たりました。

[/boot/loader.conf] hw.ata.ata_dma=”0″ ;HDDのDMA転送を無効にする。

…よくやるのです。。。これ。(上記を一時的に指示するには、起動する前に set hw.ata.ata_dma=0 をして boot でも可能です。)
ちなみに、FreeBSD4系の時は、起動時にHDDのDMA転送がうまくいかないとき、3回ほどDMA転送ができるか試した後に、PIO4とか切り変わるのですが、FreeBSD5系からは自分で明示的に指示しないとだめなようです。

なんだろうなぁ…。
あとは、ネットワークアダプタも若干変更があったため、インターフェースにあわせて書き換えます。

[/etc/rc.conf] #ifconfig_fxp0=”inet 192.168.1.1 netmask 255.255.255.0″ ifconfig_xl0=”inet 192.168.1.1 netmask 255.255.255.0″

Linuxと違って、1つのファイルにこうやって書けるのはありがたいなぁ、と思う今日この頃です。

で、今回なんでサーバを入れ替えたかといいますと、『MovableTypeでエントリーを投稿したとき、再構築がもうちょっと早くならないん?』というのがきっかけでして、ここに至る次第でございます。

しかし、入れ替えましたものの…気持ちホンワカ少しだけ早く…なったような気がします。。。

RTA55i VPNの注意事項

過去のメモです。

[拠点1]
LAN(Private) 192.168.10.0/24
LAN(global) 111.222.120.128/29 (129-134)
NATに使うアドレス 111.222.120.137

[拠点2]
LAN(Private) 192.168.12.0/24
LAN(global) 111.222.51.136/29 (137-142)
NATに使うアドレス 111.222.51.142

1側 
  LAN1          +---------+     LAN2(111.222.120.129) 
----------------|  RTA55i |-------------- 
192.168.10.0/24 +---------+ 111.222.120.128/29 
                                      | 
                                      | 
                                      |(ここをPPTPで接続) 
                                      | 
2側 
  LAN1          +---------+     LAN2(111.222.51.137) 
----------------|  RTA55i |-------------- 
192.168.12.0/24 +---------+ 111.222.51.136/29

※注意事項
まず、お互いのフィルタを必ず通すこと。
拠点1がサーバなら、拠点2の 111.222.51.136/29 をpassにする。
なぜなら、PPTP(VPN)クライアントはNATで使用するアドレスから接続しようとするから!
ip lan1 secondary のアドレスではない!!!

あとはwebからのかんたん設定で大丈夫。
なお、かんたん設定にて設定されると、configは以下のようになる。

(拠点1側)
ip lan1 address 192.168.10.1/24
ip lan1 secondary address 111.222.120.129/29
ip lan1 routing protocol none
ip lan1 rip listen none
ip lan1 secure filter in 100000 100001 100002 100003 100004 100005 100006 100007 100099
ip lan2 routing protocol none
ip lan2 rip listen none
ip route 192.168.12.0/24 gateway tunnel 1 metric 1
ip route default gateway pp 1 metric 1
nat descriptor type 1000 masquerade
nat descriptor address outer 1000 111.222.120.134
nat descriptor address inner 1000 192.168.10.1-192.168.10.254
nat descriptor masquerade static 1000 1 192.168.10.1 tcp 1723
nat descriptor masquerade static 1000 2 192.168.10.1 gre *

(拠点2側)
ip lan1 address 192.168.12.1/24
ip lan1 secondary address 111.222.51.137/29
ip lan1 routing protocol none
ip lan1 rip listen none
ip lan1 secure filter in 100000 100001 100002 100003 100004 100005 100006 100007 100099
ip lan2 routing protocol none
ip lan2 rip listen none
ip route default gateway pp 1 metric 1
ip route 192.168.10.0/24 gateway tunnel 1
nat descriptor type 1000 masquerade
nat descriptor address outer 1000 111.222.51.142
nat descriptor address inner 1000 192.168.12.1-192.168.12.254
nat descriptor masquerade static 1000 1 192.168.12.1 tcp 1723
nat descriptor masquerade static 1000 2 192.168.12.1 gre *