ユーザ用ツール

サイト用ツール


serverapps:postfix:postfix-mysql-dovecot

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

-両方とも前のリビジョン前のリビジョン
次のリビジョン
-serverapps:postfix:postfix-mysql-dovecot [2017/07/11 04:30]
– [/usr/local/www/postfixadmin/config.local.phpを作成してここに設定する] hayashi
+前のリビジョン
+serverapps:postfix:postfix-mysql-dovecot [2025/07/30 07:03] (現在)
– [/usr/local/www/postfixadmin/config.local.phpを作成してここに設定する] hayashi
@@ 行 -1 +1,389 @@ 削除 作成
 ====== postfix + mysql + Dovecot + PostfixAdmin ======
 ===== この文章は =====
 
 表題組み合わせのサーバ設定記録。
 
 OS:FreeBSD
 
 **2017.07.07:Update**
   * 最新のファイル構成などに変更
   * DB上のパスワードはSHA512で暗号化するよう変更
 ==== 経緯 ====
 
 
 ちと、理由があって認証をMySQLにする。
 
   * バーチャルドメイン
   * imap対応
   * smtp Auth
   * パスワード暗号化(SHA512)
 
 バーチャルドメインに対応するためメール保存ユーザを作成する。
 
   # pw groupadd -n vir_mail -g 5110
   # pw useradd -n vir_mail -u 5110 -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
  
 <code sql>
 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;
 </code>
 
 ===== php.ini =====
 
   # cat /usr/local/etc/php.ini
   date.timezone = Asia/Tokyo
 
 これがないと、postfixadminのバックアップがエラーになります。
 ===== SPFレコードの登録 =====
 
 最近だとSPFレコードがないと大手のメールサーバ(gmailとか)はメールを受け取ってくれません。
 
 設定については、[[serverapps:security:email:spf]]を参照してください
 
 ===== /usr/local/etc/postfix/main.cf =====
 
 <code>
 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:5110
 virtual_gid_maps = static:5110
 
 ### SMTP Auth
 smtpd_sasl_auth_enable = yes
 smtpd_sasl_type = dovecot
 smtpd_sasl_path = private/auth
 smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
 smtpd_recipient_restrictions = 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
 </code>
 
 今回はバーチャルのみで運用するので、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                               smtpd
    ↓
   submission inet n                               smtpd
 
 ===== バーチャル関連ファイル =====
 ==== /usr/local/etc/postfix/mysql_virtual_alias_maps.cf ====
  
 <code>
 user = postfix
 password = ********
 hosts = localhost
 dbname = postfix
 table = alias
 select_field = goto
 where_field = address
 </code>
 ==== /usr/local/etc/postfix/mysql_virtual_mailbox_domains_maps.cf ====
 
 <code>
 user = postfix
 password = ********
 hosts = localhost
 dbname = postfix
 table = domain
 select_field = description
 where_field = domain
 </code>
 ==== /usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf ====
 
 <code>
 user = postfix
 password = ********
 hosts = localhost
 dbname = postfix
 table = mailbox
 select_field = maildir
 where_field = username
 </code>
 
 
 ===== postfixAdminのセットアップ =====
 ==== /usr/local/www/postfixadmin/config.local.phpを作成してここに設定する ====
 
 
   # vi /usr/local/www/postfixadmin/config.local.php
 
 <code php>
 <?php
 $CONF['configured'] = true;
 $CONF['default_language'] = 'ja';
 $CONF['database_type'] = 'mysqli';
 $CONF['database_host'] = 'データベースHOST';
 $CONF['database_user'] = 'postfix';
 $CONF['database_password'] = 'データベースパスワード';
 $CONF['database_name'] = 'postfix';
 $CONF['admin_email'] = 'サイト管理者メールアドレス';
 $CONF['alias_domain'] = 'NO';
 
 // PostfixAdmin管理画面のフッターメニューの非表示
 $CONF['show_footer_text'] = 'NO';
 
 // パスワードvalidation
 $CONF['password_validation'] = array(
     '/.{12}/' => 'password_too_short 12',
     '/([a-zA-Z].*){0}/' => 'password_no_characters 0',
     // 特殊文字の要件を追加
     // '/([!@#$%^&*].*){0}/' => 'password_no_special_characters 0',
     '/([0-9].*){0}/'  => 'password_no_digits 0',
 );
 
 // ドメイン、アカウント追加時にドメイン部分をDNSでチェックするかどうか。
 // YESにするとMXレコードを参照できないドメインを登録できなくなる。
 // defaultはYES
 // $CONF['emailcheck_resolve_domain']='YES';
 // Dfault Quota 10MB
 $CONF['maxquota'] = '10';
 
 // ユーザのmailbox容量を制限する場合 
 // $CONF['quota'] = 'YES';
 // $CONF['quota_multiplier'] = '1024000';
 
 // Welcome Message
 $CONF['welcome_text'] = <<<EOM
 ようこそ!
 
 メールボックスの作成が完了しました。
 EOM;
 
 //セットアップパスワード。後述するhashを記述します
 $CONF['setup_password'] = '';
 ?>
 </code>
 
 **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 ====
 
 
 <code>
 <IfModule alias_module>
     Alias /postfixadmin/ "/usr/local/www/postfixadmin/"
     <Directory "/usr/local/www/postfixadmin">
         Options Indexes FollowSymLinks
         AllowOverride None
         Order allow,deny
         Allow from xxx.yyy.zzz
     </Directory>
 </IfModule>
 </code>
 
 ==== 初回パスワードのハッシュ値を生成する ====
 
   # php -r "echo password_hash('pa$$w0rd1234', PASSWORD_DEFAULT);"
 
   $CONF['setup_password'] = '1234567ab890cxxxxxxxxxxx:yyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzz';
 
 <del>または、コマンドラインで以下のように生成することもできます。
 
   echo -n "{salt}:{password}"  | openssl sha1
   (stdin)= {hash文字列}
 以下のように記述します
   $CONF['setup_password'] = '{salt}:{hash文字列}';
 </del>
 
 この設定の後、このページでPostfix Adminの管理者を作成します。
 
 ※パスワードには最低2文字の数字を含む必要があります。
 
 
 ==== postfixadminにアクセス ====
 LoginできたらOK
 
 ==== setup.php を削除 ====
 
 <del>  # rm /usr/local/www/postfixadmin/setup.php</del> 
 
 ※Ver 2.3以降削除の必要はなくなりました
 ==== Announcement ====
 <del>ドメイン管理とかユーザでLoginするとAnnouncementが表示されます。\\
 ドメイン管理ならmotd.txt、ユーザはmotd-users.txtが表示されます。((ファイルはないけど特権管理者の場合はmotd-admin.txt))\\
 邪魔なので表示されないようにします</del>
 
 <del>  # mv motd.txt motd.txt.org</del>
 <del>  # mv motd-users.txt motd-users.txt.org</del>
 
 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 ====
 
 <code>
 mail_location = maildir:/home/vir_mail/%d/%n
 first_valid_uid = 5110
 first_valid_gid = 5110
 </code>
 
 ==== 10-master.conf ====
 
 <code>
 service auth {
   unix_listener /var/spool/postfix/private/auth {
     mode = 0666
   }
 }
 </code>
 
 ==== 10-ssl.conf ====
 
   ssl = no
 
 ==== 20-imap.conf ====
 
 <code>
 protocol imap {
   imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
   mail_plugins = quota imap_quota
 }
 </code>
 
 ==== 20-pop3.conf ====
 
 <code>
 protocol pop3 {
   pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
   mail_plugins = quota
 }
 </code>
 
 
 ==== 90-quota.conf ====
 
 <code>
 plugin {
   quota = maildir:User quota
 }
 </code>
 
 
 
 ==== auth-sql.conf.ext ====
 
 <code>
 passdb {
   driver = sql
   args = /usr/local/etc/dovecot/dovecot-postfixadmin-mysql.conf
 }
 userdb {
   driver = sql
   args = /usr/local/etc/dovecot/dovecot-postfixadmin-mysql.conf
 }
 </code>
 
 
 
 
 
 ==== dovecot-postfixadmin-mysql.conf ====
  
 <code>
 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'
 </code>
 
 ※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]]