Create  FrontPage  Index  Search  Changes  Login

Postfix

概要

ドキュメントについて

長らくqmailとqmail-vidaの構成でメールサーバを運用していたが、サーバのリプレイスに併せてPostfixへ移行した。導入に際してのメモ。

目的

メールサーバを利用するユーザに対し、次の機能を提供する。

  • smtpd
  • popd
  • SMTP Auth対応
  • SSL対応
  • バーチャルユーザ
  • バーチャルドメイン

環境

サーバ

  • FreeBSD 6.1-RELEASE + jail環境
  • IPアドレス(jail):192.168.1.12
  • ホスト名:mail.example.com
  • MXレコード:MX 10 mail.example.com.
uname -a
FreeBSD mail.example.com 6.1-RELEASE-pN FreeBSD 6.1-RELEASE-pN #0: Sat Jun 17 13:41:35 JST 2006 root@test.example.com:/usr/obj/usr/src/sys/TEST  i386

Postfix

  • postfix-2.2.10(導入直後)→postfix-2.3.3(バージョンアップ後)

メールアドレス

実ユーザとバーチャルユーザは分けることにした(後述)。

  • 実ユーザ:hoge@mail.example.com
  • バーチャルユーザ:hoge@example.com

導入及び運営方針

当初PostixとCourier-IMAPで構築し、Courier-IMAPのuserdbを利用してユーザ管理及び認証を行っていた。しかし、ユーザの管理(登録、パスワード変更、一覧)向上のため、PostfixAdminとMySQLを加えた構成に変更した。データベース動作によるコストやセキュリティなどを考慮した上で、各自最適な構成にすべきである。また、PostfixAdmin導入による制約が発生することにも注意(後述)。

インストール・設定

Postfix

インストール

sendmailを確認して、キューがなければ停止

# mailq
/var/spool/mqueue is empty
                Total requests: 0
# /etc/rc.d/sendmail stop

portsからインストール
オプションとして、SASL2,TLS,BDB,MySQLを選択

# portinstall mail/postfix

インストールの途中の質問

ユーザアカウントにposftixを追加するか?
Would you like me to add it [y]? y
Postfixをアクティブにするか(mailer.confをPostfixのものに置き換えるか)?
Would you like to activate Postfix in /etc/mail/mailer.conf [n]? y

インストールの最後の指示に従い、Sendmailを無効にSendmail関連の定期実行ジョブを無効に設定する

/etc/rc.conf:
...
# 以下を追加
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
/etc/periodic.conf:
...
# 以下を追加
daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"

Posftixを有効にする

/etc/rc.conf:
postfix_enable="YES"

設定

設定パラメータを確認しながら、変更が必要な箇所のみ修正

/usr/local/etc/postfix/main.cf:
...
myhostname = mail.example.com
...
mydomain = example.com
...
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
...
mynetworks_style = subnet
...
recipient_delimiter = +
...
home_mailbox = Maildir/
...

rootなどのメールを転送する場合は以下を追加

/etc/mail/alias:
...
root: HOGEHOGE

エイリアスDBの作成

# newaliases

起動

# posftix start

正常に起動できているかログを確認

# tail /var/log/maillog
Oct  9 23:55:44 mail postfix/postfix-script: starting the Postfix mail system
Oct  9 23:55:44 mail postfix/master[99191]: daemon started -- version 2.3.3, configuration /usr/local/etc/postfix

ローカルユーザ宛にメールが送信できるか確認

$ sendmail user@mail.example.com
test
.
# tail /var/log/maillog
Jun 21 22:44:47 mail postfix/pickup[61113]: 36F5E35FF5C: uid=0 from=<user>
Jun 21 22:44:47 mail postfix/cleanup[61117]: 36F5E35FF5C: message-id=<20060621134447.36F5E35FF5C@mail.example.com>
Jun 21 22:44:47 mail postfix/qmgr[61114]: 36F5E35FF5C: from=<user@mail.example.com>, size=299, nrcpt=1 (queue active)
Jun 21 22:44:47 mail postfix/local[61119]: 36F5E35FF5C: to=<user@mail.example.com>, relay=local, delay=0, status=sent (delivered to maildir)
Jun 21 22:44:47 mail postfix/qmgr[61114]: 36F5E35FF5C: removed
$ ls ~/Maildir/new/
1160406012.V4aI376c38M107638.mail.example.com

