웹사이트 검색

Dovecot으로 Postfix 이메일 서버를 설정하는 방법


접미사 소개

이 튜토리얼은 기본 메일 서버를 설정하는 방법과 그 과정에서 Postfix MTA(Mail Transfer Agent)에 대해 조금 알려줄 것입니다.

Postfix는 매우 유연합니다. 이 아키텍처는 이메일을 수신하고 다른 서비스로 전달하는 느슨한 서비스 구성을 기반으로 합니다(수신 외부 에지의 "smtp\ 및 전달 외부 에지의 "local\ 및 "virtual\과 같은 서비스 포함). 메일 수신을 고려하는 경우) Postfix 자체는 메일 수신, 라우팅 및 배달을 위한 핵심 요구 사항을 구현하고 나머지는 타사 확장에 의존합니다.

Postfix에는 수백 개의 man 5 postconf가 있습니다). 이 자습서만으로는 유능한 전문 이메일 관리자가 되기에 충분하지 않습니다. 그러나 postfix에 익숙해지고 싶거나 자신과 몇 명의 친구들을 위해 메일 서버를 설정하고 싶다면 이 튜토리얼과 따라야 할 튜토리얼이 여러분의 친구가 될 것입니다.

비둘기장 소개

나는 dovecot에 대해 많은 소개 단어를 쓰지 않을 것입니다. Dovecot도 거대하지만(여기에는 dovecot 2에 대한 위키가 있습니다), 우리는 dovecot의 아주 작은 기능 세트만 원합니다.

이 문서에서는 설정할 거의 모든 단일 설정을 자세히 설명합니다. 원한다면 설명을 훑어볼 수 있습니다 - 자신의 책임.

이 자습서에서는 다음 설정을 가정하고 이를 사용하여 빌드했습니다.

  • 데비안 7.1 wheezy x64_86
  • 접미사 2.9.6-2
  • 비둘기 1:2.1.7-7

모든 데비안 기반 OS는 괜찮지만 Postfix는 상호 호환되지 않는 설정과 기능이 있는 Postfix 1.x, Postfix 2.9 및 Postfix 2.10을 포함하여 다양한 버전에서 사용되고 있으며 Postfix 2.9를 사용하는 이 튜토리얼 최첨단에 있지 않습니다.

이 자습서는 또한 사용자에 대한 몇 가지 사항을 가정합니다.

  • GNU/Linux 명령줄과 데비안과 같은 GNU/Linux 시스템의 일반 레이아웃 및 작동 원리에 익숙합니다.\n
  • 로컬 시스템이 GNU/Linux이거나 적절하게 호환되는지(MinGW, Cygwin, Mac OS X, *BSD)\n
  • 당신은 당신의 물방울에 뿌리 껍질을 얻는 방법을 알고 있습니다
  • Linux에서 텍스트 편집기(예: vim, nano, emacs 또는 표준 편집기, ed)를 사용하는 방법을 알고 있음\n

기본적으로 드롭릿의 루트쉘에서 명령이 입력되고 파일이 편집됩니다. 대부분의 다른 DigitalOcean 기사와 마찬가지로 사용자 지정해야 하는 명령 부분이 강조 표시됩니다.

시스템 설치

드롭릿을 메일 서버로 준비하려면 다음 구성 요소가 필요합니다.

  • 도메인, "mydomain.com\이라고 가정해 보겠습니다.\n
  • 메일 서버의 호스트 이름은 "mail.mydomain.com\이라고 가정합니다.\n
  • "mail.mydomain.com”에 유효한 SSL 인증서\n

SSL 인증서 설정

SSL의 경우 인증서와 개인 키가 필요합니다. 이 자습서에서는 인증서가 /etc/ssl/certs/mailcert.pem에 저장되고 키가 /etc/ssl/private/mail에 저장된다고 가정합니다. .키. 루트 사용자만 키를 읽을 수 있는지 확인하십시오!

웹사이트 및 전자 메일에 대한 SSL 인증서를 설정하는 방법은 웹사이트 구조 및 사용하는 CA(예: 자체 서명, 조직(하위) CA 또는 상업용 CA)에 따라 다릅니다. 자체 서명된 테스트 인증서 생성은 실행만큼 쉽습니다.

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/mail.key -out /etc/ssl/certs/mailcert.pem

묻는 모든 질문에 Enter 키를 눌러 기본값을 그대로 둡니다. 프로덕션 환경에서 이 인증서를 사용하지 마십시오!

대부분의 CA는 인증서 서명 요청을 제출하도록 요구합니다. (CSR) 다음과 같이 생성할 수 있습니다.

