ルータの設定

さぁ,いよいよ外部に公開!そこで最後の仕上げとして,ルータの設定をします.必要な設定は静的NATです.これは,インターネット側から配信され
たIPフレームを,プロトコルやポート番号に応じて内部LANの特定のIPアドレスへ転送する機能です.今回はサーバのアドレスを
192.168.0.100として,設定をしてみます.

  • ftp-data 20/tcp -> 192.168.0.100
  • ftp 21/tcp -> 192.168.0.100
  • ssh 22/tcp -> 192.168.0.100
  • smtp 25/tcp -> 192.168.0.100
  • dns 53/tdp -> 192.168.0.100
  • dns 53/udp -> 192.168.0.100
  • http 80/tcp -> 192.168.0.100
  • pop3 110/tcp -> 192.168.0.100
  • imap4 143/tcp -> 192.168.0.100
  • https 443/tcp -> 192.168.0.100

試しに,ポートスキャンをかけてみます.http://210.143.99.143/~p-sec/pscan.htmlからかけてみて,余計なポートは開いていませんか?確認してみてください.

SSH

リモートでサーバを管理するために,従来はtelnetを使っていました.しかし,telnetは通信内容が暗号化されないため,パスワードなどが
容易に盗聴できました.そこで,SSH(Secure
SHell)を採用するところが多くなってきています.パケットをすべてRSAまたはDSAという方法で暗号化して送るため,盗聴しにくくなっています.
また,SSHにはポートフォワードという便利な機能もあるため,利用しない手はありません.

RSA方式を採用するものがSSH1,DSA方式を採用するものがSSH2となります.暗号強度的にはDSA方式のほうが有利です.両方に対応しているものがOpenSSHです./etc/ssh/sshd_configが設定ファイルになります.

#       $OpenBSD: sshd_config,v 1.38 2001/04/15 21:41:29 deraadt Exp $

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

# This is the sshd server system-wide configuration file.  See sshd(8)
# for more information.

Port 22
Protocol 2,1
#ListenAddress 0.0.0.0
#ListenAddress ::
HostKey /etc/ssh/ssh_host_key
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
ServerKeyBits 768
#ポートフォワードなどでつなぎっぱなしにしたいときは0
LoginGraceTime 0
KeyRegenerationInterval 3600
#root(管理者)でのログインを拒否
PermitRootLogin no
#
# Don't read ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
StrictModes yes
X11Forwarding yes
X11DisplayOffset 10
PrintMotd yes
#AllowUsers tamori
#PrintLastLog no
KeepAlive yes

# Logging
SyslogFacility AUTH
LogLevel INFO
#obsoletes QuietMode and FascistLogging

#RhostsAuthentication no
#
# For this to work you will also need host keys in /usr/local/etc/ssh_known_host
s
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
#
RSAAuthentication yes
#平文パスワードの拒否
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
PermitEmptyPasswords no

# Uncomment to disable s/key passwords
#ChallengeResponseAuthentication no

# Uncomment to enable PAM keyboard-interactive authentication
# Warning: enabling this may bypass the setting of 'PasswordAuthentication'
#PAMAuthenticationViaKbdInt yes

# To change Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#AFSTokenPassing no
#KerberosTicketCleanup no

# Kerberos TGT Passing does only work with the AFS kaserver
#KerberosTgtPassing yes

#CheckMail yes
#UseLogin no
#MaxStartups 10:30:60
#Banner /etc/issue.net
#ReverseMappingCheck yes

平文パスワードの拒否はnoにしておいたほうがいいでしょう.クライアントには秘密鍵,サーバ側には自分のホームディレクトリに.sshというディレクトリを作り,中に公開鍵を置きます.

NTPサーバ ntpd

このNTPサーバも、プロキシサーバ同様、ローカルネットワークでしか使用していませんが、LAN内の時刻の同期というのは大事だと思います。たと
えば(ハードウェア的に)複数のサーバを動かしていた場合には同期を取っておかないとログの比較などの作業に意味がなくなってきてしまいます。

emergeでntpdをインストール後、/etc/ntp.confに以下の2行を書きます。

server [外部のntpサーバ]
driftfile       /var/lib/ntp/ntp.drift

上記設定は、外部との接続がない場合の簡易的な設定です。公開する場合は(するべきでないが)接続相手の制限などを記述する必要があります。