SASL(SMTP-AUTH)の設定

SMTP-AUTH用のライブラリとしてCyrus-SASL2を利用する。Postfixインストール時にオプションでSASL2を選択していれば、一緒にインストールされている筈。

今回の認証プロセスは次のような感じか? SMTP(Postfix)→SASLライブラリ(Cyrus-SASL2)→認証デーモン(authdaemond)→pamやMySQL

認証方法の設定ファイルを作成する

/usr/local/lib/sasl2/smtpd.conf:
pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path: /var/run/authdaemond/socket

PostfixでSASLを有効に設定する

/usr/local/etc/postfix/main.cf:
...
# 以下を追加
# SASL認証を有効にする
smtpd_sasl_auth_enable = yes
# リレーするメールの設定
smtpd_recipient_restrictions =
       permit_mynetworks
       permit_sasl_authenticated
       reject_unauth_destination

※authdaemond(Courier-IMAP)をインストールしないと動作しないので、その他の設定を飛ばして、Courier-IMAPのインストールを行うか、SASL認証をまだ有効に設定しない必要有り

TLSの設定(サーバ)

TLSを利用することでSMTP通信を暗号化する。クライアントの証明書の検証は行わない。今回は安価なRapidSSLの証明書を利用(20USDちょっと)。参考ページ

秘密鍵とCSRを作成する。作り方はVersignのサイトあたりを参考に。

# mkdir /usr/local/etc/ssl/
# cd /usr/local/etc/ssl/
# openssl md5 * > rand.dat
# openssl genrsa -rand rand.dat -des3 1024 > key.pem
Enter pass phrase: HOGEHOGE
Verifying - Enter pass phrase: HOGEHOGE
# openssl req -new -key key.pem -out csr.pem
Enter pass phrase for key.pem: HOGEHOGE
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Kanagawa
Locality Name (eg, city) []:Yokohama
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Hoge
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:mail.example.com
Email Address []:
A challenge password []:
An optional company name []:

CSRをCA局へ提出。発行してもらったCRT(サーバ証明書)を保存する

# /usr/local/etc/ssl/server.crtとして保存

秘密鍵にパスワードをつけるなとあるので秘密鍵からパスフレーズを取り除いたファイルを作成する

# openssl rsa -in key.pem -out key_nopass.pem

作成したファイルを他のユーザから見られないように

# chmod 600 /usr/local/etc/ssl/*

PosftixでTLSを有効に設定する

/usr/local/etc/postfix/main.cf:
...
# 以下を追加
# TLSを有効にする
smtpd_use_tls = yes
# サーバ証明書を指定
smtpd_tls_cert_file = /usr/local/etc/ssl/server.crt
# 秘密鍵を指定
smtpd_tls_key_file = /usr/local/etc/ssl/key_nopass.pem
# 認証をTLSに限定する(設定注意)
smtpd_tls_auth_only = yes
# TLSセッションキャッシュ(利用を強く推奨)
smtpd_tls_session_cache_database = btree:/usr/local/etc/postfix/smtpd_scache
# ReceivedヘッダにTLS関係の情報を記録する
smtpd_tls_received_header = yes
# ログ設定(テスト時に1か2に設定)
#smtpd_tls_loglevel = 1

※今回はクライアントの証明書の検証を行わないので、smtpd_tls_CAfileやsmtpd_tls_CApathの指定の不要は不要かと思われる。また、PostfixAdminを利用した場合、Clear-text認証になってしまうので(後述)、smtpd_tls_auth_onlyを有効に設定している。TLSに対応していないMUAは利用出来なくなってしまうので注意!

Postfixをリロード

# postfix reload

TLSを利用して正しくメールが送信できるか確認

smtpd_tls_loglevelを1か2に設定
↓
TLSに対応したMUAでテストメールを送信
↓
ログを確認(以下が含まれていればOK)
# tail /var/log/maillog
...
Oct 10 00:17:27 mail postfix/smtpd[99417]: connect from user.example.com[192.168.0.100]
Oct 10 00:17:27 mail postfix/smtpd[99417]: setting up TLS connection from user.example.com[192.168.0.100]
Oct 10 00:17:27 mail postfix/smtpd[99417]: TLS connection established from user.example.com[192.168.0.100]: TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)
...