sudo openssl req -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/mail.key -out mailcert.csr

이 기록과 같이 쿼리된 정보를 적절하게 입력합니다. (CSR에 어떤 정보가 필요한지 사용하려는 CA에 확인)

Generating a 2048 bit RSA private key
.............................+++
................+++
writing new private key to 'mail.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: US
State or Province Name (full name) [Some-State]: Virginia
Locality Name (eg, city) []: Langley
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Network Services Association
Organizational Unit Name (eg, section) []: Infrastructure Services
Common Name (e.g. server FQDN or YOUR name) []: mail.mydomain.com
Email Address []: postmaster@mydomain.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

(이렇게 하면 추가 작업 없이 subjectAltName 필드를 사용하여 둘 이상의 도메인에 유효한 인증서를 생성할 수 없습니다. 다시 CA 문서를 확인하십시오!)

DNS 설정

메일 서버 IP를 가리키는 A 레코드와 메일 서버 호스트 이름을 가리키는 MX 레코드로 DNS를 설정해야 합니다.

DigitalOcean의 DNS를 사용하는 경우 방법은 다음과 같습니다.

  • DigitalOcean 패널의 \DNS 영역으로 이동
  • 새 도메인을 만들거나 이전에 만든 도메인 선택
  • 오른쪽 상단의 "레코드 추가\ 버튼을 클릭합니다.
  • A 레코드 추가:

  • "레코드 추가\를 다시 클릭하고 A 레코드를 가리키는 MX 레코드를 추가합니다.

추가 정보는 DNS 팁 및 요령 문서에서 찾을 수 있습니다.

DNS 확인

DNS는 인터넷 전체에 전파되는 데 몇 시간이 걸리지만 몇 분 후에 DNS 서버에 설정되어야 합니다. dig & host에서 확인할 수 있습니다.

[root@yourbase] ~# dig MX mydomain.com +short @ns1.linux-console.net
50 mail.mydomain.com.
[root@yourbase] ~# host mail.mydomain.com ns1.linux-console.net
Using domain server:
Name: ns1.linux-console.net
Address: 198.199.120.125#53
Aliases:

mail.mydomain.com has address 82.196.9.119

접미사

이제 Postfix를 설정하여 로컬 사용자의 메일을 수신하고 전달합니다.

패키지

Debian의 기본 MTA는 Exim입니다. 꺼져! Postfix가 아직 실행되는 것을 원하지 않기 때문에 Postfix를 설치한 후에도 중지합니다.

aptitude remove exim4 && aptitude install postfix && postfix stop

추가 정보: Postfix는 데몬을 자체적으로 관리하며 서비스(init.d) 시스템이 필요하지 않습니다. postfix 시작, postfix 중지 및 postfix 다시 로드는 서비스 postfix 시작, 서비스 postfix 중지 및 서비스 postfix 다시 로드와 동일합니다.

접미사 구성

Postfix에는 두 개의 기본 구성 파일이 있습니다. master.cf는 postfix가 실행되어야 하는 서비스를 지정합니다.

먼저 master.cf 파일을 구성합니다(/etc/postfix/에서). 다른 누구에게도 허용하지 않는 신뢰할 수 있는 클라이언트의 메일을 전 세계로 배달하는 "submission\이라는 추가 "smtpd\ 인스턴스를 추가합니다.

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

이것은 약간의 설명이 필요합니다. -o ... 옵션은 기본값에서 가져오거나 나중에 설정할 구성에서 정의하는 설정을 재정의합니다.

중요한 세부 사항은 볼 수 없는 것입니다. smtpd_recipient_restrictions에는 기본값으로 존재하고 릴레이를 제한하는 reject_unauth_destination이 없습니다.

그런 다음 main.cf로 이동합니다. 여기서 깨끗한 슬레이트로 시작하겠습니다. 기본 구성 파일을 저장하려면 cp /etc/postfix/main.cf /etc/postfix/main.cf.orig를 실행하십시오(또한 /usr/share/postfix/main.cf.dist 그래도), 열어서 지우세요!

먼저 네트워크 정보를 설정해 보겠습니다. (postfix가 메일을 처리하는 도메인에 대한 정보 및 약간의 추가 정보)

myhostname = mail.domain.com
myorigin = /etc/mailname
mydestination = mail.domain.com, domain.com, localhost, localhost.localdomain
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

