メールサーバ構築(Postfix +MySQL +Dovecot +postfixadmin)
- 2009.10.14
- CentOS5.x postfix postfixadmin
- Dovecot, postfix, postfixadmin, メールサーバ
より新しい記事 2011-01-12
https://perl.no-tubo.net/2011/01/06/メールサーバ構築のまとめ(複数のバーチャルド/
CentOS5.3
いろいろ構築した結果、メールサーバは Postfix +MySQL +Dovecot +postfixadmin で構成する事に決めた。
postfixadminを使う利点は、
- 複数のバーチャルドメインでの運用が可能&管理が楽
- ドメインの追加やメールアドレスの追加がブラウザからGUIで出来る
さらに、procmailとspamassassin、Clam AntiVirusを使って、スパムメール対策とウィルス対策も行う。
バーチャルドメイン環境でprocmailとspamassassinを使うにコツがいる(らしい)
ネットでの情報が少ない(ヒットしない)のでメモ。
メールサーバの構築
メールサーバの構築は メールサーバー構築(Postfix+Dovecot) - CentOSで自宅サーバー構築 を参考に行った。
おやじさんのPostfixによるSMTPサーバの構築(RedHat標準版編)も参考になる。
ウィルス対策
ウィルス対策は アンチウィルスソフト導入(Clam AntiVirus) - CentOSで自宅サーバー構築 を参考に行った。
スパムメール対策
スパムメール対策は メールサーバーでウィルス&スパムチェック(Postfix+Clam AntiVirus+SpamAssassin) - CentOSで自宅サーバー構築 を参考に行った。
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
こいつらを使えば出来るかな?
以下は分かりにくいのでまとめてみた
postfixadmin +procmailな環境でメールディレクトリの作成・削除
自動メールボックス作成に挑戦
/usr/local/bin/postfixadmin あたりにコピーする。
mkdir /usr/local/bin/postfixadmin ←保存用ディレクトリ作成
cd /var/www/postfixadmin/ADDITIONS
cp postfixadmin-domain-postdeletion.sh /usr/local/bin/postfixadmin
cp postfixadmin-mailbox-postcreation.sh /usr/local/bin/postfixadmin
cp postfixadmin-mailbox-postdeletion.sh /usr/local/bin/postfixadmin
cd /usr/local/bin/postfixadmin vi postfixadmin-domain-postdeletion.sh # Change this to where you keep your virtual mail users' maildirs. #basedir=/var/spool/maildirs ←コメントアウト basedir=/mail ←追記
vi postfixadmin-mailbox-postcreation.sh # Change this to where you keep your virtual mail users' maildirs. #basedir=/var/spool/maildirs ←コメントアウト basedir=/mail ←追記 コメントアウト #maildirmake "$maildir" #if [ ! -d "$maildir" ]; then # echo "$0: maildirmake didn't produce a directory; bailing out." # exit 1 #fi 追記 mkdir "$maildir" if [ ! -d "$maildir" ]; then echo "$0: mkdir didn't produce a directory; bailing out." exit 1 fi mkdir "${maildir}cur" if [ ! -d "${maildir}cur" ]; then echo "$0: mkdir didn't produce a directory; bailing out." exit 1 fi mkdir "${maildir}new" if [ ! -d "${maildir}new" ]; then echo "$0: mkdir didn't produce a directory; bailing out." exit 1 fi mkdir "${maildir}tmp" if [ ! -d "${maildir}tmp" ]; then echo "$0: mkdir didn't produce a directory; bailing out." exit 1 fi chown -R vuser:vuser "$maildir" chmod -R 700 "$maildir"
vi postfixadmin-mailbox-postdeletion.sh
# Change this to where you keep your virtual mail users' maildirs.
#basedir=/var/spool/maildirs ←コメントアウト
basedir=/mail ←追記
実行権を与える
chmod 700 /usr/local/bin/postfixadmin/postfixadmin*
postfixadmin 設定ファイル修正
vi /var/www/postfixadmin/config.inc.php
// Optional:
// Script to run after creation of mailboxes.
// Note that this may fail if PHP is run in "safe mode", or if
// operating system features (such as SELinux) or limitations
// prevent the web-server from executing external scripts.
// $CONF['mailbox_postcreation_script']='sudo -u courier /usr/local/bin/postfixadmin-mailbox-postcreation.sh'; ←コメントアウト
$CONF['mailbox_postcreation_script']='sudo /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh'; ←追記
sudo変更
※ 終了するには esc の後に、大文字で ZZ
visudo # # Disable "ssh hostname sudo ", because it will show the password in clear. # You have to run "ssh -t hostname sudo ". # #Defaults requiretty ←コメントアウト ## The COMMANDS section may have other options added to it. ## ## Allow root to run any commands anywhere root ALL=(ALL) ALL apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh ←追記
-
前の記事
CentOS5.3 PostfixをMySQL対応にする 2009.10.02
-
次の記事
postfixadmin +procmailな環境でメールディレクトリの自動作成・削除 2009.10.15