【2014.1.13 修正】quotaの容量情報をIMAP経由で取得できるように、quota_imapプラグインのロード設定を追加しました。
【2013.10.7 修正】quota設定に誤りがあり、使用量を正しく算出できていなかったため修正しました。
Raspbian "wheezy" を使ってバーチャルホスト対応メールサーバを構築する方法。
ほとんどDebianなので他のDebian系でも同じようにできるはず。(未確認)
#aptitude install apache2-mpm-prefork php5 php5-cli phpmyadmin mysql-server mysql-client
#mysql_secure_installation
#cat /etc/passwd | grep vmail
→uidとgidを控える
#aptitude install postfix-mysql dovecot-pop3d dovecot-imapd dovecot-mysql sasl2-bin php5-imap
#vim /etc/dovecot/dovecot.conf
→以下を変更
#vim /etc/postfix/main.cf
→以下を変更
#aptitude install postfixadmin
#vim /etc/postfixadmin/config.inc.php
→以下を変更
$CONF['configured'] = true;
$CONF['default_language'] = 'ja';
$CONF['admin_email'] = '[email protected]';
$CONF['generate_password'] = 'YES';
$CONF['show_password'] = 'YES';
$CONF['page_size'] = '10';
$CONF['default_aliases'] = array();
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['maildir_name_hook'] = 'NO';
$CONF['aliases'] = '100';
$CONF['mailboxes'] = '100';
$CONF['maxquota'] = '1024';
$CONF['quota'] = 'YES';
$CONF['quota_multiplier'] = '1048576';
$CONF['transport'] = 'NO';
$CONF['vacation'] = 'NO';
$CONF['alias_control'] = 'YES';
$CONF['alias_control_admin'] = 'YES';
$CONF['special_alias_control'] = 'YES';
$CONF['alias_goto_limit'] = '0';
$CONF['alias_domain'] = 'NO';
$CONF['backup'] = 'NO';
$CONF['sendmail'] = 'NO';
$CONF['logging'] = 'YES';
$CONF['fetchmail'] = 'NO';
$CONF['show_header_text'] = 'NO';
$CONF['show_footer_text'] = 'NO';
$CONF['emailcheck_resolve_domain']='YES';
$CONF['show_status']='YES';
$CONF['show_status_key']='YES';
$CONF['show_undeliverable']='YES';
$CONF['show_undeliverable_exceptions']=array();
$CONF['show_popimap']='NO';
$CONF['show_custom_domains']=array();
$CONF['recipient_delimiter'] = "+";
$CONF['create_mailbox_subdirs_prefix']='';
$CONF['used_quotas'] = 'YES';
$CONF['used_quotas'] = 'NO';
$CONF['new_quota_table'] = 'YES';
http://IPアドレス/postfixadmin/setup.php へアクセスしてセットアップパスワードハッシュを作成
#vim /etc/postfixadmin/config.inc.php
→以下を変更
$CONF['setup_password'] = '作成したセットアップパスワードハッシュ';
再度 http://IPアドレス/postfixadmin/setup.php へアクセスして管理者アカウントを登録
#vim /etc/postfix/master.cf
→以下をコメント解除
submission inet n - - - - smtpd
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
smtps inet n - - - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
#vim /etc/postfix/main.cf
→以下を変更/追記
smtpd_banner = $myhostname ESMTP $mail_name
biff = no
append_dot_mydomain = no
readme_directory = no
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
myhostname = example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = $myhostname
mydestination =
relayhost =
mynetworks = 127.0.0.0/8
inet_interfaces = all
inet_protocols = ipv4
recipient_delimiter = +
home_mailbox = Maildir/
mailbox_size_limit = 0
message_size_limit = 20971520
proxy_read_maps =
$local_recipient_maps
$mydestination
$virtual_alias_maps
$virtual_alias_domains
$virtual_mailbox_maps
$virtual_mailbox_domains
$relay_recipient_maps
$relay_domains
$canonical_maps
$sender_canonical_maps
$recipient_canonical_maps
$relocated_maps
$transport_maps
$mynetworks
$sender_bcc_maps
$recipient_bcc_maps
$smtp_generic_maps
$lmtp_generic_maps
$virtual_mailbox_limit_maps
# SASL
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
# Virtual
local_transport = virtual
virtual_transport = virtual
virtual_minimum_uid = vmailのuid
virtual_uid_maps = static:vmailのuid
virtual_gid_maps = static:vmailのgid
virtual_mailbox_base = /home/vmail
virtual_mailbox_limit = 1073741824
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
#vim /etc/postfix/mysql_virtual_alias_maps.cf
→以下を記述
user = postfixadmin
password = パスワード(/etc/postfixadmin/dbconfig.inc.phpから確認)
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s' AND active='1'
#vim /etc/postfix/mysql_virtual_domains_maps.cf
→以下を記述
user = postfixadmin
password = パスワード
hosts = localhost
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain='%s' AND active='1'
#vim /etc/postfix/mysql_virtual_mailbox_limit_maps.cf
→以下を記述
user = postfixadmin
password = パスワード
hosts = localhost
dbname = postfixadmin
query = SELECT quota FROM mailbox WHERE username='%s' AND active='1'
#vim /etc/postfix/mysql_virtual_mailbox_maps.cf
→以下を記述
user = postfixadmin
password = パスワード
hosts = localhost
dbname = postfixadmin
query = SELECT maildir FROM mailbox WHERE username='%s' AND active='1'
#chgrp postfix /etc/poxtfix/mysql*
#chmod 640 /etc/postfix/mysql*
#vim /etc/postfix/sasl/smtpd.conf
→以下を記述
pwcheck_method: saslauthd
saslauthd_path: /var/run/saslauthd/mux
mech_list: cram-md5 digest-md5 plain login
log_level: 3
#vim /etc/default/saslauthd
→以下を変更
START=yes
MECHANISMS="rimap"
MECH_OPTIONS="localhost"
OPTIONS="-r -c -m /var/spool/postfix/var/run/saslauthd"
10. PostfixからSASLを利用できるように調整
#service saslauthd restart
#rmdir /var/run/saslauthd
#ln -s /var/spool/postfix/var/run/saslauthd /var/run/saslauthd
#vim /etc/dovecot/dovecot.conf
→以下を変更
dict {
quotadict = mysql:/etc/dovecot/dovecot-dict-quota.conf.ext
}
#vim /etc/dovecot/dovecot-dict-quota.conf.ext
→以下を記述
connect = host=localhost dbname=postfixadmin user=postfixadmin password=パスワード
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
}
#vim /etc/dovecot/dovecot-sql.conf.ext
→以下を変更
connect = host=localhost dbname=postfixadmin user=postfixadmin password=パスワード
default_pass_scheme = MD5-CRYPT
password_query = SELECT username AS user, password FROM mailbox WHERE username = '%u' AND active = '1'
user_query = SELECT CONCAT('/home/vmail/', maildir) AS home, 1002 AS uid, 1003 AS gid, CONCAT('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u' AND active = '1'
#vim /etc/dovecot/conf.d/10-auth.conf
→以下を変更
disable_plaintext_auth = no
auth_mechanisms = plain login
!include auth-sql.conf.ext
(他のauth-*をコメントアウト)
#vim /etc/dovecot/conf.d/10-mail.conf
→以下を変更
mail_location = maildir:/home/vmail/%d/%n
first_valid_uid = vmailのuid
first_valid_gid = vmailのgid
#vim /etc/dovecot/conf.d/10-master.conf
→以下を変更
service dict {
unix_listener dict {
mode = 0600
user = vmail
group = vmail
}
}
#vim /etc/dovecot/conf.d/20-imap.conf
→以下を変更
mail_plugins = $mail_plugins imap_quota
#vim /etc/dovecot/conf.d/20-pop3.conf
→以下を変更
mail_plugins = $mail_plugins
#vim /etc/dovecot/conf.d/90-quota.conf
→以下を変更
plugin {
quota = dict:user::proxy::quotadict
quota = maildir:User quota
}
#vim /etc/dovecot/conf.d/auth-sql.conf.ext
→以下を変更
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
#chgrp dovecot /etc/dovecot/*.ext
#chmod 640 /etc/dovecot/*.ext
#service saslauthd restart
14. 削除したアカウントのMaildirを掃除するスクリプトを設置
#gzip -d /usr/share/doc/postfixadmin/examples/cleanupdirs.pl.gz
#vim /usr/share/doc/postfixadmin/examples/cleanupdirs.pl
→以下を変更
our $root_path = "/home/vmail";
our $logfile = "/var/log/removed_maildirs.log";
our $db_hostname = "localhost";
our $db_port = "3306";
our $db_database = "postfixadmin";
our $db_username = "postfixadmin";
our $db_password = "パスワード";
#chmod 700 /usr/share/doc/postfixadmin/examples/cleanupdirs.pl
#/usr/share/doc/postfixadmin/examples/cleanupdirs.pl
→削除したアカウントのMaildirがリストアップされることを確認
#/usr/share/doc/postfixadmin/examples/cleanupdirs.pl --delete
→削除したアカウントのMaildirが削除されることを確認
#vim /etc/cron.daily/cleanupdirs
→以下を記述
#!/bin/sh
/usr/share/doc/postfixadmin/examples/cleanupdirs.pl --delete
#chmod +x /etc/cron.daily/cleanupdirs