サイズ: 3164
コメント:
|
サイズ: 8470
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 7: | 行 7: |
* 今回スケーラビリティ(スケールアウト)は考慮しない。 * つまりsendmailとcyrus imapdは同一サーバー内に存在するものとし、双方をコンテナ化で分離しない。 * 認証(SMTP AUTH)は全てSASLDBを参照する。 |
* スケーラビリティ(スケールアウト)は考慮しない。 * つまりsendmailとcyrus imapdは同一サーバー内に存在するものとし、分離した構成を取らない。 * 認証(SMTP AUTH)は全てSASLDBを参照するものとする。 |
行 11: | 行 11: |
* よってSASLAUTHD導入による権限分けは不要である。 * `ports/mail/sendmail` をインストールするが現時点(2021年03月23日)でいくらか不備がある。 * `cyruslookup.patch` にはいくつかのバグがあり [[https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=254495|mail/sendmail: overhaul cyruslookup.patch]] にて修正依頼中。 |
* よってSASLAUTHDの導入の動機として、権限分けにともなう、権限ミスマッチを解消する目的があるが、本構成では不要である。 * `ports/mail/sendmail` をインストールするが現時点(2021年03月25日)でいくらか不備がある。 |
行 17: | 行 16: |
* 本問題を解消するために、CFLAGSに細工して対応しています。 | |
行 18: | 行 18: |
* 設定目標としては以下の通りとする。 * バーチャルドメインでの運用を前提とし、サーバー側のアカウント等の情報と完全に独立させる。 * 従来の資料を読み解くと、この辺りが混在していて暗黙のウチに動作しているケース(エイリアスの適用など)があるが、今回それは一切許さない。 * サーバー側はサーバー側で(root宛のメールなど)、バーチャルドメイン側はバーチャルドメイン側で、切り離された環境を構築する。 * その効能の一つとして、cyrus imapd側で持つメールボックスの存在確認をリアルタイムで行えるようにする。 |
* sendmailをインストール後にmilterをインストールする必要がある。 == 設定目標 == * バーチャルドメインでの運用を前提とし、サーバー側のアカウント情報や各種設定とは独立した運用を目指す。 * 各種資料を読み解くと、この辺りが混在していて暗黙のウチに動作しているケース(エイリアスの適用など)があるが、今回それを一切許さない。 * サーバー側はサーバー側で(root宛のメールなど)、バーチャルドメイン側はバーチャルドメイン側で、切り離された環境を構築する。 * その効能の一つとして、cyrus imapd側で持つメールボックスの存在確認をリアルタイムで行えるようにする。 * メールボックスが存在しない宛先への受信拒否が行える。 * 従来、一旦受信してから受信拒否という流れになるが、その場合の対応がバウンスメールの発行となる。 * いわゆるスパムメールに対するバウンスメールの送信は無意味なので、その分、キューイングや再送といった負荷が無くなる。 = インストール = |
行 41: | 行 48: |
* `TLS_EC=2`: ECC暗号サポート/ECC暗号(特にキー交換の)指定無し(OpenSSLデフォルトに準拠) * (参考)`TLS_EC`: ECC暗号サポート/ECC暗号(特にキー交換は)prime256v1のみ指定(変更不可) * `_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE`: いわゆる一般的なTLSサーバーと同じ指定(フルチェイン)の仕方にする * `_FFR_TLS_ALTNAMES`: コモンネームだけでなくSANsも評価する * `_FFR_QUEUE_GROUP_SORTORDER`: キューグループ単位でソート順を指定可能にする(本運用では取り上げない) |
|
行 45: | 行 58: |
= セットアップ = == /usr/local/lib/sasl2/Sendmail.conf == 以下の内容のファイルを作成する。 {{{ pwcheck_method: auxprop auxprop_plugin: sasldb }}} ※SendmailのSASLサポートコードにはSASLの設定に関するコードが含まれておらず、 SASLライブラリがケアしてる設定ファイルにて設定を行う必要がある。 適用可能なオプションとしては下記の物があるが、CyruIMAPd側の設定との調整を考えるとデフォルトのままで良いかと。 ||<#FFFF00> 設定名 ||<#FFFF00> デフォルト値 ||<#FFFF00> 意味 || || `sasldb_path` || `/usr/local/etc/sasldb2` || SASLDBファイル(本件ではLMDB)のパス || || `sasldb_mapsize` || `1048576` バイト || (LMDB固有)全ユーザーをオンメモリにマッピングするためのサイズ || || `sasldb_maxreaders` || `126` || (LMDB固有)SASLDBファイルを同時アクセス可能な最大セッション(プロセス)数 || * 特に `sasldb_mapsize` と `sasldb_maxreaders` の設定はユーザー数が多くなってきたときに調整が必要となる。 * ※IMAPサーバー側で同時アクセス数のリークを確認。再起動で改善する。 {{{#!wiki note SASLクライアントが参照すべき設定ファイル名は sasl_server_init() 関数に引き渡される appname 引数により決定される。 マニュアルに明記されてないケースで調査が必要な際は参考までに。 https://www.cyrusimap.org/sasl/sasl/reference/manpages/library/sasl_server_init.html }}} == /etc/mail/Makefile.local == 以下のファイルを作成する。 {{{#!highlight makefile numbers=disable SENDMAIL_CF_DIR=/usr/local/share/sendmail/cf }}} == /etc/mail/ホスト名.mc == いわゆるsendmail.cf作成準備 {{{#!highlight shell numbers=disable ln -s freebsd.submit.mc /etc/mail/$(hostname).submit.mc cd /etc/mail && make }}} = 切り替え = {{{#!highlight shell numbers=disable cd /usr/ports/mail/sendmail && make mailer.conf }}} なお切り戻しは `make mailer.base` の実行となる。 = よくある質問とその答え = == Q.portsで入れないと駄目なんですか? == A.ベースシステムにSASLライブラリが無いのでしょうがないです。 ベースシステムにインストールされたSASLライブラリ付でビルドすることもできないでもないですが、 OSのバージョンアップ時等のメンテナンスがめんどくさくなるのでオススメしません。 == Q.SASL unable to open MDB transaction: MDB_READERS_FULL: Environment maxreaders limit reached が出てIMAPサーバーに接続できません == A.以下のコマンドを実行して、LMDBファイルに接続しているセッション数およびプロセスIDを確認する。 {{{#!highlight shell numbers=disable mdb_stat -ne /usr/local/etc/sasldb2 mdb_stat -nr /usr/local/etc/sasldb2 }}} とりあえず再起動で。 = 参考文献 = * [[https://www.cyrusimap.org/sasl/sasl/options.html|Cyrus SASL documentation — Options]] * [[https://www.cyrusimap.org/sasl/sasl/reference/manpages/library/sasl_server_init.html|sasl_server_init - SASL server authentication initialization]] * [[http://jmaimon.com/sendmail/anfi.homeunix.net/sendmail/rtcyrus2.html|Real Time Cyrus Integration Version 2 (sendmail,cyrus)]] * [[http://jmaimon.com/sendmail/anfi.homeunix.net/sendmail/mrs.html|Mailertable Rule Sets (sendmail)]] * [[http://jmaimon.com/sendmail/anfi.homeunix.net/sendmail/cyrusv2.html|cyrusv2 mailer - release B (sendmail)]] |
CyrusIMAPdとの連携運用
前提条件
- 動作試験環境: FreeBSD12.2および13.0
- 以下の観点からSASLAUTHDに依存しない。
- スケーラビリティ(スケールアウト)は考慮しない。
- つまりsendmailとcyrus imapdは同一サーバー内に存在するものとし、分離した構成を取らない。
- 認証(SMTP AUTH)は全てSASLDBを参照するものとする。
- またSASLDBを参照するにあたって、sendmailおよびcyrus imapd双方に権限上のミスマッチは存在していない。
- よってSASLAUTHDの導入の動機として、権限分けにともなう、権限ミスマッチを解消する目的があるが、本構成では不要である。
ports/mail/sendmail をインストールするが現時点(2021年03月25日)でいくらか不備がある。
- SSL回りの設定方法がいびつなので、これも修正していきたいです。
- 現在のsendmailのSSL証明書の指定方法がよろしくない。
- ECC暗号の使用がprime256v1のみに限定されている。
- 本問題を解消するために、CFLAGSに細工して対応しています。
- milterをインストール(コンパイル)する順番(依存)が存在しているが、見えにくい。
- sendmailをインストール後にmilterをインストールする必要がある。
- SSL回りの設定方法がいびつなので、これも修正していきたいです。
設定目標
- バーチャルドメインでの運用を前提とし、サーバー側のアカウント情報や各種設定とは独立した運用を目指す。
- 各種資料を読み解くと、この辺りが混在していて暗黙のウチに動作しているケース(エイリアスの適用など)があるが、今回それを一切許さない。
- サーバー側はサーバー側で(root宛のメールなど)、バーチャルドメイン側はバーチャルドメイン側で、切り離された環境を構築する。
- その効能の一つとして、cyrus imapd側で持つメールボックスの存在確認をリアルタイムで行えるようにする。
- メールボックスが存在しない宛先への受信拒否が行える。
- 従来、一旦受信してから受信拒否という流れになるが、その場合の対応がバウンスメールの発行となる。
- いわゆるスパムメールに対するバウンスメールの送信は無意味なので、その分、キューイングや再送といった負荷が無くなる。
インストール
/etc/make.conf
以下の内容を追記する。
# for sendmail
mail_sendmail_SET= LA NIS SEM TLS DANE SASL SHMEM MILTER SMTPUTF8
mail_sendmail_SET+= SOCKETMAP BLACKLISTD CYRUSLOOKUP PICKY_HELO_CHECK
mail_sendmail_UNSET= BDB LDAP SASLAUTHD
/usr/local/etc/ports.conf
以下の内容を追記する。
mail/sendmail: CFLAGS=-O2 -pipe -DTLS_EC=2 -D_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE -D_FFR_TLS_ALTNAMES -D_FFR_QUEUE_GROUP_SORTORDER
TLS_EC=2: ECC暗号サポート/ECC暗号(特にキー交換の)指定無し(OpenSSLデフォルトに準拠)
(参考)TLS_EC: ECC暗号サポート/ECC暗号(特にキー交換は)prime256v1のみ指定(変更不可)
_FFR_TLS_USE_CERTIFICATE_CHAIN_FILE: いわゆる一般的なTLSサーバーと同じ指定(フルチェイン)の仕方にする
_FFR_TLS_ALTNAMES: コモンネームだけでなくSANsも評価する
_FFR_QUEUE_GROUP_SORTORDER: キューグループ単位でソート順を指定可能にする(本運用では取り上げない)
インストール
cd /usr/ports/mail/sendmail && make install
セットアップ
/usr/local/lib/sasl2/Sendmail.conf
以下の内容のファイルを作成する。
pwcheck_method: auxprop auxprop_plugin: sasldb
※SendmailのSASLサポートコードにはSASLの設定に関するコードが含まれておらず、 SASLライブラリがケアしてる設定ファイルにて設定を行う必要がある。
適用可能なオプションとしては下記の物があるが、CyruIMAPd側の設定との調整を考えるとデフォルトのままで良いかと。
設定名 |
デフォルト値 |
意味 |
sasldb_path |
/usr/local/etc/sasldb2 |
SASLDBファイル(本件ではLMDB)のパス |
sasldb_mapsize |
1048576 バイト |
(LMDB固有)全ユーザーをオンメモリにマッピングするためのサイズ |
sasldb_maxreaders |
126 |
(LMDB固有)SASLDBファイルを同時アクセス可能な最大セッション(プロセス)数 |
特に sasldb_mapsize と sasldb_maxreaders の設定はユーザー数が多くなってきたときに調整が必要となる。
- ※IMAPサーバー側で同時アクセス数のリークを確認。再起動で改善する。
SASLクライアントが参照すべき設定ファイル名は sasl_server_init() 関数に引き渡される appname 引数により決定される。 マニュアルに明記されてないケースで調査が必要な際は参考までに。
https://www.cyrusimap.org/sasl/sasl/reference/manpages/library/sasl_server_init.html
/etc/mail/Makefile.local
以下のファイルを作成する。
SENDMAIL_CF_DIR=/usr/local/share/sendmail/cf
/etc/mail/ホスト名.mc
いわゆるsendmail.cf作成準備
ln -s freebsd.submit.mc /etc/mail/$(hostname).submit.mc
cd /etc/mail && make
切り替え
cd /usr/ports/mail/sendmail && make mailer.conf
なお切り戻しは make mailer.base の実行となる。
よくある質問とその答え
Q.portsで入れないと駄目なんですか?
A.ベースシステムにSASLライブラリが無いのでしょうがないです。 ベースシステムにインストールされたSASLライブラリ付でビルドすることもできないでもないですが、 OSのバージョンアップ時等のメンテナンスがめんどくさくなるのでオススメしません。
Q.SASL unable to open MDB transaction: MDB_READERS_FULL: Environment maxreaders limit reached が出てIMAPサーバーに接続できません
A.以下のコマンドを実行して、LMDBファイルに接続しているセッション数およびプロセスIDを確認する。
mdb_stat -ne /usr/local/etc/sasldb2
mdb_stat -nr /usr/local/etc/sasldb2
とりあえず再起動で。