pikesaku’s blog

個人的な勉強メモです。記載内容について一切の責任は持ちません。

opendkim環境構築

環境

RHEL7

やりたいこと

メール送信時にDKIM署名するサーバの構築

手順

①OpenDKIMパッケージインストール

# rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# yum -y --enablerepo=rhui-REGION-rhel-server-optional install sendmail-milter
# yum install -y opendkim --enablerepo=epel

②OpenDKIM設定ファイル編集

  • /etc/opendkim.conf
PidFile /var/run/opendkim/opendkim.pid
Mode    s
Syslog  yes
SyslogSuccess   yes
LogWhy  yes
UserID  opendkim:opendkim
Socket  inet:8891@localhost
Umask   002
SendReports     no
SoftwareHeader  yes
Canonicalization        relaxed/relaxed
MinimumKeyBits  1024
KeyTable        /etc/opendkim/KeyTable
SigningTable    refile:/etc/opendkim/SigningTable
OversignHeaders From
  • /etc/opendkim/KeyTable
s1._domainkey.sa.example.com sa.example.com:s1:/etc/opendkim/keys/s1.private
  • /etc/opendkim/SigningTable
*@sa.example.com s1._domainkey.sa.example.com

★ポイント★
・受信検証しないのでModeはs
・受信検証しないけど、SendReports noで明示的に認証失敗レポート機能無効化
・KeyTableはDNSレコードと鍵ファイルの紐づけ
・SigningTableはFromアドレスとDNSレコードの紐づけ
・利用するドメイン/署名が1個だけの場合は、KeyTable・SigningTableは利用せず、domain・KeyFileに定義すればOK。
・今回は1個だけだが、拡張性を考慮しKeyTable・SigningTableを利用

③鍵ファイル生成

# opendkim-genkey -b 2048 --directory=/etc/opendkim/keys --selector=s1 --domain=sa.example.com
# chown opendkim. /etc/opendkim/keys/*

Postfix設定ファイル編集

参考にしたサイトの通り以下追加

milter_default_action = accept
non_smtpd_milters = $smtpd_milters
smtpd_milters = inet:127.0.0.1:8891

⑤動作確認

受信側は何の情報をもとに送信元検証をするのか?EnvFrom/From Header_

→どちらでもない。DKIM-Signatureヘッダにあるドメイン名(dタグ)や送信アドレス(iタグ)で実施
f:id:pikesaku:20200224003532p:plain

OpenDKIMでDKIM-Signatureヘッダ付与時、エンベロープFrom/Fromヘッダどちらをdタグに付与するの?

Fromヘッダのみがマッチする場合

$ echo test | mutt -e 'set use_envelope_from=yes' -e 'set envelope_from_address="hoge@hoge.com"' -e 'my_hdr From: hoge@sa.example.com' 宛先アドレス

DKIMヘッダ付いた!

ENV Fromのみがマッチする場合

$ echo test | mutt -e 'set use_envelope_from=yes' -e 'set envelope_from_address="hoge@sa.example.com"' -e 'my_hdr From: hoge@hoge.com' 宛先アドレス

DKIMヘッダ付かず!

結論はFromヘッダを見てる!

どんなヘッダがつくの?

yumで依存関係エラーが出たときは、、、

こんなコマンドたたく

# yum repolist all | egrep -v "^repo|Loaded plugins" | cut -d"/" -f1 | xargs -i yum --enablerepo={} provides '*libmilter.so*'

rhel7にopendkim入れようとしたら、依存関係エラーでたので、上記コマンドを考えた!
結果、
rhui-REGION-rhel-server-optional

レポジトリの

sendmail-milter

パッケージに含まれる事が判明!

Postfixのcontent_filterについて

気づいた事

SMTPD(tcp/25) -> FILTER(tcp/XX) -> SMTPD(tcp/10026)
上記みたいにPostfixは2つのポートオープンが必須と思ってたが違った。

f:id:pikesaku:20200216164307p:plain

上記方式であれば、tcp25だけでOK
filterがsendmailコマンドでキューに戻す。

ただ、上記方式の場合、以下問題がある。
・性能悪い
・キューに戻す際にSMTP使わないのでエラー発生時にバウンスする可能性大
・header_check等がフィルタ後も再実行される

f:id:pikesaku:20200216164759p:plain

なので、結論としては複数ポートを使う方が良い。

Sysprepについて

【Windows10】sysprepとは何か? | SEブログ
 

PC 特有の情報を消去します。実際には SID(エスアイディー)という OS 特有な情報を削除します。また、他にも以下の設定も消去されます。
イベントログ
ネットワークの設定
OS のライセンス
SID は、平たく言うと、ユーザーやグループを識別するものです。

 
Windows 10 での Sysprep を用いたマスターイメージの作成に関する注意点・推奨事項 | Microsoft Docs

