

| qmail1.03のインストール(2001.06.06) |
MTAの選択肢には何通りか(sendmail,qmail,postfix,その他)あると思うが、私はあえてqmailを使う。
まずセキュリティホールがないこと。高速なこと。それでいてバージョンアップが殆どないこと。
【qmailのインストール準備】
インストールを行う前に準備。
とりあえず
http://www.jp.qmail.org/
から最低限必要なものをダウンロード、最新版を落としてくること。
2001/06/06時点ではこれ↓
・qmail-1.03.tar.gz
・ucspi-tcp-0.88.tar.gz
・checkpassword-0.90.tar.gz
・qmailanalog-0.70.tar.gz(これは最低限必要というわけではないが・・・あったほうがいいでしょう)
qmailanalogのインストールはこちら
もうひとつ忘れてはいけないものがある。
ftp://ftp.nlc.net.au/pub/unix/mail/qmail/
・qmail-date-localtime.patch(時間をちゃんと日本時間にしてくれるパッチ)
とりあえずサーバの作業ディレクトリにアップロードしておきましょう。
【インストール】
とりあえずソースたちはここにある。
[root@home5 qmail]# ls -l /work/qmail/
合計 320
-rw-r--r-- 1 nitta nitta 15631 6月 6 22:09
checkpassword-0.90.tar.gz
-rw-r--r-- 1 nitta nitta 220668 6月 6 22:09
qmail-1.03.tar.gz
-rw-r--r-- 1 nitta nitta 2603 6月 6 22:09
qmail-date-localtime.patch
-rw-r--r-- 1 nitta nitta 28416 6月 6 22:09
qmailanalog-0.70.tar.gz
-rw-r--r-- 1 nitta nitta 45848 6月 6 22:09
ucspi-tcp-0.88.tar.gz
1.パッチの適用
[root@home5 qmail]# tar zxvf qmail-1.03.tar.gz
[root@home5 qmail]#cd qmail-1.03
[root@home5 qmail-1.03]# patch < ../qmail-date-localtime.patch
patching file date822fmt.c
2.ディレクトリ作成
[root@home5 qmail-1.03]# mkdir /var/qmail
3.ユーザとグループの追加
※qmailは専用のアカウントが必要であるので追加する必要がある。
また通常のユーザのようにログインシェルを与えてはいけない。
よってログインシェルは何も出来ないものを追加しておく。
[root@home5 qmail-1.03]# groupadd qmail
[root@home5 qmail-1.03]# groupadd nofiles
[root@home5 qmail-1.03]# useradd -d /var/qmail -g nofiles -s /bin/true
qmaild
[root@home5 qmail-1.03]# useradd -d /var/qmail -g nofiles -s /bin/true
qmaill
[root@home5 qmail-1.03]# useradd -d /var/qmail -g nofiles -s /bin/true
qmailp
[root@home5 qmail-1.03]# useradd -d /var/qmail/alias -g nofiles -s
/bin/true alias
[root@home5 qmail-1.03]# useradd -d /var/qmail -g qmail -s /bin/true
qmailq
[root@home5 qmail-1.03]# useradd -d /var/qmail -g qmail -s /bin/ture
qmailr
[root@home5 qmail-1.03]# useradd -d /var/qmail -g qmail -s /bin/true
qmails
ログインシェルをこうしておけば登録したユーザではログインできない。
登録できたかどうか確認しておく。
[root@home5 qmail-1.03]# grep qmail /etc/passwd
qmaild:x:501:502::/var/qmail:/bin/true
qmaill:x:502:502::/var/qmail:/bin/true
qmailp:x:503:502::/var/qmail:/bin/true
alias:x:504:502::/var/qmail/alias:/bin/true
qmailq:x:505:501::/var/qmail:/bin/true
qmailr:x:506:501::/var/qmail:/bin/true
qmails:x:507:501::/var/qmail:/bin/true
※ユーザIDやグループIDはその環境によって異なる!
4.いよいよコンパイル
といってもさほど難しくはない。djbさんの作ったプログラムたちはmake
setup check でコンパイルするのが
定石となっている。このへんでちょっと戸惑う方もいるかも?
[root@home5 qmail-1.03]# make setup check 2>&1|tee make-seup-check.log
※ここでSolarisではおそらくエラー出るでしょう。
Solarisでエラーが出るのはconf-ldとconf-ccの中身が
gccではなくccをつかみに行くように設定されてるからです。
ccとなっている部分をgccに書き換えてあげましょう。
※redhat9やredhatAS3などでもエラーが出ます。
auto-str.c:17: 警告: `main' の戻り値の型が `int' ではありません
./load auto-str substdio.a
error.a str.a
substdio.a(substdo.o)(.text+0x43): In function `allwrite':
:
undefined reference to `errno'
collect2: ld はステータス 1 で終了しました
make: ***
[auto-str] エラー 1
のような感じで。名のでerror.hファイルを編集してエラーが出ないようにします。
patchなども出ているようですがそこまでするほどではないです。
# vi error.h
extern int errno;
という行の下に追加して以下のようにする
extern int
errno;
#include <errno.h>
とエラーが出なくなる。
5.初期設定
ここで自ホストの名前を設定することになる。
こんな感じ。
[root@home5 qmail-1.03]# ./config-fast home5.jinjin.com 2>&1|tee
config-fast.log
Your fully qualified host name is home5.jinjin.com.
Putting home5.jinjin.com into control/me...
Putting jinjin.com into control/defaultdomain...
Putting jinjin.com into control/plusdomain...
Putting home5.jinjin.com into control/locals...
Putting home5.jinjin.com into control/rcpthosts...
Now qmail will refuse to accept SMTP messages
except to home5.jinjin.com.
Make sure to change rcpthosts if you add
hosts to locals or virtualdomains!
6.エイリアスの登録
[root@home5 qmail-1.03]# cd /var/qmail/alias/
[root@home5 alias]# touch .qmail-postmaster
[root@home5 alias]# touch .qmail-mailer-daemon
[root@home5 alias]# touch .qmail-root
[root@home5 alias]# chmod 644 .qmail*
としたが私はさらに
[root@home5 alias]# echo '&nitta' > .qmail-mailer-daemon
[root@home5 alias]# echo '&nitta' > .qmail-postmaster
[root@home5 alias]# echo '&nitta' > .qmail-root
としておいた。
これで、これらに届いたメールはnittaユーザに配送される。
【POPのインストール】
凄く簡単!
[root@home5 checkpassword-0.90]# cd /work/qmail/checkpassword-0.90
[root@home5 checkpassword-0.90]# make setup check 2>&1|tee make-seup-check.log
[root@home5 checkpassword-0.90]# type checkpassword
checkpassword is /bin/checkpassword
【tcp-serverのインストール】
[root@home5 ucspi-tcp-0.88]# cd /work/qmail/ucspi-tcp-0.88
[root@home5 ucspi-tcp-0.88]# make setup check 2>&1|tee make-seup-check.log
-------あえなくインストール完了----
●設定
smtp用のデータベース作成
・中継を許可するホストを設定ファイルを作成する。
[root@home5 /etc]# cat /etc/tcp.smtp
| 192.168.128.:allow,RELAYCLIENT="" 127,:allow,RELAYCLIENT="" |
・中継を許可するホストのデータベースtcp.smtp.cdbを作成
[root@home5 /etc]# /usr/local/bin/tcprules /etc/tcp.smtp.cdb
/etc/tcp.smtp.tmp <
/etc/tcp.smtp
pop3用データベース作成
[root@home5 qmail]# cat /etc/tcp.pop3
| 192.168.128.:allow 127.:allow :deny |
[root@home5 qmail]# /usr/local/bin/tcprules /etc/tcp.pop3.cdb
/etc/tcp.pop3.tmp
< /etc/tcp.pop3
------------/etc/rc.localの最後の方に追加---------------
| #qmail-smtpd起動 (1行で書く) /usr/local/bin/tcpserver -x /etc/tcp.smtp.cdb -v -u 501 -g 501 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 & #qmail-pop3d起動(1行で書く) /usr/local/bin/tcpserver -x /etc/tcp.pop3.cdb -v 0 pop3 /var/qmail/bin/qmail-popup home5.jinjin.com /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1 | /var/qmail/bin/splogger pop3d 3 & #qmail boot-up if [ -f /var/qmail/rc ] then /bin/csh -cf /var/qmail/rc & fi |
-----------------------------------------
※1:-u 501 の501はqmaildユーザのuid
※2:-g 501 の501はnofilesのグループのgid
適宜システムの環境に合わせて変更してください。
●ユーザのMaildir形式の採用
qmailは/var/mail/アカウント名 のメール配送ではなく$HOME/Maildirの配送形式を
強く推奨しているので当然それを採用する。
※ただし、その場合はメールが全てホームディレクトリに配送されるので/home
パーティションは必ず計算したサイズで切ることが前提となる。
/homeや/export/homeパーティションは通常よりファイル数が多くなると考えられる。maildirの場合は
1通に1ファイルできるのでもしかするとinodeを少し大きくしたほうがいいかもしれませんね。
特にプロバイダーなどユーザ数が何千と何万と知るところは特に。
実作業は以下のとおり
・qmailのブートファイルをMaildirにであがるように作成・編集
[root@home5 qmail]# cd /var/qmail/boot
[root@home5 boot]# cp home ../rc
[root@home5 boot]# cd ../
[root@home5 qmail]# cp rc rc.org
[root@home5 qmail]# vi rc
root@home5 qmail]# diff rc.org rc
7c7
< qmail-start ./Mailbox splogger qmail
---
> qmail-start ./Maildir/ splogger qmail
・実際にユーザのホームディレクトリに必要なファイルの作成
[root@home5 qmail]# cat /home/nitta/.qmail
./Maildir/
[root@home5 bin]# chown nitta:nitta /home/nitta/.qmail
※必ずユーザ一人一人にこの.qmailのファイルは必要
[root@home5 qmail]# cd /var/qmail/bin
[root@home5 bin]# ./maildirmake /home/nitta/Maildir
※一般的にはよく/var/qmail/bin/maildirmake
$HOME/Maildir
とあらわされているが別に同じ意味なのでこれでいい。
[root@home5 bin]# ls -l /home/nitta/Maildir/
合計 12
drwx------ 2 root root 4096 6月 12 22:15 cur
drwx------ 2 root root 4096 6月 12 22:15 new
drwx------ 2 root root 4096 6月 12 22:15 tmp
[root@home5 bin]# chown -R nitta:nitta /home/nitta/Maildir
・sendmailラッパーも入れておきましょう
全ての作業が完了したと思ったが、まだ残ったことがあった。
sendmail wrapperの設定を忘れてはいけない。
これはmailコマンドやmailxコマンドを使ったときに標準のsendmailを呼びに行ってしまうので
まずもともとのsendmailを除去して、ラッパーに入れ替えてやる。
インストールしたばかりの状態でsendmailはここにある。
[root@home5 alias]# find / -name sendmail
/usr/lib/sendmail←これは/usr/sbin/sendmailへのシンボリックリンクになってる(RedHat7.3の場合)
/usr/sbin/sendmail
/work/qmail/qmail-1.03/sendmail
/var/qmail/bin/sendmail
/etc/sysconfig/sendmail
/etc/rc.d/init.d/sendmail
findで見つかったこの2つ(上の下線部分)がsendmailなので、こうする↓
[root@home5 alias]# rm /usr/lib/sendmailただのシンボリックリンクなので削除してもよい(RedHat7.3の場合)
[root@home5 alias]# mv /usr/sbin/sendmail
/usr/sbin/sendmail.org
[root@home5 alias]# ln -s /var/qmail/bin/sendmail
/usr/lib/sendmail
[root@home5 alias]# ln -s /var/qmail/bin/sendmail
/usr/sbin/sendmail
ここでsendmailはとりあえず停止してしまいます。
ちょっとせこいかもしれないけど楽すると
[root@home5 alias]# setup
でとめてしまいましょう。(sendmailデーモンが起動してるならそれも停止する。)
※solarisなら/etc/rc2.d/S88sendmail stop
っていうか別にsendmail使わないなら
上のシンボリックリンクする前にsendmail削除してもかまわないでしょう
こんな↓感じで。
---------------------
私はqmail使う予定なのでsendmail関係も削除
#RedHat7.1で実際にやりました。Solarisの方には無用ですね。
[root@home5 /root]# rpm -e sendmail-cf-8.11.2-14
[root@home5 /root]# rpm -e sendmail-8.11.2-14
エラー: これらのパッケージを削除すると依存性を破壊します:
smtpdaemonは fetchmail-5.7.4-4 に必要とされています
smtpdaemonは mutt-1.2.5i-9 に必要とされています
別にnodepsつけて削除してもいいんですけどmuttもfetchmail(これは使うかも・・・)
ということでこいつらも削除
[root@home5 /root]# rpm -e fetchmail-5.7.4-4
[root@home5 /root]# rpm -e mutt-1.2.5i-9
[root@home5 /root]# rpm -e sendmail-8.11.2-14
※削除するんだったら必ず上のシンボリックリンクの作業をする前に
やらないと、シンボリックリンクした後にsendmailをrpmで削除すると
せっかくのシンボリックリンクが削除されてしまいます。
#また張りなおせばいいだけの話ですが・・・
---------------------
これでqmailを起動する準備が整いましたので一度テストしてみましょう。
いちいち先ほどのrc.localに追加したのを手であげるのはめんどくさいので
荒っぽいかもしれないけど
[root@home5 alias]# /etc/rc.local
[root@home5 alias]# ps -ef |grep qmail|grep -v grep
qmaild 6505 1 0 22:27 pts/3 00:00:00 /usr/local/bin/tcpserver
-x /etc
root 6506 1 0 22:27 pts/3 00:00:00 /var/qmail/bin/splogger
smtpd 3
root 6508 1 0 22:27 pts/3 00:00:00 /var/qmail/bin/splogger
pop3d 3
root 6509 1 0 22:27 pts/3 00:00:00 /bin/csh
-cf /var/qmail/rc
qmails 6510 6509 0 22:27 pts/3 00:00:00 qmail-send
qmaill 6511 6510 0 22:27 pts/3 00:00:00 splogger
qmail
root 6512 6510 0 22:27 pts/3 00:00:00 qmail-lspawn
./Maildir/
qmailr 6513 6510 0 22:27 pts/3 00:00:00 qmail-rspawn
qmailq 6514 6510 0
[root@home5 alias]# mail nitta
Subject: test
test
.
Cc:
[root@home5 alias]# tail -10 /var/log/maillog
Jun 12 22:27:41 home5 qmail: 992352461.245581
status: local 0/10 remote 0/20
Jun 12 22:29:17 home5 qmail: 992352557.175255
new msg 124546
Jun 12 22:29:17 home5 qmail: 992352557.175736
info msg 124546: bytes 234 from <n
itta@home5.jinjin.com> qp 6523 uid 0
Jun 12 22:29:17 home5 qmail: 992352557.181426
starting delivery 1: msg 124546 to
local nitta@home5.jinjin.com
Jun 12 22:29:17 home5 qmail: 992352557.181552
status: local 1/10 remote 0/20
Jun 12 22:29:17 home5 qmail: 992352557.195503
delivery 1: success: did_1+0+0/
Jun 12 22:29:17 home5 qmail: 992352557.195620
status: local 0/10 remote 0/20
Jun 12 22:29:17 home5 qmail: 992352557.195661
end msg 124546
[root@home5 alias]# ls -l /home/nitta/Maildir/new/
合計 4
-rw------- 1 nitta nitta 309 6月 12 22:29
992352557.6526.home5
[root@home5 alias]#
[root@home5 qmail]# telnet localhost 110
Trying 127.0.0.1...
Connected to home5.
Escape character is '^]'.
+OK <6645.992354470@home5.jinjin.com>
user nitta
+OK
pass killdjb55
+OK
list
+OK
1 309
.
RETR 1
+OK
| Return-Path: <nitta@home5.jinjin.com> Delivered-To: nitta@home5.jinjin.com Received: (qmail 6523 invoked by uid 0); 12 Jun 2001 22:29:17 +0900 Date: 12 Jun 2001 22:29:17 +0900 Message-ID: <20010612132917.6522.qmail@home5.jinjin.com> From: nitta@home5.jinjin.com To: nitta@home5.jinjin.com Subject: test test |
.
quit
+OK
Connection closed by foreign host.
本当は内内・内外・外内のテストをちゃんとすべきです。
そのときのログも全部確認するべきです。
でもこれはただのメモだけなので実際にはやってみましたが、メモには書いてません。
どうやら成功みたいですね。
sendmail使いの人には一番最初はなぜかqmailは凄くとっつきにくい感じがする。
本当はよっぽどqmailの方が管理もしやすいし、インストールも簡単なのに・・・
qmailのインストールは終わりですけど
qmailの管理ツールであるqmailanalogってやつも
インストールしたいので、参照したい場合はqmailanalogインストールの項を
参照してください。
・qmailの必要なdデフォルトファイルの一覧
::::::::::::::
/var/qmail/rc
| #!/bin/sh # Using splogger to send the log through syslog. # Using qmail-local to deliver messages to ~/Mailbox by default. exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start ./Maildir/ splogger qmail |
::::::::::::::
/var/qmail/control/defaultdomain
| jinjin.com |
::::::::::::::
/var/qmail/control/locals
| home5.jinjin.com |
::::::::::::::
/var/qmail/control/me
| home5.jinjin.com |
::::::::::::::
/var/qmail/control/plusdomain
| jinjin.com |
::::::::::::::
/var/qmail/control/rcpthosts
| home5.jinjin.com |
::::::::::::::
/etc/tcp.smtp
| 192.168.128.:allow,RELAYCLIENT="" 127.:allow,RELAYCLIENT="" |
::::::::::::::
/etc/rc.local
| #!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. ####DMA有効####### /sbin/hdparm -d 1 /dev/hda /sbin/hdparm -d 1 /dev/hdd /sbin/hdparm -d 1 /dev/hdc ################## if [ -f /etc/redhat-release ]; then R=$(cat /etc/redhat-release) arch=$(uname -m) a="a" case "_$arch" in _a*) a="an";; _i*) a="an";; esac NUMPROC=`egrep -c "^cpu[0-9]+" /proc/stat` if [ "$NUMPROC" -gt "1" ]; then SMP="$NUMPROC-processor " if [ "$NUMPROC" = "8" -o "$NUMPROC" = "11" ]; then a="an" else a="a" fi fi # This will overwrite /etc/issue at every boot. So, make any changes you # want to make to /etc/issue here or you will lose them when you reboot. echo "" > /etc/issue echo "$R" >> /etc/issue echo "Kernel $(uname -r) on $a $SMP$(uname -m)" >> /etc/issue cp -f /etc/issue /etc/issue.net echo >> /etc/issue fi touch /var/lock/subsys/local #qmail-smtpd起動 /usr/local/bin/tcpserver -x /etc/tcp.smtp.cdb -v -u 501 -g 501 0 smtp /var/qmail /bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 & echo "qmail-smtpd start!" #qmail-pop3d起動 /usr/local/bin/tcpserver -x /etc/tcp.pop3.cdb -v 0 pop3 /var/qmail/bin/qmail-pop up home5.jinjin.com /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1 | /var/qmail/bin/splogger pop3d 3 & echo "qmail-pop3d start!" #qmail boot-up if [ -f /var/qmail/rc ] then /bin/csh -cf /var/qmail/rc & fi echo "qmail is boot-up!" |
rc.localから起動するのがポリシーに合わない場合は
白文字の部分の内容を/etc/rc.d/init.d/qmailに記述して
# ln -s /etc/rc.d/init.d/qmail /etc/rc3.d/S80qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc5.d/S80qmail
# chmod 755 /etc/rc.d/init.d/qmail
# chmod 755 /etc/rc3.d/S80qmail
# chmod 755 /etc/rc5.d/S80qmail
なんてしてもよいかもしれません。
【セキュリティホールへの対処】
セキュリティホールがないということでしたが
ひとつだけ対処しておかなくてはならものがあります。
コンパイルなどは必要ありません。
ただ以下のようにするだけです。
|
[root@home5 qmail]# cd /var/qmail/bin
[root@home5 qmail]# mv qmail-smtpd qmail-smtpd2 [root@home5 qmail]# vi qmail-smtpd
[root@home5 qmail]# chgrp qmail qmail-smtpd [root@home5 qmail]# chmod 755 qmail-smtpd |
後はqmailをもう一度起動しなおして起きましょう。
止めれないサイトではどうしてよいかわかりませんが・・・
pop before smtpとかsmtp authなんかやりたい場合は
さらに他ツールを入れる必要があります。
apopやimapを使うときも他にインストールする必要があります.
本サイトではそこまで触れません。qmailのインストールができる管理者なら後は余裕でできるでしょ。