TLSの設定(クライアント)

ユーザからの接続だけではなく、TLSに対応したサーバ(さくらのメールボックスなど)への配送の際も暗号化する(Postfixがクライアント)。

PosftixでTLSを有効に設定する

/usr/local/etc/postfix/main.cf:
...
# 以下を追加
# TLSを有効にする
smtp_use_tls = yes
# クライアント証明書(サーバと共通でOK)
smtp_tls_cert_file = /usr/local/etc/ssl/server.crt
# 秘密鍵(サーバと共通でOK)
smtp_tls_key_file = /usr/local/etc/ssl/key_nopass.pem
# CA証明書 
smtp_tls_CAfile = /usr/local/etc/ssl/Equifax_Secure_eBusiness_CA-1.cer
# TLSセッションキャッシュ
smtp_tls_session_cache_database = btree:/usr/local/etc/postfix/smtp_scache
# ログレベル(動作確認時)
#smtp_tls_loglevel = 1

Postfixをリロード

# postfix reload

TLSを利用して正しくメールが配信が出来るか確認

ログレベルを1か2に設定して、TLSに対応したメールサーバにメールを投げてログを確認

サブミッションポートの設定

多くのプロバイダにおいてOutbound Port 25 Blockingが導入されているので、サブミッションポートでもListenするように設定する。

/usr/local/etc/postfix/master.cf
#以下のコメントを外す
submission   inet    n       -       n       -       -       smtpd
  -o smtpd_etrn_restrictions=reject
  -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes

Postfixをリロード

# postfix reload

サブミッションポートを利用して正しくメールが送信できる確認

Becky!のポート番号を変更。正常にメールが送信できることを確認

MySQL

インストール

Makefileを確認してオプションを設定しておく

/usr/local/etc/pkgtool.conf:
'mysql5*' => 'WITH_CHARSET=ujis WITH_XCHARSET=all WITH_COLLATION=ujis_japanese_ci',

portsからインストール

# portinstall databases/mysql50-server
===>   Installing ldconfig configuration file
===>   Compressing manual pages for mysql-client-5.0.22
===>   Registering installation for mysql-client-5.0.22
===>   Returning to build of mysql-server-5.0.22
Error: shared library "mysqlclient.15" does not exist
*** Error code 1

何故かインストールできない。clientを自分でmake installしても、serverでこける。portsではなく、ソースからインストールするのは問題ない。テスト用のjailを用意して何回も試したときに、一度だけportsからのインストールに成功したが、成功したのは後にも先にもそれっきり。

仕方がないので、パッケージからインストール。先の残骸が残っているのなら先に削除

# pkg_add -r mysql50-server mysql50-client

インストールが終わったら、portupgradeでソースから最新バージョンに更新してみる

# portupgrade mysql-server mysql-client 

問題なくバージョンアップ完了。結局何が悪いのか分からないが、気にせず進めることにする

MySQLを有効にするため、rc.confに追加

/etc/rc.conf:
mysql_enable="YES"

設定ファイルをコピーせよとあったので、自分にあった環境の設定ファイルをコピー

# cp /usr/local/share/mysql/my-small.cnf /var/db/mysql/my.cnf

設定

MySQLのroot用のパスワードを設定

# mysqladmin -u root password "PASSWORD"

MysSQLのユーザを確認

# mysql -uroot -p mysql
mysql> select user, host from user;
+--------------+------------------+
| user         | host             |
+--------------+------------------+
|              | localhost        |
| root         | localhost        |
|              | mail.example.com |
| root         | mail.example.com |
+--------------+------------------+
6 rows in set (0.00 sec)

デフォルトのユーザを削除

mysql> delete from user where user='';
mysql> flush privileges;
mysql> exit;

設定の確認は以下のコマンドで行える

# mysqladmin -uroot -p variable

Courier-IMAP

インストール

portsからインストール
オプションとして、OPENSSL、WITH_AUTH_USERDB、AUTH_MYSQLを選択

# portinstall mail/courier-imap

POP3設定

POP3はSSLの接続のみ提供する。

