웹사이트 검색

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를 열고 passdbuserdb 설정을 다음과 같이 편집합니다.

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.