HOME/ FreeBSD/ Mail (qmail + courier-imap + fetchmail)
まずはqmailのインストールからである。portsからインストールする。
# cd /usr/ports/qmail # make # make install
DNSが引ければちゃんと設定してくれる。 引けない場合はconfig-fastを使う (要調査)。
sendmailを使えなくし、qmailを有効にする
# make disable-sendmail # make enable-qmail
/etc/rc.conf で sendmail_enable="NO" になっているか確認し、 なっていなければそう設定する。
sendmailは殺しておく。
/var/qmail/bootにあるhomeというファイルを起動用ファイルとして /var/qmail/rcという名前でコピーする。rcという名前でコピーする理由は、 /usr/local/etc/rc.d/qmail.shが/var/qmail/rc にシンボリックリンクされているからである。 このおかげで、とくに工夫せずに再起動後にqmailが起動される。
# cd /var/qmail # cp ./boot/home ./rc
portsからインストールすると/var/qmail/aliasに
という空のファイルができている。このままにしておくと mailer-daemon, postmaster, rootあてのメールは/var/qmail/alias/Mailbox に届く。これらのメールを特定のユーザにフォワードするためには、 前述の三つのファイルにフォワードしたいアドレスを書き込む。
# echo "&tokuda@tokuda.net" >> /var/qmail/alias/.qmail-mailer-daemon # echo "&tokuda@tokuda.net" >> /var/qmail/alias/.qmail-postmaster # echo "&tokuda@tokuda.net" >> /var/qmail/alias/.qmail-root
qmailではMaildirを使いたいので、Maildirを作る。
tokuda@centaur> /var/qmail/bin/maildirmake ~/Maildir tokuda@centaur> echo "./Maildir/" > ~/.qmail
qmailを起動してプロセスの確認を行う。
# /var/qmail # ./rc start # ps auxw|grep qmail qmails 4298 0.0 0.4 908 472 p0 S 8:39AM 0:00.01 qmail-send qmaill 4299 0.0 0.4 872 500 p0 S 8:39AM 0:00.00 splogger qmail root 4300 0.0 0.3 872 396 p0 S 8:39AM 0:00.00 qmail-lspawn ./Mailbox qmailr 4301 0.0 0.3 872 408 p0 S 8:39AM 0:00.00 qmail-rspawn qmailq 4302 0.0 0.3 860 428 p0 S 8:39AM 0:00.00 qmail-clean
配送の確認を行う。
まずは、ローカルに存在するユーザへの配送ができるかどうかか試す。
# echo To: tokuda | /var/qmail/bin/qmail-inject
~tokuda/Maildir/newにファイルが存在すれば成功。
tokuda@centaur{120}> cat Maildir/new/994463317.4349.centaur.tokuda.net Return-Path:Delivered-To: tokuda@centaur.tokuda.net Received: (qmail 4346 invoked by uid 0); 6 Jul 2001 23:48:37 -0000 Date: 6 Jul 2001 23:48:37 -0000 Message-ID: <20010706234837.4345.qmail@centaur.tokuda.net> From: tokuda@centaur.tokuda.net To: tokuda@centaur.tokuda.net tokuda@centaur{121}>
ローカルに存在しないユーザへの配送を行い、 そのメールがエラーメールとして扱われて管理者に届くか確認する。
# echo To: hogehoge | /var/qmail/bin/qmail-inject
エラーメールはtokudaにフォワードされるように設定したので、 ~tokuda/Maildir/newにhogehogeあてのファイルが存在すれば成功。
tokuda@centaur{119}> cat Maildir/new/994463466.4363.centaur.tokuda.net Return-Path: <> Delivered-To: tokuda@centaur.tokuda.net Received: (qmail 4360 invoked for bounce); 6 Jul 2001 23:51:05 -0000 Date: 6 Jul 2001 23:51:05 -0000 From: MAILER-DAEMON@centaur.tokuda.net To: tokuda@centaur.tokuda.net Subject: failure notice Hi. This is the qmail-send program at centaur.tokuda.net. I'm afraid I wasn't able to deliver your message to the following addresses. This is a permanent error; I've given up. Sorry it didn't work out.: Sorry, no mailbox here by that name. (#5.1.1) --- Below this line is a copy of the message. Return-Path: Received: (qmail 4357 invoked by uid 0); 6 Jul 2001 23:51:05 -0000 Date: 6 Jul 2001 23:51:05 -0000 Message-ID: <20010706235105.4356.qmail@centaur.tokuda.net> From: tokuda@centaur.tokuda.net To: hogehoge@centaur.tokuda.net tokuda@centaur{120}>
外部の配送を行うために自ホスト以外へ届くべきアドレス (外部のプロバイダ等) を指定して配送をさせる。
# echo To: tokuda@kiwi.ne.jp | /var/qmail/bin/qmail-inject
きちんと届いているか確認する。携帯のメールなどが確認が楽かも。
SMTP接続のためのtcpserverをインストールする。
# cd /usr/ports/sysutils/ucspi-tcp # make # make install
smtpのためのアクセスコントロール (tcp.smtp) を作成する。
/etc/tcp.smtp ----- 192.168.100.:allow,RELAYCLIENT="" 127.:allow,RELAYCLIENT="" -----
この内容は、192.168.100.XXXと127.XXX.XX.XXXからのSMTP接続は許可し、 RELAYCLIENT環境変数を設定する、という意味である。 RELAYCLIENTを設定するとqmailのrcpthostsの内容を見なくなるので、 SMTP接続が可能になる。
rcpthostsはqmail-smtpdが参照するファイルで、 SMTPでいうところのRCPT TO: XXXXXXのXXXXXに当たるところをチェックする。 前の設定でrcpthostsにはローカルのホストしか書かれていないため、 自ホストに出すメールしかqmail-smtpdは許可しない。 これでは外部に出したいメールは出せないことになってしまう。 しかし、環境変数RELAYCLIENTが設定されている場合には、 qmail-smtpdはrcpthostsの内容を検証せずに RCPT TO: ができるようになる。
tcp.smtpをcdb形式に変換する。
# cd /etc # tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
tcpserver経由でのqmail-smtpdの起動部分をrcファイルに追加する。
次の行を/var/qmail/rcに追加する。
tcpserver -x /etc/tcp.smtp.cdb -v -u 82 -g 81 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 &
追加後の/var/qmail/rcはつぎのとおり。
----- まだ -----
qmailを再起動する。
# /var/qmail # ./rc stop # ./rc start
# cd /usr/ports/mail/courier-imap # make # make install
初期化スクリプトを/usr/local/etc/rc.d にシンボリックリンクすると動くような気がしたが実は動かない。
ということで、じかに/usr/local/libexec/courier-imap/imapd.rc を起動するように設定しておく。
/usr/local/etcにある設定ファイルは基本的にそのまま使える。 したがって、/usr/local/etcにある
についてdistを取ったファイル名にする。
起動する
この部分はウソ # cd /usr/local/etc/rc.d # ./imapd.rc start
# cd /usr/ports/mail/fetchmail # make # make install
ユーザで.fetchmailrcを作成する
poll pop.XXXX.XXX.jp protocol pop3 username XXXXXXX password ************ keep no rewrite no mimedecode set postmaster tokuda set no bouncemail set logfile /usr/home/tokuda/.fetchmail.log
パスワードが生で書かれているのでパーミッションを不必要な落す。
tokuda@centaur> chmod og-rwx ~/.fetchmailrc
ログファイルは自動的に作成されないので、touchしておく。
tokuda@centaur> touch ~/.fetchmail.log
まずは、今まで使っていたメーラですべてのメールを取得しておく。 これはバックアップの意味である。 fetchmailの何らかの事故でメールが失われても最小限の被害ですむ。
先の.fetchmailrcのままだと今まで使っていたメーラで読んだメールを skipしてしまうので、keepの前にfetchallをつけて起動する (あるいは.fetchmailrcを直さずに、fetchmail -A で起動する)。
tokuda@centaur> fetchmail ...長い時間がかかる
fetchmailからqmailに全てのメールが飛び、 courier-imap経由で読めるかどうか確認する。
これ以降は.fetchmailrcにfetchallは不要なので削除する。
先の.fetchmailrcではメールサーバにメールを残す設定になっている。 しかし、たまにはサーバ上のメールを消去すべきである。 なぜならばサーバ上にメールが大量にたまってくると、 メールチェックそのものがひどく遅くなるからである。
つねにメールをサーバに残さない設定も可能であるが、 やはり心配である。そこでユーザが明示的にメールを消すように運用したい。
そのためには、.fetchmailrcは変更せずに-Fオプションをつけて起動する。 -Fオプションは既読のメールをサーバ上から消してくれる。 当然、未読のメールは消さないように動作するので安心である。
tokuda@centaur> fetchmail -F
-FのFはflushの略である。
$Lastupdate: Thu Apr 4 00:51:50 2002 $