postfix で RBL を利用する場合

Postfix で RBL を使用する場合、単純に「smtpd_recipient_restrictions」内のしかるべき場所に「reject_rbl_client」で指定してあげたら良いだけです。

ただ、改めてドキュメントを見ていると、返答された A レコードの内容によって通したり通さなかったり出来る模様でした。

smtpd_recipient_restrictions =
	permit_mynetworks,
	permit_sasl_authenticated,
	reject_unauth_destination,
	reject_rbl_client all.rbl.jp,
	reject_rbl_client bl.spamcop.net,
	reject_rbl_client zen.spamhaus.org=127.0.0.[2;3;4;5;6;7;10;11]

こんな感じで書いた場合、

  • all.rbl.jp および bl.spamcop.net で接続元 IPv4 (aaa.bbb.ccc.ddd だと ddd.ccc.bbb.aaa.rbl_domain の様な形式) で A レコードを引いて、何か値が返ってきたらブロック。
  • zen.spamhaus.org で引いた場合で、127.0.0.2, 127.0.0.3, 127.0.0.4, 127.0.0.5, 127.0.0.6, 127.0.0.7, 127.0.0.10, 127.0.0.11 のいずれかが返ってきた場合ブロック。

となる様でした。

なお、「reject_rbl_client」パラメータの「rbl_domain=」の後の IPv4 アドレスは Postfix 2.1 以降、[] 内の値を「;」文字で分割できるのは、Postfix 2.8 以降で使用できる模様です。

ちなみに、zen.spamhaus.org を使用している場合で、本当に設定が有効になっているかどうかを確認するには、設定したサーバから「nelson-sbl-test [アットマーク] crynwr.com」あてにメール送信をします。

正しく設定されていると、サーバ側のメールログにブロックされている旨が記録されますし、結果もメールで返送されてきます。

Postfix で DKIM 検証・署名に対応する (Debian 7)

Postfix と OpenDKIM を使用してのメールサーバ DKIM 対応について、Wheezy の場合の設定方法備忘録です。(とりあえず動くレベルです)

Squeeze までは、postfix + dkim-filter という構成で、DKIM への検証・署名に対応出来たのですが、Wheezy では dkim-filter パッケージが無くなっていました。

代替として opendkim パッケージを利用して設定が出来ましたのでそのメモです。

続きを読む

Postfix 2.9.6 + Dovecot 2.1.7 で Quota 設定 (maildirsize ベース)

Debian GNU/Linux 7 の Postfix + Dovecot で maildirsize ベースの Quota を設定したので、その手順の備忘録です。

基本的な手順は、「Postfix + Dovecot で Quota 設定 (maildirsize ベース)」とほぼ変わりませんが、若干「/etc/postfix/main.cf に下記を追加」の項目以下が異なりました。

Postfix 側の設定

・/etc/postfix/main.cf

virtual_mailbox_limit = 52428800
virtual_mailbox_limit_maps = hash:/etc/postfix/vquota
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = "over quota."
virtual_overquota_bounce = yes
virtual_maildir_extended = yes

上記はデフォルトで一律約 50MB の容量制限を設定しています。

以前は、「virtual_create_maildirsize」というパラメータがあったのですが、このバージョンの VDA パッチでは存在しないようで、「virtual_maildir_extended = yes」を設定してあげることで、maildirsize ファイルが出力されました。

「/etc/postfix/vquota ファイルを作成」の項目はそのままです。

・Dovecot 側の設定

次に、POP3 / IMAP4 サーバである Dovecot の設定ですが、こちらの設定ファイルの内容が、Debian GNU/Linux 6.0 の頃と変わっていて、やや難儀しましたが、「Quota – Dovecot Wiki」にあるとおり、以下のように設定することで、問題なく動作しています。

・/etc/dovecot/conf.d/10-mail.conf

mail_plugins = quota

・/etc/dovecot/conf.d/20-imap.conf

mail_plugins = $mail_plugins imap_quota

・/etc/dovecot/conf.d/90-quota.conf

plugin {
  quota = maildir:User quota
}

あと、DKIM 関係も「dkim-filter」パッケージが Wheezy では無くなっていて、代わりに「opendkim」が提供されていました。こちらの設定についても、忘れないうちに記載したいと思います。

こちらは基本的に、設定ファイルの内容はよく似ているし、当たり前ながら、dkim-filter で使用していたときのキーも使えるので、意外と移行は難しくなかったです。

Postfix + Dovecot で Quota 設定 (maildirsize ベース)

自サーバをメールボックスについて、imap4 対応としたので、今まで行っていなかった Maildir の Quota 制限をかけることにした。

maildirsize というファイルを出力・参照することにより、Postfix と Dovecot で Quota を実現できるみたいだったので、この方法を試してみた。

前提としては、Debian GNU/Linux 6.0 かつ、既に Virtual による Maildir 形式に対応する Postfix + Dovecot の設定が完了していることとする。

  1. Postfix のソースをダウンロードする

    # cd /usr/src
    # apt-get source postfix

    ※自動的に /usr/src 以下に Postfix のソースが展開される。

  2. postfix に VDA パッチを当てる

    Postfix VDA」より、ダウンロードしてきた Postfix と同一バージョン用のパッチを /usr/src にダウンロードして、パッチを当てる。

    # cd /usr/src/postfix-2.x.x
    # patch -p1 < ../vda.patch

  3. パッケージを作成する

    # dch -i
    # debuild -us -uc -d

    上記を行うと、一つ上のディレクトリに deb パッケージが出来上がる。

  4. インストールする

    dpkg -i コマンドで出来上がったパッケージをインストール。

  5. /etc/postfix/main.cf に下記を追加

    virtual_mailbox_limit = 52428800
    virtual_mailbox_limit_maps = hash:/etc/postfix/vquota
    virtual_mailbox_limit_override = yes
    virtual_maildir_limit_message = “over quota.”
    virtual_overquota_bounce = yes
    virtual_create_maildirsize = yes
    virtual_maildir_extended = yes

    ※上記はデフォルトで一律約 50MB の容量制限を設定する。

  6. /etc/postfix/vquota ファイルを作成

    example@example.com 20971520
    @example.net 15728640

    上記は example@example.com には約 20MB 、example.net ドメインの全てのメールアドレスに対しては、約 15MB を上限と設定している。
    これを反映するには、下記のコマンド入力が必要

    # cd /etc/postfix/
    # postmap vquota

    ここで Postfix をリスタートしておく。

  7. /etc/dovecot/dovecot.conf に下記を設定

    protocol imap {
    mail_plugins = quota imap_quota
    mail_plugin_dir = /usr/lib/dovecot/modules/imap
    }

    protocol pop3 {
    mail_plugins = quota
    mail_plugin_dir = /usr/lib/dovecot/modules/pop3
    }

    plugin {
    quota = maildir
    }

    ここで Dovecot をリスタートしておく。

メールが届くと、各メールアドレスの Maildir 内に maildirsize ファイルが作成・更新される。また、メールを削除すると、maildirsize ファイルが更新される。

また、/etc/postfix/vquota ファイルを変更して postmap してやれば、次にメールが届いた際に、各メールアドレスの maildirsize ファイルの最大容量も更新された。

Dovecot 側の設定だが、「quota = maildir」の部分の指定が maildirsize を使う設定で、他に値を設定しない場合は、maildirsize の最大容量値が使用されるようだ。

※すなわち、メール容量の制限は /etc/postfix/vquota ファイルのみで行えばよいようだ。

・参考にさせていただいたサイト
Postfix+DovecotでQuotaを使う – satospo

Net: Postfix で SPF を検証する

このエントリを先頭に Postfix を DKIM 対応としていったが、ついでなので SPF も検証するように設定した覚え書き。

  • 前提
    OS : Debian GNU/Linux 5.0 lenny
    MTA : Postfix 2.5.5
  • postfix-policyd-spf-python パッケージをインストール
    # apt-get install postfix-policyd-spf-python
  • /etc/postfix-policyd-spf-python/policyd-spf.conf の設定
    下記のような感じで設定。

    # For a fully commented sample config file see policyd-spf.conf.commented

    debugLevel = 1
    defaultSeedOnly = 1

    #HELO_reject = SPF_Not_Pass
    #Mail_From_reject = Fail
    HELO_reject = False
    Mail_From_reject = False

    PermError_reject = False
    TempError_Defer = False

    skip_addresses = 127.0.0.0/8,::ffff:127.0.0.0//104,::1//128

  • /etc/postfix/master.cf の設定
    これは、/usr/share/doc/postfix-policyd-spf-python/README.Debian に記載されていたとおりに行う。
  • /etc/postfix/main.cf の設定
    これも、/usr/share/doc/postfix-policyd-spf-python/README.Debian に記載されていたとおりに行うが、設定したサーバでは Postgrey を導入している関係上、該当する箇所を以下のように設定した。

    smtpd_recipient_restrictions =
            permit_mynetworks,
            permit_sasl_authenticated,
            reject_unauth_destination,
            check_client_access regexp:/etc/postfix/check_client,
            check_policy_service unix:private/policyd-spf
    policyd-spf_time_limit = 3600

  • サービスの再起動
    /etc/init.d/postfix restart
  • 確認
    SPF が設定されているドメインからメールを送信して、受信メールのヘッダに検証結果が正しく出力されているか確認。

