= mail / LM: [2024-09-04 16:43:44]

メールサーバの設定についてのメモを置く場所.

2 台の dovecot サーバでの冗長化構成(2021/05)

前提

間借りしていたメールサーバーがもうすぐなくなりそうと言うことで,自分でさくらの VPS なサーバを借りた.だが,vCPU が 2 core,メモリ 1GB ということで,全文検索などあまり多くの機能を動かすとすぐにメモリがリソースが溢れそう.リソースと言う意味では,必ず 1 台は,設置場所の停電などで止まることがあるが,グローバル IP の振られている自分のマシンを確保している.そこで,さくら VPS はメールを受けとる専用,もう一台をメインで imap 接続したり spam 処理,全文検索処理などを行う構成にした.

  • さくら VPS (FreeBSD 12.2-Stable)
    • postfix + dovecot + spamassasin
      • dovecot replicator でオンプレマシンと同期.
  • オンプレマシン (FreeBSD 11.4-Stable)
    • pontfix + dovecot + FTS(Solr) + imapfilter
      • dovecot replicator でオンプレマシンと同期.
      • Solr で全文検索のインデックス作成
      • Thunderbird や iPhone Mail にてアーカイブすると,特定フォルダにメールが移動し,事前に設定しておいたルールに応じてフォルダ分けする.
      • imapfilter で 10 分おきに適用

間借りサーバから新サーバへのメール移動

  • imapsync を利用
  • replicator との相性が悪く,メールを保存するたびに replicate しようとするため,imapsync の動作が大変遅くなる (数 KB/s しか出なくなる.)
  • そのため,replicator の設定をする前に,メールは移動しておいた方が良いと思われる.

コマンド例

  • 全てのメールを移動
% imapsync --host1 mail2.sakaki.works --port1 143 --authmech1 LOGIN --user1 skk.bps@sakaki.works --password1 "Password" --host2 mail2.sakaki.works --port2 143 --authmech2 LOGIN --user2 skk.bps@sakaki.works --password2 "Password" 
  • 特定のフォルダだけ移動.その際,フォルダ名を変えたい.
% imapsync --host1 mail2.sakaki.works --port1 143 --authmech1 LOGIN --user1 skk.bps@sakaki.works --password1 "Password" --host2 mail2.sakaki.works --port2 143 --authmech2 LOGIN --user2 skk.bps@sakaki.works --password2 "Password" --folder コピー元対象フォルダ --f1f2 コピー元対象フォルダ=コピー先対象フォルダ  

postfix 基本設定

(2007 年時点の設定参照)

変更点1

SSL/TLS に対応した

smtpd_tls_cert_file = /usr/local/etc/letsencrypt/live/ns.sakaki.works/cert.pem
smtpd_tls_key_file = /usr/local/etc/letsencrypt/live/ns.sakaki.works/privkey.pem
smtpd_tls_CAfile = /usr/local/etc/letsencrypt/live/ns.sakaki.works/fullchain.pem
smtpd_tls_session_cache_database = btree:/var/cache/postfix/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_received_header = yes
smtpd_tls_loglevel = 1

変更点2

特定の From ドメインからのみ,特定の relay_host を利用するように設定した.個人メールアカウントは,さくら VPS から直接配送とし,会社のメールは,会社の SMTP サーバ(Amazon SES)に送る,という流れ.

/usr/local/etc/postfix/main.cf は以下の通り.

smtp_use_tls = yes
smtp_sender_dependent_authentication = yes
sender_dependent_default_transport_maps = hash:/usr/local/etc/postfix/sender_relay
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd
smtp_always_send_ehlo = yes
smtp_tls_policy_maps = hash:/usr/local/etc/postfix/tls_policy
#smtp_tls_wrappermode = yes
#smtp_tls_security_level = encrypt
smtp_tls_security_level = may
smtp_tls_note_starttls_offer = yes
smtp_tls_cert_file = /usr/local/etc/letsencrypt/live/ns.sakaki.works/cert.pem
smtp_tls_key_file = /usr/local/etc/letsencrypt/live/ns.sakaki.works/privkey.pem
smtp_tls_CAfile = /usr/local/etc/letsencrypt/live/ns.sakaki.works/fullchain.pem

