SMTP サーバーの構築

まずは Postfix を利用した SMTP サーバーの構築から行います。
また、このドキュメントは jail 環境下での解説になります。

インストール

Ports からインストールします。

Perl のインストール

まずは Perl 5.8 のインストールから行います。

# cd /usr/ports/lang/perl5.8
# make WITHOUT_USE_PERL=yes install clean

iconv のインストール

Dovecot が libiconv を要求するので、まずは libiconv のインストールから行います。

# cd /usr/ports/converters/libiconv
# make -DBATCH WITH_EXTRA_PATCHES=yes install clean

Dovecot のインストール

SMTP-AUTH に Dovecot の認証システムを採用する ( Cyrus SASL ではありません ) ので Postfix をインストールする前に Dovecot をインストールしておきます。

# cd /usr/ports/mail/dovecot
# make -DBATCH WITHOUT_IPV6=yes WITH_LDAP=yes WITH_MYSQL=yes WITH_SQLITE=yes install clean

Postfix のインストール

最後に Postfix をインストールします。

# cd /usr/ports/mail/postfix
# make -DBATCH WITH_SASL2=yes WITH_DOVECOT=yes WITH_TLS=yes WITH_BDB=yes WITH_MYSQL=yes WITH_OPENLDAP=yes WITH_VDA=yes WITH_TEST=yes install clean

注意事項

インストール中に、ある程度すると下記の注意事項が出力されます。
myorigin / mydestination / mynetworks の設定を変えること、公式 HP の 標準設定の例 ( 日本語訳 )に目を通すこと、メールの配送設定 ( /etc/aliases ) をチェックし newaliases. を実行すること、などが書かれています。

    Warning: you still need to edit myorigin/mydestination/mynetworks
    parameter settings in /usr/local/etc/postfix/main.cf.

    See also http://www.postfix.org/STANDARD_CONFIGURATION_README.html
    for information about dialup sites or about sites inside a
    firewalled network.

    BTW: Check your /etc/aliases file and be sure to set up aliases
    that send mail for root and postmaster to a real person, then
    run /usr/local/bin/newaliases.

ユーザーとグループの作成

そしてまた暫くたつと下記のようなメッセージが出ます。

You need user "postfix" added to group "mail".
Would you like me to add it [y]? Enter

これは postfix:mail という、ユーザーとグループを作成してよいか?と尋ねています。
ここはエンターを押します。

mailer.conf を Postfix 用の設定に書き換える

次は下記のようなメッセージが出ます。

Would you like to activate Postfix in /etc/mail/mailer.conf [n]? y

これは mailer.conf を Postfix 用の設定に書き換えても良いか?と尋ねています。
sendmail を使う予定が無い場合は “y” を押しましょう。

インストール後にする設定

最後にインストール後に行う設定のインフォメーションが表示されます。

To enable postfix startup script please add postfix_enable="YES" in your rc.conf

If you not need sendmail anymore, please add in your rc.conf:

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

And you can disable some sendmail specific daily maintenance routines in your
/etc/periodic.conf file:

daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"

If you are using SASL, you need to make sure that postfix has access to read
the sasldb file.  This is accomplished by adding postfix to group mail and
making the /usr/local/etc/sasldb* file(s) readable by group mail (this should
be the default for new installs).

通常ならこの通り設定すればまず間違いはないでしょう。

コマンドの有効化

インストールされたコマンドを有効にします。

# rehash

自動起動

ホスト起動時に自動的に Postfix が立ち上がるように rc.conf に設定します。

# vi /etc/rc.conf

postfix_enable="YES"
dovecot_enable="YES"

Dovecot SASL の設定

Dovecot SASL を使用するので、 Dovecot の認証プロセスのみを立ち上げます。

# vi /usr/local/etc/dovecot.conf

protocols = none

ssl_disable = yes

auth default {
  mechanisms = plain login
  passdb pam {
  }
  userdb passwd {
  }
  socket listen {
    client {
      path = /var/spool/postfix/private/auth
      mode = 0660
      user = postfix
      group = postfix
    }
  }
}

Dovecot の起動

Dovecot を起動します。

# /usr/local/etc/rc.d/dovecot start

sendmail の自動起動を無効にする

Postfix をインストールした場合、 sendmail は使わなくなると思いますので、まずはこれを無効にします。

# vi /etc/rc.conf

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

sendmail の periodic daily を無効にする

上記項目で sendmail を無効にした場合は periodic daily でエラーが出ます。
なので該当する設定を無効にします。

# vi /etc/periodic.conf

daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"

mailer.conf の設定

