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認証


  1. 2 Trackback(s)

  2. Jul 31, 2010: Outbound Port 25 Blocking 対策 | Yama's Memorandum
  3. Sep 5, 2011: Yama's Memorandum » Blog Archive » 自宅サーバー構築・覚書きリスト

Post a Comment