====== 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]]