前回はSPFを組み込んだので、今回はDKIMを組み込んでみます。
SPFと違ってDKIMでローカルから出したメールのVerifyを色々と試しましたが、やってくれなかったので結局二台のサーバ構成にしました。
サーバ1をvirtual.localdomain, サーバ2をvirtual2.localdomainとして両方に設定をして行きます。
OpenDKIM
まずはインストール(EPELは既にインストール済の前提です)。
dnf install opendkim opendkim-tools --enablerepo=crb
次にドメインの秘密鍵・公開鍵の作成。オプションの-sはセレクタですが、デフォルトのdefaultを指定しています。
※サーバ2では、virtual.localdomainをvirtual2.localdomainにします。
mkdir /etc/opendkim/keys/virtual.localdomain
opendkim-genkey -D /etc/opendkim/keys/virtual.localdomain/ -d virtual.localdomain -s default
chown -R opendkim.opendkim /etc/opendkim/keys/virtual.localdomain/
成功すると、default.txtとdefault.privateファイルが作成されます。
そして、opendkimの設定。
それぞれサンプルが記載されているので、それを参考に設定していきます。
※サーバ2では、virtual.localdomainをvirtual2.localdomainにします。
/etc/opendkim.conf
Mode sv
# コメント化
#KeyFile /etc/opendkim/keys/default.private
# 以下コメント解除
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
/etc/opendkim/KeyTable
default._domainkey.virtual.localdomain virtual.localdomain:default:/etc/opendkim/keys/virtual.localdomain/default.private
/etc/opendkim/SigningTable
*@virtual.localdomain default._domainkey.virtual.localdomain
設定したら起動します。
systemctl enable opendkim --now
Dnsmasq
前回SPFでやったように自ドメインをdigで引けるようにしておきます。
※直接/etc/resolv.confを書き換えると再起動で戻ってしまうので、再起動後も利用する時はnmtui等でDNSを127.0.0.1に指定しておきます。
/etc/dnsmasq.conf
selfmx
次にDKIMの公開鍵をTXTレコードに登録しますが、/etc/opendkim/keys/virtual.localdomain/default.txtの”v=DKIM1; k=rsa; p=[公開鍵]”は改行され各行でクォートされているので、これを一つなぎにしてtxt-recordへ記載します。形式としては以下のようになります。
txt-record=[selector]._domainkey.[domain],"v=DKIM1; k=rsa; p=[公開鍵]"
ここで相手側のドメインの公開鍵も引ける必要が有るのですが、オープンリゾルバとか面倒なので両サーバにvirtual.localdomainとvirtual2.localdomainの公開鍵を登録します。
この辺は他にもやり方が有ると思います。
/etc/dnsmasq.d/dkim.conf
# DKIM virtual.localdomain
txt-record=default._domainkey.virtual.localdomain,"v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzepAxoQwaI4e76FwYbg0Evk7QUqskLe4NHcb9+pZ9QC+AQYznH3ZAwusF2U0nzZTiPlnjQkTcoy+orOUEBLkmXoytiSKS29X276IqfISRO1FVTDQ9jyGky3nEr/Qvhq6KstWzA5/E26hS2DTflJ+oUsILAHyTx3mZbaxvn64x1wIDAQAB"
txt-record=_adsp._domainkey.virtual.localdomain,"dkim=unknown"
# DKIM virtual2.localdomain
txt-record=default._domainkey.virtual2.localdomain,"v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD1bkW3yL47lkmEmLawk3vESjn/twEk/eJxU1D4rfwDXHyhS+cjKG1/KixWkJ3dr1bLUTTEap7kPMgMv5sKzrP9uVNfX62uGmNk5xy6Q8sooOv3IPdNr4Q1ErkmnarwkoYwV9UPG2xuQEVNAsyi0d4uBvSjITs+Itt46osPB7eKKwIDAQAB"
txt-record=_adsp._domainkey.virtual2.localdomain,"dkim=unknown"
両サーバのdefault.txtの公開鍵の値をそれぞれ登録します。
adspについては、受信側にとりあえず到達させるために、unknownにしておきます。
/etc/hosts
virtual.localdomainのhostsにはvirtual2.localdomainのリモートIPアドレスを、
virtual2.localdomainのhostsにはvirtual.localdomainのリモートIPアドレスを
記載してドメイン名で相手に到達出来るようにしておきます。
virtual.localdomain(192.168.10.79)の/etc/hostsはこのような感じ。
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 virtual.localdomain
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 virtual.localdomain
192.168.10.117 virtual2.localdomain
virtual2.localdomain(192.168.10.117)の/etc/hostsはこのような感じになります。
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 virtual2.localdomain
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 virtual2.localdomain
192.168.10.79 virtual.localdomain
再起動して、レコードが引けるか確認します。
systemctl restart dnsmasq
dig virtual.localdomain
dig virtual2.localdomain
dig TXT default._domainkey.virtual.localdomain
dig TXT _adsp._domainkey.virtual.localdomain
dig TXT default._domainkey.virtual2.localdomain
dig TXT _adsp._domainkey.virtual2.localdomain
Postfix
もう一方からメールを受けられるようinet_interfacesをallにして、milterへopendkimを追加します。
/etc/postfix/main.cf
inet_interfaces = all
# DKIM設定
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = inet:127.0.0.1:8891
milter_default_action = accept
終わったらリッスンするアドレスの更新のため、リスタートを。
systemctl restart postfix
firewallもsmtpポートを開けておきます。
firewall-cmd --add-service=smtp
firewall-cmd --add-service=smtp --permanent
RoundCube等でお互いのドメインにメールを送って、Authentication-Resultsにdkim=passとなれば完了です。
自ドメイン宛に送っても(Signatureは追加されても)、Verifyはしてくれません。
virtual.localdomainへ送ったメール
virtual2.localdomainへ送ったメール
この投稿は 2023年4月26日 水曜日 16:54 に 未分類 カテゴリーに公開されました。 この投稿へのコメントは RSS 2.0 フィードで購読することができます。
このページの一番下でコメントを残すことができます。トラックバック / ピンバックは現在受け付けていません。