웹사이트 검색

Debian Wheezy에서 Postfix로 DKIM을 설치 및 구성하는 방법


소개

스패머로 잘못 표시되는 좌절감은 대부분의 메일 서버 관리자에게 이상하지 않습니다. 손상된 서버의 가능성을 배제함으로써 잘못된 플래그는 일반적으로 다음 중 하나로 인해 발생합니다.

  • 서버가 오픈 메일 릴레이입니다
  • 발신자 또는 서버의 IP 주소가 블랙리스트에 있습니다.
  • 서버에 FQDN(정규화된 도메인 이름) 및 PTR 레코드가 없습니다.
  • SPF(Sender Policy Framework) DNS 레코드가 없거나 잘못 구성됨
  • DKIM(DomainKeys Identified Mail) 구현이 누락되었거나 제대로 설정되지 않았습니다.

다음은 대부분의 독점 및 오픈 소스 스팸 필터(SpamAssassin 포함)에서 확인하는 기본 속성 중 일부입니다. 이러한 테스트를 통과하는 것은 잘 구성된 메일 서버에 매우 중요합니다.

이 튜토리얼은 DKIM 발신자 인증 시스템의 오픈 소스 구현인 OpenDKIM] 설치 및 구성에 중점을 둡니다.

독자가 SSH, Postfix 및 Dovecot을 통해 서버에 액세스하는 방법을 알고 있다고 가정합니다(튜토리얼).

디킴 소개

DKIM은 개인이나 조직이 도메인 이름을 이메일 메시지와 연결할 수 있게 해주는 인터넷 표준입니다. 이것은 사실상 메시지에 대한 책임을 주장하는 방법으로 사용됩니다. DKIM의 핵심은 비대칭 암호화입니다. 발신자의 MTA(Mail Transfer Agent)는 모든 발신 메시지에 개인 키로 서명합니다. 수신자는 발신자의 DNS 레코드에서 공개 키를 검색하고 메시지 서명이 발생한 이후 메시지 본문과 일부 헤더 필드가 변경되지 않았는지 확인합니다.

OpenDKIM 설치

설치를 시작하기 전에 시스템 업데이트를 권장합니다.

sudo apt-get update
sudo apt-get dist-upgrade

OpenDKIM 및 해당 종속성을 설치합니다.

sudo apt-get install opendkim opendkim-tools

추가 패키지가 종속 항목으로 나열됩니다. yes를 입력하고 Enter를 눌러 계속 진행하세요.

OpenDKIM 구성

OpenDKIM을 구성하려면 몇 개의 파일을 생성하고 편집해야 합니다.

Nano는 기본적으로 DigitalOcean 물방울에 설치되고 작동이 간단하기 때문에 편집기로 사용됩니다.

  • 화살표 키로 탐색
  • 변경 사항을 저장하지 않고 종료: CTRL + X를 누른 다음 N
  • 을 누릅니다.\n
  • 종료하고 변경 사항 저장: CTRL + X를 누른 다음 Y를 누르고 마지막으로 Enter
  • 를 누릅니다.\n

중요: 모든 명령 및 구성 파일에서 example.com의 모든 인스턴스를 자신의 도메인으로 바꿉니다. 편집 후 파일을 저장하는 것을 잊지 마십시오.

기본 구성 파일부터 시작하겠습니다.

sudo nano /etc/opendkim.conf

conf 파일 끝에 다음 줄을 추가합니다(각 매개 변수는 아래에 설명되어 있음). 선택적으로 Socket에 대한 사용자 지정 포트 번호를 선택할 수 있습니다. 다른 응용 프로그램에서 사용하지 않는지 확인하십시오.

AutoRestart             Yes
AutoRestartRate         10/1h
UMask                   002
Syslog                  yes
SyslogSuccess           Yes
LogWhy                  Yes

Canonicalization        relaxed/simple

ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable

Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256

UserID                  opendkim:opendkim

