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 레코드가 올바르게 설정되어 있는지 확인하는 가장 좋은 방법은 무료 테스트 서비스 중 하나를 사용하는 것입니다. 나는 이것을 사용했다 :
각각은 제대로 작동하는지 알려주고 필요한 경우 문제 해결에 대한 지침을 제공합니다.
Gmail 계정이있는 경우 서명 된 메시지를 보내서 빠르고 쉽게 테스트 할 수 있습니다.
모든 것이 잘되면 DNS TXT 레코드에서 테스트 플래그를 제거하고 TTL을 늘릴 수 있습니다.
끝난!