差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
mail [2021/05/27 10:47] – skk | mail [2024/09/04 16:44] (現在) – skk | ||
---|---|---|---|
行 1: | 行 1: | ||
- | = [[mail]] | + | = [[mail]] |
+ | ~~NOCACHE~~ | ||
+ | |||
+ | メールサーバの設定についてのメモを置く場所. | ||
====== 2 台の dovecot サーバでの冗長化構成(2021/ | ====== 2 台の dovecot サーバでの冗長化構成(2021/ | ||
行 22: | 行 25: | ||
==== コマンド例 ==== | ==== コマンド例 ==== | ||
- | * 全てのメールを移動 < | + | * 全てのメールを移動 |
+ | < | ||
% imapsync --host1 mail2.sakaki.works --port1 143 --authmech1 LOGIN --user1 skk.bps@sakaki.works --password1 " | % imapsync --host1 mail2.sakaki.works --port1 143 --authmech1 LOGIN --user1 skk.bps@sakaki.works --password1 " | ||
</ | </ | ||
- | * 特定のフォルダだけ移動.その際,フォルダ名を変えたい.< | + | * 特定のフォルダだけ移動.その際,フォルダ名を変えたい. |
+ | < | ||
% imapsync --host1 mail2.sakaki.works --port1 143 --authmech1 LOGIN --user1 skk.bps@sakaki.works --password1 " | % imapsync --host1 mail2.sakaki.works --port1 143 --authmech1 LOGIN --user1 skk.bps@sakaki.works --password1 " | ||
+ | |||
+ | |||
+ | |||
+ | ===== postfix 基本設定 ===== | ||
+ | (2007 年時点の設定参照) | ||
+ | |||
+ | ==== 変更点1 ==== | ||
+ | SSL/TLS に対応した | ||
+ | |||
+ | <code ini> | ||
+ | smtpd_tls_cert_file = / | ||
+ | smtpd_tls_key_file = / | ||
+ | smtpd_tls_CAfile = / | ||
+ | smtpd_tls_session_cache_database = btree:/ | ||
+ | smtpd_tls_session_cache_timeout = 3600s | ||
+ | smtpd_tls_received_header = yes | ||
+ | smtpd_tls_loglevel = 1 | ||
+ | </ | ||
+ | |||
+ | ==== 変更点2 ==== | ||
+ | 特定の From ドメインからのみ,特定の relay_host を利用するように設定した.個人メールアカウントは,さくら VPS から直接配送とし,会社のメールは,会社の SMTP サーバ(Amazon SES)に送る,という流れ. | ||
+ | |||
+ | / | ||
+ | |||
+ | <code ini> | ||
+ | smtp_use_tls = yes | ||
+ | smtp_sender_dependent_authentication = yes | ||
+ | sender_dependent_default_transport_maps = hash:/ | ||
+ | smtp_sasl_auth_enable = yes | ||
+ | smtp_sasl_security_options = noanonymous | ||
+ | smtp_sasl_password_maps = hash:/ | ||
+ | smtp_always_send_ehlo = yes | ||
+ | smtp_tls_policy_maps = hash:/ | ||
+ | # | ||
+ | # | ||
+ | smtp_tls_security_level = may | ||
+ | smtp_tls_note_starttls_offer = yes | ||
+ | smtp_tls_cert_file = / | ||
+ | smtp_tls_key_file = / | ||
+ | smtp_tls_CAfile = / | ||
+ | </ | ||
+ | |||
+ | まず,smtp_sender_dependent_authentication を設定することで,sender_dependent_default_tarnsport_maps が有効になるように. sender_dependent_default_transport_maps には,以下のような sender_relay 情報を記述. | ||
+ | |||
+ | <code ini> | ||
+ | @bpsinc.jp | ||
+ | </ | ||
+ | |||
+ | Amazon SES から発行されているユーザ名とパスワードは,tls_policy にて encrypt を指定した後,sasl_passwd に以下のように設定. | ||
+ | |||
+ | sasl_passwd: | ||
+ | <code ini> | ||
+ | email-smtp.us-west-2.amazonaws.com | ||
+ | </ | ||
+ | |||
+ | |||
+ | tls_policy: \\ | ||
+ | <code ini> | ||
+ | email-smtp.us-west-2.amazonaws.com: | ||
+ | </ | ||
+ | |||
+ | sender_relay, | ||
+ | |||
+ | |||
+ | はまったのが,relay_host で SMTPS(465) で送信しようとすると,postfix の挙動全体で,\\ | ||
+ | smtp_tls_wrappermode = yes\\ | ||
+ | smtp_tls_security_level = encrypt\\ | ||
+ | と書いた上で,25 番への relay ができないモードになってしまうと言う部分.これが,どうしても解決できずに,どこかで見た,submission ポートで送ってみたら,ちゃんと認証した上で送信してくれることが分かったので,この設定にしておくことに. | ||
+ | |||
+ | |||
+ | ==== 参考情報 ==== | ||
+ | * FreeBSD 12 で自宅サーバ作成 メールサーバ編:https:// | ||
+ | * DNS 〜 dovecot まで,かなり充実した記事. | ||
+ | * Amazon SES とポストフィックスの統合:https:// | ||
+ | * Amazon の書いてくれている文章.ここで submission port を利用していたので,465 に拘らずに行けることが分かった. | ||
行 66: | 行 146: | ||
zlib_save_level = 6 | zlib_save_level = 6 | ||
} | } | ||
+ | </ | ||
+ | |||
+ | [2023-04-29] | ||
+ | |||
+ | 追記: | ||
+ | |||
+ | mdbox を見ても,テキストで保存されていた. | ||
+ | |||
+ | plugin lda の中の mail_plugin にも zlib を追記しないと動かなかったかもしれない. | ||
+ | |||
+ | < | ||
+ | protocol lda { | ||
+ | deliver_log_format = msgid=%m: %$ | ||
+ | info_log_path = / | ||
+ | log_path = / | ||
+ | mail_plugins = sieve zlib | ||
+ | ... | ||
</ | </ | ||
行 94: | 行 191: | ||
</ | </ | ||
+ | イコールのあとの ”<” は typo でないので注意. | ||
+ | |||
+ | === 参考情報 === | ||
+ | * https:// | ||
+ | * REMSYSTEM TECHLOG:CentOSのPostfixとDovecotにSSLを設定して安全に通信を行う | ||
+ | * SSL/TLS 周りの設定を,Let' | ||
==== doveadm コマンド ==== | ==== doveadm コマンド ==== | ||
行 100: | 行 203: | ||
doveadm の man の中に,色々なコマンドが書いてあり,doveadm-command という名前で man が準備されている. | doveadm の man の中に,色々なコマンドが書いてあり,doveadm-command という名前で man が準備されている. | ||
基本的に root (または,mail ユーザ)でないと動作しない. | 基本的に root (または,mail ユーザ)でないと動作しない. | ||
+ | |||
+ | === 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 | ||
=== doveadm search === | === doveadm search === | ||
行 174: | 行 293: | ||
== 基本 == | == 基本 == | ||
+ | メールボックスの中で設定されているフォルダに関する情報を得るためのコマンド. | ||
== 具体例 == | == 具体例 == | ||
+ | |||
+ | * 全フォルダの利用サイズを取得したい. < | ||
+ | % doveadm -f table mailbox status -u skk.bps@sakaki.works " | ||
+ | * フォルダのサイズ順にソートする < | ||
+ | % doveadm -f table mailbox status -u skk.bps@sakaki.works " | ||
+ | |||
+ | * 特定フォルダの利用サイズを取得したい. < | ||
+ | % doveadm -f table mailbox status -u skk.bps@sakaki.works " | ||
+ | * ちゃんと調査しきれていないが,vsize は dbox の中に記述されている各メールサイズを足し算したものなのではないか?と想像している.実際に利用されているストレージ量が算出されているわけではなさそう. | ||
行 186: | 行 314: | ||
== 基本 == | == 基本 == | ||
- | 以下が dovecot.conf に書いてある場合にのみ,利用できるコマンド. | + | 以下が dovecot.conf に書いてある場合にのみ,利用できるコマンド.現状では特に quota を設定していないので,設定の仕方は分からない. |
< | < | ||
行 197: | 行 325: | ||
== 具体例 == | == 具体例 == | ||
+ | |||
+ | * 特定ユーザが利用しているストレージ情報を得る.< | ||
+ | % doveadm quota get -u skk.bps@sakaki.works | ||
+ | </ | ||
行 207: | 行 339: | ||
== 基本 == | == 基本 == | ||
+ | そのうち書きたい.多分,コマンドラインでサーバ間の sync を行うなども可能だと思われる.imapsync の代わりとして利用できそうな気がする.imapsync より高速だと思われる. | ||
== 具体例 == | == 具体例 == | ||
+ | |||
+ | === 参考情報 === | ||
+ | * mailcow: dockerized documentation:https:// | ||
===== dovecot replicator ===== | ===== dovecot replicator ===== | ||
- | doveadm user で出てくるユーザ全てを同期する.特定ユーザのみ同期したくない場合は,dovecot.passwd.db (passwd-file) の対象ユーザに,以下のような記述をしておく. | + | === 基本 === |
+ | |||
+ | [[https:// | ||
+ | |||
+ | === 設定 === | ||
+ | |||
+ | 以下の設定は,さくら VPS・オンプレマシンの両方に必要. | ||
+ | |||
+ | / | ||
+ | <code ini> | ||
+ | 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 / | ||
+ | plugin { | ||
+ | # mail_replica = remote: | ||
+ | mail_replica = tcp: | ||
+ | } | ||
+ | |||
+ | 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'' | ||
+ | # in 2 seconds, return success anyway. | ||
+ | replication_sync_timeout = 10 | ||
+ | } | ||
+ | |||
+ | doveadm_password = password | ||
+ | </ | ||
+ | |||
+ | 大事なのは,mail_replica の辺りで,ssh を使う方法と TCP を使う方法が存在している. | ||
+ | |||
+ | ssh 経由で行う場合は,root でのログインを有効にしないと行けないので,sshd において,以下のような設定をしておきつつ,鍵をお互いの root/ | ||
< | < | ||
- | username: | + | ## 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 は必要ないと思われるが,消すのがめんどくさいので残してある. | ||
- | master/ | + | dsync では,doveadm user で出てくるユーザ全てを同期してしまう.特定ユーザのみ同期したくない場合は,dovecot.passwd.db (passwd-file) |
+ | < | ||
+ | username: | ||
+ | </ | ||
+ | 多くのページにて,userdb_ prefix がいらない,と書いてあった気がするが,結局つけなければ動作しなかった. | ||
+ | === 参考情報 === | ||
+ | * Replication with dsync:https:// | ||
+ | * Replication with dsync:https:// | ||
+ | * 全ての情報が,この二つのページに集約されている. | ||
+ | * https:// | ||
+ | * 日本語情報.結構しっかりまとまっている. | ||
===== dovecot FTS 設定 ===== | ===== dovecot FTS 設定 ===== | ||
- | * FTS エンジンに xabian,solr などがある. | + | === 基本 === |
- | * xabian は使いものにならなかった. | + | |
- | * solr は java のインストールなど時間がかかったが,安定して動作 | + | |
- | ===== サーバサイドでのフォルダ分け ===== | + | * FTS エンジンには xapian,solr などがある. |
- | * sieve と replicator の相性が悪い気がする. | + | * xapian は使いものにならなかった.5 日間ほど動かしておいてみたが,ストレージへのアクセスが 10MB/s 〜 20MB/s が続いているのにいつまでも終了せず.replicator |
- | * sieve は記述言語の癖が大きいのと,記述ミスをするとメールがなくなる時があり,なかなか恐い. | + | * solr は java のインストールなど時間がかかったが,安定して動作. |
- | * imapfilter | + | * 全文検索は,PC のメールクライアントだと実感しにくい.imap に対して search コマンドを発行しているかどうか. |
+ | * iPhone のメールアプリにおける検索は,imap search を発行している.検索してみると,爆速になっているのを実感できる. | ||
+ | * Thunderbird | ||
+ | * doveadm search は,この全文検索を活用している(はず). | ||
+ | * TODO: | ||
+ | * 未:日本語 tokenizer 対応 | ||
+ | * https:// | ||
+ | * 公式にも言語別設定が書いてある. | ||
+ | * https:// | ||
+ | * Solr 使った日本語向けの設定が日本語で書いてある. | ||
+ | |||
+ | === solr インストール === | ||
- | ===== postfix 基本設定 ===== | + | Apache Solr は,Java で動作する全文検索エンジンらしい.動作自体は,http:// |
- | (2007 年時点の設定参照) | + | |
- | ==== 変更点1 ==== | + | 以下のような形で,textproc/apache-solr をインストールする. |
- | SSL/TLS に対応した | + | |
- | ==== 変更点2 ==== | + | / |
- | relay_host で SMTPS 対応しようとして,失敗した. | + | |
- | そのかわり,Amazon SES は 465(smtps) だけでなく,587(submission) | + | |
+ | < | ||
+ | % portmaster -D textproc/ | ||
+ | % echo " | ||
+ | % / | ||
+ | </ | ||
+ | === 設定 === | ||
+ | |||
+ | 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:// | ||
+ | fts_autoindex = yes | ||
+ | fts_autoindex_exclude = \Trash | ||
+ | fts_decoder = decode2text | ||
+ | } | ||
+ | |||
+ | service indexer-worker { | ||
+ | vsz_limit = 4G | ||
+ | process_limit = 2 | ||
+ | } | ||
+ | |||
+ | service decode2text { | ||
+ | executable = script / | ||
+ | user = dovecot | ||
+ | unix_listener decode2text { | ||
+ | mode = 0666 | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | === 参考情報 === | ||
+ | * dovecot 正式情報:Full Text Search (FTS) plugin:https:// | ||
+ | |||
+ | ===== サーバサイドでのフォルダ分け ===== | ||
+ | * sieve と replicator の相性が悪い気がする. | ||
+ | * sieve は記述言語の癖が大きいのと,記述ミスをするとメールがなくなる時があり,なかなか恐い. | ||
+ | * [[imapfilter]] は,lua というプログラミング言語で記述するため,振り分けルールの中の記述自由度が高い.変数なども使える.記述を間違った際は,imapfilter が動作しないだけなので,メール紛失の危険が低い. | ||
===== spamassassin 設定 ===== | ===== spamassassin 設定 ===== | ||
行 472: | 行 721: | ||
* %d を有効にするために,ユーザの後ろには必ず@でドメインを指定する必要がある.virtual host を有効にするにはこの設定が必要. | * %d を有効にするために,ユーザの後ろには必ず@でドメインを指定する必要がある.virtual host を有効にするにはこの設定が必要. | ||
* CRAM-MD5 とかのハッシュ値を作成するには,dovecotpw というコマンドを利用すれば簡単に作成できる. | * CRAM-MD5 とかのハッシュ値を作成するには,dovecotpw というコマンドを利用すれば簡単に作成できる. | ||
+ | * [2021-05-27]追記:現状の設定ファイルの内容を確認するには,doveconf を利用する. | ||
+ | < | ||
+ | % doveconf -n | ||
+ | </ | ||
===== 参考文献 | ===== 参考文献 | ||
行 518: | 行 771: | ||
+ | ---- | ||
+ | このページへのアクセス | ||
+ | 今日: {{counter|today}} / 昨日: {{counter|yesterday}} | ||
+ | 総計: {{counter|total}} | ||