鷹の島

Debian GNU/Linux 等に関する Unix 系の設定メモ

Debian/Sarge でメールサーバ構築

postfix + courier でメールサーバ構築。

POP3-SSL、IMAP4-SSL、SMTP-AUTH(SSL)、バーチャルドメイン・ユーザ、ウィルスチェック、ウェブ経由のアカウント管理という所まで出来るようになった。

で、ドキュメントっていうか覚え書きっていうか、インストールの作業メモを簡単に書いたので、公開します。多分後日もっとちゃんと整理します。やる気あれば。

全部終わってからまとめて書いたので、この通りにやってもここに書いてある通りに順風に進まないかもしれません。そのうち素の状態からこの通りに作業してどうなるかをチェックしたいのですが、それはまた暫く先になりそう。

参考にしたページ

* 設定内容

  • POP3,IMAP,SMTP は SSL 経由での接続
  • SMTP AUTH 対応、POP Before SMTP は使わない
  • clamav で送受信するメールに対してウィルスチェック
  • アカウントはメールのみで使う専用の情報(バーチャルユーザ)
  • アカウント管理はウェブ上で行なう(postfix.admin)
  • Maildir 形式
  • localhost 以外からのメール送信は全て認証+SSL経由

以下設定に関する制限とか、気が付いた事とか。

  • 認証は全て生パスワード、APOP や CRAM-MD5 は使わない
    • Postfix の SMTP 認証のアカウント情報に courier で使ってるアカウントの情報と共有したい場合は CRAM-MD5 は使えない仕様
    • courier は APOP 非対応
    • つまり SSL 必須
  • amavisd はウィルスチェックとかスパムチェックとかをしてくれる外部のプログラムと連携するシステム(多分)
    • 標準の設定だとポート10024でメールを受け付けて、ウィルスチェックプログラム等へ処理を回し、その結果のメールをポート10025に送出する
  • Becky! は SSL のオレオレ証明書(自己署名の奴)の検証が出来ないっぽい?
    • IE でインポートしていても無視される
    • 検証をしないっていう設定にしないといけない
    • Sylpheed にはそういう設定は無い
  • postfix は全然エラーを教えてくれない
    • sasl/smtpd.conf の設定はハマリ所
      • 例えば mech_list に cram-md5 を入れると、pwcheck_method が勝手に auxprop になる
    • virtual_mailbox_* に指定したファイルのパーミッションに問題があった場合はエラーログ(/var/log/mail.log とか)を見ないとわからない
  • procmail 使えない
    • バーチャルドメインだと procmail 使えないらしい
    • つまりサーバ上でメールの振り分けが出来ない

* postfix のセッティング

MDA、postfix のセッティング。サーバがメールを受信して各ユーザに配送してくれるようになる。

$ apt-get install postfix-tls

/etc/postfix/main.cf を適度に設定

smtpd_banner = ESMTP $mail_name
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
relayhost =
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

home_mailbox = Maildir/

myhostname = mail.example.com
mydomain = mail.example.com
myorigin = $myhostname
mynetworks = 127.0.0.0/8

この時点で、Unix アカウントへのメールの配送が可能。

* courier のセッティング

MTA、courier 関連のセッティング。サーバとクライアントのメールのやり取りを行なう。

SSL 対応の POP3、IMAP4 のセッティング。

$ apt-get install courier-pop-ssl courier-imap-ssl

## SSL 非対応の処理は不要なので起動しないようにしておく
$ /etc/init.d/courier-pop stop
$ /etc/init.d/courier-imap stop
$ update-rc.d -f courier-pop remove
$ update-rc.d -f courier-imap remove

/etc/courier/pop3d-ssl と /etc/courier/imapd-ssl の TLS_CERTFILE を apache で使っている pem にする。

この時点で、Unix アカウントを使ったメールの送受信が可能。

* SMTP AUTH のセッティング

メールの送信時認証。

/etc/postfix/main.cf に下記追記。基本的に SSL での接続しか受け付けないようにする。SSL のキーは courier で利用しているものを流用。(smtpd_tls_session_cache_database は動作が少しおかしいので要調査。)

smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, permit_auth_destination, reject
smtpd_sasl_security_options = noanonymous
smtpd_tls_auth_only = yes

smtpd_tls_cert_file = /etc/courier/ssl/apache.pem
smtpd_tls_key_file = /etc/courier/ssl/apache.pem
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache

/etc/postfix/master.cf の下の方にある smtps の所のコメントを削除してセキュア SMTP の接続を受け付ける。

/etc/postfix/sasl/smtpd.conf を新規作成。SMTP AUTH の認証に courier の認証機構を利用する。

pwcheck_method: authdaemond
authdaemond_path: /var/run/courier/authdaemon/socket
mech_list: plain login

postfix を再起動(/etc/init.d/postfix restart)すれば、Unix アカウントを用いた SMTP AUTH でメールの送信が出来るようになる。同時に localhost 以外のアドレスからの25番ポートでの送信は不可能になる。


* postfix.admin のセッティング

アカウント情報を mysql を利用して管理するようにし、アカウントの管理をウェブ上から行なえるようにする。

