CentOS 8 - Postfix SMTP, Dovecot POP IMAP and SSL/TLS
차례:
이것은 메일 서버 시리즈 설정 및 구성의 두 번째 게시물입니다. 이 게시물에서는 메일 시스템의 두 가지 주요 구성 요소 인 Postfix 및 Dovecot를 설치하고 구성하는 방법을 보여줍니다.
Postfix는 전자 메일을 보내고받는 데 사용되는 서비스 인 오픈 소스 MTA (메일 전송 에이전트)입니다. Dovecot은 IMAP / POP3 서버이며 설정에서 로컬 배달 및 사용자 인증도 처리합니다.
이 튜토리얼은 Ubuntu 16.04 용으로 작성되었지만, 조금 수정해도 동일한 단계가 최신 버전의 Ubuntu에서 작동합니다.
전제 조건
이 학습서를 계속하기 전에 sudo 권한이있는 사용자로 로그인했는지 확인하십시오.
Postfix 및 Dovecot 설치
Ubuntu 기본 리포지토리의 Dovecot 패키지가 오래되었습니다.
imap_sieve
모듈을 활용하기 위해 Dovecot 커뮤니티 저장소에서 Dovecot을 설치합니다.
다음 wget 명령을 사용하여 저장소 GPG 키를 적절한 소스 키링에 추가하십시오.
wget -O- https://repo.dovecot.org/DOVECOT-REPO-GPG | sudo apt-key add -
다음 명령을 사용하여 Dovecot 커뮤니티 저장소를 사용하십시오.
echo "deb https://repo.dovecot.org/ce-2.3-latest/ubuntu/$(lsb_release -cs) $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/dovecot.list
sudo apt update
sudo debconf-set-selections <<< "postfix postfix/mailname string $(hostname -f)"
sudo debconf-set-selections <<< "postfix postfix/main_mailer_type string 'Internet Site'"
sudo apt install postfix postfix-mysql dovecot-imapd dovecot-lmtpd dovecot-pop3d dovecot-mysql
접미사 구성
가상 메일 함과 도메인을 사용하도록 Postfix를 설정합니다.
이 시리즈의 첫 번째 부분에서 작성된 MySQL 데이터베이스에 액세스하는 방법을 postfix에 지시하는
sql
구성 파일을 작성하여 시작하십시오.
sudo mkdir -p /etc/postfix/sql
텍스트 편집기를 열고 다음 파일을 작성하십시오.
/etc/postfix/sql/mysql_virtual_domains_maps.cf
user = postfixadmin password = P4ssvv0rD hosts = 127.0.0.1 dbname = postfixadmin query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
/etc/postfix/sql/mysql_virtual_alias_maps.cf
user = postfixadmin password = P4ssvv0rD hosts = 127.0.0.1 dbname = postfixadmin query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf
user = postfixadmin password = P4ssvv0rD hosts = 127.0.0.1 dbname = postfixadmin query = SELECT goto FROM alias, alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
user = postfixadmin password = P4ssvv0rD hosts = 127.0.0.1 dbname = postfixadmin query = SELECT goto FROM alias, alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
/etc/postfix/sql/mysql_virtual_mailbox_maps.cf
user = postfixadmin password = P4ssvv0rD hosts = 127.0.0.1 dbname = postfixadmin query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
user = postfixadmin password = P4ssvv0rD hosts = 127.0.0.1 dbname = postfixadmin query = SELECT maildir FROM mailbox, alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'
SQL 구성 파일이 작성되면 기본 postfix 구성 파일을 업데이트하여 MySQL 데이터베이스에 저장된 가상 도메인, 사용자 및 별명에 대한 정보를 포함하십시오.
sudo postconf -e "virtual_mailbox_domains = mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf"
sudo postconf -e "virtual_alias_maps = mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf"
sudo postconf -e "virtual_mailbox_maps = mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf"
postconf 명령은 구성 매개 변수의 실제 값을 표시하거나 구성 매개 변수 값을 변경하거나 Postfix 메일 시스템에 대한 기타 구성 정보를 표시합니다.
로컬 배달 에이전트는 들어오는 전자 메일을 사용자의 사서함으로 배달합니다. 다음 명령을 실행하여 Dovecot의 LMTP 서비스를 기본 메일 전송으로 설정하십시오.
sudo postconf -e "virtual_transport = lmtp:unix:private/dovecot-lmtp"
이전에 생성 된 SSL 인증서를 암호화합니다를 사용하여 TL 매개 변수를 설정하십시오.
sudo postconf -e 'smtp_tls_security_level = may'
sudo postconf -e 'smtpd_tls_security_level = may'
sudo postconf -e 'smtp_tls_security_level = may'
sudo postconf -e 'smtpd_tls_security_level = may'
sudo postconf -e 'smtp_tls_security_level = may'
sudo postconf -e 'smtpd_tls_security_level = may'
sudo postconf -e 'smtp_tls_security_level = may'
sudo postconf -e 'smtpd_tls_security_level = may'
sudo postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/mail.linuxize.com/fullchain.pem'
sudo postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/mail.linuxize.com/privkey.pem'
인증 된 SMTP 설정을 구성하고 인증을 Dovecot으로 전달하십시오.
sudo postconf -e 'smtpd_sasl_type = dovecot'
sudo postconf -e 'smtpd_sasl_path = private/auth'
sudo postconf -e 'smtpd_sasl_local_domain ='
sudo postconf -e 'smtpd_sasl_security_options = noanonymous'
sudo postconf -e 'broken_sasl_auth_clients = yes'
sudo postconf -e 'smtpd_sasl_auth_enable = yes'
sudo postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination'
Postfix 마스터 구성 파일
master.cf
를 편집하고 제출 포트 (
587
) 및 smtps 포트 (
465
)를 활성화해야합니다.
텍스트 편집기로 파일을 열고 다음 행을 주석 해제 / 편집하십시오.
/etc/postfix/master.cf
submission inet n - y - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes # -o smtpd_reject_unlisted_recipient=no -o smtpd_client_restrictions=permit_sasl_authenticated, reject # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions # -o smtpd_recipient_restrictions= # -o smtpd_relay_restrictions=permit_sasl_authenticated, reject -o milter_macro_daemon_name=ORIGINATING smtps inet n - y - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes # -o smtpd_reject_unlisted_recipient=no -o smtpd_client_restrictions=permit_sasl_authenticated, reject # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions # -o smtpd_recipient_restrictions= # -o smtpd_relay_restrictions=permit_sasl_authenticated, reject -o milter_macro_daemon_name=ORIGINATING
변경 사항을 적용하려면 접미사 서비스를 다시 시작하십시오.
sudo systemctl restart postfix
이제 Postfix 서비스를 성공적으로 구성했습니다.
비둘기장 구성
이 섹션에서는 설정과 일치하도록 Dovecot을 구성합니다. 노란색으로 강조 표시된 선을 편집해야합니다.
Dovecot가 데이터베이스에 액세스하는 방법과 이메일 계정 정보를 찾는 방법을 지시하는
dovecot-sql.conf.ext
파일을 구성하여 시작하십시오.
driver = mysql connect = host=127.0.0.1 dbname=postfixadmin user=postfixadmin password=P4ssvv0rD default_pass_scheme = MD5-CRYPT iterate_query = SELECT username AS user FROM mailbox user_query = SELECT CONCAT('/var/mail/vmail/', maildir) AS home, \ CONCAT('maildir:/var/mail/vmail/', maildir) AS mail, \ 5000 AS uid, 5000 AS gid, CONCAT('*:bytes=', quota) AS quota_rule \ FROM mailbox WHERE username = '%u' AND active = 1 password_query = SELECT username AS user, password FROM mailbox \ WHERE username = '%u' AND active='1'
올바른 MySQL 자격 증명 (dbname, user 및 password)을 사용하는 것을 잊지 마십시오.
그런 다음
conf.d/10-mail.conf
파일을 편집하고 다음 변수를 편집하십시오.
… mail_location = maildir:/var/mail/vmail/%d/%n… mail_uid = vmail mail_gid = vmail… first_valid_uid = 5000 last_valid_uid = 5000… mail_privileged_group = vmail… mail_plugins = quota…
인증을 수행하려면
conf.d/10-auth.conf
열고 다음 행을 편집하고
auth-sql.conf.ext
파일을 포함하십시오.
… disable_plaintext_auth = yes… auth_mechanisms = plain login… #!include auth-system.conf.ext !include auth-sql.conf.ext…
conf.d/10-master.conf
파일을 열고 다음과 같이 수정하십시오.
… service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix }… }… service auth {… unix_listener auth-userdb { mode = 0600 user = vmail group = vmail }… unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix }… }… service auth-worker { user = vmail }… service dict { unix_listener dict { mode = 0660 user = vmail group = vmail } }…
conf.d/10-ssl.conf
열고 SSL / TLS를 활성화하십시오.
… ssl = yes… ssl_cert = Make sure you use the correct path to the SSL certificate files.
If you have followed this series from the beginning, you should already have the
fullchain.pem
,
privkey.pem
,
dhparam.pem
files created on your server. For more information about how to create a free Let's encrypt SSL certificate and Diffie–Hellman key check this tutorial.
Thanks to Nevyn for noticing the problem and providing a solution.
… ssl = yes… ssl_cert = Make sure you use the correct path to the SSL certificate files.
If you have followed this series from the beginning, you should already have the
fullchain.pem
,
privkey.pem
,
dhparam.pem
files created on your server. For more information about how to create a free Let's encrypt SSL certificate and Diffie–Hellman key check this tutorial.
Thanks to Nevyn for noticing the problem and providing a solution.
conf.d/20-imap.conf
파일을 열고
imap_quota
플러그인을 활성화하십시오:
… protocol imap {… mail_plugins = $mail_plugins imap_quota… }…
conf.d/20-lmtp.conf
파일을 열고 다음과 같이 편집하십시오.
… protocol lmtp { postmaster_address = [email protected] mail_plugins = $mail_plugins }…
conf.d/20-lmtp.conf
파일에서 기본 메일 함을 정의하십시오.
… mailbox Drafts { special_use = \Drafts } mailbox Spam { special_use = \Junk auto = subscribe } mailbox Junk { special_use = \Junk }…
할당량 크기에는 두 가지 유형이 있습니다. 하나는 전체 도메인에 대해 설정되고 다른 하나는 사용자 사서함별로 설정됩니다. 이 시리즈의 이전 부분에서는 PostfixAdmin에서 할당량 지원을 이미 활성화했습니다. 이는 할당량 정보가 PostfixAdmin 데이터베이스에 저장됨을 의미합니다.
이제 데이터베이스에 연결하고 할당량 제한을 처리하고 사용자의 할당량이 지정된 제한을 초과 할 때 사용자에게 메일을 보내는 스크립트를 실행하도록 Dovecot을 구성해야합니다. 이렇게하려면
conf.d/90-quota.conf
파일을 열고 다음과 같이 수정하십시오.
plugin { quota = dict:User quota::proxy::sqlquota quota_rule = *:storage=5GB quota_rule2 = Trash:storage=+100M quota_grace = 10%% quota_exceeded_message = Quota exceeded, please contact your system administrator. quota_warning = storage=100%% quota-warning 100 %u quota_warning2 = storage=95%% quota-warning 95 %u quota_warning3 = storage=90%% quota-warning 90 %u quota_warning4 = storage=85%% quota-warning 85 %u } service quota-warning { executable = script /usr/local/bin/quota-warning.sh user = vmail unix_listener quota-warning { group = vmail mode = 0660 user = vmail } } dict { sqlquota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext }
또한 할당량 SQL 사전에 액세스하는 방법을 dovecot에 알려 주어야합니다.
dovecot-dict-sql.conf.ext
파일을 열고 다음 행을 편집하십시오.
… connect = host=127.0.0.1 dbname=postfixadmin user=postfixadmin password=P4ssvv0rD… map { pattern = priv/quota/storage table = quota2 username_field = username value_field = bytes } map { pattern = priv/quota/messages table = quota2 username_field = username value_field = messages }… # map { # pattern = shared/expire/$user/$mailbox # table = expires # value_field = expire_stamp # # fields { # username = $user # mailbox = $mailbox # } # }…
올바른 MySQL 자격 증명 (dbname, user 및 password)을 사용해야합니다.
할당량이 지정된 한도를 초과하면 사용자에게 전자 메일을 보내는 다음 셸 스크립트를 만듭니다.
/usr/local/bin/quota-warning.sh
#!/bin/sh PERCENT=$1 USER=$2 cat << EOF | /usr/lib/dovecot/dovecot-lda -d $USER -o "plugin/quota=dict:User quota::noenforcing:proxy::sqlquota" From: [email protected] Subject: Quota warning Your mailbox is now $PERCENT% full. EOF
다음
chmod
명령을 실행하여 스크립트를 실행 가능하게 만드십시오.
sudo chmod +x /usr/local/bin/quota-warning.sh
마지막으로 도브 코트 서비스를 다시 시작하여 변경 사항을 적용하십시오.
sudo systemctl restart dovecot
결론
이제는 완전한 기능을 갖춘 메일 시스템이 있어야합니다. 이 시리즈의 다음 부분에서는 Rspamd를 설치하고 통합하는 방법을 보여줍니다.
메일 서버 접미사 비둘기장이 게시물은 메일 서버 시리즈 설정 및 구성의 일부입니다.
이 시리즈의 다른 게시물:
• PostfixAdmin으로 메일 서버 설정 • Postfix 및 Dovecot 설치 및 구성 • Rspamd 설치 및 통합 • Roundcube 웹 메일 설치 및 구성