IceWarp 이메일 서버 자세히보기

고객지원

도메인키(DomainKeys)의 이해와 구현

알 수 없는 사용자 2007. 2. 16. 09:01

전자 메일이 나오고 스팸이 출현하기 시작하면서, 스패머와 메일 서버 관리자간에는 보이지 않는 전쟁이 수십 년째 지속되고 있다. 스패머가 새로운 기술로 사용자를 농락하면, 메일 서버의 보안 엔지니어들이 그 기술에 대항하여 차단할 수 있는 기술을 만들어 내는 등, 아직도 스팸과 전쟁이 지속되고 있다.

이런 가운데, 우리나라에서 주로 사용되는 스팸 차단 기술은 아주 기본적인 수준에 머물러 있다. 스팸 차단 기술이라 부르기는 좀 뭐하지만, SPF가 작년 하반기에 인프라가 구축되었다.

SPF(Sender Policy Frame)은 발송자(정확히는 발송 서버)의 IP가 실제 도메인 이름과 일치하는지 확인하는 하나의 인증 기술이다. 다시 말하면, SPF, Sender-ID와 같은 기술은 IP주소와 도메인이름의 일치 여부를 검사하여 이를 위반하는 메일에 대해 수신 서버의 스팸 엔진에서 별도의 점수를 부과하여 또는 처리를 하도록 하여 스팸을 막아주는 역할을 수행한다. 하지만, 정확히 말하면 스팸을 검사하는 것이 아니라, 해당 IP로 위조되어 발송한 메일을 구별해 내는 것에 불과하므로, 어느 정도의 효과를 기대할 수 있을 뿐이다. 또한, 국내의 대형 포탈에서는 SPF를 통해 화이트도메인을 등록하는 체계를 이용하여 IP등록제(화이트도메인)를 운영하고 있다.이에 대한 자료는 이 글 마지막 부분을 참고하기 바란다.

이러한 단점에 비하여, 도메인키는 좀더 나은 체계를 가지고 있다. 도메인키는 전자 서명 기술을 이용한다. 원래 도메인키는 Yahoo!가 처음 제시하여 사용된 기술로 지금은 좀더 보완하고 발전한 기술로 도메인키라고 불리우며, 앞으로 널리 사용된 기술은 DKIM(Domain Key Identified Mail)이라고 한다. 차후에 DKIM에 대해서도 자세한 자료를 설명하고, 메라크 메일 서버에 DKIM을 어떻게 적용하여 사용하지는지에 대해서도 다룰 예정이니 기대하기 바란다.


도메인 키의 인증 원리

 
  도메인 키는 전자 서명기술을 사용한다. 발송자가 미리 준비한 공용/사설키 쌍을 가지고 있고, 발송시 개인키와 메일 내용을 가지고 특정한 헤더값을 만든다. 이 값을 발송시에 헤더에 추가하여 보내고, 수신 서버는 발송 서버의 공개키와 메일에 포함된 헤더 값을 비교하여 메일이 올바른지 판단한다. 좀더 자세히 알아 보자.

전자 서명: 전자서명은 전자문서를 작성한 자의 신원과 전자 문서의 변경 여부를 확인할 수 있도록 비대칭 암호화방식을 이용하여 전자서명생성키로 생성한 정보로서 당해 전자문서에 고유한 것을 말한다.

전자서명 기술: 전자서명기술은 공개키와 개인키간 합치성(Correspondence)의 특성을 이용하여 전자문서를 수신한 상대방이 송신자의 신원확인, 전자문서의 위.변조 방지, 전자문서의 송신사실의 부인 방지를 할 수 있는 기술을 말한다.

공개키 암호기술에 기반을 둔 전자서명기술은 개인키/사설키(Private Key)와 공개키(Public Key)라는 두 개의 키를 이용하여 문서를 전자서명하고 이를 검증하는 기술로 공개키암호기술에서 개인키는 사용자 자신만이 알고있는 키를 말하며, 사용자는 이 키를 이용하여 문서에 전자서명을 한다.

공개키는 이 개인키에 대응하는 키로서, 문서를 수신할 상대방은 공개키를 이용하여 전자서명된 문서를 검증한다. 개인키로 전자서명된 문서는 이에 대응하는 공개키를 가진 사람만이 그 서명을 검증할 수 있다. 전자서명된 문서가 A의 공개키로 검증된다면 이 문서는 A의 개인키로 전자서명된 것임을 알 수 있다.


