Ubuntu, Postfix 및 Mailman에 대한 DKIM (DomainKeys) 설정


22

Postfix와 Mailman으로 Ubuntu 12.04를 실행 중입니다. DKIM 을 설정하고 싶습니다 . DKIM (DomainKeys Identified Mail)은 Yahoo의 "DomainKeys"의 후속 제품입니다. Cisco의 Identified Mail을 통합합니다.

이것을 설정하는 단계는 무엇입니까?

opendkim이 권장됩니까?

내가 가지고있는 유일한 참조는 HowToForge 이지만, 링크에서 단계를 확인한 경우에도 여기서 도움을 얻는 것을 선호합니다. 실제로 HowToForge의 정보는 opendkim 대신 dkim-filter를 언급하기 때문에 구식이라고 생각합니다.

답변:


39

Ubuntu Server 12.04LTS의 openDKIM 및 Postfix

다시 돌아와서 더 잘 포맷하려고합니다. 그러나 답변을 게시하라는 요청이 있었으므로 제대로 형식을 지정할 때까지 기다리지 않고 지금 게시하고 싶었습니다. 시간이 부족하여 전체 답변을 인용 부호로 묶었습니다. 이 솔루션이 도움이 되길 바랍니다.

이것들은 내 참고 사항입니다.

그리고 Wikipedia 는 주제에 대한 좋은 입장을 가지고 있습니다.

최소한 다음이 필요합니다.

  • 메일 서버에 대한 루트 액세스
  • 도메인의 DNS 레코드를 업데이트하기위한 액세스

저장소에서 opendkim을 설치하십시오.

# sudo apt-get install opendkim opendkim-tools

사용할 "선택기"를 결정해야합니다. 선택기는 본질적으로 사용하려는 키를 설명하는 단어입니다. 여기서 키가 2012 년 5 월에 유효 해짐에 따라 선택기 201205를 사용하려고합니다 (cunning eh?). 나는 다양성에 대한 두 가지 예를 제시하며, 희망적으로 명확성을 더할 것이다. 하나의 키만 생성하면됩니다. 그러나 두 예제를 모두 제공하므로 비교할 수 있습니다.

  • 201205 (첫 번째 키)
  • my_selector (두 번째 키)

내 도메인은 example.com이지만 두 번째 예에는 하위 도메인을 사용합니다.

  • example.com (첫 번째 키)
  • mail.example.com (두 번째 키)

나는 다음 디렉토리에서 일하기로 결정했다.

# mkdir /etc/opendkim/
# cd /etc/opendkim

선택한 선택기와 도메인을 사용하여 현재 디렉토리에서 키를 생성하십시오.

# opendkim-genkey -s 201205 -d example.com

소유권을 변경해야 할 수도 있고 필요하지 않을 수도 있습니다. 소유권 및 사용 권한에 대해서는 아래의 두 번째 키에 대한 예를 참조하십시오.

먼저 사용자가 있는지 확인해야 opendkim합니다 (사용자 / 그룹 ID가 다를 수 있음).

# grep opendkim /etc/passwd
opendkim:x:108:117::/var/run/opendkim:/bin/false

그리고 당신은 아마 이것을해야합니다 :

# chmod 700 /var/run/opendkim

참고 : 다음 두 명령은 Ubuntu 12.04에서 필요하지 않습니다. 그러나 위의 명령으로 사용자 opendkim이 올바르게 설정되었다고 표시되지 않으면 다음과 유사하게 수행하십시오.

# useradd -r -g opendkim -G mail -s /sbin/nologin -d /var/run/opendkim -c "OpenDKIM" opendkim
# chown opendkim:opendkim 201205.private   
# cat 201205.private 
-----BEGIN RSA PRIVATE KEY-----
ABCCXQ...[long string]...SdQaZw9
-----END RSA PRIVATE KEY-----

이제 공개 키를 확인하고 버그 (Ubuntu 12.04의 openDKIM 2.5.2)가 있는지 확인하십시오! 포함하는 곳에는 포함 ;=rsa;해야합니다 ;k=rsa;. 는 k없습니다. 삽입하십시오.