まず,smtp_sender_dependent_authentication を設定することで,sender_dependent_default_tarnsport_maps が有効になるように. sender_dependent_default_transport_maps には,以下のような sender_relay 情報を記述.

@bpsinc.jp                         smtps:email-smtp.us-west-2.amazonaws.com:587

Amazon SES から発行されているユーザ名とパスワードは,tls_policy にて encrypt を指定した後,sasl_passwd に以下のように設定.

sasl_passwd:

email-smtp.us-west-2.amazonaws.com    ユーザ名:パスワード

tls_policy:

email-smtp.us-west-2.amazonaws.com:587     encrypt

sender_relay, sasl_passwd, tls_policy は,それぞれ postmap コマンドを通すのを忘れないように.

はまったのが,relay_host で SMTPS(465) で送信しようとすると,postfix の挙動全体で,
smtp_tls_wrappermode = yes
smtp_tls_security_level = encrypt
と書いた上で,25 番への relay ができないモードになってしまうと言う部分.これが,どうしても解決できずに,どこかで見た,submission ポートで送ってみたら,ちゃんと認証した上で送信してくれることが分かったので,この設定にしておくことに.

参考情報

dovecot 基本設定

(2007 年時点の設定参照)

変更点1

後で,FTS (Full Text Search) を行うため,ports インストールをする際に SOLR を選択する.すでに設定してしまっている人は,以下のように ports ディレクトリに移動して make config する.

% cd /usr/ports/mail/dovecot
% make config 

変更点2

Maildir から dbox にした.Maildir は,1メール1ファイルで,既読管理をファイル名に頼っている.そのため,メール数が増えてきた時に,ストレージへのアクセスが大量に発生するため,パフォーマンスが落ちやすい.

dbox はメールを 10MB までのファイルにパッキングしつつ管理している.メタ情報は 10MB までのファイルの中に書いているため,ストレージへのアクセスがバランス良くなっているものと思われる.ちなみに mbox 形式は,1 フォルダのメールを 1 ファイルに入れるため,メールが多くなってきた時に,大量のデータを読み込まねばならず,これはこれでパフォーマンスの劣化につながっていた.

mail_location = mdbox:/home/mail/%d/%n

参考情報

変更点3

さくら VPS は 100GB しかストレージがないので,メールを圧縮するようにした.

以下の設定をしておけば,新規に到着するメールからは dbox ファイルの中で,そのメールだけ gzip 圧縮される.gzip 以外にも bzip2 などの圧縮形式は選択できる.新規到着メールから圧縮されるようになるのと,そこまでメール閲覧に関してパフォーマンスが悪くなった印象はないので,早い段階で設定しておいた方が良いと思う.後で dbox 形式のメールを全部圧縮するには,一度 dsync や imapsync などを利用してメールボックスを移動させて,圧縮が動作するようにしなければならないので,めんどくさい.

mail_plugins = $mail_plugins zlib

plugin {
  zlib_save = gz
  zlib_save_level = 6
}

[2023-04-29]

追記:

mdbox を見ても,テキストで保存されていた.

plugin lda の中の mail_plugin にも zlib を追記しないと動かなかったかもしれない.

protocol lda {
  deliver_log_format = msgid=%m: %$
  info_log_path = /var/log/dovecot-lda.log
  log_path = /var/log/dovecot-lda.log
  mail_plugins = sieve zlib
...

参考情報

変更点4

SSL/TLS に対応した.Let's encrypt を利用.Let's Encrypt の利用は別のページ参照.

dovecot.conf に以下の設定を行う.dh.pem については,存在していないので,事前に以下のコマンドで作成しておく.

% dd if=/var/db/dovecot/ssl-parameters.dat bs=1 skip=88 | openssl dhparam -inform der > /usr/local/etc/dovecot/dh.pem

dovecot.conf 設定:

service imap-login {
  inet_listener imaps {
    port = 993
    ssl = yes
  }
}

ssl = yes
ssl_dh   = </usr/local/etc/dovecot/dh.pem
ssl_cert = </usr/local/etc/letsencrypt/live/mail2.sakaki.works/fullchain.pem
ssl_key  = </usr/local/etc/letsencrypt/live/mail2.sakaki.works/privkey.pem

イコールのあとの ”<” は typo でないので注意.

参考情報

