差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| mail [2021/05/27 11:14] – 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 | ||
| + | ... | ||
| </ | </ | ||
| 行 106: | 行 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 === | ||
| 行 226: | 行 339: | ||
| == 基本 == | == 基本 == | ||
| + | そのうち書きたい.多分,コマンドラインでサーバ間の sync を行うなども可能だと思われる.imapsync の代わりとして利用できそうな気がする.imapsync より高速だと思われる. | ||
| == 具体例 == | == 具体例 == | ||
| 行 236: | 行 349: | ||
| ===== 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 設定 ===== | ||
| 行 256: | 行 432: | ||
| * xapian は使いものにならなかった.5 日間ほど動かしておいてみたが,ストレージへのアクセスが 10MB/s 〜 20MB/s が続いているのにいつまでも終了せず.replicator との相性か?と思ったが,多分,単品で動かしても安定しないのでは…と思った. | * xapian は使いものにならなかった.5 日間ほど動かしておいてみたが,ストレージへのアクセスが 10MB/s 〜 20MB/s が続いているのにいつまでも終了せず.replicator との相性か?と思ったが,多分,単品で動かしても安定しないのでは…と思った. | ||
| * solr は java のインストールなど時間がかかったが,安定して動作. | * solr は java のインストールなど時間がかかったが,安定して動作. | ||
| + | * 全文検索は,PC のメールクライアントだと実感しにくい.imap に対して search コマンドを発行しているかどうか. | ||
| + | * iPhone のメールアプリにおける検索は,imap search を発行している.検索してみると,爆速になっているのを実感できる. | ||
| + | * Thunderbird は,基本的に Thunderbird が作成したインデックスで検索しているが,Ctrl-Shift-f で出てくる検索ボックスの中の,「サーバー上のメッセージを検索する」にチェックを入れると,imap search コマンドを発行するらしい. | ||
| + | * doveadm search は,この全文検索を活用している(はず). | ||
| * TODO: | * TODO: | ||
| * 未:日本語 tokenizer 対応 | * 未:日本語 tokenizer 対応 | ||
| 行 263: | 行 443: | ||
| * Solr 使った日本語向けの設定が日本語で書いてある. | * Solr 使った日本語向けの設定が日本語で書いてある. | ||
| | | ||
| + | === solr インストール === | ||
| - | === 参考情報 === | + | Apache Solr は,Java で動作する全文検索エンジンらしい.動作自体は,http://localhost: |
| - | * dovecot 正式情報:Full Text Search (FTS) plugin:https://doc.dovecot.org/ | + | |
| - | ===== サーバサイドでのフォルダ分け ===== | + | 以下のような形で,textproc/ |
| - | * sieve と replicator の相性が悪い気がする. | + | |
| - | * sieve は記述言語の癖が大きいのと,記述ミスをするとメールがなくなる時があり,なかなか恐い. | + | |
| - | * imapfilter は,lua というプログラミング言語で記述するため,振り分けルールの中の記述自由度が高い.変数なども使える.記述を間違った際は,imapfilter が動作しないだけなので,メール紛失の危険が低い. | + | |
| - | ===== postfix 基本設定 ===== | + | / |
| - | (2007 年時点の設定参照) | + | |
| - | ==== 変更点1 ==== | + | < |
| - | SSL/TLS に対応した | + | % portmaster -D textproc/ |
| + | % echo " | ||
| + | % / | ||
| + | </code> | ||
| - | ==== 変更点2 | + | === 設定 |
| - | relay_host で SMTPS 対応しようとして,失敗した. | + | |
| - | そのかわり,Amazon SES は 465(smtps) だけでなく,587(submission) でも動作することが分かった. | + | |
| + | 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 設定 ===== | ||
| 行 506: | 行 721: | ||
| * %d を有効にするために,ユーザの後ろには必ず@でドメインを指定する必要がある.virtual host を有効にするにはこの設定が必要. | * %d を有効にするために,ユーザの後ろには必ず@でドメインを指定する必要がある.virtual host を有効にするにはこの設定が必要. | ||
| * CRAM-MD5 とかのハッシュ値を作成するには,dovecotpw というコマンドを利用すれば簡単に作成できる. | * CRAM-MD5 とかのハッシュ値を作成するには,dovecotpw というコマンドを利用すれば簡単に作成できる. | ||
| + | * [2021-05-27]追記:現状の設定ファイルの内容を確認するには,doveconf を利用する. | ||
| + | < | ||
| + | % doveconf -n | ||
| + | </ | ||
| ===== 参考文献 | ===== 参考文献 | ||
| 行 552: | 行 771: | ||
| + | ---- | ||
| + | このページへのアクセス | ||
| + | 今日: {{counter|today}} / 昨日: {{counter|yesterday}} | ||
| + | 総計: {{counter|total}} | ||