■ Debian/Sarge でメールサーバ構築
postfix + courier でメールサーバ構築。
POP3-SSL、IMAP4-SSL、SMTP-AUTH(SSL)、バーチャルドメイン・ユーザ、ウィルスチェック、ウェブ経由のアカウント管理という所まで出来るようになった。
で、ドキュメントっていうか覚え書きっていうか、インストールの作業メモを簡単に書いたので、公開します。多分後日もっとちゃんと整理します。やる気あれば。
全部終わってからまとめて書いたので、この通りにやってもここに書いてある通りに順風に進まないかもしれません。そのうち素の状態からこの通りに作業してどうなるかをチェックしたいのですが、それはまた暫く先になりそう。
参考にしたページ
- http://www.aconus.com/~oyaji/suse9.2/smtp-mysql-suse.htm
- http://www.aconus.com/~oyaji/suse9.3/amavisd-new_suse9.3.htm
* 設定内容
- 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 スクリプトなので好きな所で展開。
- オフィシャルサイト: http://high5.net/postfixadmin/
- 基本設定と日本語の参考: http://www.aconus.com/~oyaji/suse9.2/smtp-mysql-suse.htm
以下のファイルを環境に合わせて編集。
- 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 printable version
1) あいしー (2006-09-17 (Sun) 00:22)
はじめまして。同じ環境で、メールサーバの構築をしており、とても参考になりました。ありがとうございます。
作業をしていて抜けていると思われる点に気づきました。
・apt-get install sasl2-bin libsasl2-modules
・postfixをdaemonグループへ追加
が必要だと思います。
まだ作業中なので、正しいかどうかは分かりませんが、他の人にも参考になればと思い、念のため投稿させていただきました。