Rocky Linux - 메일서버(Postfix) DMARC 정책 적용

    ◆ 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/

    참고 문서https://datatracker.ietf.org/doc/rfc7489/

    참고 문서 : https://wiki.archlinux.org/title/OpenDMARC


    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 확인

     

    Designed by JB FACTORY