CentOS6 PostfixAdmin

スポンサーリンク

■PostfixAdminについて


postfixを設定する場合、技術者のかたであればコマンドベースの操作にも慣れており問題ないと思いますが特にLDAPなどを使わないローカルのバーチャルドメイン設定な どは非常に面倒な作業であり日常の運用を考えると技術に長けているかたでも避けて通りたくなるところです。

そこでpostfixにはコマンドで操作するのではなくブラウザからGUIで操作できるツールが提供されていま す。その名もpostfixadmin。バックエンドにMySQL or PostgreSQLを利用しバーチャルドメインにも対応しているフリーながら非常に高機能なツールです。最初のインストールは少々面倒ですが一度インストールすれば後は素人の方でも十分運用できるツールです。このページはRHEL6.0にpostfixadminをインストールした際のメモ書きです。

デフォルトのPostfixはMaildirのQuotaには対応しておらずパッチが必要となりますのでここから始めます。quotaを有効にすると各仮想ユーザのホームディレクトリにmaildirsizeというファイルがアカウント作成時に自動的に作成されます。中身は以下のような感じです。 

# more maildirsize
2147483647S
641 1


最初の行が設定されたquotaの値( バイト )であり、2行目が現在のメールのバイト数と通数がそれぞれ表示されています。これを実現するため以下の作業を行います。まずはソース版postfixのダウンロードです。

# wget http://vault.centos.org/6.2/os/Source/SPackages/postfix-2.6.6-2.2.el6_1.src.rpm
# rpm -ivh postfix-2.6.6-2.2.el6_1.src.rpm


PostfixをQuotaに対応させるVDAパッチを以下のサイトからダウンロードし適用します。Postfixが2.6.6なのでパッチもバージョンを合わせようと思いましたがなかったので2.6.5にしました。 

# wget "http://vda.sourceforge.net/VDA/postfix-2.6.5-vda-ng.patch.gz"
# gunzip postfix-2.6.5-vda-ng.patch.gz
# cp postfix-2.6.5-vda-ng.patch ~/rpmbuild/SOURCES/postfix-2.6.5-vda.patch


次にファイルを編集します。

# vi ~/rpmbuild/SPECS/postfix.spec

# Patches

Patch1: postfix-2.6.1-config.patch
Patch2: postfix-2.6.1-files.patch
Patch3: postfix-alternatives.patch
Patch8: postfix-large-fs.patch
Patch9: pflogsumm-1.1.1-datecalc.patch
Patch10: postfix-2.6.6-CVE-2011-0411.patch
Patch11: postfix-2.6.6-CVE-2011-1720.patch
Patch12: postfix-2.6.5-vda.patch

<省略>

%patch10 -p1 -b .CVE-2011-0411
%patch11 -p1 -b .CVE-2011-1720
%patch12 -p1 -b .vda

rpmのビルドに必要なものをインストールした後に、ビルドしてPostfixをインストールします。

# yum install -y pcre-devel openldap-devel cyrus-sasl-devel mysql-devel
# rpmbuild -ba ~/rpmbuild/SPECS/postfix.spec
# rpm -ivh ~/rpmbuild/RPMS/i686/postfix-2.6.6-2.2.el6.i686.rpm


これで核となるPostfix本体のインストールは完了ですが、後の運用でyumによりpostfixがアップデートされないよう以下の設定をしておきます。

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


次にその他の必要なツールをyumからインストールします。なおPOP/IMAPにはDovecot、DBにはMySQLを利用します。

# yum install dovecot dovecot-mysql
# yum install cyrus-sasl cyrus-sasl-plain
# yum install php php-imap php-mbstring php-mysql mysql-server


/etc/php.initファイルに以下の追記をしておきます。

# vi /etc/php.ini
date.timezone = 'Asia/Tokyo'


さて、postfixの設定を行います。ユーザ管理はMySQLで行うため、それらと連動する設定が必要となります。/etc/postfix/main.cfに以下を追記します。

# vi /etc/postfix/main.cf

# 基本設定
myhostname = mail.unix-power.net
mydomain = unix-power.net
myorigin = $myhostname
#inet_interfaces = localhost
inet_interfaces = all
inet_protocols = ipv4
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 192.168.0.0/16, 127.0.0.1
home_mailbox = Maildir/
transport_maps = hash:/etc/postfix/transport

# SMTP認証の設定
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_application_name = smtpd
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_recipient_restrictions = permit_mynetworks
                               permit_sasl_authenticated
                               reject_unauth_destination

