[CentOS6] Postfixによるメールサーバ構築 その4 (Dovecotの設定)

Dovecotのインストールと設定を行います。

yum install dovecot dovecot-mysql
yum install cyrus-sasl-plain cyrus-sasl-md5
cd /etc/dovecot/
vi dovecot.conf
----------------------------------------------------
dict {
#quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
#expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext
quotadict = mysql:/etc/dovecot/dovecot-dict-sql.conf
}
mail_plugins = quota
----------------------------------------------------
vi dovecot-dict-sql.conf
----------------------------------------------------
connect = dbname=postfix user=postfix host=/var/lib/mysql/mysql.sock password=skpMrLvw9fiX
map {
pattern = priv/quota/storage
table = quota2
username_field = username
value_field = bytes
}
map {
pattern = priv/quota/messages
table = quota2
username_field = username
value_field = messages
}
----------------------------------------------------
cd /etc/dovecot/conf.d
vi 20-imap.conf
----------------------------------------------------
mail_plugins = $mail_plugins imap_quota
----------------------------------------------------
vi 90-quota.conf
----------------------------------------------------
plugin {
#quota_rule = *:storage=1G
#quota_rule2 = Trash:storage=+100M
quota = dict:user::proxy::quotadict
quota_rule = *:storage=10M:messages=1000
quota_rule2 = Trash:storage=+100M
}
plugin {
quota_warning = storage=95%% quota-warning 95 %u
quota_warning2 = storage=80%% quota-warning 80 %u
}
----------------------------------------------------
vi 10-auth.conf
----------------------------------
#disable_plaintext_auth = yes
disable_plaintext_auth = no
#auth_mechanisms = plain
auth_mechanisms = plain login cram-md5
#!include auth-system.conf.ext
!include auth-sql.conf.ext
----------------------------------
vi 10-logging.conf
--------------------------------------------
#auth_verbose = no
auth_verbose = yes
--------------------------------------------
vi 10-mail.conf
--------------------------------------------
#mail_location =
mail_location = maildir:/mail/%d/%u
#first_valid_gid = 1
#last_valid_gid = 0
first_valid_uid = 10000
first_valid_gid = 10000
--------------------------------------------
vi 10-master.conf
--------------------------------------------
service lmtp {
unix_listener lmtp {
#mode = 0666
}
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0600
user = postfix
}
}
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
}
unix_listener dict {
#mode = 0600
#user =
#group =
mode = 0600
user = vuser
group = vuser
}
--------------------------------------------
vi /etc/dovecot/dovecot-sql.conf.ext
--------------------------------------------
driver = mysql
default_pass_scheme = CRAM-MD5
connect = dbname=postfix user=postfix host=/var/lib/mysql/mysql.sock password=skpMrLvw9fiX
password_query = SELECT password, 10000 AS userdb_uid, 10000 AS userdb_gid, CONCAT('*:bytes=', CAST(mailbox.quota AS CHAR)) AS userdb_quota_rule FROM mailbox, domain WHERE username = '%u' AND mailbox.domain = domain.domain AND mailbox.active = '1' AND domain.active = '1'
user_query = SELECT concat('/mail/', maildir) AS home, 10000 AS uid, 10000 AS gid, CONCAT('*:bytes=', CAST(mailbox.quota AS CHAR)) AS quota_rule FROM mailbox, domain WHERE username = '%u' AND mailbox.domain = domain.domain AND mailbox.active = '1' AND domain.active = '1'
iterate_query = SELECT username FROM mailbox
--------------------------------------------

[CentOS6] Postfixによるメールサーバ構築 その3 (Postfixの設定)

バーチャルドメインで受けたメールを処理するユーザの設定と、Postfixの設定を行います。
MySQLの認証IDパスワードはpostfixskpMrLvw9fiXとしています。適宜変更してください。

準備

Postfixのバーチャルドメインの運用に使用するユーザvuserおよびグループcodeを設定し。メールの保存ディレクトリ/mailを作成します。

groupadd -g 10000 vuser
useradd -g vuser -u 10000 vuser
mkdir /mail
chown vuser:vuser /mail
chmod 771 /mail

MySQL関連設定ファイルの作成

PostfixのMySQLによるユーザ情報を使用する設定ファイルを作成します。

cd /etc/postfix/
cat <<EOF > mysql_virtual_alias_maps.cf
user = postfix
password = skpMrLvw9fiX
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
EOF
cat <<EOF > mysql_virtual_domains_maps.cf
user = postfix
password = skpMrLvw9fiX
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and active = '1'
EOF
cat <<EOF > mysql_virtual_mailbox_maps.cf
user = postfix
password = skpMrLvw9fiX
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
EOF
cat <<EOF > mysql_virtual_mailbox_limit_maps.cf
user = postfix
password = skpMrLvw9fiX
hosts = localhost
dbname = postfix
table = mailbox
select_field = quota
where_field = username
EOF
chmod 640 mysql_virtual_*

