#freeze
*dovecot + mysql [#se7ba585]
#contents

**説明 [#rdcd8d1d]
virtual domain 対応 postfix + dovecot + mysql システムの一環として、~
dovecot + mysql を構築する。~


#br
#br
**入手 [#zada3ded]
公式サイト: [[Dovecot:http://www.dovecot.org/]]~
Download ページを選択。~


#br
**必要環境 [#b4ad1015]




#br
**インストール [#udfbbc77]
+アーカイブの入手と準備
~
 $ wget http://dovecot.org/releases/1.1/dovecot-1.1.1.tar.gz
 $ tar xvzf dovecot-1.1.1.tar.gz -C /usr/local/src/build/
 $ cd /usr/local/src/build/dovecot-1.1.1
 $ vi ./Config.sh
 
 CPPFLAGS=-I/usr/local/ssl/include LDFLAGS=-L/usr/local/ssl/lib
 ./configure \
 --prefix=/usr/local/SOFTWARE/dovecot-1.1.1 \
 --with-linux-quota=2 \
 --with-mysql \
 --with-ssl=openssl \
 --with-ssldir=/usr/local/ssl/etc \
 2>&1 | tee configure.log
~
+ビルド
~
 $ sh Config.sh
 $ make 2>&1 | tee make.log
 $ sudo make install 2>&1 | tee install.log
~
+stow (1) を使いシンボリックリンク作成~
 $ su -
 # stow -t /usr/local/ /usr/local/SOFTWARE/dovecot-1.1.1/

+設定ファイル雛型のコピー~
 # cd /uet/local/etc
 # cp dovecot-example.conf dovecot.conf
 # cp dovecot-sql-example.conf dovecot-sql-.conf
~
+起動スクリプト作成~
dovecot wiki 内 [[Sample Dovecot init.d script:http://wiki.dovecot.org/DovecotInit]] のサンプルを環境にあわせて変更したものを使用。
~

#br
#br
**設定ファイル [#zc51b225]
dovecot.conf で dovecot 全体の設定、~
dovecot-sql.conf では mysql に問い合わせる際に必要な設定を行う。~
~
認証パスワード等を記載するので、管理者以外読み込めなくしておく。
~
 # chmod 600 dovecot.conf dovecot-sql.conf
#br
#br
+devcot.conf
~
 # 指定しない場合は /usr/local/dovecot/var/run が適用される
 base_dir = /var/run/dovecot/ 
 # 扱う protocol を指定
 protocols = imaps pop3s
 
 # 受付 port 番号を指定
 protocol imap {
  listen = *:143
  ssl_listen = *:993
 }
 protocol pop3 {
  listen = *:110
  ssl_listen = *:995
 }
 
 # plaintext での認証をデフォルト拒否する
 # SSL 接続やローカルホストからの接続は受け付ける
 disable_plaintext_auth = yes
 
 # syslog とは別にログを取得する場合に指定
 log_path = /var/log/dovecot/err.log
 info_log_path = /var/log/dovecot/info.log
 
 # ssl 通信に必要なサーバー鍵を指定
 ssl_cert_file = /usr/local/etc/postman.pem
 ssl_key_file = /usr/local/etc/newkey.pem
 
 # ログイン認証時に chroot する
 login_dir = /var/run/dovecot/login
 login_chroot = yes
 login_user = dovecot
 
 # バーチャルドメイン共通メールボックスを指定
 # postfix 及び postfix-admin での指定に合わせる
 # /path/to 部:postfix
 #   /%d/%n 部:postfix-admin
 mail_location = maildir:/path/to/%d/%n
 first_valid_uid = 10000
 
 # 各プロトコルで使用する plugin を指定
 protocol imap {
  mail_plugins = quota imap_quota
 }
 protocol pop3 {
  mail_plugins = quota
 }
 
 protocol lda {
  # 拒否メールを送るときに使うアドレス。
  postmaster_address = postmaster@example.com
 
  # Message-Id などのメールの送信で色々な部分で使うホスト名。
  # デフォルトはシステムでの実際のホスト名。
  hostname = postman.tukizakura.org
 }
 
 # 認証設定
 auth default {
   # 認証メカニズムを列挙する。クライアントととのパスワード交換時に使う。
   # 通常は plain のまま (apop 使用時は apop も指定)
   mechanisms = plain
 
   # mysql 使用時にパスワード、ユーザデータを問い合わせする
   # SQL クエリを設定しているファイルを指定する。
   passdb sql {
     args = /usr/local/etc/dovecot/dovecot-sql.conf
   }
   userdb sql {
     args = /usr/local/etc/dovecot/dovecot-sql.conf
   }
 
   #ユーザデータベースとパスワードデータベースにアクセスする時のユーザ
   user = root
 
   #他のプログラムに提供する認証のインタフェース
   socket listen {
     master {
       path = /var/run/dovecot/auth-master
       mode = 0600
     }
     # postfix で smtp-auth を行う設定
     client {
      path = /var/spool/postfix/private/auth
      user = postfix
      group = postfix
      mode = 0660
     }
   }
 }
 
 プラグイン全般の設定
 plugin {
   # quota 方式の指定
   quota = maildir
   # 全てのメールボックスを指定サイズに制限
   quota_rule = *:storage=256MB
 
   # ユーザ個別 quota を mysql に問い合わせる設定
   # 固定 uid/gid で管理している場合は uid/gid を固定で指定
   user_query = select home, 10000 as uid, 10000 as gid \
    concat('*:bytes=', quota) as quota_rule \
    from mailbox where username = '%u' and active = '1'
 
   # 指定% になった時に実行するプログラムの指定
   quota_warning = storage=90%% /usr/local/bin/quota-warning.sh 90
 }
~
~
+dovecot-sql.conf
~
 driver = mysql
 # mysql に収納さているパスワードの方式を指定(postfixadminの設定にあわせる)
 default_pass_scheme = MD5-CRYPT
 
 # ローカルホスト上の DB の場合は、unix ソケットを指定する
 connect = host=/var/run/mysqld/mysqld.sock \
           dbname=postfixDB名 user=postfixユーザ password=postfixパス
 
 # 固定 uid/gid で管理している場合は uid/gid を固定で指定
 user_query = SELECT concat('/usr/local/virtual/', maildir) as home, \
   10000 as uid, 10000 as gid FROM mailbox WHERE username='%u' AND active='1'
 
 password_query = \
   SELECT username, domain, password \
   FROM mailbox WHERE username='%u' AND active='1'
~
~
+quota warnning script
~
 # vi /usr/local/SOFTWARE/dovecot-1.1.1/sbin/quota-warning.sh
 # ln -s /usr/local/SOFTWARE/dovecot-1.1.1/sbin/quota-warning.sh \
     /usr/local/sbin/quota-warning.sh
 
 #!/bin/bash
 PERCENT=$1
 echo "Your mailbox is now $PERCENT% full." \
   | /usr/bin/mail -s "<Tukizakura Mail System> Important report "$USER"
~


#br
#br
**認証に関して [#gb874b41]
~
⇒ See Also: [[ユーザ認証の理解:http://www.tatsuyoshi.net/toyota/dovecot/Authentication.html]]~
~
~
セキュリティ確保の為に、認証及び、パスワード自体の暗号化が求められる。~
この二つの暗号化はやもすると混同しがちになるが、基本的に下記のようになる。~
~
--認証のメカニズム~
認証時のクライアント/サーバ間のやり取りに使用する暗号化。~
通信を傍受された場合等への対処として、生のテキスト(plaintext)で送受信せずにデータを暗号化する。~
sylpheed 等の MUA ~ Dovecot 間、postfix での SMTP-AUTH 使用時の MTA ~Dovecot 間で使い、~
それぞれが使用する認証メカニズムに対応している必要がある。~
これには PLAIN を含め、CRAM-MD5, DIGEST-MD5, APOP 等を指定する。~
~
 auth default {
    mechanisms = plain
 } 
~
--パスワード暗号化
~
サーバがクラックされた時等に、パスワード本体がそのままでは読まれないようにする為の暗号化。~
多数の異なるフォーマットを扱える。~
CRYPT, MD5, PLAIN-MD5, HMAC-MD5, DIGEST-MD5, SHA, SSHA, PLAIN
~
 default_pass_scheme = MD5-CRYPT
~
--注意点~
認証メカニズム間の互換性が無い為に下記2点の制限がある。~
~
1. 複数のメカニズムを使用する場合、パスワード本体は PLAIN である事が必要。~
2. パスワード側が暗号化(PLAIN でない)されている場合は、認証メカニズムをパスワードの暗号方式に合わせるか、~
  もしくは PLAIN 方式でなくてはならない。~
~
通常はパスワードが何かしらの形ですでに暗号化されている事から、2.の方式を取る事が多い。~
通信の傍受に対する危険については、POP3S, IMAPS などの SSL を使った通信にすれば問題が無くなる。
~
~システム全体の設計によるが、今回のシステムではそもそも postfix-admin で MD5-CRYPT を使用するので、自動的に 2. の形式をとる事となった。
~
~
 
 ProFTPd (FTP-SSL)       <--------|
 Postfix (SMTP-TLS)      <--------|
        |                         |
        |                    locale接続
    remote接続(SSL)               |
        |                        +--------> Dovecot-SASL <----------> MySQL (Postfix-Admin)
        |                [認証メカニズム PLAIN]        [パスワード方式 MD5-CRYPT]
    メール送信&FTP               |
 ===クライアント===            remote接続(SSL)
    メール受信                       |
        |                            |
 MUA(POP3S, IMAPS)          <--------|










#br
#br
**扱うテーブルの内容 [#gecead5c]
devcot がユーザ認証時に問い合わせる postfix-admin で作った DB & table~
~
 $ mysql -u root postfix
 
 mysql> desc mailbox;
 +----------+--------------+------+-----+---------------------+-------+
 | Field    | Type         | Null | Key | Default             | Extra |
 +----------+--------------+------+-----+---------------------+-------+
 | username | varchar(255) | NO   | PRI |                     |       |
 | password | varchar(255) | NO   |     |                     |       |
 | name     | varchar(255) | NO   |     |                     |       |
 | maildir  | varchar(255) | NO   |     |                     |       |
 | quota    | bigint(20)   | NO   |     | 0                   |       |
 | domain   | varchar(255) | NO   |     |                     |       |
 | created  | datetime     | NO   |     | 0000-00-00 00:00:00 |       |
 | modified | datetime     | NO   |     | 0000-00-00 00:00:00 |       |
 | active   | tinyint(1)   | NO   |     | 1                   |       |
 +----------+--------------+------+-----+---------------------+-------+
~


#br
#br
**courier-imap Maildir から dovecot Maildir へコンバート [#ra95837d]
公式サイトで配布されているコンバートスクリプトを使用する。
~
 $ ./courier-dovecot-migrate.pl
 Finding maildirs under .
 Maildir/courierimapuiddb: OK
 Maildir/.Draft/courierimapuiddb: OK
 Maildir/.Drafts/courierimapuiddb: OK
 Maildir/.Sent/courierimapuiddb: OK
 Maildir/.Trash/courierimapuiddb: OK
 
 Total: 0 POP3 changes for 0 mailboxes / 0 users
        0 IMAP changes for 0 mailboxes / 0 users
        0 errors
 No actual conversion done, use --convert parameter
 
 $ ./courier-dovecot-migrate.pl --convert
 Finding maildirs under .
 Maildir/courierimapuiddb: OK
 Maildir/.&g0l6Pw-/courierimapuiddb: OK
 Maildir/.&kAFP4V+FMGE-/courierimapuiddb: OK
 Maildir/.&kAFP4WOn-/courierimapuiddb: OK
 Maildir/.&U9dP4Xux-/courierimapuiddb: OK
 Maildir/.Draft/courierimapuiddb: OK
 Maildir/.Drafts/courierimapuiddb: OK
 Maildir/.Sent/courierimapuiddb: OK
 Maildir/.Trash/courierimapuiddb: OK
 
 Total: 0 POP3 changes for 0 mailboxes / 0 users
        0 IMAP changes for 0 mailboxes / 0 users
        0 errors
 9 dovecot-uidlist files written
~
Maildir 内に dovecot 用ファイルが作成される。
~
-Maildir/dovecot-uidlist
-Maildir/subscriptions

~
/usr/local/virtula/-DOMAIN- 配下の-USER-という名前のディレクトリに mv し、~
適切な所有者に変更しておく。~
 # mv /homu/-USER-/Maildir /usr/local/virtual/-DOMAIN-/-USER-
 # chown -R vmail:vmail /usr/local/virtual/-DOMAIN-/-USER-
 # rm -fr courierimap*




#br
#br
**参考資料 [#p4eafc5f]
-公式サイト: [[Dovecot:http://www.dovecot.org/]]~
-[[Dovecot 日本語翻訳プロジェクト:http://www.dovecot.jp/]]
#br

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS