Qmail-pop3dのインストール
Qmail単体だとサーバーに配信されたメールをクライアント側に持ってくることはできません。そこでメールを取り出す手段として、POP(Post Office Protcol)があります。
cd ../checkpassword-0.90
patch -s < ../checkpassword-glibc.patch
make
make setup check
※Redhat9,Fedora Coreの場合はパッチが必要である。
↑
TCP Serverのインストール
tar xvfz ucspi-tcp-0.88.tar.gz
cd ../ucspi-tcp-0.88
patch -s < ../ucspi-tcp-glibc.patch
make setup check
※Redhat9,Fedora Coreの場合はパッチが必要である。
Vpopmailのインストール
本来メールアカウントを作成する場合は、OSのユーザーアカウント登録を行わなければならない為、LinuxやUnixのOS上にユーザーがメールアカウント分だけ増えることになる。
ユーザーとグループを追加する
groupadd -g 89 vchkpw
useradd -g vchkpw -u 89 vpopmail -M -s \
/bin/false -d /usr/local/vpopmail
※ユーザーID、グループIDは89番を推奨します。
これはFreeBSDの開発元がユーザーID,グループID「89」をVpopmail用として予約しているからである。
またユーザー名に「vchkpw」を使うのは昔Vpopmailはvchkpwと呼ばれていたためその名残が今でも残っているためである。
インストール
tcp.smtpファイルを/etc直下に作る。
これはsmtp認証のDBをvpopmailが作成する歳に参照されるファイルであるため必須。
/etcの直下にtcp.smtpを作成します。 中身は以下のように(テキストファイル)
vpopmailをPOP before SMTPで動かす場合に必要なファイルなので必ず作成します。
#
# /var/qmail/control/tcp.smtp
#
127.0.0.1:allow,RELAYCLIENT=""
192.168.1.:allow,RELAYCLIENT=""
xxx.xxx.xxx.xxx:allow,RELAYCLIENT=""
※xxx.xxx.xxx.xxxのところにはデフォルトゲートウェイを入力します。
./configure --enable-roaming-users=y \
--enable-tcpserver-file=/etc/tcp.smtp \
--enable-relay-clear-minutes=10 \
--enable-logging=y --enable-clear-passwd=n
make
make install
ドメイン名を登録する。
Vpopmailは1つだけでなく複数のドメイン名を登録し、ドメインごとにユーザを管理することができる。
/usr/local/vpopmail/bin/vadddomain [ドメイン名]
この時パスワードが聞かれますので、パスワードを2回入力します。
ここでセットされるパスワードはpostmaster@[ドメイン名]になります。
Postmasterのパスワードを変更する
/usr/local/vpopmail/bin/vpasswd postmaster@[ドメイン名]
パスワードを忘れてしまったとき
/usr/local/vpopmail/bin/vuserinfo postmaster@[ドメイン名]
↑
TCP rules の設定
起動shellから呼ばれるファイルを生成する。
tcprules /usr/local/vpopmail/etc/tcp.smtp.cdb \
/usr/local/vpopmail/etc/tcp.smtp.tmp < /etc/tcp.smtp
起動シェルの作成
/var/qmail/rcの作成
cp /var/qmail/boot/home /var/qmail/rc
chmod 755 /var/qmail/rc
vi /var/qmail/rc
qmail-start ./Maildir/ splogger qmail ※
※MailboxをMaildir/に変更する。
変更する意味は、Mailbox方式はアカウントに対して何通メールがたまっても1つのファイルとして管理される。
しかしMailbox方式だとメール1通に対して1つのファイルで管理されるため、メールによる不具合が起きた場合に対応が楽である。
たとえば、大容量のメールがアカウントに届いた場合にそのメールが引っかかって他のメールが受信できない場合がよくある。
そんな時Mailbox方式だと他のメールまで一緒に削除しなければアカウントの回復ができないが、Maildir方式だと不具合があるメールだけを削除すれば、他のメールは受信できる。
Pop Before SMTP
数あるメール送受信のセキュリティー認証のひとつである。
何も対策をしていないメールサーバーは、メールの受信はパスワードに守られているため受信はできないが、送信はどんなアカウントでも成りすましてできてしまいます。
そこでセキュリティー認証を設置することで、メールアカウントのパスワード認証ができるものしかメールを送信できなくなるのです。
cd ..
tar zxvf pbs4q-0.2.1.tar.gz
cd pbs4q/
make
make install
chown qmaild:nofiles /var/pbs4q/ip/
起動シェルの作成
起動シェルを作成します。
これを/etc/rc.d/init.d/qmailに作成します。
記述の内容は以下になります。
#!/bin/sh
#
# Startup script for qmail-daemon
#
# chkconfig: 345 85 15
# description: qmail
# processname: tcpserver
#
. /etc/rc.d/init.d/functions
#
# Start/stop processes required for qmail
#
case "$1" in
start)
echo -n "Starting qmail: "
sleep 1s
csh -cf '/var/qmail/rc &'
echo -n "Starting tcpserver-POP3: "
sleep 1s
/usr/local/bin/tcpserver -H -R -l 0 0 110 \
/var/qmail/bin/qmail-popup qurataro.com \
/usr/local/vpopmail/bin/vchkpw \
/usr/local/bin/pbs4q1 \
/var/qmail/bin/qmail-pop3d Maildir &
echo -n "Starting tcpserver-SMTP: "
sleep 1s
/usr/local/bin/tcpserver -H -R -l 0 -v -p -u \
qmaild -g nofiles -x /usr/local/vpopmail/etc/tcp.smtp.cdb \
0 25 /usr/local/bin/pbs4q2_smtp \
/var/qmail/bin/qmail-smtpd &
echo
;;
restart)
$0 stop
sleep 1s
$0 start
;;
stop)
echo -n "Shutting down tcpserver: "
killproc tcpserver
echo
echo -n "Shutting down qmail: "
killproc qmail-send
echo
;;
*)
echo "Usage: $0 {start|restart|stop}"
exit 1
esac
exit 0
処理の登録・起動
実行権限を与えます。
chmod 755 /etc/rc.d/init.d/qmail
chkconfig に登録
chkconfig --add qmail
OS起動時に起動する設定
chkconfig qmail on
起動します
service qmail start
startコマンドの後は下記のようなメッセージが出ます。
Starting qmail: [1] 12015
Starting tcpserver-POP3: Starting tcpserver-SMTP: tcpserver: status: 0/40
動作確認
ここまでで一通りの設定は終わりです。
そしたら実際にメールソフトの設定と動作テストをしてみましょう。
ユーザーアカウントの登録
テストでも本番で使うのでもかまいませんのでとりあえず何かユーザーを登録しましょう。
/usr/local/vpopmail/bin/vadduser test@qurataro.com
パスワードを2回聞いてきますので、2回入力します。
※上記アカウント(test@qurataro.com)は実際に存在しませんのでメールしないでください。
Telnetによる動作確認
メールサーバーがちゃんと起動しているかどうかはTelnetを用いると簡単に確認できます。
telnet qurataro.com 110
+OK <12027.1093837931@qurataro.com>
user test@qurataro.com
+OK
pass testtest
+OK
list
+OK
.
110はSMTPのポート番号です。
起動シェルおよび起動アプリケーションが正しく設定されていれば上記のように+OKが帰ってきます。
ユーザーアカウントは必ずドメイン名まで入力してください。
それはVpopmailは複数のドメインを管理できるため、ドメイン名を入力しなければ目的のアカウントまでたどり着くことができないのです。
ちなみにuserは存在しないアカウントを入力しても+OKが帰ってきます。
passはパスワードです。このパスワードを入力して+OKが帰ってくるのであれば認証はOKです。
帰ってこない場合は、アカウント情報が間違っているか、設定に不具合があるかが考えられます。
もう一度今までの流れを振り返って見ましょう。
Listコマンドで現在のアカウントにたまっているメールの数を調べることができます。
コマンドによるメール送信テスト
自サーバー内のアカウントへ送信テスト
echo to: test | /var/qmail/bin/qmail-inject
外部サーバーへのメール送信テスト
echo to: test@hotmail.com | /var/qmail/bin/qmail-inject
余談
さまざまなVpopmailのインストールページを参照しましたが、telnet時のユーザーアカウントにドメイン名も入力することに触れておらず、おまけにTelnet動作確認の時にユーザーアカウント名だけを入力した記述があり、この環境では動作確認できるはずがないのに・・と思いました。
この情報の混乱でVpopmailの設定が遅れてしまいました。
Sendmailの環境の削除
RedhatやFedora CoreなどのLinuxでは最初からSendmailがインストールされています。
そこでSendmail環境の削除作業を行います。
この作業を行わないとサーバーを再起動した時、Sendmailとぶつかって起動なくなってしまうので必ず行いましょう。
現在起動中のセッションをkill
ps -ef | grep sendmail
root 1547 1 0 Sep09 ? 00:00:00 sendmail: ac.....
smmsp 1556 1 0 Sep09 ? 00:00:00 sendmail: Qu.....
上記、表示の場合「1547」と「1556」がジョブ番号になりますので、killします。
kill 1547 1556
ServiceコマンドでSendmailの変わりにqmailが起動するようにする
Linuxに初期設定されているSendmailの起動プログラムを利用し、sendmailの変わりにqmailが起動するように変更する。
mv /etc/init.d/sendmail /etc/init.d/sendmail.bak
ln -s /etc/init.d/qmail /etc/init.d/sendmail
こうすることでLinux起動時のserviceコマンドでSendmailの変わりにQmailが起動する。
Sendmailのコマンドをqmailのコマンドに置き換える
コマンドでSendmailが起動するのをQmailが立ち上がるように変更する。
mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail