HowTos/Postfixとの統合

出典: ScalixWikiJP

Scalix Wiki -> How-Tos -> HowTos/Postfixとの統合

このセクションは HowTos/Complete_Postfix(米国サイト)を もとに作成しています。

目次

まえがき

Scalixシステムではsendmailを使用しています。 しかし、sendmailの設定ファイルの古くさいの文法なんか使いたくない、あるいは、Postfixが持つ現代的で安全なモジュール構造の利点を享受したいなど、 ScalixシステムにPostfixを統合したい理由がたくさんあります。

このHow Toを読んだ後には、MTAを構築する準備ができているでしょう。

そのときまでには、次のことを達成しています。

  • sendmailは単なる思い出になる
  • postfixはインターネットのホストからそのドメインに届いたメールを受け取る
  • postfixは認証されたクライアントによる中継を許可する
  • postfixはローカルユーザに届いたメールをScalixシステムに配送する
  • amavisd-newは届いたメールをウィルスチェックしたりスパムチェックしたりする。

ScalixとPostfixの統合

Postfix のインストール

まず、Postfixをインストールし、Sendmail を止める必要があります。 パッケージ管理上、インストールされているsendmailを残したままにします。 ScalixサーバのRPMパッケージはsendmailに依存しているからです。

この文書ではRedHat/Fedoraの例を記述します。DebianやSuSEでも利用できます。

RedHat:

この例で使っているソフトウェアのほとんどは RHEL 4U4 CD セットに含まれています。RedHat Networkのサブスクリプションを所有している場合は、 手動でパッケージをインストールするよりも単にup2date install パッケージ名 とするだけでよいです。

rpm -ivh postfix-2.2.10-1.RHEL4.2.i386.rpm system-switch-mail-0.5.25-3.noarch.rpm

これで Postfix がインストールされます。system-switch-mail-nox コマンドを実行し、Postfix に切替えます。

コマンドラインで切り替えを行う場合は、alternativesコマンドを実行します。(日本語訳で追加)

alternatives --config mta

Postfixを外側のIPでリッスンするように設定し、omsmtpdのポート番号を変更する

標準の Scalix システムでは、omsmtpd は、パブリック IP の 25 番ポートでリッスンしており、また、 Sendmail はループバックアドレスの 25 番ポートでリッスンしています。 受信するメールのウィルスやスパムのスキャンを行うといったPostfixの柔軟性を強化したいので、 Postfix にそれら両方のアドレスでリッスンするようにし、別のポートで動作する omsmtpd にメールを配送させます。

omsmtpd がリッスンするポートを変更するため、/var/opt/scalix/XX/s/sys/smtpd.cfg に次の行を追加してください。$FQDN の部分は、 サーバの完全修飾ドメイン名に置き換えてください。

LISTEN=$FQDN:10025

上記の変更を有効にするため、コマンド omoff -d0 -w smtpd; omon smtpd でomsmtpdを再起動させます。

Postfix に新たに解放されたポートを割り当てるため、/etc/postfix/main.cf から次の行を削除します。

inet_interfaces = localhost

上記の変更を有効にするため、コマンド /etc/init.d/postfix reload を実行してください。

これで、Postfix が omsmtpd と置き換えられました。

ウェブアプリケーションの設定変更

omsmtpdのポート番号を変更したら、Scalixのウェブアプリケーションの設定も変更する必要があります。

Scalix Web Accessの設定ファイル/var/opt/scalix/XX/webmail/swa.propertiesを編集して、次のようにswa.email.smtpServerの設定行の末尾にomsmtpdがリッスンしているポート番号':10025'を加えます。

swa.email.smtpServer=scalix.example.org:10025

次に、Platform APIの設定ファイル/var/opt/scalix/XX/platform/platform.propertiesを編集して、次のようにSMTPサーバのポート番号をomsmtpdがリッスンしているポート番号'10025'に書き換えます。

smtp.port=10025

以上の設定変更が終わったら、Scalix Tomcatの再起動を行ってください。

# /etc/init.d/scalix-tomcat restart

メッセージサイズの調整

Postfixのメッセージサイズ制限値の設定パラメータmessage_size_limitの値には、Scalix Web Accessの添付ファイルアップロード最大値の4/3倍に2キロバイトを加えた値より大きな値を設定してください。この設定を行わないと、Scalix Web Accessで添付ファイル付きのメールを送ったときに問題が生じることがあります。

Scalix Web Accessの設定ファイル/var/opt/scalix/XX/webmail/swa.propertiesには次のような添付ファイルアップロード最大値が記述されています。

swa.system.maxAttachmentUploadKilobytes=10240

デフォルトでは10240キロバイトになっています。 一方、Postfixのメッセージサイズ制限値のデフォルト値は10240000バイトになっており、Scalix Web Accessのアップロード制限値に近い添付ファイルを付けたメールはPostfixは受け取ることができません。そのため、設定パラメータの調整を行います。

Scalix Web Accessの設定値が10240キロバイトの場合には次のような計算を行います。

10240 x 1024 x 4/3 + 2048 = 13983061 ≒ 14000000

この場合はPostfixの設定ファイル/etc/postfix/main.cfに次の設定パラメータを追加します。

message_size_limit=14000000

transportの設定

このセクションではPostfix が受信したメールを omsmtpd に渡すための設定を説明します。 メールがシステムに到着すると、Postfix はアドレスがScalixサーバに属するかをチェックし、属している場合は omsmtpd へメールを配信します。それ以外のメールは、Postfix がメールの宛先に直接配信します。

ユーザのアドレスがローカルユーザのものであるかどうかをLDAP ディレクトリでチェックするようにPostfixを設定します。 ファイル /etc/postfix/scalix-transport.cf を作成し、LDAP ディレクトリに関する次の情報を記述してください。

server_host = ldap://localhost:5757
query_filter = mail=%s
bind = no
result_attribute = scalixInstanceMailHost
result_format = smtp:[%s]:10025
size_limit = 1
domain = scalix.demo

上記の scalix.demo の部分は、Scalix サーバのプライマリドメインに置き換えてください。

上記のファイルをPostfixに設定します。/etc/postfix/main.cf ファイルの最後に、次の行を追加してください。

transport_maps = ldap:/etc/postfix/scalix-transport.cf

また、local_recipient_maps についても次のように変更してください。(この内容は、米国サイトのwikiには記述がありません。)

変更前

local_recipient_maps = proxy:unix:passwd.byname $alias_maps

変更後

local_recipient_maps = proxy:unix:passwd.byname $alias_maps ldap:/etc/postfix/scalix-transport.cf

これで、PostfixはSendmailを置き換え、omsmtpdのジョブの一部になりました。 POP3ユーザやIMAPユーザから送信されたメールも受信する必要があります。 しかし、これらのユーザのメールを中継するためには、Scalixのパスワードで認証する必要があります。

SMTP認証の設定

SMTP認証を行うために、Cyrus SASLライブラリが必要です。

RedHat の場合、cyrus-sasl、cyrus-sasl-md5、cyrus-sasl-plain をインストールしてください。Debian の場合、必要な認証ヘルパーをインストールするために、apt-get libsasl2-modules-ldap sasl2-bin を実行してください。

ScalixのLDAPディレクトリへの認証にはsaslauthdを使います。 まず、/etc/sysconfig/saslauthd をエディタで開き、設定を次の内容に変更してください。 これで、saslauthdはldapを使うようになり、設定ファイルの場所が変更されし、キャッシュが有効になります。

MECH=ldap
FLAGS="-O /etc/postfix/saslauthd.conf -c"

また、ブート時にsaslauthdが起動するように次のコマンドでsaslauthdの起動レベルを変更します。

/sbin/chkconfig --level 345 saslauthd on

ディレクトリ /etc/postfix/sasl/ を作成します。

ファイル /etc/postfix/sasl/smtpd.conf を作成し、次の内容を記述します。

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
log_level: 5
saslauthd_path: /var/run/saslauthd/mux
auxprop_plugin: ldap

/etc/postfix/saslauthd.conf を作成し、次のようなLDAPディレクトリに接続するための情報を記述します。

ldap_servers: ldap://localhost:389/
ldap_search_base: o=Scalix
ldap_auth_method: bind
ldap_filter: omUlAuthid=%u
ldap_version: 3
ldap_bind_dn: cn=sxadmin,o=scalix
ldap_bind_pw: super_secret

ここで、ldap_bin_pwの行のsuper_secretの部分をsxadminの実際のパスワードに置き換えてください。

以上で、sasl のセットアップは完了です。 次に、postfixがSMTP認証でsaslを使用するように設定します。

/etc/postfix/main.cf に次の内容を追加(または変更)してください。

smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = no
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes

また、メールを中継する際に認証を要求するように、次の内容も /etc/postfix/main.cf に設定してください。

 smtpd_recipient_restrictions =
                 permit_mynetworks
                 permit_sasl_authenticated
                 reject_unauth_destination

※shin0211記入 smtpd_client_restrictionsとsmtpd_sender_restrictionsの設定は必要なのでしょうか?
※taki回答      無くてもよいです。

/etc/init.d/postfix reload で設定の変更を反映させます。 以上で、ScalixとPostfixを統合する設定が完了しました。

高度な設定

これ以降の文章はScalixに直接的には関係ありません。単にPostfixの話ですので、参考程度にとどめてください。

現代のインターネットでは認証付きのSMTPを使うだけでは十分ではありません。 暗号を使ってパスワードを保護するべきです。

Postfix上でのTLSの設定

SMTP(あるいは他のプロトコル)通信を暗号化するために、証明書が必要です。 以前に、一度も証明書を生成したことがなければ、 これは SSLを扱うよい機会になります。初めてのCSR(証明書署名要求)を生成して、自己署名してください。

以前、証明書を生成したことがあれば、それを使うか、再び生成してください。 あなたが証明書を持つときに戻って、/etc/sslにファイルを置いてください。

Postfixが他のサーバに対してをTLSの利用を申し出るように設定します。

smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/ssl/key.pem
smtpd_tls_cert_file = /etc/ssl/cert.pem
smtpd_tls_CAfile = /etc/ssl/cacert.pem
smtpd_tls_security_level = may
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom