Postfixを設定した時点で、指定のネットワーク内ではメールのやりとりが可能になります。しかし前述のPostfixの設では、
メールサーバーを外から使えないというのは非常に不便なので外からも使えるようにするというのをSASLで実現できます。
とにかく不正中継が嫌なので、SMTPサーバーに認証機能を追加します。認証方法は実に様々な方法がありますが、ここでは既存のシステムユーザーのユーザー名とパスワードで認証する方法を採用します。というのも実は、このSMTP認証のシステムはSMTPにそもそも全く存在しないこの「認証機能」というものを追加するのでありまして、SMTPサーバーには元々備わっている機能の設定をするものではありません。つまり、Postfixを設定して送信メールサーバー(SMTPサーバー)を構築するのだったら、もう一つのパッケージをインストールしなくてはなりません。要するにPostfixを入れたらSASLも同時に入れましょうね、という話なのです。(私個人としてはもう合体した方がいいんじゃないかと。しかし合体させない理由も様々あるようです。)
そんなわけでSASLをインストールするわけですが、ここではバージョン2を入れます。SASL2です。しかもSASL2はもう立派なデーモンであってApacheとかvsftpdみたいに通常のデーモンと同様なんです。それぐらい認証というのは面倒なんですね。
さて、SASLはフルスペルでSimple Authentication and Security Layerというらしいです。長いです。このAuthentication(認証)がどのような種類と方法で行われるのかというと、
などがあります。
それぞれに長所と短所があるわけですが、1の場合は暗号化の深みが浅いということです。平文(plain)での認証になるので安全対策としてはあんまり好ましくないです。しかし導入が比較的楽。2はmd5などのハッシュが使えるので暗号化の度合いが深くていいです。しかし、有線順位を明示的にしないと平文での認証も可能です。この方法では新たにパスワードファイルを自作する必要があるのですが、パスワードファイルが別になる分だけ安全です。3は、システムのパスワードファイルをそのままsaslauthで使ってしまおうというやり方です。パスワードファイルを作らなくていいので便利です。
ここでは2の方法で設定してゆこうと思います。
という風になります。
つまりは、#submission inet nの行をコメントアウトするだけです。他の部分をいじってしまわないように注意。またこのサブミッションポートは大手のプロバイダーがアホなアクセス制限をすることがあるので...ごにょごにょやる感じです。ルーターなどのTCPポート:587を開けておきます。また/etc/servicesに
実際に登録をする方法は以下のとおりです。
またこの認証アカウントを削除する場合は、
登録したユーザーを確認するには、
設定後は再起動します。
しかしこの時点では、saslのコマンド内での設定が認証されているだけであってSMTPの認証がされているわけではありません。本来のSMTPの認証にはもうひと手続き必要です。
最後に再起動します。
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# これを指定しないと、CRAM-MD5が使えてもplainが優先されてしまうことがあります
auxprop_plugin: sasldb
mech_list: cram-md5 digest-md5 plain login
3. Unixパスワードデータベースを利用する場合
pwcheck_method: pwcheck
などがあります。
それぞれに長所と短所があるわけですが、1の場合は暗号化の深みが浅いということです。平文(plain)での認証になるので安全対策としてはあんまり好ましくないです。しかし導入が比較的楽。2はmd5などのハッシュが使えるので暗号化の度合いが深くていいです。しかし、有線順位を明示的にしないと平文での認証も可能です。この方法では新たにパスワードファイルを自作する必要があるのですが、パスワードファイルが別になる分だけ安全です。3は、システムのパスワードファイルをそのままsaslauthで使ってしまおうというやり方です。パスワードファイルを作らなくていいので便利です。
ここでは2の方法で設定してゆこうと思います。
SASL2のインストール
SASL2のパッケージはこれまた意地悪なことに二つあります。二つインストールしないと動きません。# apt-get install libsasl2-modules sasl2-binlibsasl2-modulesとsasl2-binの二つをインストールしてください。一応インストールされたパッケージを確認してみます。
# dpkg -l | grep sasl2こんな感じでOK!
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
SASL2の設定ファイルの編集
/etc/default/saslauthdを開いて(殆ど冒頭ぐらいの箇所にある)START=noという部分を、START=yesに変更して保存します。ここではシステムの起動時にsaslauthdが一緒に起動するように設定しています。START=yes最後にsaslauthdを起動します。
# /etc/init.d/saslauthd startSASLの設定ファイルを編集していないと、* 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 serverPostfixとsaslとの関連の設定をします。おそらく、ですが...上記のコピペを追加するだけで大丈夫だと思います。$myhostnameの部分には以前に設定した値が入ってきます。
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
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というデーモンで認証するのでそれを指定。mech_list:では認証方法を設定します。 OutlookExpressなんかのメーラーですとplainとloginでしか認証できないのでこれも設定します。もっとセキュリティーの強いMD5 とかの設定があるのですがここでは妥協。
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: cram-md5 digest-md5 plain login
認証ユーザーの登録
SMTP認証をするアカウントユーザーの登録をします。登録する内容は、- ドメイン
- ユーザー名
- パスワード
実際に登録をする方法は以下のとおりです。
# saslpasswd2 -c -u <ドメイン> <ユーザー名>
# saslpasswd2 -c -u example.com userこれで登録完了です。
Password: ******* (パスワードを入力)
Again (for verification): ******* (パスワードを再入力)
またこの認証アカウントを削除する場合は、
# saslpasswd2 -d -u <ドメイン> <ユーザー名>となっています。
登録したユーザーを確認するには、
# sasldblistusers2という風に確認できます。つまりはuser@example.comのメールの送信を受け付けるという意味です。
user@example.com: userPassword
設定後は再起動します。
# /etc/init.d/saslauthd restart [sasl2の再起動]
# /etc/init.d/postfix restart [postfixの再起動]
SMTP Authの動作確認
きちんと認証機能が設定されているかどうかをテストします。# /usr/sbin/testsaslauthd -u <ユーザー名> -p ***********「0: OK "Success."」と表示されたら設定完了です。「0: NO "authentication failed"」となったら駄目です。設定をもう一回見直してください。
0: OK "Success."
しかしこの時点では、saslのコマンド内での設定が認証されているだけであってSMTPの認証がされているわけではありません。本来のSMTPの認証にはもうひと手続き必要です。
Postfixがsaslの認証用データベースを読み込めるようにする
幸か不幸か、postfixが参照する設定ファイルとsaslが登録する認証データベースの位置がバラバラなのです。実行ユーザーも違うし場所も違う。てんでバラバラなのでPostfixがsaslの認証データベースを読み込めるようにしないといけません。一つは、saslのデータベース自体をpostfixの実行グループにして読み込めるようにすること。もう一つは、saslの認証データベースを/var/spool/postfix/etcから読み込めるようにする、つまりハードリンクを貼って...ということです。# chgrp postfix /etc/sasldb2これでPostfixがsaslのデータベースを読み込めるようになります。
# chmod 640 /etc/sasldb2
# ln /etc/sasldb2 /var/spool/postfix/etc
最後に再起動します。
/etc/init.d/postfix restart
/etc/init.d/saslauthd restart
SMTP認証の確認
今では滅多に使わないtelnetで確認できます。こういう時はやはり原始的な方法が便利ですね。# telnet localhost 25 [ENTER]太字が入力部分です。250-AUTH PLAIN CRAM-MD5 LOGIN NTLM DIGEST-MD5でもってきちんと認証されていることがわかりります。ここまで来ると外部からメールを送信してPostfixがメールを受け取りメールボックスに配信することができます。
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



