gmail로 메일을 보내는 경우 메일이 반송되거나 스팸으로 분리되는 경우가 있다
보통 spf 레코드값을 등록해서 처리하는데 이것도 안될경우 DKIM 을 설정을 진행해야 한다
DKIM은 DNS레코드값에 퍼블릭 키값을 공개해서 이용하는 방식이다
여기서는 opendkim 으로 구성을 해볼것이다
o/s : cenots 7.x / rocky 8.x
1. opendkim / opendkim-tools 설치 ( tools는 rocky8 버전에서만 설치 / 7버전은 자동 설치)
1 2 3 4 5 |
[root@xinet ~]# yum install epel-release [root@xinet ~]# yum -y install opendkim [root@mail3 ~]# yum -y install opendkim-tools |
2. 키값을 저장할 디렉토리 생성
1 |
[root@xinet ~]# mkdir -p /etc/opendkim/keys/xinet.kr |
3. 해당 디렉토리로 이동해서 키파일을 생성
1 2 3 4 5 6 7 |
[root@xinet ~]# cd /etc/opendkim/keys/xinet.kr/ [root@xinet /etc]# /usr/sbin/opendkim-genkey -b 2048 -d xinet.kr -D /etc/opendkim/keys/xinet.kr -s server -v opendkim-genkey: generating private key opendkim-genkey: private key written to server.private opendkim-genkey: extracting public key opendkim-genkey: DNS TXT record written to server.txt |
-b 2048 : 2048 비트로 설정
-d : 도메인 지정
-D : 키가 저장될 디렉토리 지정
-s : 서명 및 키 테이블 만들었던 dkim 명
4. 권한설정 중요
1 2 3 4 5 6 7 8 |
[root@xinet /etc]# chown opendkim:opendkim -R /etc/opendkim/keys/ [root@xinet /etc]# chmod 700 /etc/opendkim/keys/xinet.kr/* [root@xinet /etc/opendkim/keys/xinet.kr]# ls -l 합계 8 -rw------- 1 root root 887 5월 27 16:18 default.private -rw------- 1 root root 312 5월 27 16:18 default.txt |
5. KeyTable 에 개인키 추가
1 2 3 |
[root@xinet /etc/opendkim/keys/xinet.kr]# vi /etc/opendkim/KeyTable server._domainkey.xinet.kr xinet.kr:server:/etc/opendkim/keys/xinet.kr/server.private |
6. SigningTable 에 서명 테이블 설정 / 여기서는 와일드카드 /즉 모든 메일에 대해서
1 2 3 |
[root@xinet /etc/opendkim]# vi /etc/opendkim/SigningTable *@xinet.kr server._domainkey.xinet.kr |
7. 환경설정 파일 수정 ( 소켓으로 구성할지 / 아이피 tcp방식으로 할지 구성후 사용)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[root@xinet /etc/opendkim]# vi /etc/opendkim.conf PidFile /var/run/opendkim/opendkim.pid Mode sv Syslog yes SyslogSuccess yes LogWhy yes UserID opendkim:opendkim Socket inet:8891@localhost Umask 002 SendReports yes SoftwareHeader yes Canonicalization relaxed/relaxed Selector default MinimumKeyBits 1024 KeyTable /etc/opendkim/KeyTable SigningTable refile:/etc/opendkim/SigningTable ExternalIgnoreList refile:/etc/opendkim/TrustedHosts InternalHosts refile:/etc/opendkim/TrustedHosts OversignHeaders From |
8. 서비스 시작 및 서비스 등록
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
[root@xinet /etc/opendkim]# systemctl start opendkim.service [root@xinet /etc/opendkim]# systemctl status opendkim.service ● opendkim.service - DomainKeys Identified Mail (DKIM) Milter Loaded: loaded (/usr/lib/systemd/system/opendkim.service; disabled; vendor preset: disabled) Active: active (running) since 월 2024-05-27 16:32:17 KST; 5s ago Docs: man:opendkim(8) man:opendkim.conf(5) man:opendkim-genkey(8) man:opendkim-genzone(8) man:opendkim-testadsp(8) man:opendkim-testkey http://www.opendkim.org/docs.html Process: 29708 ExecStart=/usr/sbin/opendkim $OPTIONS (code=exited, status=0/SUCCESS) Main PID: 29709 (opendkim) CGroup: /system.slice/opendkim.service └─29709 /usr/sbin/opendkim -x /etc/opendkim.conf -P /var/run/opendkim/opendkim.pid 5월 27 16:32:17 xinet.kr systemd[1]: Starting DomainKeys Identified Mail (DKIM) Milter... 5월 27 16:32:17 xinet.kr opendkim[29709]: OpenDKIM Filter v2.11.0 starting (args: -x /etc/opendkim.conf -P /var/run/opendkim/opendkim.pid) 5월 27 16:32:17 xinet.kr systemd[1]: Started DomainKeys Identified Mail (DKIM) Milter. ### 서비스 등록 [root@xinet /etc/opendkim]# systemctl enable opendkim.service Created symlink from /etc/systemd/system/multi-user.target.wants/opendkim.service to /usr/lib/systemd/system/opendkim.service. |
9. 공개키를 확인해서 해당 정보를 dns 레코드값 text값에 저장하면 됨
1 2 3 4 |
[root@xinet /etc]# cat /etc/opendkim/keys/xinet.kr/server.txt server._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwNxi1AqzvqZLJyek0sxaIqaEtg4c2XZVd8lfdZdw9dCC+8snxOkO+fYpOxUQixHDu+mjk207qZnnQ96SNgaRKu2v3lw4WRwPFnNU2MzeUcSfGAGh2pnVy7tx/cALtA9fnqq2yKZX939/jQg21VMFKGiyynE5XZXOFOWyGpC82bG/8HkKIj3b2RfDIBwlmO9vuxBPg9bxOKJc+I" "otY5VvpIK71kGfQ24KBdcvTI9Kgsr6FQ3tW54EuldRC7s2Vk6JjHhADHcRxuqbFthO7Sh0H0lQtDxfcld0VqYOLeU6CCJhEgcHMpUsCgnDMmiRrNiPSvl8awoqrsOctEs0QDE/wQIDAQAB" ) ; ----- DKIM key server for xinet.kr |
10. 해당 정보는 bind 에서 추가할수 있고 아니면 pdns를 사용한다면 pdns에서 추가하면 된다 위 정보에서 v=DKIM1 부분부터 QAB 부분까지 복사해서 입력
1 2 3 4 5 6 |
[root@xinet /etc]# vi /var/named/xinedt.kr.zone server._domainkey IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwNxi1AqzvqZLJyek0s xaIqaEtg4c2XZVd8lfdZdw9dCC+8snxOkO+fYpOxUQixHDu+mjk207qZnnQ96SNgaRKu2v3lw4WRwPFnNU2MzeUcSfGAGh2pnVy7tx/cALtA9fnqq2yKZX939 /jQg21VMFKGiyynE5XZXOFOWyGpC82bG/8HkKIj3b2RfDIBwlmO9vuxBPg9bxOKJc+IotY5VvpIK71kGfQ24KBdcvTI9Kgsr6FQ3tW54EuldRC7s2Vk6JjHhA DHcRxuqbFthO7Sh0H0lQtDxfcld0VqYOLeU6CCJhEgcHMpUsCgnDMmiRrNiPSvl8awoqrsOctEs0QDE/wQIDAQAB" |
11. pdns 정보는 name 부분에는 : server._domainkey 입력하고 txt 레도드값에
12. txt 레도드값에 위에서 복사한 내용 v=DKIM1 부분부터 QAB까지 복사해서 입력
13. DNS레코드에 등록을 모두 하였다면 testkey 명령어로 정상적인지 확인 할 수 있다
1 2 3 4 |
[root@xinet ~]# opendkim-testkey -d xinet.kr -s server -vvv opendkim-testkey: using default configfile /etc/opendkim.conf opendkim-testkey: checking key 'server._domainkey.xinet.kr' opendkim-testkey: key OK |
웹페이지에서 확인 할 수 있다
https://mxtoolbox.com/SuperTool.aspx?action
도메인명:서명 입력후 DKIM Lookup 버튼 클릭
정상적으로 DKIM 이 적용되었다는것을 확인
그럼 이제 GMAIL로 메일을 보내서 DKIM이 적용되었는지 확인해보자
sendmail 을 통해서 발송할거라서 sendmail에서 dkim을 적용
1 2 3 4 5 6 7 8 9 10 |
[root@xinet /etc/opendkim]# vi /etc/mail/sendmail.mc INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@127.0.0.1')dnl ###sendmail cf파일 생성 [root@xinet /etc/opendkim]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf ### 재시작 [root@xinet /etc/opendkim]# systemctl restart sendmail |
14. GMAIL로 메일을 보낸다음 메일 부분에 원본보기를 클릭을 하게 되면
15. DKIM 적용이 된것을 확인 할 수 있다
16. dkim=pass 부분을 확인할 수 있다 적용되었다는 것을 확인 할 수 있다
17. mail로그에서 확인가능
1 2 3 4 5 6 7 8 9 |
837213914@phpmail>, proto=ESMTP, daemon=TLSMTA, relay=xinet.kr [218.145.31.50] May 28 12:08:25 xinet opendkim[34405]: 44S38HaG042140: DKIM-Signature field added (s=server, d=xinet.kr) May 28 12:08:25 xinet sendmail[42140]: 44S38HaG042140: Milter insert (1): header: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xinet.kr; s=server;\n\tt=1716865704; bh=35yd/iiwpd7ECahFRYNvwRcKtvc0ACKzsL9voh2eITQ=;\n\th=From:To:Subject:Date:From;\n\tb=dro98XBNDwgbKxvcEe2+tm3S/SB4dsTih5iSPCJMB5+fl4wk682NF911Lz5mKBi5W\n\t bE9NQgoqq0/ppFiN1YImI3x/5KyAilhBhM87136Kfc9lR+KghN4ISQd9lpdVaGPxAt\n\t luTiqk+aOFUcdfHvYX/7pu5hhYbyCkL/gWBTSxkbsPlXKt33HpBqAsbao3wKHnMePw\n\t 4OKnYKuqZNok5dfaVBUQcTLtJHWuCTVtPZIGN+mh6PwQCDliI8qSOmVokmB2TkDcfh\n\t 9HrwZo7kd2UV+A91g+qCwpYhUyx4TCf/gkvHij1A+Hwvf8V3s2wSgfOwTlWm0T+izT\n\t QbHQM16MuQaDQ== May 28 12:08:25 xinet sendmail[42140]: 44S38HaG042140: Milter insert (1): header: DKIM-Filter: OpenDKIM Filter v2.11.0 xinet.kr 44S38HaG042140 May 28 12:08:25 xinet sendmail[42145]: 44S38Ix4042145: from=<server@xinet.kr>, size=375, class=0, nrcpts=1, msgid=<20240528120825789109398@phpmail>, proto=ESMTP, daemon=TLSMTA, relay=xinet.kr [218.145.31.50] May 28 12:08:25 xinet sendmail[42153]: STARTTLS=client, relay=gmail-smtp-in.l.google.com., version=TLSv1/SSLv3, verify=FAIL, cipher=ECDHE-ECDSA-AES128-GCM-SHA256, bits=128/128 May 28 12:08:25 xinet opendkim[34405]: 44S38Ix4042145: DKIM-Signature field added (s=server, d=xinet.kr) May 28 12:08:25 xinet sendmail[42145]: 44S38Ix4042145: Milter insert (1): header: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xinet.kr; s=server;\n\tt=1716865705; bh=35yd/iiwpd7ECahFRYNvwRcKtvc0ACKzsL9voh2eITQ=;\n\th=From:To:Subject:Date:From;\n\tb=quulLEb9Mt8BWH3KA1YmjaFnkBwOpgnd1pywCrFFmCWXZhcveuE9Opx83QIt6TjAA\n\t uHBhzeDELWLNPkOQwj/1bh9JZjg6S+pGeTxLjbsYVoDFcnspU17YaXYaZc+vz25eNz\n\t UbJIh44uDWTb3hojx8IDTJlyqg8/uAoQy6RE2V8lhZh85mYNdFrThHoOoA1GJ16dWW\n\t asvD6Y3LBzXLyjxsdhs9R5pg2dczex/jSKZRWNyXUXYj2n6+2zAfzwqOuUQt7xmFyl\n\t qlGxGCuczgKE1bg/sCYCuAD21Okdjh7V5z0xa0AtMNPP5DwFW44zfyUe9pbxnj01Y7\n\t HyyL1OXGLGSiQ== May 28 12:08:26 xinet sendmail[42145]: 44S38Ix4042145: Milter insert (1): header: DKIM-Filter: OpenDKIM Filter v2.11.0 xinet.kr 44S38Ix4042145 |