# MySQLとの連携設定
virtual_transport = virtual
virtual_alias_maps = mysql:/etc/postfix/mysql_alias.cf
virtual_mailbox_base = /var/spool/virtual
virtual_mailbox_domains = mysql:/etc/postfix/mysql_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_mailbox.cf
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000

# Quotaの設定
virtual_create_maildirsize = yes
virtual_maildir_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_quota.cf
virtual_mailbox_limit_override = yes
virtual_overquota_bounce = yes
virtual_trash_name = .Trash

mysql -alias.cfファイルは仮想ユーザから実ユーザへのマッピング定義であるのに対し、mysql -mailbox.cfファイルは仮想ユーザと実際のメールの配送先(ディレクトリ)を定義しています。mysql_domains.cfはバーチャルドメインを定義してい ます。

バーチャルドメインを管理するユーザとグループを上記で指定したuid/gidの10000で作成します。

# groupadd -g 10000 mailadmin
# useradd -u 10000 -g mailadmin -d /var/spool/virtual mailadmin


上記3つのファイルをそれぞれ作成してゆきます。

# vi /etc/postfix/mysql_alias.cf

user = postfix
password = password
hosts = 127.0.0.1
dbname = postfix
table = alias
select_field = goto
where_field = address
# vi /etc/postfix/mysql_domains.cf

user = postfix
password = password
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = domain
where_field = domain
# vi /etc/postfix/mysql_mailbox.cf

user = postfix
password = password
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
# vi /etc/postfix/mysql_quota.cf

user = postfix
password = password
hosts = 127.0.0.1
dbname = postfix
query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'


サブミッションポート( TCP/587 )をオープンにしておき、これを経由する際はSMTP Authを必須とします。

# vi /etc/postfix/master.cf

submission inet n       -       n       -       -       smtpd
#  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject


続いてMySQLに対して上記で指定したDBやユーザを作成しておきます。

# /etc/rc.d/init.d/mysqld start
# mysqladmin -u root password 'password'
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 119601
Server version: 5.1.66 Source distribution

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE DATABASE postfix;
Query OK, 1 row affected (0.00 sec)

mysql> CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.12 sec)

mysql> GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost';
Query OK, 0 rows affected (0.01 sec)

mysql> quit
Bye


次にSMTP認証用の設定変更を行います。

# vi /etc/sysconfig/saslauthd

MECH=rimap
FLAGS="-r -O localhost"


設定変更を有効にするためCryrusとPostfixを再起動しておきます。

# /etc/rc.d/init.d/postfix restart
postfix を停止中:                                          [  OK  ]
postfix を起動中:                                          [  OK  ]

# /etc/rc.d/init.d/saslauthd restart
saslauthd を停止中:                                        [  OK  ]
saslauthd を起動中:                                        [  OK  ]


■PostfixAdminのインストール


postfixadmin本体をインストールするのですが不便なことにyumでは提供されておりません。従いましてソースファイルを以下のサイトよりダウンロードします。2013/1で最新は2.3.6です。

http://sourceforge.net/projects/postfixadmin/

tar.gzで固められており、これを解凍してそのまま配置すればOKです。

# tar xvzf postfixadmin-2.3.6.tar.gz
# mv postfixadmin-2.3.6 /var/www/html/postfixadmin


設定ファイルはconfig.inc.phpとなりますので、これを編集します。以下では編集箇所のみ記載致します。

# vi /var/www/html/postfixadmin/config.inc.php

$CONF['configured'] = true;
$CONF['postfix_admin_url'] = 'http://www.unix-power.net/postfixadmin/';
$CONF['default_language'] = 'ja';

$CONF['database_type'] = 'mysqli';
$CONF['database_name'] = 'postfix';

$CONF['admin_email'] = 'postmaster@unix-power.net';

#$CONF['encrypt'] = 'md5crypt';
$CONF['encrypt'] = 'cleartext';

$CONF['dovecotpw'] = "/usr/sbin/doveadm pw";

$CONF['show_password'] = 'YES';

$CONF['default_aliases'] = array (
    'abuse' => 'abuse@unix-power.net',
    'hostmaster' => 'hostmaster@unix-power.net',
    'postmaster' => 'postmaster@unix-power.net',
    'webmaster' => 'webmaster@unix-power.net'
);

$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';

$CONF['aliases'] = '0';
$CONF['mailboxes'] = '0';
$CONF['maxquota'] = '0';

$CONF['quota'] = 'YES';

