Cyrus SASL Library
SMTPサーバの不正中継を制限するためには許可されたホストもしくはネットワークからのみ中継を許可する方法が用いられる。
しかしこの場合、外出先などからはメールを送れないことになる。
そこで、メール送信時に認証を行い認証された場合のみメールを送信できるような仕組みが取られる。
SASLの公式サイトより最新のソースファイルを入手しインストールする。
$ wget ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-2.1.19.tar.gz
$ tar xvzf cyrus-sasl-2.1.19.tar.gz
$ cd cyrus-sasl-2.1.19
$ CPPFLAGS="-I/usr/local/include/openssl" \
./configure --prefix=/usr/local/cyrus-sasl \
--disable-gssapi \
--disable-krb4 \
--disable-digest \
--disable-otp \
--disable-srp \
--disable-plain \
--disable-anon \
--with-dblib=berkeley \
--with-bdb-libdir=/usr/local/BerkeleyDB.4.2/lib \
--with-bdb-incdir=/usr/local/BerkeleyDB.4.2/include \
--with-plugindir=/usr/local/lib/sasl2 \
--with-dbpath=/usr/local/etc/sasldb2
$ make
# make install
システムがSASLライブラリを見つけられるようにパスを通す。
# crle -u -l /usr/local/cyrus-sasl/libSASLライブラリが使う認証データベースを設定する。
/usr/local/lib/sasl2/smtpd.conf
# Cyrus-SASL configuration fileSMTP認証時に使用するアカウントを作成する。
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: cram-md5 plain login
○新規作成作成されたユーザ情報を確認する。
# /usr/local/cyrus-sasl/sbin/saslpasswd2 -c -u kajukaju.net username
Password: *******
Again (for verification): *******
○パスワードの変更
# /usr/local/cyrus-sasl/sbin/saslpasswd2 -u kajukaju.net username
○削除
# /usr/local/cyrus-sasl/sbin/saslpasswd2 -d -u kajukaju.net username
# /usr/local/cyrus-sasl/sbin/sasldblistusers2SASLライブラリ用のパスワードファイルが作成されるのでPostfixから読めるようにパーミッションを変更する。
username@kajukaju.net: userPassword
# chmod 640 /usr/local/etc/sasldb2 # chgrp postfix /usr/local/etc/sasldb2 # ls -al /usr/local/etc/sasldb2 -rw-r----- 1 root postfix 24576 Jul 20 10:22 /usr/local/etc/sasldb2PostfixをSASLに対応させるため再コンパイルする。
$ cd /work/postfix-2.1.3
$ make tidy
$ make makefiles CC=gcc \
CCARGS='-DDEF_CONFIG_DIR=\"/var/postfix/etc\" \
-DUSE_SASL_AUTH -I/usr/local/cyrus-sasl/include/sasl' \
AUXLIBS="-L/usr/local/cyrus-sasl/lib -lsasl2"
$ make
# make install
PostfixにSASLライブラリの設定を追加する。/var/postfix/etc/main.cf
# Cyrus-SASL configuration
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $mydomain
smtpd_recipient_restrictions = permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
Postfixを再起動し動作確認する。
○Postfixの再起動サーバ稼働時のログ
# /etc/init.d/postfix restart
○動作確認
# telnet postman.kajukaju.net 25
Trying 192.168.1.xx...
Connected to postman.kajukaju.net.
Escape character is '^]'.
220 postman.kajukaju.net ESMTP Postfix
EHLO localhost
250-postman.kajukaju.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH CRAM-MD5
250 8BITMIME
○認証成功時Jul 20 12:22:20 barbara postfix/smtpd[23671]: [ID 197553 mail.info] connect from unknown[192.168.1.yy]
Jul 20 12:22:23 barbara postfix/smtpd[23671]: [ID 197553 mail.info] 65D912DA: client=unknown[192.168.1.yy], sasl_method=CRAM-MD5, sasl_username=username@kajukaju.net
Jul 20 12:22:23 barbara postfix/cleanup[23674]: [ID 197553 mail.info] 65D912DA:message-id=<20040720122022.173D.USER@kajukaju.net>
Jul 20 12:22:23 barbara postfix/qmgr[23638]: [ID 197553 mail.info] 65D912DA: from=,size=541, nrcpt=1 (queue active)
Jul 20 12:22:23 barbara postfix/smtpd[23671]: [ID 197553 mail.info] disconnect from unknown[192.168.1.yy]
Jul 20 12:22:24 barbara postfix/smtp[23675]: [ID 197553 mail.info] 65D912DA: to=,relay=aa.mds.wakwak.com[211.x.yyy.zzz], delay=1, status=sent (250 2.0.0 i6K3Kva2061916 Message accepted for elivery)
Jul 20 12:22:24 barbara postfix/qmgr[23638]: [ID 197553 mail.info] 65D912DA: removed
○認証失敗時
Jul 20 12:23:09 barbara postfix/smtpd[23671]: [ID 197553 mail.info] connect from unknown[192.168.1.yy]
Jul 20 12:23:09 barbara postfix/smtpd[23671]: [ID 197553 mail.info] NOQUEUE: reject: RCPT from unknown[192.168.1.yy]: 554: Relay access denied; from= to= ; proto=ESMTP helo=<[127.0.0.1]>
Jul 20 12:23:11 barbara postfix/smtpd[23671]: [ID 197553 mail.info] disconnect from unknown[192.168.1.yy]
