관리 메뉴

HeBhy, since 1983.

메일서버(sendmail) 스팸 방지 적용하기(SPF + DMARC + DKIM) 본문

Dev/Web

메일서버(sendmail) 스팸 방지 적용하기(SPF + DMARC + DKIM)

HeBhy 2019. 5. 29. 22:36

메일서버에서 sendmail으로 메일을 보내면 스팸메일(spam / junk)로 분류될 가능성이 높다..

gmail같은경우는 위 3개가 다 충족되어야 받은편지함에 들어가고(보안관련 이슈를 가장 중요시하는듯.. 그리고 자바스크립트가 들어가도 스팸으로 분류됩니다.)

daum은 spf+dmarc까지는 해줘야 되고

 (수정: 다음메일에 스마트필터가 생겨서 처음보는 도메인은 무조건 스팸폴더로 가니.. 다음메일 쓰는사람들에겐 메일 다른걸로 바꾸라고 해야함 ㅡㅡ; 어차피 다음메일 생성 이제 안됩니다.. 대신 카톡알림뜨는 카카오메일이 생겼어요..)

네이버는 위3개 안해도 된다.. 그냥 자체 필터링으로 거르는듯.. (아마 불편하다는 사람이 많아서 그런듯 하다.)

(2019.11. 수정: 네이버 메일 보안정책이 바뀌어 해당IP가 PTR 레코드 등록이 되어 있지 않으면 네이버에서 수신 자체가 안된다.!! 그리고 AWS에서 메일발송하려면 어차피 한도 제한 해제 요청해야함.. 하는김에 PTR등록도 요청하면 됨.)

간단한 설명은 AWS 문서를 참고하자. 아래는 CentOS7 환경이다.

gmail 메일 수신시 dkim=pass가 뜨지 않으면 보통 개발서버 ip를 TrustedHost에 추가 안했다던가.. 관련 파일 권한설정이 잘못된 경우이니 'tail -f /var/log/maillog' 를 실행 후 메일을 보내보고 에러메시지를 확인하면 된다.

혹시 국내 KISA에서 스팸서버로 등록된경우, white domain으로 등록하려면 여기서 신청하자..

 

1. SPF 적용

 -가장 간단하다. 수신할 메일서버에서 DNS조회 후, 발신자IP를 체크하고 위조된 경우 drop 하거나(-all) 서버 정책에 따라 처리(~all)할 수 있도록 내 DNS에 등록하는 것이다... (수신메일 원본을 확인하면 SPF pass여부를 알수있다.)

DNS TXT에 위 1줄 추가. ip4: 뒤에는 sendmail 서버 ip를 적습니다.

2. DMARC 적용

 -DMARC의 경우도 수신메일서버에서 정해진 비율에 대해 보고서를 발송해라.. DNS 선언을 하면 인정된다.. none도 있고 아래는 25% 샘플로 mailto: 이후 지정된 메일주소로 보고서를 받는다는 내용이다.. 자세한 옵션은 웹 검색.

DNS에 TXT 한줄 추가. 도메인명이 a.com이면 name은 '_dmarc.a.com'  으로 적고, value에는 위를 참고해서 적는다. mailto: 뒤에는 리포트를 받을 메일주소.

 

3. DKIM 적용 - 먼저 임의로 selector값을 정한다 (여기선 mail 이라 가정)

(참고: 사이트1, 사이트2)

$ yum install opendkim -y
$ vi /etc/opendkim.conf
Mode                    sv      #수정
Canonicalization        relaxed/simple        #수정
Selector                mail   #수정
KeyFile /etc/opendkim/keys/example.com/mail.private     #수정
KeyTable                /etc/opendkim/KeyTable  # 주석해제
SigningTable            refile:/etc/opendkim/SigningTable   # 주석해제
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts   # 주석해제
InternalHosts           refile:/etc/opendkim/TrustedHosts   # 주석해제
Socket                  inet:8891@localhost   ## 포트 수정가능 (수정시 추가작업 필요)

## User-defined options (추가)
AutoRestart             Yes
AutoRestartRate         10/1h
Background      yes

 

 

$ cd /etc/opendkim
$ vi SigningTable   (최하단에 추가)
*@example.com mail._domainkey.example.com

 

 

 

$ vi KeyTable   (최하단에 추가)
mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private

 

 

 

$ vi TrustedHosts    (최하단에 추가)
#기존 127.0.0.1, ::1아래에 추가
example.com
mail.example.com
#기타 개발서버 ip등 필요시 추가

 

 

$ cd /etc/opendkim/keys
$ mkdir example.com
$ cd example.com
$ opendkim-genkey -b 2048 -r -s mail -d example.com
$ vi mail.txt       (내용 참고하여 DNS TXT값 등록)
 * DNS설정에서 name에는 mail._domainkey.example.com, value에는 txt파일의
 "v=DKIM1; h=sha256; k=rsa; s=email; p=DAWdajdka02i24................" 사이의 값을 넣는다. p값이 길어 ""로 분리되었으면 ""를 제거하고 문자열을 다 붙여서 하나의 TXT로 넣는다..

 

 

$ chown -R opendkim:opendkim *
$ chown -R opendkim:opendkim /etc/opendkim
$ opendkim-testkey -d example.com -s mail      (DNS 체크. 실행후 아무것도 뜨지 않아야 함. 상세는 -v -v 옵션 붙여서 확인.)
$ systemctl enable opendkim
$ systemctl start opendkim

이후 메일서버 설정을 합니다.. postfix나 sendmail 설정 참고하세요..

 

가. postfix 메일서버 사용시

 

$ vi /etc/postfix/main.cf
### OpenDKIM
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters

 

 

$ systemctl restart postfix

 

나. sendmail 메일서버 사용시

$ vi /etc/mail/sendmail.mc
INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@127.0.0.1')dnl

 

$ m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
$ systemctl restart sendmail

 

Comments