Special:Communication & Concept/FreeBSD 12.X jail 에서 메일 서버에 opendkim 과 OpenDMARC 설치 방법

Jump to: navigation, search
#206 [ Ssam ] hit: 19(#ecffec)

들어가기

jail 콘솔 접속

  • 특별히 명시하지 않는 한 모든 작업은 jail 콘솔에서 한다.
  • Full jail 을 사용 할 것이다.
  • 메일서버를 설치하기 위한 jail 의 호스트 이름은 mail 이다.
# jexec mail tcsh
메세지 출력
root@mail:/ #


OpenDKIM(Domainkeys Identified Mail)의 설치

  • 표준 옵션으로 사용
# pkg install opendkim
메세지 출력
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 7 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	opendkim: 2.10.3_11
	perl5: 5.30.0
	lua52: 5.2.4
	libedit: 3.1.20190324,1
	unbound: 1.9.4
	expat: 2.2.8
	libevent: 2.1.11

Number of packages to be installed: 7

The process will require 71 MiB more space.
17 MiB to be downloaded.

Proceed with this action? [y/N]: y

[..........]

Message from opendkim-2.10.3_11:

--
In order to run this port, write your opendkim.conf and:

if you use sendmail, add the milter socket `socketspec' in
/etc/mail/<your_configuration>.mc:

INPUT_MAIL_FILTER(`dkim-filter', `S=_YOUR_SOCKET_SPEC_, F=T, T=R:2m')

or if you use postfix write your milter socket `socketspec' in
/usr/local/etc/postfix/main.cf:

smtpd_milters = _YOUR_SOCKET_SPEC_

And to run the milter from startup, add milteropendkim_enable="YES" in
your /etc/rc.conf.
Extra options can be found in startup script.

Note: milter sockets must be accessible from postfix/smtpd;
  using inet sockets might be preferred.


  • 편집기 vi /etc/rc.conf 파일을 열어서 수정, vi로 열어서 추가해도 되고, 아래 명령으로도 추가 된다.
# sysrc milteropendkim_enable=YES


  • opendkim.conf 편집, 편집기 vi /usr/local/etc/mail/opendkim.conf 파일을 열어 수정.
  • opendkim 데몬과 postfix가 socket 통신하지만, 각각 다른 사용자로 실행하기 때문에 그룹에서 공유하기 위해 UMask을 변경.
##
## opendkim.conf -- configuration file for OpenDKIM filter
##
## Copyright (c) 2010-2015, The Trusted Domain Project.  All rights reserved.
##
Canonicalization        simple/simple
Domain                  zbm.kr
KeyFile                 /var/db/dkim/zbm.kr/mail.private
LogWhy                  yes
Mode                    sv
ReportAddress           "DKIM Error Postmaster" <postmaster@zbm.kr>
Selector                mail
SendReports             yes
Socket                  local:/var/run/milteropendkim/socket
SubDomains              yes
Syslog                  Yes
SyslogSuccess           yes
UMask                   002
## 재 작성한 것이므로 이 라인 아래로 모두 주석 처리하거나 삭제 한다.(같은 디렉토리에 샘플 파일 있음.)


  • 편집기 vi /etc/group 파일을 열어 18라인쯤에 mailnull:*:26: 을 이렇게 mailnull:*:26:postfix 로 수정 한다.
[.......]
mailnull:*:26:postfix
[.......]


  • 인증 키 생성
# mkdir -p /var/db/dkim/zbm.kr
# chmod 700 /var/db/dkim/zbm.kr
# opendkim-genkey -D /var/db/dkim/zbm.kr -d zbm.kr -s mail
# chown -R mailnull:mailnull /var/db/dkim/zbm.kr
  • 인증 키 확인
# ls -l /var/db/dkim/zbm.kr

total 8
-rw-------  1 mailnull  mailnull  887  9월 24 21:21 mail.private
-rw-------  1 mailnull  mailnull  302  9월 24 21:21 mail.txt


  • 공개 키 작성
  • dkim 용 공개 키 등을 DNS TXT 레코드로 설정( /var/db/dkim/zbm.kr/mail.txt 의 설정)
  • 편집기 vi /var/db/dkim/zbm.kr/mail.txt 파일을 열어 아래와 같이 입력. (DDNS 설정하는 곳에 입력, mail._domainkey 뒤에 .zbm.kr 이 붙어도 된다.)
  • p=MIGf~ 입력시 공백이 없게 잘 입력 해야된다.
mail._domainkey.zbm.kr      IN  TXT     "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9~~~"   ←  /var/db/dkim/zbm.kr/mail.txt 의 내용
  • 편집기 vi /usr/local/etc/namedb/master/zbm.kr.zone (DNS 서버를 직접 사용한다면)
mail._domainkey      IN  TXT     "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQ~~~~~~" ; ----- DKIM key mail for /var/db/dkim/zbm.kr/mail.txt


  • 참고, 공개 key 확인 여기에 넣어 보아서 녹색으로 This is a valid DKIM key record 메세지가 표시되면 제데로 입력된 것.


  • postfix 의 설정 변경
  • 편집기 vi /usr/local/etc/postfix/main.cf 파일을 열어 맨 끝에 추가 한다.
## mail filter
smtpd_milters = unix:/var/run/milteropendkim/socket
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
  • 시작
# service milter-opendkim start
# service milter-opendkim restart
# service postfix reload


OpenDMARC 설치

  • 패키지로 설치 해도 잘 된다.
# pkg install opendmarc


Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 18 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	opendmarc: 1.3.2_2
	p5-HTTP-Message: 6.18
	p5-LWP-MediaTypes: 6.04
	p5-HTTP-Date: 6.02_1
	p5-URI: 1.76
	p5-IO-HTML: 1.001_1
	p5-Encode-Locale: 1.05
	libspf2: 1.2.10_2
	p5-Switch: 2.17_1
	p5-Filter: 1.59
	p5-DBI: 1.642
	p5-DBD-mysql: 4.050
	mysql57-client: 5.7.27
	curl: 7.66.0
	libnghttp2: 1.39.2
	ca_root_nss: 3.47.1
	protobuf: 3.9.2,1
	liblz4: 1.9.2,1

Number of packages to be installed: 18

The process will require 81 MiB more space.
8 MiB to be downloaded.

Proceed with this action? [y/N]: y

또는 포트로 설치
  • DMARC (Domain-based Message Authentication, Reporting & Conformance)
  • OpenDMARC 설치
옵션에서
[ X ] DOCS Build and/or install documentation 에 체크 한다.
[ X ] SPF  Enable support for SPF record checking 에 체크 한다.
그 이 후로 항목 나오면 계속 엔터......
# cd /usr/ports/mail/opendmarc && make install clean

메세지 출력
[...........]
===>  Cleaning for libspf2-1.2.10_2
===>  Cleaning for p5-Switch-2.17_1
===>  Cleaning for p5-Filter-1.59
===>  Cleaning for p5-DBI-1.642
===>  Cleaning for p5-DBD-mysql-4.050
===>  Cleaning for p5-Devel-CheckLib-1.13
===>  Cleaning for p5-HTTP-Message-6.18
===>  Cleaning for p5-Encode-Locale-1.05
===>  Cleaning for p5-HTTP-Date-6.02_1
===>  Cleaning for p5-IO-HTML-1.001_1
===>  Cleaning for p5-LWP-MediaTypes-6.04
===>  Cleaning for p5-URI-1.76
===>  Cleaning for opendmarc-1.3.2_2


  • 편집기 vi /etc/rc.conf 파일을 열어서 추가 한다.
opendmarc_enable="YES"
opendmarc_socketspec="/var/run/opendmarc/socket"
  • opendmarc.conf의 편집, 샘플 파일이 있으므로 복사하여 편집 한다.

Template:Del


  • 샘플 파일을 복사하여 편집하거나 편집기 vi /usr/local/etc/mail/opendmarc.conf 파일을 열어 편집(열면 아무것도 없음).
## opendmarc.conf -- configuration file for OpenDMARC filter
##
## Copyright (c) 2012-2015, The Trusted Domain Project.  All rights reserved.

AutoRestart ture
BaseDirectory /var/run/opendmarc
IgnoreHosts /usr/local/etc/mail/opendmarc_ignore.hosts
IgnoreMailFrom zbm.kr
Socket local:/var/run/opendmarc/socket
SPFSelfValidate true
UMask 002
## 샘플 파일이 있으므로 이 파일에서 이 아래 라인은 삭제 한다


  • 편집기 vi /usr/local/etc/mail/opendmarc_ignore.hosts 파일을 열어 추가 한다(열면 아무것도 없음).
localhost
::1
2001:db8::/32
127.0.0.0/8
192.168.1.0/24


  • 편집기 vi /usr/local/etc/postfix/main.cf 파일을 열어 편집
맨 끝 라인 쯤에 있다. 3번째 줄만 추가 한다.
## mail filter
smtpd_milters =
   unix:/var/run/milteropendkim/socket
   unix:/var/run/opendmarc/socket

non_smtpd_milters = $smtpd_milters
milter_default_action = accept


  • DNS에 TXT 레코드 추가
  • 아래와 같이 입력. (DDNS 설정하는 곳에 입력, _dmarc 뒤에 .zbm.kr 이 붙어도 된다.)
_dmarc.zbm.kr   IN   TXT   "v=DMARC1; p=quarantine; pct=20; adkim=s; aspf=s; rua=mailto:ssam@zbm.kr;"


  • DNS 서버를 직접 운영 한다면 편집기로 열어 편집한다.
  • 편집기 vi /usr/local/etc/namedb/master/zbm.kr.zone
_dmarc.zbm.kr   IN   TXT   "v=DMARC1; p=quarantine; pct=20; adkim=s; aspf=s; rua=mailto:ssam@zbm.kr;"



  • opendmarc 의 시작
# service opendmarc start
# service opendmarc restart


  • postfix 의 재시작
# service postfix restart


모든 설정이 끝난 후 적용 확인 방법

  1. 구글계정에 메일을 보낸다.
  2. 구글에서 도착한 메일을 열어본다.
  3. 열어본 메일 우측에 메뉴항목을 열어 원본보기를 클릭한다.
SPF:    PASS(xxx.xxx.xxx.xxx) 자세히 알아보기
DKIM:   'PASS'(도메인 zbm.kr) 자세히 알아보기 
DMARC:	 'PASS' 자세히 알아보기 
  • pass 항목들이 보이면 성공 한 것이다.


Logo