デーモンを起動する前に、サーバ内の時刻をある程度あわせます。大幅にずれている場合、ntpdを動かしても同期してくれません。以下は、ntpdateを利用した時刻の合わせ方です。

# ntpdate [外部のntpサーバ]

その後、ntpdを起動します。

# /etc/init.d/ntpd start
# rc-update add ntpd default

LANにあるパソコンに桜時計などを入れ、時刻同期を試してみてください。

プロキシサーバ squid

基本的にはインストールすればすぐに動きますが、メモ程度に。以下の記述をすればプロキシとしての機密性が高くなります。記述を追加する前とあとで診断くんで確かめてみてください。

header_access X-Forwarded-For deny all
header_access Via deny all
header_access Cache-Control deny all

ただし、外部に公開する場合は設定をきちんと行うべきです。私は自宅内でしか利用していませんが・・・。

Postfix&Qpopper

ここの記述は第2世代RedHat Linuxでの設定方法です。

一番重要なのがメールでしょう.ここはしっかり設定しないと,スパムメールの発信元などになりかねないので,気をつけます.

tamochan.comは"POP before SMTP"というものを採用しています.SMTPには本来,
認証手続きがないために,外部からのメールのリレーを許可すると,スパムメールのようなメールの不正中継に使われてしまう恐れがあります.だからといって
メールのリレーを許可しないと外部からSMTPが使えなくなるので,たとえば自宅にメールサーバがあって,外出先から自宅のアカウントでメールを出した
い,なんてときには不便です.そこで,外部のマシンがPOP接続をした場合,その後数分間は同じマシンからの
SMTPリレーを許可することで,あたかもSMTPにユーザ認証機能が付いているかのようにするのが"POP before SMTP"です.(一部,PostfixとAPOP,POP before SMTPより引用)

今回はは,SMTPを提供するものにPostfix,POP3を提供するものにQpopper,POP before SMTPを提供するものにはDRACをそれぞれ利用します.

まずはDRACのインストール.http://mail.cc.umanitoba.ca/drac/よりDRACをダウンロードし,解凍します.

% tar xzvf drac.tar.Z

次にDRACのMakefileを編集します.

INSTALL = install
EBIN = /usr/sbin
DEFS = -DSOCK_RPC -DFCNTL_LOCK -DGETHOST -DDASH_C -DREQ_HASH
CFLAGS = $(DEFS) -g
LDLIBS = -ldb
TSTLIBS = -L. -ldrac
RPCGENFLAGS = -C -I
MANADM = 8

rpc.dracd.c を編集します.

#define DBFILE "/etc/postfix/dracd.db"
#define ALFILE "/etc/postfix/dracd.allow"

dracd-setup.linux を編集します.ここでは,POP認証の有効期限を60分に設定しています.

"daemon rpc.dracd&"の行を"daemon rpc.dracd -e 5&"に変更.

コンパイルとインストールを行います.

% make
% make install
% make install-man
% cp dracd-setup.linux /etc/rc.d/init.d/dracd
% ln -s /etc/rc.d/init.d/dracd /etc/rc.d/rc3.d/S78dracd
% ln -s /etc/rc.d/init.d/dracd /etc/rc.d/rc5.d/S78dracd
% ln -s /etc/rc.d/init.d/dracd /etc/rc.d/rc6.d/K22dracd

DRACの最後の仕上げは,Qpopperのインストール時に必要なライブラリを自分でインストールします.

% cp libdrac.a /usr/lib/

つぎは,Qpopperのインストールです.まず,ソースのRPMを探してきて,インストールします.

% rpm -ivh qpopper-4.0.3-0vl1.src.rpm

QpopperをDRAC対応にするため,specファイルを編集します.

% cd /usr/src/redhat/SPECS
% vi qpopper.spec

(%buildセクションに追加)
  --prefix=/usr \
  --enable-bulletins=/var/spool/mail/bulletins \
  --enable-specialauth \
  --with-pam=qpopper \
  --with-popuid=pop \
  --enable-apop=/etc/pop.auth \
  --enable-drac    (←これを追加)

(%preセクションのuseraddにオプションを追加)
/usr/sbin/useradd -M -g pop pop -c "Pop Account" -d /dev/null -s /dev/null

rpmを作成します.

% rpm -bb qpopper.spec

Qpopperの仕上げとして,作ったQpopperをアップデートします.

% cd /usr/src/redhat/RPMS/i386
% rpm -Uvh qpopper-4.0.3-0vl1drac.i386.rpm

