MTAをqmailにする 2010.03.09  
 (Since 2003.11.10)

  → 更新履歴

●今回の目的
  sendmailにも劣らない高機能,高セキュアな次世代MTAとも言われるqmailを導入する.
そして外出先等のローカルネットワーク外からも使えるように POP Before SMTP を採用する.


●前提条件
  以下の内容を前提条件として説明する.
・ユーザ作業のディレクトリは ~/work/qmail
・SMTPにはSPAMERに利用されないように POP Before SMTP を採用する
・自サーバのネットワークを 192.168.0.0/24 とする
・便宜上インストールするサーバを mail.foo.com ,ドメインを foo.com とする


●qmailの導入
1. ソースの準備
  下記の場所よりソースをゲットし ~/work/qmail 配下に置く.
ソースの在り処と使用したVersion
qmail-1.03.tar.gz http://cr.yp.to/software/qmail-1.03.tar.gz
パッチ ftp://ftp.nlc.net.au/pub/unix/mail/qmail/qmail-date-localtime.patch
ucspi-tcp-0.88.tar.gz http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
checkpassword-0.90.tar.gz http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz


2. 周辺ソフトのインストール
  まずucspi-tcpとcheckpasswordをインストールします.

・ucspi-tcp (tcpserver)のインストール
freebsd > cd ~/work/qmail
freebsd > tar zxvfp ucspi-tcp-0.88.tar.gz
freebsd > cd ucspi-tcp-0.88
freebsd > make
freebsd > su
freebsd # make setup check
freebsd # exit
・checkpassword (POP認証)のインストール
freebsd > cd ~/work/qmail
freebsd > tar zxvfp checkpassword-0.90.tar.gz
freebsd > cd checkpassword-0.90
freebsd > make
freebsd > su
freebsd # make setup check
freebsd # exit


3. qmailのインストール
  前準備として,qmailのディレクトリ作成,user及びgroupを登録します.
その後,ソースを展開しコンパイル
freebsd > su
freebsd # mkdir /var/qmail
freebsd # pw groupadd nofiles -g 30000
freebsd # pw useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent -u 30000
freebsd # pw useradd qmaild -g nofiles -d /var/qmail -s /nonexistent -u 30001
freebsd # pw useradd qmaill -g nofiles -d /var/qmail -s /nonexistent -u 30002
freebsd # pw useradd qmailp -g nofiles -d /var/qmail -s /nonexistent -u 30003
freebsd # pw groupadd qmail -g 30001
freebsd # pw useradd qmailq -g qmail -d /var/qmail -s /nonexistent -u 30004
freebsd # pw useradd qmailr -g qmail -d /var/qmail -s /nonexistent -u 30005
freebsd # pw useradd qmails -g qmail -d /var/qmail -s /nonexistent -u 30006
freebsd # cd ~/work/qmail
freebsd # tar zxvfp qmail-1.03.tar.gz
freebsd # cat qmail-date-localtime.patch | patch -p
freebsd # cd qmail-1.03
freebsd # make setup
freebsd # make check
freebsd # ./config-fast mail.foo.com
freebsd # cd ~alias
freebsd # touch .qmail-postmaster .qmail-mailer-daemon .qmail-root
freebsd # chmod 644 .qmail*
user,groupの登録で番号を指定していますが,指定しなくても可. ただし,指定しておいたほうが以後管理しやすいと思うので指定することを推奨します.
あ,当然の如く mail.foo.com は自分の環境と読替えてくださいね :-)