# cat 201205.txt
201205._domainkey IN TXT "v=DKIM1;=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com

고정 된 후 다음과 같습니다.

201205._domainkey IN TXT "v=DKIM1;k=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com

또한 세미콜론을 이스케이프 처리해야 할 수도 있습니다. 끝 주석을 원하지 않으면 삭제하십시오. 또한 t = y 플래그를 추가하여 DKIM을 테스트하고 있지만 아직 적극적으로 사용하고 있지 않음을 수신 서버에 표시해야합니다. 실행 가능한 리소스 레코드가 남아 있습니다.

201205._domainkey IN TXT "v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"

위의 공개 키의 내용을 신뢰할 수있는 DNS 서버에 게시해야합니다. TXT 레코드를 사용하는 것이 좋습니다. SPF 레코드를 사용할지 또는 두 가지 유형을 사용할 지에 대해 약간의 논쟁이있는 것 같습니다. 약간의 독서 후, 나는 이것이 TXT 레코드 유형을 독점적으로 고수하기로 결정했지만, 이것이이 주제의 최종 단어라고는 생각하지 않습니다.

DNS를 통해 키가 전파 될 때까지 키를 변경할 수 있도록 짧은 TTL (Time to Live)을 사용해야합니다. 나는 180 초를 사용했다.

키 페어를 생성하는 두 번째 예는 약간 까다 롭습니다. 내가 한 일을 설명하겠습니다. 첫 번째 요소는 키가 "mail.example.com"에 사용될지라도 도메인 값 "example.com"을 사용한다는 것입니다. 나는 시행 착오를 통해 이것에 도착했다. "mail.example.com"을 사용하는 동안 작동하지 않습니다. 불행히도, 나는 이것의 이유를 알지 못합니다. 이것은 실제로 내가 만난 유일한 차이점이지만 하위 도메인 사용에 대한 경험을 문서화해야한다고 느꼈습니다. 내가 찾은 다른 시작 레벨 자습서 중 어느 것도이 작업을 수행하지 않았습니다. 두 번째 키를 생성하십시오.

opendkim-genkey -s my_selector -d example.com

위와 같이 개인 키의 소유권과 권한을 확인하십시오. 다음과 같은 모습입니다.

# ls -la /etc/opendkim
-rw-------  1 opendkim opendkim  891 May 10 07:44 my_selector.private

DNS 레코드를 게시 한 후로 확인하십시오 dig. 리소스 레코드 (RR)에 입력 한 내용을 정확하게 반환해야합니다.

$ dig 201205._domainkey.example.com txt +short
"v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"

이제 키를 테스트하십시오. 아래 명령은 키가있는 디렉토리에 있다고 가정합니다 (/ etc / opendkim).

# opendkim-testkey -d example.com -s 201205 -k 201205.private -vvv
opendkim-testkey: key loaded from /etc/opendkim/201205.private
opendkim-testkey: checking key '201205._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK

이러한 결과가 예상됩니다. "키 안전하지 않음"은 오류를 나타내지 않습니다. DNSSSEC를 사용하지 않으면 예상되는 결과입니다. 내 독서에 따르면 DNSSEC 가오 고 있지만 아직 준비가되지 않았습니다.

두 번째 키가있는 예 :

# opendkim-testkey -d example.com -s my_selector -k /etc/opendkim/my_selector.private -vvvv
opendkim-testkey: key loaded from /etc/opendkim/my_selector.private
opendkim-testkey: checking key 'my_selector._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK

opendkim은 키가 안전하지 않다고보고합니다. 이것은 DNSSEC가 내 DNS 서버에서 구현되지 않았으며 이론적으로 누군가 DNS 조회를 가로 채서 자신의 키로 대체 할 수 있다는 사실과 관련이 있습니다.

OpenDKIM 구성 파일을 편집하십시오.