Postfix で DKIM の署名に対応する (複数ドメインの場合)

前回はメールサーバを 単一ドメインについて DKIM の署名に対応させたが、1 つのメールサーバで複数のドメインを運用する際に、それぞれのドメインで別の署名を使うように設定を行った。

※以下では、例として example.com と example.net を用いる。

  • 前提
    OS : Debian GNU/Linux 5.0 lenny
    MTA : Postfix 2.5.5
    すでに DKIM の検証DKIM の署名に対応していること。
    それぞれ秘密鍵は準備しているものとする。

  • 適切なディレクトリに秘密鍵をセレクタ名でコピーする
    今回は、example.com では test01 というセレクタを使い、example.net では test02 というセレクタを使う。

    # cp -a test01.private test01
    # cp -a test02.private test02

    ※必ず、ファイル名をセレクタ名と一致させる。
    ※これらのファイルは、dkim-filter ユーザのみアクセス可能とする。

  • 適切なディレクトリに鍵リストを作成する
    今回は、/etc/opt/dkim-filter/key.list として以下を作成

    *@example.com:example.com:/etc/opt/dkim-filter/test01
    *@example.net:example.net:/etc/opt/dkim-filter/test02
  • /etc/dkim-filter.conf の該当部分を以下のようにする

    #Domain			example.com
    #KeyFile		/etc/opt/dkim-filter/test01.private
    #Selector		test01
    KeyList			/etc/opt/dkim-filter/key.list

    ※ Domain / KeyFile / Selector をコメント化する。
    ※鍵リストファイルを KeyList で指定する。

  • サービスの再起動

    # /etc/init.d/dkim-filter restart
  • 確認
    それぞれのドメインで正しく署名されているか確認する。

  • 参考にさせて頂いたページ

※一部修正 (2011/12/21)

Postfix で DKIM の署名に対応する

先ほどは、メールサーバを DKIM の検証に対応させたが、引き続き DKIM の署名を行うようにしてみた。

今回は送信するメールについて、署名を行うので、まずは DNS サーバの設定から行う必要があった。
※ DNS サーバの設定は省略。
※以下では、例として example.com を用いる。

  • 前提
    OS : Debian GNU/Linux 5.0 lenny
    MTA : Postfix 2.5.5
    すでに DKIM の検証に対応していること。
    メールユーザからのメール送信は、サブミッションポートを使用していること。
    ゾーン情報を自由に変更できる DNS サーバで対象ドメインを運用していること。
  • 適当なディレクトリで、署名に必要な秘密鍵と公開鍵を作成する
    $ mkdir test
    $ chmod 700 test
    $ cd test
    $ dkim-genkey -b 1024 -d example.com -s test01

    ※ドメイン example.com 、セレクタ test01 で作成。

    $ chmod 600 test01.private

    ※ test01.private: 秘密鍵
    ※ test01.txt: 公開鍵 (この情報を DNS サーバの該当ゾーンファイルに登録する)

  • 適切なディレクトリに、秘密鍵をコピーする。
    # mkdir /etc/opt/dkim-filter
    # cp test01.private test01.txt /etc/opt/dkim-filter
    # chown -R dkim-filter:dkim-filter /etc/opt/dkim-filter
    # chmod 700 /etc/opt/dkim-filter

    ※公開鍵もコピーしているが、管理をわかりやすくするためで必須ではない。

  • 公開鍵の内容を以下の通り example.com のゾーンファイルに定義
    _policy._domainkey	600	IN	TXT	"t=y; o=~"
    test01._domainkey	600	IN	TXT	"v=DKIM1; g=*; k=rsa; p=公開鍵"

    ※ TTL は 600 秒でテスト。
    ※「_policy._domainkey」の「t=y」はテストモードであること、「o=~」は、署名されていないメールも送出される可能性があることを示す。

  • /etc/dkim-filter.conf の該当部分を以下のようにする
    Domain		example.com
    KeyFile		/etc/opt/dkim-filter/test01.private
    Selector	test01
    Mode		sv
  • /etc/postfix/main.cf
    以下を追加する。
    non_smtpd_milters = inet:127.0.0.1:60001

    ちなみに DKIM 関係の部分は以下の通り。

    smtpd_milters = inet:127.0.0.1:60001
    non_smtpd_milters = inet:127.0.0.1:60001
    milter_default_action = accept

    ※本当は、master.cf の方で設定すべきなのだろうと思う。

  • サービスの再起動
    # /etc/init.d/bind9 restart
    # /etc/init.d/dkim-filter restart
    # /etc/init.d/postfix restart
  • 確認
    dig で設定したレコードが引けるか確認。
    GMail にメール送信して、ちゃんと DKIM が Pass しているかヘッダを確認。
  • 不明点
    今回は単一ドメインのみだったが、バーチャルドメインなどの場合は、秘密鍵と公開鍵の扱いは、各ドメインにそれぞれ 1 つずつではなく、メールサーバ単位で 1 つとなるのだろうか。
    ※ /etc/dkim-filter.conf で「Domain example.com,example.net」という風にすると、両方のドメインで署名が付いたことは確認した。

    追記
    複数ドメインへの対応は、KeyList を使うことで、別々の鍵を使えることを確認した。詳しくはこちら

  • 参考にさせて頂いたページ

