분류 기타

Ubuntu 20.04, 18.04, 16.04에서 여러 도메인에 대한 Postfix 송신 전용 SMTP 서버 설정

컨텐츠 정보

  • 조회 210 (작성일 )

본문

이 기사에서는 Ubuntu 20.04, 18.04, 16.04에서 Postfix를 전송 전용 SMTP 서버로 설정하는 방법을 보여줍니다. 먼저 단일 도메인에 대해 수행하는 방법을 보여주고 필요한 경우 여러 도메인에 대해 단계를 적용 할 수 있습니다.


사용 사례 


사용자에게 트랜잭션 이메일 (예 : 비밀번호 재설정 이메일)을 보내야 하는 웹 사이트 / 웹 애플리케이션이 있습니다. 

대부분의 경우 사용자가 이러한 이메일에 답장 할 필요가 없거나 답장하면 답장 이메일이 전용 메일 서버로 전송됩니다. 이 경우 널리 사용되는 SMTP 서버 소프트웨어인 Postfix를 사용하여 웹 서버에 전송 전용 SMTP 서버를 설정할 수 있습니다.


전제 조건 


서버에서 이메일을 보내려면 포트 25 (아웃 바운드)가 열려 있어야 합니다. DigitalOcean과 같은 많은 ISP 및 호스팅 회사는 스팸을 제어하기 위해 포트 25를 차단합니다. ScalaHosting을 사용하는 것이 좋습니다. 포트 25 (아웃 바운드)를 차단하지 않기 때문입니다. ScalaHosting 서버가 있으면 Ubuntu를 설치하고 아래 지침을 따르십시오.


여러 도메인에 대해 Postfix 전송 전용 SMTP 서버를 설정하는 것은 실제로 어렵지 않습니다. 먼저 하나의 도메인에 대해 구성한 다음 여러 도메인에 대해 설정해야 합니다.


1 단계 : Ubuntu에 Postfix 설치 


다음 명령을 실행하여 기본 Ubuntu 저장소에서 Postfix를 설치합니다.

sudo apt-get update

sudo apt-get install postfix -y

메일 서버 구성 유형을 선택하라는 메시지가 표시됩니다. Tab 키를 누른 다음 Enter를 누릅니다.


postfix send only smtp server 


다음 화면에서 Enter를 눌러 기본 옵션 인 인터넷 사이트를 선택하십시오.

postfix send only ubuntu 


다음으로 시스템 메일 이름에 대한 도메인 이름, 즉 @ 기호 뒤에 도메인 이름 을 입력합니다.


postfix send only multiple domains 


2 단계 : Postfix 구성 


Postfix 호스트이름 설정 


기본적으로 Postfix SMTP 서버는 OS의 호스트 이름을 사용하여 다른 SMTP 서버와 통신 할 때 자신을 식별합니다. 하지만 OS 호스트 이름이 변경 될 수 있으며 호스트 이름이 유효하지 않은 경우 일부 SMTP 서버에서 이메일을 거부합니다. 따라서 다음 명령을 사용하여 Postfix 구성 파일에서 직접 호스트 이름을 설정하는 것이 좋습니다.

sudo postconf -e "myhostname = sendonly.yourdomain.com"

이 호스트 이름에는 서버의 IP 주소를 가리키는 DNS A 레코드가 있어야 합니다.


$mydomain 매개 변수 설정 


$mydomain 매개 변수는 로컬 인터넷 도메인 이름을 지정합니다. 기본값은 $myhostname에서 첫 번째 구성 요소를 뺀 값을 사용하는 것입니다. 다음을 사용하여 $mydomain의 현재 값을 표시 할 수 있습니다.

postconf mydomain

다음과 같이 apex 도메인 이름이어야 합니다.

linuxbabe.com

apex 도메인 이름이 표시되지 않으면 다음을 사용하여 $mydomain 매개 변수를 설정합니다.


sudo postconf -e "mydomain = yourdomain.com"


$myorigin 매개 변수 설정 