발송 서버의 동작 원리

사용자 삽입 이미지

1. 먼저 DNS 서버에는 selector._domainkeys라고 하는 TXT 레코드를 생성한다. 이 레코드 값 속에는 도메인 이름과 선택자(selector) 그리고 키 길이(바이트)에 맞는 개인키와 공용키가 들어 있다. 개인키는 말 그대로 비밀 키이므로 메일 서버에 보관하고, 공개키는 DNS에 공개한다. 공개키는 나중에 수신 서버가 메일을 받았을 때 참조하게 된다.

2. 메일을 발송할 때 발송서버는 개인키를 이용하여 메시지의 디지털 서명값을 만들어 이 값을 메일 메시지의 헤더 부분에 삽입하여 발송한다.



수신 서버의 동작 원리

3. 수신 서버는 메일을 수신하고, 메일 내에 도메인키가 적용된 즉, 특별한 헤더값이 포함된 경우에는 이를 인증하는 과정을 진행한다.

4. 수신한 메일에서 발송 도메인을 찾아, 이 도메인의 공개키를 조회하여 알아 낸다. 이 공개키와 메일 헤더 내에 삽입되어 있는 디지털 서명값을 통해 개인키로부터 메일이 작성되어 보내졌는지를 확인한다. 이 과정에서 메일 내용뿐만 아니라 헤더의 변조 여부까지도 알 수 있다.

5. 스팸 엔진의 정책 또는 회사 정책에 따라 도메인 키가 확인된 메일에 점수를 부여하거나 하는 등의 추가적인 처리 과정을 거쳐 사용자에게 정상 또는 스팸으로 분류하여 배달한다.

참고: 스팸 어새신의 기본 정책에서는 도메인키 확인시 -0.5점을 부여한다.

앞에서 설명했던 이론으로 중무장하고 이제 실전의 장으로 나가 보자. 메라크 메일 서버에서는 관리자의 편의를 위해 아주 간단한 조작만으로도 손쉽게 도메인키를 구현할 수 있다.


설정

  설정 부분은 메라크 메일서버와 DNS 서버 두 부분으로 나뉜다. 차근차근 살펴 보도록 하자.

1. 도메인 키 사용 및 설정 (메라크 메일 서버에서 설정할 사항)

1) 메라크 관리 콘솔 -> 도메인 & 계정 -> 관리 노드를 선택하고,  여러분의 도메인을 선택하고 오른쪽 세부창에서 도메인키 탭을 클릭한다. 아래 그림과 같이, 사용에 체크 버튼을 클릭할 수 없기 때문에 먼저 이를 활성화해야 한다.
사용자 삽입 이미지

2) 메라크 관리 콘솔 -> 도메인 및 관리 -> 전역설정 노드를 선택하고, 오른쪽 세부창에서 도메인 탭을 클릭한다. 가상 도메인 박스에서 도메인키 사용에 체크를 하고 적용 버튼을 눌러 설정 사항을 저장한다.
사용자 삽입 이미지

3) 첫 번째 단계를 다시 클릭하여 이동한다. 활성화되지 않았던 사용 부분을 선택할 수 있는지 확인한다. 사용 버튼에 체크를 하고, 저장 버튼을 눌러 저장한다.

4) 선택자도메인을 입력한다. 선택자는 관리자 마음대로 입력할 수 있지만, 가급적 버전의 확인을 위해 앞부분에 dk와 같은 단어를 추가하는 방식을 추천한다. 여기 예에서는 dk_primary라고 입력하고, 도메인은 merakdemo.com이라고 입력한다.(당연한 얘기지만, 이 글을 읽으면서 실제 메일서버에 동일하게 입력하는 실수는 하지 않겠죠?) 처리 방식 기본을 선택한다. nofws에 대한 자세한 사항은 사용 설명서를 참고하기 바란다.
사용자 삽입 이미지

5) 사설키 생성 버튼을 클릭하면, 키의 길이를 입력하는 팝업 상자가 나타난다. 512비트 그대로 놔두고 확인 버튼을 누른다. 그러면, 개인키가 자동으로 생성된 것을 볼 수 있다.
사용자 삽입 이미지

사용자 삽입 이미지