いよいよPostfixのインストールです.RPMでインストールすると,設定ファイルは/etc/postfix/main.cfです.それでは見ていきましょう!主なものを抜粋です.

#キューをためるディレクトリ
queue_directory = /var/spool/postfix

#メールオーナー
mail_owner = mail

#ホストネーム
myhostname = mail.tamochan.com

#ドメイン
mydomain = tamochan.com

# myorigin パラメータにはローカルで送信されたメールがどのドメインから
# 来るように見えるかを指定
myorigin = $mydomain

#このマシンが自分自身が最終目的地だとみなすドメインのリストを指定
mydestination = $myhostname, localhost.$mydomain, $mydomain,
mail.$mydomain, www.$mydomain, ftp.$mydomain

#エイリアスのファイル
alias_maps = hash:/etc/aliases

#/sbin/newaliacesを実行したとき,どんなデータベースを作るか
alias_database = hash:/etc/aliases

#メールをためるディレクトリ
mail_spool_directory = /var/spool/mail

#このメールシステムがどのクライアントから
#リレーを受けるか、またはどの目的地にメールをリレーするかを制限
relay_domains = $mydestination

#SMTPを受け付けるアドレス
mynetworks = 192.168.0.0/16, 127.0.0.0/8, 211.133.147.90/32

#POP before SMTPを動かす設定
smtpd_recipient_restrictions =
permit_mynetworks,
check_client_access btree:/etc/mail/dracd,
check_relay_domains

#わかんないドメインからのメールは拒否
smtpd_sender_restrictions = reject_unknown_sender_domain

#送信を許可する最大のファイルサイズ
message_size_limit = 1024000

#メールの寿命
maximal_queue_lifetime = 12h

POP before SMTPを動かす設定を忘れないようにします.また,送信を許可する最大のファイルサイズも設定しておいたほうが,メール爆弾などが送られなくてすみます.

一番トラフィックが多いのはメールになってくると思います.きちんと設定しなければ損害賠償!なってこともあるかもしれないので,慎重に設定をしてください.なお,第三者中継のチェックはhttp://www.nanet.co.jp/rlytest/relaytest.htmlでやってくれますので,公開する前に試してみてください.

IMAP/POP3サーバ Courier-Imap

今回はCourier-Imapを使ってみました。前のサーバがmbox方式(1ユーザ1ファイルでメールを扱う)だったので、maildir方式(1メール1ファイルでメールを扱う)に変換しました。変換方式はhttp://asshole.dip.jp/mb2md.phpを参考にしました。

emergeでインストールしたあと、ユーザのディレクトリにメールを扱うディレクトリを作成します。Postfixのmain.cfにかかれている home_mailbox = .maildir/ で指定されているユーザのディレクトリに移動して、

# maildirmake .maildir

を実行します。.maildirが作成されます。今後ユーザのディレクトリが作成されるたびに実行するのが面倒な場合は/etc/skel/(ユーザのディレクトリの雛型)に移動して上記コマンドを実行しておくと便利です。

設定は/etc/courier-imap 下にありますが、ほとんど触らなくても大丈夫です。下記の部分くらいでしょうか。imapd、pop3dファイル内で、

#Hardwire a value for ${MAILDIR}
MAILDIR=.maildir
MAILDIRPATH=.maildir

のように、自分の環境とMAILDIRがあっているか確認してください.

スパムメール対策 Spamassassin

あまり望ましくないことですが、運営していると外部にメールアドレスが漏れたりしてスパムメールが頻発してくるようになることがあります。そういうときの強い見方がSpamAssassinです。これをMTAに組み合わせて使うことにより、強力なスパムフィルタにより自動的にスパムメールと思われるメールを廃棄してくれます。今回はデーモン(spamd)を起動しておいて、一回ずつ呼び出して処理するという手法を紹介します。

次に、デーモンとして動かすための準備をします。以下のスクリプトを用意します。(すでに/etc/init.d/spamdとして入っていると思いますが、念のため紹介します。)

#!/bin/sh
#
# spamassassin This script starts and stops the spamd daemon
#
# chkconfig: 2345 80 30
#
# description: spamd is a daemon process which uses SpamAssassin to check
#              email messages for SPAM.  It is normally called by spamc
#        from a MDA.

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

# Source spamd configuration.
if [ -f /etc/sysconfig/spamassassin ] ; then
        . /etc/sysconfig/spamassassin