Socket                  inet:12301@localhost

  • AutoRestart: 실패 시 필터를 자동으로 다시 시작합니다.\n
  • AutoRestartRate: 필터의 최대 재시작 속도를 지정합니다. 재시작이 이 속도보다 빠르게 시작되면 필터가 종료됩니다. 10/1h - 시간당 최대 10번의 재시작이 허용됩니다.\n
  • UMask: UserID로 정의된 사용자 그룹에 모든 액세스 권한을 부여하고 다른 사용자가 파일을 읽고 실행할 수 있도록 허용합니다. 이 경우 Pid 파일의 생성 및 수정이 허용됩니다.\n
  • Syslog, SyslogSuccess, *LogWhy: 이 매개변수는 syslog에 대한 호출을 통해 자세한 로깅을 활성화합니다.\n
  • 정규화: 메시지 서명에 사용되는 정규화 방법을 정의합니다. 단순 방법은 거의 수정을 허용하지 않는 반면 완화 방법은 다음과 같은 사소한 변경을 허용합니다.\n공백 교체; relaxed/simple - 메시지 헤더는 relaxed 알고리즘으로 처리되고 본문은 simple 알고리즘으로 처리됩니다.\n
  • ExternalIgnoreList: 자격 증명 없이 서명 도메인 중 하나로 서버를 통해 메일을 보낼 수 있는 외부 호스트를 지정합니다.\n
  • InternalHosts: 메일을 확인하지 않고 대신 서명해야 하는 내부 호스트 목록을 정의합니다.\n
  • KeyTable: 키 이름을 서명 키에 매핑\n
  • SigningTable: From: 헤더 필드에 있는 주소를 기반으로 메시지에 적용할 서명을 나열합니다.\n
  • 모드: 작동 모드를 선언합니다. 이 경우 milter는 서명자(s) 및 검증자(v) 역할을 합니다.\n
  • PidFile: 프로세스 식별 번호가 포함된 Pid 파일의 경로\n
  • SignatureAlgorithm: 서명을 생성할 때 사용할 서명 알고리즘을 선택합니다.\n
  • UserID: opendkim 프로세스는 이 사용자 및 그룹에서 실행됩니다.\n
  • 소켓: milter는 여기에 지정된 소켓에서 수신 대기하고 Posfix는 이 소켓을 통해 서명 및 확인을 위해 opendkim에 메시지를 보냅니다. 12301@localhostlocalhost, 포트 12301에서 수신 대기하는 TCP 소켓을 정의합니다.\n

이 간단한 구성은 하나 이상의 도메인에 대한 메시지 서명을 허용하기 위한 것입니다. 다른 옵션에 대해 알아보려면 여기로 이동하세요.

Milter를 Postfix에 연결합니다.

sudo nano /etc/default/opendkim

다음 행을 추가하고 사용자 정의 포트 번호가 사용되는 경우에만 포트 번호를 편집하십시오.

SOCKET="inet:12301@localhost"

이 밀터를 사용하도록 접미사를 구성합니다.

sudo nano /etc/postfix/main.cf

다음 두 줄이 Postfix 구성 파일에 있고 주석 처리되지 않았는지 확인하십시오.

milter_protocol = 2
milter_default_action = accept

필터(Spamassasin, Clamav 등)가 이미 Postfix에서 사용되고 있을 가능성이 있습니다. 다음 매개변수가 있는 경우 opendkim milter를 여기에 추가하기만 하면 됩니다(milter는 쉼표로 구분됨). 포트 번호는 opendkim.conf와 같아야 합니다.

smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:12301
non_smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:12301

매개변수가 누락된 경우 다음과 같이 정의합니다.

smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301

신뢰할 수 있는 호스트, 키 테이블, 서명 테이블 및 암호화 키를 보관할 디렉터리 구조를 만듭니다.

sudo mkdir /etc/opendkim
sudo mkdir /etc/opendkim/keys

신뢰할 수 있는 호스트 지정:

sudo nano /etc/opendkim/TrustedHosts

이 파일을 사용하여 ExternalIgnoreListInternalHosts를 모두 정의하고 이러한 호스트, 도메인 및 IP 주소에서 발생하는 메시지는 신뢰되고 서명됩니다.