# nano /etc/opendkim.conf
# cat /etc/opendkim.conf
# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.
#
Domain                  example.com
KeyFile                 /etc/opendkim/201205.private
Selector                201205
#
# Commonly-used options
Canonicalization        relaxed/simple
Mode                    sv
SubDomains              yes
# Log to syslog
Syslog                  yes
LogWhy                  yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
UMask                   022
UserID                  opendkim:opendkim
#
KeyTable                /etc/opendkim/KeyTable
SigningTable            /etc/opendkim/SigningTable
ExternalIgnoreList      /etc/opendkim/TrustedHosts
InternalHosts           /etc/opendkim/TrustedHosts
#
Socket                  inet:8891@localhost
#EOF

대상 도메인 "mail.example.com"과 함께 두 번째 주요 예를 사용하는 경우 항목은 여전히 ​​기본 도메인 만 참조합니다.

Domain                  example.com
KeyFile                 /etc/dkim/my_selector.private
Selector                my_selector 
-----

내 소스 중 하나에서 참고 : Postfix의 여러 인스턴스를 실행하는 경우 각 인스턴스 (또는 opendkim을 사용하려는 인스턴스)에 대해 opendkim.conf에 이것을 추가해야합니다

텍스트 편집기로 파일을 작성하십시오 /etc/opendkim/TrustedHosts.

OpenDKIM에서 처리해야하는 도메인, 호스트 이름 및 / 또는 ip를 추가하십시오. localhost를 잊지 마십시오.

127.0.0.1
localhost
example.com
mail.example.com
192.168.1.100 #(IP address of your server, if applicable)

(위의 마지막 줄은 필요하지 않을 것입니다. 추가 할 IP 주소가있는 경우 위의 예가 아닌 고유 한 주소를 사용해야합니다.)

편집 /etc/default/opendkim:

이 행의 주석을 해제하고 포트 8891을 사용하십시오.

SOCKET="inet:8891@localhost" # listen on loopback on port

방화벽 (iptables)이 localhost에서 루프백을 허용하는지 확인하십시오.

sudo iptables -A INPUT -i lo -j ACCEPT

다음으로, 텍스트 편집기로 파일을 작성 /etc/opendkim/KeyTable하고 도메인을 KeyTable에 추가하십시오.

라인 추가 :

#EXAMPLE showing my 2nd key:
my_selector._domainkey.example.com example.com:my_selector:/etc/opendkim/my_selector.private

다음 텍스트 편집기로 파일을 작성 /etc/opendkim/SigningTable하고 도메인을 SigningTable에 추가하십시오.

두 가지 예를 모두 보여줍니다. 두 번째 키의 경우 이제 전체 도메인 이름 "mail.example.com"을 사용해야합니다.

example.com 201205._domainkey.example.com
mail.example.com my_selector._domainkey.example.com

OpenDKIM 2.0.1에서 도메인 이름은 대소 문자를 구분합니다. 이 예에서는 최신 버전의 OpenDKIM을 사용하고 있으며 이는 문제가되지 않습니다.

접미사를 구성하십시오. /etc/postfix/main.cf를 편집하고 줄을 끝에 추가하십시오

milter_default_action = accept
milter_protocol = 2
smtpd_milters=inet:localhost:8891
non_smtpd_milters=inet:localhost:8891

또한 호스트 이름을 변경하십시오.

#myhostname = localhost         #original
myhostname = mail.example.com

/ etc / hosts에서 해당 항목을 변경해야합니다. 이러한 변경 사항은 재부팅 후 적용됩니다 (명령을 사용하여 즉시 설정할 수 있음 hostname NEW_NAME).

재부팅하지 않은 경우 postfix를 다시 시작하고 opendkim을 실행하십시오.

# service opendkim restart
Restarting OpenDKIM: opendkim.
# service postfix restart
 * Stopping Postfix Mail Transport Agent postfix   [ OK ]
 * Starting Postfix Mail Transport Agent postfix   [ OK ] 

테스팅

