カテゴリー:sendmail

imap4-SSL サーバ構築。

JailBreak をやめた iPod に「ソフトウェアアップグレード」したら SSH トンネルが使えないので imap4 を SSL 化する必要がでてきた。

と、言うことで自宅のサーバを imap4-SSL に対応にしてみた。

うちで動作しているサーバは FreeBSD の 6 系 STABLE で ports は 最新の ports-current を追いかけている。動作しているメール環境は sendmail+procmail と courier-imap。つまり、Maildir 形式を利用していることになります。

メールの送信はこの際やめておこう(つまり sendmail の SSL 化は止めておこうと言う意味です(^^;)。iPod Touch でもメールの送信が可能で SMTP サーバを設定する項目はあるのだけど、無線アクセスポイントを利用したときにメールを送信する可能性が有るのかと言えば、あんまりない・・。メールの送信は携帯でやることにしよう(^^;;。

と、言うことで imap4 サーバと pop3 サーバのみを SSL 化することにした。

さてと courier-imap を SSL 対応するのだけど、あまりにも簡単なので驚いた。sendmail+procmail で Maildir 形式に対応した後 ports から courier-imap をインストールするんだけど、courier-authlib と courier-authlib-base も合わせてインストールされます。

全部で以下がインストールされます。courier-imap ってどっかのバージョンで認証方法ががらっと変わったので設定方法も思いっきり変わりました。今回は courier-imap-4.3.0 についてです。

courier-authlib-0.60.2
courier-authlib-base-0.60.2
courier-imap-4.3.0,2

ふつーの imapd と pop3d は現在ではもう既に動いているのですが、インストールは ports を make install しただけで動き出します。すごいっ!! そして Maildir 形式にするには procmail もインストールして /usr/local/etc/procmailrc は以下のように一行だけ書く必要がるんだけど・・。

DEFAULT=$HOME/Maildir/

けど、そーすると sendmail.cf も procmail に対応する必要があるなぁ。/etc/mail/freebsd.mc に以下の行を追加して、/etc/mail で make を実行すれば新しい sendmail.cf と submit.cf ができますので、これで sendmail は MDA に procmail を利用して Maildir に配達てくれるようになるでしょう。

# procmail を利用するための設定
FEATURE(`local_procmail',`/usr/local/bin/procmail',`procmail -a $h -d $u')

make install したらすぐに使える courier-imap だけど imapd の設定は一ヶ所だけ直しました。Thunderbird を使っているとセッションが足りないとか言われるので同一 IP から受け付ける imap のセッション数を増やす必要があります。以下の設定にすれば大丈夫。

#MAXPERIP=4
MAXPERIP=20

続いて imap-SSL と pop3d の設定についてですが、こぉれもちょー簡単。結局なぁんもやること無く動き出してしまった。と、言うのは語弊があるんだけど /usr/local/etc/courier-imap/ の下の imapd.cnf と pop3d.cnf を書いてあげる必要があります。これは SSL の証明書を記述するファイルです。自分のサーバに合ったものに書き直してあげましょう。

二つのファイルが準備できたら後は以下のコマンドを実行します。

# cd /usr/local/share/courier-imap/
# ./mkimapdcert
# ./mkpop3dcert

上記コマンドを実行すると /usr/local/share/courier-imap/ 内に imapd.pem と pop3d.pem と言う証明書が作成されます。後は /usr/local/etc/rc.d/ にある courier-imap-imapd-ssl.sh と courier-imap-pop3d-ssl.sh を実行して起動するだけ。あ、当然、/etc/rc.conf は編集してね;-)。

iPod Touch で接続する前に、まず Thunderbird などで SSL 接続できるか、また、証明書の塩梅を確認してみるのが良いでしょう。非常に簡単に iPod Touch 対応の imap-SSL サーバができてしまいました;-)。

と、言うことで認証のことを書くのを忘れてしました(^^;;。courier-imap の認証部分は courier-authlib がやってくれています。僕はメールを受信するユーザを作成しているので認証は /etc/passwd でやることになります。認証の設定は /usr/local/etc/authlib/authdaemonrc でやるのですが、/etc/passwd で認証するのであればどこも変更する必要はありません。

ただ、/etc/passwd の方ではメールを受信するだけのユーザの場合は shell の設定は /sbin/nologin にしておいたほうが安心でしょう。後は /etc/mail/alias を上手に使うと言う感じですかねぇ。

Leopard に sendmail-8.14.2 をインストール。

以前、Tiger に sendmail-8.14.1 をインストールしたのは書きました。MacOSX は IPv6 対応しているのに MTA である Postfix が IPv6 に対応していないため sendmail に置き換える。と言うのがことの発端であることには変わり有りません;-)。

さて、今回は Apple の最新 OS、しかも UNIX である Leopard にインストールしますが、Tiger に 8.14.1 をインストールしたのと大差ありませんので、割愛するところもあるかと思います。では、行ってみましょう;-)。

