user icon

DKIMをテスト環境のPostfixに組み込む

前回は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へ送ったメール
Facebooktwitterlinkedintumblrmail
名前
E-mail
URL
コメント

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)