    • REMSYSTEM TECHLOG:CentOSのPostfixとDovecotにSSLを設定して安全に通信を行う
    • SSL/TLS 周りの設定を,Let's Encrypt も含めてかなり細かく記述してくれている.

doveadm コマンド

doveadm コマンドを活用しまくると,コマンドラインにてメールの検索,メールボックスのサイズ取得,などが行えるので,シェルなどの操作がしやすい.普段の仕事では Thunderbird(+external edit) を使うので,コマンドラインを使うことはないが,管理していく際には活用しやすい.

doveadm の man の中に,色々なコマンドが書いてあり,doveadm-command という名前で man が準備されている. 基本的に root (または,mail ユーザ)でないと動作しない.

doveadm purge

マニュアル
% man doveadm-purge 
基本

メールに対しての refcount が 0 になってるものを実際にストレージ上から削除するコマンド.Disk I/O の少ないタイミングで実行される,と記述があったが,実際に実行されているかの確認は [2021-12-31] 現在,とれていない.

[2024-09-04] 少なくとも利用しているファイル保存形式が mdbox の場合,メールクライアントからメールを大量に削除しただけでは,まだ,ストレージ自体の削減にはならないが,sudo doveadm purge -u hoge@hoge.com を実行した後は,ストレージが削減されているのを確認できた.doveadm mailbox で確認できるサイズよりもずっと多くのストレージが削減されているように見えている.base64 やファイルシステムのブロックサイズが影響するのか…?と妄想するが,確認はとれていない.

具体例
  • 特定ユーザのメールボックスを確認し,refcount が 0 なら削除する.

% sudo doveadm purge -u hoge@hoge.com