서명 된 메일이 인증되고 DNS 레코드가 올바르게 설정되어 있는지 확인하는 가장 좋은 방법은 무료 테스트 서비스 중 하나를 사용하는 것입니다. 나는 이것을 사용했다 :

  • 브랜든 Checketts 이메일 검사기 - http://www.brandonchecketts.com/emailtest.php (내가 좋아하는)
  • check-auth@verifier.port25.com으로 서명 된 이메일 보내기
  • 서명 된 이메일을 sa-test@sendmail.net으로 보내십시오 (테스트 할 단일 발신 메시지의 To : 필드에 모든 테스트 이메일 주소를 넣을 수 있습니다)

  • autorespond+dkim@dk.elandsys.com으로 서명 된 이메일 보내기 <--- BROKEN !!! 이것을 사용하지 마십시오.

각각은 제대로 작동하는지 알려주고 필요한 경우 문제 해결에 대한 지침을 제공합니다.

Gmail 계정이있는 경우 서명 된 메시지를 보내서 빠르고 쉽게 테스트 할 수 있습니다.

모든 것이 잘되면 DNS TXT 레코드에서 테스트 플래그를 제거하고 TTL을 늘릴 수 있습니다.

끝난!


정밀하게 완벽하게 작동합니다. 좋은 연습 감사합니다.
Aki

-b 1024를 사용하여 1024 비트 키를 생성하십시오. 내 Gmail에 서명해야합니다!
Prashant Singh

1
opendkim.conf에서 "SigningTable"및 "KeyTable"을 사용할 때는 "Domain", "KeyFile"및 "Selector"매개 변수가 무시됩니다. 이것이 어느 시점에서 바뀌 었는지 확실하지 않지만 언급 할 가치가 있습니다 ( opendkim.org/opendkim.conf.5.html )
billynoah

0

이것은 좋은 가이드입니다.

그것은 opendkim 실제로 권장되며 dkim 서명을 구현하는 단계가 dkim-filter와 동일하다는 것을 설명합니다 .

dkim-milter는 더 이상 개발되지 않습니다. 원작자가 소스를 포크하고 현재 opendkim을 개발 중입니다. Lucid 및 이후 릴리스의 경우 dkim-filter보다 opendkim이 선호됩니다. 이 페이지의 지침은 동일해야합니다 (필요에 따라 조정 된 패키지 이름 만 사용).

BTW Domainkeys는 더 이상 사용되지 않는 DKIM의 전신입니다. SPF 및 DKIM 용 DNS 영역에 TXT 레코드를 추가하지만 더 이상 도메인 키를 사용하지 않아도됩니다.


연결 한 기사가 오래되었습니다. opendkim은 현재 사용할 패키지입니다. 나는 그것을 설정하고 있습니다 ...
Monica Cellio를위한 MountainX

Exim4에서 Postfix-Dovecot로 서버를 전환하려고 할 때 귀하의 경험에 대한 업데이트를 소중히 생각하며 최신 지침을 찾고 있습니다.
iainH

솔루션을 게시했지만 포맷 할 시간이 없었습니다. 귀하 (또는 다른 사람)는 형식을 지정할 수 있습니다. 그러나 내 메모는 매우 광범위하므로 지체없이 액세스 할 수 있기를 바랍니다. 나는 그들이 도움이되기를 바랍니다.
Monica Cellio를위한 MountainX

-1

http://wiki.zimbra.com/wiki/Configuring_for_DKIM_Signing

나는 항상 어떤 것에 대한 몇 가지 가이드를 교차 참조해야합니다. 셋업에 관한이 튜 트는 방금 확인했고이 타당성을 검증했습니다. 그러나 도메인 레코드를 자세히 설명하기 위해 TXT 예제를 표시 할 수 있습니다. 사람들은 혼란스럽고 키 자체의 모든 것을 p 값에 명시 적으로 넣을 수 있습니다. ------ 공개 공개 키 ----- 및 ----- 종료 공개 키 ----- 포함. 일부는 혼동 될 수 있습니다. 마커가 아닌 암호화 부분 만 넣으십시오.


3
Ask Ubuntu에 오신 것을 환영합니다! 이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
Braiam
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.