外部プロバイダからこのメールサーバ経由でメールを出せるようにするため、
smtpdでユーザの認証を行わせ、
認証が通った場合にのみログインを許可し、メールを出せるようにします。
LOGIN認証ではパスワードのプレーンテキストが流れてしまいますので、
smtpdのsslにつないだ場合にのみLOGIN認証を有効にします。
# vi /etc/courier/esmtpd ... ESMTPAUTH="" LOGINがないことを確認します ... # vi /etc/courier/esmtpd-ssl ... AUTHMODULES="authdaemon" ESMTPAUTH="LOGIN" # /etc/init.d/courier-mta-ssl restartこの状態だと、/etc/passwdにパスワード設定があるユーザはログインできますが、 ldap上のユーザはログインできなくなるので、/etc/pam.d/esmtpに設定します。
# vi /etc/pam.d/esmtp auth sufficient pam_ldap.so account sufficient pam_ldap.so password sufficient pam_ldap.so auth required pam_unix.so nullok use_first_pass account required pam_unix.so password required pam_unix.so try_first_pass session required pam_unix.soesmtpdのssl版は通常ポート465番で起動していますので、 Outlook Express等でSMTPサーバにSSL有効、465番を設定し、 送信メールサーバの認証を有効にすれば使用できます。
Debianは普通dracとかなんでしょうけど、courierのソースにパッチを当てなければ ならないので、ここでは relay-ctrlを用います。
% tar xzf relay-ctrl-3.1.1.tar.gz
% cd relay-ctrl-3.1.1
% vi relay-ctrl-allow.c
... (関数make_file)
switch (do_chdir()) {
case 0: return;
case 2: mode = 0666; break;
default: mode = /*0600*/ 0644; break;
}
...
% vi relay-ctrl-check.c
... (関数main)
if ((rc = getenv("RELAY_CTRL_RELAYCLIENT")) == 0) rc = "";
if ((ip = getenv("TCPREMOTEIP")) == 0 || (ip= validate_ip(ip))==0)
warn1("$TCPREMOTEIP not set, not checking IP");
...
% make
% strip relay-ctrl-allow relay-ctrl-check relay-ctrl-age
# mkdir /usr/lib/courier/relay
# cp relay-ctrl-allow relay-ctrl-check relay-ctrl-age /usr/lib/courier/relay
# mkdir /var/lib/courier/relay ; chmod a+rwx /var/lib/courier/relay
コンパイルするといろいろできますが、必要なのは、relay-ctrl-allow、relay-ctrl-check、relay-ctrl-ageの3つだけです。次にpopでログインが成功した時に、relay-ctrl-allowが呼ばれるようにします。
# vi /etc/init.d/courier-pop
...
/usr/bin/env - PATH="$PATH" SHELL="$SHELL" POP3AUTH="$POP3AUTH" RELAY_CTRL_DIR="/var/lib/courier/relay" \
$TCPD -pid=$PIDFILE -stderrlogger=${sbindir}/courierlogger \
-maxprocs=$MAXDAEMONS -maxperip=$MAXPERIP \
$TCPDOPTS -address=$ADDRESS $PORT \
${prefix}/lib/courier/courier/courierpop3login $AUTHMODULELIST \
${prefix}/lib/courier/relay/relay-ctrl-allow \
${prefix}/lib/courier/courier/courierpop3d Maildir
...
# /etc/init.d/courier-pop restart
/usr/lib/courier/pop3dは使われないので修正しなくてもいいです。
また、imapはそもそも外に公開しませんし、
pop-sslやimap-sslが使える環境なら
esmtp-sslが使えてそれでログインできるでしょうから、
その他の修正はもし必要なら行ってください。次にsmtpを修正します。
# vi /usr/lib/courier/esmtpd
...
echo RELAY_CTRL_DIR=/var/lib/courier/relay
echo ${sbindir}/couriertcpd $TCPDOPTS $PORT \
/usr/lib/courier/relay/relay-ctrl-check \
${sbindir}/courieresmtpd $AUTHMODULES '>/dev/null 2>&1 </dev/null'
...
# /etc/init.d/courier-mta restart
これでpop接続後15分間はsmtpがリレーとして動作します。
最後に/var/lib/courier/relayディレクトリのごみそうじを登録します。
# vi /etc/crontab ... 41 * * * * root /usr/bin/env RELAY_CTRL_DIR=/var/lib/courier/relay /usr/lib/courier/relay/relay-ctrl-age ...ユーザ数にもよりますが1時間に1回で十分でしょう。