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

Jump to: navigation, search
#206 [ Ssam ] hit: 76(#b3ffb3) 8

들어가기

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
[.......]


  • DKIM 인증 키 생성
# 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
  • DKIM 인증 키 확인
# 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 공개 키 작성
  • DKIM 용 공개 키 등을 DNS TXT 레코드로 설정( /var/db/dkim/zbm.kr/mail.txt 의 설정)
  • 편집기 vi /var/db/dkim/zbm.kr/mail.txt 파일을 열어 키 값을 복사하여 네임서버나 DDNS 설정 하는곳에 아래와 같이 입력. (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 메세지가 표시되면 제데로 입력된 것.
  1. 체크 확인 사이트 https://dkimcore.org/tools/keycheck.html
  2. Selectormail._domainkey.zbm.kr 로 입력 한다
  3. Domain name는 체크할 zbm.kr
  4. Check a DKIM Core Key Record 값에는 v=DKIM1; k=rsa; p=MxI3GfMA0GCSqGSIb3~ 으로 입력 한 후 check 버튼을 클릭 한다.


  • 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 설치

  • jail에서 패키지로 설치 해도 잘 되지만, 웹서버와 같이 사용한다면 포트로 설치해야 된다.(mariadb 사용시 mysql57-client: 5.7.27 패키지와 충돌을 일으킨다.)
# 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
[............]
=====
Message from ca_root_nss-3.55:

--
FreeBSD does not, and can not warrant that the certification authorities
whose certificates are included in this package have in any way been
audited for trustworthiness or RFC 3647 compliance.

Assessment and verification of trust is the complete responsibility of the
system administrator.


This package installs symlinks to support root certificates discovery by
default for software that uses OpenSSL.

This enables SSL Certificate Verification by client software without manual
intervention.

If you prefer to do this manually, replace the following symlinks with
either an empty file or your site-local certificate bundle.

  * /etc/ssl/cert.pem
  * /usr/local/etc/ssl/cert.pem
  * /usr/local/openssl/cert.pem
=====
Message from groff-1.22.4_3:

--
In order to be able to use the html driver, you need to install the following
packages:
 - ghostscript
 - netpbm
=====
Message from mysql57-client-5.7.31:

--
This is the mysql CLIENT without the server.
for complete server and client, please install databases/mysql57-server


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

Template:Del


  • DMARC 샘플 파일을 복사하여 편집하거나 편집기 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;"



# service opendmarc start
# service opendmarc restart


# service postfix restart


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

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


Logo