前回までの関連記事
- Debian(Ubuntu)で postfix を使ってみる
- postfixを使って単純に全メールを1つのメールサーバーへ転送する
- Postfix で dk-milter(dk-filter) を使ってDomainKeys に対応する(Debian/Ubuntu編)
- Postfix で dkim-milter(dkim-filter) を使ってDKIM に対応する(Debian/Ubuntu編)
前回までで、Postfixの送受信の環境設定を行いました。
今回は、Submissionポート(サブミッション・ポート)& SMTP-AUTH(認証)を使ってメールの中継を行ってみます。
TCPポート25を使ってメールの送信を規制することです。
SPAM対策の一つで、一般的にISP管理下のIPアドレスに関してOP25B対象となり、ISP管理下のPCからいきなりTCPポート25を使って他のサーバーへメール送信できなくなります。 つまり、メール送信は、ISPが運用するSMTPを経由しないと送信できないようになっています。
ただ、これでは、出先でいつも利用しているISP以外のISPでインターネットに接続した場合、メール送信できなくなります。 (いつも利用しているISP以外のISPのOP25Bの規制により、TCPポート25を使っていつも利用しているISPが運用するSMTPへ接続できません。) その対策として、Submissionポート(サブミッション・ポート)があります。
いかなるインターネット接続状態からのメール送信のための TCPポート25と異なるTCPポート(TCPポート587)のことを言います。
このSubmissionポートを使う(tcpポート番号を違える)ことで、OP25Bの規制を回避し、メール送信ができるようになります。
一般的に、このSubmissionポートを利用するには、認証(ユーザ、パスワード)が必要になります。
メール送信に使うプロトコルであるSMTPにユーザ認証機能を追加した仕様のことで、RFC 2554によって規定されています。
- 目次
- 履歴
2012年5月31日 初版
Submissionポートのための設定
Submissionポートを利用するためのSMTP-AUTH(認証)にSASLを利用します。
手順として、まずは、
の順で設定していきます。
[ 用語の解説 ]
- Outbound Port25 Blocking(OP25B)とは
- Submissionポート(サブミッション・ポート)とは
- SMTP Authentication (SMTP-AUTH)とは
- Simple Authentication and Security Layer(SASL)とは
- STARTTLS / SMTPs とは
インターネットプロトコルにおける認証とデータセキュリティのためのフレームワークである。 アプリケーションプロトコルから認証機構を分離することを可能にし、理論上はSASLでサポートする任意の認証機構を任意のアプリケーションプロトコルで使うことができる。 あるユーザーが別の者のアイデンティティを仮定できる「プロキシ認証」もサポートできる。 データ一貫性/データ機密性サービスを提供する「データセキュリティ層」も提供できる。 データセキュリティ層を提供する機構の例として DIGEST-MD5 がある。 SASLをサポートするアプリケーションプロトコルは、Transport Layer Security (TLS) もサポートしてSASLの提供するサービスを補完するのが一般的である。
(出典:Wikipedia)
要は、インターネットにおける認証システムの1つです。
SendmailのSubmissionポートを利用する上での認証にSASLを用います。
SASLをインストールする
以下の3つのパッケージがインストールされていればOKです。
- libsasl2-2
- libsasl2-modules
- sasl2-bin
インストールされていないようなら、以下のようにインストールします。
|
また、Debian,Ubuntuで提供されているPostfixでは、デフォルトSASLに対応したバイナリパッケージが提供されていますので、Postfixの再構築などは必要ありません。
PostfixでSASLに対応しているか否か確認するには、以下のコマンドで確認することができます。
|
dovecot : Dovecot SASL のこと。
もし、上記のコマンドで何も出力されない場合は、Postfixの再構築が必要になります。
認証のための設定を行う
SMTP-AUTH認証には、大きく2つの方法が提供されています。
- PAM認証 :
– Pluggable Authentication Module を略してPAMと言います。 PAM自体は、認証のためのモジュール群を言います。厳密には異なりますが、簡単にはLinux(Unix)のユーザ認証をそのまま利用できる仕組みでもあります。 つまり、メール専用のユーザ、パスワードを必要としません。
- SASL認証 :
– Simple Authentication and Security Layer を略してSASLと言います。 SASL自体は、認証のためのセキュアなレイヤ規格を言います。簡単にはLinux(Unix)のユーザ認証とは別にセキュアな認証方法を別途提供するものです。 つまり、メール専用のユーザ、パスワードを必要となります。
いずれも先のSASL関連パッケージに含まれているので、他のパッケージをインストールする必要はありません。
以降に、それぞれの設定方法を簡単に解説しておきます。
共通設定(Postfix の設定) :
いずれの認証においても SMTP-AUTHのための設定は、
の編集内容は変わりません。
以降に各ファイルの編集概要を記載しておきます。
|
リモートの SMTPクライアントが認証されると、リレーアクセスを許可するのに次のように permit_sasl_authenticated アクセス制限が使えます:
|
|
デフォルトでは、ローカル認証 realm 名は null 文字列です。
例:
|
この機能はPostfix 2.1および2.2で利用可能です。Postfix 2.3では、smtpd_sasl_path と改名されました。
この機能はPostfix 2.1および2.2で利用可能です。Postfix 2.3では、smtpd_sasl_path と改名されました。
以下のセキュリティ機能は cyrus サーバSASL実装用に定義されているものです:
Postfix SMTPサーバがクライアントに提供する認証メカニズムを制限します。使用できる認証メカニズムのリストはシステムに依存します。
以下のゼロ個以上を指定します:
- noplaintext
– 平文パスワードを使う方法を許可しません。
- noactive
– active (非辞書) 攻撃を受けるような方法を許可しません。
- nodictionary
– passive (辞書) 攻撃を受けるような方法を許可しません。
- noanonymous
– 匿名認証を認めるような方法を許可しません。
- mutual_auth
– 相互認証を提供する方法のみを許可します (SASL バージョン 1 では使えません)。
警告: クライアントはサーバが案内した順番 (例えば PLAIN ANONYMOUS CRAM-MD5) で認証方法を試すようであり、平文パスワードを無効にすると、これはクライアントが CRAM-MD5 を使えたとしても匿名でログインしようとしてしまうことを意味します。そのため、平文ログインを無効にする場合、匿名ログインも無効にしてください。Postfixは匿名ログインを認証とは扱いません。
例:
|
標準的でない方法の AUTH サポートをPostfixに案内させるには、”broken_sasl_auth_clients = yes” を指定します。
- IPアドレスが $mynetworks にマッチするクライアントからのメール、または:
- 送信者指定のルーティング ((user@elsewhere@domain) を含むアドレス宛以外で $relay_domains にマッチするリモートの配送先へのメール、または:
- $inet_interfaces や $proxy_interfaces , $mydestination , $virtual_alias_domains , $virtual_mailbox_domains にマッチする、ローカル配送先へのメール。
|
以下の制限は RCPT TO コマンドで受け取る受信者アドレスに特有です。
- check_recipient_access type:table
– 指定された access(5) データベースで RCPT TO アドレスやドメイン、親ドメイン、localpart@ を検索し、対応する action を実行します。
- check_recipient_mx_access type:table
– 指定された access(5) データベースで RCPT TO アドレスのMXホストを検索し、対応する action を実行します。注意: 安全上の理由から “OK” という結果は許されません。特定のホストをブラックリストから外すには、代わりに DUNNO を使ってください。この機能はPostfix 2.1以降で使えます。
- check_recipient_ns_access type:table
– 指定された access(5) データベースで RCPT TO アドレスのDNSサーバを検索し、対応する action を実行します。注意: 安全上の理由から “OK” という結果は許されません。特定のホストをブラックリストから外すには、代わりに DUNNO を使ってください。この機能はPostfix 2.1以降で使えます。
- permit_auth_destination
– 以下のうち一つを満たした場合に、要求を許可します:
- Postfixがメールを転送する場合: 解決された RCPT TO アドレスが $relay_domains またはそのサブドメインにマッチし、送信者指定のルーティング (user@elsewhere@domain) を含まない場合、
- Postfixが最終配送先の場合: 解決された RCPT TO アドレスが $mydestination や $inet_interfaces , $proxy_interfaces , $virtual_alias_domains , $virtual_mailbox_domains にマッチし、送信者指定のルーティング (user@elsewhere@domain) を含まない場合。
- permit_mx_backup
– ローカルメールシステムがRCPT TOアドレスのバックアップMXの場合、もしくはアドレスが認められた配送先 (定義は permit_auth_destination を参照) の場合に、要求を許可します。
- 安全性: permit_mx_backup は送信者指定のルーティング情報 (例: user@elsewhere@domain) を持つアドレスは受け付けません。
- 安全性: アクセスが permit_mx_backup_networks で制限されていない場合、permit_mx_backup を間違って使うと脆弱性を持つ可能性があります。
- 安全性: Postfixバージョン2.3では、ローカルメールシステムが受信者ドメインのプライマリMXの場合、permit_mx_backup はアドレスを受け付けなくなりました。例外: アドレスが認められた配送先 (定義は permit_auth_destination を参照) の場合には、 permit_auth_destination はアドレスを受け付けます。
- 制限: Postfixバージョン2.0より前のバージョンでは、一時的にDNS検索に問題があってもメールが拒否されるかもしれません。
- reject_non_fqdn_recipient
– RCPT TO アドレスが RFC で要求されているような完全修飾ドメイン形式ではない場合に、要求を拒否します。 non_fqdn_reject_code パラメータには拒否された要求に対する応答コードを指定します (デフォルト: 504)。
- reject_rhsbl_recipient rbl_domain=d.d.d.d
– RCPT TO ドメインが rbl_domain 以下の A レコード “d.d.d.d” でリストアップされている場合に、要求を拒否します (Postfixバージョン 2.1以降のみ)。”=d.d.d.d” が指定されていないと、逆にしたクライアントネットワークアドレスが rbl_domain 以下のいずれかの A レコードでリストアップされている場合に、要求を拒否します。 maps_rbl_reject_code パラメータには要求を拒否する際の応答コードを(デフォルト: 554)、default_rbl_reply にはデフォルトのサーバ応答を、そして rbl_reply_maps パラメータには rbl_domain でインデックス化されたサーバ応答を持つテーブルを指定します。この機能はPostfixバージョン2.0以降で使えます。
- reject_unauth_destination
– 以下のどれか一つに当てはまらない場合に、要求を拒否します:
- Postfixがメールを転送する場合: 解決された RCPT TO アドレスが $relay_domains またはそのサブドメインにマッチし、送信者指定のルーティング (user@elsewhere@domain) を含まない場合、
- Postfixが最終配送先の場合: 解決された RCPT TO アドレスが $mydestination や $inet_interfaces , $proxy_interfaces , $virtual_alias_domains , $virtual_mailbox_domains にマッチし、送信者指定のルーティング (user@elsewhere@domain) を含まない場合。
relay_domains_reject_code パラメータには、拒否された要求に対する応答コードを指定します (デフォルト: 554)。
- reject_unknown_recipient_domain
– Postfixが受信者アドレスの最終配送先ではなく、かつRCPT TOアドレスにDNS AもしくはMXレコードがない場合、もしくは長さがゼロのMXホスト名を持つような不正なMXレコードを持つ場合に、要求を拒否します (Postfixバージョン2.3以降)。 unknown_address_reject_code パラメータには、拒否された要求に対する応答コードを指定します (デフォルト: 450)。一時的なDNSエラーの場合には、応答は常に450です。
- reject_unlisted_recipient (Postfixバージョン2.0では: check_recipient_maps)
– RCPT TO アドレスがドメインクラスに対する有効な受信者リストにない場合に、要求を拒否します。詳細は smtpd_reject_unlisted_recipient の記述を参照してください。この機能はPostfix 2.1以降で使えます。
- reject_unverified_recipient
– RCPT TO アドレスがバウンスするとわかっている場合や、受信者アドレスの配送先に到達できない場合に、要求を拒否します。アドレス検証情報は verify(8) サーバによって管理されます; 詳細は ADDRESS_VERIFICATION_README ファイルを参照してください。 unverified_recipient_reject_code パラメータには、アドレスがバウンスするとわかっている場合の応答を指定します (デフォルト: 450、変えても安全だという自信がある場合には 550に変えてください)。Postfixは一時的な問題でプローブが失敗した場合には450で応答します。この機能はPostfix 2.1以降で使えます。
- SMTP コマンドのどの場面でも使える一般的な制限は smtpd_client_restrictions に記述されています。
- SMTP コマンドに特有の制限は smtpd_client_restrictions や smtpd_helo_restrictions , smtpd_sender_restrictions に記述されています。
|
|
SASL認証 :
- SASLのユーザ、パスワードを設定する
インストールを終えたら、SASLのユーザ、パスワードを設定します。
ここでのユーザはメールアドレスになります。
例)
$ /usr/sbin/saslpasswd2 -u example.com hoge Password: Again (for verification):
上記の例では、ユーザ名:hoge@example.comとなります。
パラメータの指定順(ドメイン名、ユーザの順)に注意してください。
あとは、指示に従ってパスワードを入力し、完了となります。
登録したユーザは、以下のコマンドで確認することができます。
$ /usr/sbin/sasldblistusers2 hoge@example.com: userPassword
登録したユーザを削除したい場合は、ユーザの指定の仕方に注意してください。sasldblistusers2で表示されるユーザIDのように user@domain のように指定します。$ /usr/sbin/saslpasswd2 -d hoge@example.com
- SASLのユーザ、パスワードを保存したファイルのグループを変更する
postfix のプロセスからアクセスできるようにグループをpostfixへ変更しておきます。
$ chgrp postfix /etc/sasldb2 $ chmod 640 /etc/sasldb2
さらに、先の共通設定で、master.cf の設定で submission が chroot を使用している場合(chrootのパラメータ位置 に n が設定されていないので、chrootを使っています)、
/etc/sasldb2 のリンクファイルを /var/spool/postfix/etc/ に作成します。
$ ln /etc/sasldb2 /var/spool/postfix/etc
/etc/postfix/sasl/smtpd.conf がもし存在する場合は、削除しておきます。 また、saslauthd が動作している場合は、停止しておきます。
|
PAM認証 :
- saslauthd をPAM認証の設定をする
/etc/default/saslauthd
... START=yes ... MECHANISMS="pam" ... # chrootを使っている場合のみ以下を変更します。 #OPTIONS="-c -m /var/run/saslauthd" OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
先の共通設定で、master.cf の設定で submission が chroot を使用している場合(chrootのパラメータ位置 に n が設定されていないので、chrootを使っています)、
上記のように OPTIONS の編集も行います。
さらに、OPTIONSで指定したディレクトリを作成しておきます。
$ mkdir -p /var/spool/postfix/var/run/saslauthd
- sasl/smtpd の設定をする
/etc/postfix/sasl/smtpd.conf にて、smtpdの認証の詳細を設定することができます。
/etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd mech_list: plain login
pwcheck_method認証方法を指定します。
- saslauthd : saslauthd による認証を行います。
- auxprop : SASL自身のパスワードデータベース による認証を行います。
- pwcheck : UNIXパスワードデータベースに対して 認証を行います。
mech_list認証メカニズムを指定します。( plain login のみ )
- plain : 平文を用います。
- login : ログイン認証を用います。
saslauthd が動作させておく必要があります。
|
全ての設定を終えたら、Postfixを再起動します。
|
Submission Port + SMTP-AUTH (認証)を確認する
別のサーバーから、telnetを使って確認してみましょう。
対象となるSMTPサーバーのIPアドレスは、12.34.56.78とします。
|
ユーザ、パスワードに関しては、Base64によるエンコードされた文字列になります。(Base64でデコードすると..)
334 VXNlcm5hbWU6 → Username:
334 UGFzc3dvcmQ6 → Password:
のようにプロンプトの表示から、Base64によるエンコードされているのに注意してください。
また、ここでの入力は、(Base64によるエンコードする)
ユーザに hoge@example.com → aG9nZUBleGFtcGxlLmNvbQ==
パスワードに pppwww → cHBwd3d3
のようにBase64によるエンコードされた文字列を入力します。
Base64によるエンコード、デコードは、http://ostermiller.org/calc/encode.htmlにて行うことができます。
- saslauthd自体が立ち上がっていない
- saslauthdのファイルへのアクセスができない
|
前者の場合、
saslauthd を起動します。
|
後者の場合、
先のPAM認証設定 で設定した /etc/default/saslauthd のOPTIONSで指定したディレクトリへのアクセスができない状態がほとんどです。
その場合、デフォルトでは、postfixは、postfixという名前のユーザで動作していますので、そのユーザpostfixに sasl グループ を追加してあげればOKです。
|
|
以下は、TCPポート25を使ったメールのリレーが、正しく規制されるか確認しています。
|
最後にSubmission Portから送信したメールが正しく届いたか確認できたらOKです。
一番簡単なSubmission Portの設定について、簡単ながら解説してみました。
次回は、SSLプロトコルを使ったメールの暗号化(STARTTLS)を行ってみましょう。
広い意味でのSTMP over SSL (SMTPs) の1つの方法で、最初の接続時においては、SMTP が利用され、その後、SSL(or TLS)にて暗号化が施されます。
それに対して、SSL/TLSとは、
最初の段階から、SSL(or TLS)による暗号化が図られており、より安全と言われています。
先にも書いたようにいずれも広い意味での、STMPs ( STMP over SSL )といわれています。
狭い意味でSTMPs ( STMP over SSL )という場合は、後者を指します。
STARTTLSは、一般的にSubmission Port (587) と共に用いることが多く、
SSL/TLSは、別のSubmission Port (465) が用いられます。
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
2012年12月1日, 4:08 AM
どうも,このsasl-auth設定,非常に分かり易く助かりました!!
今後ともお世話になりますっ!!
2012年12月1日, 1:25 PM
セネカな日々さん
コメントありがとうございます。こんなコメントはほんとうれしいですね。こちらこそ、お世話になります。