Last Update 2006-10-31
qmailのソースをダウンロードしておきます。
# mkdir /var/qmail
Linuxでは、/etc/group に以下を追加します。
または、groupadd コマンドで以下のようにグループを作成します。
# groupadd nofiles # groupadd qmail
FreeBSDの場合は、/etc/group に以下を追加します。
Linuxでは以下のようにユーザーを作成します。
# useradd -g nofiles -d /var/qmail/alias -s /bin/false alias # useradd -g nofiles -d /var/qmail -s /bin/false qmaild # useradd -g nofiles -d /var/qmail -s /bin/false qmaill # useradd -g nofiles -d /var/qmail -s /bin/false qmailp # useradd -g qmail -d /var/qmail -s /bin/false qmailq # useradd -g qmail -d /var/qmail -s /bin/false qmailr # useradd -g qmail -d /var/qmail -s /bin/false qmails注 /sbin/nologin の場合、SSH接続はできなくなりますが、FTP接続は可能です。 (SSHログイン時に /etc/nologin.txtの内容が表示されます。)
/bin/false の場合、 SSHだけでなく、FTPも不可能になります。
FreeBSDでは、 vipw コマンドで以下を追加します。
alias:*:7790:2108::0:0::/var/qmail/alias:/sbin/nologin qmaild:*:7791:2108::0:0::/nonexistent:/sbin/nologin qmaill:*:7792:2108::0:0::/nonexistent:/sbin/nologin qmailp:*:7793:2108::0:0::/nonexistent:/sbin/nologin qmailq:*:7794:2107::0:0::/nonexistent:/sbin/nologin qmailr:*:7795:2107::0:0::/nonexistent:/sbin/nologin qmails:*:7796:2107::0:0::/nonexistent:/sbin/nologin
必要なパッチをダウンロードして、適用しておきます。
# patch < ../qmail-date-localtime.patch patching file date822fmt.c
http://www.qmail.org/qmail-smtpd-relay-reject
# patch < ../qmail-smtpd-relay-reject patching file qmail-smtpd.c
http://members.elysium.pl/brush/qmail-smtpd-auth/dist/qmail-smtpd-auth-0.31.tar.gz
qmailのソースを展開したディレクトリに、base64.c base64.h をコピーしておきます。
# patch < ../qmial auth.patch patching file Makefile patching file TARGETS patching file qmail-smtpd.8 patching file qmail-smtpd.c Hunk #2 succeeded at 63 (offset 1 line). Hunk #3 succeeded at 256 (offset 15 lines). Hunk #4 succeeded at 416 (offset 2 lines). Hunk #5 succeeded at 659 (offset 15 lines).
SMTP-AUTHパッチに含まれる base64.c base64.hが、qmailのソースディレクトリにない場合、 以下のようなエラーが発生します。
alloc.a substdio.a error.a str.a fs.a auto_qmail.o make: *** `qmail-smtpd.o' に必要なターゲット `base64.h' を make するルールがありません。中止。
注意. SMTP-AUTHを使用する場合、checkpassword も必要になります。
# make setup ... ... ./install # make check ./instcheck
もし、
# make setup ./load auto-str substdio.a error.a str.a /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference in substdio.a(substdo.o) /lib/libc.so.6: could not read symbols: 不正な値です collect2: ld はステータス 1 で終了しました make: *** [auto-str] エラー 1このようなエラーが発生する場合は、ファイル error.h の中で、以下のように修正します。
extern int errno; --> #include <errno.h>
# ./configもし、以下のようなエラーが発生した場合、ホスト名がDNSに登録されていません。
Your hostname is dev.docomo-ss.co.jp. hard error Sorry, I couldn't find your host's canonical name in DNS. You will have to set up control/me yourself.この場合は、以下のように実行します。 (hostnameがaaa.test.co.jpと設定されている場合)
# ./config-fast `hostname` Your fully qualified host name is aaa.test.co.jp. Putting aaa.test.co.jp into control/me... Putting test.co.jp into control/defaultdomain... Putting co.jp into control/plusdomain... Putting aaa.test.co.jp into control/locals... Putting aaa.test.co.jp into control/rcpthosts... Now qmail will refuse to accept SMTP messages except to aaa.test.co.jp. Make sure to change rcpthosts if you add hosts to locals or virtualdomains!この結果以下のようなファイルが作成されます。
・/var/qmail/control/defaultdomain
test.co.jp
・/var/qmail/control/me
aaa.test.co.jp
・/var/qmail/control/locals
aaa.test.co.jp
・/var/qmail/control/plusdomain
co.jp
・/var/qmail/control/rcpthosts
aaa.test.co.jp
Linuxの場合、ファイル/etc/man.configに
MANPATH /var/qmail/manを追加します。
# tar zxf checkpassword-0.90.tar.gz # cd checkpassword-0.90ファイル error.hで以下のように修正します。
extern int errno; --> #include <errno.h>
# make setup .... ./install # make check ./instcheck
checkpasswordコマンドが /bin にインストールされていれば、 グループを root 、ユーザーを nofiles に変更します。
# chown root:nofiles /bin/checkpasswordまた所有者権限で動作するようにも変更しておきます。
# chmod 4750 /bin/checkpassword
# tar zxf ucspi-tcp-0.88.tar.gz # cd ucspi-tcp-0.88ファイル error.hを以下のように修正
extern int errno; --> #include <errno.h>
# make setup ..... ./install # make check ./instcheck
/etc/tcp.smtp ファイルの作成
# vi /etc/tcp.smtp
127.:allow,RELAYCLIENT="" 192.168.0.:allow,RELAYCLIENT="" <-- もし、192.168.0 からの接続を許可する場合はこれを追加 192.168.1.0-31:allow,RELAYCLIENT="" <-- 192.168.1.0 から 192.168.1.31 までを許可する場合 192.168.2.:deny <-- 192.168.2 からの接続を拒否する場合
cdbファイルの作成
# tcprules /etc/tcp.smtp.cdb /etc/stmp.tmp < /etc/tcp.smtp
例. 10MB( 10*1024*1024 )に制限する場合、
ファイル/etc/qmai/control/databytesを作成し、最大サイズを記述します。
10485760
ダブルバウンスメールは破棄するように設定 (ダブルバウンスメールは、送信者・受信者の両方とも存在しないメールのこと) ファイル/var/qmail/control/doublebouncetoを作成します。
# touch /var/qmail/control/doublebounceto
postmaster, MAILER=DAEMON, root などの重要アカウントに対する配信の設定を行います。
# cd /var/qmail/alias # touch .qmail-postmaster .qmail-mailer-daemon .qmail-root # chmod 644 .qmail*
これで、postmaster, MAILER=DAEMON, root などの設定したユーザーあての メールは、/var/qmail/alias に保存されるようになります。
ます、alias用のMaildirを作成します。
# /var/qmail/bin/maildirmake ~alias/Maildir # chown -R alias /var/qmail/alias/Maildir
次に、既存の各ユーザーのホームディレクトリで、
# su ユーザー名 # cd ~/ # /var/qmail/bin/maildirmake Maildirとして、各ユーザーごとにMaildirを作成する必要があります。 注意点:各ユーザーのMaildirの所有者はそのユーザー自身になっていること。
最後に、新規ユーザーが追加されたときに、自動的にMaildirディレクトリが生成されるように設定します。 /etc/skelにひな形を置きます。
# /var/qmail/bin/maildirmake /etc/skel/Maildir
参考:Maildirの中には、cur、new、tmpの3つのディレクトリが作成されます。
qmail設定ファイルをサンプルからコピーします。
# cp /var/qmail/boot/home /var/qmail/rc
注. サンプルには、 binm1, binm1+df .... home, home+df, proc, proc+df と何種類かあります。
注. home はMailboxを使用するようになっていますので、 Maildirを使用するように変更したい場合は、このファイルの
qmail-start ./Mailbox splogger qmail --> qmail-start ./Maildir/ splogger qmailと変更します。
注. Maildirを使用する場合は、./Maildir/の最後の'/'を忘れないこと。 これがないと、送信に失敗します。 この理由で送信に失敗した場合、/var/log/maillogに、
Apr 7 16:22:11 dev qmail: 1144394531.817076 delivery 7: deferral: Unable_to_open_./Maildir:_is_a_directory._(#4.2.1)/のようなエラーがログに記録されます。
ここでは、 /usr/sbin/sendmail を変更します。
まず、sendmailを止めてから、変更します。
#/etc/rc.d/init.d/sendmail stop
# cd /usr/sbin/ # mv sendmail sendmail.dist # chmod 0 sendmail.dist # ln -s /var/qmail/bin/sendmail sendmail注. /usr/lib/sendmailは、Fedora Core 4では、 /usr/sbin/sendmailを参照しているので、変更する必要はありません。
lrwxrwxrwx 1 root root 27 11月 29 20:11 mta -> /usr/sbin/sendmail.sendmail lrwxrwxrwx 1 root root 41 11月 29 20:11 mta-aliasesman -> /usr/share/man/man5/aliases.sendmail.5.gz lrwxrwxrwx 1 root root 23 11月 29 20:11 mta-mailq -> /usr/bin/mailq.sendmail lrwxrwxrwx 1 root root 39 11月 29 20:11 mta-mailqman -> /usr/share/man/man1/mailq.sendmail.1.gz lrwxrwxrwx 1 root root 28 11月 29 20:11 mta-newaliases -> /usr/bin/newaliases.sendmail lrwxrwxrwx 1 root root 44 11月 29 20:11 mta-newaliasesman -> /usr/share/man/man1/newaliases.sendmail.1.gz lrwxrwxrwx 1 root root 24 11月 29 20:11 mta-pam -> /etc/pam.d/smtp.sendmail lrwxrwxrwx 1 root root 23 11月 29 20:11 mta-rmail -> /usr/bin/rmail.sendmail lrwxrwxrwx 1 root root 26 11月 29 20:11 mta-sendmail -> /usr/lib/sendmail.sendmail lrwxrwxrwx 1 root root 42 11月 29 20:11 mta-sendmailman -> /usr/share/man/man8/sendmail.s
# /var/qmail/bin/rc &と実行して
# ps -aef |grep qmail qmails 13859 13544 0 15:31 pts/1 00:00:00 qmail-send qmaill 13860 13859 0 15:31 pts/1 00:00:00 splogger qmail root 13861 13859 0 15:31 pts/1 00:00:00 qmail-lspawn ./Maildir qmailr 13862 13859 0 15:31 pts/1 00:00:00 qmail-rspawn qmailq 13863 13859 0 15:31 pts/1 00:00:00 qmail-cleanならOK
次に配送テストを行います。
# echo to: root@aaa.test.co.jp | /var/qmail/bin/qmail-injectを実行して、/etc/qmail/alias/Maildir/new/の中にファイルが作成されていたら配送テストOK
Fedora Coreの場合
# chkconfig --list sendmail sendmail 0:off 1:off 2:on 3:on 4:on 5:on 6:off # chkconfig --level 2345 sendmail offその他の場合 /etc/rc.d/rs?.d/S80sendmailを_S80sendmailにファイル名を変更しておきます。
#!/bin/bash # # qmail # # chkconfig: 2345 80 30 # description: qmail start/stop script # Source function library. . /etc/rc.d/init.d/functions PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin [ -f /var/qmail/rc ] || exit 0 start() { # Start daemons. if [ -z $(/sbin/pidof qmail-send) ]; then echo -n "Starting qmail" # qmail csh -cf '/var/qmail/rc &' 2>&1 > /dev/null # SMTP tcpserver -qv -l0 -HR -u `id -u qmaild` -g `id -g qmaild` \ -x /etc/tcp.smtp.cdb 0 smtp rblsmtpd -r relays.ordb.org \ /var/qmai/bin/qmail-smtpd `hostname` /bin/checkpassword /bin/true 2>&1|\ /var/qmail/bin/splogger smtp & # POP3 tcpserver -qvRH -u `id -u qmaild` -g `id -g qmaild` \ 0 pop3 qmail-popup `hostname` /bin/checkpassword \ qmail-pop3d Maildir 2>&1 | splogger pop3 & RETVAL=$? echo [ $RETVAL = 0 ] && touch /var/lock/subsys/qmail return $RETVAL else echo "qmail is already started" fi } stop() { # Stop daemons. if [ ! -z $(/sbin/pidof qmail-send) ]; then echo -n "Shutting down qmail" /bin/kill $(/sbin/pidof tcpserver) /bin/kill $(/sbin/pidof qmail-send) until [ -z $(/sbin/pidof qmail-send) ] && [ -z $(/sbin/pidof tcpserver) ]; do :; done echo rm -f /var/lock/subsys/qmail else echo "qmail is not running" fi } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) if [ ! -z $(/sbin/pidof qmail-send) ] ; then echo -n "qamil (pid" echo -n " `/sbin/pidof qmail-send`" echo -n " `/sbin/pidof tcpserver`" echo ") is running..." else echo "qmail is stoped" fi ;; *) echo "Usage: qmail {start|stop|restart|status}" exit 1 esac exit 0
Fedora Coreの場合、以下のようにして自動起動するようにします。
# chkconfig qmail --add # chkconfig qmail onchkconfig --listコマンドで、qmailの起動設定を確認します。
結果が以下のようになっていればOKです。
# chkconfig --list qmail qmail 0:off 1:off 2:on 3:on 4:on 5:on 6:off