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

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

Last Update: 2006--0-5- (Fri) 26: 1

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 printable version

この記事へのコメント

1) あいしー (2006-09-17 (Sun) 00:22)

はじめまして。同じ環境で、メールサーバの構築をしており、とても参考になりました。ありがとうございます。

作業をしていて抜けていると思われる点に気づきました。

・apt-get install sasl2-bin libsasl2-modules
・postfixをdaemonグループへ追加

が必要だと思います。
まだ作業中なので、正しいかどうかは分かりませんが、他の人にも参考になればと思い、念のため投稿させていただきました。

2) あいしー (2006-09-17 (Sun) 00:33)

同じく、気になった点が・・・。

Debian/sargeのPostfixは、2.1.xなので、btreeは対応していないのではないでしょうか?
私の環境では、sdbmで動いています。

3) あいしー (2006-09-17 (Sun) 18:40)

本日全てのインストールが終わりました。
とても参考になりました。ありがとうございます。

いくつか気づいた点を・・・

私の環境では、chrootでPostfixが動いているよう出したので、main.cfの一部を

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

とする必要がありました。

4) takayama (2006-09-19 (Tue) 14:28)

参考になったようで、頑張って書いた甲斐がありました。嬉しいです。

>>1
sasl に関するファイルは postfix-tls をインストールした時に一緒に入ったようです。今 zsh のログを見て確認したのですが、特にインストールした様子は見られないので、多分そうなのでしょう。daemon は、手動で /etc/group をいじったかどうかは覚えてないのですが自動で入るんじゃないでしょうか。入りませんでした?

>>2
実は私もこの辺りが良くわかんない所でして。
確かにログにはbtreeだとダメ(*)!ってエラーが出てるんですが、sdbmに変更すると今度は全く動かなくなってしまうんですよね。逆にお伺いしたいのですが、sdbmで動かすためには何かパッケージが必要だと思うんですが、おわかりになりますでしょうか?今はlibsdbm-rubyって言うのしか入っていないようです。

(*) warning: Only sdbm: type allowed for btree:/etc/postfix/smtpd_scache

5) あいしー (2006-09-19 (Tue) 19:44)

>sdbmで動かすためには何かパッケージが
特に何も入れていません。エラーは同じものがでてました。

6) ふぉっくす (2007-04-06 (Fri) 13:33)

いろいろと参考にさせてもらいました。
まだ、アンチウィルスの設定で苦戦していますが…。

ところで、上記の設定で今まで使用していたSquirrelMailを使用したいのですが、上手く送信や受信できていません。
courier-popやcourier-imapを生かせば正常動作しますが、やはりセキュリティー上問題かと…。
localhostからのアクセスでcourier-pop-sslやcourier-imap-sslはsslを使わない設定って、どうすれば良いのでしょうか?
何か参考に出来るものは無いでしょうか??

7) takayama (2007-04-07 (Sat) 14:20)

私は良くわからないので、courier-imap も入れて、squirrelmail は非SSL環境で使っています。

8) ふぉっくす (2007-04-09 (Mon) 13:02)

そうですか…同じ方法で何となく解決していたので、私もこれで良しとします!
話は変わりますが、最近の25ポート対策はどんな感じにされていますか?

9) takayama (2007-04-10 (Tue) 11:59)

main.cf に relayhost = hostname としてプロバイダの SMTP サーバを経由させてます。
これじゃ自前の SMTP サーバも意味ないっすよねぇ。

10) かーねるん (2007-05-21 (Mon) 18:25)

今は使ってないけど、たしか、SquirrelMailはバーチャルドメイン用のプラグインを入れないと使えないハズ。

localhostからのアクセス云々、単純に110,143(非SSL)993,995(SSL)ポートに拠ると思うんだけど・・・。
110, 143をローカルとLANのみアクセス可にしてやればいいんじゃないかなぁ

という私もpostfix(2.3.3)でバーチャルドメインやってます。
複数ドメインによるというより、Linuxユーザに因らないメールアドレスっていうので使っているんだけど、
relayhost は未設定。携帯へ飛ばすメールだけISPのSMTPサーバに転送してます。
それはそうと、解説がされていないようなので(笑
使い方次第ですが、postfixadmin 使って quota を有効にして、
家族用やら社員用やら、各メルアド毎に容量制限付ける・・・というのはどうでしょう。
そういう使い方をしてますもんで(^.^)

コメントはお気軽にどうぞ

Cookie に保存しますか?


・スパム対策のため、http:// を含むコメントの投稿は出来ません。
・スパムチェックのため、投稿がすぐに反映されない場合があります。
・メールアドレス入力欄には何も入力しないでください。

トラックバック

トラックバックURL: http://espion.just-size.jp/mt-tb.cgi/579


この記事のリンク元

 
Copyright (C) Kyosuke Takayama, All rights reserved.