SPF·DKIM·DMARC 검사
어떤 도메인에서 왔다고 주장하는 메일을 믿을지는 DNS 레코드 세 개가 결정합니다. 셋을 모두 읽어서 각각 무슨 일을 하고 있는지, 어느 부분이 발목을 잡는지 설명합니다.
공개된 DNS만 읽습니다. 메일을 보내지 않으며, 도메인이나 메일 서버에 접속하지도 않습니다.
세 레코드가 하는 일
- SPF 는 이 도메인으로 메일을 보내도 되는 서버 목록입니다. 보낸 서버의 주소와 대조합니다.
- DKIM 은 공개키를 게시합니다. 보내는 서버가 각 메시지에 서명하고, 수신 측이 DNS의 키로 서명을 검증합니다.
- DMARC 는 SPF와 DKIM이 실패했을 때 어떻게 할지, 그리고 보고서를 어디로 보낼지 정합니다. 이게 없으면 앞의 둘은 참고용일 뿐입니다.
고치는 순서
- 내 이름으로 보내는 모든 서비스를 나열한 SPF를 게시하고, ~all로 끝냅니다.
- 그 서비스들 각각의 DKIM 키를 게시합니다.
- p=none과 rua 주소를 넣은 DMARC를 게시하고, 몇 주간 보고서를 읽습니다.
- 보고서에 내 메일만 통과하는 게 확인되면 p=quarantine, 그다음 p=reject로 올립니다.
보고서가 깨끗해지기 전에 DMARC를 조이면 정상 메일이 거부됩니다. 그 단계를 추측으로 하지 않으려고 보고서가 존재하는 것입니다.
메일이 스팸함으로 갑니다. 이 중 뭐가 원인인가요?
대개 p=none인 DMARC와, 없거나 느슨한 SPF의 조합입니다. 둘이 합쳐지면 수신 측에 강제할 근거가 하나도 없습니다. SPF를 먼저 고치고, 그다음 DKIM, DMARC를 마지막에 조이세요. DMARC가 앞의 둘을 근거로 움직이기 때문입니다.
왜 제 DKIM 키를 못 찾나요?
DKIM 키는 셀렉터 이름 아래에 있는데, DNS에는 셀렉터를 나열하는 방법이 없습니다. 모르면 흔한 기본값만 시도할 수 있습니다. 메일 서비스의 DNS 설정 화면에 셀렉터가 나와 있으니 위에 입력하세요.
p=none이 나쁜 건가요?
시작점으로는 맞고, 머무를 자리로는 틀렸습니다. 수신 측에 아무것도 하지 말라는 뜻이라 아무도 보호하지 못합니다. 다만 보고서는 생성되고, 조이기 전에 무엇이 깨질지 알려주는 게 그 보고서입니다.
10회 조회 한계가 뭔가요?
SPF 레코드의 include·a·mx·ptr·exists·redirect는 각각 DNS 조회를 하나씩 씁니다. 표준이 합계를 10회로 제한합니다. 넘으면 수신 측은 SPF를 영구 오류로 처리해야 하므로, 점진적으로 나빠지는 게 아니라 통째로 실패합니다.
테스트 메일을 보내나요?
아닙니다. 공개된 DNS 레코드만 읽습니다. 메시지를 만들지도, 도메인이나 메일 서버에 접속하지도 않습니다.