  • 全ユーザのメールボックスを確認し,refcount が 0 なら削除する.

% sudo doveadm purge -A

マニュアル
% man doveadm-search 
基本

返ってくるのは,guid と uid という,内部管理の ID なので,次の fetch と併用して利用することになる.

% doveadm search -u <username> <キー> 
具体例
  • 件名で検索したい場合
    % doveadm search -u <username> subject "件名" 
  • From で検索したい場合
    % doveadm search -u <username> from 'hoge@hoge.com' 
  • 特定のフォルダの中で検索をしたい場合
    % doveadm search -u <username> mailbox 'Archives' 

doveadm fetch

マニュアル
% man doveadm-fetch
基本

guid, uid をベースに検索するので,ほぼ search と併用する.

具体例
  • From で検索して,件名を一覧表示したい場合
    Note: 以下では,nkf -w にて subject 部分で encode された文字を日本語に戻している
    % doveadm search -u skk.bps@sakaki.works from 'hoge@hoge.com| while read guid uid; 
      do 
      doveadm fetch -u <username> mailbox mailbox-guid $guid uid $uid | nkf -w \\
      done 
  • Archives フォルダの中のメールの From を全て一覧表示したい
    Note: grep の部分は,from のメールアドレスのみを抜き出している
    % doveadm search -u <username> mailbox 'Archives' | while read guid uid; 
    do
    doveadm fetch -u <username> hdr.from mailbox-guid $guid uid $uid | grep -o "[-_a-zA-Z0-9\.]*@[-a-zA-Z0-9\.]*" 
    done 

doveadm user

マニュアル
% man doveadm-user
基本

dovecot が認識しているユーザについての情報の表示・コントロールを行うコマンド.
passdb において,以下のような設定がしてある場合,dovecot.passwd.db に書いてあるユーザのみが一覧表示されるはず.

passdb {
  args = /usr/local/etc/dovecot.passwd.db
  driver = passwd-file
}
具体例
  • dovecot のユーザ一覧を表示する
    % doveadm user '*' 
  • 特定ユーザについての情報を表示する
    % doveadm user -u <username> 

doveadm mailbox

マニュアル
% man doveadm-mailbox 
基本

メールボックスの中で設定されているフォルダに関する情報を得るためのコマンド.

具体例
  • 全フォルダの利用サイズを取得したい.
    % doveadm -f table mailbox status -u skk.bps@sakaki.works "vsize" '*'
    • フォルダのサイズ順にソートする
      % doveadm -f table mailbox status -u skk.bps@sakaki.works "vsize" '*' | awk -F' ' '{print $2 " " $1}' | sort -n  
  • 特定フォルダの利用サイズを取得したい.
    % doveadm -f table mailbox status -u skk.bps@sakaki.works "messages vsize" spam
    • ちゃんと調査しきれていないが,vsize は dbox の中に記述されている各メールサイズを足し算したものなのではないか?と想像している.実際に利用されているストレージ量が算出されているわけではなさそう.

doveadm quota

マニュアル
% man doveadm-quota 
基本

以下が dovecot.conf に書いてある場合にのみ,利用できるコマンド.現状では特に quota を設定していないので,設定の仕方は分からない.

mail_plugins = $mail_plugins quota 
plugin {
  quota = count
  quota_vsizes = yes 
}
具体例
  • 特定ユーザが利用しているストレージ情報を得る.
    % doveadm quota get -u skk.bps@sakaki.works

doveadm replicator

マニュアル
% man doveadm-replicator 
% mad doveadm-dsync 
基本

そのうち書きたい.多分,コマンドラインでサーバ間の sync を行うなども可能だと思われる.imapsync の代わりとして利用できそうな気がする.imapsync より高速だと思われる.

具体例

参考情報

dovecot replicator

基本

Replication with dsync に,基本的に全て書かれている.二つの dovecot サーバ間で master/master 同期を行う,という機能.メールボックスに何か変化があった場合,replicator というプロセスが走り,もう一つのサーバに同期をかける.[2021-05-27] 現在,なんらかの原因で replicator プロセスが暴走することがあり,ちょいちょい core dump しているのが気になるが,原因は不明.

設定

以下の設定は,さくら VPS・オンプレマシンの両方に必要.

/usr/local/etc/dovecot/dovecot.conf:

mail_plugins = $mail_plugins notify replicator
 
service replicator {
  process_min_avail = 1
  vsz_limit = 512M
 
  unix_listener replicator-doveadm {
    mode = 0600
  }
}
 
dsync_remote_cmd = ssh -i /root/id_rsa -l%{login} %{host} doveadm dsync-server -u%u
plugin {
#  mail_replica = remote:root@mail2.sakaki.works
  mail_replica = tcp:mail2.sakaki.works:12345
}
 
service aggregator {
  fifo_listener replication-notify-fifo {
    user = mailuser
  }
  unix_listener replication-notify {
    user = mailuser
  }
}
 
replication_max_conns = 10
 
plugin {
  # When saving a new mail via IMAP or delivering a mail via LDA/LMTP,
  # wait for the mail to be synced to the remote site. If it doesn''t finish
  # in 2 seconds, return success anyway.
  replication_sync_timeout = 10
}
 
doveadm_password = password

大事なのは,mail_replica の辺りで,ssh を使う方法と TCP を使う方法が存在している.

ssh 経由で行う場合は,root でのログインを有効にしないと行けないので,sshd において,以下のような設定をしておきつつ,鍵をお互いの root/.ssh/authorized_keys に登録すると良い.

## Okay allow root login with public ssh key for 210.160.237.138 ##
Match Address 210.160.237.138
        PermitRootLogin yes

今回は tcp を利用した.この場合,doveadm_password にて,お互いに共通のパスワードを書いておく必要がある.また,dsync_remote_cmd は必要ないと思われるが,消すのがめんどくさいので残してある.

dsync では,doveadm user で出てくるユーザ全てを同期してしまう.特定ユーザのみ同期したくない場合は,dovecot.passwd.db (passwd-file) の対象ユーザに,以下のような記述をしておく.

username:{plain}hogehoge:5000:5000::/home/mail/%d/%n::userdb_noreplicate=y

多くのページにて,userdb_ prefix がいらない,と書いてあった気がするが,結局つけなければ動作しなかった.

参考情報

dovecot FTS 設定

基本

