SMTP認証とSASL2の設定

Postfixを設定した時点で、指定のネットワーク内ではメールのやりとりが可能になります。しかし前述のPostfixの設では、
mynetworks = 127.0.0.0/8, 192.168.11.0/24
となっているのでそのサーバーマシン自身とそのマシンを含むLAN内でしかメールサーバーは機能していません。SMTPサーバーは外部からも利用することができますが、誰であっても簡単に利用できてしまうのでSpamメールなどの踏み台になってしまいます。いわゆる不正中継というやつです。
 メールサーバーを外から使えないというのは非常に不便なので外からも使えるようにするというのをSASLで実現できます。
 とにかく不正中継が嫌なので、SMTPサーバーに認証機能を追加します。認証方法は実に様々な方法がありますが、ここでは既存のシステムユーザーのユーザー名とパスワードで認証する方法を採用します。というのも実は、このSMTP認証のシステムはSMTPにそもそも全く存在しないこの「認証機能」というものを追加するのでありまして、SMTPサーバーには元々備わっている機能の設定をするものではありません。つまり、Postfixを設定して送信メールサーバー(SMTPサーバー)を構築するのだったら、もう一つのパッケージをインストールしなくてはなりません。要するにPostfixを入れたらSASLも同時に入れましょうね、という話なのです。(私個人としてはもう合体した方がいいんじゃないかと。しかし合体させない理由も様々あるようです。)
 そんなわけでSASLをインストールするわけですが、ここではバージョン2を入れます。SASL2です。しかもSASL2はもう立派なデーモンであってApacheとかvsftpdみたいに通常のデーモンと同様なんです。それぐらい認証というのは面倒なんですね。
 さて、SASLはフルスペルでSimple Authentication and Security Layerというらしいです。長いです。このAuthentication(認証)がどのような種類と方法で行われるのかというと、

1. SASLチェック用デーモンを利用する場合

pwcheck_method: saslauthd
mech_list: plain login
# PAM,shadowではcram-md5等が使えないため、plainおよびlogin認証のみに限定します

2. SASL用パスワードファイルを利用する場合

pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: cram-md5 digest-md5 plain login
# これを指定しないと、CRAM-MD5が使えてもplainが優先されてしまうことがあります

3. Unixパスワードデータベースを利用する場合

pwcheck_method: pwcheck

などがあります。
 それぞれに長所と短所があるわけですが、1の場合は暗号化の深みが浅いということです。平文(plain)での認証になるので安全対策としてはあんまり好ましくないです。しかし導入が比較的楽。2はmd5などのハッシュが使えるので暗号化の度合いが深くていいです。しかし、有線順位を明示的にしないと平文での認証も可能です。この方法では新たにパスワードファイルを自作する必要があるのですが、パスワードファイルが別になる分だけ安全です。3は、システムのパスワードファイルをそのままsaslauthで使ってしまおうというやり方です。パスワードファイルを作らなくていいので便利です。
 ここでは2の方法で設定してゆこうと思います。


SASL2のインストール

 SASL2のパッケージはこれまた意地悪なことに二つあります。二つインストールしないと動きません。
# apt-get install libsasl2-modules sasl2-bin
libsasl2-modulesとsasl2-binの二つをインストールしてください。一応インストールされたパッケージを確認してみます。
# dpkg -l | grep sasl2
libsasl2-2         2.1.23.dfsg1-1ubuntu3  Cyrus SASL - authentication abstraction libr
libsasl2-modules   2.1.23.dfsg1-1ubuntu3  Cyrus SASL - pluggable authentication module
sasl2-bin          2.1.23.dfsg1-1ubuntu3  Cyrus SASL - administration programs for SAS
こんな感じでOK!

SASL2の設定ファイルの編集

 /etc/default/saslauthdを開いて(殆ど冒頭ぐらいの箇所にある)START=noという部分を、START=yesに変更して保存します。ここではシステムの起動時にsaslauthdが一緒に起動するように設定しています。
START=yes
最後にsaslauthdを起動します。
# /etc/init.d/saslauthd start
SASLの設定ファイルを編集していないと、* To enable saslauthd, edit /etc/default/saslauthd and set START=yesというメッセージで促されます。問題がなければ正常起動します。SASLはsaslauthdという名前のデーモンとして動いています。

Postfix側の設定

 SASLを設定したらそれと関連してPostfixの設定も一部変更しなくてはなりません。以下のファイルを設定して保存します。
  • /etc/postfix/main.cf
  • /etc/postfix/master.cf
  • /etc/postfix/sasl/smtp.conf [新規で作成]

mail.cfの設定

# SASL(SMTP-Auth) setting *original setting for omnioo mail server
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_application_name = smtpd
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination
smtp_sasl_security_options = noanonymous
brocken_sasl_auth_clients = yes
 Postfixとsaslとの関連の設定をします。おそらく、ですが...上記のコピペを追加するだけで大丈夫だと思います。$myhostnameの部分には以前に設定した値が入ってきます。

