Mail/qmail
qmail の導入
セキュアで高速なMTAであるqmailのインストールを行う。qmailにはいくつかのパッチが提供されているが、推奨パッチを適用するのであれば、qmail-1.03にrecommended patchを追加した netqmail-1.06を用いるとインストールの手間を軽減できる。
qmalが提供する機能はMTAの基本機能に限られる。実運用ではPOPサービスでのユーザ認証やSMTPサービスの接続制限は必要となってくるため、それぞれ checkpasswordと、ucspi-tcp(tcpserver)を導入して対応する。
パッケージ入手
必要なパッケージを入手する
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-ssl.patch | -- | tcpserver のsslパッチ |
4 | checkpassword-0.90.tar.gz | http://cr.yp.to/checkpwd.html | ユーザパスワード認証 |
4a | checkpassword-pam-0.96.tar.gz | http://checkpasswd-pam.sourceforge.net | ユーザパスワード認証。PAM版 |
5 | qmail-smtpd-auth-0510_tgz_bin | http://www.fehcom.de/qmail/smtpauth.html | SMTP Auth パッチ |
事前作業
実行アカウントの作成を行う。安全なMTA運用のために qmail関連のプロセスには root権限を持たない専用のアカウントを用意する。作成するグループ、アカウントは netqmail-1.06/INSTALL.idsで説明されている通りに準備する。
# groupadd -g 900 nofiles # useradd -u 900 -g nofiles -d /var/qmail qmaild …daemon user # useradd -u 901 -g nofiles -d /var/qmail qmaill …log user # useradd -u 902 -g nofiles -d /var/qmail qmailp …passwd user # useradd -u 903 -g nofiles -d /var/qmail/alias alias …alias user # groupadd -g 901 qmail # useradd -u 904 -g qmail -d /var/qmail qmailq …queue user # useradd -u 905 -g qmail -d /var/qmail qmailr …remote user # useradd -u 906 -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 ... cp: cannot create regular file '/var/qmail/doc/': No such file or directory ※README.auth のコピー失敗。後で手作業でコピーするのでここでは無視で良い。 ... > make # make setup check # cp README.auth /var/qmail/doc/ # chown root.qmail /var/qmail/doc/README.auth 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 FILES ... patching file tcpserver.c patching file who@.1 > vi conf-home - /usr/local + /usr/local/ucspi-tcp …/usr/local/ucspi-tcp をインストール先にする > make # make setup check
- HINT1: checkpasswordの動作確認方法
- プロセス置換で descriptor 3へ流し込んだusernameとpasswordでテストできる。
# exec 3< <(echo -e "username\0password\0") # /var/qmail/bin/checkpassword pwd /home/sample
- または、qmailのPOPプログラムでも確認できる。
# /var/qmail/bin/qmail-popup localhost /var/qmail/bin/checkpassword pwd +OK <4368.1602393112@localhost> user sample +OK pass pw1234 /home/sample
- HINT2: PAM版のcheckpassword
- checkpassword-pam -s checkpassword-pam
> tar xfz checkpassword-pam-0.96.tar.gz > cd checkpassword-pam-0.96 > ./configure --prefix=/var/qmail > make # make install # cat > /etc/pam.d/checkpassword-pam #%PAM-1.0 # auth required pam_nologin.so auth include system-auth account include system-auth session include system-auth EOF
設定
各種制御ファイルの設定を行う。基本設定は パッケージで一緒に提供される 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 ... 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
SMTPS用のRSA鍵・SSL証明書を作成する
# cat server.crt server.key > /var/qmail/smtpd/qmail.pem
起動
qmail 起動スクリプト rc.qmail
SMTP-AUTH(checkpassword-pam)の場合
#!/bin/sh # # start/stop qmail daemon # # chkconfig: 2345 80 10 # PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin case "$1" in start) # qmail env - PATH="/var/qmail/bin:$PATH" qmail-start ./Maildir/ splogger qmail & # SMTP tcpserver -R # IDENTを行わない -u qmaild -g nofiles # qmaild/nofiles 権限で起動 -x /var/qmail/smtpd/smtp.cdb # 接続制御データベース 0 # ホストを指定しない smtp # smtp ポート /var/qmail/bin/qmail-smtpd # 起動プログラム /var/qmail/bin/checkpassword-pam -s checkpassword-pam /bin/true 2>&1 | /var/qmail/bin/splogger smtpd 2 & # ロガー # SMTPS tcpserver -R # IDENTを行わない -s -n /var/qmail/smtpd/qmail.pem -u qmaild -g nofiles # qmaild/nofiles 権限で起動 -x /var/qmail/smtpd/smtp.cdb # 接続制御データベース 0 # ホストを指定しない smtps # smtps ポート /var/qmail/bin/qmail-smtpd # 起動プログラム /var/qmail/bin/checkpassword-pam -s checkpassword-pam /bin/true 2>&1 | /var/qmail/bin/splogger smtpd 2 & # ロガー ;; stop) PID=$(ps -aefw | grep qmail | awk '{print $2}') if [ ! -z "${PID}" ]; then kill ${PID} 1> /dev/null 2>&1 fi ;; esac exit 0
---
update at 2022/01/09 14:28:25