Dovecot으로 Postfix 이메일 서버를 설정하는 방법: 동적 Maildirs 및 LMTP
머리말
이 튜토리얼은 Dovecot으로 Postfix 전자 메일 서버를 설정하는 방법을 기반으로 하며 첫 번째 부분이 끝난 위치를 선택합니다.
먼저 해당 자습서를 살펴보십시오.
이 기사에서는 배달 메커니즘으로 dovecot의 LMTP 서버를 사용하고 postgresql을 사용하여 사용자 기록을 유지하는 시스템 계정에서 사서함을 분리합니다.
더 이상 표준 Linux 사서함으로 메일이 배달되지 않습니다.
첫 번째 가이드와 마찬가지로 이 튜토리얼은 Debian 7 wheezy, Postfix 2.9 및 dovecot 2.1(+ Postgresql 9.1)을 기반으로 합니다.
패키지
PostgreSQL을 설치합니다.
# aptitude install postgresql postfix-pgsql
버전 2.1의 dovecot에는 이미 pgsql이 활성화되어 있어야 합니다. dovecot이 모듈화된 시스템에 있다면 다음을 실행하십시오.
# aptitude install dovecot-lmtpd dovecot-pgsql
필요한 모듈을 설치합니다.
Postgres 데이터베이스 설정
이미 postgres 설정이 실행 중인 경우 필요에 맞게 조정하십시오! 그러나 새로운 postgres 설치에서 데이터베이스에 대한 dovecot 액세스 권한을 부여할 수 있도록 인증을 설정해 보겠습니다. /etc/postgresql/9.1/main/pg_ident.conf
에 다음을 추가합니다.
mailmap dovecot mailreader
mailmap postfix mailreader
mailmap root mailreader
그리고 /etc/postgresql/9.1/main/pg_hba.conf
에 다음을 추가합니다(경고: Put your actual configuration here
주석 블록 바로 뒤에 추가해야 합니다! 그렇지 않으면 기본 항목 중 하나가 먼저 포착될 수 있으며 데이터베이스 인증이 실패합니다.)
local mail all peer map=mailmap
그런 다음 postgresql을 다시 로드합니다(service postgresql reload
). 이제 데이터베이스를 설정합니다.
# sudo -u postgres psql
postgres=# CREATE USER mailreader;
postgres=# REVOKE CREATE ON SCHEMA public FROM PUBLIC;
postgres=# REVOKE USAGE ON SCHEMA public FROM PUBLIC;
postgres=# GRANT CREATE ON SCHEMA public TO postgres;
postgres=# GRANT USAGE ON SCHEMA public TO postgres;
postgres=# CREATE DATABASE mail WITH OWNER mailreader;
postgres=# \q
# sudo psql -U mailreader -d mail
postgres=# \c mail
mail=# CREATE TABLE aliases (
alias text NOT NULL,
email text NOT NULL
);
mail=# CREATE TABLE users (
email text NOT NULL,
password text NOT NULL,
maildir text NOT NULL,
created timestamp with time zone DEFAULT now()
);
mail=# ALTER TABLE aliases OWNER TO mailreader;
mail=# ALTER TABLE users OWNER TO mailreader;
mail=# \q
그런 다음 rootshell에서 시작하여 다음과 같이 가상 사서함을 추가할 수 있습니다.
# doveadm pw -s sha512 -r 100
Enter new password: ...
Retype new password: ...
{SHA512}.............................................................==
# psql -U mailreader -d mail
mail=# INSERT INTO users (
email,
password,
maildir
) VALUES (
'foo@yourdomain.tld',
'{SHA512}.............................................................==',
'foo/'
);
관리 인터페이스(선택 사항)
메일 데이터베이스를 유지 관리하기 위해 명령줄 인터페이스를 사용하지 않으려면 관리 인터페이스를 설정할 수 있습니다. 먼저 메일 데이터베이스만 편집할 수 있는 데이터베이스 사용자를 추가해 보겠습니다. /etc/postgresql/9.1/main/pg_hba.conf
로 돌아가서 이전에 추가한 피어 인증 줄 바로 아래에 다음 줄을 추가합니다.
host pgadmin mail 127.0.0.1/32 md5
이렇게 하면 포트 5432에서 로컬 소켓 연결이 허용됩니다. (postgres의 기본 포트)
데이터베이스 사용자를 추가합니다.
# sudo -u postgres psql
postgres=# CREATE USER pgadmin WITH PASSWORD 'new password';
postgres=# \q
사용자에게 메일 데이터베이스를 편집할 수 있는 권한을 부여합니다.
# sudo psql -U mailreader -d mail
mail=> GRANT SELECT, UPDATE, INSERT, DELETE ON users TO pgadmin;
mail=> GRANT SELECT, UPDATE, INSERT, DELETE ON aliases TO pgadmin;
mail=> \q
이제 SSH 터널링을 사용하여 데이터베이스에 직접 연결할 수 있는 pgAdmin과 같은 관리 인터페이스를 사용하거나 phpPgAdmin과 같은 것을 설정할 수 있습니다.
비둘기장 설정
dovecot을 데이터베이스에 연결하고 LMTP 서버를 설정해야 합니다. 새 사용자(dovecot는 시스템 사용자가 설정되지 않은 메일 처리를 거부함)와 maildirs에 대한 디렉토리를 먼저 설정합니다. (/var/mail을 사용할 수 있지만 전통적으로 mbox 형식을 사용합니다. 더 나은 maildir 형식을 사용해야 합니다).
# adduser --system --no-create-home --uid 500 --group --disabled-password --disabled-login --gecos 'dovecot virtual mail user' vmail
# mkdir /home/mailboxes
# chown vmail:vmail /home/mailboxes
# chmod 700 /home/mailboxes
이제 다음 구성을 /etc/dovecot/dovecot-sql.conf
로 저장합니다.
driver = pgsql
connect = host=/var/run/postgresql/ dbname=mail user=mailreader
default_pass_scheme = SHA512
password_query = SELECT email as user, password FROM users WHERE email = '%u'
user_query = SELECT email as user, 'maildir:/home/mailboxes/maildir/'||maildir as mail, '/home/mailboxes/home/'||maildir as home, 500 as uid, 500 as gid FROM users WHERE email = '%u'
루트가 소유하고 chmodded 600인지 확인하십시오.
이제 /etc/dovecot/dovecot.conf
를 열고 passdb
및 userdb
설정을 다음과 같이 편집합니다.
userdb {
driver = prefetch
}
passdb {
args = /etc/dovecot/dovecot-sql.conf
driver = sql
}
protocols 스탠자를 다음으로 변경합니다.
protocols = imap lmtp
lmtp 서비스 소켓과 일부 lmtp 프로토콜 설정을 추가합니다.
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0600
user = postfix
}
}
protocol lmtp {
postmaster_address=postmaster@yourdomain.com
hostname=mail.yourdomain.com
}
mail_location 스탠자는 이제 불필요하며 제거할 수 있습니다.
접미사
이제 우편물을 dovecot으로 직접 배달하도록 postfix에 알려야 합니다. /etc/postfix/main.cf
를 열고 추가
mailbox_transport = lmtp:unix:private/dovecot-lmtp
끝까지. 이제 postfix에 대한 데이터베이스 구성을 설정해야 합니다.
/etc/postfix/pgsql-aliases.cf
파일을 만들고 다음을 입력합니다.
user=mailreader
dbname=mail
table=aliases
select_field=alias
where_field=email
hosts=unix:/var/run/postgresql
그런 다음 /etc/postfix/pgsql-boxes.cf
파일을 만들고 다음을 입력합니다.
user=mailreader
dbname=mail
table=users
select_field=email
where_field=email
hosts=unix:/var/run/postgresql/
이제 main.cf의 alias_maps 행을 수정하여 다음을 읽습니다.
alias_maps = hash:/etc/aliases proxy:pgsql:/etc/postfix/pgsql-aliases.cf
읽을 local_recipient_maps 행
local_recipient_maps = proxy:pgsql:/etc/postfix/pgsql-boxes.cf $alias_maps
전체적으로 main.cf는 다음과 유사해야 합니다.
myhostname = mail.mydomain.com
myorigin = mydomain.com
mydestination = mydomain.com, mail.mydomain.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
alias_maps = hash:/etc/aliases proxy:pgsql:/etc/postfix/pgsql-aliases.cf
local_recipient_maps = proxy:pgsql:/etc/postfix/pgsql-boxes.cf $alias_maps
mailbox_transport = lmtp:unix:private/dovecot-lmtp
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
마무리
이제 간단하게 새로고침하세요.
# postfix reload
# service dovecot restart
그리고 당신은 설정되었습니다! 첫 번째 기사 이후에 했던 것처럼 설정을 테스트하고 postmaster@yourdomain.com
으로 보내는 메일이 유인 사서함으로 가는지 확인하세요!
제출자: Lukas Erlacher.