$myorigin 매개 변수는 @domain 부분이 없는 보낸 사람 및 받는 사람 주소에 추가되는 기본 도메인 이름을 지정합니다. 기본값은 다음과 같이 /etc/mailname 파일의 값을 사용하는 것입니다.


postconf myorigin

Output:

myorigin = /etc/mailname

그런 다음 /etc/mailname 파일에 값을 표시 할 수 있습니다.

cat /etc/mailname

값은 하위 도메인이 없는 yourdomain.com이어야 합니다.

echo "yourdomain.com" | sudo tee /etc/mailname

Postfix 다시 시작 


마지막으로 변경 사항을 적용하려면 Postfix를 다시 시작해야 합니다.

sudo systemctl restart postfix

3 단계 : PTR 레코드 설정 


IP 주소를 FQDN에 매핑하는 PTR 레코드 (일명 포인터 레코드)를 설정해야 합니다. A 레코드의 대응 물입니다. 많은 SMTP 서버는 서버의 IP 주소에 PTR 레코드가 없으면 이메일을 거부합니다.


도메인 등록 기관이 아니라 호스팅 공급자 또는 ISP로부터 IP 주소를 얻으므로 호스팅 공급자의 제어판에서 IP에 대한 PTR 레코드를 설정하거나 ISP에 문의해야 합니다. 예를 들어 ScalaHosting에서 지원 티켓을 열어 PTR 기록을 설정하거나 웹 사이트에서 라이브 채팅을 사용할 수 있습니다. PTR 레코드를 임의의 호스트 이름으로 설정할 수 있지만 모범 사례를 위해 2 단계에서 Postfix 호스트 이름을 사용해야 합니다.


PTR 레코드가 올바르게 설정되었는지 확인하려면 다음 명령을 실행하십시오. 12.34.56.78을 자신의 IP 주소로 바꿉니다.

host 12.34.56.78

서버에서 IPv6 주소를 사용하는 경우 Postfix 호스트 이름에 AAAA 레코드를 추가하고 IPv6 주소에 PTR 레코드를 설정하는 것도 좋습니다.


4 단계 : OpenDKIM 설치 및 구성 


DKIM은 DomainKeys Identified Mail을 나타냅니다. 서버에 OpenDKIM을 설치하고 이를 사용하여 개인 키와 함께 도메인에서 보낸 이메일에 서명을 추가 할 수 있습니다. 수신 SMTP 서버는 사용자가 DNS에 게시 한 해당 공개 키를 사용하여 서명을 확인합니다. 이메일을 수신자의 받은 편지함으로 가져 오려면 DKIM 서명을 추가해야 합니다.


먼저 기본 Ubuntu 저장소에서 OpenDKIM을 설치합니다.

sudo apt-get install opendkim opendkim-tools

그런 다음 opendkim 그룹에 접미사 사용자를 추가합니다.

sudo adduser postfix opendkim

OpenDKIM 기본 구성 파일을 편집합니다.

sudo nano /etc/opendkim.conf

다음 줄을 찾으십시오.

#Canonicalization     simple
#Mode                 sv
#SubDomains           no

주석을 제거하고 simple을 relaxed/simple으로 대체하십시오. 서명을 확인할 수신 이메일이 없으므로 모드를 sv에서 s로 변경합니다.

Canonicalization     relaxed/simple
Mode                 s
SubDomains           no

이 파일 끝에 다음 줄을 추가합니다. (Ubuntu 18.04에서는 UserID가 이미 opendkim으로 설정되어 있습니다.)

#OpenDKIM user
# Remember to add user postfix to group opendkim
UserID             opendkim

# Map domains in From addresses to keys used to sign messages
KeyTable           refile:/etc/opendkim/key.table
SigningTable       refile:/etc/opendkim/signing.table

# A set of internal hosts whose mail should be signed
InternalHosts       /etc/opendkim/trusted.hosts

파일을 저장하고 닫습니다.


서명 테이블, 키 테이블 및 신뢰할 수 있는 호스트 파일 생성 


OpenDKIM에 대한 디렉토리 구조를 만듭니다.

sudo mkdir /etc/opendkim

sudo mkdir /etc/opendkim/keys

소유자를 root트에서 opendkim으로 변경하고 opendkim 사용자 만 키 디렉토리를 읽고 쓸 수 있는지 확인하십시오.

sudo chown -R opendkim:opendkim /etc/opendkim

sudo chmod go-rw /etc/opendkim/keys

서명 테이블을 만듭니다.

sudo nano /etc/opendkim/signing.table

파일에 다음 행을 추가하십시오. 즉, 이메일의 From : 헤더에 example.com이 포함 된 경우 sendonly DKIM 선택기를 사용합니다. sendonly를 선호하는 DKIM 선택기 이름으로 변경할 수 있으며 DNS에서 고유해야 합니다.


*@example.com     sendonly._domainkey.example.com

파일을 저장하고 닫습니다. 그런 다음 키 테이블을 만듭니다.


sudo nano /etc/opendkim/key.table

다음 줄을 추가하십시오. 즉, sendonly DKIM 선택기의 경우 /etc/opendkim/keys/example.com/sendonly.private에 저장된 개인 키를 사용하여 이메일에 서명합니다.

sendonly._domainkey.example.com    example.com:sendonly:/etc/opendkim/keys/example.com/sendonly.private

파일을 저장하고 닫습니다. 다음으로 신뢰할 수 있는 호스트 파일을 만듭니다.


sudo nano /etc/opendkim/trusted.hosts

새로 생성 된 파일에 다음 줄을 추가합니다.


127.0.0.1
localhost

*.example.com

위의 내용은 위의 IP 주소 및 도메인에서 오는 메시지가 신뢰되고 서명됨을 의미합니다.


개인 / 공개 키 쌍 생성 


발신 이메일에 서명하기 위한 개인 키와 DKIM 서명을 확인하기 위해 SMTP 서버 수신을 위한 공개 키를 생성해야 합니다. 공개 키는 DNS에 게시됩니다.


도메인에 대해 별도의 폴더를 만듭니다.

sudo mkdir /etc/opendkim/keys/example.com

opendkim-genkey 도구를 사용하여 키를 생성합니다.


sudo opendkim-genkey -b 2048 -d example.com -D /etc/opendkim/keys/example.com -s sendonly -v

위의 명령은 2048 비트 키를 생성합니다. -d (도메인)는 도메인을 지정합니다. -D (디렉토리)는 키가 저장 될 디렉토리를 지정하고 선택자 (-s)로 sendonly를 사용합니다. 명령이 실행되면 개인 키는 sendonly.private에 저장되고 sendonly.txt는 공개 키가 포함 된 TXT 레코드가 됩니다.


opendkim을 개인 키의 소유자로 만드십시오.


sudo chown opendkim:opendkim /etc/opendkim/keys/example.com/sendonly.private

DNS 레코드에 공개 키 추가 


공개 키 표시

sudo cat /etc/opendkim/keys/example.com/sendonly.txt

p 매개 변수 뒤의 문자열은 공개 키입니다. DNS 관리자에서 두 번째 도메인에 대한 TXT 레코드를 만듭니다. 이름 필드에 sendonly._domainkey를 입력합니다. 괄호 안의 모든 내용을 복사하여 값 필드에 붙여 넣습니다. 큰 따옴표를 모두 삭제하십시오. (먼저 텍스트 편집기에 붙여넣고 큰 따옴표를 모두 삭제 한 다음 DNS 관리자에 복사 할 수 있습니다. DNS 관리자가 캐리지 리턴과 같은 다른 잘못된 문자를 삭제하도록 요구할 수 있습니다.)


postfix send only DKIM 

DNS 레코드가 게시 되면 Ubuntu 서버에 다음 명령을 입력하여 키를 테스트합니다.


sudo opendkim-testkey -d example.com -s sendonly -vvv

모든 것이 정상이면