$CONF['show_header_text'] = 'YES';
$CONF['user_footer_link'] = "http://www.unix-power.net";
$CONF['show_footer_text'] = 'YES';
$CONF['footer_text'] = 'Return to Unix Power';
$CONF['footer_link'] = 'http://www.unix-power.net';

$CONF['emailcheck_resolve_domain']='NO';

// $CONF['mailbox_postcreation_script']=\
   'sudo -u mailadmin /var/www/html/postfixadmin/ADDITIONS/postfixadmin-mailbox-postcreation.sh';
// $CONF['mailbox_postdeletion_script']=\
   'sudo -u mailadmin /var/www/html/postfixadmin/ADDITIONS/postfixadmin-mailbox-postdeletion.sh';
// $CONF['domain_postdeletion_script']=\
   'sudo -u mailadmin /var/www/html/postfixadmin/ADDITIONS/postfixadmin-domain-postdeletion.sh';

$CONF['create_mailbox_subdirs_prefix']='';

$CONF['used_quotas'] = 'YES';
$CONF['new_quota_table'] = 'YES';

後はブラウザから画面にアクセスしてセットアップを行います。アクセスURLはhttp://www.unix-power.net/postfixadmin/setup.phpとなります。アクセスすると以下の画面が表示されます。



正常に設定が完了していれば上記のようになります。画面最下部のChange setup passwordのところにセットアップのためのパスワードを2回入力します。


入力すると上記画面になります。入力したパスワードを元にハッシュキーが生成されていますのでこれをconfig.inc.phpの$ CONF[‘setup_password’]に設定します。

# vi /var/www/html/postfixadmin/config.inc.php

$CONF['setup_password'] = '197929b9029e0c8a04dd678da86d8336:995f553da6a201ec47ebf8ce2ab1d2aeed4fc35b';


そして上記画面から特権管理者を追加します。setup passwordに先程入力したもの(ハッシュ化される以前のもの)。ドメイン管理者に管理者のメールアドレス、パスワードをそれぞれ入力して管理者を追加します。



上記で管理者が追加されました。セットアップはこれで完了です。後はpostfixadmin/index.phpからアクセスを行います。



先程作成した特権管理者のメールアドレスとパスワードでログインを行います。ログインに成功すると次の画面が表示されます。ここからドメインを作成したり、メールアドレスの作成など行うことができます。メールアドレスを作成すると自動的に作成されたアドレスにウェルカムメールが届きます。

 


■Dovecotの設定

Dovecotの基本設定とMySQLとの連携設定を行います。

# vi /etc/dovecot/dovecot.conf

#protocols = imap pop3 lmtp
protocols = imap pop3
#listen = *, ::
listen = *
# vi /etc/dovecot/conf.d/10-ssl.conf

ssl = no
# vi /etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth = no auth_mechanisms = plain login !include auth-sql.conf.ext


上の設定は/etc/dovecot/conf.d/auth-sql.conf.extを読み込むものですが、このファイルは編集の必要はありません。このままでOKですが、念のため中身を以下に記載します。

# cat /etc/dovecot/conf.d/auth-sql.conf.ext

# Authentication for SQL users. Included from auth.conf.
#
# <doc/wiki/AuthDatabase.SQL.txt>

passdb {
  driver = sql

  # Path for SQL configuration file, see example-config/dovecot-sql.conf.ext
  args = /etc/dovecot/dovecot-sql.conf.ext
}

# "prefetch" user database means that the passdb already provided the
# needed information and there's no need to do a separate userdb lookup.
# <doc/wiki/UserDatabase.Prefetch.txt>
#userdb {
#  driver = prefetch
#}

userdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}

# If you don't have any user-specific settings, you can avoid the user_query
# by using userdb static instead of userdb sql, for example:
# <doc/wiki/UserDatabase.Static.txt>
#userdb {
#  driver = static
#  args = uid=10000 gid=10000 home=/var/spool/virtual/%d/%u
#}


このファイルでメールの溜まる位置などを示してあげれば良いかと思い最下部の部分をコメントアウトしてみましたが、正常に位置を知らせることができませんでした。そこで10-mail.confファイルを編集します。

# vi /etc/dovecot/conf.d/10-mail.conf

#mail_location = maildir:~/Maildir
mail_location = maildir:/var/spool/virtual/%d/%n
first_valid_uid = 10000
first_valid_gid = 10000
mail_plugins = quota


次にSMTP-Authに対応すべく10-master.confを編集します。

# vi /etc/dovecot/conf.d/10-master.conf

  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
  }

/etc/dovecot/dovectot-sql.conf.extファイルを読み込むようになっていますので、これを作成します。

# vi /etc/dovecot/dovecot-sql.conf.ext

driver = mysql
default_pass_scheme = PLAIN
connect = dbname=postfix user=postfix host=/var/lib/mysql/mysql.sock password=password
password_query = SELECT password FROM mailbox WHERE username = '%u' AND active = '1'
user_query = SELECT concat('/var/spool/virtual/', maildir) as home, 10000 as uid, 10000 \
as gid FROM mailbox WHERE username = '%u' AND active = '1'


続いて以下のファイルをそれぞれ編集していきます

# vi /etc/dovecot/conf.d/20-imap.conf

mail_plugins = $mail_plugins imap_quota
# vi /etc/dovecot/conf.d/20-pop3.conf

mail_plugins = $mail_plugins
# vi /etc/dovecot/conf.d/90-quota.conf

plugin {
  #quota = dirsize:User quota
  quota = maildir:User quota
  #quota = dict:User quota::proxy::quota
  #quota = fs:User quota
}


デフォルト状態からどのように編集したか以下のコマンドで確認可能です。

# doveconf -n
# 2.0.9: /etc/dovecot/dovecot.conf
# OS: Linux 2.6.32-279.19.1.el6.i686 i686 CentOS release 6.3 (Final) ext4
auth_mechanisms = plain login digest-md5 cram-md5
disable_plaintext_auth = no
first_valid_gid = 10000
first_valid_uid = 10000
listen = *
mail_location = maildir:/var/spool/virtual/%d/%n
mail_plugins = quota
mbox_write_locks = fcntl
passdb {
  driver = pam
}
passdb {
  args = /etc/dovecot/dovecot-sql.conf.ext
  driver = sql
}
plugin {
  quota = maildir:User quota
}
protocols = imap pop3
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
  }
}
ssl = no
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
userdb {
  driver = passwd
}
userdb {
  args = /etc/dovecot/dovecot-sql.conf.ext
  driver = sql
}
protocol imap {
  mail_plugins = quota imap_quota
}
protocol pop3 {
  mail_plugins = quota
}


最後にDovecotを再起動します。

# /etc/rc.d/init.d/dovecot restart
Dovecot Imap を停止中:                                     [  OK  ]
Dovecot Imap を起動中:                                     [  OK  ]

これにて設定は完了となります。管理画面からドメイン/アドレスの追加を行いメールの送受信の確認を行なってみてください。


■自動応答 ( Vacation ) 設定


PostfixAdminには自動応答の機能が標準で装備されていますが、無効にされています。必要な準備を行なってこれを有効にし活用できるよう設定します。まず事前に必要なものをyumでインストールします。また、yumではインストール不可のものもありますので、それはCPANからインストールします。

# yum install perl-DBD-MySQL 
# yum install perl-Mail-Sender perl-Email-Valid perl-MIME-Charset perl-Log-Log4perl perl-Log-Dispatch
# perl -MCPAN -e shell

cpan[1]> install Encode::EUCJPASCII Encode::JIS2K MIME::EncWords

PostfixAdminのコンフィグファイルでvacationを有効にします。 

# vi /var/www/html/postfixadmin/config.inc.php

$CONF['vacation'] = 'YES';


続いてpostfixの設定を修正します。

# vi /etc/postfix/master.cf

# Vacation mail
vacation    unix  -       n       n       -       -       pipe
  flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl -f ${sender} -- ${recipient}


続いてvacationの設定を行います。

# useradd -r -d /var/spool/vacation -s /sbin/nologin -c "Virtual vacation" vacation 
# mkdir /var/spool/vacation 
# chmod 770 /var/spool/vacation 
# cp /var/www/html/postfixadmin/VIRTUAL_VACATION/vacation.pl /var/spool/vacation/ 
# echo "autoreply.yourdomain.com	vacation:" > /etc/postfix/transport 
# postmap /etc/postfix/transport 
# chown -R vacation:vacation /var/spool/vacation 
# echo "127.0.0.1 autoreply.yourdomain.com" >> /etc/hosts 


vacation本体の設定を行います。

# vi /var/spool/vacation/vacation.pl

#our $db_type = 'Pg';
our $db_type = 'mysql';

# connection details
our $db_username = 'postfix';
our $db_password = 'password';
our $db_name     = 'postfix';


ここまで設定を終えるとPostfixAdminの管理画面から自動応答の設定が可能となります。実際に設定して動作確認を行なってみてください。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする