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

※注:当サイトは特定環境において確認できた事象のみを記述しています。他の環境での動作は一切保証しません。