PostfixへのSMTP-AUTHの導入
元々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インストール時に、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でした。
/etc/postfix/main.cfを編集します。
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
に設定されているあて先以外の場合は、送信を拒否します。
|
SMTP AUTHの認証設定は、/etc/sasl2/smtpd.conf を編集します。
UNIXアカウントのユーザーとパスワードをSMTP AUTHで利用することができます。
/etc/sasl2/smtpd.conf を編集します。
pwcheck_method: pwcheck
pwcheckデーモンを起動します。
# /etc/init.d/pwcheck start
マシン起動時にpwcheckが自動的に立ち上がるようにしておきます。
# rc-update add pwcheck default
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
まずはユーザーとパスワードを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
250-mail.gside.org
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH NTLM LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250 8BITMIME
235 Authentication successful
以下のWEBページで第三者中継を行わないか確認できます。
このチェックを通過したからといって、完全に不正中継が行われないとは限らないので、注意してください。