倉金家ホームページ

趣味の部屋/インターネットサーバー/サーバー構築メモ/メールサーバー

14-4.syrus-sasl

2007年5月26日
送信メールサーバーの認証用としてまずSMTP-Auth方式を設定。
cyrus-saslという認証プログラムを導入します。

改造とインストール
以前よりSMTP認証用に少し改造したcyrus-saslを使用しています。

$apt-get source cyrus-sasl でソースファイルをもってきます。
rpm/SOURCES/cyrus-sasl-2.1.18.tar.gzを一旦解凍。
$cd rpm/SOURCES
$tar zxfv cyrus-sasl-2.1.18.tar.gz

解凍されてできたフォルダcyrus-sasl-2.1.18内のlib/checkpw.cを編集。
cyrus-saslはusername@domain.tldの形のIDを@のところでユーザ名とドメイン名に分けてしまうためドメイン名込みの形での認証ができません。"-r"オプションでうまくいくちう話もありましたがだめでしたので、これをできるようにします。

575行目から
オリジナル:
    /* Split out username/realm if necessary */
    if(strrchr(userid,'@') != NULL) {
  char *rtmp;

  if(_sasl_strdup(userid, &freeme, NULL) != SASL_OK)
      goto fail;

  userid = freeme;
  rtmp = strrchr(userid,'@');
  *rtmp = '\0';
  user_realm = rtmp + 1;
    }

修正は、*rtmp = '\0'; をコメントアウトするだけ
修正後:
    /* Split out username/realm if necessary */
    if(strrchr(userid,'@') != NULL) {
  char *rtmp;

  if(_sasl_strdup(userid, &freeme, NULL) != SASL_OK)
      goto fail;

  userid = freeme;
  rtmp = strrchr(userid,'@');
//  *rtmp = '\0';
  user_realm = rtmp + 1;
    }
古い cyrus-sasl-2.1.18.tar.gz を捨てて、再度圧縮
$tar zcfv cyrus-sasl-2.1.18.tar.gz ./cyrus-sasl-2.1.18

mysqlを使えるようにするため、SPECS/cyrus-sasl-vl.specファイルを編集
version 2.1.18の%configure に以下を追加
  --enable-mysql --with-mysql=/usr/lib/mysql
但し前回はmysqlとうまく繋がらずあまり意味はなかったのですが、今回はどうだろう。

再度 rpm を作成
$cd ../SPECS/
$rpmbuild -ba cyrus-sasl-vl.spec
やたらと WARNING が出ます。コンパイルにけっこう時間がかかります。

rpmができたらインストール
$cd ../RPMS/i386
$su
#rpm -Uvh --force *.rpm

インストールしたパッケージはバージョンの固定をしておきます。

設定
今回も認証方式としてrimapというのを使用します。
mysqlテーブルを直接参照する方式はやっぱりだめでした。

/usr/lib/sasl2/smtpd.conf を作成して
#パスワードチェックをsaslauthdが実施
pwcheck_method: saslauthd
#パスワード認証方式
mech_list: plain login
#その他
saslauthd_path: /var/run/saslauthd/mux
log_level: 3
を記載

/etc/sysconfig/にsaslauthdを作成して以下記入
SOCKETDIR=/var/run/saslauthd
MECH=rimap
FLAGS="-O localhost"

saslauthdの起動設定と確認
#chkconfig saslauthd on  (丁寧にやるなら #chkconfig --level 2345 saslauthd on)
#service saslauthd startでOKを確認

postfix設定
/etc/postfix/main.cfに以下を設定します
#認証(cyrus-saslによるSMTP Auth)に必要な設定
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_application_name = smtpd

/etc/postfix/main.cf に
smtpd_recipient_restrictions =
 permit_mynetworks,
 permit_sasl_authenticated, ....追加
 check_recipient_access hash:/etc/postfix/access,
 .....

postfixを再起動
#service postfox restart

不正中継テスト
http://www.rbl.jp/svcheck.php でメールサーバーが不正中継をしないかどうかのテストを行ってくれます。
ホスト名(メールサーバー名)を打ち込み[check]!

--------

第三者中継テスト
第三者中継テストのためmail.iroribata.netに接続しています...

<<< 220 mail.iroribata.net ESMTP Postfix
>>> HELO rep.rbl.jp
<<< 250 mail.iroribata.net

中継テスト その0
>>> RSET
<<< 250 Ok
>>> MAIL FROM:
<<< 250 Ok
>>> RCPT TO:
<<< 450 : Recipient address rejected: Domain not found
relay NOT accepted!!

中継テスト その1
......
......

第三者中継テストの結果
全てのテストが行われました, no relays accepted.

--------

全部で20通りのテストが行われます。
すべて relay NOT accepted!! でパス!
これを確認してやっとメールサーバーを公開できます。