master.cfの設定

#/etc/postfix/master.cfの設定
[設定前]
...前略...
smtp      inet  n       -       -       -       -       smtpd
#submission inet n       -       -       -       -       smtpd
#  -o smtpd_tls_security_level=encrypt
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
...中略...

[設定後]
...前略...
smtp      inet  n       -       -       -       -       smtpd
submission inet n       -       -       -       -       smtpd
#  -o smtpd_tls_security_level=encrypt
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject_unauth_desti
    ...中略...

 という風になります。
つまりは、#submission inet nの行をコメントアウトするだけです。他の部分をいじってしまわないように注意。またこのサブミッションポートは大手のプロバイダーがアホなアクセス制限をすることがあるので...ごにょごにょやる感じです。ルーターなどのTCPポート:587を開けておきます。また/etc/servicesに
submission      587/tcp
の行があるか確認してください。なかったら付け加えてください。

smtp.confの設定

 このファイルは新規で作成します。# vim /etc/postfix/sasl/smtp.confとか...適当な任意の方法で作成してください。
#/etc/postfix/sasl/smtp.confの設定
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: cram-md5 digest-md5 plain login
pwcheck_method では認証方法を設定します。auxpropというデーモンで認証するのでそれを指定。mech_list:では認証方法を設定します。 OutlookExpressなんかのメーラーですとplainとloginでしか認証できないのでこれも設定します。もっとセキュリティーの強いMD5 とかの設定があるのですがここでは妥協。

認証ユーザーの登録

 SMTP認証をするアカウントユーザーの登録をします。登録する内容は、
  • ドメイン
  • ユーザー名
  • パスワード
という風になっています。どこだかからやってきたメールがあるドメインにやってきて、ユーザー名とそのドメインでもってパスワードで接続すると認証するというような感じです。この3つが揃っていないと認証してくれません。ここで登録するドメイン、ユーザー名、パスワード以外のメールは認証されないのでSMTPサーバーを使うことができません。
 実際に登録をする方法は以下のとおりです。
# saslpasswd2 -c -u <ドメイン> <ユーザー名>
# saslpasswd2 -c -u example.com user
Password: ******* (パスワードを入力)
Again (for verification): ******* (パスワードを再入力)
これで登録完了です。
 またこの認証アカウントを削除する場合は、
# saslpasswd2 -d -u <ドメイン> <ユーザー名>
となっています。
 登録したユーザーを確認するには、
# sasldblistusers2
user@example.com: userPassword
という風に確認できます。つまりはuser@example.comのメールの送信を受け付けるという意味です。

設定後は再起動します。
# /etc/init.d/saslauthd restart   [sasl2の再起動]
# /etc/init.d/postfix restart    [postfixの再起動]

SMTP Authの動作確認

きちんと認証機能が設定されているかどうかをテストします。
# /usr/sbin/testsaslauthd -u <ユーザー名> -p ***********
0: OK "Success."
「0: OK "Success."」と表示されたら設定完了です。「0: NO "authentication failed"」となったら駄目です。設定をもう一回見直してください。
 しかしこの時点では、saslのコマンド内での設定が認証されているだけであってSMTPの認証がされているわけではありません。本来のSMTPの認証にはもうひと手続き必要です。

Postfixがsaslの認証用データベースを読み込めるようにする

幸か不幸か、postfixが参照する設定ファイルとsaslが登録する認証データベースの位置がバラバラなのです。実行ユーザーも違うし場所も違う。てんでバラバラなのでPostfixがsaslの認証データベースを読み込めるようにしないといけません。一つは、saslのデータベース自体をpostfixの実行グループにして読み込めるようにすること。もう一つは、saslの認証データベースを/var/spool/postfix/etcから読み込めるようにする、つまりハードリンクを貼って...ということです。
# chgrp postfix /etc/sasldb2
# chmod 640 /etc/sasldb2
# ln /etc/sasldb2 /var/spool/postfix/etc
これでPostfixがsaslのデータベースを読み込めるようになります。
最後に再起動します。
/etc/init.d/postfix restart
/etc/init.d/saslauthd restart

SMTP認証の確認

今では滅多に使わないtelnetで確認できます。こういう時はやはり原始的な方法が便利ですね。
# telnet localhost 25 [ENTER]
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 example.com ESMTP Postfix (Ubuntu)
ehlo example.com [ENTER]
250-example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN CRAM-MD5 LOGIN NTLM DIGEST-MD5
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
太字が入力部分です。250-AUTH PLAIN CRAM-MD5 LOGIN NTLM DIGEST-MD5でもってきちんと認証されていることがわかりります。ここまで来ると外部からメールを送信してPostfixがメールを受け取りメールボックスに配信することができます。









プロフィール



  • Name :: 山上オサム ♂(37)
  • Hobby :: 武術
  • Work :: Web Designer