Debian 규칙에 따라 /etc/mailname에서 가져온 호스트 이름과 기본 출처를 설정합니다. /etc/mailname이 없으면 명시적으로 설정할 수 있습니다. 기본 원본은 로컬 사용자의 '보낸 사람' 주소를 구성하는 데 사용됩니다. mydestination은 postfix가 이메일을 수락하는 도메인을 최종 목적지로 설정하고 "relayhost\를 비워 메일 릴레이를 비활성화합니다(릴레이는 메일을 수락한 다음 메일의 최종 목적지가 아닌 메일 서버로 전달하는 것을 의미합니다. 이는 예를 들어 중앙 메일 서버가 메일이 네트워크를 떠나기 전에 확인해야 하는 기업 인트라넷에서 유용합니다.)

*추가 참고 사항: 이것은 "오픈 릴레이\라는 용어와 관련이 없습니다. 이 메일 서버는 인증 없이 모든 사람의 이메일을 수락하여 자체 네트워크에 없는 도메인의 MTA로 보냅니다. relay_* 설정이 사용되며 기본값으로 두고 비활성화합니다.)

이제 로컬 별칭 맵을 설정하겠습니다. 기본 설정을 유지하기 때문에 이 설정을 지정할 필요는 없지만 나중에 앨리어스 맵을 정의하는 다른 방법을 추가하려는 경우를 대비하여 명시적으로 지정하는 것이 좋습니다. (실제 DBMS처럼)

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

그런 다음 SSL을 설정합니다.

smtpd_tls_cert_file=/etc/ssl/certs/mailcert.pem
smtpd_tls_key_file=/etc/ssl/private/mail.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_security_level=may
smtpd_tls_protocols = !SSLv2, !SSLv3

인증서 파일과 키를 설정하고 tls를 활성화하고 캐시 파일을 설정합니다. 그런 다음 RFC2487에 따라 공개 smtp 서버에서 TLS를 필수로 만들 수 없기 때문에 TLS를 선택 사항으로 만듭니다. 또한 SSLv2 및 SSLv3를 허용하지 않으므로 TLSv1.0 이상만 허용됩니다(이유를 알고 싶으면 SSL 자습서를 읽으십시오. 간단히 말해서 SSLv2 및 SSLv3은 더 이상 사용되지 않습니다).

기본값으로는 좋지만 나중에 추가하려는 경우 명시적으로 지정해야 하는 또 다른 설정은 local_recipient_maps입니다.

local_recipient_maps = proxy:unix:passwd.byname $alias_maps

이 설정은 조회 테이블을 확인하고 테이블에서 찾을 수 없는 사용자에게 이메일을 거부하도록 Postfix에 지시합니다. 이는 local_recipient_maps가 설정되지 않은 경우 대체 동작이 먼저 메일을 수락한 다음 나중에 반송하는 것이기 때문에 중요합니다. 이로 인해 "백스캐터\가 발생합니다. local_recipients_maps가 설정되지 않은 경우와 같이 postfix가 모든 유효한 사용자를 즉시 결정할 수 없는 경우(smtpd 서비스에서) 메일을 수락한 다음 나중에 배달 불가 알림을 보냅니다(언제 smptd에 의해 전달된 후 메일이 배달되지 않음을 알게 됩니다.) 이러한 배달 불가 알림은 일반적으로 스팸 및 사기 메일에서 주소가 스푸핑되어 스팸 문제에 기여하는 무고한 사람들을 공격합니다.

정상적인 별칭 구성

별칭 구성에서 설정해야 하는 몇 가지 중요한 메일 계정이 있습니다. 예를 들어 SMTP RFC는 모든 메일을 수락하는 공개적으로 액세스 가능한 모든 메일 서버가 'postmaster' 계정에 대한 메일도 수락해야 한다고 규정하고 있으며 일부 사람들은 "hostmaster\, "abuse\, "webmaster\ 및 기타 메일 주소를 루트 또는 특정 사용자로 리디렉션할 수 있습니다. 다음은 이메일에서 루트를 확인한다고 가정할 때 /etc/aliases에 대한 정상 기본값입니다.

mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root

모든 것을 특정 로컬 사용자에게 리디렉션하려면 "yourname\을 추가하십시오.

root: yourname

Postfix는 귀하를 위해 전체 별칭 체인을 해결하고 모든 메일 주소를 "yourname\으로 전달합니다. (이는 별칭 지정에 의해 수행됩니다.)

"aliases\에서 알 수 있듯이 /etc/aliases 파일을 업데이트한 후 다음을 실행해야 합니다.

newaliases

Postfix가 빠른 조회를 위해 사용하는 데이터베이스로 파일을 컴파일합니다.

비둘기장

이것은 텍스트 벽이 적을 것입니다! 심호흡하세요. 거의 끝났습니다.

패키지

aptitude install dovecot-core dovecot-imapd

해야합니다. 모든 기본 패키지를 원하면 다음을 실행하십시오.

