FreeBSDでSMTP AUTH/TLSを使う


Cyrus SASLのインストール

pkgを使ってインストールします。

# pkg install cyrus-sasl-saslauthd

Sendmailの変更

Sendmailの再コンパイル

/etc/make.conf

SENDMAIL_CFLAGS=-I/usr/local/include -DSASL=2 -DLDAPMAP -DSM_CONF_LDAP_MEMFREE -DSM_CONF_POLL
SENDMAIL_LDFLAGS=-L/usr/local/lib
SENDMAIL_LDADD=-lsasl2 -llber -lldap

コンパイルして置き換えます。

# cd /usr/src/lib/libsm
# make cleandir
# make obj
# make
# make install
# cd /usr/src/usr.sbin/sendmail
# make cleandir
# make obj
# make
# make install

Cyrus SASLとの連携

Sendmailがsaslauthd経由で認証できるようにします。

/usr/local/lib/sasl2/Sendmail.conf

pwcheck_method: saslauthd

Sendmailの設定

基本的にsubmit.cfは変更する必要はないので、
sendmail.cfのみ以下の仕様に変更します。

仕様

sendmail.mc

以下を追加

FEATURE(`no_default_msa')
DAEMON_OPTIONS(`Port=25,  Name=IPv4,    Family=inet')dnl
DAEMON_OPTIONS(`Port=25,  Name=IPv6,    Family=inet6, M=O')dnl
DAEMON_OPTIONS(`Port=587, Name=IPv4MSA, Family=inet,  M=Ea')dnl
DAEMON_OPTIONS(`Port=587, Name=IPv6MSA, Family=inet6, M=OEa')dnl
define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_OPTIONS', `p y')dnl
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')

/etc/mail/access

To:next-hop.net    RELAY
# cd /etc/mail
# make sendmail.cf
# make access.db

起動

/etc/rc.conf

sendmail_enable="YES"
saslauthd_enable="YES"

各daemonを起動します。

# /etc/rc.d/sendmail restart
# /usr/local/etc/rc.d/saslauthd start

TLSでの動作確認

opensslで確認してみます。
TLSで接続しているのでLOGINとPLAINが有効になっています。
認証せずにメールを送信しようとするとエラーになることを確認します。

% openssl s_client -connect mta.next-hop.net:587 -starttls smtp
CONNECTED(00000003)
...<省略>
250 HELP
EHLO mta.next-hop.net
250-mta.next-hop.net Hello mta.next-hop.net [192.168.0.10], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-DSN
250-AUTH DIGEST-MD5 CRAM-MD5 LOGIN PLAIN
250-DELIVERBY
250 HELP
MAIL FROM:<root@next-hop.net>
530 5.7.0 Authentication required

PAMの設定

PAMからLDAPを使うなど、デフォルトの認証、認可と異なる方式を使用す る場合は、/etc/pam.d/smtpを作成します。


SMTP AUTHクライアントで動作させるには

# mkdir /etc/mail/auth
# echo '"AuthInfo:your.isp.net "U:root" "I:usr" "P:password"' > /etc/mail/auth/client-info
# cd /etc/mail/auth
# makemap hash client-info < client-info
# chmod -R go-rwx /etc/mail/auth

sendmail.mc

define(`SMART_HOST', `your.isp.net')
FEATURE(`authinfo', `hash /etc/mail/auth/client-info')

参考