else
        SPAMDOPTIONS="-d -c -a -m5 -H"
fi

[ -f /usr/bin/spamd -o -f /usr/local/bin/spamd ] || exit 0
PATH=$PATH:/usr/bin:/usr/local/bin

# See how we were called.
case "$1" in
  start)
# Start daemon.
echo -n "Starting spamd: "
daemon spamd $SPAMDOPTIONS
RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch /var/lock/subsys/spamassassin
        ;;
  stop)
        # Stop daemons.
        echo -n "Shutting down spamd: "
        killproc spamd
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/spamassassin
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  condrestart)
       [ -e /var/lock/subsys/spamassassin ] && $0 restart
       ;;
  status)
status spamd
;;
  *)
echo "Usage: $0 {start|stop|restart|status|condrestart}"
exit 1
esac

exit 0

(このスクリプトをspamdとして保存し実行権限を与え、)デーモンとして起動するようにします。

# chmod +x spamd
# rc-update add spamd default

TLECより、設定ファイルをダウンロードし利用します。これを/etc/mail/spamassassin/local.cfとして保存します。

次に、Postfixのフィルタとしてのスクリプトを用意します。要するに、メールを受け取ったり発信したりする都度にこのスクリプトを実行するようにさせるわけです。様々なHPを参考に、私は以下のようなスクリプトを作成しました。

#!/bin/bash
#SpamAssasin filter with Postfix

#FILE PATH
RM=/bin/rm
INSPECT_DIR=/var/spool/filter
OUTPUTFILE=out.$$

SENDMAIL=/usr/sbin/sendmail
KILLFILE=/var/log/spammail
SPAMASSASSIN=/usr/bin/spamc
#Exit codes from <sysexits.>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69

#Move to Work Dir
cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist : exit $EX_TEMPFAIL; }

#Clean up when done or when aborting
trap "$RM -f $OUTPUTFILE" 0 1 2 3 15
cat | $SPAMASSASSIN -x > $OUTPUTFILE

#メールのヘッダにspamdによってつけられる"X-Spam-Status: Yes"
#があるなら、KILLFILEに捨てる。
spamflag=`less $OUTPUTFILE | grep -c 'X-Spam-Status: Yes'`
if [ $spamflag = 1 ]; then
cat $OUTPUTFILE >> $KILLFILE
#それ以外なら処理。
else
$SENDMAIL "$@" < $OUTPUTFILE
fi
exit $?

さらに、Postfixのmain.cfに、フィルタの定義を追加します。改行がありますが、実際は一行です。

filter unix - n n - - pipe user=filter argv=/usr/local/bin/sa_filter.sh -f \
        ${sender} -- ${recipient}

次にmain.cfのsmtpの部分を書き換えます。改行がありますが、実際は一行です。

smtp      inet  n       -       n       -       -       smtpd \
        -o content_filter=filter:

Postfixを再起動し、きちんと動作するか確認します。

なお、、spamassassinの学習にも書いたように、最初はspam、ham両方のメールを学習させてください。させないと、うまくベイジアンフィルタが働かないようです。

参考:http://www.sonorilo.net/spamassassin。ありがとうございました。

メールサーバ Postfix

メールサーバソフトウェアにはPostfixを使用しました。第3者中継対応には今回はSMTP AUTHを利用しました。まず、SMTP AUTHに対応したPostfixにするためにはコンパイル前にUSEフラグに saslを追加します。

emergeコマンドでPostfixをインストールしたら、/etc/postfix/main.cfの設定です。saslに関係する部分とスパ
ムメール対策が特に注目すべき点です。、ブラックリストに載っているホストやつじつまの合わないヘッダを持つメールをはじく設定などがされています。

#キューをためるディレクトリ
queue_directory = /var/spool/postfix

#メールオーナー
mail_owner = mail

#ホストネーム
myhostname = mail.tamochan.com

#ドメイン
mydomain = tamochan.com

# myorigin パラメータにはローカルで送信されたメールがどのドメインから
# 来るように見えるかを指定
myorigin = $mydomain

#このマシンが自分自身が最終目的地だとみなすドメインのリストを指定
mydestination = $myhostname, localhost.$mydomain, $mydomain,
mail.$mydomain, www.$mydomain, ftp.$mydomain

#エイリアスのファイル
alias_maps = hash:/etc/aliases