秘密鍵とサーバ証明書を組み合わせたファイルを作る

# cat key_nopass.pem server.crt > key+server.pem
/usr/local/etc/courier-imap/pop3d-ssl:
POP3_STARTTLS=YES
TLS_CERTFILE=/usr/local/etc/ssl/key+server.pem

authdaemond設定

バーチャルユーザ用のユーザを追加

# adduser -D
Username: vmailbox
Full name:
Uid (Leave empty for default): 5000
Login group [vmailbox]: postfix
Login group is postfix. Invite vmailbox into other groups? []:
Login class [default]:
Shell (sh csh tcsh nologin) [sh]: nologin
Home directory [/home/vmailbox]: /usr/local/virtual
Use password-based authentication? [yes]: no
Lock out the account after creation? [no]:
Username   : vmailbox
Password   : <disabled>
Full Name  :
Uid        : 5000
Class      :
Groups     : postfix
Home       : /usr/local/virtual
Shell      : /usr/sbin/nologin
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (vmailbox) to the user database.
Add another user? (yes/no): no
Goodbye!

パーミッションを設定

# chmod -R 771 /usr/local/virtual

対応する認証の設定

# cp /usr/local/etc/authlib/authdaemonrc.dist /usr/local/etc/authlib/authdaemonrc
/usr/local/etc/authlib/authdaemonrc:
authmodulelist="authmysql authpam"

MySQL用の設定ファイルのうち以下を編集(タブ区切り!)

# cp /usr/local/etc/authlib/authmysqlrc.dist /usr/local/etc/authlib/authmysqlrc
/usr/local/etc/authlib/authmysqlrc:
MYSQL_SERVER            localhost
MYSQL_USERNAME          postfix
MYSQL_PASSWORD          postfix
MYSQL_DATABASE          postfix
MYSQL_USER_TABLE        mailbox
MYSQL_CRYPT_PWFIELD     password
MYSQL_UID_FIELD         '5000'
MYSQL_GID_FIELD         '125'
MYSQL_LOGIN_FIELD       username
MYSQL_HOME_FIELD        '/usr/local/virtual'
MYSQL_NAME_FIELD        name
MYSQL_MAILDIR_FIELD     maildir
MYSQL_QUOTA_FIELD       quota
MYSQL_WHERE_CLAUSE      active='1'

有効にするためにrc.confに以下を追加

/etc/rc.conf:
courier_imap_pop3d_ssl_enable="YES"
courier_authdaemond_enable="YES"

Apache

インストール

jail環境においてPostfixAdmin、Webメール用途のみで利用する予定なので、特にオプションを設定せずにインストール

# portinstall www/apache22
/etc/rc.conf:
apache22_enable="YES"

設定

Apacheの設定

/usr/local/etc/apache22/httpd.conf:
# 不要なモジュールをコメントアウト
# 以下の2行を編集
ServerAdmin webmaster@example.com
ServerName mail.example.com:80
# 以下の2行のコメントを外す
Include etc/apache22/extra/httpd-default.conf
Include etc/apache22/extra/httpd-ssl.conf

出力するサーバ情報を最小にするために以下を編集(お好みにで)

/usr/local/etc/apache22/extra/httpd-default.conf:
ServerTokens Prod
ServerSignature Off

SSLの設定

/usr/local/etc/apache22/extra/httpd-ssl.conf:
ServerName mail.exaple.com:443
ServerAdmin webmaster@example.com
SSLCertificateFile /usr/local/etc/ssl/server.crt
SSLCertificateKeyFile /usr/local/etc/ssl/key_nopass.pem

起動

# /usr/local/etc/rc.d/apache22.sh start

PHP

インストール

オプションとして、WITH_APACHE、WITH_MULTIBYTEを選択

# portinstall lang/php5

設定ファイルをコピー

# cp /usr/local/etc/php.ini-recommended /usr/local/etc/php.ini

設定

magic_quotes_gpcをオンにする

/usr/local/etc/php.ini:
magic_quotes_gpc = On

ApacheでPHPを有効に設定する。AddTypeしている辺りに追加

/usr/local/etc/apache22/httpd.conf
AddType application/x-httpd-php .php

Apacheを再起動

# /usr/local/etc/rc.d/apache22.sh restart