Postfixの基本設定

Postfixの基本設定をmain.cfで行います。

cd /etc/postfix/
vi main.cf
--------------------------------------------
#myorigin = $mydomain
myorigin = $myhostname
#inet_interfaces = localhost
inet_interfaces = all
mydestination = $myorigin
#home_mailbox = Maildir/
home_mailbox = Maildir/
#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
smtpd_banner = $myhostname ESMTP unknown
local_transport = local
virtual_transport = virtual
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_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_overquota_bounce = yes
virtual_mailbox_limit_inbox = no
virtual_trash_count = no
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
--------------------------------------------

サブミッションポートの設定

サブミッションポート587番ポートを開く設定をmaster.cfに記述します。
submissionの行のコメントを外すだけでOKです。

vi /etc/postfix/master.cf
-------------------------------------------------------------------------------
smtp      inet  n       -       n       -       -       smtpd
submission inet n       -       n       -       -       smtpd
-------------------------------------------------------------------------------

[CentOS6] Postfixによるメールサーバ構築 その2 (MySQLの設定とpostfixadminのインストール)

  • URL: http:/www.example.com/postfixadmin/
  • パスワード保存形式: dovecot CRAM-MD5形式

準備

パスワードの保存にdovecotのCRAM-MD5形式を採用しているため、postfixadminでのパスワード登録や認証にdoveadmコマンドが必要となります。そのため事前にdovecotをインストールしておきます。

yum install dovecot

MySQLの設定

Postfix、Dovecotで使用するドメイン情報、ユーザ情報、認証情報を保存するデータベースをMySQLで設定します。

事前にMySQLをインストールしておく必要があります。記事「MySQL phpMyAdmin インストール」を参考にしてインストールしてください。

  • ユーザ名: postfix
  • データベース名: postfix
  • パスワード: skpMrLvw9fiX
mysql -u root -p
----------------------------------------------------
SELECT host,user,password FROM mysql.user;
DELETE FROM mysql.user WHERE user="";
SELECT host,user,password FROM mysql.user;
CREATE DATABASE postfix;
CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'skpMrLvw9fiX';
GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost';
exit
----------------------------------------------------

postfixadminのインストール

postfixadmin 2.3.6をダウンロードして/vaw/wwwへ設置します。

cd /usr/local/src/
wget http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.3.6/postfixadmin-2.3.6.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fpostfixadmin%2F&ts=1372249044&use_mirror=jaist
tar zxvf postfixadmin-2.3.6.tar.gz
mv postfixadmin-2.3.6/ /var/www/postfixadmin

config.inc.phpを編集してpostfixadminの初期設定を行います。

cd /var/www/postfixadmin
vi config.inc.php
----------------------------------------------------
//$CONF['configured'] = false;
$CONF['configured'] = true;
//$CONF['postfix_admin_url'] = '';
$CONF['postfix_admin_url'] = '/postfixadmin/';
//$CONF['default_language'] = 'en';
$CONF['default_language'] = 'ja';
//$CONF['database_type'] = 'mysql';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
//$CONF['database_password'] = 'postfixadmin';
$CONF['database_password'] = 'skpMrLvw9fiX';
$CONF['database_name'] = 'postfix';
//$CONF['encrypt'] = 'md5crypt';
$CONF['encrypt'] = 'dovecot:CRAM-MD5';
//$CONF['dovecotpw'] = "/usr/sbin/dovecotpw";
$CONF['dovecotpw'] = "/usr/bin/doveadm pw";
//$CONF['page_size'] = '10';
$CONF['page_size'] = '50';
//$CONF['domain_path'] = 'NO';
$CONF['domain_path'] = 'YES';
// Specify your default values below. Quota in MB.
$CONF['aliases'] = '10';
$CONF['mailboxes'] = '10';
//$CONF['maxquota'] = '10';
$CONF['maxquota'] = '200';
//$CONF['quota'] = 'NO';
$CONF['quota'] = 'YES';
//$CONF['vacation_control'] ='YES';
$CONF['vacation_control'] ='NO';
//$CONF['vacation_control_admin'] = 'YES';
$CONF['vacation_control_admin'] = 'NO';
//$CONF['alias_control'] = 'NO';
$CONF['alias_control'] = 'YES';
//$CONF['alias_control_admin'] = 'NO';
$CONF['alias_control_admin'] = 'YES';
//$CONF['alias_domain'] = 'YES';
$CONF['alias_domain'] = 'NO';
//$CONF['backup'] = 'YES';
$CONF['backup'] = 'NO';
//$CONF['sendmail'] = 'YES';
$CONF['sendmail'] = 'NO';
//$CONF['fetchmail'] = 'YES';
$CONF['fetchmail'] = 'NO';
//$CONF['user_footer_link'] = "http://change-this-to-your.domain.tld/main";
$CONF['user_footer_link'] = "/postfixadmin/";
//$CONF['show_footer_text'] = 'YES';
$CONF['show_footer_text'] = 'NO';
//$CONF['emailcheck_resolve_domain']='YES';
$CONF['emailcheck_resolve_domain']='NO';
//$CONF['used_quotas'] = 'NO';
$CONF['used_quotas'] = 'YES';
//$CONF['new_quota_table'] = 'NO';
$CONF['new_quota_table'] = 'YES';
----------------------------------------------------

