内容へ移動
メモとかメモのようなものとか(By ルーキーの中のひと)
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
ODT 出力
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
serverapps:postfix:postfix-mysql-dovecot
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== 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 - n - - smtpd ↓ submission inet n - 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 17:17 by
hayashi
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
ODT 出力
文書の先頭へ