■修正

  • 一部修正 (2011/12/21)
  • DNS のゾーンに登録するポリシー名が間違っていたのを修正 (2012/01/10)

Postfix で DKIM の検証に対応する

VPS 上で動作しているメールサーバについて、DKIM の検証を行うようにしてみた。
今回は受信するメールについてのみチェックするだけなので、思っていたより簡単だった。

  • 前提
    OS : Debian GNU/Linux 6.0 squeeze (おそらく 5.0 lenny でも同様に設定可能)
    MTA : Postfix 2.7.1
  • dkim-filter をインストール
    # apt-get install dkim-filter
    # /etc/init.d/dkim-filter stop
  • Postfix と連携できるようにする
    • /etc/default/dkim-filter
      以下を追加する。
      ※ローカルホスト 60001 ポートで接続する例。
      ※ Debian の場合、Postfix が chroot で動作しているため、そのままではソケットで通信できない。
      SOCKET="inet:60001@localhost"
    • /etc/dkim-filter.conf
      検証のみおよびそのほかの諸設定。
      AutoRestart		yes
      AutoRestartRate	10/1h
      Background		yes
      Mode			v
    • /etc/postfix/main.cf
      以下を追加する。
      smtpd_milters = inet:127.0.0.1:60001
      milter_default_action = accept 
  • サービスの起動など
    # /etc/init.d/dkim-filter start
    # /etc/init.d/postfix restart
  • 確認
    GMail から設定したメールサーバへメールを投げてみて「Authentication-Results:」で Pass しているか見てみる。
  • 追記
    DKIM の署名にも対応させてみた。

※公開同時は、lenny に合わせて記載していたが、sqeeze リリース向けに内容を修正。(2011/12/21)

Net: 自宅サーバから eo 光の SMTP サーバにメールをリレーする

※このエントリーは、自宅サーバで公開していたものを、一部修正の上、こちらの Blog に転載しました。

OB25P 対策として、自宅サーバから eo 光のメールサーバに送信メールをリレーさせることですが、下記の設定を行うことによりに成功しました。

方法は下記の通りです。
なお、下記の情報は無保証です。ご自身の責任において、この情報をご利用下さい。

  • 必要な物
    eo 光ネットのメールアカウント
    Debian GNU/Linux
    Postfix なメールサーバ
  • 必要なパッケージをインストール
    # apt-get install postfix-tls
    # apt-get install sasl2-bin
    # apt-get install libsasl2-modules

  • /etc/postfix/sasl_passwd ファイルを作成
    内容は下記の通りです。なお、念のため、所有権は root:root 、アクセス権は 600 で作成しました。
    smtpauth.eonet.ne.jp:587 username:password

    ※ username は eo の POP ID 、password は POP パスワードに置き換えてください。

  • /etc/postfix/sasl_passwd.db ファイルを作成
    /etc/postfix ディレクトリに移動して、下記のコマンドを実行します。
    # cd /etc/postfix
    # postmap sasl_passwd

    なお、作成される sasl_passwd も、所有権は root:root 、アクセス権は 600 に設定しました。

  • /etc/postfix/main.cf ファイルを設定
    /etc/postfix/main.cf ファイルに下記の記述を追加します。
    relayhost = smtpauth.eonet.ne.jp:587
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    smtp_sasl_security_options = noanonymous
    smtp_sasl_mechanism_filter = cram-md5

  • Postfix を再起動

私の環境では、これできちんと eo の smtp 認証を行っているサーバに中継が行えました。普通にメールクライアントからメール送信しているのと変わらないので、PHS 宛にもメール送信ができました。

しかし、eo 光の smtp 認証を行っているサーバって、通常のとは別だったのですね。ここを見落としていたせいで、もの凄くつまってしまいました。(単に自分が間抜けなだけですが・・・)

なお、最後になりましたが、主に下記のページを参考にさせていただきました。ありがとうございます。