Postfix Admin

インストール

portsからインストール。オプションはMYSQLを選択

# portinstall mail/postfixadmin

Apacheの設定

Apache用のファイルを編集する。デフォルトの設定よりもきつめの設定に

Postfix Admin用の設定ファイルを作成

/usr/local/etc/apache22/Includes/postfixadmin.conf:
Alias /postfixadmin/ "/usr/local/www/postfixadmin/"
<Directory "/usr/local/www/postfixadmin">
   AllowOverride AuthConfig Limit Indexes
   Order Allow,Deny
   Allow from all
</Directory>

Apacheのリスタート

# apachectl restart

/admin/.htpasswdを編集。デフォルトのadminを消して、別ユーザを登録

# htpasswd /usr/local/www/postfixadmin/admin/.htpasswd USER
New password:
Re-type new password:
# htpasswd -D /usr/local/www/postfixadmin/admin/.htpasswd admin

/admin/.htaccessを編集。特定のIPアドレスからのみ接続を許可する

/usr/local/www/postfixadmin/admin/.htaccess:
AuthUserFile /usr/local/www/postfixadmin/admin/.htpasswd
AuthGroupFile /dev/null
AuthName "Postfix Admin"
AuthType Basic

deny from all
allow from NNN.NNN.NNN.NNN/29

require valid-user

Postfix Adminをバージョンアップした際に、これらのファイルは上書きされてしまうので注意。

MySQLの設定

MySQLにPostfix用のデータベースを登録する

/usr/local/www/postfixadmin/DATABASE_MYSQL.TXTにリダイレクション用のファイルがあるので、mysqlに入力してやる。ただし、jail環境によっては、localhostの記述でこけることがあるので、適当に編集してやる

# mysql -uroot -p < /usr/local/www/postfixadmin/DATABASE_MYSQL.TXT

設定したユーザを確認

# mysql -uroot -p mysql
mysql> select user, host from user;
+--------------+------------------+
| user         | host             |
+--------------+------------------+
| postfix      | localhost        |
| postfixadmin | localhost        |
| root         | localhost        |
| root         | mail.example.com |
+--------------+------------------+
6 rows in set (0.00 sec)

Postfix用のデータベースの確認

mysql> use postfix;
mysql> show tables;
+-------------------+
| Tables_in_postfix |
+-------------------+
| admin             |
| alias             |
| domain            |
| domain_admins     |
| log               |
| mailbox           |
| vacation          |
+-------------------+
7 rows in set (0.01 sec)

mysql> exit;

Postfixの設定

MySQLへのクエリー用設定ファイルを/usr/local/etc/postfix/mysqlに作成する(設定が沢山増えると気持ち悪いのでディレクトリに放り込む)

/usr/local/etc/postfix/mysql/virtual_alias_maps.cf:
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = 1
/usr/local/etc/postfix/mysql/virtual_domains_maps.cf:
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s'
/usr/local/etc/postfix/mysql/virtual_mailbox_maps.cf:
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
/usr/local/etc/postfix/mysql/virtual_mailbox_limit_maps.cf:
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT quota FROM mailbox WHERE username='%s'
# chmod 640 /usr/local/etc/postfix/mysql/virtual_*
# chgrp postfix /usr/local/etc/postfix/mysql/virtual_*

PotfixがMySQLを見に行くようにmain.cfに以下を追加

/usr/local/etc/postfix/main.cf
# for virtual settings
virtual_mailbox_domains = mysql:/usr/local/etc/postfix/mysql/virtual_domains_maps.cf
virtual_mailbox_base = /usr/local/virtual
virtual_alias_maps = mysql:/usr/local/etc/postfix/mysql/virtual_alias_maps.cf
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql/virtual_mailbox_maps.cf
virtual_minimum_uid = 5000
virtual_transport = virtual
virtual_gid_maps = static:125
virtual_uid_maps = static:5000

設定をリロード

#postfix reload

設定

設定ファイルをコピー

# cp /usr/local/www/postfixadmin/config.inc.php.sample /usr/local/www/postfixadmin/config.inc.php

設定ファイルのうち以下を編集