・ソースは http://www.sendmail.org/ から持ってくれば良いでしょう。
・/etc/mail は最新の FreeBSD から持ってくるか、以前 8.14.1 をインストールする時に使ったものを代用しても良いでしょう。
・site.config.m4 も以前利用していたもので問題無いでしょう。

それでは sendmail-8.14.2 を make しましょう。注意点としては、Leopaed は Darwin 9.1.0 な OS のバージョンですが、sendmail-8.14.2 は Darwin 8 にしか対応していません。 Build 時のオプションには以下のように指定してあげましょう。

./Build -c -f ~/site.config.m4 -E os=Darwin -E rel=8.9.1

インストール後は 8.14.2 をインストールし時と一緒で mail.local をコピーしたり mkdir や chown したりして環境を整えてあげます。これで大体おしまいです。

さて /etc/passwd にユーザを登録し /etc/group にグループを登録した後、Tiger の場合は NetInfo マネージャでユーザを登録していましたが、Leopard ではあの非常に不便な NetInfo マネージャが無くなり、dscl と言うコマンドで行う用になりました。が、それも大変なので「システム環境設定」のメニューから「ユーザの管理」で追加してください。

最後に起動スクリプトについてですが、Tiger の頃よりも Leopard は launchd がメインになりつつあります。なのでねsendmail も /etc/hostconfig ではなく、launchctl で登録して起動するようにしましょう。sendmail は二つのプロセスが起動するので二つの起動用設定ファイルが必要でする以下になります。

org.sendmail.sendmail.plist
org.sendmail.submit.plist

上記二つのファイルを /Library/LaunchDaemons/ にほうりこんだあと以下のコマンドを root 権限で実行します。

# launchctl load /Library/LaunchDaemons/org.sendmail.sendmail.plist
# launchctl start org.sendmail.sendmail
# launchctl load /Library/LaunchDaemons/org.sendmail.submit.plist
# launchctl start org.sendmail.submit

正常に起動したかは ps コマンドで確認できます。また、以下の launchctl で起動設定されたか確認するとこがてきまする

# launchctl list | grep mail
1 0 org.sendmail.submit
2 0 org.sendmail.sendmail

launchctl コマンドと設定ファイルである plist ファイルにはそれぞれ意味があるのでここには書きませんが頑張ってみてください。もしかすると launchctl load -w /Library/LaunchDaemons/org.sendmail.sendmail.plist などと 「-w」 オプションをつけたりとかするともっと幸せになれたりする場合もあります。

と、言うことで、Tiger から Leopred にバージョンアップしたことで、

・NetInfo マネージャは使わない。
・そろそろ /etc/hostconfig による /Library/StartupItems 使うのやめようよ・・。

の二つはキーワードになるかもしれないですねぇ;-)。


MacOSX に sendmail-8.14.1 をインストール。

