差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
mail [2021/05/27 11:31] – 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 設定 ===== | ||
行 285: | 行 461: | ||
fts_solr プラグインを入れることで,メールボックスにメールが到着した際に,java な solr プロセスを立ち上げてインデックスを作成している模様. | fts_solr プラグインを入れることで,メールボックスにメールが到着した際に,java な solr プロセスを立ち上げてインデックスを作成している模様. | ||
- | 設定の中にある indexer-worker は,こういう名前のプロセスが立ち上がる.xapian を設定した際も立ち上がっていたので,FTS 全般で動作する親プロセスみたいなものだと思われる.process_limit を指定しているのは,xapian が阿呆みたいにプロセスを立ち上げまくって,HDD を苛め抜いていたので,制限をかけた名残.これが残ったままでも Solr 自体は快調に動いてる. | + | 設定の中にある indexer-worker は,indexer-worker という名前のプロセスが立ち上がる.xapian を設定した際も立ち上がっていたので,FTS 全般で動作する親プロセスみたいなものだと思われる.process_limit を指定しているのは,xapian が阿呆みたいにプロセスを立ち上げまくって,HDD を苛め抜いていたので,制限をかけた名残.これが残ったままでも Solr 自体は快調に動いてる. |
text2decode は,xapian を設定している際に見かけた,添付ファイルや mime encode されたメールも処理できるようなスクリプトだと思われる.一応指定してあって問題はなさそう. | text2decode は,xapian を設定している際に見かけた,添付ファイルや mime encode されたメールも処理できるようなスクリプトだと思われる.一応指定してあって問題はなさそう. | ||
行 321: | 行 497: | ||
* sieve と replicator の相性が悪い気がする. | * sieve と replicator の相性が悪い気がする. | ||
* sieve は記述言語の癖が大きいのと,記述ミスをするとメールがなくなる時があり,なかなか恐い. | * sieve は記述言語の癖が大きいのと,記述ミスをするとメールがなくなる時があり,なかなか恐い. | ||
- | * imapfilter は,lua というプログラミング言語で記述するため,振り分けルールの中の記述自由度が高い.変数なども使える.記述を間違った際は,imapfilter が動作しないだけなので,メール紛失の危険が低い. | + | * [[imapfilter]] は,lua というプログラミング言語で記述するため,振り分けルールの中の記述自由度が高い.変数なども使える.記述を間違った際は,imapfilter が動作しないだけなので,メール紛失の危険が低い. |
- | + | ||
- | ===== postfix 基本設定 ===== | + | |
- | (2007 年時点の設定参照) | + | |
- | + | ||
- | ==== 変更点1 ==== | + | |
- | SSL/TLS に対応した | + | |
- | + | ||
- | ==== 変更点2 ==== | + | |
- | relay_host で SMTPS 対応しようとして,失敗した. | + | |
- | そのかわり,Amazon SES は 465(smtps) だけでなく,587(submission) でも動作することが分かった. | + | |
- | + | ||
===== spamassassin 設定 ===== | ===== spamassassin 設定 ===== | ||
行 557: | 行 721: | ||
* %d を有効にするために,ユーザの後ろには必ず@でドメインを指定する必要がある.virtual host を有効にするにはこの設定が必要. | * %d を有効にするために,ユーザの後ろには必ず@でドメインを指定する必要がある.virtual host を有効にするにはこの設定が必要. | ||
* CRAM-MD5 とかのハッシュ値を作成するには,dovecotpw というコマンドを利用すれば簡単に作成できる. | * CRAM-MD5 とかのハッシュ値を作成するには,dovecotpw というコマンドを利用すれば簡単に作成できる. | ||
+ | * [2021-05-27]追記:現状の設定ファイルの内容を確認するには,doveconf を利用する. | ||
+ | < | ||
+ | % doveconf -n | ||
+ | </ | ||
===== 参考文献 | ===== 参考文献 | ||
行 603: | 行 771: | ||
+ | ---- | ||
+ | このページへのアクセス | ||
+ | 今日: {{counter|today}} / 昨日: {{counter|yesterday}} | ||
+ | 総計: {{counter|total}} | ||