#/sbin/newaliacesを実行したとき,どんなデータベースを作るか
alias_database = hash:/etc/aliases

#メールをためるディレクトリ
mail_spool_directory = /var/spool/mail

#このメールシステムがどのクライアントから
#リレーを受けるか、またはどの目的地にメールをリレーするかを制限
relay_domains = $mydestination

#SMTPを受け付けるアドレス
mynetworks = 192.168.0.0/16, 127.0.0.0/8, 211.133.147.90/32

#ユーザの、メールを受ける場所。/home/***/.maildir/以下にメールが保存される。
home_mailbox = .maildir/

#わかんないドメインからのメールは拒否
smtpd_sender_restrictions = reject_unknown_sender_domain

#送信を許可する最大のファイルサイズ
message_size_limit = 1024000

#メールの寿命
maximal_queue_lifetime = 12h

#ここらへんからsmtp auth(sasl)の設定
smtpd_recipient_restrictions = permit_sasl_authenticated,
                               permit_mynetworks,
                               reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = no
allow_mail_to_commands = alias,forward,include

#スパムメール対策。reject_rbl_clientの後ろにかかれている
#データベースに登録されているホストからは受け付けなくなります。
smtpd_client_restrictions = permit_mynetworks,

        reject_invalid_hostname,
        reject_non_fqdn_sender,
       reject_non_fqdn_recipient,
        reject_unknown_sender_domain,
        reject_unknown_recipient_domain,

        reject_rbl_client bl.spamcop.net,
        reject_rbl_client blackholes.mail-abuse.org,
        reject_rbl_client dynablock.wirehub.net,
        reject_rbl_client korea.services.net,
        reject_rbl_client opm.blitzed.org,
        reject_rbl_client relays.ordb.org,
        reject_rbl_client relays.visi.com,
        reject_rbl_client sbl.spamhaus.org,
        reject_rbl_client sbl-xbl.spamhaus.org,

        permit

送信を許可する最大のファイルサイズも設定しておいたほうが,メール爆弾などが送られなくてすみます.マシン起動時にデーモンも起動する設定を行いましょう。

# rc-update add postfix default

次に、SASLでパスワード認証を行えるようにします。/etc/sasl2/smtpd.confを下記のように編集します。

pwcheck_method: pwcheck

pwcheckを起動し、デフォルトでサーバ起動時に自動で立ち上がるようにします。

# /etc/init.d/pwcheck start
# rc-update add pwcheck default

一番トラフィックが多いのはメールになってくると思います.きちんと設定しなければ損害賠償!なってこともあるかもしれないので,慎重に設定をしてください.なお,第三者中継のチェックはhttp://www.nanet.co.jp/rlytest/relaytest.htmlでやってくれますので,公開する前に試してみてください.

WebDAV

この設定手順はapache1.3用で、第2世代RedHatサーバで行ったものです。

WebDAVとは(簡単に言うと)HTTPでファイル転送を行う,FTPに変わるものと注目されるファイル共有プロトコルです.コネクションが単一
方向なので,どうもファイアウォールでFTPが邪魔される,ということも無くなるようです.また,サーバサイドでの処理,一本のコネクションでの処理とい
うメリットもあります.なお,ここで紹介する設定例はapache1.3用です.ご了承ください.

まず,apacheに必要なモジュールが入っているか確認します.mod_so.cが入っていれば利用可能です

% httpd -l
Compiled-in modules:
  http_core.c
  mod_so.c
SUExec: enabled; valid wrapper /usr/sbin/suexec

rpmを探してきてインストールしましょう.パッケージによってはすでに入っていることもあるようです.以下のコマンドで確認してみましょう.私はすでにインストール済みでした.入れた覚えはないのですが….

% rpm -qa | grep mod_dav

いよいよhttpd.confの設定です.

#以下の2行はあらかじめ書いてあるかもしれません
LoadModule dav_module modules/libdav.so
AddModule mod_dav.c

#ロックデータベースの設定.どこに設定してもいいが,ディレクトリに
#httpdプロセスのユーザ権限で書き込み可能でなくてはならない.
DAVLockDB /usr/local/apache/DAVLock

#Aliasの設定.設定した方がいいかも.
#エイリアス先はpublic_html以下はさけた方が無難.
Alias /dav "/home/httpd/davhome"

#指定のディレクトリに対してWebDAV可能にする.
<Location /dav>
DAV on
</Location>