Apacheの設定を行いpostfixadminへアクセスできるようにします。

vi /etc/httpd/conf.d/postfixadmin.conf
----------------------------------------------------
Alias /postfixadmin "/var/www/postfixadmin"
<Directory "/var/www/postfixadmin">
Order allow,deny
Allow from all
</Directory>
----------------------------------------------------
apachectl -t
apachectl restart

セットアップパスワードの登録

phpmyadmin セットアップ

データベース等の情報が正しく設定されていれば、http:/www.example.com/postfixadmin/setup.phpへアクセスするとデータベースのセットアップが始まります。

postfixadmin セットアップパスワード

セットアップパスワードを入力しボタンを押すことでパスワードハッシュが生成されます。表示されたパスワードハッシュをconfig.inc.phpへコピー&ペーストで追記します。以降、setup.phpを使用するにはセットアップパスワードが必要となります。

vi config.inc.php
----------------------------------------------------
//$CONF['setup_password'] = 'changeme';
$CONF['setup_password'] = '367b10879c33b7555216f.....略...6df5e61357ae13fe0f8f4e133ec';
----------------------------------------------------

管理者の登録

postfixadmin 管理者登録

再度、http:/www.example.com/postfixadmin/setup.phpへアクセスし、今度は管理者の登録を行います。登録の際には先ほど設定したセットアップパスワードも入力する必要があります。

管理者でのログイン確認

postfixadmin 管理者ログイン

登録した管理者でログイン画面(http:/www.example.com/postfixadmin/)へアクセスし、管理者正しくログインできるか確認します。この管理者でドメインやメールアカウントの登録ができるようになります。

ちなみに、一般ユーザはhttp:/www.example.com/postfixadmin/postfixadmin/users/からログインできます。

[CentOS6] Postfixによるメールサーバ構築 その1 (PostfixをSRPMからリビルド)

PostfixにVDAパッチを適用するためSRPMをダウンロードしてリビルドを行う。VDAパッチによりPostfixが容量制限(quota)を利用できるようになる。

Postfix VDA

リビルドに必要なパッケージをyumでインストールする。

yum -y install gcc rpm-build db4-devel pkgconfig zlib-devel openldap-devel cyrus-sasl-devel pcre-devel mysql-devel openssl-devel

SRPMをインストールしVDAパッチを適用する。ここではrootで作業していることを想定している。SRPMをインストールすると$HOME/rpmbuid/以下にファイルが展開される。CentOS6.3で採用されているPostfix 2.6.6に対応するVDAパッチがないが、Postfix 2.6.5用のVDAパッチで対応できる。

wget http://vault.centos.org/6.3/os/Source/SPackages/postfix-2.6.6-2.2.el6_1.src.rpm
rpm -ihv postfix-2.6.6-2.2.el6_1.src.rpm
cd /root/rpmbuild/SOURCES/
wget http://vda.sourceforge.net/VDA/postfix-2.6.5-vda-ng.patch.gz
wget http://vda.sourceforge.net/VDA/postfix-2.6.5-vda-ng-bigquota.patch.gz
gunzip postfix-2.6.5-vda-ng.patch.gz
gunzip postfix-2.6.5-vda-ng-bigquota.patch.gz
cd ../SPECS/
cp postfix.spec postfix.spec.org
vi postfix.spec
-----------------
Release: 2.2_VDA%{?dist}
Epoch: 3
Patch11: postfix-2.6.6-CVE-2011-1720.patch
Patch12: postfix-2.6.5-vda-ng.patch
Patch13: postfix-2.6.5-vda-ng-bigquota.patch
%patch12 -p1 -b .vda-ng
%patch13 -p1 -b .vda-ng-bigquota
-----------------

SRPMをリビルドしてRPMファイルを生成する。rpmコマンドでVDAパッチが適用されたPostfixをインストールする。

rpmbuild -ba postfix.spec
rpm -Uhv ../RPMS/x86_64/postfix-2.6.6-2.2.el6.x86_64.rpm

サーバ起動時にPostfixが起動するようにchkconfigで設定する

chkconfig postfix on
chkconfig --list postfix
----------------------------------------------------
postfix        	0:off	1:off	2:on	3:on	4:on	5:on	6:off
----------------------------------------------------

yumでPostfixが自動にアップグレードされないようにyum.confに記述しておく。

vi /etc/yum.conf
----------------------------------------------------
exclude=postfix*
----------------------------------------------------

参考記事: postfix with VDA patch [がらくたネット]