2. マスター イメージの前提条件
条件 A. Sysprep を実施していること
条件 B. ボリュームライセンス契約より入手したイメージを用いて構築すること
実際のイメージの展開にあたって、Windows の再イメージング権はボリューム ライセンスのメディアにのみ付与しています。OEM ベンダー以外のお客様はボリューム ライセンスをご契約の上、イメージ入手してください。ボリュームライセンスのイメージをつかって、実際のマシンに展開する際に個々のマシンに対するドライバーは、提供元より個別に入手しイメージにインストールしてください。

なお、OEM のマシンには、上記の再イメージング権が付与されておらず、OEM ベンダー以外のお客様は権利上、OEM のマシンを利用した Sysprep 実施、マスタイメージの作成は許可されていません。また、イメージ自体にも OEM ベンダー様によるカスタマイズが行われていることで想定されないエラーなども発生する可能性があります。

3. マスターイメージとして設定可能な範囲
Sysprep のツール自体は現行 OS でサポートされていますが、設定可能な範囲は実際に Sysprep を実行して得られた結果の範囲までです。OS やアプリケーションの設定によってはマスターイメージに含めることができない場合があります。また、OS の設定箇所は非常に多数にわたり、それらすべての設定できる箇所と設定できない箇所を網羅するリストはありませんので、あらかじめ検証環境にて設定可能か検証してください。

6. 複数ユーザープロファイルが存在する環境
複数のユーザー プロファイルが存在するシナリオにおいて Sysprep の使用は想定されておらず、既存のユーザー プロファイルが破損する等の影響を弊社に寄せられています。マスターイメージの作成において、複数のユーザーでログオンし作業するメリットは通常ありませんので、複数ユーザー アカウントがある状態での作業はお控えください。

https://milestone-of-se.nesuke.com/sv-basic/windows-basic/sysprep-general/

簡単な実行方法説明あり。

Windows 10のOSイメージ展開の新常識(その2)――Sysprepを成功させるポイント:企業ユーザーに贈るWindows 10への乗り換え案内(35) - @IT

具体的な手順あり。

APPEND UTF8について

Courier-imapをVer5にすると、Outlookとかでメール移動時にappendコマンドが実行され、以下警告が出るようになる。

[ALERT] Your IMAP client does not appear to correctly implement Unicode messages, see https://tools.ietf.org/html/rfc6855.html

原因は、以下に説明あり。
Courier Mail Server / Re: [Courier-imap] Outlook 2016 with Courier-IMAP 5.0.8 append alert
RFC 6855 - IMAP Support for UTF-8
Issue 34138: imaplib RFC 6855 issue - Python tracker

RFC6855に準じたアクセスをすれば、Courier-IMAPが警告を出さないだろうと考え、思考錯誤アクセスしたが、失敗する。。。

通常

* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS ENABLE UTF8=ACCEPT] Courier-IMAP ready. Copyright 1998-2018 Double Precision, Inc.  See COPYING for distribution information.
a LOGIN "hoge" "hoge"
a OK LOGIN Ok.
a APPEND INBOX {33}
+ OK
From: "a" <a@hoge.go.jp>


a

a OK [APPENDUID 578246162 50] APPEND Ok.

失敗1

* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS ENABLE UTF8=ACCEPT] Courier-IMAP ready. Copyright 1998-2018 Double Precision, Inc.  See COPYING for distribution information.
a LOGIN "hoge" "hoge"
a OK LOGIN Ok.
a ENABLE UTF8=ACCEPT
* ENABLED UTF8=ACCEPT
a OK Options enabled
a APPEND INBOX UTF8 ~{36}
+ OK
From: "あ" <a@hoge.go.jp>

Test

a NO Error in IMAP command received by server.

失敗2

* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS ENABLE UTF8=ACCEPT] Courier-IMAP ready. Copyright 1998-2018 Double Precision, Inc.  See COPYING for distribution information.
a LOGIN "hoge" "hoge"
a OK LOGIN Ok.
a ENABLE UTF8=ACCEPT
* ENABLED UTF8=ACCEPT
a OK Options enabled
a APPEND INBOX UTF8 {36}
+ OK
From: "あ" <a@hoge.go.jp>

Test

* OK [ALERT] Your IMAP client does not appear to correctly implement Unicode messages, see https://tools.ietf.org/html/rfc6855.html
a OK [APPENDUID 578246162 52] APPEND Ok.

失敗3

* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS ENABLE UTF8=ACCEPT] Courier-IMAP ready. Copyright 1998-2018 Double Precision, Inc.  See COPYING for distribution information.
a LOGIN "hoge" "hoge"
a OK LOGIN Ok.
a ENABLE UTF8=ACCEPT
* ENABLED UTF8=ACCEPT
a OK Options enabled
a APPEND INBOX UTF8 (~{36}
From: "あ" <a@hoge.go.jp>

Test
)
a NO Error in IMAP command received by server.
From: NO Error in IMAP command received by server.
* NO Error in IMAP command received by server.
Test NO Error in IMAP command received by server.
* NO Error in IMAP command received by server.

失敗4

* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS ENABLE UTF8=ACCEPT] Courier-IMAP ready. Copyright 1998-2018 Double Precision, Inc.  See COPYING for distribution information.
a LOGIN "hoge" "hoge"
a OK LOGIN Ok.
a ENABLE UTF8=ACCEPT
* ENABLED UTF8=ACCEPT
a OK Options enabled
a APPEND INBOX UTF8 ~{36+}
a NO Error in IMAP command received by server.
From: "あ" <a@hoge.go.jp>

Test
From: NO Error in IMAP command received by server.

* NO Error in IMAP command received by server.
Test NO Error in IMAP command received by server.
* NO Error in IMAP command received by server.

失敗5

* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS ENABLE UTF8=ACCEPT] Courier-IMAP ready. Copyright 1998-2018 Double Precision, Inc.  See COPYING for distribution information.
a LOGIN "hoge" "hoge"
a OK LOGIN Ok.
a ENABLE UTF8=ACCEPT
* ENABLED UTF8=ACCEPT
a OK Options enabled
a APPEND INBOX UTF8 ~{36+}
a NO Error in IMAP command received by server.
From: "あ" <a@hoge.go.jp>

Test
From: NO Error in IMAP command received by server.

* NO Error in IMAP command received by server.
Test NO Error in IMAP command received by server.
* NO Error in IMAP command received by server.

courier-imap(4.15.1)検証環境構築

環境

AWS EC2
AMI-ID: spel-minimal-centos-7-hvm-2019.04.1.x86_64-gp2 (ami-0022ebeda476ffd59)

参考URL

Courier-IMAP

courier-imapインストール方法調査

Ver 5.0.8と基本的に同じ。(courtier-unicode不要に見えたが、結局必要だった)

環境構築

OSセットアップ

RHEL7のセットアップを楽にする - pikesaku’s blog

$ curl -o ./epel-release-latest-7.noarch.rpm   https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ sudo rpm -ivh ./epel-release-latest-7.noarch.rpm
$ sudo yum install -y ansible git
$ git clone https://github.com/pikesaku/setup_rhel7.git
$ sudo ansible-playbook ./setup_rhel7/setup.yml
$ sudo yum install -y bzip2

必要パッケージインストール

$ sudo yum -y install gcc gcc-c++ gamin libtool libtool-ltdl libtool-ltdl-devel expect gdbm-devel libidn-devel openssl-devel

※openssl-develはcourier-imapインストールでmakeコマンド実行し判明。

courier-unicodeインストール

$ mkdir ~/src && cd ~/src
$ wget https://sourceforge.net/projects/courier/files/courier-unicode/1.1/courier-unicode-1.1.tar.bz2/download
$ tar xjfv ./download && rm -f ./download
$ cd courier-unicode-1.1
$ ./configure
$ make
$ sudo su
# make install
# echo "/usr/local/lib" > /etc/ld.so.conf.d/courier.conf
# ldconfig
# exit

※ldconfigはcourier-imapインストールでmake checkコマンド実行し判明。

courier-authlibインストール

$ cd ~/src
$ wget https://sourceforge.net/projects/courier/files/authlib/0.66.1/courier-authlib-0.66.1.tar.bz2/download
$ tar xjfv ./download && rm -f ./download
$ cd courier-authlib-0.66.1
$ ./configure
$ make
# sudo su
# make install
# make install-configure
# echo "/usr/local/lib/courier-authlib" >> /etc/ld.so.conf.d/courier.conf
# ldconfig
# exit

※ldconfigはcourier-imapインストールでmake checkコマンド実行し判明。

courier-imapインストール

$ cd ~/src
$ wget https://sourceforge.net/projects/courier/files/imap/4.15.1/courier-imap-4.15.1.tar.bz2/download
$ tar xjfv ./download && rm -f ./download
$ cd courier-imap-4.15.1
$ ./configure
$ make
$ make check
# sudo su
# make install
# make install-configure
# exit

サービス起動

$ sudo su
# /usr/local/sbin/authdaemond start
# /usr/lib/courier-imap/libexec/imapd.rc start