  • FTS エンジンには xapian,solr などがある.
  • xapian は使いものにならなかった.5 日間ほど動かしておいてみたが,ストレージへのアクセスが 10MB/s 〜 20MB/s が続いているのにいつまでも終了せず.replicator との相性か?と思ったが,多分,単品で動かしても安定しないのでは…と思った.
  • solr は java のインストールなど時間がかかったが,安定して動作.
  • 全文検索は,PC のメールクライアントだと実感しにくい.imap に対して search コマンドを発行しているかどうか.
    • iPhone のメールアプリにおける検索は,imap search を発行している.検索してみると,爆速になっているのを実感できる.
    • Thunderbird は,基本的に Thunderbird が作成したインデックスで検索しているが,Ctrl-Shift-f で出てくる検索ボックスの中の,「サーバー上のメッセージを検索する」にチェックを入れると,imap search コマンドを発行するらしい.
    • doveadm search は,この全文検索を活用している(はず).
  • TODO:

solr インストール

Apache Solr は,Java で動作する全文検索エンジンらしい.動作自体は,http://localhost:8983 など立ち上がり,そこにコマンドを http で送る形式の模様.

以下のような形で,textproc/apache-solr をインストールする.

/usr/local/etc/solr.in.sh の中に,データベース情報を保存する先の指定などができる模様.今回は特に変更せず,デフォルトのまま利用した.

% portmaster -D textproc/apache-solr
% echo "solr_enable=\"YES\"" >> /etc/rc.conf
% /usr/local/etc/rc.d/solr start

設定

fts_solr プラグインを入れることで,メールボックスにメールが到着した際に,java な solr プロセスを立ち上げてインデックスを作成している模様.

設定の中にある indexer-worker は,indexer-worker という名前のプロセスが立ち上がる.xapian を設定した際も立ち上がっていたので,FTS 全般で動作する親プロセスみたいなものだと思われる.process_limit を指定しているのは,xapian が阿呆みたいにプロセスを立ち上げまくって,HDD を苛め抜いていたので,制限をかけた名残.これが残ったままでも Solr 自体は快調に動いてる.

text2decode は,xapian を設定している際に見かけた,添付ファイルや mime encode されたメールも処理できるようなスクリプトだと思われる.一応指定してあって問題はなさそう.

dovecot.conf:

mail_plugins = $mail_plugins fts fts_solr

plugin {
  fts = solr
  fts_solr = url=http://127.0.0.1:8983/solr/dovecot/
  fts_autoindex = yes
  fts_autoindex_exclude = \Trash
  fts_decoder = decode2text
}

service indexer-worker {
  vsz_limit = 4G
  process_limit = 2
}

service decode2text {
  executable = script /usr/local/libexec/dovecot/decode2text.sh
  user = dovecot
  unix_listener decode2text {
    mode = 0666
  }
}

参考情報

サーバサイドでのフォルダ分け

  • sieve と replicator の相性が悪い気がする.
  • sieve は記述言語の癖が大きいのと,記述ミスをするとメールがなくなる時があり,なかなか恐い.
  • imapfilter は,lua というプログラミング言語で記述するため,振り分けルールの中の記述自由度が高い.変数なども使える.記述を間違った際は,imapfilter が動作しないだけなので,メール紛失の危険が低い.

spamassassin 設定

(2007 年時点の設定参照)


dovecot + spamassasin + dovecot-sieve の設定方法(2012/11)

virtual domain 前提。

ソフトウェア準備

  • ports から、dovecot と、dovecot-sieve を入れる。メモ時点でのバージョンは下記の通り。
dovecot-1.2.17      Secure and compact IMAP and POP3 servers
dovecot-sieve-1.2+0.1.18_1 A Sieve plugin for the Dovecot 'deliver' LDA

設定

  • dovecot.conf
    • sieve ファイルを設置する場所を記述
plugin {
  ...
  sieve=/home/mail/%d/%n/.dovecot.sieve 
}
  • sieve プラグインを利用することを宣言
protocol lda {
  ... 
  mail_plugins = sieve  
}
  • 注:cmusieve ではない。
  • postfix / master.cf
    • spam assassin をフィルタとして使いつつ、dovecot の deliver という lda (local delivery agent) を利用するようにする。
filter    unix  -      n        n       -       10     pipe flags=DRhu user=mailuser argv=/usr/local/bin/spamc -e /usr/local/libexe

c/dovecot/deliver -f ${sender} -d ${recipient}

  • user で指定される uid は MTA が動作している UID。これと、spam assassin で利用している uid が異なっている場合、同一にすること。permission 問題が発生する。
  • /usr/local/etc/mail/spamassassin/local.cf
    • [SPAM] がつくようにする。
rewrite_header Subject [SPAM]

postfix + dovecot 初期構築 (2007/03)

postfix + dovecot でメールサーバ構築.環境は,FreeBSD 5.5R.

2007/03/17 作業.

構築要件