$ apt-get install mysql-server php4-mysql

postfix.admin は Debian パッケージになっていないので、ソースを落としてくる。素の PHP スクリプトなので好きな所で展開。

以下のファイルを環境に合わせて編集。

  • admin/.htaccess - パスワードファイルのパス修正
  • admin/.htpasswd - パスワード変更
  • templates/header.tpl - ヘッダの charset を Shift_JIS に変更。

サーバのデフォルトのドメインに関しては、認証用のユーザIDをユーザ名の部分のみにしてドメイン名の入力を不要にしたかったので、以下の修正を行なう。

  • templates/create-mailbox.tpl - "fName" の入力エリアをコメントアウト
  • templates/edit-mailbox.tpl - "fName" の入力エリアをコメントアウト
  • 残りは こちらの diff ファイル 参照

その他の点は上記の参考サイトを参考にしてインストール作業を行なう。

* postfix で mysql

postfix を mysql のデータベースに対応させる。

$ apt-get install postfix-mysql

Unix アカウントを利用しなくなるので、メール配送処理専用のユーザを作成する。

$ groupadd -g 10000 vuser
$ useradd -g vuser -u 10000 vuser
$ mkdir /home/vmail

/etc/postfix/main.cf に設定を追加。メールは /home/vmail 以下に保存するようにする。

mydestination =
mynetworks = 127.0.0.0/8

relay_domains = $mydestination

local_transport = virtual
virtual_transport = virtual

virtual_mailbox_base = /home/vmail

virtual_alias_maps = mysql:/etc/postfix/virtual/alias_maps.cf
virtual_alias_domains = $virtual_alias_maps
virtual_mailbox_domains = mysql:/etc/postfix/virtual/domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/virtual/mailbox_maps.cf

virtual_minimum_uid = 10000
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000

mysql の読み込み用設定ファイルの作成。user と password の所がデータベースの認証情報。

$ mkdir /etc/postfix/virtual
$ cd /etc/postfix/virtual

$ vi alias_maps.cf
user = postfix
password = password
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address

$ vi domains_maps.cf
user = postfix
password = password
hosts = localhost
dbname = postfix
table = domain
select_field = description
where_field = domain

$ vi mailbox_maps.cf
user = postfix
password = password
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username

$ /etc/init.d/postfix restart

ここまでやったらウェブ上から postfix.admin を利用してアカウントの作成、管理が行なえるようになる。また、そのアカウントに対してメールの配送も行なわれる。

* courier で mysql

courier を mysql のデータベースに対応させる。

$ apt-get install courier-authmysql

/etc/courier/authdaemonrc の authmodulelist を authmodulelist="authmysql" ってする。

/etc/courier/authmysqlrc はいらないので以下の内容で置き換え。MYSQL_USERNAME と MYSQL_PASSWORD がデータベースの認証情報になる。

MYSQL_SERVER            localhost
MYSQL_USERNAME          postfix
MYSQL_PASSWORD          password
MYSQL_DATABASE          postfix
MYSQL_USER_TABLE        mailbox
MYSQL_CRYPT_PWFIELD     password
MYSQL_UID_FIELD         10000
MYSQL_GID_FIELD         10000
MYSQL_LOGIN_FIELD       name
MYSQL_HOME_FIELD        '/home/vmail'
MYSQL_MAILDIR_FIELD     maildir
MYSQL_QUOTA_FIELD       quota

courier の認証デーモンを再起動すれば、データを mysql から読み込むようになる。

$ /etc/init.d/courier-authdaemon restart

ここまでやれば、postfix.admin で作成したユーザを利用してメールの送受信が出来るようになる。

* amavisd-new のセッティング

amvisd-new + clamav を利用してウィルスチェック。

$ apt-get install amavisd-new clamav clamav-daemon

ウィルスチェック可能にするために /etc/group を編集。

clamav:x:110:amavis
amavis:x:111:clamav

amavisd-new の設定ファイル /etc/amavis/amavisd.conf を編集。編集した内容は以下の通り。

  • $mydomain $myhostname を自分のドメインに
  • $hdr_encoding $bdy_encoding を 'iso-2022-jp' に
  • $virus_admin を "postmaster\@$mydomain" に
  • $undecipherable_subject_tag をコメントアウト

postfix を amavisd を経由するように設定変更。/etc/postfix/main.cf に追記。

content_filter = smtp:localhost:10024

/etc/postfix/master.cf に追記。

127.0.0.1:10025 inet n - n - - smtpd
  -o content_filter=
  -o local_recipient_maps=
  -o myhostname=localhost

postfix を再起動すれば、全てのメール配送が amavisd を経由する事になり、amavisd が clamav を経由してウィルスチェックを行なえるようになる。

amavisd を経由したメールは、以下のように Received にヘッダが追記される。

Received: from mail.example.com ([127.0.0.1])
 by localhost (mail.example.com [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 07898-07 for <*****@example.com>;
 Thu, 25 May 2006 16:43:20 +0900 (JST)

Posted by Kyosuke Takayama at 2006-05-26 (Fri) 17:01