key OK

key not secure 메시지가 표시 되더라도 당황하지 마십시오. 도메인 이름에 DNSSEC가 사용 설정되어 있지 않기 때문입니다.


5 단계 : OpenDKIM과 Postfix 연결 


Postfix는 Unix 소켓 파일을 통해 OpenDKIM과 통신 할 수 있습니다. OpenDKIM에서 사용하는 기본 소켓 파일은 /etc/opendkim.conf 파일에 표시된대로 /var/run/opendkim/opendkim.sock입니다. 그러나 Ubuntu와 함께 제공되는 postfix SMTP 데몬은 chroot jail에서 실행됩니다. 즉, SMTP 데몬은 Postfix 대기열 디렉터리 (/ var / spool / postfix)에 관련된 모든 파일 이름을 확인합니다. 따라서 소켓 파일을 변경해야 합니다.


OpenDKIM 기본 구성 파일을 편집하십시오.

sudo nano /etc/opendkim.conf

다음 줄을 찾으십시오.

Socket local:/var/run/opendkim/opendkim.sock

다음 줄로 바꿉니다. (위의 줄을 찾을 수 없으면 다음 줄을 추가하십시오.)


Socket local:/var/spool/postfix/opendkim/opendkim.sock

OpenDKIM 소켓 파일을 보관할 디렉토리를 만들고 opendkim 사용자 및 postfix 그룹 만 액세스 할 수 있도록 허용합니다.

sudo mkdir /var/spool/postfix/opendkim

sudo chown opendkim:postfix /var/spool/postfix/opendkim

/etc/default/opendkim 파일에서 다음 줄을 찾을 수 있습니다.

SOCKET="local:/var/run/opendkim/opendkim.sock"

또는

SOCKET=local:$RUNDIR/opendkim.sock

다음으로 변경

SOCKET="local:/var/spool/postfix/opendkim/opendkim.sock"

그 후 Postfix 기본 구성 파일을 편집해야 합니다.

sudo nano /etc/postfix/main.cf

이 파일 끝에 다음 줄을 추가하여 Postfix를 OpenDKIM과 연결합니다.

# Milter configuration
milter_default_action = accept
milter_protocol = 6
smtpd_milters = local:opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters

파일을 저장하고 닫습니다. OpenDKIM 및 Postfix를 다시 시작하십시오.

sudo systemctl restart opendkim postfix

OpenDKIM은 다시 시작하지 못하면 메시지를 생성하지 않습니다. 다음 명령을 실행하여 상태를 확인하십시오. 실행 중인지 확인하세요.

systemctl status opendkim

6 단계 : SPF DNS 레코드 생성 


SPF (Sender Policy Framework) 레코드는 도메인을 대신하여 이메일을 보낼 수 있는 호스트 또는 IP 주소를 지정합니다. DNS 관리 인터페이스에서 아래와 같이 새 TXT 레코드를 만듭니다. 서버의 고유 한 IPv4 주소와 IPv6 주소를 사용하십시오.

TXT  @   v=spf1 mx ip4:12.34.56.78 ip6:2600:3c01::f03c:93d8:f2c6:78ad ~all

7 단계 : 보낸 사람 주소, 보낸 사람 이름 및 반환 경로 설정 


웹 사이트 / 웹 응용 프로그램에서 사용자 지정 보낸 사람 주소, 보낸 사람 이름 및 반환 경로를 설정할 수 있습니다. WordPress를 예로 들어 보겠습니다. WordPress 테마의 functions.php 파일에 다음 줄을 추가하여 기본 보낸 사람 주소, 보낸 사람 이름 및 반환 경로를 재정의 할 수 있습니다. 필요에 따라 빨간색 텍스트를 바꿉니다.


// Function to change From email address
function wpb_sender_email( $original_email_address ) {
    return 'notifications@linuxbabe.com';
}

// Function to change sender name
function wpb_sender_name( $original_email_from ) {
    return 'LinuxBabe';
}

