Postfix

小規模な事業所での利用に関するヒントや秘訣 - Postfix解説文書

原文(英語)はこちら


概要

この文書は「小規模な事業所」でPostfixを利用するときのヒントや秘訣を探しやすいように1つの文書にまとめたものです。ここではメールを送信する側についてのみ記しています。もしあなたのマシンがメールを直接受信しない場合(つまり、独自のインターネットドメイン名と固定IPアドレスを持っていない場合)、「fetchmail」のような手段も必要になりますが、それについてはこのPostfix解説文書の範囲外です。

この件についてより詳しくは SASL_READMESTANDARD_CONFIGURATION_README の文書を参照してください。

インターネット上にある単独ホスト上で動作するPostfixの場合

インターネットに直接接続できるスタンドアロンマシンであれば、Postfix はそのままで問題なく動作するはずです。少なくとも、http://www.postfix.org/ から Postfix のソースコードをダウンロードした場合は、そのようにインストールされます。

postconf -n」のコマンドを実行すると、どの設定がmain.cfによって上書きされているのかを確認することができます。スタンドアロンでは、いくつかのパス名設定のほかに、BASIC_CONFIGURATION_README文書で説明している内容以外のパラメータはほとんど設定する必要がありません。

/etc/postfix/main.cf:
    # 設定は任意: メールを user@hostname ではなく user@domainname のアドレスで送信する
    myorigin = $mydomain

    # 設定は任意: NAT/プロキシの外部アドレスを指定する
    proxy_interfaces = 1.2.3.4

    # 選択肢1: 他のホストからのメールを中継しない
    mynetworks_style = host
    relay_domains =

    # 選択肢2: ローカルクライアントからのメールのみ中継する
    mynetworks = 192.168.1.0/28
    relay_domains =

もしあなたの設定に該当するのであれば、「インターネット上に実在するホスト名がないホスト上で動作するPostifxの場合」の節も参照してください。

インターネット上に実在するホスト名がないホスト上で動作するPostifxの場合

この節は、独自のインターネットホスト名を持たないホストのためのものです。一般的には、DHCP やダイアルアップで動的な IP アドレスを取得しているシステムがこれに該当します。Postfix がうまくメールを送受信することができるのは、仮の名前を持つマシン内のアカウント相互間のみです。しかし、インターネットにメールを送るとき、電子メールアドレスに仮のホスト名を使うことはできません。それは、誰もあなたのメールに返信することができないからです。実際、存在しないドメイン名のメールアドレスを拒否するサイトが増えています。

注意:以下の情報はPostfixのバージョンに依存します。Postfixのバージョンを確認するには「postconf mail version」のコマンドを実行してください。

解決策1:Postfixバージョン2.2以降

Postfix 2.2は generic(5)アドレスマッピングを使って、ローカルの仮電子メールアドレスをインターネットで有効なアドレスに置き換えます。この置き換えはメールがマシンを離れるときにだけ行なわれ、同一マシン上のユーザ間でメールを送信するときには行なわれません。

以下に追加設定の例を示します。なお、実際にはこの文書の前半で説明した基本的な設定を組み合わせる必要があります。

1:	/etc/postfix/main.cf:
2:	    smtp_generic_maps = hash:/etc/postfix/generic
3:
4:	/etc/postfix/generic:    
5:	    his@localdomain.local	hisaccount@hisisp.example
6:	    her@localdomain.local	heraccount@herisp.example
7:	    @localdomain.local		hisaccount+local@hisisp.example

SMTPを使ってリモートホストにメールを送るとき

システムにおいてdbファイルではなくdbmファイルを使っている場合は、hashの代わりにdbmを指定してください。

genericテーブルを更新したときはいつも「postmap /etc/postfix/generic」を実行を実行するようにしてください。

解決策2:Postfixバージョン2.1以前

PostfixのSMTP/LMTPクライアントでSASL認証を有効にする

ここでは、Postfix SMTPクライアントが、SASL認証を必要とするメールゲートウェイサーバーを経由してすべてのメッセージを送信する典型的なシナリオを示します。

トラブル解決のコツ

例をより読みやすくするために、2つの部分に分けて紹介します。最初の部分では基本的な設定を行い、2番目の部分ではユーザー名とパスワードの情報を指定します。

/etc/postfix/main.cf:
    smtp_sasl_auth_enable = yes
    smtp_tls_security_level = encrypt
    smtp_sasl_tls_security_options = noanonymous
    relayhost = [mail.isp.example]
    # 別の書き方
    # relayhost = [mail.isp.example]:submission
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
/etc/postfix/sasl_passwd:
    # 宛先	認証情報
    [mail.isp.example]	username:password
    # 別の書き方
    # [mail.isp.example]:submission username:password

重要

SASLクライアントパスワードファイルを/etc/postfixに保存し、ユーザ名とパスワードの組み合わせを他のユーザから保護するために、ファイルをrootのみ読み書きできるようにします。Postfix SMTPクライアントは、それでもSASLクライアントパスワードを読み取ることができます。それは、特権がなくされる前、オプションのchroot jailに入る前に、rootユーザーとしてファイルを開くからです。

送信者別のSASL認証に関する設定

Postfix バージョン2.3以降では、送信者アドレスごとに異なるISPアカウントを使うことができます。これは、ある人が仕事とプライベートで同じマシンを使っている場合や、異なるISPアカウントを持つ人が同じPostfixサーバーを共有している場合などに便利です。

これを可能にするために、Postfixは送信者ごとのSASLパスワードと送信者ごとのリレーホストを指定できるようになっています。下記事例の場合、Postfix SMTP クライアントは、SASL パスワードファイルで送信先アドレスを検索する前に、同じファイルで送信者アドレスで検索します。同様に、Postfix trivial-rewrite(8)デーモンは送信者ごとのrelayhostファイルを検索し、最終手段としてのみデフォルトのrelayhostの設定を使います。

/etc/postfix/main.cf:
    smtp_sender_dependent_authentication = yes
    sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    relayhost = [mail.isp.example]

/etc/postfix/sasl_passwd:
    # 送信者別の認証:/etc/postfix/sender_relay も参照してください。
    user1@example.com	username1:password1
    user2@example.net	username2:password2
    # デフォルトrelayhostのログイン情報
    [mail.isp.example]	username:password
    # 別の書き方
    # [mail.isp.example]:submission	username:password

/etc/postfix/sender_relay:
    # 送信者別の認証:/etc/postfix/sasl_passwd も参照してください。
    user1@example.com	[mail.example.com]:submission
    user2@example.net	[mail.example.net]

トップページに戻る