_Mail/qmail
qmail の導入
セキュアで高速なMTAであるqmailのインストールを行う。qmailにはいくつかのパッチが提供されているが、推奨パッチを適用するのであれば、qmail-1.03にrecommended patchを追加した netqmail-1.06を用いるとインストールの手間を軽減できる。
qmalが提供する機能はMTAの基本機能に限られる。実運用ではPOPサービスでのユーザ認証やSMTPサービスの接続制限は必要となってくるため、それぞれ checkpasswordと、ucspi-tcp(tcpserver)を導入して対応する。
事前作業
実行アカウントの作成を行う。安全なMTA運用のために qmail関連のプロセスには root権限を持たない専用のアカウントを用意する。作成するグループ、アカウントは netqmail-1.06/INSTALL.idsで説明されている通りに準備する。
# groupadd nofiles # useradd -g nofiles -d /var/qmail/alias alias …alias user # useradd -g nofiles -d /var/qmail qmaild …daemon user # useradd -g nofiles -d /var/qmail qmaill …log user # useradd -g nofiles -d /var/qmail qmailp …passwd user # groupadd qmail # useradd -g qmail -d /var/qmail qmailq …queue user # useradd -g qmail -d /var/qmail qmailr …remote user # useradd -g qmail -d /var/qmail qmails …send user
インストール
パッケージを取得・展開して、環境に応じてヘッダファイルの修正を行う。パッケージに含まれる error.hは古い glibc向けに作成されているため、必要に応じて修正を行う。ucspi-tcp は提供されているパッチを適用してもよい。インストール先をデフォルトから変更する場合は conf-homeファイルの設定内容を変更する。
netqmail-1.06 > tar xfz netqmail-1.06.tar.gz > cd netqmail-1.06 > vi conf-qmail …インストール先を変更する場合に修正するファイル。(非推奨) > tar xfz qmail-smtpd-auth-0510.tgz …SMTP AUTH > ./install_smtpd-auth.sh > make # make setup check checkpassword > tar xfz checkpassword-0.90.tar.gz > cd checkpassword-0.90 > vi error.h - extern int errno; + #include <errno.h> > vi conf-home …/var/qmail/bin をインストール先にする - / + /var/qmail > make # make setup check ucspi-tcp > tar xfz ucspi-tcp-0.88.tar.gz > cd ucspi-tcp-0.88 > patch < ../ucspi-tcp-ssl-20050405.patch …ssl通信パッチ patching file error.h > vi conf-home - /usr/local + /usr/local/ucspi-tcp …/usr/local/ucspi-tcp をインストール先にする > make # make setup check
設定
各種制御ファイルの設定を行う。基本設定は パッケージで一緒に提供される config-fastを利用するのが便利。メールドメインを引数にして実行すると、必要最小限の設定ファイルを自動生成してくれる。
> cd netqmail-1.06 # config-fast mail.domain.name Your fully qualified host name is mail.domain.name Putting mail.domain into control/me... Putting domain.name into control/defaultdomain... Putting domain.name into control/plusdomain... Putting mail.domain.name into control/locals... Putting mail.domain.name into control/rcpthosts... Now qmail will refuse to accept SMTP messages except to mail.domain.name Make sure to change rcpthosts if you add hosts to locals or virtualdomains!
外部へのメール転送を行うときに、ISPから中継サーバを指定されている場合は smtproutesファイルを生成する。
# cat > /var/qmail/control/smtproutes cat > smtproutes ... ISPから指定されたSMTPフォワード先(xxx.xxx.xx)を設定 :xxx.xxx.xx
エイリアスの設定を行う。root@、mailer-daemon@、postmaster@宛のメールを管理者メールアドレス(user-accout@)へ転送されるようにしておく。その他転送が必要なアドレスがあればここで一緒に追加しておく。
# cd /var/qmail/alias # echo "&user-account" > .qmail-root # echo "&root" > .qmail-mailer-daemon # echo "&root" > .qmail-postmaster # echo "&root@ > .qmail-webmaster
ucspi-tcp(tcpserver)の接続制限設定を行う。ローカルホストと、ローカルセグメント(10.0.0.0/24)にある端末からの外部サーバへのメール送信要求を許可(環境変数RELAYCLIENTをクリア)する。
> cd /var/qmail/smtpd/ # cat > smtp.cfg 127.0.0.1:allow,RELAYCLIENT="" 10.0.0.:allow,RELAYCLIENT="" :allow # /usr/local/bin/tcprules smtp.cdb smtp.tmp < smtp.cfg
- 以下、編集素材(メモ)****************
パッケージ入手
必要なパッケージを入手する
No. | パッケージ | URL | 説明 |
---|---|---|---|
1 | qmail-1.03.tar.gz | http://cr.yp.to/qmail.html | MTA |
2 | netqmail-1.06.tar.gz | http://qmail.org/ | qmailにセキュリティパッチを充てたもの |
3 | ucspi-tcp-0.88.tar.gz | http://cr.yp.to/ucspi-tcp.html | tcpserver |
3a | ucspi-tcp-glibc.patch | -- | tcpserver のglibcパッチ |
3b | uscpi-tcp-ssl.patch | -- | tcpserver のsslパッチ |
4 | checkpassword-0.90.tar.gz | http://cr.yp.to/checkpwd.html | popパスワード認証 |
5 | qmail-vida-0.51.tar.gz | http://qmail-vida.sourceforge.jp/ | checkpasswordをAPOP対応化 |
6 | relay-ctrl-3.1.1.tar.gz | http://untroubled.org/relay-ctrl/ | POP before SMTP |
7 | daemontools-0.76.tar.gz | http://cr.yp.to/daemontools/install.html | POP before SMTPで利用 |
8 | qmail-smtpd-auth-0510_tgz_bin | http://www.fehcom.de/qmail/smtpauth.html | SMTP Auth パッチ |
アカウント作成
# groupadd nofiles # useradd -g nofiles -d /var/qmail/alias alias # useradd -g nofiles -d /var/qmail qmaild # useradd -g nofiles -d /var/qmail qmaill # useradd -g nofiles -d /var/qmail qmailp # groupadd qmail # useradd -g qmail -d /var/qmail qmailq # useradd -g qmail -d /var/qmail qmailr # useradd -g qmail -d /var/qmail qmails # groupadd vida # useradd -g vida -d /var/qmail qmailu # useradd -g vida -d /var/qmail authdb # usermod -g vida -d /var/qmail/pop pop # mkdir /var/qmail/pop # chown pop.vida /var/qmail/pop
事前準備
> tar xfz netqmail-1.06.tar.gz > tar xfz checkpassword-0.90.tar.gz > tar xfz ucspi-tcp-0.88.tar.gz > tar xfz qmail-vida-0.51.tar.gz
> cd checkpassword-0.90 > vi error.h - extern int errno; + #include <errno.h>
> cd ucspi-tcp-0.88 > patch -p1 < ../ucspi-tcp-glibc.patch patching file error.h
// パッケージの展開先の調整 > cd qmail-vida-0.51 > vi Makefile QMAILSRC = ../netqmail-1.06 CHECKPASSWORDSRC = ../checkpassword-0.90 UCSPITCPSRC = ../ucspi-tcp-0.88 // checkpassword が /etc/passwd も確認するようにする > vi src/checkpassword/conf-withpasswd -0 +1 // netqmail 用にパッチを微修正 > vi patch/qmail.patch * 337行目 - void err_authoriz() { err("authorization first"); } + void err_authoriz(arg) char *arg; { err("authorization first"); } * 339行目 - void okay() { puts("+OK \r\n"); flush(); } + void okay(arg) *arg; { puts("+OK \r\n"); flush(); } * 345行目 - okay(); + okay(0); // パッチ > cd qmail-vida-0.51 > make patch > make copy
コンパイル&インストール
// qmail > cd netqmail-1.06 > make # make setup check // checkpassword > cd checkpassword-0.90 > make # make setup check // tcpserver > cd ucspi-tcp-0.88 > make # make setup check // qmail-vida > cd qmail-vida-0.51/src/vida > make # make setup check
設定
> cd netqmail-1.06 # config-fast mail.domain.name cat rcpthosts ... SMTPを許可するFROM ドメイン xxxx.xxx.xx yyyy.yyy.yy cat > smtproutes ... 外部のSMTPフォワード先 :xxx.xxx.xxx # cd /var/qmail/alias # echo "&root-user-account" > .qmail-root # echo "&root" > .qmail-mailer-daemon # echo "&root" > .qmail-postmaster # echo "&root" > .qmail-webmaster
> cd /var/qmail/smtpd/ # cat > smtp.cfg 127.0.0.1:allow,RELAYCLIENT="" nnn.nnn.nnn.:allow,RELAYCLIENT="" :allow # /usr/local/bin/tcprules smtp.cdb smtp.tmp < smtp.cfg
# /var/qmail/bin/vida-pwdbinit
起動
qmail 起動スクリプト rc.qmail
/var/qmail/boot/home /usr/local/bin/tcpserver -R # IDENTを行わない 0 # ホストを指定しない pop3 # pop3 ポート /var/qmail/bin/qmail-popup # 起動プログラム mail.domain.name # メールドメイン /var/qmail/bin/checkpassword # PWチェック /var/qmail/bin/qmail-pop3d Maildir & # /usr/local/bin/tcpserver -R # IDENTを行わない -u qmaild -g nofiles # qmaild/nofiles 権限で起動 -x /var/qmail/smtpd/smtp.cdb # 接続制御データベース 0 # ホストを指定しない smtp # smtp ポート /var/qmail/bin/qmail-smtpd 2>&1 # 起動プログラム |/var/qmail/bin/splogger smtpd 3 & # ロガー
POP Before SMTP
> tar xfz daemontools-0.76.tar.gz > cd admin/daemontools-0.76/
ヘッダファイルの修正
> vi src/error.h - extern int errno; + #include <errno.h>
コンパイル&インストール
必要なenvdirコマンドのみをコンパイル&インストールする
> package/compile ... # cp command/envdir /usr/local/bin # chown root.root /usr/local/bin/envdir
> tar xvfz relay-ctrl-3.1.1.tar.gz > cd relay-ctrl-3.1.1
インストールパラメータの調整
> vi conf-bin - /usr/local/bin + /usr/local/relay-ctrl/bin > vi conf-man - /usr/local/man + /usr/local/relay-ctrl/man
> make # mkdir /usr/local/relay-ctrl/bin # mkdir /usr/local/relay-ctrl/man # ./installer
# mkdir -p /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 900 > /etc/relay-ctrl/RELAY_CTRL_EXPIRY # crontab -e */5 * * * * envdir /etc/relay-ctrl relay-ctrl-age
/etc/rc.d/rc.qmail
# POP3 (APOP) echo -n "Starting qmail pop daemon: qmail-pop3d" # if you need to use POP3, set environment 'ALLOWPLAIN' to '' env - ALLOWPLAIN='' PATH='/var/qmail/bin:/usr/local/bin:/usr/bin:/bin' \ envdir /etc/relay-ctrl relay-ctrl-chdir \ tcpserver -R 0 pop3 qmail-popup sakamoto.fam.cx \ checkpassword relay-ctrl-allow qmail-pop3d Maildir & echo # SMTP echo -n "Starting qmail smtp daemon: qmail-smtpd" envdir /etc/relay-ctrl relay-ctrl-chdir \ tcpserver -R -u qmaild -g nofiles 0 smtp \ relay-ctrl-check /var/qmail/bin/qmail-smtpd \ 2>&1 | /var/qmail/bin/splogger smtpd 3 & echo
/usr/local/courier-imap/bin/imapd-relay-ctrl-allow
#!/bin/sh export USER=${AUTHENTICATED} /usr/local/bin/relay-ctrl-allow /usr/local/courier-imap/bin/imapd $1
/usr/local/courier-imap/sbin/imapd
... /usr/local/courier-imap/sbin/courierlogger -pid=$PIDFILE -start $LOGGEROPTS \ /usr/local/bin/envdir /etc/relay-ctrl /usr/local/bin/relay-ctrl-chdir \ ★追加 ${exec_prefix}/sbin/couriertcpd -address=$ADDRESS \ -maxprocs=$MAXDAEMONS -maxperip=$MAXPERIP \ $TCPDOPTS \ $PORT ${exec_prefix}/libexec/courier/imaplogin \ /usr/local/courier-imap/bin/imapd-relay-ctrl-allow ${MAILDIRPATH}" ★修正
---
update at 2018/03/02 22:04:51