2005/10/04
postfix-2.1.5-r2
cyrus-sasl-2.1.20

PostfixへのSMTP-AUTHの導入

ページ内索引
Postfixの再インストール
PostfixのSMTP AUTHの設定
cyrus-saslのSMTP AUTHの設定
UNIXアカウントを使用する場合
SASL用のパスワードデータベースを使用する場合
Telnetによる動作確認
第三者中継のチェック
元々SMTPプロトコルは認証機能を持っていませんでした。しかし、spamが横行しだして メールの送信にも制限をかける必要が出てきました。
メールサーバーの認証方法としては、以下が挙げられます。
  • SMTP AUTH
    SMTPに認証機能を設けたもの。
  • POP Before SMTP
    POP認証の後に一定時間SMTPサーバーに接続する事ができる。
    SMTPに認証機能がないため、POPでの認証をSMTPでも適用する方式。
POP Before SMTPはSMTP AUTHが普及するまでのつなぎの意味が強く、メールサーバーからメールを受信 するためのプロトコルであるPOPの認証を、SMTPにも適用するやり方です。
送信と認証が同時ではないため、少し不安が残ります。
SMTP AUTHはSMTPそのものに認証機能を持たせる方式で、大変シンプルな方式です。
現在殆どのメールクライアントはSMTP AUTHに対応しています。

このページではPostfixをSMTP AUTHに対応させる方法について解説しています。


Postfixの再インストール

Postfixインストール時に、SMTP AUTHに対応させてコンパイルしていない場合は、Postfixの再インストールが必要です。
このため、Gentoo Linuxでは、USEフラグを編集する必要があります。
/etc/make.conf を編集し、USEフラグに "sasl"を追加します。
USE = "sasl "

Postfixを再インストールします。 まずは -pv オプションをつけて、USEフラグの状態を確かめます。

# emerge -pv postfix

These are the packages that I would merge, in order:

Calculating dependencies ...done!
[ebuild   R   ] mail-mta/postfix-2.1.5-r2  +ipv6 -ldap -mailwrapper -mbox -mysql
 +pam +postgres +sasl* (-selinux) +ssl -vda 0 kB 

Total size of downloads: 0 kB
USEフラグに追加したsaslが、ちゃんと追加されています。

Postfixを再インストールします。この時、PostfixでSMTP AUTH機能を使用するために必要な cyrus-saslも同時にインストールされます。

# emerge postfix
インストールされたcyrus-saslのバージョンは2.1.20でした。

PostfixのSMTP AUTHの設定

/etc/postfix/main.cfを編集します。
# cyrus-saslによるSMTP-AUTHを有効にします。
smtpd_sasl_auth_enable = yes

# 中継を許可するあて先を制限します。

smtpd_recipient_restrictions = permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination

各パラメータについては以下の通りです。なお、$mynetworksはパラメータmynetworksに設定された値を意味します。
各パラメータの値は postconf コマンドで確認してください。
パラメータ 説明
smtpd_sasl_auth_enable
SMTP AUTHを有効にします。
smtpd_recipient_restrictions あて先を制限します。

permit_mynetworks

$mynetworks に含まれるネットワークからの送信を許可します。

permit_sasl_authenticated

SMTP認証を通過したクライアントからの送信を許可します。

reject_unauth_destination

あて先が  $inet_interfaces、$proxy_interfaces、$mydestination、 $virtual_alias_domains、$virtual_mailbox_domains、$relay_domains    に設定されているあて先以外の場合は、送信を拒否します。

cyrus-saslのSMTP AUTHの設定

SMTP AUTHの認証設定は、/etc/sasl2/smtpd.conf を編集します。

UNIXアカウントを使用する場合

UNIXアカウントのユーザーとパスワードをSMTP AUTHで利用することができます。
/etc/sasl2/smtpd.conf を編集します。
pwcheck_method: pwcheck

pwcheckデーモンを起動します。
# /etc/init.d/pwcheck start

マシン起動時にpwcheckが自動的に立ち上がるようにしておきます。
# rc-update add pwcheck default

SASL用のパスワードデータベースを使用する場合

SASL用にパスワードファイルを作成し、利用する場合の設定です。
メール送信を行うユーザーにUNIXアカウントを与えず、メール送信専用のユーザーを作りたい場合に有用です。
/etc/sasl2/smtpd.conf を編集します。
pwcheck_method: auxprop

ユーザーの作成を行ないます。
# saslpasswd2 -c -u mail.gside.org -a smtpauth tma
例では、ホスト名が mail.gside.org、ユーザー名が tma となっています。
パスワードを2度聞かれるので、入力してください。

登録済みのユーザーは以下のコマンドで確認できます。

# sasldblistusers2 tma@mail.gside.org: userPassword

認証用DBの所有グループをpostfixに変更します。
# chgrp postfix /etc/sasl2/sasldb2
# chmod 640 /etc/sasl2/sasldb2

Telnetによる動作確認

まずはユーザーとパスワードをbase64エンコードした文字を作ります。
認証には「ユーザーID\0ユーザーID\0パスワード」をbase64エンコードしたものを使用します。
ユーザーを tma、パスワードを hoge とした場合は
「tma\0tma\0hoge」
となります。perlコマンドを用いて生成します。
# perl -MMIME::Base64 -e 'print encode_base64("tma\0tma\0hoge");' dG1hAHRtYQBob2dl

上記を用いて、telnetで接続確認します。
# telnet localhost smtp
Trying 127.0.0.1...
Connected to mail.gside.org.
Escape character is '^]'.
220 mail.gside.org ESMTP Postfix
EHLO mail.gside.org
250-mail.gside.org
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH NTLM LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250 8BITMIME
auth plain dG1hAHRtYQBob2dl
235 Authentication successful

※黄色字の部分が入力を行う部分です。

第三者中継のチェック

以下のWEBページで第三者中継を行わないか確認できます。 このチェックを通過したからといって、完全に不正中継が行われないとは限らないので、注意してください。

Index
Postfixのインストールと基本設定
PostfixへのSMTP-AUTHの導入
Courier-Imapのインストールと基本設定