外部プロバイダからこのメールサーバ経由でメールを出せるようにするため、
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回で十分でしょう。