  • サーバは,グローバル IP を取得した,専用サーバ.
  • どんなドメインでメール環境を運用するかわからないので,完全 virtual domain 対応にする必要がある.
  • postfix も dovecot も virtual domain を謳っているので,とりあえず選択してみた.
  • smtp auth が必要.
  • imap/pop3 をするために,ユーザ管理を行なう必要がある.smtp auth と共用できた方が楽なので,そうする.
  • postfix: postfix-2.3.8,1
  • dovecot: dovecot-1.0.r27

postfix のインストールと設定

  • ports でインストールするのが,後の運用も考えると便利.
# portupgrade -N mail/postfix 
  • デフォルトで入っている sendmail を自動起動しないように /etc/rc.conf を書き換える.
sendmail_enable="NO" // もし,yes となっていたら.
postfix_enable="YES"
  • /etc/aliases に,次の記述.
postfix: root
  • 動作の設定は,/usr/local/etc/postfix/main.cf に.次の記述.
myhostname = banana2887.maido3.com

mydomain = maido3.com

myorigin = $mydomain
 
inet_interfaces = all

mynetworks = 127.0.0.0/8

## virtual mailbox 
virtual_mailbox_domains = ztdn.org
virtual_mailbox_base = /home/mail
virtual_mailbox_maps = hash:/usr/local/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_maps = hash:/usr/local/etc/postfix/virtual

## sasl 
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
  • myhostname: サーバのホスト名.今回の場合,間違ってなければ,なんでもよし.
  • mydomain: myhostname のドメイン部分を書き出す.
  • myorigin: mydomin でも書いておく.

上記3つは,ローカル配送したときとかに利用されるドメインになる.一番のベースドメインと言える.現在の設定ではヘッダの中に名前が出てしまうのでかっこわるい.

  • inet_interface = all にしておかないと,外部からの smtp を受け付けなくなってしまう.
  • mynetworks: どこからの smtp を受け付けるかを,ネットワークベースで制限できる.dovecot との連携において,smtp-auth をかけるので,ローカルからの配送のみを許しておけば十分.

ここまでで,smtp server としての基本が終わり.次から,virtual host 設定と認証の設定に入る.

  • virtual_mailbox_domains = ztdn.org : 運用したいドメイン名を書く.
  • virtual_mailbox_base = /home/mail : メールをためておく場所を書く.ユーザディレクトリ内の Maildir に相当する.
  • virtual_mailbox_maps = hash:/usr/local/etc/postfix/vmailbox : ztdn.org に対して届いたメールをどのように扱うかを記したファイル.後述.
  • virtual_minimum_uid = 100 : 不明
  • virtual_uid_maps = static:5000 : /home/mail 以下のファイルは uid 5000 で取り扱われる.

virtual_gid_maps = static:5000 : /home/mail 以下のファイルは gdi 5000 で取り扱われる. virtual_alias_maps = hash:/usr/local/etc/postfix/virtual : 後述.alias ファイルに近い.

  • vmailbox: 中には,以下のように記述する.
skk@ztdn.org           ztdn.org/skk/
yuki@ztdn.org          ztdn.org/yuki/
www@ztdn.org           ztdn.org/www/
  • 変更したら次のコマンドで db をアップデート
# postmap /usr/local/etc/postfix/vmailbox
  • skk@ztdn.org へのメールを,/home/mail/ztdn.org/skk/ 以下に,Maildir 形式で落とす,という意味.もし,ztdn.org/skk と,スラッシュを書かないと,mbox 形式で保存されるので注意.
  • virtual: 中には,alias のような記述を行う.
info@ztdn.org          skk@hoge.com 
ml@hoge.com            ml@localhost
  • vmailbox と virtual は共存可能.先に vmailbox が処理されるのかも.
  • ml@localhost の場合,ローカルに配送されるので,/etc/alias に次のような処理を書くことが可能.
ml: "|/path/to/mlprogram" 

virtual host のケースによっては,他の実装方法がよいかもしれない.他の方法に関しては,ここを参照.

特定の smtp サーバのみにリレーする方法