// Set return-path the same as From address
function fix_my_email_return_path( $phpmailer ) {
    $phpmailer->Sender = $phpmailer->From;
}

// Hooking up our functions to WordPress filters
add_filter( 'wp_mail_from', 'wpb_sender_email' );
add_filter( 'wp_mail_from_name', 'wpb_sender_name' );
add_action( 'phpmailer_init', 'fix_my_email_return_path' );

파일을 저장하면 완료됩니다. (functions.php 파일에주의하십시오.이 파일 끝에?> 뒤에 빈 줄을 추가하지 마십시오. 그렇지 않으면 WordPress XML 사이트 맵이 손상 될 수 있습니다.)


8 단계 : 발신 이메일에 TLS 암호화 활성화 


기본적으로 Postfix는 발신 이메일을 보낼 때 TLS 암호화를 사용하지 않습니다. TLS 암호화를 활성화하려면 /etc/postfix/main.cf 파일을 열고이 파일 끝에 다음 두 줄을 추가합니다.

smtp_tls_security_level = may
smtp_tls_loglevel = 1

첫 번째 줄은 Postfix SMTP 클라이언트에 대한 TLS 암호화를 활성화합니다. 두 번째 줄은 /var/log/mail.log 파일에 TLS 연결을 기록하므로 TLS 암호화가 작동하는지 확인할 수 있습니다. 파일을 저장하고 닫습니다. 변경 사항을 적용하려면 Postfix를 다시 시작하십시오.

sudo systemctl restart postfix

Postfix는 수신 이메일을 수신하지 않으므로 Postfix SMTP 데몬에 대해 유효한 TLS 인증서를 구성 할 필요가 없습니다.


9 단계 : 발신자 점수 테스트 


이제 https://www.mail-tester.com으로 이동합니다. 고유 한 이메일 주소가 표시됩니다. Postfix SMTP 서버의 웹 사이트에서 이 주소로 이메일을 보낸 다음 점수를 확인하십시오. 보시다시피 만점을 받았습니다. 테스트 결과에서 PTR 레코드, SPF 및 DKIM 레코드가 유효한지 확인해야 합니다.


imporve-email-server-reputation-dkim 


/var/log/mail.log 파일을 열어 TLS 암호화가 사용되는지 확인할 수도 있습니다. 예를 들어, 다음 줄은 mail-tester.com에 대한 연결이 암호화되었음을 보여줍니다.

Anonymous TLS connection established to mail-tester.com[94.23.206.89]:25: TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)

이메일이 여전히 스팸으로 표시되면 어떻게 합니까? 


이 기사에서 이메일 전달성에 대한 추가 팁이 있습니다. 이메일이 스팸으로 표시되지 않도록 하는 방법입니다. 약간의 시간과 노력이 필요하지만 이러한 팁을 적용하면 결국 이메일이 받은 편지함에 저장됩니다.


여러 도메인에 대해 Postfix 보내기 전용 SMTP 서버를 구성하는 방법 


기본적으로 Postfix를 사용하면 보내는 이메일을 보내기 위해 From 헤더 및 반환 경로 주소에 도메인 이름을 사용할 수 있습니다. 서버가 여러 웹 사이트를 호스팅 하는 경우 다른 도메인에 대한 SPF DNS 레코드를 생성하기 만하면 됩니다.이 작업은 매우 쉽습니다. 다른 도메인에 대해 OpenDKIM을 구성하면 됩니다.


다른 도메인에 대해 OpenDKIM을 구성하려면 아래와 같이 서명 테이블, 키 테이블 및 신뢰할 수 있는 호스트 파일에 다른 도메인을 추가해야 합니다.


서명 테이블 (/etc/opendkim/signing.table)

*@example.com       sendonly._domainkey.example.com
*@example.net       sendonly._domainkey.example.net

Key table (/etc/opendkim/key.table)

sendonly._domainkey.example.com     example.com:sendonly:/etc/opendkim/keys/example.com/sendonly.private
sendonly._domainkey.example.net     example.net:sendonly:/etc/opendkim/keys/example.net/sendonly.private

