티스토리 뷰
메일서버를 운영하다보면 메일 헤더를 위변조해서 스팸을 발송하거나
내부 메일계정이 탈취되었을때 릴레이로 메일서버를 직접적으로 거치지 않고도 스팸이 발송될 수 있다.
그래서 메일서버 앞단에 스팸보안 장비를 둬서 스팸 송/수신을 걸러내기도 하지만
내부 메일계정이 탈취되어 스팸릴레이에 이용 될 경우 내 도메인이 신뢰도 하락으로 각종 사이트에서 차단 걸릴 수 있다.
계정 유출이 안되게 하는 것도 중요하고 내 메일서버에서 발송된 메일이 정상발송인지도 확인해주면 더 좋다.
이런 점으로 작년에 적용한 메일보안 국제표준 기술 3가지를 간단히 기술해보려고 한다.
그 3가지는 SPF, DKIM, DMARC 인데 이번 포스트는 DKIM 설정 방법을 설명해본다.
셋중 나름 가장 복잡하다 ㅋㅋㅋ
DKIM (Domain Keys Identified Mail)
DKIM 이란, 수신측 메일서버가 발신측에서 보낸 전자서명과 DNS에 등록된 DKIM 공개키로 전자서명을 검증하여 스팸인지 아닌지 확인.
위 참고 이미지처럼 발신측에서 사전에 DNS에 도메인 공개키정보를 등록하고,
메일 발송 시 DKIM-Signature 에 전자서명을 포함하여 전송하면 수신측에서 DNS에 DKIM 레코드를 조회하여
발신측이 보낸 DKIM-Signature와 디지털서명을 검증하여 스팸인지 아닌지를 판별한다.
DKIM도 SPF와 동일하게 DNS Zone 파일에 DKIM 레코드를 등록하면 되는데
그 키값을 생성하여 넣어줘야 하기때문에 살짝 복잡하다.
DKIM 레코드는 아래와 같다.
sample._domainkey.sample.co.kr IN TXT =
"v=DKIM1; k=rsa; "
"p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRX+"
"dDvqq5GLJNacUcZwVnfx1mCaz9ztm9XNssbAFodP9GOabewnszie"
"WmWYEymzpaHWg+Deb0LcALHZO4qXk7fNN0a5R1r/ulKg9ZWHWTU4D8KY"
"p4KKVmkrYBeTSrZT9W6UJ49fnjdlLV6+saN6iU/fhyekNTSVowX6M/9JhsQQIDAQAB"
생성된 DKIM 레코드는 원래는 TXT 부분이 한줄로 쭉~ 나오는데 DNS zone 파일 따라 끊어서 입력해줘야 한다.
(호스팅업체에 따라 zone파일 입력방식이 약간 상이한 걸로 알고 있다.)
그럼 이제 저 키값을 어떻게 생성하는지 알아야 하는데, 키값을 생성하여 넣는 방법은 3가지 정도로 볼 수 있다.
case #1: 메일서버 앞단에 스팸장비가 있는 경우 스팸장비에서 설정 가능 (가장 심플함)
case #2: 메일서버에서 opendkim 으로 키를 생성하여 적용
case #3: DKIM generator 사이트에서 키값 얻어서 적용
필자의 경우 메일서버 앞단에 스팸장비가 있고, 스팸장비에 DKIM을 설정하는 옵션이 있었다.
selector와 서명알고리즘(SHA-256)을 지정하면 공개키가 자동으로 생성되어 그 정보를 가지고 Zone파일에 등록하여 손쉽게 해결하였다.
메일서버에서 직접 키를 생성하여 적용하진 않게 되었지만,
opendkim 을 이용하여 키값이 어떻게 생성되는지 궁금하여 서버단에서 생성해보았다.
먼저 opendkim 을 설치한다.
yum install opendkim
설치하고 나면 /etc 하위에 opendkim 관련 설정파일과 디렉토리가 생성된 것을 확인할 수 있다.
/etc/opendkim
/etc/opendkim.conf
opendkim 디렉토리 안에 가보면 생성한 키 정보들을 가지고 아래 **Table 파일에 기입해줘야 된다.
그 안에 example 예시가 있으니 쉽게 이해가 될 것이다.
-rw-r-----. 1 opendkim opendkim 339 12월 21 2016 KeyTable
-rw-r-----. 1 opendkim opendkim 1221 12월 21 2016 SigningTable
-rw-r-----. 1 opendkim opendkim 378 12월 21 2016 TrustedHosts
drwxr-x---. 4 opendkim opendkim 4096 1월 30 14:21 keys
나는 keys 하위에 도메인폴더를 하나 생성하고 그 안에서 키값을 생성하였다.
opendkim-genkey -d {#도메인} -s {#Selector}
mkdir /etc/opendkim/keys/sample.co.kr
cd /etc/opendkim/keys/sample.co.kr
opendkim-genkey -d sample.co.kr -s sample
나는 sample.co.kr 도메인과 sample 이라는 selector 로 dkim을 생성하였다.
위 명령어를 치면 자동으로 개인키와 레코드가 생성된다.
(이 파일들을 실제로 적용하려면 chmod로 읽기권한을 열어줘야 한다. chmod 640, 644)
-rw-r-----. 1 root root 887 1월 30 15:04 sample.private
-rw-r--r--. 1 root root 314 1월 30 15:04 sample.txt
위 파일들을 가지고 아까 언급했던
KeyTable, SigningTable, TrustedHosts, opendkim.conf 를 설정해야 한다.
아마 example 로 주석처리 되어있고 해당 파일 위치만 지정해주면 되는 것 같다.
설정이 완료됐으면 opendkim 서비스를 구동시키고 메일서버에 opendkim 을 연결 후 재기동 시켜주면 되는 것 같다.
(이것까진 내 메일서버에서 테스트 할 수 없어 아래 블로그를 참조하셨으면 한다.
설정참조
생성된 sample.txt 를 DNS zone 파일에 등록시켜주면된다.
sample._domainkey.sample.co.kr IN TXT =
"v=DKIM1; k=rsa; "
"p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRX+"
"dDvqq5GLJNacUcZwVnfx1mCaz9ztm9XNssbAFodP9GOabewnszie"
"WmWYEymzpaHWg+Deb0LcALHZO4qXk7fNN0a5R1r/ulKg9ZWHWTU4D8KY"
"p4KKVmkrYBeTSrZT9W6UJ49fnjdlLV6+saN6iU/fhyekNTSVowX6M/9JhsQQIDAQAB"
메일을 전송한 후 수신측에서 메일 원문보기를 눌러보면 (구글기준)
내 메일서버에 DKIM이 잘 적용된 것을 볼 수 있다.
주의사항
하지만 DKIM도 도메인 검증만 할 뿐 MAIL FROM 과 From을 비교하지 않았기 때문에
스팸공격자 도메인으로 MAIL FROM과 DKIM을 설정해버리면 From 이 변조해서 오면 스팸이 차단되지 않을 수 있다.
그래서 마지막으로 DMARC까지 설정해야 한다.
DMARC는 다음 포스트에서 이어 가도록 하겠습니다.
'보안 > 메일보안' 카테고리의 다른 글
[MAIL보안] spf, dkim, dmarc 설정 확인하기(feat.nslookup) (0) | 2024.04.12 |
---|---|
[MAIL보안] DMARC (Domain-based Message Authentication Reporting Conformance) 메일 보안 - 3 (0) | 2023.02.03 |
[MAIL보안] SPF (Sender Policy Framework) 메일 보안 - 1 (2) | 2023.01.27 |