하이웍스메일 보안

[보안메일] SPF, 메일서버등록제

스팸메일 필터링을 위해 메일 서비스 제공 업체들은 다양한 기술을 적용하고 있습니다. 그 중 하나가 메일에 표시된 발송자 정보가 서버에 정상적으로 등록된 정보인지 확인할 수 있는 SPF 기술입니다.

스팸메일의 문제점은 수신 거부를 해도 스팸 발송자가 발신자 정보를 지속적으로 위/변조하여 발송한다는 것인데요. 이런 행위를 이메일 위장, 또는 이메일 스푸핑(Spoofing)이라고 합니다. SPF(메일서버등록제, Sender Policy Framework) 레코드는 이를 방지하기 위한 인증 기술로, 메일서버 정보를 사전에 DNS에 공개 등록하여 메일에 표시된 발신자 정보가 실제 메일 서버 정보와 일치하는지 확인합니다.

그러므로 내 도메인 호스트에 SPF 레코드를 추가해두면 메일을 보낼 때 수신자에게 내가 보낸 메일이 위장 메일이 아니라는 것을 알려줄 수 있습니다. 만약 SPF 레코드가 입력되어 있지 않거나 올바른 값이 아닐 경우, 엄격한 정책을 가진 메일 업체에서는 메일 수신을 거부할 수 있습니다.

SPF 레코드 작동 원리

SPF는 메일 수신 시 메일 서버가 발신자의 IP주소를 매커니즘에 정의된 IP 주소와 비교하는 방식으로 작동합니다. 즉 발신자가 DNS에 메일 서버의 정보와 정책을 나타내는 SPF 레코드를 등록해두면, 수신자가 이메일을 수신할 때 발신자의 DNS에 등록된 SPF 레코드와 이메일에 표시된 발송 IP를 대조한 뒤 수신 여부를 결정하는 것입니다. 이를 위해선 수신자의 메일 서버나 스팸차단솔루션에 SPF 확인 기능이 설치되어 있어야 합니다.

하이웍스의 예시를 통해 SPF 레코드의 형식과 매커니즘을 알아보겠습니다.

SPF 레코드는 일반적으로 TXT 레코드 타입을 사용합니다. 아래 예시와 같이 한 줄로 정의가 되는데요.

“v=spf1 include:_spf.hiworks.co.kr ~all”

SPF 레코드는 항상 v= 로 시작하며, 이는 사용된 SPF 버전을 나타냅니다. 현재 버전은 spf1이며, 메일 교환을 위한 가장 일반적인 SPF 버전입니다.

그 다음에 오는 내용은 호스트가 도메인에서 메일을 보내거나, SPF 레코드를 처리하기 위한 매커니즘입니다. 매커니즘이란 해당 도메인에서 발송 서버로 지정된 호스트의 질의(Query) 형식입니다.

위 예시에서 Include는 외부 SMTP 서버를 이용하는 경우 발신자를 자신의 도메인으로 해도 메일 스푸핑으로 처리하지 않겠다는 의미입니다. 다음 all 매커니즘은 이전 매커니즘과 일치하지 않은 발신자 IP에 대해 어떻게 처리할지를 나타내는 마지막 매커니즘으로, SPF 레코드의 가장 마지막 자리에 표시합니다.

all 앞에 붙은 “~”는 수식자(qualifiers)라고 하며, 매커니즘 앞에는 아래와 같이 3개의 수식자가 붙을 수 있습니다. ~all을 해석하면 앞의 레코드에 포함되지 않은 곳에서 발송된 메일에 대해 soft fail을 적용한다는 뜻이 됩니다.

SPF 레코드 수식자(qualifiers)

  • + for pass
  • - for fail
  • ~ for soft fail
  • ? for neutral

SPF 메커니즘

메커니즘 설명사용 예시
all주로 SPF 레코드의 가장 마지막 자리에 오며 항상 사용“v=spf1 mx -all” 해당 도메인의 mx 서버를 질의하여 발송 서버의 IP의 mx서버의 IP와 일치하면 수신 허용
“v=spf1 -all” 해당 도메인은 어느 서버에서도 메일을 발송하지 않음
“v=spf1 +all” 해당 도메인은 어느 서버에서도 수신을 허용
ip4ip4주소(또는 주소 범위)를 유효한 전송 소스로 정의“v=spf1 ip4:192.168.0.1 -all” 192.168.0.1의 IP주소만 허용하고 나머지는 실패
ip6 ip6주소(또는 주소 범위)를 유효한 전송 소스로 정의“v=spf1 ip6:1080::8:800:200C:417A/96 -all”  –  1080::8:800:0000:0000 와 1080::8:800:FFFF:FFFF 사이의 IP주소만 pass, 나머지는 fail.
a현재(또는 지정된) 도메인의 DNS a레코드를 유효한 전송 소스로 정의“v=spf1 a -all”  – 현재 도메인 테스트
MX현재(또는 지정된) 도메인의 DNS MX 레코드를 유효한 전송 소스로 정의 
include이 도메인의 SPF 레코드를 유효한 전송 소스로 정의 include : example.com