MountainX ( Ubuntu, Postfix 및 Mailman에 대한 Setup DKIM (DomainKeys) 설정)에서 게시 한 자습서를 읽었 지만 여러 도메인에 대해 전자 메일을 호스팅하고 보내려는 경우 이러한 단계를 적용하는 방법을 알 수 없습니다. 아무도 단서가 있습니까?
MountainX ( Ubuntu, Postfix 및 Mailman에 대한 Setup DKIM (DomainKeys) 설정)에서 게시 한 자습서를 읽었 지만 여러 도메인에 대해 전자 메일을 호스팅하고 보내려는 경우 이러한 단계를 적용하는 방법을 알 수 없습니다. 아무도 단서가 있습니까?
답변:
좋은! 나는 질문에서 언급 한 게시물에서 이것을 알아 냈습니다. 나는 답변 자체와 그 안에 제공된 링크를 일종의 혼합으로 만들었습니다. 특히 네 번째 링크는 내가 사용한 링크입니다.
그래서 이런 일은갑니다. 서버 또는 VPS가 있고 도메인 중 하나를 기본 도메인으로 만들고 서버 이름으로 사용한다고 가정합니다 (예 : mydomain.com).
우선, 우리는 루트로 변경하여 작업을 더 쉽게 할 수 있지만이 단계를 건너 뛰고 sudo
모든 명령 전에 사용할 수 있습니다 .
sudo su
이제 OpenDKIM을 설치합니다 :
apt-get install opendkim opendkim-tools
구성 파일을 수정합시다. 우리는 /etc/opendkim.conf
편집을 위해 열었 습니다. 나는 nano를 사용하지만 다른 편집기와 동일합니다.
nano /etc/opendkim.conf
열면 다음과 같이 보입니다. 당신이 편안 경우 일부 옵션을 변경할 수 있지만, 수 Domain
, KeyFile
및 Selector
주석 유지해야합니다.
# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.
#
#Domain example.com
#KeyFile /etc/opendkim/201205.private
#Selector 201205
#
# Commonly-used options
Canonicalization relaxed/simple
Mode sv
SubDomains yes
# Log to syslog
Syslog yes
LogWhy yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
UMask 022
UserID opendkim:opendkim
#
KeyTable /etc/opendkim/KeyTable
SigningTable /etc/opendkim/SigningTable
ExternalIgnoreList /etc/opendkim/TrustedHosts
InternalHosts /etc/opendkim/TrustedHosts
#
Socket inet:8891@localhost
#EOF
다음으로 OpenDKIM이 사용하고 처리해야하는 것에 대한 정보를 담을 폴더와 파일을 만듭니다. 지금은 TrustedHosts
파일입니다. 우리는 그것을 만들고 편집합니다 :
mkdir /etc/opendkim
nano /etc/opendkim/TrustedHosts
이 파일에는 신뢰할 수있는 주소 목록 (localhost 및 127.0.0.1)과 서버 이름 및 IP를 입력해야합니다.
127.0.0.1
localhost
192.99.34.121
mydomain.com
이제 OpenDKIM 구성 파일을 편집합니다.
nano /etc/default/opendkim
그리고 파일 끝에이 줄을 추가하십시오. 서명 요청이 필요한 포트를 OpenDKIM에 알려줍니다.
SOCKET="inet:8891@localhost"
Postfix 설정 파일을 엽니 다.
nano /etc/postfix/main.cf
그리고이 줄들을 파일 끝에 추가하십시오. 그들은 서명 할 이메일을 어디에 보내야하는지 Postfix에 알릴 것입니다.
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
지금 도메인을 추가하지 않는 경우 모든 것을 다시 시작할 수 있으므로 구성이 적용됩니다.
/etc/init.d/opendkim restart
/etc/init.d/postfix reload
/etc/init.d/postfix restart
끝난! 서버가 DKIM과 작업 할 준비가되었습니다. 이제이 시스템에 도메인을 추가해야합니다. 다음 프로세스는 추가하려는 모든 도메인에 대해 동일합니다. 예를 들어 otherdomain.com을 사용하고 자신의 것으로 바꾸겠습니다.
내가 전부터 뿌리 였음을 기억하십시오. 그렇지 않은 경우 sudo su
키워드를 사용하여 명령을 실행 하거나 선행하십시오 sudo
.
sudo su
먼저 도메인을위한 디렉토리를 생성하고 그 안에 들어갑니다 :
mkdir -p /etc/opendkim/keys/otherdomain.com
cd /etc/opendkim/keys/otherdomain.com
이제 도메인의 키를 생성합니다.
opendkim-genkey -r -d otherdomain.com
우리는 OpenDKIM 사용자에게 새로 생성 된 파일의 소유권을 부여합니다 :
chown opendkim:opendkim default.private
그리고 KeyTable
파일을 열어서 새 도메인에 대한 새 키를 추가합니다.
nano /etc/opendkim/KeyTable
파일 끝에 추가합니다 (다른 모든 도메인 다음에있을 수 있음).
default._domainkey.otherdomain.com otherdomain.com:default:/etc/opendkim/keys/otherdomain.com/default.private
SigningTable
파일을 엽니 다 .
nano /etc/opendkim/SigningTable
그리고 파일 끝에 추가하십시오 (다시 말하면 각 도메인마다 한 줄씩 표시됨).
otherdomain.com default._domainkey.otherdomain.com
이 서명 테이블에는 서명 된 모든 메일이 나열됩니다. 도메인 이름을 추가하면 해당 도메인의 모든 메일에 서명됩니다.
다음 단계를 수행해야 할 필요성이 확실하지 않지만, 만약을 대비해서 그냥 ... TrustedHosts
파일을 엽니 다 .
nano /etc/opendkim/TrustedHosts
그리고 파일의 끝에 추가하십시오 :
otherdomain.com
마지막으로 파일의 내용을 보여줍니다 /etc/opendkim/keys/otherdomain.com/default.txt
.
cat /etc/opendkim/keys/otherdomain.com/default.txt
따옴표 사이에 정보를 TXT
도메인의 DNS 영역에 있는 레코드에 추가하십시오. 또한 default._domainkey
레코드 이름으로 도 사용해야합니다 . 참고 : "따옴표 사이"는 " v=DKIM1;k=rsa; p=WIGfM...
"로 시작하는 텍스트입니다 .
도메인 추가를 완료하면 (지금까지) 모든 것을 다시 시작하여 변경 사항을 적용합니다.
/etc/init.d/opendkim restart
/etc/init.d/postfix reload
/etc/init.d/postfix restart
끝난!
/etc/opendkim/TrustedHosts
파일 호스트의 IP에 관계없이이 호스트를 통해 실행 얼마나 많은 도메인으로, 한 번 거기에 수 만 있습니다. 다른 선택기를 사용하려면 모든 파일 default
에서 선택기 를 변경 하십시오!
*@
의 도메인 이름보다 먼저 필요한 부분이 있습니다. 이 문제를 해결하기 전까지는 서명 된 것이 없습니다. cc : @the_nuts
# touch /etc/opendkim/KeyTable
# touch /etc/opendkim/SigningTable
이 스크립트는 "완료되었습니다! 서버가 DKIM과 작업 할 준비가되었습니다"이후의 부분을 자동화
이 프로세스를 약간 자동화하기 위해이 bash 스크립트를 만들었습니다. domains = () 배열 안에 한 줄에 하나의 'domain.com'을 추가하십시오.
파일과 디렉토리가없는 경우 먼저 파일과 디렉토리를 작성하십시오.
/etc/opendkim/keys/
/etc/opendkim/KeyTable
/etc/opendkim/SigningTable
/etc/opendkim/TrustedHosts
/etc/opendkim/spfs.txt
spfs.txt 파일에는 각 도메인의 DNS 레코드에 추가하는 데 필요한 모든 spf 레코드가 포함됩니다.
참고 : 도메인을 두 번 이상 실행하지 마십시오. 도메인이 이미 있는지 확인하지 않습니다. 스크립트는 루트로 실행해야합니다.
#!/bin/bash
domains=(
'domain.com'
)
for domain in "${domains[@]}"
do
keydir="/etc/opendkim/keys/$domain"
if [ -d "$keydir" ]
then
cd $keydir
else
mkdir $keydir
cd $keydir
fi
opendkim-genkey -r -d $domain
chown opendkim:opendkim default.private
echo "default._domainkey.$domain $domain:default:$keydir/default.private" >> /etc/opendkim/KeyTable
echo "$domain default._domainkey.$domain" >> /etc/opendkim/SigningTable
echo "$domain" >> /etc/opendkim/TrustedHosts
echo "$(cat $keydir/default.txt)" >> spfs.txt
done
이 스크립트는 "완료되었습니다! 서버가 DKIM과 작업 할 준비가되었습니다"이후의 부분을 자동화
이 프로세스를 약간 자동화하기 위해이 bash 스크립트를 만들었습니다. domains = () 배열 안에 한 줄에 'example.com'과 같은 하나의 도메인 만 추가하면됩니다.
이 스크립트는 파일을 생성하고 파일에 이미 줄이 있는지 확인합니다
Spfs.txt는 실행될 때마다 제거되고 다시 작성되며 추가하기 전에 spfs.txt에 대해 default.txt의 두 번째 행을 확인합니다.
서버 ipv4 및 ipv6 (있는 경우)을 제공된 변수에 배치해야합니다. 비어 있지 않은지 확인합니다.
추가 된 검사 덕분에이 파일을 여러 번 실행할 수 있습니다.
#!/bin/bash
# List of domains
domains=(
'example.com'
)
# file paths and directories
dkim="/etc/opendkim"
keys="$dkim/keys"
keyfile="$dkim/KeyTable"
signfile="$dkim/SigningTable"
trustfile="$dkim/TrustedHosts"
spffile="$dkim/spfs.txt"
# Set Ipv6 and Ipv4 addresses for the server here
ipv4=""
ipv6=""
# loopback addresses for the server
loop=( localhost 127.0.0.1 )
function loopback {
for back in "${loop[@]}"
do
if ! grep -q "$back" "$trustfile"; then
echo "$back" >> "$trustfile"
fi
done
}
# Check for files and create / write to them if they dont exist
if [ ! -d "$keys" ]; then
mkdir "$keys"
fi
if [ ! -f "$keyfile" ]; then
touch "$keyfile"
fi
if [ ! -f "$signfile" ]; then
touch "$signfile"
fi
if [ ! -f "$trustfile" ]; then
touch "$trustfile"
loopback
else
loopback
fi
if [ ! -f "$spffile" ]; then
touch "$spffile"
else
rm -rf "$spffile"
touch "$spffile"
fi
if [ ! -z "$ipv6" ]; then
if ! grep -q "$ipv6" "$trustfile"; then
echo "$ipv6" >> "$trustfile"
fi
fi
if [ ! -z "$ipv4" ]; then
if ! grep -q "$ipv4" "$trustfile"; then
echo "$ipv4" >> "$trustfile"
fi
fi
# Generate keys and write the spfs records we need for each domain to one file
for domain in "${domains[@]}"
do
keydir="$keys/$domain"
default="$keydir/default.txt"
if [ ! -d "$keydir" ]; then
mkdir $keydir
fi
cd $keydir
opendkim-genkey -r -d $domain
chown opendkim:opendkim default.private
key="default._domainkey.$domain $domain:default:$keydir/default.private"
sign="$domain default._domainkey.$domain"
trust="$domain"
spf="$(cat $default)"
# Check only the last line against the spf file as the first line is always the same
spflast="$(tail -1 $default)"
if ! grep -q "$key" "$keyfile"; then
echo "$key" >> "$keyfile"
fi
if ! grep -q "$sign" "$signfile"; then
echo "$sign" >> "$signfile"
fi
if ! grep -q "$trust" "$trustfile"; then
echo "$trust" >> "$trustfile"
fi
if ! grep -q "$spflast" "$spffile"; then
echo "$spf" >> "$spffile"
fi
done