[qmail] qmailのインストール+POP before SMTP

久しぶりに qmail をインストールしたので、そのメモです。
qmail・tcpserver・daemontools を入れています。
また、relay-ctrl を使った POP before SMTP を設定しました。
リプレイス前の旧サーバで使っていた環境を再現するため、
生POP3を使っているのは△なところ。OS は Fedora Core 5 です。
注記のない作業(コンパイル以外)は、root権限で行っています。

sendmailをアンインストールする


★yumでsendmailをアンインストールする
yum remove sendmail
⇒qmailとsendmailが混在していると、いろいろと面倒もあるので
 Fedoraデフォルトのsendmailは安全のために削除しておきます。
 一緒にいくつかのパッケージが削除されますが、気にしない。

qmailをインストールする


★qmail・tcpserver・daemontools等のソース一式をダウンロードしてくる
ftp://ring.ocn.ad.jp/pub/net/djbtools/qmail-1.03.tar.gz
ftp://ring.ocn.ad.jp/pub/net/djbtools/ucspi-tcp-0.88.tar.gz
ftp://ring.ocn.ad.jp/pub/net/djbtools/daemontools-0.76.tar.gz
ftp://ring.ocn.ad.jp/pub/net/djbtools/checkpassword-0.90.tar.gz
ftp://ftp.pipeline.com.au/pipeint/sources/linux/webmail/qmail-date-localtime.patch.txt
http://mirror.averse.net/pub/FreeBSD/ports/local-distfiles/sada/qmail-date-localtime.patch.gz
ftp://ftp.pipeline.com.au/pipeint/sources/linux/webmail/qmail-limit-bounce-size.patch.txt
http://js.hu/package/qmail/qmail-1.03-reread-concurrency.2.patch
http://patch.be/qmail/badrcptto.patch
http://untroubled.org/relay-ctrl/relay-ctrl-3.1.1.tar.gz

★qmailユーザの作成(uid・gid番号は↓の限りでなくてOK)
mkdir /var/qmail
groupadd --gid 2002 nofiles
useradd --uid 2002 --gid nofiles --home-dir /var/qmail/alias --shell /bin/false alias
useradd --uid 2003 --gid nofiles --home-dir /var/qmail --shell /bin/false qmaild
useradd --uid 2004 --gid nofiles --home-dir /var/qmail --shell /bin/false qmaill
useradd --uid 2005 --gid nofiles --home-dir /var/qmail --shell /bin/false qmailp
groupadd --gid 2003 qmail
useradd --uid 2006 --gid qmail --home-dir /var/qmail --shell /bin/false qmailq
useradd --uid 2007 --gid qmail --home-dir /var/qmail --shell /bin/false qmailr
useradd --uid 2008 --gid qmail --home-dir /var/qmail --shell /bin/false qmails

★qmail のコンパイル~インストール ※一般ユーザ権限
tar xfz qmail-1.03.tar.gz
cd qmail-1.03/
gunzip ../qmail-date-localtime.patch.gz
patch -p1 < ../qmail-date-localtime.patch
patch -p1 < ../qmail-limit-bounce-size.patch.txt
patch -p1 < ../qmail-1.03-reread-concurrency.2.patch
patch -p1 < ../badrcptto.patch
echo "gcc -O2 --include /usr/include/errno.h" > conf-cc
make
su root -c "make setup check"
<パッチ補足>
※qmail-limit-bounce-size.patch
  qmail-send.cにパッチをあてる
  /var/qmail/crontrol/bouncemaxbytes で
  エラーメールに添付する最大サイズを制限できるパッチ
  デフォルト:50KB(小さすぎるかな)
⇒2007/03/07現在、入手できない模様…。

※qmail-date-localtime.patch
  date822fmt.cにパッチをあてる
  Received: 行等を GMT じゃなくて JST で書いてくれるパッチ
  日本国内で運用するサーバには必須のパッチ

※qmail-1.03-reread-concurrency.2.patch
  -HUP 時に concurrencylocal/remote ファイルを再読み込みする

