HOME/ FreeBSD/ Mail (qmail + courier-imap + fetchmail)

Mail (qmail + courier-imap + fetchmail

qmail

インストールと基本的な設定

まずは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

配送の確認

配送の確認を行う。

ローカルのユーザへの配送 (qmail-injectが行う)

まずは、ローカルに存在するユーザへの配送ができるかどうかか試す。

# 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}>

ローカルの存在しないユーザへの配送 (qmail-injectが行う)

ローカルに存在しないユーザへの配送を行い、 そのメールがエラーメールとして扱われて管理者に届くか確認する。

# 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}>

外部への配送 (qmail-injectが行う)

外部の配送を行うために自ホスト以外へ届くべきアドレス (外部のプロバイダ等) を指定して配送をさせる。

# echo To: tokuda@kiwi.ne.jp | /var/qmail/bin/qmail-inject

きちんと届いているか確認する。携帯のメールなどが確認が楽かも。

SMTP接続の設定

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

courier-imap-1.2.2

# 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

fetchmail

インストールと基本設定

# 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の略である。



HOME/ FreeBSD/ Mail (qmail + courier-imap + fetchmail)

$Lastupdate: Thu Apr 4 00:51:50 2002 $