httpdの再起動を忘れずに.ここまででとりあえず可能です.Windowsだと,「ネットワークプレイスの追加」により利用可能です.上の設定
例だとホスト名http://www.tamochan.com/davで設定します.XPだと,ドライブ名を割り当てることもできます.

しかし,ここまでだと誰でもファイルを閲覧可能です.ここで,.htaccessファイルにより認証設定を行います.以下に.htaccessの設定例を示します.

AuthUserFIle /usr/local/apache/pass.pwd #パスワードファイル名.後述.
AuthGroupFile /dev/null #認証用グループファイル
AuthName DAVhome #認証ダイアログ表示用文字列
AuthType Basic #認証タイプ
<LimitExcept GET OPTIONS>
Require user tamochan
</LimitExcept>

GET,OPTIONS以外の操作は認証が必要という設定でした.次にパスワードの設定です.以下のコマンドによりパスワードを入力してください.

% htpasswd -c /usr/local/apache/pass.pwd tamochan

さらに,.htaccessが動くようにhttpdの設定です.httpd.confに以下の設定を加えてください.

<Directory /home/httpd/davhome>
AllowOverride Limit AuthConfig
</Directory>

これで,(WinXPではなく)Win2000ではアクセスすると認証画面が表示されます.WinXPではなぜか認証画面が出ても認証されません.

さらに,このままだと日本語のファイル名を持つものを登録するとファイル名が文字化けしてしまいます.よって,mod_encodingというモジュールを導入します.これはWinXPの認証問題と日本語の問題を一気に解決してくれるものです.

まず,WebDAV Resourcesからソースアーカイブをダウンロードします.適当に展開します.

次にコンパイルですが,まず展開されたディレクトリの直下にlibディレクトリがあるので,そこの中からコンパイルです.

% cd lib
% ./configure
% make
% make install

これについては詳しいことはあまり述べないことにします.次に本体のコンパイルです.

% cd ..
(コメント)apxsというコマンドのパスとiconv_hookライブラリの
(コメント)パスの指定をしてください.
% ./configure --with-apxs=/usr/sbin/apxs --with-iconv-hook=/usr/local/lib
% make
% make install

さらに,httpd.confの設定です.

LoadFile /usr/local/lib/libiconv_hook.so
LoadModule encoding_module modules/mod_encoding.so

<IfModule mod_headers.c>
        Header add MS-Author-Via "DAV"
</IfModule>

<IfModule mod_encoding.c>
        EncodingEngine    on
        NormalizeUsername on
        SetServerEncoding     UTF-8
        DefaultClientEncoding JA-AUTO-SJIS-MS SJIS

        AddClientEncoding "cadaver/" EUC-JP
</IfModule>

httpdを再起動して確認してください.

Webサーバ apache

Apacheはいわずと知れたウェブサービスを提供するソフトウェアです.今では最新版として2.0が出ています.インストール後,デーモンを立ち
上げ,127.0.0.1にアクセスするとすぐに「It
worked!」などという画面がすぐに出てくれます.ただ,外部に公開するにはいくつか設定を変更しなくてはなりません.まず、
/etc/apache2/httpd.confの変更するべき一部を抜粋して紹介します.

# emerge apache2

でインストールして、設定です。emerge apacheとすると、apache1がインストールされるので注意してください。ここはお好みです。

#サーバの管理者のメールアドレス
ServerAdmin webmaster@tamochan.com
#サーバの名前
ServerName www.tamochan.com
#http://www.tamochan.comのルートディレクトリ.まずはじめに参照するディレクトリ.
DocumentRoot "/home/webmaster/public_html"    