僕は Core2Duo な MacBook を持っているんだけど、以前から MacOSX で納得のいってなかったのは、 MTA が IPv6 に対応していないこと。そー。MacOSX では Postfix が default で入っているのだけど、こいつが IPv6 に対応していないX-(。

なので最近は、FreeBSD の sendmail のバージョンがアップする度に MacOSX に sednamil をインストールしている。今回はそのインストール方法についてまとめて掲載してみよう。まぁ、一種の自分の忘却録みたいなモンだけどね(^^;;。

僕の手元には FreeBSD があるので MacOSX に最新版の sendmail をインストールするときには FreeBSD が必須となっています。以下、MacOSX に sendmail をインストールするときに必要なもの。

1. FreeBSD の /etc/mail 配下一式。FreeBSD STABLE などから tar で固めて持ってきましょう;-)。
2. /usr/ports/mail/sendmail/files/site.config.m4 と site.config.m4.ipv6
IPv6 対応にする sendmail にするためには以下のコマンドを打って site.config.m4 を作成すれば良いでしょう。

% cd /usr/ports/mail/sendmail/files/
% cat site.config.m4 site.config.m4.ipv6 > ~/site.config.m4
3. sendmail-8.14.1 のソースコード。

さぁ。準備は整いましたか?では続いて sendmail の build と行ってみましょうか。

1. MacOSX 上で sendmail のソースを展開します。
2. Build スクリプトを実行します。大体以下のような感じ。os と rel は uname -a コマンドを実行し、自分の MacOSX のバージョンに合わせます。

% cd /usr/local/src
% tar xvzfp sendmail.8.14.1.tar.gz
% cd sendmail-8.14.1
% ./Build -c -f ~/site.config.m4 -E os=Darwin -E rel=8.9.1

次に build が終わったらインストールしますがその前にディレクトリを掘って上げます。なお、Build install では mail.local をインストールしてくれないのでこれだけは手でインストールします。また、sendmail.cf を作成するために cf ディレクトリを /usr/share/sendmail/ 配下にコピーします。

# mkdir /var/spool/clientmqueue
# mkdir /etc/mail
# mkdir /usr/share/man/cat1
# mkdir /usr/share/man/cat5
# mkdir /usr/share/man/cat8
# ./Build install -E os=Darwin -E rel=8.9.1
# cp -pr ./obj.Darwin.8.9.1./mail.local/mail.local /usr/libexec/
# cp -pr cf /usr/share/sendmail/

以上で sendmail のインストールは完了です。

FreeBSD から /etc/mail 配下を持って来ているのでそれをそのまま MacOSX に展開します。/etc/mail 配下では bsdmake とたたくと m4 マクロから sendmail.cf を作成してくれることでしょう。

しかし、これだけでは sendmail が動作しないのが MacOSX です。sendmail が正しく動作するために環境を整える必要があります。

まずは NetInfo マネージャで sendmail が動作するユーザを登録します。これは FreeBSD の /etc/passwd、group ファイルと同じでいいでしょう。 以下の二つを NetInfo マネージャ から users と groups に登録します。

- /etc/passwd
smmsp:*:25:25:Sendmail_Submission_User:/var/spool/clientmqueue:/usr/sbin/nologin
- /etc/group
smmsp:*:25:

次に各種ディレクトリの整合性を取ります。sendmail 用のディレクトリを作成します。また、sendmail は自分が参照するディレクトリが 775 だと動かないのでそれを直してあげる必要があります。裏を返すと MacOSX は全然安全では無い OS。と言うことですね・・X-(。

# chown root:smmsp /usr/sbin/sendmail
# chown smmsp:smmsp /var/spool/clientmqueue
# chown root:smmsp /var/mail
# chown root:daemon /var/spool/mqueue

#chmod 40770 /var/spool/clientmqueue
#chmod 40750 /var/spool/mqueue

# chmod 40755 /Users/
# chmod 40755 /Users/takachan/
# chmod 40755 /
# cp /dev/null /var/log/sendmail.st


さてと・・。最後の三つの chmod でディレクトリのバーミッションを変更していますが、これやると、一般ユーザから NetInfo マネージャが動作しなくなります(ユーザ情報の登録・変更などができなくなります)。怖いですねぇ・・。しかし、775 になっている OS はそーそー使いたくないものです。この際だから 755 に変更してしまいましょう。

NetInfo マネージャが使えなくなると困るので、ログイン画面から root でログインできるようにします。NetInfo マネージャで root にパスパードを設定してあげれば良いです。そうすれば、NetInfo マネージャを使いたい場合は、いつでも root でログインして利用することができます。

以上で sendmail のインストールは完了です。後はスタートアップスクリプトを書くだけです。まぁ、あれなんですけど、/etc/hostconfig から起動するようにしましょうかね。以下の行を /etc/hostconfig に書きます。

# User Services
MAILSERVER=-YES-

でもって起動スクリプトSendmail を用意しました。これを /Library/StartupItems/ に展開すれば、起動時に sendmail が起動するようになるでしょう。

さて、これで以上ですが、あなたも MacOSX で IPv6 な MTU の世界をお楽しみください;-)。

local-host-namesを使わないバーチャルホストの設定。

sendmail の設定でバーチャルホストを利用するには「/etc/mail/local-host-names に受信するドメインを登録しましょう。」ってのがほとんどなんだよねぇ・・。けど、まぁ、楽なのでええんですけど、送信時に問題があることが判明。

例えば、以下のファイルがあったとして、これを cat FILE | mail takachan@running-dog.net したとすると Reply-To: に指定したメールアドレスのドメイン名が sendmail.cf 内の DM に掲載されているドメイン名で上書きされてしまう。という、どうしようもない問題に遭遇するX-(。バーチャルドメインでのメールの送信時の問題ですね。バーチャルドメインのメールが受信できることだけで満足してたらいかんぜぉ。って感じ。

To: test@test.jp
Subject: test
From: takano@test.jp
Reply-To: test00@test.jp

test


ドメイン名を上書きしてしまうのは Reply-To: ヘッダだけなので、あまり気にならない人とか気づかない人もいるのかな?

しゃーないので local-host-names を使わないバーチャルドメインの設定をするしかない。今回は VIRTUSER_DOMAIN_FILE 項を使って mc ファイルを書き直してみたい。

/etc/mail/freebsd.mc があるんだけど、この中の一部を以下のように修正。class{w} のバーチャルホストの設定を利用しないようにして class{VirtHost} を利用する。

# no class{w} added class{VirtHost}
#define(`confCW_FILE', `-o /etc/mail/local-host-names')
VIRTUSER_DOMAIN_FILE(`-o /etc/mail/virtdomains')

この設定だけだと、sendmail.cf の DM が無くなるので、以下の行を更に追加。

Dwmail
Dmicmpv6.org
define(`confDOMAIN_NAME', `$w.$m')

以上、できたら make してでき上がり。sendmail.cf の Dj は自分の好みで編集するとして、ローカルホスト配信がもしかしたらエラーになるかもしれないので submit.cf の Dj も設定して上げれば問題はなくなることでしょう。

/etc/mail/virtdomains は、/etc/mail/local-host-names と同じ記述方法で特に問題はないでしょう。

あ、書いてないけど、/etc/mail/virtusertable については触れてませんけど、他のドキュメントとか読んでくださいね;-)。

 
Copyright (c) 1997-2007 takachan@running-dog.net All Rights Reserved.