◆ DMARC란
DMARC(Domain-based Message Authentication, Reporting and Conformance)은 이메일 도메인 소유자가 이메일 스푸핑으로 알려진 무단 사용에서 도메인을 보호할 수 있도록 하는 이메일 인증 프로토콜입니다. DMARC의 목적은 비즈니스 이메일 공격, 피싱 이메일 사이버 위협 행위에 도메인이 이용되지 않도록 보호하는 역할을 합니다. DMARC은 단일로 사용하는 경우는 없으며, 대부분 SPF와 DKIM 두 가지 정책을 확장하여 사용합니다.
■ 설치환경 및 준비물
메일서버 구축 : https://foxydog.tistory.com/104
SPF 세팅 : https://foxydog.tistory.com/111
DKIM 세팅 : https://foxydog.tistory.com/112
공식 홈페이지 : https://dmarc.org/
STEP01 → OpenDMARC 설치하기
[root@ ~]# dnf install opendmarc
STEP02 → OpenDMARC 구성 설정[opendmarc.conf]
[root@ ~]# vim /etc/opendmarc.conf [구성파일 편집]
※ 다음과 같이 구성을 추가하거나 변경
AuthservID OpenDMARC [추가]
IgnoreAuthenticatedClients true [추가]
RejectFailures true [추가]
RequiredHeaders true [추가]
SPFIgnoreResults false [변경]
SPFSelfValidate true [기본 설정]
TrustedAuthservIDs mail.foxydog.co.kr [추가]
참고
□ AuthservID
메시지 헤드 필드에 인증 결과를 생성할 때 사용할 이름입니다. 구분하기 편하게 하기 위해 임의 값을 사용합니다. 여기서는 테스트로 OpenDMARC 이름으로 등록합니다.
□ IgnoreAuthenticatedClients
설정하면 인증된 클라이언트(예: SMTP AUTH를 사용한 클라이언트)의 메일이 필터에서 무시됩니다. 즉, PC/모바일/태블릿 메일 클라이언트에서 정상적으로 인증된 메일은 통과될 수 있도록 [True]를 사용합니다.
□ RejectFailures
기본적으로는 OpenDMARC 도메인 정책이 설정되어 있어도 DMARC 확인에 실패한 이메일을 거부하지 않습니다. 추 후 네임서버 TXT레코드에 "p=reject" 설정을 했을 경우 DMARC 검사에 실패한 이메일을 거부하려면 [True]를 사용합니다.
□ RequiredHeaders
설정하면 RFC5322 섹션 3.6에 명시된 이메일 헤더 표준을 준수하지 않으면 이메일을 거부합니다. 예로 수신 이메일에 From:헤더나 Date:헤더가 없으면 거부됩니다. 도메인 이름을 확인할 수 없는 From: 필드의 경우도 거부합니다. 사용하기 위해 [True]로 설정합니다.
□ SPFIgnoreResults [False], SPFSelfValidate [True]
메일 서버에서 다른 SPF 검사 서비스를 사용하려면 OpenDMARC에 이메일 헤더의 SPF 결과를 신뢰하고 헤더에서 SPF 결과를 찾을 수 없는 경우에만 SPF 검사를 수행하도록 지시
□ TrustedAuthservIDs
OpenDMARC가 호스트네임 ID 인증 결과를 신뢰하도록 설정합니다. 즉 일반적으로 Postfix에서 사용한 본인 메일서버 호스트를 입력합니다. DKIM 확인을 위해 OpenDKIM을 실행할 때에도 필요합니다. 여기서는 mail.mydomain.com으로 세팅합니다.
STEP03 → Postfix에 OpenDMARC Socket 연결
[root@ ~]# vim /etc/postfix/main.cf [구성 파일 편집]
◇ milter 프로토콜을 이용한 OpenDMARC 호출하는 방식을 이용한다고 합니다.
◇ 이미 OpenDKIM 설정에서 추가한 값이 있으므로 연결 포트만 추가 합니다.
# Milter configuration
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:127.0.0.1:8891,inet:127.0.0.1:8893 [추가]
non_smtpd_milters = $smtpd_milters
STEP04 → OpenDMARC, Postfix 서비스 시작
[root@ ~]# systemctl start opendmarc [서비스 시작]
[root@ ~]# systemctl enable opendmarc [서비스 자동 시작 등록]
Created symlink /etc/systemd/system/multi-user.target.wants/opendmarc.service → /usr/lib/systemd/system/opendmarc.service.
[root@ ~]# ps -ef |grep opendmarc [실행 프로세스 확인]
opendma+ /usr/sbin/opendmarc -c /etc/opendmarc.conf -P /run/opendmarc/opendmarc.pid
[root@ ~]# systemctl restart postfix [서비스 재시작]
※ 예외상황
설치 버전에 따라 opendmarc 포트가 오픈되어 있지 않을 수 있습니다. (댓글 정보 감사합니다.)
[root@ ~]# netstat -ntlp | grep 8893 [포트 확인]
tcp 0 0 127.0.0.1:8893 0.0.0.0:* LISTEN 56246/opendmarc [정상 패턴]
만약 위 포트가 열려있지 않을 경우
[root@ ~]# vi /etc/opendmarc.conf
#Socket local:/run/opendmarc/opendmarc.sock [주석(#) 처리]
Socket inet:8893@localhost [추가]
[root@ ~]# systemctl start opendmarc [서비스 시작]
STEP05 → 네임서버에 DMARC TXT 레코드 등록
참고 사이트 : https://www.linuxbabe.com/mail-server/create-dmarc-record
◇ 세팅 방법[가장 기본적인 세팅]
본인이 사용하는 네임서버[DNS]에 TXT레코드를 추가합니다. 호스트 이름은 _dmarc으로 고정입니다.
타입 | 호스트 | 값/위치 | TTL |
TXT | _dmarc | "v=DMARC1; p=none; pct=100; rua=mailto:mail@mydomain.com" | 3600(기본값) |
참고
□ v=DMARC1
프로토콜 버전입니다.
□ p=none
도메인에 대한 정책을 설정하는 부분입니다. 아래와 같이 3가지 정책을 선택할 수 있습니다.
None ▷ DMARC 검사가 실패할 경우 수신 메일 서버에 특별한 조치를 취하지 않도록 지시
Quarantine ▷ DMARC 검사가 실패하면 수신 메일 서버에 이메일을 넣도록 지시 합니다. 다만, 스팸필터가 있다면 관리자의 승인을 받아야 할 수 있습니다.
Reject ▷ DMARC 검사가 실패하면 수신메일 서버에 이메일을 거부하도록 지시합니다. 단 해당 설정이 되어 있더라도 모든 수신 메일서버가 해당 정책을 준수하지는 않습니다.
□ pct=100
DMARC가 적용되는 도메인 이메일의 비율
□ rua
Dmarc 사용에 대한 집계 보고서 URI(Uniform Resource Identifier) 통합 자원 식별자를 구분합니다. 간단하게 얘기하면 보고서를 받을 수신 이메일 주소를 설정합니다. 실제 사용하는 이메일 주소를 입력합니다.
STEP06 → DMARC 등록 체크
① 서버 내 opendmarc-check 도구를 이용한 체크
◇ DMARC 응답 테스트
[root@ ~]# opendmarc-check mydomain.com
DMARC record for foxydog.co.kr:
Sample percentage: 100 [pct=100]
DKIM alignment: relaxed
SPF alignment: relaxed
Domain policy: none [p=none]
Subdomain policy: unspecified
Aggregate report URIs: [rua]
mailto:foxydog@foxydog.co.kr
Failure report URIs:
(none)
◇ 혹시나 조회가 안될 경우 방화벽 TCP/UDP 53번 포트를 오픈해보세요.
[root@ ~]# firewall-cmd --permanent --add-port=53/tcp --add-port=53/udp [방화벽 추가]
success
[root@ ~]# firewall-cmd --reload [적용]
success
② Nslookup 명령어를 이용한 체크
[root@ ~]# nslookup -type=txt _dmarc.mydomain.co.kr
③ 사이트를 이용한 DMARC 체크
네임서버 체크 사이트 : https://mxtoolbox.com/SuperTool.aspx?action
해당 사이트는 해외에서도 유명하며, 여러 가지 체크 툴이 많아서 알아두시면 유용합니다.
DMARC Lookup을 선택을 하고
DMARC 호스트를 생성한 이름을 입력합니다 : _dmarc.[mydomain.com]
STEP07 → Postfix Maillog에서 수신, 발신 이메일 헤더 DMARC값 확인
◇ 서버 로그에서 직접 확인
[root@ ~]# tail -f /var/log/maillog [실시간 로그 확인]
ⓛ Dmarc값이 있는 포탈에서 수신[네이버 예시] : Pass [통과]
mail opendmarc[93783]: 0EB05800A7: naver.com pass
② Dmarc값이 없는 일반 기업 메일 수신 : none [통과는 되었지만 의심 필요]
mail opendmarc[93783]: 82A27800A7: demo.foxydog.co.kr none
③ 웹메일 수신 헤더에서 직접 확인[스크린샷 참고]
④ 발송한 메일을 Gmail에서 수신 DMARC 확인
'◈『Open(Source) Solution』 > 메일서버(RoundCube)' 카테고리의 다른 글
RoundCube - Plugins 「Password」 비밀번호 변경 적용 [feat. MariaDB] (2) | 2024.06.03 |
---|---|
Rocky Linux - 메일서버(Postfix) RBL 정책 적용 (2) | 2022.07.07 |
Rocky Linux - 메일서버(Postfix) DKIM 정책 적용 (0) | 2022.06.25 |
Rocky Linux - 메일서버(Postfix) SPF 정책 적용 (2) | 2022.06.20 |
Rocky Linux - 메일서버 구축 트러블슈팅(troubleshooting) (0) | 2022.06.04 |