/usr/local/www/postfixadmin/config.inc.php:
$CONF['database_type'] = 'mysqli';
$CONF['admin_email'] = 'postmaster@example.com';
$CONF['default_aliases'] = array (
      'abuse' => 'abuse@example.com',
      'hostmaster' => 'hostmaster@example.com',
      'postmaster' => 'postmaster@example.com',
      'webmaster' => 'webmaster@example.com'
);
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['footer_text'] = 'Return to Hogehoge';
$CONF['footer_link'] = 'http://www.example.net/';

確認

ブラウザからhttps://mail.example.com/postfixadmin/setup.phpを開き、全てOKならインストールは問題なし。

SPF対応(アウトバンド)

DNS設定

まずはドメインに対するSPFレコードを公開する。ポリシーとしては、サーバ用に割り当てられたサブネットのみからメールを送信するとする。実際のSPFレコードは手で作るか、openspf.orgのSPF WIZARDやMicrosoftのSender ID Framework SPF Record Wizard 等を利用して作成する

bindの正引き設定ファイルに以下のTXTレコードを追加

/xxx/example.com.zone:
...
               IN      TXT     "v=spf1 ip4:nnn.nnn.nnn.nnn/NN ~all"
...

bindをリロード

# rndc reload

確認

TXTレコードが返ってくるかdigをしてみる

$ dig example.com txt
...
;; ANSWER SECTION:
example.com.           3484    IN      TXT     "v=spf1 ip4:nnn.nnn.nnn.nnn/NN ~all"
...

問題なければ、SPFに対応したメールサーバ宛にメールを送信してみる。check-auth@verifier.port25.comに送信すれば、テストを行い結果を返信してくれる。

SPF対応(インバウンド)

メールサーバ宛に配信されてくるメールのSPFをチェックする。

インストール

Perlで書かれたスクリプトをCに移植したものがportsに登録されているのでインストール

# portinstall mail/postfix-policyd-spf

設定

インストールの最後にこうしろと指示されるので、指示に従い設定ファイルを編集する

master.cfに以下を追加

/usr/local/etc/postfix/master.cf:
policy  unix  -       n       n       -       -       spawn
  user=nobody argv=/usr/local/sbin/postfix-policyd-spf

main.cfのsmtpd_recipient_restrictionsに以下を追加

/usr/local/etc/postfix/main.cf:
smtpd_recipient_restrictions =
     permit_mynetworks # 既存項目
     permit_sasl_authenticated # 既存項目
     reject_unauth_destination # 既存項目
     reject_unknown_sender_domain
     reject_unauth_destination
     check_policy_service unix:private/policy

Postfixのリロード

# postfix reload

確認

libspf2にspfqueryというプログラムが含まれるのでテストしてみる。詳しいドキュメントはアーカイブのtestディレクトリにある

$ spfquery -ip=192.0.2.1 -sender=02.spf1-test.mailzone.com -helo=02.spf1-test.mailzone.com
fail
Please see http://spf.pobox.com/why.html?sender=postmaster%4002.spf1-test.mailzone.com&ip=192.0.2.1&receiver=spfquery
spfquery: domain of 02.spf1-test.mailzone.com does not designate 192.0.2.1 as permitted sender
Received-SPF: fail (spfquery: domain of 02.spf1-test.mailzone.com does not designate 192.0.2.1 as permitted sender) client-ip=192.0.2.1; envelope-from=postmaster@02.spf1-test.mailzone.com; helo=02.spf1-test.mailzone.com;

ログを見ると動作はしているようである。てっきり、メールヘッダ等に情報が出力されると思っていたのだが

# cat /var/log/maillog | grep spf
Sep 28 23:33:54 mail postfix/smtpd[27338]: NOQUEUE: reject: RCPT from p7102-ipad603marunouchi.tokyo.ocn.ne.jp[124.85.128.102]: 554 5.7.1 <user@example.com>: Recipient address rejected: Please see http://spf.pobox.com/why.html?sender=kaera2006%40Safe-mail.net&ip=124.85.128.102&receiver=mail.example.com; from=<kaera2006@Safe-mail.net> to=<user@example.com> proto=SMTP helo=<gogoallfree5348797169867163917617.com>

バージョンアップ

