ユーザ用ツール

サイト用ツール


serverapps:postfix:postfix-mysql-dovecot

差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
serverapps:postfix:postfix-mysql-dovecot [2017/07/11 09:33] – [この文章は] hayashiserverapps:postfix:postfix-mysql-dovecot [2024/02/26 08:17] (現在) – [postfixadmin/setup.php にアクセスする] hayashi
行 1: 行 1:
 +====== 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
 + 
 +<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:dns:bind: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: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
 +</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'] = 'localhost';
 +$CONF['database_user'] = 'postfix';
 +$CONF['database_password'] = 'データベースパスワード';
 +$CONF['database_name'] = 'postfix';
 +$CONF['admin_email'] = 'サイト管理者メールアドレス';
 +$CONF['alias_domain'] = 'NO';
 +
 +// PostfixAdmin管理画面のフッターメニューの非表示
 +$CONF['show_footer_text'] = 'NO';
 +// パスワード格納
 +// $CONF['encrypt'] = 'cleartext';             <= テストの時なら
 +// $CONF['encrypt'] = 'dovecot:SHA512-CRYPT';  <= 古い
 +// $CONF['encrypt'] = 'php_crypt'; // SHA512   <= deafult((2024-02-26現在))
 +
 +
 +
 +// ドメイン、アカウント追加時にドメイン部分を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';
 +
 +または、コマンドラインで以下のように生成することもできます。
 +
 +  echo -n "{salt}:{password}"  | openssl sha1
 +  (stdin)= {hash文字列}
 +以下のように記述します
 +  $CONF['setup_password'] = '{salt}:{hash文字列}';
 +
 +この設定の後、このページで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 = 110
 +first_valid_gid = 110
 +</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]]
serverapps/postfix/postfix-mysql-dovecot.txt · 最終更新: 2024/02/26 08:17 by hayashi