Postfixの設定とSASL認証
December 8, 2007 – 9:07 pm日常的に使用するメールサーバは、我が家で加入しているプロバイダのものを利用している。構築中のPCサーバ上にメールサーバを新たに立ち上げ、これに変えるつもりはない。しかし、構築中のサーバマシンのシステムログをE-Mail経由で受け取ることを可能にすること、そしてメールサーバの仕組みを理解するという技術的興味から、Webサーバに加えてメールサーバも構築することにした。自前のメールサーバを構築できれば、メーリングリストを作るなど、いろいろ使い道もありそうだ。検討の結果、メール(SMTP)サーバとしてPostfixを用いることにした。
Postfixの設定は、初心者の私にとっては骨が折れる作業であった。なんとかSMTPサーバとして動作したものの、いまだ、設定内容については十分に理解するとは言い難い。もう一度、設定内容について、Postfixの公式ドキュメントあるいは解説記事などを読み直すことにし、それに基づいて設定作業用メモを作ることにした。
まず、yumによりPostfixをダウンロード、インストールしたのち、/etc/postfix/main.cfを以下のように設定した(主要なところのみ記載)。
# INTERNET AND DOMAIN NAMES myhostname = host-name.yamasnet.com mydomain = yamasnet.com # SENDING MAIL myorigin = $mydomain ;上記でローカルからの配信元をuser-account@yamasnet.comの形式にする。 user-account@host-name.yamasnet.comの形式にする場合には、$myhostname # RECEIVING MAIL inet_interfaces = all ;リモートからの受信を可能にする unknown_local_recipeint_reject_code = 550 ;受信者がリスト上存在しないときのリターンコード(550でメールの受信拒否) # TRUST AND RELAY CONTROL mydestination = $myhostname, localhost.$mydomain, $mydomain ; 受信するメールの形式をドメイン名のみの場合でも受け付ける形式とする mynetworks = 192.168.1.0/24, 127.0.0.0/8 ; メールリレーを受け付けるクライアントアドレスを定義 relay_domain = $mydestination ;メールをリレーする配送先のドメインを定義 #ALIAS DATABASE alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases ;別名(alias)を登録するエイリアスデータベースの定義 #DELIVERY TO MAILBOX home_mailbox = Maildir/ ;メールの保存場所をユーザのホームディレクトリとするMaildir形式とする
これに、Postfixを通じたMailの送受信において、ユーザの認証を可能にするための仕組み(SASL: Simle Authentication and Security Layer)を導入する。Postfix自体は認証メカニズムを持っておらず、広く認められている認証機構のひとつであるSASLの枠組みを使うわけである。Postfixで採用する認証方式を理解するうえで、SASLの理解を深めることが重要だ。SASLについて、公式のプロトコールの説明あるいは、その解説がネット上に多々見られる。これらのうち、「インターネットサーバ構築講義メモ」の説明が分かりやすかった。これを私の理解の範囲で要約すると以下のようになる(正確には、「構築講義メモ」の該当部を参照して欲しい)。
SASLでは、PLAIN(暗号化されていない平文パスワード)、CRAM-MD5 あるいはその改良版DIGEST-MD5 (チャレンジアンドレスポンド方式の認証)、EXTERNAL(TLSのような外部の仕組み)など様々な認証メカニズムを利用することが可能である。パスワードの検証は、saslauthd、sasldb、SQLデータベース、LDAPなどの方法で行われる。このうち、saslauthdはSASL 独自の認証データベースを作らず、オペレーティングシステムの認証機構を利用するためのデーモンであり、root 権限が必要な認証機構を個々のアプリケーションから直接利用できるよう、saslauthd デーモンがアプリケーションと認証機構の間を橋渡しする。saslauthd を使えば PAM を経由して様々な認証機構が利用出来るが、 PLAIN や LOGIN などの平文パスワードを使った認証メカニズムでしか利用出来ない。 sasldb、SQLでは、データベースにパスワードを格納することができ、またLDAPでは認証データをLDAPサーバに格納することができる。
さて、Postfixにどのように、SASLのメカニズムを導入するかである。CentOS5では、Postfixで用いる認証方式は/usr/lib/sasl2/smtpd.confファイルに指定することができる。Postfixをインストールすると、このファイルには、
pwcheck_method:saslauthd
と、ディフォルトでパスワードの検証をsaslauthdによる方式としている。検証方式を別のものにする場合には、saslauthdに変えて、auxpropとすることになる。我が家のサーバでは、saslauthdを用いる方法とし、システムアカウント情報を認証情報として利用するため、以下の行を付け加えた。
mech_list: plain login
以上の手続きを完了したのち、ルート権限で以下のコマンドによりsaslauthdデーモンを起動し、saslの認証メカニズムを動作可能にした。
/sbin/service saslauthd start /sbin/chkconfig saslauthd on
次に、/etc/postfix/main.cfファイルに対し、以下を追加、これによりPostfixに認証メカニズムが導入されるはずだ;
smtpd_sasl_auth_enable = yes ;PostfixSMTPサーバにおいてSASLが動作可能にする smtpd_recipeint_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination ;認証されたリモートのSMTPクライアントによるメールリレーを許可する broken_sasl_auth_clients = yes ;マイクロソフトの旧式のメーラ(Outlook login)の認証を利用可能にする
以上の設定で、Postfixのサービスを開始することができる。実際に、ここで設定作業をおこなったSMTPサーバを動作させるには、この後、ディフォルトで動作状態になっているsendmailの停止、DNSのMXレコードの設定、さらには受信サーバの設定構築などの作業が必要になる。これらの作業内容は、次回以降のブログにまとめることにする。
参考にしたドキュメント、解説記事:
(1) Postfix SASL Howto
(2) インターネットサーバ構築講義メモ
(3) Postfixの運用管理第2回:SMTP認証
2 Trackback(s)