Solaris

2006/1/31 04:02 PM 更新

Cyrus SASL Library

SMTPサーバの不正中継を制限するためには許可されたホストもしくはネットワークからのみ中継を許可する方法が用いられる。
しかしこの場合、外出先などからはメールを送れないことになる。
そこで、メール送信時に認証を行い認証された場合のみメールを送信できるような仕組みが取られる。

PostfixにSMTP認証機能を追加するためSASL Libraryを導入する。
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/lib
SASLライブラリが使う認証データベースを設定する。
  /usr/local/lib/sasl2/smtpd.conf
# Cyrus-SASL configuration file
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: cram-md5 plain login
SMTP認証時に使用するアカウントを作成する。
○新規作成
# /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/sasldblistusers2
username@kajukaju.net: userPassword
SASLライブラリ用のパスワードファイルが作成されるのでPostfixから読めるようにパーミッションを変更する。
# 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/sasldb2
Postfixを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]