昨年九月にqmailをインストールした後何もしていなかったので、qmailの環境を設定。
◆checkpasswordのインストール。
認証用にcheckpasswordを入れておく。
# cd /usr/ports/security/checkpassword
# make install
◆tcpserverのインストール。
# su
# cd /usr/ports/sysutils/ucspi-tcp
# make
# make install
◆POP3用アクセスデータベースの作成
※POP、SMTP共にローカルエリア、及び指定されたドメインでないと使えないようにしておきました。
# vi /etc/tcp.pop3
192.168.0.:allow
127.:allow
.example.com:allow
:deny
cdb形式に変換。
# /usr/local/bin/tcprules /etc/tcp.pop3.cdb /etc/tcp.pop3.tmp < /etc/tcp.smtp
◆SMTP用アクセスデータベースの作成。
# vi /etc/tcp.smtp
127.:allow,RELAYCLIENT=""
192.168.0.:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""
.example.com:allow,RELAYCLIENT=""
:allow
cdb形式に変換。
# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
※rcpthostsについて。
・/var/qmail/control/rcpthostsがない場合、SMTPは全てのドメインへの送信を許可します。
・rcpthostsがある場合は、そこに書かれているドメインへの送信のみ許可されます。
・で、デフォルトのcpthostsには、localhostと自ドメインしか記述されていないので、このままだと送信先(要するにメールのToフィールド)が極端に制限された状態です。
なお、環境変数RELAYCLIENTがセットされている場合には(値は空でもいい。)、rcpthostsの内容に関わらず全てのドメインにメールが送信できます。
・なので、ここでは、ローカルエリア(192.168.0.)等、指定されたドメインでのアクセスの場合のみ、環境変数RELAYCLIENTをセットして、他ドメインへのメールの送信を許可するデータベースを作っています。
◆inetの設定を外す。
# vi /etc/inetd.conf
#pop3 stream tcp nowait root /usr/local/libexec/popper popper
(snip)
#smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd
inetd再起動
# ps -aux | grep inetd
# kill -HUP (inetd-ID)
◆POP3の起動。
# /usr/local/bin/tcpserver -v -x /etc/tcp.pop3.cdb -R -H 0 pop3 /var/qmail/bin/qmail-popup home.teachat.org /usr/local/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1 &
◆SMTPの起動。
起動のためにqmailのUIDとGIDを調べる。
# id qmaild
uid=82(qmaild) gid=81(nofiles) groups=81(nofiles)
# /usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb -R -H -u 82 -g 81 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 &
[2] 59590
※本当はパイプで下記をつければsploggerでログが取れるはずなんですがなんとなくうまくいかなかったよーな気がする。
| /var/qmail/bin/splogger smtp 3 2>&1 &
# ps -auxw | grep tcp
root 59042 0.0 0.3 924 172 p0 I 7:15PM 0:00.01 /usr/local/bin/tcpserver -v -x /etc/tcp.pop3.cdb -R -H 0 pop3 /var/qmail/bin/qmail-popup home.teachat.org /usr/local/bin
qmaild 59590 0.0 0.8 924 484 p0 I 11:33PM 0:00.01 /usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb -R -H -u 82 -g 81 0 smtp /var/qmail/bin/qmail-smtpd 2
◆POP3サーバの動作確認。
telnetで直接サーバとお話して確認します。
事前にMaildirディレクトリを作っておく必要があります。
# mkdir ~admin/Maildir/
# mkdir ~admin/Maildir/cur
# mkdir ~admin/Maildir/new
# mkdir ~admin/Maildir/tmp
# chown -R admin ~admin/Maildir/
# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.teachat.org.
Escape character is '^]'.
+OK <59652.1084718640@home.teachat.org>
USER admin
+OK
PASS [パスワードを入力。]
+OK
LIST
+OK
.
QUIT
このようにお話できればOK。
ERR authorization firstが出たら認証失敗です。
◆SMTPサーバの動作確認。
手動でメールを送信してみるテスト。
☆マークの行が手入力。
# telnet localhost smtp
Trying 127.0.0.1...
Connected to localhost.teachat.org.
Escape character is '^]'.
220 sakaki.info ESMTP
EHLO 127.0.0.1☆
250-sakaki.info
250-PIPELINING
250 8BITMIME
MAIL FROM <admin@home.teachat.org>☆
250 ok
RCPT TO <myaccount@yahoo.co.jp<☆
250 ok
DATA☆
354 go ahead
Subject: "TEST"☆
test body☆
.☆
250 ok 1084720564 qp 59749
QUIT☆
221 sakaki.info
Connection closed by foreign host.
これで、myaccount@yahoo.co.jpにメールが届いていればOK。
なお、/etc/tcp.smtpの書き方が悪いと、RCPT TOのところで
553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)
というエラーになります。POP before SMTPなんかでも見られるエラーですね。
参考サイト
http://qmailsolutions.com/qmail/install_qmail.html
http://www.remus.dti.ne.jp/~hori-/java/sendMail-install.htm
http://dyna.geo.kyushu-u.ac.jp/dyna/Linuxmemo/mail.txt
http://www.y-min.or.jp/~nob/qmail/tcpserver.html
不正中継テスト。
http://www.abuse.net/relay.html