4. コントロールファイルの確認
  qmailの動作・振る舞いを決定させているのがコントロールファイル. これらは /var/qmail/control/ 配下に位置します. ま,以下のようになっていれば問題ないでしょう.(コントロールファイルの詳細は こちら
defaultdomain (このサーバのドメイン名)
  foo.com
locals (ローカルドメイン名)
  localhost
mail.foo.com
me (自ドメイン名)
  mail.foo.com
rcpthosts (中継ドメイン)
  mail.foo.com


5. SMTPの設定
  とりあえず自分のいるネットワークからSMTPできるようにする.

ucspi-tcpの設定ファイルを書き,DB化します.
freebsd # vi /etc/tcp.smtp
freebsd # /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
/etc/tcp.smtpの中身
127.0.0.1:allow,RELAYCLIENT=""
192.168.0.:allow,RELAYCLIENT=""
:allow
これはローカルマシン,及びローカルネットワークからsmtpを叩かれた際に, RELAYCLIENT という環境変数を宣言することを意味してます.
qmailのsmtpデーモンは RELAYCLIENT と言う環境変数を宣言すると, /var/qmail/control/rcpthosts というファイルを見ずにメールの送信を行う為に動いてくれます. これでリモートからのSMTPを受け付けられる状態になりました.
rcpthosts にはリレー先の許可ホストが列記されている.
当然の如くデフォルト設定は拒否なのでここで設定するには難がある.


6. POPの設定
  qmailのメール保存形式はMaildir方式というものを使っています.
それに対応させたPOP環境を作成します.

まず,ユーザのホームディレクトリにメールを受け取るディレクトリを作成します.
freebsd # /var/qmail/bin/maildirmake Maildir
freebsd # echo "./Maildir/" > .qmail
freebsd # ls -lR Maildir
~/Maildir のパーミッションが700でないとメールの受信が出来ません.
もし,異なっていたらchmodでモード変更しましょう.

また,新規アカウントに対応すべくスケルトンファイルを作っておく
freebsd # /var/qmail/bin/maildirmake /usr/share/skel/Maildir
freebsd # echo ./Maildir/ > /usr/share/skel/dot.qmail


7. qmailの起動
  いよいよqmailの起動です.
まずは起動スクリプトの作成から

/usr/local/etc/rc.d/qmail.shの中身
#!/bin/sh

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/ splogger qmail &

# Start smtpd
/usr/local/bin/tcpserver -x /etc/tcp.smtp.cdb -u 30001 \
-g 30001 0 smtp /var/qmail/bin/qmail-smtpd &

# Start pop3d
/usr/local/bin/tcpserver 0 pop3 /var/qmail/bin/qmail-popup \
mail.foo.com /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &
ちなみに,smtpd起動時のtcpserverのオプションは…
  -u の後ろには qmaild の uid
  -g の後ろには nofiles の gid
を設定します.
念のため /etc/inetd.conf を眺めて, inetd にて smtp 及び pop3 が立ち上がらないことを確認した方が良いでしょう. pop3 を tcpserver で立ち上げているのは特に理由はありません. が,inetd よりも信頼できるので…

sendmailの自動起動(/etc/rc.conf)を停止し, rebootすればqmail環境は一先ず構築完了ということに!

/var/qmail/bin/sendmail はCGI等でsendmailが呼ばれた時に使われますので, qmail版のとリプレイス.
freebsd # mv /usr/sbin/sendmail /usr/sbin/sendmail.zzz
freebsd # ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail


8. テスト
  ここを参考にしてくだされ…
http://www.jp.qmail.org/q103/jinstall/install2.html

これで,ローカルネットワーク内のWindowsクライアント等のリモートからと, ローカルマシンからのメールの送信及び,バリバリの受信環境が整ったことと思います. しかし,このままではローカルネットワークに居ないと, せっかく構築した自分の環境でメールの送信が出来ないという悲しい状態です.
そこで,認証処理付きSMTPとも言える POP Before SMTPを導入しセキュアで便利な環境にしてしまいましょう.


9. POP Before SMTP
  導入がとても簡単なpbs4qをPOP Before SMTPのエンジンにすることとする.
こいつはqmailへのパッチも不要でインストール直後から使える便利な奴です.
ソースを ~/work/qmail 配下に置き,コンパイル開始.
ソースの在り処と使用したVersion
pbs4q-0.0.4.tar.gz http://mambo.kuhp.kyoto-u.ac.jp/~masahiro/pbs4q/pbs4q-0.0.4.tar.gz

・pbs4qのインストール
freebsd > cd ~/work/qmail
freebsd > tar pbs4q-0.0.4.tar.gz
freebsd > cd pbs4q
freebsd > make
freebsd > su
freebsd # make install
そして起動スクリプトの変更
/usr/local/etc/rc.d/qmail.sh
#!/bin/sh

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/ splogger qmail &

# Start smtpd
/usr/local/bin/tcpserver -x /etc/tcp.smtp.cdb -u 30001 \
-g 30001 0 smtp /usr/local/bin/pbs4q /var/qmail/bin/qmail-smtpd &

# Start pop3d
/usr/local/bin/tcpserver 0 pop3 /var/qmail/bin/qmail-popup \
mail.foo.com /bin/checkpassword /usr/local/bin/pbs4q \
/var/qmail/bin/qmail-pop3d Maildir &
太字が今回の追加部分

さらにcron登録.登録後,リブートすれば導入完了です.
freebsd # crontab -e
0 * * * * /usr/local/bin/pbs4qclean_su
 ファイルをセーブして…
freebsd # reboot


10. おしまい
  これで,qmail with POP Before SMTP の環境構築は全て終了.お疲れ様でした.
しかし,qmailはバーチャルサーバ等にも柔軟に対応できる素晴らしいMTA. コントロールファイルの詳細書式等はqmailの公式サイトに詳しく書いてあるので各自で調べましょう (:P


●参考にしたもの
  OCN:Tech Web セキュリティ -Qmail-
qmail 公式日本語サイト
pbs4qの本家


●改版履歴
 
2002.05.15  初版


 [ FreeBSD Top ]   [ This Site Top ]
Wrote by K.Teraki <master@prism-r.com>