참고: 위의 그림에서 사설 키 내의 데이터 첫 부분을 보면 RSA PRIVATE KEY라는 식별 표시가 있다.

6) 선택자와 사설키, 키길이를 토대로 하여 공개키를 만든다. DNS 서버에 등록할 공개키는 선택자 데이터 조회 버튼을 누르면 선택자 데이터 란에 값이 자동으로 산출된다. 저장 버튼을 눌러 변경 사항을 모두 저장한다. 선택자 데이터에 있는 값을 복사하여 안전한 파일로 저장하여 잠시 후에 다룰 DNS 서버에 등록한다.
사용자 삽입 이미지


2. 공개키 등록(DNS에서 설정할 사항)

1) DNS 서버에서 DNS 콘솔을 열고, 해당 도메인을 선택한다. 도메인의 설정 사항은 아래 그림과 별반 다르지 않을 것이다.
사용자 삽입 이미지

2) 오른쪽 세부 창에서, 빈 공간에 마우스 오른쪽 버튼을 클릭하고, 새 도메인을 선택한다.
사용자 삽입 이미지

3) 새 도메인 대화상자에서 _domainkeys를 입력하고 확인 버튼을 클릭한다.
사용자 삽입 이미지

4) 좀 전에 생성한 _domainkeys 도메인을 클릭하여 해당 도메인에 포함된 레코드를 살펴 본다. 지금 생성하였기 때문에 아무것도 포함되어 있다.

5) 오른쪽 세부 창에서 빈 공간에 마우스 오른쪽 버튼을 클릭하고, 다른 새 레코드를 선택한다.
사용자 삽입 이미지

6) 리소스 레코드 종류 대화상자에서 텍스트를 선택하고 레코드 만들기 버튼을 클릭한다.
사용자 삽입 이미지

7) 새 리소스 레코드 대화상자가 나타난다. 레코드 이름은 앞서 메라크 메일 서버에서 입력했던 선택자를 입력한다. 텍스트 부분에는 선택자 데이터 란의 텍스트를 복사한다.

사용자 삽입 이미지

참고: 선택자 데이터는 k=으로 시작하고, ==으로 끝이 난다.

8) 확인 버튼을 누르고, 완료 버튼을 누르고, DNS 콘솔에서 추가된 부분을 한번 더 확인한다. 정확하다고 판단되면 DNS 콘솔도 종료한다.
사용자 삽입 이미지

9) DNS의 변경사항을 곧바로 반영하기 위해 서비스 콘솔에서 DNS Server 서비스를 중지했다가 시작한다.


3. 도메인키 설정 확인

도메인키가 제대로 동작하는 지 확인하는 가장 빠른 방법은 도메인키를 지원하는 메일서버에 메일을 주고 받아 헤더값 또는 스팸어새신이 산출해 내는 결과를 살펴 보면 된다. 메라크 메일서버에서는 안티 스팸 옵션이 켜 있어야 메일 수신시에 도메인키가 동작하는지 쉽게 알 수 있다.

1) 먼저 메라크 메일 서버에서 구글(Gmail.com)으로 메일을 한 통 발송한다.

2) 회신 받을 메라크 메일 서버는 안티 스팸 옵션을 켜고, 동작 중이어야 하며, 안티 스팸 설정사항 중에 도메인 키에 체크가 되어 있어야 한다.
사용자 삽입 이미지

3) 아래 화면은 Gmail에서 수신한 메일의 헤더 중 도메인 키에 대한 부분이다. 안티 스팸 엔진에서 도메인키가 확인되었다는 내용이 어디에 있을까? 한번 찾아 보시라. 정답은 이 글의 맨 마지막에 간단히 적어 놓겠다.
사용자 삽입 이미지

지금까지 도메인키의 동작원리와 이를 메라크 메일서버에 적용하여 사용하는 방법에 대해 살펴 보았다. 추가적인 자료는 아래 링크를 참조하기 바라며, 다음 강좌는 도메인 키가 한층 발전된 기술인 DKIM(DomainKeys Identified Mail)에 대해 다룰 에정이니 많은 기대 바란다.


주의사항: 메라크 메일서버 8.9.1 버전까지는 도메인키 기술을 사용하며, 그 이후 버전에서는 DKIM을 구현하고 있다.




퀴즈 정답: DK_VERIFIED