もろもろ 様々なPortsが入り乱れて動作しているので、バージョンアップには注意が必要(ClamAVとか入っているとさらに面倒くさい)。コンフィグのフォーマットが変わっていて、daemonの起動に失敗したりすると全体に波及して認証に失敗するとか、配信に失敗する事があるので一つのPorts毎に確認しながらバージョンアップを行う(他にも言えることだが)。

postfix

コンフィグ用のコマンドがある。

# postfix upgrade-configuration
# poftfix reload

Postfix Admin

admin/.htaccessと.htpasswdが上書きされてしまうので注意

その他

問題点

Maildir使用時の容量制限

Maildir使用時はメールボックス全体での容量制限が行えない。maildropとかPostfix VDAを使うと良い?

実ユーザ・バーチャルユーザの混合環境とPostfix Admin

Jun 21 22:44:47 mail postfix/trivial-rewrite[61118]: warning: do not list domain example.com in BOTH mydestination and virtual_mailbox_domains

authdaemond環境下でのCRAM-MD5

CRAM-MD5を利用する場合、専用のパスワードDBを用意する必要があるが、authdaemondを利用する場合はどのように処理をすればいいのか不明。現状ではcler-textのパスワードしか利用できないので、SMTP及びPOPともにSSLの使用を強制する必要がある。 MYSQL_CRYPT_PWFIELDとPostfixadminの$CONF['encrypt']をHMAC対応にすると、どうにかなりそうな気もするが未確認。参考参考参考

スパム対策

S25Rが流行っている?らしい。暇なときにでも試してみようか

スパム対策技術
http://www.gabacho-net.jp/anti-spam/
Rgrey - S25R + greylisting
http://k2net.hakuba.jp/rgrey/
[pc][spam]Starpitでほぼ誤検出無く98%のスパムを排除
http://d.hatena.ne.jp/stealthinu/20060706/p5

参考URL

まずはマニュアルやmanを参照するのが基本。

Postfix

The Postfix Home Page
http://www.postfix.org/
Postfix Documentation
http://www.postfix.org/documentation.html
Postfix Source Code(Release notesとChange log)
http://www.postfix.org/postfix-release/index.html
Postfixのぺーじ−和訳ドキュメント (2.2.x)
http://www.kobitosan.net/postfix/trans-2.2/
Postfix2.2設定パラメータ(日本語訳)
http://www.kobitosan.net/postfix/trans-2.2/jhtml/postconf.5.html
Postfix Frequently Asked Questions(日本語訳)
http://www.kobitosan.net/postfix/jman/faq-jp.html
Postfix チュートリアル
http://tmtm.org/postfix/tutorial/
Main Page - Postfix Wiki
http://postfixwiki.org/index.php?title=Main_Page
Virtual Users and Domains with Courier-IMAP and MySQL - Postfix Wiki
http://postfixwiki.org/index.php?title=Virtual_Users_and_Domains_with_Courier-IMAP_and_MySQL

Courier-IMAP

Courier-IMAP
http://www.courier-mta.org/imap/
Courier Authentication Library
http://www.courier-mta.org/authlib/
authlib
http://www.courier-mta.org/?authlib.html

Cyrus-SASL2

マニュアルはアーカイブの/docにある。なければ、検索で適当に
http://www.indelible.org/php/sasl/cyrus-sasl2/

Postfix Admin

Postfix Admin
http://high5.net/postfixadmin/
Postfix Adminの導入・設定メモ/FreeBSD 6.0版 [FreeBSD](fkimura.com)
http://www.fkimura.com/postfixadmin1.html

MySQL

MySQL 5.0 Reference Manual
http://dev.mysql.com/doc/refman/5.0/en/

Apache

Apache HTTP サーバ バージョン 2.2 ドキュメント
http://httpd.apache.org/docs/2.2/

SPF

SPF A Sender Policy Framework to Prevent Email Forgery
http://www.openspf.org/
Sender ID リソース:テクノロジに関するツールと情報
http://www.microsoft.com/japan/mscorp/safety/technologies/senderid/resources.mspx
Sender ID:送信者側の設定作業 − @IT
http://www.atmarkit.co.jp/fsecurity/special/82senderid/sender101.html
libspf2 - SPF Library
http://www.libspf2.org/index.html
Last modified:2008/03/22 17:48:37
Keyword(s):
References: