■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の管理画面から自動応答の設定が可能となります。実際に設定して動作確認を行なってみてください。