OS/Install & Modify

[Rocky Linux] opendkim 설치하기

PeamS 2025. 12. 15. 14:38

Intro

테스트 환경

  • OS : Rocky Linux 8.10, Rocky Linux 9.6
  • 메일발송서버는 send.creeper.kr
  • 보내는 주소는 @creeper.kr
  • 도메인 셀렉터는 crekey 로 가정해서 했습니다.

주의사항

sendmail.mc 파일 규칙 숙지 (역 따옴표, 작은 따옴표 규칙)
 - 예 : TRUST_AUTH_MECH([역따옴표]`LOGIN PLAIN DIGEST-MD5 CRAM-MD5'[작은따옴표])dnl[마무리]
opendkim txt 레코드 값 넣을 때 개행문자, 띄어쓰기, key 누락하면 bad key 뜨니 꼭 신경써서 등록

 

테스트하기

테스트 하기 좋은 사이트 입니다. 수신 주소로 보내면 알아서 검사해 줍니다.  https://www.appmaildev.com/ko/dkim
 

DKIM 테스트 - DKIM 유효성 검사기 - DKIM 확인 - DKIM Test

 

www.appmaildev.com

 

sendmail 발송 테스트는 다음과 같이..

cat <<EOF | sendmail -t
To: 받는사람
Subject: Testing
From: 보내는사람

This is a test message
EOF

 

설치하기(복붙)

# rocky 9 전용(안하면 dkim 설치 시 libmilter.so.1.0, libmemcached.so.11 충돌남)
dnf config-manager --set-enabled crb

# epel-release 저장소 추가 및 opendkim, sendmail 설치
dnf install -y epel-release
dnf install -y opendkim opendkim-tools sendmail sendmail-*


# opendkim 설정파일 수정
cp -apf /etc/opendkim.conf /etc/opendkim.conf_old
sed -i 's;Mode\tv;Mode\tsv;g' /etc/opendkim.conf
sed -i 's;# KeyTable\t/etc/opendkim/KeyTable;KeyTable\t/etc/opendkim/KeyTable;g' /etc/opendkim.conf
sed -i 's;# SigningTable\trefile:/etc/opendkim/SigningTable;SigningTable\trefile:/etc/opendkim/SigningTable;g' /etc/opendkim.conf
sed -i 's;# ExternalIgnoreList\trefile:/etc/opendkim/TrustedHosts;ExternalIgnoreList\trefile:/etc/opendkim/TrustedHosts;g' /etc/opendkim.conf
sed -i 's;# InternalHosts\trefile:/etc/opendkim/TrustedHosts;InternalHosts\trefile:/etc/opendkim/TrustedHosts;g' /etc/opendkim.conf
# 검증
cat /etc/opendkim.conf |grep -v "^#" |egrep -i "Mode|KeyTable|SigningTable|ExternalIgnoreList|InternalHosts"


# sendmail 수정
cp -apf /etc/mail/sendmail.mc /etc/mail/sendmail.mc_old
sed -i "58 i\TRUST_AUTH_MECH(\`LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl" /etc/mail/sendmail.mc
sed -i "59 i\define(\`confAUTH_MECHANISMS', \`LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl" /etc/mail/sendmail.mc
echo "INPUT_MAIL_FILTER(\`opendkim',\`S=local:/var/run/opendkim/opendkim.sock')dnl" >> /etc/mail/sendmail.mc
# 검증
cat /etc/mail/sendmail.mc |grep -v "^dnl" |egrep -i "TRUST_AUTH_MECH|confAUTH_MECHANISMS|INPUT_MAIL_FILTER"

# sendmail 설정 적용
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf


# default key 생성하기
## 변수지정
domainName="creeper.kr"
domainKey="crekey"
mailHost="$(hostname)"

# 키 생성 및 소유자 변경
mkdir -p /etc/opendkim/keys/${domainName}
opendkim-genkey -b 1024 -d ${domainName} -D /etc/opendkim/keys/${domainName} -s ${domainKey} -v
chown -R opendkim.opendkim /etc/opendkim/keys/${domainName}
chmod 750 /etc/opendkim/keys/${domainName}

# KeyTable 추가
echo "${domainKey}._domainkey.${domainName} ${domainName}:${domainKey}:/etc/opendkim/keys/${domainName}/${domainKey}.private" >> /etc/opendkim/KeyTable
# SigningTable 추가
echo "*@${domainName} ${domainKey}._domainkey.${domainName}" >> /etc/opendkim/SigningTable
# TrustedHosts 추가
echo "${mailHost}" >> /etc/opendkim/TrustedHosts


# 서비스 시작
systemctl enable --now opendkim
systemctl enable --now sendmail


# 레코드 추가 값 
cat /etc/opendkim/keys/${domainName}/${domainKey}.txt

설치하기(수동)

저장소 추가 및 패키지 설치

rocky 9 전용 (opendkim 의존성 패키지 설치)

dnf config-manager --set-enabled crb

 

epel 저장소 추가

dnf install -y epel-release

 

opendkim, sendmail 설치

dnf install -y opendkim opendkim-tools sendmail sendmail-*

 

opendkim 설정파일 수정하기

/etc/opendkim.conf 파일 수정

vim /etc/opendkim.conf
Mode    sv                                              # v -> sv 수정
KeyTable      /etc/opendkim/KeyTable                    # 주석 해제
SigningTable  refile:/etc/opendkim/SigningTable         # 주석 해제
ExternalIgnoreList    refile:/etc/opendkim/TrustedHosts # 주석 해제
InternalHosts refile:/etc/opendkim/TrustedHosts         # 주석 해제

 

sendmail 설정파일 수정하기

sendmail.mc 파일 수정

vim /etc/mail/sendmail.mc
## 58,59 줄에 추가
TRUST_AUTH_MECH(`LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl
define(`confAUTH_MECHANISMS', `LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl

## 맨 하단 opendkim 설정 추가 ##
INPUT_MAIL_FILTER(`opendkim',`S=local:/var/run/opendkim/opendkim.sock')dnl

 

설정 적용하기

m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

 

opendkim 키 만들기

키 폴더 생성 및 opendkim 키 생성

mkdir -p /etc/opendkim/keys/creeper.kr
# opendkim-genkey -b <키 길이> -d <도메인 이름> -D <키 저장 디렉터리> -s <도메인 셀렉터> -v
opendkim-genkey -b 1024 -d creeper.kr -D /etc/opendkim/keys/creeper.kr -s crekey -v

 

권한 수정

chmod 750 /etc/opendkim/keys/creeper.kr
chown -R opendkim.opendkim /etc/opendkim/keys/creeper.kr/

 

opendkim 키 추가하기

KeyTable 에 생성한 키 추가하기

vim /etc/opendkim/KeyTable
crekey._domainkey.creeper.kr creeper.kr:crekey:/etc/opendkim/keys/creeper.kr/crekey.private

 

SigningTable 추가

vim /etc/opendkim/SigningTable
*@creeper.kr crekey._domainkey.creeper.kr

 

TrustedHosts 추가

vim /etc/opendkim/TrustedHosts
# 보내는 서버의 정보를 넣는다.
send.creeper.kr

 

서비스 시작

systemctl enable --now opendkim
systemctl enable --now sendmail

 

마무리

아래와 같이 dig 로 txt 레코드 조회 시 다음과 같이 조회되면 등록 완료 입니다.

 

저는 cloudflare dns 를 쓰기 때문에 다음과 같이 넣었습니다.

 

감사합니다.