aptitude install dovecot-common

그런 다음 /etc/dovecot/dovecot.conf로 이동하여 파일을 다시 지우십시오. (이번에는 이것이 중요합니다. 기본 구성에는 우리가 원하지 않는 /etc/dovecot/conf.d의 하위 구성 파일이 많이 포함되어 있습니다.)

이제 다음 구성을 입력하십시오.

disable_plaintext_auth = no
mail_privileged_group = mail
mail_location = mbox:~/mail:INBOX=/var/mail/%u
userdb {
  driver = passwd
}
passdb {
  args = %s
  driver = pam
}
protocols = " imap"

이것은 일반 텍스트 인증을 활성화하고("일반 텍스트\ 인증은 TLS를 통해 터널링됨) dovecot에게 로컬 사서함(및 사서함 위치)에 액세스하기 위해 메일 시스템 그룹을 사용하도록 지시하고 유닉스 인증 시스템은 사용자를 인증하고 이미지만 활성화합니다.

원하는 경우 Dovecot이 사서함에 휴지통 및 보낸 편지함 폴더를 자동으로 추가하도록 할 수 있습니다.

protocol imap {
  mail_plugins = " autocreate"
}
plugin {
  autocreate = Trash
  autocreate2 = Sent
  autosubscribe = Trash
  autosubscribe2 = Sent
}

다음으로, postfix가 dovecot의 인증에 피기백하는 데 사용할 수 있는 소켓을 열어야 합니다.

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

그리고 마지막으로 SSL 구성:

ssl=required
ssl_cert = </etc/ssl/certs/mailcert.pem
ssl_key = </etc/ssl/private/mail.key

꺾쇠 괄호에 주의하세요! 그들은 dovecot에게 파일에서 읽도록 지시합니다.

모든 구성 파일을 저장하고 닫고 실행하십시오.

newaliases
postfix start
service dovecot restart

그리고 잘 가셔야 합니다. 메일 클라이언트로 구성을 테스트합니다. 모질라 썬더버드. 어디에서나 어디에서나 메일을 보내고 받을 수 있어야 합니다!

계속되는

가상 사서함(로컬 사용자 계정에 연결되지 않았지만 대신 로컬 데이터베이스를 사용하여 구성할 수 있는 사서함)을 추가하려면 2부로 계속 진행하세요.***

이제 드롭릿의 터미널에서 양방향으로 이메일 전송이 작동하는지 테스트할 수 있습니다.

~# mail someotheremail@gmail.com
Subject: test email from postfix
this is a test
.
EOT

"root@gmail.com\에서 온 메일(당연히 제어할 수 있는 이메일 주소를 입력하세요.) 회신하고 메일을 다시 호출하면 다음과 같이 표시됩니다. (메일이 도착하는 데 1분 정도 걸릴 수 있습니다.) .

~# mail
Heirloom mailx version 12.5 6/20/10.  Type ? for help.
"/var/mail/root": 1 message
>N  1 Your Name          Wed Nov 13 23:45   41/1966  Re: test email from postf

Enter 키를 누르면 메시지가 표시됩니다. (그런 다음 q를 입력하고 Enter 키를 눌러 메일 클라이언트를 종료합니다.)

동일한 작업이 로컬 전자 메일 클라이언트에서도 작동합니다. 새 시스템 사용자 설정:

~# adduser joe
Adding user `joe' ...
Adding new group `joe' (1001) ...
Adding new user `joe' (1001) with group `joe' ...
Creating home directory `/home/joe' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: Enter password here
Retype new UNIX password: Enter password here
passwd: password updated successfully
Changing the user information for joe
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] Y

여기에 입력한 비밀번호가 이메일에 사용하는 비밀번호입니다. Joe는 이제 Thunderbird와 같은 로컬 메일 클라이언트에서 joe@yourdomain.com 주소를 사용할 수 있습니다. Thunderbird에서 새 계정(File -> New -> Existing Mail Account)을 추가하고 joe@yourdomain.com과 암호를 대화 상자에 입력하십시오.

메일 클라이언트가 필요한 설정을 자동 감지하지 못하는 경우: IMAP 연결의 사용자 이름은 joe이고 포트는 143이며 인증 방법은 STARTTLS를 통한 암호화되지 않은 비밀번호입니다. SMTP의 경우 동일하지만 포트 587입니다.

아무 것도 작동하지 않으면 tail -n 50 /var/log/syslog를 사용하여 시스템 로그에서 오류 메시지를 확인하고 tail -n 50 /var/log를 사용하여 메일 로그에서 오류 메시지를 확인하십시오. /mail.log.

제출자: Lukas Erlacher