<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>perlとMysqlでCGI &#38; サーバ管理 漏れ的メモ &#187; postfix</title>
	<atom:link href="http://perl.no-tubo.net/category/%e3%82%b5%e3%83%bc%e3%83%90%e7%ae%a1%e7%90%86/%e3%83%a1%e3%83%bc%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90/postfix/feed/" rel="self" type="application/rss+xml" />
	<link>http://perl.no-tubo.net</link>
	<description>perl＆MySQLでCGIプログラミング。ウェブ運営の小技。鯖管メモもちょっとだけ。</description>
	<lastBuildDate>Fri, 10 Sep 2010 00:38:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>postfixadmin +procmailな環境でメールディレクトリの自動作成・削除</title>
		<link>http://perl.no-tubo.net/2009/10/15/postfixadmin-procmail%e3%81%aa%e7%92%b0%e5%a2%83%e3%81%a7%e3%83%a1%e3%83%bc%e3%83%ab%e3%83%87%e3%82%a3%e3%83%ac%e3%82%af%e3%83%88%e3%83%aa%e3%81%ae%e4%bd%9c%e6%88%90%e3%83%bb%e5%89%8a%e9%99%a4/</link>
		<comments>http://perl.no-tubo.net/2009/10/15/postfixadmin-procmail%e3%81%aa%e7%92%b0%e5%a2%83%e3%81%a7%e3%83%a1%e3%83%bc%e3%83%ab%e3%83%87%e3%82%a3%e3%83%ac%e3%82%af%e3%83%88%e3%83%aa%e3%81%ae%e4%bd%9c%e6%88%90%e3%83%bb%e5%89%8a%e9%99%a4/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 02:03:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CentOS5.x]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[postfixadmin]]></category>
		<category><![CDATA[メールサーバ]]></category>
		<category><![CDATA[procmail]]></category>

		<guid isPermaLink="false">http://perl.no-tubo.net/?p=223</guid>
		<description><![CDATA[構築環境

CentOS5.3
Postfix +MySQL
Dovecot
postfixadmin
procmail (spamassassin、Clam AntiVirus でスパムメールとウィルス対策)

pos [...]]]></description>
			<content:encoded><![CDATA[<h3>構築環境</h3>
<ul>
<li>CentOS5.3</li>
<li>Postfix +MySQL</li>
<li>Dovecot</li>
<li>postfixadmin</li>
<li>procmail (spamassassin、Clam AntiVirus でスパムメールとウィルス対策)</li>
</ul>
<p>postfixadminを使ってバーチャルドメインでメールサーバを構築するまではうまくいったのだけど、procmailを使うと自動でメールボックスが作成されない。</p>
<p>もともとメールアカウント削除してもメールボックスが自動で削除されないので付属のシェルスクリプト改で行ってみるテスト。</p>
<p>postfixadminは /var/www/postfixadmin に設置してあるとし、</p>
<p>メールは/mail 以下に保存される設定で。<br />
/mail/hoge.com/user@hoge.com な感じ。</p>
<p>メールディレクトリ作成・削除スクリプトは/usr/local/bin/postfixadmin へ保存。</p>
<blockquote><p>メールボックス作成用スクリプト<br />
/usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh</p>
<p>メールボックス削除用スクリプト<br />
/usr/local/bin/postfixadmin/postfixadmin-mailbox-postdeletion.sh</p>
<p>ドメイン削除用スクリプト？<br />
/usr/local/bin/postfixadmin/postfixadmin-domain-postdeletion.sh</p></blockquote>
<h3>１）sudo を使用するので/etc/sudoers を編集する。</h3>
<p>どうやら最近のマシンではエラーが出るらしいので併せて対処。<br />
参考：<a href="http://blog.cles.jp/item/2919">sudoが「sudo: sorry, you must have a tty to run sudo」と文句を言うときは<br />
</a></p>
<p>webサーバ(apache)のhttpd.conf設定は<br />
User apache<br />
Group apache<br />
としています。</p>
<pre>visudo

#
# Disable "ssh hostname sudo ", because it will show the password in clear.
#         You have to run "ssh -t hostname sudo ".
#
<span style="color: #ff9900;">#Defaults    requiretty ←コメントアウト
</span>
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
<span style="color: #33cccc;">apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh ←追記
apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/postfixadmin-mailbox-postdeletion.sh ←追記
apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/postfixadmin-domain-postdeletion.sh ←追記</span></pre>
<h3>２）メールボックス作成・削除スクリプト準備</h3>
<p>保存用ディレクトリを作成し、postfixadmin/ADDITIONS 内にある、</p>
<p>postfixadmin-domain-postdeletion.sh<br />
postfixadmin-mailbox-postcreation.sh<br />
postfixadmin-mailbox-postdeletion.sh</p>
<p>を/usr/local/bin/postfixadmin 以下にコピーする。</p>
<pre>mkdir /usr/local/bin/postfixadmin
cp /var/www/postfixadmin/ADDITIONS/postfixadmin-domain-postdeletion.sh /usr/local/bin/postfixadmin
cp /var/www/postfixadmin/ADDITIONS/postfixadmin-mailbox-postcreation.sh /usr/local/bin/postfixadmin
cp /var/www/postfixadmin/ADDITIONS/postfixadmin-mailbox-postdeletion.sh /usr/local/bin/postfixadmin</pre>
<h3>３）削除メールボックスの保存先</h3>
<p>削除したメールボックスは/mail/.deleted-maildirs 以下に保存されるようにする。</p>
<p>削除したメールボックスを保存するディレクトリ作成</p>
<pre>mkdir /mail/.deleted-maildirs
chmod 771 /mail/.deleted-maildirs
chown vuser:vuser /mail/.deleted-maildirs</pre>
<h3>４）スクリプトの編集</h3>
<h5>ユーザーメールボックス作成用スクリプトの編集</h5>
<pre>#!/bin/sh

# Example script for adding a Maildir to a Courier-IMAP virtual mail
# hierarchy.

# The script only looks at argument 3, assuming that it
# indicates the relative name of a maildir, such as
# "somedomain.com/peter/".

# This script should be run as the user which owns the maildirs. If
# the script is actually run by the apache user (e.g. through PHP),
# then you could use "sudo" to grant apache the rights to run
# this script as the relevant user.
# Assume this script has been saved as
# /usr/local/bin/postfixadmin-mailbox-postcreation.sh and has been
# made executable. Now, an example /etc/sudoers line:
# apache ALL=(courier) NOPASSWD: /usr/local/bin/postfixadmin-mailbox-postcreation.sh
# The line states that the apache user may run the script as the
# user "courier" without providing a password.

# Change this to where you keep your virtual mail users' maildirs.
<span style="color: #ff9900;">#basedir=/var/spool/maildirs ←コメントアウト
<span style="color: #33cccc;">basedir=/mail ←追記
</span></span><span style="color: #ccffff;">
</span><span style="color: #ccffff;">i</span>f [ ! -e "$basedir" ]; then
    echo "$0: basedir '$basedir' does not exist; bailing out."
    exit 1
fi

if [ `echo $3 | fgrep '..'` ]; then
    echo "$0: An argument contained a double-dot sequence; bailing out."
    exit 1
fi

maildir="${basedir}/$3"
parent=`dirname "$maildir"`
if [ ! -d "$parent" ]; then
    if [ -e "$parent" ]; then
        echo "$0: strange - directory '$parent' exists, but is not a directory; bailing out."
        exit 1
    else
        mkdir -p "${parent}"
        if [ $? -ne 0 ]; then
            echo "$0: mkdir -p '$parent' returned non-zero; bailing out."
            exit 1
        fi
    fi
fi

if [ -e "$maildir" ]; then
    echo "$0: Directory '$maildir' already exists! bailing out"
    exit 1
fi
<span style="color: #ff9900;">
#maildirmake "$maildir" ←コメントアウト
#if [ ! -d "$maildir" ]; then
#    echo "$0: maildirmake didn't produce a directory; bailing out."
#    exit 1
#fi</span>

<span style="color: #33cccc;">
# 以下を追記
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"</span>

exit 0</pre>
<h5>ユーザーメールボックス削除スクリプトの編集</h5>
<p>ユーザーメールボックスは、/mail/hoge.com/user@hoge.com の形式としています。</p>
<pre>#!/bin/sh

# Example script for removing a Maildir from a Courier-IMAP virtual mail
# hierarchy.

# The script looks at arguments 1 and 2, assuming that they
# indicate username and domain, respectively.

# The script will not actually delete the maildir. I moves it
# to a special directory which may once in a while be cleaned up
# by the system administrator.

# This script should be run as the user which owns the maildirs. If
# the script is actually run by the apache user (e.g. through PHP),
# then you could use "sudo" to grant apache the rights to run
# this script as the relevant user.
# Assume this script has been saved as
# /usr/local/bin/postfixadmin-mailbox-postdeletion.sh and has been
# made executable. Now, an example /etc/sudoers line:
# apache ALL=(courier) NOPASSWD: /usr/local/bin/postfixadmin-mailbox-postdeletion.sh
# The line states that the apache user may run the script as the
# user "courier" without providing a password.

# Change this to where you keep your virtual mail users' maildirs.
<span style="color: #ff9900;">#basedir=/var/spool/maildirs ←コメントアウト
</span><span style="color: #33cccc;">basedir=/mail ←追記
</span>
# Change this to where you would like deleted maildirs to reside.
<span style="color: #ff9900;">#trashbase=/var/spool/deleted-maildirs ←コメントアウト
</span><span style="color: #33cccc;">trashbase=/mail/.deleted-maildirs ← 追記
</span>
if [ ! -e "$trashbase" ]; then
    echo "trashbase '$trashbase' does not exist; bailing out."
    exit 1
fi

if [ `echo $1 | fgrep '..'` ]; then
    echo "First argument contained a double-dot sequence; bailing out."
    exit 1
fi
if [ `echo $2 | fgrep '..'` ]; then
    echo "First argument contained a double-dot sequence; bailing out."
    exit 1
fi

<span style="color: #ff9900;">#subdir=`echo "$1" | sed 's/@.*//'` ←コメントアウト
</span><span style="color: #33cccc;">subdir=$1 ← 追記
</span>
maildir="${basedir}/$2/${subdir}"
trashdir="${trashbase}/$2/`date +%F_%T`_${subdir}"

parent=`dirname "$trashdir"`
if [ ! -d "$parent" ]; then
    if [ -e "$parent" ]; then
        echo "Strainge - directory '$parent' exists, but is not a directory."
        echo "Bailing out."
        exit 1
    else
        mkdir -p "$parent"
        if [ $? -ne 0 ]; then
            echo "mkdir -p '$parent' returned non-zero; bailing out."
            exit 1
        fi
    fi
fi

if [ ! -e "$maildir" ]; then
    echo "maildir '$maildir' does not exist; nothing to do."
    exit 1
fi
if [ -e "$trashdir" ]; then
    echo "trashdir '$trashdir' already exists; bailing out."
    exit 1
fi

mv $maildir $trashdir

exit $?</pre>
<p>ドメイン削除用スクリプトの編集</p>
<pre>#!/bin/sh

# Example script for removing a Maildir domain top-level folder
# from a Courier-IMAP virtual mail hierarchy.

# The script only looks at argument 1, assuming that it
# indicates the relative name of a domain, such as
# "somedomain.com". If $basedir/somedomain.com exists, it will
# be removed.

# The script will not actually delete the directory. I moves it
# to a special directory which may once in a while be cleaned up
# by the system administrator.

# This script should be run as the user which owns the maildirs. If
# the script is actually run by the apache user (e.g. through PHP),
# then you could use "sudo" to grant apache the rights to run
# this script as the relevant user.
# Assume this script has been saved as
# /usr/local/bin/postfixadmin-domain-postdeletion.sh and has been
# made executable. Now, an example /etc/sudoers line:
# apache ALL=(courier) NOPASSWD: /usr/local/bin/postfixadmin-domain-postdeletion.sh
# The line states that the apache user may run the script as the
# user "courier" without providing a password.

# Change this to where you keep your virtual mail users' maildirs.
<span style="color: #ff9900;">#basedir=/var/spool/maildirs ←コメントアウト
</span><span style="color: #33cccc;">basedir=/mail ←追記
</span>
# Change this to where you would like deleted maildirs to reside.
<span style="color: #ff9900;">trashbase=/var/spool/deleted-maildirs ←コメントアウト
</span><span style="color: #33cccc;">trashbase=/mail/.deleted-maildirs ←追記
</span>
if [ `echo $1 | fgrep '..'` ]; then
    echo "First argument contained a double-dot sequence; bailing out."
    exit 1
fi

if [ ! -e "$trashbase" ]; then
    echo "trashbase '$trashbase' does not exist; bailing out."
    exit 1
fi

trashdir="${trashbase}/`date +%F_%T`_$1"
domaindir="${basedir}/$1"

if [ ! -e "$domaindir" ]; then
    echo "Directory '$domaindir' does not exits; nothing to do."
    exit 0;
fi
if [ ! -d "$domaindir" ]; then
    echo "'$domaindir' is not a directory; bailing out."
    exit 1
fi
if [ -e "$trashdir" ]; then
    echo "Directory '$trashdir' already exits; bailing out."
    exit 1;
fi

mv $domaindir $trashdir

exit $?</pre>
<p>実行権を与える</p>
<pre>chmod 700 /usr/local/bin/postfixadmin/postfixadmin*</pre>
<h3>５）phpadminの設定ファイルを修正</h3>
<pre>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';
<span style="color: #33cccc;">$CONF['mailbox_postcreation_script']='sudo /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh'; ←追記
</span>
// Optional:
// Script to run after deletion 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_postdeletion_script']='sudo -u courier /usr/local/bin/postfixadmin-mailbox-postdeletion.sh';
<span style="color: #33cccc;">$CONF['mailbox_postdeletion_script']='sudo /usr/local/bin/postfixadmin/postfixadmin-mailbox-postdeletion.sh'; ←追記
</span>
// Optional:
// Script to run after deletion of domains.
// 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['domain_postdeletion_script']='sudo -u courier /usr/local/bin/postfixadmin-domain-postdeletion.sh';
<span style="color: #33cccc;">$CONF['domain_postdeletion_script']='sudo /usr/local/bin/postfixadmin/postfixadmin-domain-postdeletion.sh';</span></pre>
<h3>テスト</h3>
<p>postfixadminでメールアカウントの作成・削除を行って、該当のメールボックスの状況を確認する。</p>
<p>ドメイン追加・削除を行う場合は、ドメインの追加後メールユーザーを１つ以上追加する必要がある。（ドメイン追加のみだとディレクトリが作成されない為）</p>
<p><span style="text-decoration: line-through;"><br />
</span></p>
<h3>気になる事</h3>
<p>visudo でコメントアウトした</p>
<p>#Defaults    requiretty ←コメントアウト</p>
<p>が、セキュリティー面でどうなのか、と。</p>
]]></content:encoded>
			<wfw:commentRss>http://perl.no-tubo.net/2009/10/15/postfixadmin-procmail%e3%81%aa%e7%92%b0%e5%a2%83%e3%81%a7%e3%83%a1%e3%83%bc%e3%83%ab%e3%83%87%e3%82%a3%e3%83%ac%e3%82%af%e3%83%88%e3%83%aa%e3%81%ae%e4%bd%9c%e6%88%90%e3%83%bb%e5%89%8a%e9%99%a4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>メールサーバ構築（Postfix +MySQL +Dovecot +postfixadmin）</title>
		<link>http://perl.no-tubo.net/2009/10/14/%e3%83%a1%e3%83%bc%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90%e6%a7%8b%e7%af%89%ef%bc%88postfix-mysql-dovecot-postfixadmin%ef%bc%89-2/</link>
		<comments>http://perl.no-tubo.net/2009/10/14/%e3%83%a1%e3%83%bc%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90%e6%a7%8b%e7%af%89%ef%bc%88postfix-mysql-dovecot-postfixadmin%ef%bc%89-2/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 09:56:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CentOS5.x]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[postfixadmin]]></category>

		<guid isPermaLink="false">http://pet.no-tubo.net/?p=187</guid>
		<description><![CDATA[CentOS5.3
いろいろ構築した結果、メールサーバは Postfix +MySQL +Dovecot +postfixadmin で構成する事に決めた。
postfixadminを使う利点は、

複数のバーチャルドメ [...]]]></description>
			<content:encoded><![CDATA[<p>CentOS5.3</p>
<p>いろいろ構築した結果、メールサーバは Postfix +MySQL +Dovecot +postfixadmin で構成する事に決めた。<br />
postfixadminを使う利点は、</p>
<ul>
<li>複数のバーチャルドメインでの運用が可能＆管理が楽</li>
<li>ドメインの追加やメールアドレスの追加がブラウザからGUIで出来る</li>
</ul>
<p>さらに、procmailとspamassassin、Clam AntiVirusを使って、スパムメール対策とウィルス対策も行う。</p>
<p>バーチャルドメイン環境でprocmailとspamassassinを使うにコツがいる（らしい）</p>
<p>ネットでの情報が少ない（ヒットしない）のでメモ。</p>
<h3>メールサーバの構築</h3>
<p>メールサーバの構築は <a href="http://centossrv.com/postfix.shtml" target="_blank">メールサーバー構築（Postfix）</a> を参考に行った。</p>
<h3>ウィルス対策</h3>
<p>ウィルス対策は <a href="http://centossrv.com/clamav.shtml" target="_blank">アンチウィルス(Clam AntiVirus)</a> を参考に行った。</p>
<h3>スパムメール対策</h3>
<p>スパムメール対策は <a href="http://centossrv.com/postfix-clamav-spamassassin.shtml" target="_blank">spamassassinの導入や設定</a> を参考に行った。</p>
<h3>postfixのMySQL対応化とpostfixadminの導入</h3>
<p><a href="http://centos.bungu-do.jp/2008/11/postfix_postfixmysqldovecotpos.html">Postfixによるメールサーバ構築 (Postfix+MySQL+Dovecot+postfixadmin)</a> を参考に行った。</p>
<p>MySQL対応は<a href="http://perl.no-tubo.net/2009/10/02/centos5-3-postfix%e3%82%92mysql%e5%af%be%e5%bf%9c%e3%81%ab%e3%81%99%e3%82%8b/"> CentOS5.3 PostfixをMySQL対応にする</a>で行った。</p>
<p>リンク先で作成した（cat となっているが vi 等で新規作成する事）</p>
<blockquote><p>/etc/postfix/mysql_virtual_alias_maps.cf<br />
/etc/postfix/mysql_virtual_domains_maps.cf<br />
/etc/postfix/mysql_virtual_mailbox_maps.cf<br />
/etc/postfix/mysql_virtual_mailbox_limit_maps.cf</p></blockquote>
<p>のファイルにはMySQLのパスワードが含まれているのでパーミッションの変更を行う事。</p>
<pre>chmod 640 /etc/postfix/mysql_*
chown root.postfix /etc/postfix/mysql_*</pre>
<p>メールの保存は/mail 以下となる。</p>
<p>だいたいうまくいくのだが、多少の変更が必要。</p>
<p>spamassassinを有効にするにはprocmailでメールボックスに配送しなければならない。</p>
<p>バーチャルドメインの場合procmailが使えないという記事が多かったので心配だったが、</p>
<p><a href="http://oshiete1.watch.impress.co.jp/qa3819766.html">postfixのバーチャルドメイン管理でのspamフィルタについて</a></p>
<p>を読むとどうやら使えるらしい。</p>
<h3>Postfixの設定</h3>
<h4>main.cfの設定。</h4>
<p><a href="http://centos.bungu-do.jp/2008/11/postfix_3_postfix.html"> http://centos.bungu-do.jp/2008/11/postfix_3_postfix.html</a> のmain.cf 設定を少々変更。</p>
<pre>cp /etc/postfix/main.cf /etc/postfix/main.cf.org
vi /etc/postfix/main.cf
-------------------------------------------------------------------------------
myhostname = <span style="color: #ff9900;">mail.example.com ←自メールサーバFQDN</span>
mydomain = <span style="color: #ff9900;">example.com ←自サーバドメイン</span>
#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"
<span style="color: #ff9900;"> mailbox_command = /usr/bin/procmail ←追記
</span>
smtpd_banner = $myhostname ESMTP unknown

local_transport = virtual
<span style="color: #ff9900;"># virtual_transport = virtual ←コメントアウト
virtual_transport = procmail ←追記</span>
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
-------------------------------------------------------------------------------</pre>
<h4>master.cfの設定。</h4>
<pre>vi /etc/postfix/master.cf

<span style="color: #ff9900;">最終行に追記
procmail unix - n n - - pipe
  flags=R user=vuser argv=/usr/bin/procmail -t -m USER=${user} DOMAIN=${nexthop} /etc/procmailrc</span></pre>
<h4>procmailのルール、/etc/procmailrcを新規作成する。</h4>
<pre>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</pre>
<p>LOGFILEはテスト段階では/mail/procmail.logにしておくと楽。</p>
<p>VERBOSE=ON は詳細ログを記録する設定なので本格運用する際にはコメントアウトする。</p>
<p>また、LOCKFILEはユーザー数が増えた時の為に各ユーザーごとにロックファイルを使うようにしてみた。</p>
<h4>ログの肥大化を防ぐため、ログローテーション設定ファイル新規作成する。</h4>
<pre>vi /etc/logrotate.d/procmail

/mail/*/*/.procmail.log {
    missingok
    nocreate
    notifempty
}</pre>
<p>注意点として、バーチャルドメインでの運用の場合ローカルユーザーのメールボックスにメールが配信されない。root宛のメールも然り。</p>
<p>root宛のメールが普段使っているメールアドレス宛に配信されるようにしておく。</p>
<pre>vi /etc/aliases

# Person who should get root's mail
#root:          marc
<span style="color: #33cccc;">root:           myname@domain.com ←最終行に追加</span>

newaliases</pre>
<p>myname@domain.comにroot宛のメールが届くようになる。</p>
<h4>テスト</h4>
<p>メールを配信してみてヘッダ情報を見る。</p>
<p>spamasassinが適用されていれば</p>
<blockquote><p>X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on xxx.xxxx.jp<br />
X-Spam-Level:<br />
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</p></blockquote>
<p>Clam AntiVirusが適用されていれば</p>
<blockquote><p>X-Virus-Scanned: amavisd-new at xxxx.jp</p></blockquote>
<p>がヘッダ情報に挿入されているはず。</p>
<p>その他のテスト方法は各リンクに掲載されていた通り。</p>
<h4>ユーザーメールディレクトリが作成されない</h4>
<p>・・・なぜかメールディレクトリが作成されない。</p>
<p>spamチェックのためメール配送をprocmailにするとディレクトリ作成されない事が判明。</p>
<p>メール用ディレクトリは /mail 以下で、ユーザーが vuser 、グループが vuser 、パーミッションは0771。</p>
<p>とりあえずユーザー postfix にセカンダリグループ vuserを追加してみたら既存のドメインには作成される。</p>
<p>新規にドメイン追加＞メールアドレス追加の場合は作成されない。</p>
<h4>この後したい事</h4>
<p>postfixadminでドメイン、メールユーザー等を削除した場合は各ディレクトリが削除されない。</p>
<p>postfixadminのconfig.inc.phpにオプション設定があるが、シェルスクリプトで各動作が行えるようだ。</p>
<p>シェルスクリプト・・・書けねぇ。。。</p>
<p><a href="http://local.lipwood.com/content/view/69/129/">postfixadminでメールボックスを削除する<br />
</a><a href="http://www.yanbe.net/blog/archives/000242.html"> PostfixAdminのイケてないところ</a></p>
<p>この辺に該当の対処が書かれている。</p>
<p>cronを使って削除する方法のようだ。</p>
<p>postfixadmin/ADDITIONS 内にある、</p>
<blockquote><p>postfixadmin-domain-postdeletion.sh<br />
postfixadmin-mailbox-postcreation.sh<br />
postfixadmin-mailbox-postdeletion.sh</p></blockquote>
<p>こいつらを使えば出来るかな？</p>
<p>以下は分かりにくいのでまとめてみた</p>
<h4><a href="http://perl.no-tubo.net/2009/10/15/postfixadmin-procmail%e3%81%aa%e7%92%b0%e5%a2%83%e3%81%a7%e3%83%a1%e3%83%bc%e3%83%ab%e3%83%87%e3%82%a3%e3%83%ac%e3%82%af%e3%83%88%e3%83%aa%e3%81%ae%e4%bd%9c%e6%88%90%e3%83%bb%e5%89%8a%e9%99%a4/"> postfixadmin +procmailな環境でメールディレクトリの作成・削除</a></h4>
<h3>自動メールボックス作成に挑戦</h3>
<p><span id="more-187"></span>/usr/local/bin/postfixadmin あたりにコピーする。</p>
<pre>mkdir /usr/local/bin/postfixadmin <span style="color: #ff9900;">←保存用ディレクトリ作成</span>
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</pre>
<pre>cd /usr/local/bin/postfixadmin
vi postfixadmin-domain-postdeletion.sh

# Change this to where you keep your virtual mail users' maildirs.
<span style="color: #ff9900;">#basedir=/var/spool/maildirs ←コメントアウト
</span><span style="color: #ff9900;">basedir=/mail ←追記</span></pre>
<pre>vi postfixadmin-mailbox-postcreation.sh

# Change this to where you keep your virtual mail users' maildirs.
<span style="color: #ff9900;">#basedir=/var/spool/maildirs ←コメントアウト
</span><span style="color: #ff9900;">basedir=/mail ←追記
</span><span style="color: #ff9900;">
</span><span style="color: #ff9900;">コメントアウト
#maildirmake "$maildir"
#if [ ! -d "$maildir" ]; then
#    echo "$0: maildirmake didn't produce a directory; bailing out."
#    exit 1
#fi</span><span style="color: #ff9900;">

</span><span style="color: #ff9900;">追記
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"</span></pre>
<pre>vi postfixadmin-mailbox-postdeletion.sh

# Change this to where you keep your virtual mail users' maildirs.
<span style="color: #ff9900;">#basedir=/var/spool/maildirs ←コメントアウト
basedir=/mail ←追記</span></pre>
<p>実行権を与える</p>
<pre>chmod 700 /usr/local/bin/postfixadmin/postfixadmin*</pre>
<p>postfixadmin 設定ファイル修正</p>
<pre>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.
<span style="color: #ff9900;">// $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'; ←追記</span></pre>
<p>sudo変更<br />
※ 終了するには esc の後に、大文字で ZZ</p>
<pre>visudo

#
# Disable "ssh hostname sudo ", because it will show the password in clear.
#         You have to run "ssh -t hostname sudo ".
#
<span style="color: #ff9900;">#Defaults    requiretty ←コメントアウト
</span>
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
<span style="color: #ff9900;">apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh ←追記</span></pre>
]]></content:encoded>
			<wfw:commentRss>http://perl.no-tubo.net/2009/10/14/%e3%83%a1%e3%83%bc%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90%e6%a7%8b%e7%af%89%ef%bc%88postfix-mysql-dovecot-postfixadmin%ef%bc%89-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