Trusted hosts (/etc/opendkim/trusted.hosts)

127.0.0.1
localhost

*.example.com
*.example.net

그런 다음 다른 도메인에 대해 위에서 언급 한 것과 동일한 단계에 따라 DKIM 개인 / 공개 키 쌍을 생성하고 DNS에 DKIM 공개 키를 추가합니다. OpenDKIM을 다시 시작하면 완료됩니다. 발신자 점수를 테스트하는 것을 잊지 마세요.


다른 서버에서 이메일 보내기 


다른 서버가 전송 전용 Postfix SMTP 서버를 통해 이메일을 보내도록 허용하는 방법에는 두 가지가 있습니다.


  • SMTP 인증없이 포트 25 사용 :이 방법을 사용하려면 다른 서버가 포트 25 (아웃 바운드)를 차단하지 않아야 합니다.
  • SMTP 인증에 포트 587 사용 : 다른 서버가 포트 25 (아웃 바운드)를 차단하는 경우 포트 587을 사용할 수 있습니다.


SMTP 인증이 없는 포트 25 


다음 명령을 실행하여 Postfix가 0.0.0.0에서 수신하도록 하여 다른 서버가 전송 전용 Postfix SMTP 서버에 연결할 수 있도록 합니다.


sudo postconf "inet_interfaces = all"

그런 다음 다른 서버의 IP 주소를 Postfix mynetworks 매개 변수에 추가해야 합니다. 12.34.56.78을 실제 IP 주소로 바꿉니다.

sudo postconf "$(postconf mynetworks) 12.34.56.78"

변경 사항을 적용하려면 Postfix를 다시 시작하십시오.

sudo systemctl restart postfix

다음 명령을 실행하여 다른 서버에 대한 포트 25 (인바운드)를 엽니다.


sudo ufw insert 1 allow in from 12.34.56.78 to any port 25 proto tcp

이제 mta1.yourdomain.com 및 포트 25를 사용하여 이메일을 보내도록 SMTP 클라이언트를 구성 할 수 있습니다. SMTP 클라이언트에서 사용자 이름 / 비밀번호를 지정할 필요가 없습니다.


SMTP 인증을 사용하는 포트 587 


방화벽에서 포트 587 및 80을 엽니다.

sudo ufw insert 1 allow in from 12.34.56.78 to any port 25 proto tcp
sudo ufw allow 80/tcp

다음 명령을 실행하여 Postfix가 0.0.0.0에서 수신하도록 하여 다른 서버가 전송 전용 Postfix SMTP 서버에 연결할 수 있도록 합니다.

sudo postconf "inet_interfaces = all"

그런 다음 이메일 클라이언트가 Postfix SMTP 서버에 이메일을 제출할 수 있도록 Postfix의 제출 서비스를 활성화해야 합니다. master.cf 파일을 편집합니다.

sudo nano /etc/postfix/master.cf

제출 섹션에서 다음 줄의 주석 처리를 제거하거나 추가합니다. -o 앞에 하나 이상의 공백 (탭 또는 스페이스 바)을 허용하십시오. 접미사 구성에서 선행 공백 문자는 이 행이 이전 행의 연속임을 의미합니다. (기본적으로 제출 섹션은 주석 처리되어 있습니다. 다음 줄을 복사하여 파일에 붙여 넣을 수 있으므로 수동으로 주석 처리를 제거하거나 새 텍스트를 추가 할 필요가 없습니다.)


submission     inet     n    -    y    -    -    smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_tls_wrappermode=no
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth

위의 구성은 Postfix의 제출 데몬을 활성화하고 TLS 암호화가 필요합니다. 일반 텍스트 인증이 거부됩니다. 제출 데몬은 TCP 포트 587에서 수신합니다. STARTTLS는 SMTP 클라이언트와 제출 데몬 간의 통신을 암호화하는 데 사용됩니다.


파일을 저장하고 닫습니다. SMTP 인증을 활성화하려면 Dovecot을 설치해야 합니다.

sudo apt install dovecot-core

인증 구성 파일을 편집하십시오.


sudo nano /etc/dovecot/conf.d/10-auth.conf

다음 줄의 주석 처리를 제거하십시오.


disable_plaintext_auth = yes

SSL / TLS 암호화가 없는 경우 일반 텍스트 인증을 사용 중지합니다. 전체 이메일 주소 (username@your-domain.com)를 사용하여 로그인하려면 파일에 다음 행을 추가하십시오.


auth_username_format = %Ln

그렇지 않으면 사용자 이름으로 만 (@ your-domain.com없이) 로그인 할 수 있습니다. 다음으로 다음 줄을 찾으십시오.

auth_mechanisms = plain

이 줄은 PLAIN 인증 메커니즘 만 활성화합니다. LOGIN은 이전 이메일 클라이언트를 지원하기 위해 추가 할 또 다른 인증 메커니즘입니다.


auth_mechanisms = plain login

파일을 저장하고 닫습니다. 그런 다음 다음 파일을 편집하십시오.

sudo nano /etc/dovecot/conf.d/10-master.conf

Postfix가 Dovecot 인증 서버를 찾을 수 있도록 서비스 인증 섹션을 다음으로 변경합니다.

service auth {
    unix_listener /var/spool/postfix/private/auth {
      mode = 0660
      user = postfix
      group = postfix
    }
}

postfix smtp auth ubuntu 


파일을 저장하고 닫습니다. 변경 사항을 적용하려면 Dovecot을 다시 시작하십시오.

sudo systemctl restart dovecot

다음으로 유효한 TLS 인증서를 얻어야 합니다. Let ’s Encrypt에서 무료 TLS 인증서를 쉽게 얻을 수 있습니다. Ubuntu에 Let ’s Encrypt 클라이언트 (certbot)를 설치하려면 다음 명령을 실행하십시오.

sudo apt install certbot

그런 다음 독립 실행 형 플러그인을 사용하여 TLS 인증서를 얻습니다 (Postfix SMTP 서버에서 실행 중인 웹 서버가 없다고 가정).


sudo certbot certonly --standalone --agree-tos --email you@example.com -d sendonly.yourdomain.com

잠시 후 인증서를 성공적으로 획득했음을 의미하는 다음 줄이 표시됩니다. 인증서가 저장된 디렉토리를 볼 수도 있습니다.


다음으로 다음 두 명령을 실행하여 Postfix 구성 파일에서 TLS 인증서 및 개인 키의 위치를 ​​지정해야 합니다. Let ’s Encrypt 인증서와 비공개 키는 /etc/letsencrypt/live/sendonly.your-domain.com/ 디렉토리에 저장됩니다.

sudo postconf "smtpd_tls_cert_file = /etc/letsencrypt/live/sendonly.your-domain.com/fullchain.pem"

sudo postconf "smtpd_tls_key_file = /etc/letsencrypt/live/sendonly.your-domain.com/privkey.pem"

변경 사항을 적용하려면 Postfix를 다시 시작하십시오.


sudo systemctl restart postfix

이제 sendonly.yourdomain.com 및 포트 587을 사용하여 이메일을 보내도록 SMTP 클라이언트를 구성 할 수 있습니다. TLS 암호화 유형 및 일반을 인증 모드로 사용하십시오. SMTP 서버에서 이메일 계정을 생성해야 합니다. 아주 간단합니다. 사용자를 추가하려면 adduser 명령을 사용하십시오.

sudo adduser user1 --no-create-home

그런 다음 이 사용자의 암호를 설정하십시오.


sudo passwd user1

이메일 주소는 user1@yourdomain.com입니다.


Troubleshooting 


DKIM에서 서명하지 않은 이메일 


메시지가 서명되지 않았고 DKIM 확인이 실패한 경우 postfix 로그 (/var/log/mail.log)를 확인하여 구성의 문제를 확인할 수 있습니다. 메일 로그에 다음 메시지가 표시되면

warning: connect to Milter service local:opendkim/opendkim.sock: No such file or directory

opendkim systemd 서비스가 실제로 실행 중인지 확인할 수 있습니다.


systemctl status opendkim

opendkim이 실행 중이고 위의 오류가 계속 표시되는 경우 /etc/postfix/main.cf 파일에서 smtpd_milters = local : opendkim / opendkim.sock을 smtpd_milters = local : /opendkim/opendkim.sock으로 변경해야 할 수 있습니다.


먼저 STARTTLS 명령을 실행해야 합니다. 


메일 로그 (/var/log/mail.log)에 다음 오류가 표시되는 경우 TLS 인증서가 /etc/postfix/main.cf 파일에 올바르게 지정되지 않았기 때문입니다.

Must issue a STARTTLS command first (in reply to MAIL FROM command))

대량 또는 대량 이메일 보내기 


이 SMTP 서버를 사용하여 대량 또는 대량 이메일을 보낼 수 있습니까?


예. 그러나 합법적 인 구독자에게만 대량 이메일을 보내야 합니다. 즉, 수신자가 메일 링리스트에 등록 했어야 합니다. 스팸 (원치 않는 대량 이메일)을 보내면 안됩니다. 그렇지 않으면 SMTP 서버가 반드시 블랙리스트에 포함됩니다. 대량 이메일을 보내기 전에 이메일이 스팸으로 표시되는 것을 방지하는 방법에 있는 조언을 따르는 것이 좋습니다.


Postfix에서 이메일 수신 비활성화 


기본적으로 Postfix SMTP 서버는 시스템의 모든 활성 인터페이스에서 수신합니다. Postfix SMTP 서버는 트랜잭션 이메일을 사용자에게 보내는 데만 사용되기 때문에 TCP 포트 25에 대한 인바운드 연결을 차단할 수 있으므로 악의적 인 사용자가 스팸을 보낼 수 없습니다. 포트 25에 대한 허용 목록을 추가했기 때문에 합법적 인 사용자는 영향을 받지 않습니다.


이메일 헤더에서 민감한 정보 제거 


기본적으로 Postfix SMTP 서버는 클라이언트의 IP 주소를 기록하는 Received : 이메일 헤더를 추가하여 웹 사이트의 IP 주소가 유출 될 수 있습니다 (CDN 뒤에 있는 경우). Postfix에 무시하도록 지시 할 수 있습니다. 헤더 검사 파일을 만듭니다.


sudo nano /etc/postfix/smtp_header_checks

다음 행을 파일에 넣으십시오.

/^Received:/            IGNORE

파일을 저장하고 닫습니다. 그런 다음 Postfix 기본 구성 파일을 편집하십시오.

sudo nano /etc/postfix/main.cf

파일 끝에 다음 줄을 추가합니다.


smtp_header_checks = regexp:/etc/postfix/smtp_header_checks

파일을 저장하고 닫습니다. 그런 다음 다음 명령을 실행하여 해시 테이블을 다시 작성하십시오.

sudo postmap /etc/postfix/smtp_header_checks

변경 사항을 적용하려면 Postfix를 다시 로드하십시오.

sudo systemctl reload postfix

이제 Postfix는 이메일 헤더에 민감한 정보를 포함하지 않습니다.


Auto-Renew TLS Certificate 


Cron 작업을 생성하여 TLS 인증서를 자동으로 갱신 할 수 있습니다. 루트 사용자의 crontab 파일을 열기 만하면 됩니다.

sudo crontab -e

그런 다음 다음 줄을 추가하십시오.

@daily certbot renew --quiet

파일을 저장하고 닫습니다.


결론 


이 튜토리얼이 여러 도메인에 대해 Ubuntu에서 Postfix 전송 전용 SMTP 서버를 설정하는 데 도움이 되었기를 바랍니다.


https://www.linuxbabe.com/mail-server/postfix-send-only-multiple-domains-ubuntu