7と8のリビジョン間の差分
2021-03-25 18:05:38時点のリビジョン7
サイズ: 7908
コメント:
2021-03-27 09:28:29時点のリビジョン8
サイズ: 8470
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 98: 行 98:
いわゆるsendmail.cf作成準備
行 102: 行 104:

行 110: 行 114:
= 運用メモ = = よくある質問とその答え =

== Q.portsで入れないと駄目なんですか? ==
A.ベースシステムにSASLライブラリが無いのでしょうがないです。
ベースシステムにインストールされたSASLライブラリ付でビルドすることもできないでもないですが、
OSのバージョンアップ時等のメンテナンスがめんどくさくなるのでオススメしません。
行 120: 行 129:
とりあえず再起動で。

CyrusIMAPdとの連携運用

前提条件

  • 動作試験環境: FreeBSD12.2および13.0
  • 事前に OSのインストール および 環境構築 が済ませてあること。

  • 以下の観点から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をインストールする必要がある。

設定目標

  • バーチャルドメインでの運用を前提とし、サーバー側のアカウント情報や各種設定とは独立した運用を目指す。
  • 各種資料を読み解くと、この辺りが混在していて暗黙のウチに動作しているケース(エイリアスの適用など)があるが、今回それを一切許さない。
  • サーバー側はサーバー側で(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_mapsizesasldb_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

とりあえず再起動で。

参考文献

sendmail/cyrus-imapd (最終更新日時 2022-01-06 10:49:07 更新者 NorikatsuShigemura)