Mail/qmail+
qmail の導入 (執筆中)
セキュアで高速なMTAであるqmailのインストールを行う。qmailにはいくつかのパッチが提供されているが、推奨パッチを適用するのであれば、qmail-1.03にrecommended patchを追加した netqmail-1.06を用いるとインストールの手間を軽減できる。
但し、qmalが提供する機能はMTAの基本機能のみとなるため、セキュリティを強化するような場合は追加で各種アプリを導入する必要がある。今回は下記の通り、不正防止機能とIMAP機能を追加で導入する。
- tcpserver
- DOS攻撃対策やアクセス制限
- SMTP-Auth
- メール送信でユーザ認証を行うようにする
- IMAP
- 受信メールをサーバ側で管理し、複数のクライアントでメールを共有可能とする
事前作業
実行アカウントの作成を行う。安全な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 + smtp-auth
> tar xfz netqmail-1.06.tar.gz
> cd netqmail-1.06
> tar xfz qmail-smtpd-auth-0510.tgz … SMTP-AUTHのパッケージ
> ./install_smtpd-auth.sh
> vi conf-qmail …インストール先を変更する場合に修正するファイル。(非推奨)
> 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 (tcpserver)
> tar xfz ucspi-tcp-0.88.tar.gz
> cd ucspi-tcp-0.88
> patch -p0 ../ucspi-tcp-ssl.patch
patching file FILES
patching file Makefile
...
patching file who@.1
> vi conf-home
- /usr/local
+ /var/qmail …/var/qmail/bin をインストール先にする
> make
# make setup check
基本設定
各種制御ファイルの設定を行う。基本設定は パッケージで一緒に提供される config-fastを利用するのが便利。メールドメインを引数にして実行すると、必要最小限の設定ファイルを自動生成してくれる。
> cd netqmail-1.06 # config-fast mailserver.co.jp Your fully qualified host name is mail.domain.name Putting mailserver.co.jp into control/me... Putting co.jp into control/defaultdomain... Putting co.jp into control/plusdomain... Putting mailserver.co.jp into control/locals... Putting mailserver.co.jp 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!
[defaultdomain]
co.jp
[locals]
mailserver.co.jp
[me]
mailserver.co.jp mailserver localhost
[plusdomain]
co.jp
[rcpthosts]
mailserver.co.jp
メール送信中継
外部へのメール転送を行うときに、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 # /var/qmail/bin/tcprules smtp.cdb smtp.tmp < smtp.cfg
起動
- qmail本体の起動
# qmail-start ./Maildir/ splogger qmail &
- SMTPサーバの起動
- tcpserverでsmtpポート(25)を待ち受けて、リクエストがある度にqmail-smtpdを起動する。
tcpserver -R ($TCPREMOTEINFO(IDENT情報)を問合せない)
-u {実行ユーザID} -g {実行グループID}
-x {アクセス制限管理DB}
{待ち受けIPアドレス}
{待ち受けポート番号}
{実行プログラム}
qmail-smtpd {認証プログラム}
認証プラグラムの正常終了を待ってからsmtpd動作する。
checkpassword {実行プログラム}
Descriptor 3 から読み込んだ username password timestamp で認証し、成功すれば{実行プログラム}を起動する。
ex.
printf "%s\0%s\0%s\0" username password Y123456 | checkpassword id 3<&0
tcpserver -R -u qmaild -g nofiles \
-x /var/qmail/smtpd/smtp.cdb \
0 smtp /var/qmail/bin/qmail-smtpd \
/var/qmail/bin/checkpassword /bin/true 2>&1 \
| /var/qmail/bin/splogger smtpd 3 &
起動設定
[/etc/rc.d/rc.qmail]
#!/bin/sh
#
# start/stop qmail daemon.
#
# chkconfig: S 80 10
#
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
case "$1" in
start)
# qmail
echo -n "Starting qmail daemon: qmail-start"
env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/ splogger qmail &
echo
# POP3 (APOP)
echo -n "Starting qmail pop daemon: qmail-pop3d"
tcpserver -R \
\
0 pop3 /var/qmail/bin/qmail-popup sakamoto.fam.cx \
/var/qmail/bin/checkpassword \
qmail-pop3d Maildir 2>&1 \
| /var/qmail/bin/splogger pop3d 3 &
echo
# SMTP
echo -n "Starting qmail smtp daemon: qmail-smtpd"
tcpserver -R -u qmaild -g nofiles \
-x /var/qmail/smtpd/smtp.cdb \
0 smtp /var/qmail/bin/qmail-smtpd \
/var/qmail/bin/checkpassword /bin/true 2>&1 \
| /var/qmail/bin/splogger smtpd 3 &
# SMTP over SSL
tcpserver -R -u qmaild -g nofiles \
-s -n /var/qmail/qmail.pem \
-x /var/qmail/smtpd/smtp.cdb \
0 smtps /var/qmail/bin/qmail-smtpd \
/var/qmail/bin/checkpassword /bin/true 2>&1 \
| /var/qmail/bin/splogger smtpd 3 &
echo
;;
stop)
echo -n "Stoping qmail daemons..."
PID=$(ps -aefw | grep qmail | awk '{print $2}')
if [ ! -z "${PID}" ]; then
kill $(ps -aefw | grep qmail | awk '{print $2}') 1> /dev/null 2>&1
fi
echo
;;
*)
echo "Usage: /etc/init.d/qmail {start|stop}"
exit 1
;;
esac
exit 0
パッケージ入手
必要なパッケージを入手する
| 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-smtpd-auth-0510_tgz_bin | http://www.fehcom.de/qmail/smtpauth.html | SMTP Auth パッチ |
---
update at 2018/03/02 22:04:51