  • freebsd では,ports インストール時に sasl ライブラリを compile in する必要あり.(デフォルトだとされていない)
  • main.cf に以下を追記
# restrict mail relay only to ice.bps
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/usr/local/etc/postfix/relay_password
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
data_directory = /var/db/postfix
  • relay_password に,smtp auth 認証用情報を記述しておく
# vi /usr/local/etc/postfix/relay_password
[smtp.hoge.jp]:587   hoge@hoge.jp:hogepassword
# postmap /usr/local/etc/postfix/relay_password

dovecot のインストールと設定

  • ports でインストールする.
  • /usr/local/etc/dovecot.conf を sample をコピーして作成する.
  • dovecot.conf の中身を,それぞれ以下のように書き換える
protocols = imap pop3
listen = *
mail_location = maildir:/home/mail/%d/%n
first_valid_uid = 500
last_valid_uid = 5000
first_valid_gid = 0
last_valid_gid = 5000
auth default {
 # Space separated list of wanted authentication mechanisms:
 #   plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi
 mechanisms = plain login
 passdb passwd-file {
   # Path for passwd-file
   args = /usr/local/etc/dovecot.passwd.db
 }
 passdb passwd-file {
   # Path for passwd-file
   args = /usr/local/etc/dovecot.passwd.db
 }
 socket listen {
    client {
      path = /var/spool/postfix/private/auth
      mode = 0660
      user = postfix
      group = postfix
    }
  }
}
  • 次に,パスワード兼ユーザ情報ファイルを作成する.(dovecot.passwd.db)
skk@hoge.com:{CRAM-MD5}thaoseuh:5000:5000:/home/mail/%d/%n
yuki@hoge.com:{plain}password:5000:5000:/home/mail/%d/%n
  • %d を有効にするために,ユーザの後ろには必ず@でドメインを指定する必要がある.virtual host を有効にするにはこの設定が必要.
  • CRAM-MD5 とかのハッシュ値を作成するには,dovecotpw というコマンドを利用すれば簡単に作成できる.
  • [2021-05-27]追記:現状の設定ファイルの内容を確認するには,doveconf を利用する.
% doveconf -n 

参考文献

その他

Maildir 内に保存されるファイル名,命名規則について

The standard filename definition is: "<base
filename>:2,<flags>". Dovecot has extended the <flags> field to be
"<flags>[,<non-standard fields>]". This means that if Dovecot sees a
comma in the <flags> field while updating flags in the filename, it
doesn't touch anything after the comma. However other maildir MUAs
may mess them up, so it's still not such a good idea to do
that. Basic <flags> are described here. The <non-standard fields>
isn't used by Dovecot for anything currently. 

Dovecot supports reading a few fields from the <base filename>: 
   - ,S=<size>: <size> contains the file size. Getting the size from
     the filename avoids doing a stat(), which may improve the
     performance. This is especially useful with Maildir++ quota. 
   - ,W=<vsize>: <vsize> contains the file's RFC822.SIZE, ie. the
      file size with linefeeds being CR+LF characters. If the message was
      stored with CR+LF linefeeds, <size> and <vsize> are the same. Setting
      this may give a small speedup because now Dovecot doesn't need to
      calculate the size itself.  

A maildir filename with those fields would look something like: 1035478339.27041_118.foo.org,S=1000,W=1030:2,S
  • ということで,<base filename>:2,<flags> という形式の模様.
  • new の中にある段階では,:2, がまだつけられていない感じ.
  • flags の意味は以下の通り.新しい flag が追加されている可能性がある.flag は ASCII 順で , 以降に付け加えられなければならない.
“P”(passed)the user has resent/forwarded/bounced this message to someone else.
“R”(replied)the user has replied to this message.
“S”(seen)the user has viewed this message, though perhaps he didn't read all the way through it.
“T”(trashed)the user has moved this message to the trash; the trash will be emptied by a later user action.
“D”(draft)the user considers this message a draft; toggled at user discretion.
“F”(flagged)user-defined flag; toggled at user discretion.

このページへのアクセス 今日: 4 / 昨日: 5 総計: 541

mail.txt · 最終更新: 2024/09/04 16:44 by skk
文書の先頭へ
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0