====== postfix + mysql + Dovecot + PostfixAdmin ======
===== この文章は =====
表題組み合わせのサーバ設定記録。
OS:FreeBSD
**2017.07.07:Update**
* 最新のファイル構成などに変更
* DB上のパスワードはSHA512で暗号化するよう変更
==== 経緯 ====
ちと、理由があって認証をMySQLにする。
* バーチャルドメイン
* imap対応
* smtp Auth
* パスワード暗号化(SHA512)
バーチャルドメインに対応するためメール保存ユーザを作成する。
# pw groupadd -n vir_mail -g 110
# pw useradd -n vir_mail -u 110 -g vir_mail -m
===== インストールするもの =====
* postfix((mysqlをONにした。指定はてきとー))
* dovecot2((mysqlをON))
* mysql
* apache
* php5
* php5-imap((postfixadminでimap管理に必要))
* postfixadmin((mysqlをON))
* [[serverapps:apache:adminer|Adminer]] おまけ
===== DB作成 =====
AdminerからDBを作成しました。
*DB名:postfix
ついでにユーザも
* ユーザ名:postfix
* パスワード:ぱすわーど
* 権限:All privileges
CREATE DATABASE postfix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'postfix'@'%' IDENTIFIED BY 'pa$$w0rd12345678';
GRANT ALL PRIVILEGES ON postfix.* TO 'postfix'@'%';
FLUSH PRIVILEGES;
===== php.ini =====
# cat /usr/local/etc/php.ini
date.timezone = Asia/Tokyo
これがないと、postfixadminのバックアップがエラーになります。
===== SPFレコードの登録 =====
最近だとSPFレコードがないと大手のメールサーバ(gmailとか)はメールを受け取ってくれません。
設定については、[[serverapps:dns:bind:spf]]を参照してください
===== /usr/local/etc/postfix/main.cf =====
mydestination =
## Virtual
virtual_mailbox_base = /home/vir_mail
virtual_mailbox_domains = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_domains_maps.cf
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = mysql:/usr/local/etc/postfix/mysql_virtual_alias_maps.cf
#virtual_alias_domains = $virtual_alias_maps #デフォルト値
virtual_uid_maps = static:110
virtual_gid_maps = static:110
### SMTP Auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
# broken_sasl_auth_clients = yes
### VDA
# virtual_create_maildirsize = yes # unused parameter
virtual_mailbox_limit = 0
#virtual_mailbox_limit_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_quota_maps.cf # unused parameter
#virtual_mailbox_limit_override = yes # unused parameter
#virtual_mailbox_limit_inbox = no # unused parameter
#virtual_maildir_extended = yes # unused parameter
#virtual_maildir_suffix = Maildir/
#virtual_trash_count = yes
#virtual_trash_name = ".Trash"
#virtual_maildir_limit_message = "Sorry, maximum quota reached!"
#virtual_overquota_bounce = yes # unused parameter
## soft quota settings
#message_size_limit = 10240000 #default 10MB
#mailbox_size_limit = 51200000 #default 50MB
message_size_limit = 0
mailbox_size_limit = 0
今回はバーチャルのみで運用するので、mydestination は空にしておく。
==== 廃止されたパラメータ ====
* virtual_create_maildirsize
* virtual_overquota_bounce
* virtual_mailbox_limit_maps
* virtual_maildir_extended
* virtual_mailbox_limit_override
* virtual_mailbox_limit_inbox
===== /usr/local/etc/postfix/master.cf =====
Outbound Port25 Blocking (OP25B)に対応するため、Submissionポートを利用できるようにする
#submission inet n - n - - smtpd
↓
submission inet n - n - - smtpd
===== バーチャル関連ファイル =====
==== /usr/local/etc/postfix/mysql_virtual_alias_maps.cf ====
user = postfix
password = ********
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
==== /usr/local/etc/postfix/mysql_virtual_mailbox_domains_maps.cf ====
user = postfix
password = ********
hosts = localhost
dbname = postfix
table = domain
select_field = description
where_field = domain
==== /usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf ====
user = postfix
password = ********
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
===== postfixAdminのセットアップ =====
==== /usr/local/www/postfixadmin/config.local.phpを作成してここに設定する ====
# vi /usr/local/www/postfixadmin/config.local.php
**2017.07.07**:\\
* 変更されているので注意:
* $CONF['database_type']='mysql'; -> $CONF['database_type']='mysqli';
* オプションの「-s SHA512-CRYPT」を指定してるサイトもあるが、指定しなくてもOK
* $CONF['dovecotpw'] = "/usr/local/bin/doveadm pw";
**2024-02-26**:\\
* 暗号化形式は以下がdefault
* # $CONF['encrypt'] = 'php_crypt';
* default設定されてるので不要になりました
* $CONF['dovecotpw'] = "/usr/local/bin/doveadm pw";
* # メールボックスの格納形式。domain.tld/username に設定
* $CONF['domain_path'] = 'YES';
* $CONF['domain_in_mailbox'] = 'NO';
==== apache ====
Alias /postfixadmin/ "/usr/local/www/postfixadmin/"
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from xxx.yyy.zzz
==== 初回パスワードのハッシュ値を生成する ====
# php -r "echo password_hash('pa$$w0rd1234', PASSWORD_DEFAULT);"
$CONF['setup_password'] = '1234567ab890cxxxxxxxxxxx:yyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzz';
または、コマンドラインで以下のように生成することもできます。
echo -n "{salt}:{password}" | openssl sha1
(stdin)= {hash文字列}
以下のように記述します
$CONF['setup_password'] = '{salt}:{hash文字列}';
この設定の後、このページでPostfix Adminの管理者を作成します。
※パスワードには最低2文字の数字を含む必要があります。
==== postfixadminにアクセス ====
LoginできたらOK
==== setup.php を削除 ====
# rm /usr/local/www/postfixadmin/setup.php
※Ver 2.3以降削除の必要はなくなりました
==== Announcement ====
ドメイン管理とかユーザでLoginするとAnnouncementが表示されます。\\
ドメイン管理ならmotd.txt、ユーザはmotd-users.txtが表示されます。((ファイルはないけど特権管理者の場合はmotd-admin.txt))\\
邪魔なので表示されないようにします
# mv motd.txt motd.txt.org
# mv motd-users.txt motd-users.txt.org
2017.07.07:Announcementは廃止されている
===== Dovecot =====
==== /usr/local/docecot/dovecot.conf ====
最終行のあたりが以下のようになっていることを確認
!include conf.d/*.conf
!include_try local.conf
==== /usr/local/docecot/local.conf ====
protocols = pop3 imap
listen = *
==== 10-auth.conf ====
disable_plaintext_auth = no # ここをyesにするとsslが必須になります
auth_mechanisms = PLAIN LOGIN
#!include auth-system.conf.ext
!include auth-sql.conf.ext
==== 10-mail.conf ====
mail_location = maildir:/home/vir_mail/%d/%n
first_valid_uid = 110
first_valid_gid = 110
==== 10-master.conf ====
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
}
}
==== 10-ssl.conf ====
ssl = no
==== 20-imap.conf ====
protocol imap {
imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
mail_plugins = quota imap_quota
}
==== 20-pop3.conf ====
protocol pop3 {
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
mail_plugins = quota
}
==== 90-quota.conf ====
plugin {
quota = maildir:User quota
}
==== auth-sql.conf.ext ====
passdb {
driver = sql
args = /usr/local/etc/dovecot/dovecot-postfixadmin-mysql.conf
}
userdb {
driver = sql
args = /usr/local/etc/dovecot/dovecot-postfixadmin-mysql.conf
}
==== dovecot-postfixadmin-mysql.conf ====
driver = mysql
connect = host=/var/run/mysqld/mysqld.sock dbname=postfix user=postfix password=********
default_pass_scheme = PLAIN
password_query = SELECT password FROM mailbox WHERE username = '%u' AND active = 1
user_query = SELECT concat('/home/vir_mail/', maildir) AS home, 110 AS uid,\
110 AS gid FROM mailbox WHERE username = '%u' AND active = '1'
※postfixadminでは”mysqli”ですがここでは”mysql”なので注意
===== 参考 =====
[[http://satospo.sakura.ne.jp/blog_archives/tech/linux_server/postfixadmin.html|PostfixAdminのメモ]]\\
[[http://e-garakuta.net/techinfo/doku.php/linux/postfix-virtual|Postfix + Dovecot 2 + PostfixAdmin + MySQL]]\\
[[http://www.maruko2.com/mw/Postfix_%2B_MySQL_%2B_PostfixAdmin_%E3%81%A7%E3%83%90%E3%83%BC%E3%83%81%E3%83%A3%E3%83%AB%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%81%8B%E7%94%A8|Postfix + MySQL + PostfixAdmin でバーチャルドメイン運用]]\\
[[https://wiki2.dovecot.org/NFS|Dovecot NFS]]