インストール時に mailer.conf の設定を行わなかった場合は mailer.conf の設定を行います。

# vi /etc/mail/mailer.conf

#
# Execute the Postfix sendmail program, named /usr/local/sbin/sendmail
#
sendmail	/usr/local/sbin/sendmail
send-mail	/usr/local/sbin/sendmail
mailq		/usr/local/sbin/sendmail
newaliases	/usr/local/sbin/sendmail

{build,install}world で mailer.conf を置き換えない

newaliases や mailq などは FreeBSD インストール直後の状態では sendmail のものが使われます。
Postfix 付属の newaliases や mailq を使用する場合は {build,install}world で mailer.conf が置き換わらないようにします。

# vi /etc/make.conf

NO_SENDMAIL=YES

main.cf の編集

以下は変更した箇所のみを抽出して掲載しています。

# vi /usr/local/etc/postfix/main.cf

基本的な設定

下記にある設定は TLS や SASL のオプションに関わらず設定してください。

  • ホスト名

#myhostname = host.domain.tld
#myhostname = virtual.domain.tld
myhostname = smtp.clx.ath.cx

  • ドメイン名

#mydomain = domain.tld
mydomain = clx.ath.cx

  • ローカルから送信された場合のドメイン名がどのドメインから来たか

#myorigin = $myhostname
#myorigin = $mydomain
myorigin = $mydomain

  • 自分自身が最終的な目的地だとみなすドメインのリスト

#mydestination = $myhostname, localhost.$mydomain, localhost
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
#       mail.$mydomain, www.$mydomain, ftp.$mydomain
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

  • メール中継を許可するクライアント

#mynetworks = 168.100.189.0/28, 127.0.0.0/8
#mynetworks = $config_directory/mynetworks
#mynetworks = hash:/usr/local/etc/postfix/network_table
mynetworks = 192.168.1.0/24, 127.0.0.1/32

  • aliases マップの設定

#alias_maps = dbm:/etc/aliases
#alias_maps = hash:/etc/aliases
#alias_maps = hash:/etc/aliases, nis:mail.aliases
#alias_maps = netinfo:/aliases
alias_maps = hash:/etc/mail/aliases

  • aliases データベースの設定

#alias_database = dbm:/etc/aliases
#alias_database = dbm:/etc/mail/aliases
#alias_database = hash:/etc/aliases
#alias_database = hash:/etc/aliases, hash:/opt/majordomo/aliases
alias_database = hash:/etc/mail/aliases

  • mailbox ではなく Maildir を使用するように

#home_mailbox = Mailbox
#home_mailbox = Maildir/
home_mailbox = Maildir/

SMTP-AUTH の設定

SMTP-AUTH に Dovecot SASL を採用した場合の設定です。
Cyrus SASL を採用する場合はこの限りではありません。

#
# SASL AUTHENTICATION CONTROLS
#
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_recipient_restrictions =
	permit_mynetworks
	permit_sasl_authenticated
	reject_unauth_destination
broken_sasl_auth_clients = yes

TLS の設定

自己認証局を立てて証明書を発行した場合は下記のようになります。
公に認められている認証局から証明書を発行してもらった場合はこの限りではありません。

#
# STARTTLS SUPPORT CONTROLS
#
smtpd_tls_cert_file = /usr/local/etc/postfix/server.key.cert
smtpd_tls_CAfile = /usr/local/etc/postfix/ca.cert
smtpd_tls_loglevel = 1
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:/var/spool/postfix/smtpd_scache
smtpd_tls_mandatory_ciphers = export
smtpd_tls_dh1024_param_file = /usr/local/etc/postfix/dh_1024.pem
smtpd_tls_dh512_param_file = /usr/local/etc/postfix/dh_512.pem
smtpd_tls_always_issue_session_ids = no
tls_random_source = /dev/random

smtps を有効にする

smtps を有効にすれば smtps に接続された時に全て暗号化された通信になります。

# vi /usr/local/etc/postfix/master.cf

smtp      inet  n       -       n       -       -       smtpd
#submission inet n       -       n       -       -       smtpd
#  -o smtpd_enforce_tls=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

設定ファイルの確認

設定ファイルに記述ミスがないかどうかチェックします。

# /usr/local/sbin/postfix check

alias database の再生成

sendmail の時に使っていた alias database を再生成します。

# /usr/local/sbin/postalias /etc/mail/aliases

sendmail を停止

通常なら sendmail が起動しているので、 sendmail を停止する。

# /etc/rc.d/sendmail stop

起動

Postfix を起動します。

# /usr/local/etc/rc.d/postfix start

リンク

The Postfix Home Page
Postfixのぺーじ