CentOS5.3
いろいろ構築した結果、メールサーバは Postfix +MySQL +Dovecot +postfixadmin で構成する事に決めた。
postfixadminを使う利点は、
- 複数のバーチャルドメインでの運用が可能&管理が楽
- ドメインの追加やメールアドレスの追加がブラウザからGUIで出来る
さらに、procmailとspamassassin、Clam AntiVirusを使って、スパムメール対策とウィルス対策も行う。
バーチャルドメイン環境でprocmailとspamassassinを使うにコツがいる(らしい)
ネットでの情報が少ない(ヒットしない)のでメモ。
メールサーバの構築
メールサーバの構築は メールサーバー構築(Postfix) を参考に行った。
ウィルス対策
ウィルス対策は アンチウィルス(Clam AntiVirus) を参考に行った。
スパムメール対策
スパムメール対策は spamassassinの導入や設定 を参考に行った。
postfixのMySQL対応化とpostfixadminの導入
Postfixによるメールサーバ構築 (Postfix+MySQL+Dovecot+postfixadmin) を参考に行った。
MySQL対応は CentOS5.3 PostfixをMySQL対応にするで行った。
リンク先で作成した(cat となっているが vi 等で新規作成する事)
/etc/postfix/mysql_virtual_alias_maps.cf
/etc/postfix/mysql_virtual_domains_maps.cf
/etc/postfix/mysql_virtual_mailbox_maps.cf
/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
のファイルにはMySQLのパスワードが含まれているのでパーミッションの変更を行う事。
chmod 640 /etc/postfix/mysql_* chown root.postfix /etc/postfix/mysql_*
メールの保存は/mail 以下となる。
だいたいうまくいくのだが、多少の変更が必要。
spamassassinを有効にするにはprocmailでメールボックスに配送しなければならない。
バーチャルドメインの場合procmailが使えないという記事が多かったので心配だったが、
postfixのバーチャルドメイン管理でのspamフィルタについて
を読むとどうやら使えるらしい。
Postfixの設定
main.cfの設定。
http://centos.bungu-do.jp/2008/11/postfix_3_postfix.html のmain.cf 設定を少々変更。
cp /etc/postfix/main.cf /etc/postfix/main.cf.org vi /etc/postfix/main.cf ------------------------------------------------------------------------------- myhostname = mail.example.com ←自メールサーバFQDN mydomain = example.com ←自サーバドメイン #myorigin = $mydomain myorigin = $myhostname #inet_interfaces = localhost inet_interfaces = all #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain mydestination = #relay_domains = $mydestination relay_domains = $mydestination home_mailbox = Maildir/ # IF YOU USE THIS TO DELIVER MAIL SYSTEM-WIDE, YOU MUST SET UP AN # ALIAS THAT FORWARDS MAIL FOR ROOT TO A REAL USER. # #mailbox_command = /some/where/procmail #mailbox_command = /some/where/procmail -a "$EXTENSION" mailbox_command = /usr/bin/procmail ←追記 smtpd_banner = $myhostname ESMTP unknown local_transport = virtual # virtual_transport = virtual ←コメントアウト virtual_transport = procmail ←追記 virtual_mailbox_base = /mail virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_alias_domains = $virtual_alias_maps virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_minimum_uid = 10000 virtual_uid_maps = static:10000 virtual_gid_maps = static:10000 maximal_backoff_time = 800s minimal_backoff_time = 100s bounce_queue_lifetime = 60m maximal_queue_lifetime = 60m #mailbox_size_limit = 1024000000 message_size_limit = 20480000 #virtual_mailbox_limit = 51200000 virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf virtual_mailbox_limit_override = yes virtual_overquota_bounce = yes virtual_mailbox_limit_inbox = yes smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_local_domain = $myhostname smtpd_client_restrictions = reject_rbl_client bl.spamcop.net smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination -------------------------------------------------------------------------------
master.cfの設定。
vi /etc/postfix/master.cf
最終行に追記
procmail unix - n n - - pipe
flags=R user=vuser argv=/usr/bin/procmail -t -m USER=${user} DOMAIN=${nexthop} /etc/procmailrc
procmailのルール、/etc/procmailrcを新規作成する。
vi /etc/procmailrc
SHELL=/bin/bash
PATH=/usr/bin:/bin
DEFAULT=/mail/$DOMAIN/$USER\@$DOMAIN/
#LOGFILE=/mail/procmail.log
LOGFILE=${DEFAULT}.procmail.log
#LOCKFILE=/mail/procmail.lock
LOCKFILE=/mail/$USER\@$DOMAIN.procmail.lock
VERBOSE=ON
:0fw
|/usr/bin/spamc
LOGFILEはテスト段階では/mail/procmail.logにしておくと楽。
VERBOSE=ON は詳細ログを記録する設定なので本格運用する際にはコメントアウトする。
また、LOCKFILEはユーザー数が増えた時の為に各ユーザーごとにロックファイルを使うようにしてみた。
ログの肥大化を防ぐため、ログローテーション設定ファイル新規作成する。
vi /etc/logrotate.d/procmail
/mail/*/*/.procmail.log {
missingok
nocreate
notifempty
}
注意点として、バーチャルドメインでの運用の場合ローカルユーザーのメールボックスにメールが配信されない。root宛のメールも然り。
root宛のメールが普段使っているメールアドレス宛に配信されるようにしておく。
vi /etc/aliases
# Person who should get root's mail
#root: marc
root: myname@domain.com ←最終行に追加
newaliases
myname@domain.comにroot宛のメールが届くようになる。
テスト
メールを配信してみてヘッダ情報を見る。
spamasassinが適用されていれば
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on xxx.xxxx.jp
X-Spam-Level:
X-Spam-Status: No, score=-0.1 required=13.0 tests=AWL,CONTENT_TYPE_PRESENT, ISO2022JP_BODY,ISO2022JP_CHARSET,X_MAILER_PRESENT autolearn=ham version=3.2.5
Clam AntiVirusが適用されていれば
X-Virus-Scanned: amavisd-new at xxxx.jp
がヘッダ情報に挿入されているはず。
その他のテスト方法は各リンクに掲載されていた通り。
ユーザーメールディレクトリが作成されない
・・・なぜかメールディレクトリが作成されない。
spamチェックのためメール配送をprocmailにするとディレクトリ作成されない事が判明。
メール用ディレクトリは /mail 以下で、ユーザーが vuser 、グループが vuser 、パーミッションは0771。
とりあえずユーザー postfix にセカンダリグループ vuserを追加してみたら既存のドメインには作成される。
新規にドメイン追加>メールアドレス追加の場合は作成されない。
この後したい事
postfixadminでドメイン、メールユーザー等を削除した場合は各ディレクトリが削除されない。
postfixadminのconfig.inc.phpにオプション設定があるが、シェルスクリプトで各動作が行えるようだ。
シェルスクリプト・・・書けねぇ。。。
postfixadminでメールボックスを削除する
PostfixAdminのイケてないところ
この辺に該当の対処が書かれている。
cronを使って削除する方法のようだ。
postfixadmin/ADDITIONS 内にある、
postfixadmin-domain-postdeletion.sh
postfixadmin-mailbox-postcreation.sh
postfixadmin-mailbox-postdeletion.sh
こいつらを使えば出来るかな?
以下は分かりにくいのでまとめてみた