※qmail-1.03-mfcheck.4.patch
  メール着信時に差出人アドレスの @ の右側で DNS 検索を行って、
  存在しないドメインからのメールは、着信拒否できるパッチ
  553 sorry, your envelope sender domain must exist (#5.7.1)

※conf-cc
  conf-cc の内容がデフォルトでは「cc -O2」となっているのを
  「gcc -O2 --include /usr/include/errno.h」に変更する
  「#include <errno.h>」していることになる(のかな多分)

★各ホストごとの設定
./config-fast foo.example.jp
⇒第1引数にホスト名を指定する

★sendmailクローンでメール送信の互換性を保つ
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
ln -s /var/qmail/bin/sendmail /usr/lib/sendmail

★各種初期値の設定を行う
ls -l /var/qmail/control/
rm -f /var/qmail/control/defaultdomain
rm -f /var/qmail/control/locals
rm -f /var/qmail/control/plusdomain
echo "50" > /var/qmail/control/concurrencyremote
echo "20000000" > /var/qmail/control/databytes
echo "example.jp" > /var/qmail/control/bouncehost
echo "432000" > /var/qmail/control/queuelifetime
head /var/qmail/control/*
<設定ファイル補足>
/var/qmail/control/concurrencyremote
  リモート配送を同時に行える最大の数を指定します(qmail-send)
/var/qmail/crontrol/databytes
  受信メッセージに許される最大バイト数を指定します(qmail-smtpd)
  20MBを指定しています
/var/qmail/control/bouncehost
  メールを返送するホストを指定します(qmail-send)
  MAILER-DAEMON@example.jp になるように設定しています
/var/qmail/control/queuelifetime
  メッセージがキュー内に留まることができる期間を、秒数で指定します(qmail-send)
  5日間に設定しています
/var/qmail/control/mfcheck
  メール着信時に差出人アドレスの @ の右側で DNS 検索を行って、
  存在しないドメインからのメールは、着信拒否します
  (外部から着信するメールサーバのみで指定。社内サーバでは使用しない)

★最低限のエイリアス設定
echo "bar@example.jp" > /var/qmail/alias/.qmail-postmaster
echo "bar@example.jp" > /var/qmail/alias/.qmail-mailer-daemon
echo "bar@example.jp" > /var/qmail/alias/.qmail-root
chmod 644 /var/qmail/alias/.qmail-*
head /var/qmail/alias/.qmail-*

★double bounce エラー通知メールを発生させない設定
echo "#" > /var/qmail/alias/.qmail-doublebounce
echo "doublebounce" > /var/qmail/control/doublebounceto

★tcpserverのインストール(SMTPの受付に利用) ※一般ユーザ権限
tar zxf ucspi-tcp-0.88.tar.gz
cd ucspi-tcp-0.88
echo "gcc -O2 --include /usr/include/errno.h" > conf-cc
make
su root -c "make setup check"

★daemontoolsのインストール(プロセス監視に利用) 
mkdir /package
chmod 755 /package
chmod +t /package
tar zxf daemontools-0.76.tar.gz -C /package
cd /package/admin/daemontools-0.76
echo "gcc -O2 --include /usr/include/errno.h" > src/conf-cc
./package/install
※この時点で /etc/inittab に svscanboot が記載されるので、
 OS を再起動すれば、svc が稼動する。
 ただし、qmail の自動起動は設定されていない状態。

★daemontoolsを用いたqmailの起動準備 
mkdir /var/qmail/supervise
mkdir /var/qmail/supervise/qmail-smtpd
mkdir /var/qmail/supervise/qmail-send
⇒設定用ディレクトリを作成する

★/var/qmail/supervise/qmail-smtpd/run を作成する 
#!/bin/sh
HOST=foo.example.jp
QUID=`id -u qmaild`
QGID=`id -g qmaild`
exec \
  /usr/local/bin/tcpserver \
    -H -v -R -c 50 -x /etc/tcp.smtp.cdb \
    -l "$HOST" -u "$QUID" -g "$QGID" 0 smtp \
  /var/qmail/bin/qmail-smtpd 2>&1
⇒HOSTの行にマシン名を指定する
⇒tcpserver options host port program
  -H リモートホスト名を調べない。
  -v すべてのメッセージを出力する
  -R IDENTを行わない。
  -c limit 最大同時接続数の設定。デフォルトは40
  -x rules.cdb 接続制御を行うときの接続制御データベースのファイル名
  -l localname ローカルホスト名を調べるのをやめて、localname を TCPLOCALHOST にセットする
  -u uid ユーザIDを uid に切り替える
  -g gid グループIDを gid に切り替える
  host が 0 の場合、サーバを起動するIPアドレスを特定しない

★/var/qmail/supervise/qmail-send/runを作成する 
#!/bin/sh
exec env - PATH="/var/qmail/bin:$PATH" qmail-start ./Maildir/ splogger qmail
⇒/var/log/maillog にログが溜まる設定です

★run スクリプトに実行権限を付与 
chmod 755 /var/qmail/supervise/qmail-send/run
chmod 755 /var/qmail/supervise/qmail-smtpd/run
⇒これで準備は終わったが、まだ自動起動はしません

★tcp.smtpの設定
/etc/tcp.smtp
127.:allow,RELAYCLIENT=""
218.223.31.12:allow,RELAYCLIENT=""
⇒自ホストと特定ホストからのメール送信を全て許可する
 その他のホストから送信されたメールは、rcpthosts に登録してある
 ドメイン宛のメールのみ許可して、それ以外は拒否する

★tcp.smtp の 変更箇所は tcp.smtp.cdb に反映させる
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

★qmail-send・qmail-smtpd の開始
ln -s /var/qmail/supervise/qmail-send /service/qmail-send
ln -s /var/qmail/supervise/qmail-smtpd /service/qmail-smtpd
sleep 5; /command/svstat /service/*; pstree
⇒/service/配下にシンボリックリンクを作成すると、
 svc によって自動的(5秒以内)に両runプログラムが起動される

POPサーバも稼動させる場合


以上は、SMTPサーバとしてメール送信ができるようにする設定でした。
ローカルサーバのMaildirに溜まったメールをPOP受信するには、
qmail-popupとqmail-pop3dを利用します。

★POPパスワード認証用の checkpassword をインストールする ※一般ユーザ権限
tar zxvf checkpassword-0.90.tar.gz
cd checkpassword-0.90
echo "gcc -O2 --include /usr/include/errno.h" > conf-cc
make
su root -c "make setup check"
ls -l /bin/checkpassword

★/var/qmail/supervise/qmail-pop3d/run
#!/bin/sh

HOST=foo.example.jp

exec \
  /usr/local/bin/tcpserver \
    -H -v -R -c 50 0 pop3 \
  /var/qmail/bin/qmail-popup "$HOST" /bin/checkpassword \
  /var/qmail/bin/qmail-pop3d Maildir 2>&1

★qmail-pop3d の開始
chmod 755 /var/qmail/supervise/qmail-pop3d/run
ln -s /var/qmail/supervise/qmail-pop3d /service/qmail-pop3d
sleep 5; /command/svstat /service/*; pstree
⇒/service/配下にシンボリックリンクを作成すると、
 svc によって自動的(5秒以内)にrunプログラムが起動される

POP-before-SMTP を利用する場合


qmail 標準の POP サーバでは、POP before SMTP が利用できません。
relay-ctrl を追加インストールすることで、利用可能になります。

★relay-ctrlをインストールする(POP before SMTP用)
tar zxvf relay-ctrl-3.1.1.tar.gz
cd relay-ctrl-3.1.1
make
su root -c "mkdir /usr/local/man"
su root -c "./installer"
⇒Fedora Core 5デフォルトでは/usr/local/manが存在しないんですね

★relay-ctrlの初期設定
mkdir /var/spool/relay-ctrl
mkdir /var/spool/relay-ctrl/allow
chmod 700 /var/spool/relay-ctrl
chmod 777 /var/spool/relay-ctrl/allow
mkdir /etc/relay-ctrl
echo "/var/spool/relay-ctrl/allow" > /etc/relay-ctrl/RELAY_CTRL_DIR
echo "600" > /etc/relay-ctrl/RELAY_CTRL_EXPIRY
⇒POP before SMTPの有効期間を600秒(10分間)に設定しています

★rootのcrontabに追加する(crontab -e)
*/5 * * * * /usr/local/bin/envdir /etc/relay-ctrl /usr/local/bin/relay-ctrl-age
⇒5分おきに有効期間のチェックを行います
 (そのため、実際の有効期間は10~15分間になります)

★/var/qmail/supervise/qmail-pop3d/runを書き換える
#!/bin/sh

HOST=foo.example.jp

exec /usr/local/bin/envdir /etc/relay-ctrl \
  /usr/local/bin/relay-ctrl-chdir \
  /usr/local/bin/tcpserver -H -v -R -c 50 0 pop3 \
  /var/qmail/bin/qmail-popup "$HOST" /bin/checkpassword \
  /usr/local/bin/relay-ctrl-allow \
  /var/qmail/bin/qmail-pop3d Maildir 2>&1

★/var/qmail/supervise/qmail-smtpd/run を書き換える
#!/bin/sh

HOST=foo.example.jp
QUID=`id -u qmaild`
QGID=`id -g qmaild`

exec /usr/local/bin/envdir /etc/relay-ctrl \
  /usr/local/bin/relay-ctrl-chdir \
  /usr/local/bin/tcpserver -H -v -R -c 50 \
    -l "$HOST" -u "$QUID" -g "$QGID" 0 smtp \
  /usr/local/bin/relay-ctrl-check \
  /var/qmail/bin/qmail-smtpd 2>&1
⇒qmail-smtpdもrelay-ctrlを参照するようにします

★qmail-smtpd/qmail-pop3dの再起動
svc -t /service/qmail-smtpd
svc -t /service/qmail-pop3d
/command/svstat /service/*


iptablesの設定


iptablesが有効になっているので、ホスト外部からはアクセスできません。
SMTP(25番ポート)とPOP(110番ポート)に穴を開けます。

★/etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 110 -j ACCEPT

★iptablesを再起動する(root権限)
service iptables restart

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 10

なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー)
驚いた 驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

この記事へのコメント

2006年04月10日 18:29
メールアドレスとか、ちょっと修正した。
AveryTig
2017年06月16日 00:40
ヒ黑矜燾� �蒻上矢印1 http://finhelp.cu.cc/ 矜渼� �魲 �蒡珞��下矢印1� 萵磊 �籵澵顥 �四角数字1�� []蒻 ��磊� 矜渼魵韃 �蒻上矢印1 �ⅱ�淸褊ザ・マーク�韜 褪 � �鞦� �蒻上矢印1 碵[] �蒻四角数字9鵫 ⅱ聰湜鈞イタリア国旗�, ⅳ�上矢印1� 粽 糂襄 四角数字1[]頸ⅱ鞨��燾� 趾褊�� 矜渼�  蒟�裘鐱 � 鸙濵�ⅸ褊燾� ��. ヘ褓砌瑙濵 �魵褞頸� �瑟� 淲���, 粢蕈 � �[]鳫韃 胛蕘 矜鈞� 浯�鸙湜�� 魲�燾� �鸙顆褥大丸1黑 ��渼頏�チューリップ四角数字0籵�, � �褪鮏� 頷 �葢韆褊� �� 粢褊濵 浯鞦鸙裹 璢鞣燾��. マ鸙頸� 韲褥大丸1�, 萵趺 褥�� � 矜渼� ⅳ�珸琿�. ミ褊四角数字1� �韈竟� �鮏蕣瑙褪�, ��炅� � 鈞[]粲瑣�  韈糶籵� �黑¬� 蓼裹糺�. ミ琅� �鵰� 瑟褞韭瑙頷 蒟砒四角数字0糺� 粨鈞� �蒻四角数字9鵫 �鸙ⅲ�. ネ�-鈞 �USA� 髜跖聰, 浯跫鮱 �鶴四角数字4� 浯鞦鸙裹 四角数字0鴒鞣鮱, 鸙��� 蒟鴦大丸1� http://finhelp.cu.cc/ 浯鞦鸙裹 裝頸� 鶴� 鈕瑙韃, � finhelp.cu.cc �蒻上矢印1 �鶴四角数字4�.

砒� ⅳ�珸� �蒻�

この記事へのトラックバック