
여러 내부 서버에서 이메일 전송을 담당하는 하나의 MTA가 있는 구성이 있습니다.
내부 서버는 모두 다양한 도메인에서 Postfix를 실행합니다. 이들은 모두 MTA를 통해 중계되도록 구성되어 있습니다. 모든 내부 서버의 아웃바운드 이메일에 서명하도록 DKIM을 설정하려고 합니다.
opendkim을 설치했고 서버는 로컬에서 생성된 아웃바운드 이메일에 서명할 수 있습니다.
MTA 구성은 다음과 같습니다.
opendkim.conf:
Syslog yes
Logwhy yes
UMask 002
Canonicalization relaxed/simple
Mode s
SubDomains no
AutoRestart yes
AutoRestartRate 10/1M
Background yes
DNSTimeout 5
SignatureAlgorithm rsa-sha256
OversignHeaders From
UserID opendkim
KeyTable refile:/etc/opendkim/key.table
SigningTable refile:/etc/opendkim/signing.table
ExternalIgnoreList refile:/etc/opendkim/trusted.hosts
InternalHosts refile:/etc/opendkim/trusted.hosts
Socket inet:8891@localhost
메인.cf:
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = mta.mydomain.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = mta.mydomain.com localhost
relayhost =
mynetworks = 127.0.0.0/8 1.1.1.0/24 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
canonical_maps = hash:/etc/postfix/canonical
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:8891
non_smtpd_milters = $smtpd_milters
서명.테이블:
*@domain1.com default._domainkey.domain1.com
*@*.domain1.com default._domainkey.domain1.com
*@domain1.co.uk default._domainkey.domain1.co.uk
*@*.domain1.co.uk default._domainkey.domain1.co.uk
*@domain2.co.uk default._domainkey.domain2.co.uk
*@*.domain2.co.uk default._domainkey.domain2.co.uk
*@domain3.co.uk default._domainkey.domain3.co.uk
*@*.domain3.co.uk default._domainkey.domain3.co.uk
신뢰할 수 있는 호스트:
127.0.0.1
localhost
1.2.3.50
1.2.3.52
1.2.3.53
1.2.3.54
1.2.3.29
service2.domain2.co.uk
host2.domain2.co.uk
이메일에 서명하려는 내부 호스트 목록으로 /etc/opendkim/trusted.hosts를 구성했습니다. 또한 키를 추가하고 관련 DNS 레코드에 추가했습니다.
sendmail을 사용하여 MTA 자체에서 메일 생성을 테스트했는데 이메일이 올바르게 서명되었습니다. 그러나 다른 원격 내부 서버에서 이메일 생성을 테스트할 때 어떤 이메일도 서명되지 않았습니다. tcpdump를 사용하면 트래픽이 localhost의 포트 8891로 이동하는 것을 볼 수 있지만 이유 측면에서 MTA에 기록된 내용도 볼 수 없습니다.
내가 테스트하고 있는 호스트는 Postfix에서 자신을 host2.domain2.co.uk로 식별합니다.
Dec 20 16:28:32 mta postfix/smtpd[3765]: connect from host2.domain2.co.uk[1.2.3.50]
Dec 20 16:28:32 mta postfix/smtpd[3765]: 1B4BB439BD: client=host2.domain2.co.uk[1.2.3.50]
Dec 20 16:28:32 mta postfix/cleanup[3768]: 1B4BB439BD: message-id=<[email protected]>
Dec 20 16:28:32 mta postfix/qmgr[1494]: 1B4BB439BD: from=<[email protected]>, size=109206, nrcpt=1 (queue active)
Dec 20 16:28:32 mta postfix/smtpd[3765]: disconnect from host2.domain2.co.uk[1.2.3.50]
Dec 20 16:28:32 mta postfix/smtp[3759]: 1B4BB439BD: enabling PIX workarounds: disable_esmtp delay_dotcrlf for somecompany-co-uk.mail.protection.outlook.com[104.47.0.36]:25
Dec 20 16:28:33 mta postfix/smtp[3759]: 1B4BB439BD: to=<[email protected]>, relay=somecompany-co-uk.mail.protection.outlook.com[104.47.0.36]:25, delay=1.3, delays=0.14/0/0.18/1, dsn=2.6.0, status=sent (250 2.6.0 <[email protected]> [InternalId=73138998102968, Hostname=AS8PR05MB8037.eurprd05.prod.outlook.com] 119126 bytes in 0.104, 1115.744 KB/sec Queued mail for delivery)
Dec 20 16:28:33 mta postfix/qmgr[1494]: 1B4BB439BD: removed
편집: 두 개의 테스트 메시지(하나는 sendmail을 사용하여 호스트에서 직접 전송되고 다른 하나는 MTA 뒤의 호스트에서 전송됨)의 헤더에 대한 추가 조사와 opendkim 로그에 대한 추가 조사를 통해 DKIM이 두 메시지 모두 성공적으로 서명한 것으로 나타났습니다. 하지만 다른 호스트의 메시지에 대해서는 DKIM 서명이 거부됩니다.
다음은 이러한 두 메시지에 대한 DKIM 로그입니다(첫 번째는 성공, 두 번째는 실패).
Dec 22 12:06:16 mta opendkim[8130]: 65EB043A13: DKIM-Signature field added (s=default, d=domain3.co.uk)
Dec 22 12:06:52 mta opendkim[8130]: E723543AF0: DKIM-Signature field added (s=default, d=domain3.co.uk)
그러나 Gmail의 DKIM 결과를 보면 다음과 같이 다릅니다.
ARC-Authentication-Results: i=1; mx.google.com;
dkim=pass [email protected] header.s=default header.b=MVo7iz6A;
두 번째로:
ARC-Authentication-Results: i=1; mx.google.com;
dkim=neutral (body hash did not verify) [email protected] header.s=default header.b=TktWbhpC;
이것이 왜 다른지 이해할 수 없지만 이것이 내가 보고 있는 문제의 원인임에 틀림없습니다.