#/home/*/public_htmlの設定.CGIやSSIが動くようにしてある.
<directory home/*/public_html>
    AllowOverride FileInfo AuthConfig Limit
    #CGIの実行を許可
    Options MultiViews Indexes SymLinksIfOwnerMatch ExecCGI
  #SSIの実行を許可
    Options +Includes
    <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>

#CGIのファイルを設定   
AddHandler cgi-script .cgi
#SSIのファイルを設定
AddType text/html .shtml
AddHandler server-parsed .shtml

#790行くらい。
DefaultLanguage ja

#815行くらい。AddLanguageがたくさん並んでるが、jaを一番上に。
AddLanguage ja .ja

#850行くらい。jaを先頭に。
LanguagePriority ja en ca cs da de el eo es et fr he hr it ko
ltz nl nn no pl pt pt-BR

#870行くらい。ISO-8859-1をコメントアウト。
#AddDefaultCharset ISO-8859-1
#Charsetはhtmlファイルを優先にする。
AddDefaultCharset Off

#一番最後。バーチャルホストの設定は/etc/apache2/vhosts.d/vhosts.confに書く。
#
# Gentoo VHosts
#
# For Gentoo we include External Virtual Hosts Files.
# Please see vhosts.d/00_default_vhost.conf for the default virtual host.
#
Include /etc/apache2/vhosts.d/vhosts.conf

次に、後述するバーチャルホストの設定を行います。/etc/apache2/vhosts.d/vhosts.confで、

#バーチャルホストの設定
#まずはNameVirtualHostにサーバのIPを設定
NameVirtualHost 192.168.0.22
#もし,http://tanpopo.tamochan.comでアクセスしてきた場合
#ドキュメントルートは/home/tanpopo/public_htmlに設定
<VirtualHost 192.168.0.22>
    ServerAdmin tanpopo@tamochan.com
    DocumentRoot /home/tanpopo/public_html
    ServerName tanpopo.tamochan.com
    #ログの出力先
    ErrorLog /var/log/httpd/error_log
    CustomLog /var/log/httpd/access_log common
</VirtualHost>

CGIやSSIの設定が少々面倒くさいといったところでしょうか.ユーザに好評なのがヴァーチャルホストの設定.ユーザのホームページがhttp:
//***.tamochan.comのような,チルダなしのアドレスで公開できます.ヴァーチャルホストの設定後は,違う名前でもアクセスできるよう
に,/var/named/domain(正引きファイル)に,たとえば次の一行を足しておきます.

tanpopo	IN	CNAME	dns.tamochan.com.

また、phpの設定を追加するときは、/etc/apache2/httpd.confで、

#phpモジュールを読む
LoadModule php4_module modules/libphp4.so
#.phpの動作を宣言
AddType application/x-httpd-php .php
#index.phpがデフォルトページになるように
DirectoryIndex index.html index.html.var index.php

SSLを使いたい場合は、まずapache2がSSL対応になっていることが前提です。/etc/make.confのUSEフラグにsslを追加してコンパイルしなおす必要があります。

今回は、サーバが自前で認証局になる方法を紹介します。/etc/apache2/sslなるディレクトリを作成し、そこにサーバの秘密鍵と証明書
要求(CSR)を作成します。/etc/apache2/sslに移動して、まずはserver.keyというサーバの秘密鍵を作ります。

# openssl genrsa -des3 -rand /var/log/messages -out server.key 1024
10441 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: (再度パスワード入力)

次にCSRの作成です。server.csrというファイルで作成します。

$ openssl req -new -key server.key -out server.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]:(日本ならと入力)
State or Province Name (full name) [Some-State]:(自分の住所などを入力)
Locality Name (eg, city) []: (入力)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:  (入力)
Organizational Unit Name (eg, section) []: (入力)
Common Name (eg, YOUR name) []: (入力)
Email Address []:  (入力)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:(ただEnterを押す)
An optional company name []:(ただEnterを押す)

次にapache2の設定です。/etc/apache2/modules.d/41_mod_ssl.default-vhost.conf で、

・・・・
<IfModule mod_ssl.c>
##
## SSL Virtual Host Context
##

#バーチャルホストの設定。https://でアクセスするとここにアクセスされる。
<VirtualHost 192.168.0.20:443>

#   General setup for the virtual host
DocumentRoot "/var/httpd/https"
ServerName www.tamochan.com:443
ServerAdmin webmaster@tamochan.com
ErrorLog /var/log/apache2/ssl_error_log
<IfModule mod_log_config.c>
        TransferLog logs/ssl_access_log
</IfModule>
・・・・
#CSRファイルのありか
SSLCertificateFile /etc/apache2/ssl/server.csr
#サーバ秘密鍵のありか
SSLCertificateKeyFile /etc/apache2/ssl/server.key

さらに、起動オプションの設定です。/etc/conf.d/apache2 で、ヴァーチャルホスト、SSL、SSLヴァーチャルホストを有効にする設定です。

APACHE2_OPTS="-D DEFAULT_VHOST -D SSL -D SSL_DEFAULT_VHOST"

設定後、rc-updateを用いて、デーモンが起動時にも自動的に起動するようにします。

dns # rc-update add apache2 default