기본 구성 파일은 TrustedHosts를 정규식 파일(refile)로 선언하므로 와일드카드 패턴을 사용할 수 있습니다. *.example.com은 다음을 의미합니다. 루트 도메인에서 보낸 메시지뿐만 아니라 example.com의 하위 도메인에서 오는 메시지도 신뢰할 수 있습니다.

새로 만든 파일에 다음 줄을 사용자 지정하고 추가합니다. 여러 도메인을 지정할 수 있습니다. 처음 세 줄은 편집하지 마십시오.

127.0.0.1
localhost
192.168.0.1/24

*.example.com

#*.example.net
#*.example.org

키 테이블을 만듭니다.

sudo nano /etc/opendkim/KeyTable

키 테이블에는 각 선택기/도메인 쌍과 개인 키에 대한 경로가 포함됩니다. 모든 영숫자 문자열을 선택기로 사용할 수 있습니다. 이 예에서는 mail이 사용되며 변경할 필요가 없습니다.

mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private

#mail._domainkey.example.net example.net:mail:/etc/opendkim/keys/example.net/mail.private
#mail._domainkey.example.org example.org:mail:/etc/opendkim/keys/example.org/mail.private

서명 테이블을 만듭니다.

sudo nano /etc/opendkim/SigningTable

이 파일은 도메인/이메일 주소 및 해당 선택기를 선언하는 데 사용됩니다.

*@example.com mail._domainkey.example.com

#*@example.net mail._domainkey.example.net
#*@example.org mail._domainkey.example.org

공개 및 개인 키 생성

키 디렉터리로 변경합니다.

cd /etc/opendkim/keys

도메인에서 키를 보관할 별도의 폴더를 만듭니다.

sudo mkdir example.com
cd example.com

키를 생성합니다.

sudo opendkim-genkey -s mail -d example.com

-s는 선택기를 지정하고 -d는 도메인을 지정합니다. 이 명령은 두 개의 파일을 생성합니다. mail.private는 개인 키이고 는 mail.txt에는 공개 키가 포함되어 있습니다.

개인 키의 소유자를 opendkim으로 변경합니다.

sudo chown opendkim:opendkim mail.private

도메인의 DNS 레코드에 공개 키 추가

mail.txt 열기:

sudo nano -$ mail.txt

공개 키는 p 매개변수 아래에 정의됩니다. 아래의 예제 키를 사용하지 마십시오. 단지 그림일 뿐이며 서버에서 작동하지 않습니다.

mail._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB" ; ----- DKIM key mail for example.com

해당 키를 복사하고 도메인의 DNS 항목에 TXT 레코드를 추가합니다.

Name: mail._domainkey.example.com.

Text: "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB"

DNS 변경 사항이 전파되는 데 몇 시간이 걸릴 수 있습니다.

Postfix 및 OpenDKIM을 다시 시작합니다.

sudo service postfix restart
sudo service opendkim restart

축하해요! 메일 서버에 대해 DKIM을 성공적으로 구성했습니다!

check-auth@verifier.port25.com에 빈 이메일을 보내서 구성을 테스트할 수 있으며 회신을 받을 것입니다. 모든 것이 올바르게 작동하면 결과 요약 아래에 DKIM 확인: 통과가 표시되어야 합니다.

==========================================================
Summary of Results
==========================================================
SPF check:          pass
DomainKeys check:   neutral
DKIM check:         pass
Sender-ID check:    pass
SpamAssassin check: ham

또는 제어하는 Gmail 주소로 메시지를 보내고 Gmail 받은 편지함에서 받은 이메일의 헤더를 볼 수 있습니다. dkim=passAuthentication-Results에 있어야 합니다. 헤더 필드.

Authentication-Results: mx.google.com;
       spf=pass (google.com: domain of contact@example.com designates --- as permitted sender) smtp.mail=contact@example.com;
       dkim=pass header.i=@example.com;

제출자: P. Sebastian