Setup Postfix + Dovecot lendo do banco de dados

3

Estou tentando configurar Postfix e Dovecot , este último com usuários virtuais armazenados em um banco de dados MySQL, seguindo este guia (mas aqui eu recapitulo tudo, pois há alguns" bugs "no guia que fixei após os comentários). Preâmbulo: Eu tenho Postfix , Dovecot , postfix-mysql e dovecot-mysql instalado dos repositórios do Ubuntu.

Vamos começar com a configuração do Postfix:

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no   
readme_directory = no

myhostname = localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = localhost
relayhost = 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

relay_domains = *
virtual_alias_maps = proxy:mysql:/etc/postfix/virtual_alias_maps.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/virtual_mailbox_domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/virtual_mailbox_maps.cf
virtual_mailbox_base = /home/vmail
virtual_mailbox_limit = 512000000
virtual_minimum_uid = 5000
virtual_transport = virtual
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
local_transport = virtual
local_recipient_maps = $virtual_mailbox_maps
transport_maps = hash:/etc/postfix/transport

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = $smtpd_sasl_security_options
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/ssl/private/server.crt
smtpd_tls_key_file = /etc/ssl/private/server.key
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
smtpd_tls_loglevel = 1

Em seguida, criei o usuário vmail para armazenar e-mails:

groupadd -g 5000 vmail
useradd -u 5000 -g vmail -s /usr/bin/nologin -d /home/vmail -m vmail

E banco de dados e usuário do MySQL para armazenar informações sobre domínios e usuários virtuais:

CREATE DATABASE postfix_db;
USE postfix_db;
CREATE USER postfix_user@localhost IDENTIFIED BY 'password';
GRANT ALL ON postfix_db.* TO postfix_user@localhost;
FLUSH PRIVILEGES;

Em seguida, criei as tabelas relacionadas a domínios, encaminhamentos e usuários:

CREATE TABLE 'domains' (
  'domain' varchar(50) NOT NULL default "",
  PRIMARY KEY  ('domain'),
  UNIQUE KEY 'domain' ('domain')
);


CREATE TABLE 'forwardings' (
  'source' varchar(80) NOT NULL default "",
  'destination' text NOT NULL,
  PRIMARY KEY  ('source')
);

CREATE TABLE 'users' (
  'email' varchar(80) NOT NULL default "",
  'password' varchar(20) NOT NULL default "",
  'quota' varchar(20) NOT NULL default '20971520',
  'domain' varchar(255) NOT NULL default "",
  UNIQUE KEY 'email' ('email')
);

Eu adicionei meu domínio (que tem os registros A e MX definidos corretamente) na tabela:

INSERT INTO 'domains' VALUES ('virtualdomain.tld');

E uma conta relacionada a esse domínio:

INSERT INTO 'users' VALUES ('[email protected]', ENCRYPT('password'), '20971520', 'virtualdomain.tld');

Em seguida, criei um certificado autoassinado:

cd /etc/ssl/private/
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out server.key
chmod 400 server.key
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
chmod 444 server.crt

E, em seguida, os arquivos aos quais eu estava me referindo na configuração do Postfix:

/etc/postfix/virtual_alias_maps.cf

user = postfix_user
password = hunter2
hosts = localhost
dbname = postfix_db
table = domains
select_field = domain
where_field = domain

/etc/postfix/virtual_mailbox_domains.cf

user = postfix_user
password = hunter2
hosts = localhost
dbname = postfix_db
table = forwardings
select_field = destination
where_field = source

/etc/postfix/virtual_mailbox_maps.cf

user = postfix_user
password = hunter2
hosts = localhost
dbname = postfix_db
table = users
select_field = concat(domain,'/',email,'/')
where_field = email

e depois

touch /etc/postfix/transport
postmap /etc/postfix/transport

Agora eu apaguei o arquivo de configuração padrão do Dovecot, substituindo-o por:

protocols = imap
auth_mechanisms = plain
passdb {
    driver = sql
    args = /etc/dovecot/dovecot-sql.conf
}
userdb {
    driver = sql
    args = /etc/dovecot/dovecot-sql.conf
}

service auth {
    unix_listener auth-client {
        group = postfix
        mode = 0660
        user = postfix
    }
    user = root
}

mail_home = /home/vmail/%d/%u
mail_location = maildir:~

ssl_cert = </etc/ssl/private/server.crt
ssl_key = </etc/ssl/private/server.key

Eu criei o arquivo /etc/dovecot/dovecot-sql.conf :

driver = mysql
connect = host=localhost dbname=postfix_db user=postfix_user password=hunter2
# The new name for MD5 is MD5-CRYPT so you might need to change this depending on version
default_pass_scheme = MD5-CRYPT
# Get the mailbox
user_query = SELECT '/home/vmail/%d/%u' as home, 'maildir:/home/vmail/%d/%u' as mail, 5000 AS uid, 5000 AS gid, concat('dirsize:storage=',  quota) AS quota FROM users WHERE email = '%u'
# Get the password
password_query = SELECT email as user, password, '/home/vmail/%d/%u' as userdb_home, 'maildir:/home/vmail/%d/%u' as userdb_mail, 5000 as  userdb_uid, 5000 as userdb_gid FROM users WHERE email = '%u'
# If using client certificates for authentication, comment the above and uncomment the following
#password_query = SELECT null AS password, ‘%u’ AS user

... e finalmente reiniciado o dovecot e o postfix:

service postfix dovecot restart

O problema é que quando tento enviar um email para [email protected] , vejo isso nos logs:

NOQUEUE: reject: RCPT from blablabla.com[xxx.xxx.xxx.xxx]: 451 4.3.0 <[email protected]>: Temporary lookup failure; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<blablabla.com>

E o e-mail é devolvido com o erro

550 5.1.1 "Recipient address rejected: User unknown in virtual alias table"
    
por MultiformeIngegno 01.11.2014 / 00:21

2 respostas

3

Parece que seu virtual_alias_maps e virtual_mailbox_domains foi trocado. Tente renomeá-los

mv /etc/postfix/virtual_alias_maps.cf /tmp/virtual_mailbox_domains.tmp
mv /etc/postfix/virtual_mailbox_domains.cf /etc/postfix/virtual_alias_maps.cf 
mv /tmp/virtual_mailbox_domains.tmp /etc/postfix/virtual_mailbox_domains.cf

Não se esqueça de executar postfix reload .

    
por 01.11.2014 / 02:12
2

Tenho certeza de que o Dovecot é quem cria o arquivo auth, já que o postfix fala com o dovecot e o dovecot faz a autenticação no seu 'dovecot.conf' add:

path = /var/run/dovecot/auth-client

no bloco do cliente da seguinte forma:

service auth {
    unix_listener auth-client {
        path = /var/run/dovecot/auth-client
        group = postfix
        mode = 0660
        user = postfix
    }

ou

service auth {
    unix_listener /var/run/dovecot/auth-client {
        group = postfix
        mode = 0660
        user = postfix
    }

Reinicie o pombal

Verifique se / var / run / dovecot / auth-client é criado

digite ls -l /var/run/dovecot/auth-client para confirmar.

Em seguida, tente novamente.

    
por 01.11.2014 / 04:28