qmail+vpopmailでのメールサーバー(SMTPS、POPS対応)の構築方法をメモ

※ドメイン名はhoge.comとしてあります

必要な物

qmail http://www.qmail.org

qmail-smtp-auth http://members.elysium.pl/brush/qmail-smtpd-auth/

qmail-remote-auth http://tomclegg.net/qmail/#qmail-remote-auth

vpopmail http://vpopmail.sourceforge.net

ucspi-tcp(tcpserver) http://cr.yp.to/ucspi-tcp.html

ucspi-tcp-ssl http://www.nrg4u.com/

事前設定

# qmail関連のユーザー・グループを作成groupadd nofiles
groupadd qmail
useradd -g nofiles -d /var/qmail -s /bin/false qmaild
useradd -g nofiles -d /var/qmail -s /bin/false qmaill
useradd -g nofiles -d /var/qmail -s /bin/false qmailp
useradd -g nofiles -d /var/qmail/alias -s /bin/false alias
useradd -g qmail -d /var/qmail -s /bin/false qmailq
useradd -g qmail -d /var/qmail -s /bin/false qmailr
useradd -g qmail -d /var/qmail -s /bin/false qmails

# vpopmail関連のユーザー・グループを作成
groupadd -g 999 vchkpw
useradd -u 999 -g 999 vpopmail -d /var/vpopmail

インストール

普通にmakeした後、qmailのソース内にあるconfig-fastを以下のように実行

./config-fast hoge.com

設定1(tcpserver)

/etc/tcp.smtpを作成

192.168.3,:allow,RELAYCLIENT=""

作成後、以下を実行

tcprule /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

設定2(vpopmail)

最初にvpopmailが認識するドメイン名を設定しないといけないっぽいので、$VPOPMAIL_ROOT/etc/defaultdomainを以下みたいに設定

hoge.com

その後、binディレクトリ内にあるvadddomain、vadduser等でドメイン・ユーザーを追加する

設定3(qmailその1)

$QMAIL_ROOT/boot/hogeを$QMAIL_ROOT/rcとかにコピー後、Maildir形式に対応させる為以下みたいに修正

exec env - PATH="/path/to/qmail/bin:$PATH" \
qmail-start ./Maildir/ splogger qmail

変えるのは./Maildirにするだけ。んでcontrolにあるファイルを設定

ファイル名: me

hoge.com

ファイル名: rcpthosts

localhost
hoge.com

設定4(qmailその2)

ここでOutBound Port 25 Blockingの対策として$QMAIL_ROOT/control/smtproutesを作成する。事前にプロバイダのサブミッションを調査する必要あり

:プロバイダSMTPサーバーを指定:587

※プロバイダによっては契約IDやパスワードが必要になります

設定(qmailその3)

んでSMTP over SSL等も使いたいので、以下で証明書を作成

openssl req -new -nodes -x509 -keyout qmail.pem -out qmail.pem -days 365

サーバーの起動

サーバーの起動は以下のようにする

# SMTP
tcpserver \
    -RH \
    -u 999 \
    -g 999 \
    -x /etc/tcp.smtp.cdb 0 smtp \
    /var/qmail/bin/qmail-smtpd hoge.com \
    /var/vpopmail/bin/vchkpw /bin/true 2>&1 \
    | /var/qmail/bin/splogger smtp 3 &

# SMTPS
tcpserver \
    -RH \
    -u 999 \
    -g 999 \
    -s -n /var/qmail/control/qmail.pem \
    -x /etc/tcp.smtp.cdb 0 smtp /var/qmail/bin/qmail-smtpd hoge.com \
    /var/vpopmail/bin/vchkpw /bin/true 2>&1 \
    | /var/qmail/bin/splogger smtp 3 &

# POP3
tcpserver \
    -v -RH \
    0 pop3 \
    /var/qmail/bin/qmail-popup hoge.com \
    /var/vpopmail/bin/vchkpw \
    /var/qmail/bin/qmail-pop3d Maildir 2>&1 \
    | /var/qmail/bin/splogger pop3 3 &

# POP3S
tcpserver \
    -v -RH \
    -s -n /var/qmail/control/qmail.pem \
    0 pop3s \
    /var/qmail/bin/qmail-popup hoge.com \
    /var/vpopmail/bin/vchkpw \
    /var/qmail/bin/qmail-pop3d Maildir 2>&1 \
    | /var/qmail/bin/splogger pop3s 3 &

ちなみにalias関連は$VPOPMAIL_ROOT/domains/ドメイン名の場所になるっぽい

補足1

qmail+vpopmailでSMTP認証を行う際にCRAM-MD5で認証させる場合には、vpopmailのvchkpw.cに以下のような修正が必要らしい

int authcram(unsigned char *response, 以下省略) {
    hmac_md5(
        challenge,
        strlen(challenge),
        password,
        strlen(password),
        digest
    );
    return(strcmp(digascii, response));;
}

int authcram(unsigned char *response, 以下省略) {
    hmac_md5(
        response,
        strlen(response),
        password,
        strlen(password),
        digest
    );
    return(strcmp(digascii, challenge));
}

のように修正しないとCRAM-MD5での認証に失敗する模様

補足2

qmailで携帯にメールしようとするとエラーになり返ってくるので、/path/to/qmail/control/smtproutesを以下のように設定

docomo.ne.jp:中継メールサーバー
ezweb.ne.jp:中継メールサーバー
softbank.ne.jp:中継メールサーバー

プロバイダがOP25Bを適応している場合は中継メールサーバーにはサブミッションポートも指定しないといけない模様