Usei abordagens um pouco diferentes, mas que resolveu o que precisava. CONFIGURAÇÃO E MÓDULOS ------------------------------------------------------------------------------------------------ Módulos ativos e configuração do Postfix: svrpostfix:/etc/postfix # postconf -m btree cidr environ hash internal ldap mysql nis pcre proxy regexp sdbm static tcp Unix
svrpostfix:/etc/postfix # postconf -n alias_database = hash:/etc/postfix/aliases alias_maps = hash:/etc/postfix/aliases allow_min_user = no biff = no bounce_queue_lifetime = 1d broken_sasl_auth_clients = yes canonical_maps = command_directory = /usr/sbin config_directory = /etc/postfix content_filter = smtp-amavis:[127.0.0.1]:10024 daemon_directory = /usr/lib/postfix data_directory = /var/lib/postfix debug_peer_level = 2 defer_transports = disable_dns_lookups = no disable_mime_output_conversion = no disable_vrfy_command = yes enable_original_recipient = no home_mailbox = Maildir/ html_directory = /usr/share/doc/packages/postfix-doc/html inet_protocols = ipv4 mail_spool_directory = /var/mail mailbox_command = /usr/lib/dovecot/deliver mailbox_size_limit = 0 mailbox_transport = mailq_path = /usr/bin/mailq manpage_directory = /usr/share/man masquerade_classes = envelope_sender, header_sender, header_recipient masquerade_domains = masquerade_exceptions = root maximal_backoff_time = 4000s maximal_queue_lifetime = 1d message_size_limit = 15728640 message_strip_characters = \0 minimal_backoff_time = 300s mydestination = $myhostname, localhost, localhost.localdomain, localhost.$myhostname mydomain = dominio.com myhostname = svrpostfix.dominio.com.br mynetworks = 127.0.0.0/8, 10.1.11.0/24 mynetworks_style = class myorigin = svrpostfix.dominio.com.br newaliases_path = /usr/bin/newaliases proxy_read_maps = $canonical_maps $lmtp_generic_maps $local_recipient_maps $mydestination $mynetworks $recipient_bcc_maps $recipient_canonical_maps $relay_domains $relay_recipient_maps $relocated_maps $sender_bcc_maps $sender_canonical_maps $smtp_generic_maps $smtpd_sender_login_maps $transport_maps $virtual_alias_domains $virtual_alias_maps $virtual_mailbox_domains $virtual_mailbox_maps $smtpd_sender_restrictions queue_run_delay = 300s readme_directory = /usr/share/doc/packages/postfix-doc/README_FILES recipient_bcc_maps = proxy:mysql:/etc/postfix/mysql/recipient_bcc_maps_domain.cf, proxy:mysql:/etc/postfix/mysql/recipient_bcc_maps_user.cf recipient_delimiter = + relay_domains = $mydestination, proxy:mysql:/etc/postfix/mysql/relay_domains.cf sample_directory = /usr/share/doc/packages/postfix-doc/samples sender_bcc_maps = proxy:mysql:/etc/postfix/mysql/sender_bcc_maps_domain.cf, proxy:mysql:/etc/postfix/mysql/sender_bcc_maps_user.cf sender_canonical_maps = sendmail_path = /usr/sbin/sendmail setgid_group = maildrop smtp_data_init_timeout = 240s smtp_data_xfer_timeout = 600s smtp_enforce_tls = no smtp_sasl_auth_enable = no smtp_use_tls = no smtpd_client_restrictions = smtpd_data_restrictions = reject_unauth_pipelining smtpd_enforce_tls = no smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks,permit_sasl_authenticated, check_helo_access pcre:/etc/postfix/helo_access.pcre smtpd_recipient_restrictions = reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unlisted_recipient, check_policy_service inet:127.0.0.1:7777, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, check_policy_service inet:127.0.0.1:10031 smtpd_reject_unlisted_recipient = yes smtpd_reject_unlisted_sender = yes smtpd_sasl_auth_enable = yes smtpd_sasl_authenticated_header = no smtpd_sasl_local_domain = smtpd_sasl_path = ./dovecot-auth smtpd_sasl_security_options = noanonymous smtpd_sasl_type = dovecot smtpd_sender_login_maps = proxy:mysql:/etc/postfix/mysql/sender_login_maps.cf smtpd_sender_restrictions = permit_mynetworks, reject_sender_login_mismatch, permit_sasl_authenticated smtpd_tls_CAfile = /etc/ssl/certs/iRedMail_CA.pem smtpd_tls_cert_file = /etc/ssl/certs/iRedMail_CA.pem smtpd_tls_key_file = /etc/ssl/private/iRedMail.key smtpd_tls_loglevel = 0 smtpd_tls_security_level = may smtpd_use_tls = no strict_8bitmime = no strict_rfc821_envelopes = no tls_random_source = dev:/dev/urandom transport_maps = proxy:mysql:/etc/postfix/mysql/transport_maps_user.cf, proxy:mysql:/etc/postfix/mysql/transport_maps_domain.cf, proxy:hash:/etc/postfix/transport unknown_local_recipient_reject_code = 550 virtual_alias_domains = virtual_alias_maps = proxy:mysql:/etc/postfix/mysql/virtual_alias_maps.cf, proxy:mysql:/etc/postfix/mysql/domain_alias_maps.cf, proxy:mysql:/etc/postfix/mysql/catchall_maps.cf, proxy:mysql:/etc/postfix/mysql/domain_alias_catchall_maps.cf, ldap:/etc/postfix/ldap.accounts, hash:/etc/postfix/virtual_alias_domains virtual_gid_maps = static:303 virtual_mailbox_base = /vmail virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql/virtual_mailbox_domains.cf virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf, proxy:ldap:/etc/postfix/ldap.accounts virtual_minimum_uid = 303 virtual_transport = dovecot virtual_uid_maps = static:303 Busca de endereços de email no Active Directory, abordagem #1: ------------------------------------------------------------------------------------------------ Testei duas configurações, com a finalidade de para buscar endereços de emails válidos no Active Directory. Na primeira abordagem, para cada mensagem recebida é feita uma busca no Active Directory: svrpostfix:/etc/postfix # cat main.cf | grep ldap.accou virtual_alias_maps = proxy:mysql:/etc/postfix/mysql/virtual_alias_maps.cf, proxy:mysql:/etc/postfix/mysql/domain_alias_maps.cf, proxy:mysql:/etc/postfix/mysql/catchall_maps.cf, proxy:mysql:/etc/postfix/mysql/domain_alias_catchall_maps.cf, ldap:/etc/postfix/ldap.accounts, hash:/etc/postfix/virtual_alias_domains virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf, proxy:ldap:/etc/postfix/ldap.accounts svrpostfix:/etc/postfix # cat ldap.accounts server_host = ldap://IP.DC.Y.Z:3268 search_base = dc=dominio,dc=com,dc=br version = 3 query_filter = (&(objectClass=user)(mail=%s)) result_attribute = sAMAccountName result_format = %u...@dominio.com.br bind = yes bind_dn = homol...@dominio.com.br bind_pw = <Senha KeePass> timeout = 20 Busca de endereços de email no Active Directory, abordagem #2: ------------------------------------------------------------------------------------------------ A segunda abordagem, que se mostrou mais efetiva, faz a busca agendada no AD de todas as contas de emails ativos (principal, aliases e grupos) e criar um mapa local para o transporte. A vantagem é a diminuição do tráfego junto aos controladores de domínio, fazendo apenas duas consultas ao dia e em horários não-conflitantes com usuários. É usado um script em Perl que faz a alimentação desse arquivo (abaixo): use Net::LDAP; use Net::LDAP::Control::Paged; use Net::LDAP::Constant ( "LDAP_CONTROL_PAGED" ); $VALID = "/etc/postfix/transport"; $dc1="controlador1.dominio.com.br"; $dc2="controlador2.dominio.com.br"; $hqbase="dc=dominio,dc=com,dc=br"; $user="CN=Serviços SMTP Active Directory,OU=OU-Servicos,DC=dominio,DC=com,DC=br"; $passwd="<Senha KeePass>"; $noldapserver=0; $ldap = Net::LDAP->new($dc1) or $noldapserver=1; if ($noldapserver == 1) { $ldap = Net::LDAP->new($dc2) or die "Error connecting to specified domain controllers $@ \n"; } $mesg = $ldap->bind ( dn => $user, password =>$passwd); if ( $mesg->code()) { die ("error:", $mesg->code(),"\n","error name: ",$mesg->error_name(), "\n", "error text: ",$mesg->error_text(),"\n"); } $page = Net::LDAP::Control::Paged->new( size => 990 ); @args = ( base => $hqbase, filter => "(& (mailnickname=*) (| (&(objectCategory=person) (objectClass=user)(!(homeMDB=*))(!(msExchHomeServerName=*))) (&(objectCategory=person)(objectClass=user)(|(homeMDB=*) (msExchHomeServerName=*)))(&(objectCategory=person)(objectClass=contact)) (objectCategory=group)(objectCategory=publicFolder)(objectClass=msExchDynamicDistributionList) ))", control => [ $page ], attrs => "proxyAddresses", ); my $cookie; while(1) { my $mesg = $ldap->search( @args ); foreach my $entry ( $mesg->entries ) { my $name = $entry->get_value( "cn" ); foreach my $mail ( $entry->get_value( "proxyAddresses" ) ) { if ( $mail =~ s/^(smtp|SMTP)://gs ) { push(@valid, $mail." smtp:exchange\n"); } } } $mesg->code and last; my($resp) = $mesg->control( LDAP_CONTROL_PAGED ) or last; $cookie = $resp->cookie or last; $page->cookie($cookie); } if ($cookie) { $page->cookie($cookie); $page->size(0); $ldap->search( @args ); die("LDAP query unsuccessful"); } open VALID, ">$VALID" or die "CANNOT OPEN $VALID $!"; print VALID @valid; close VALID; Trecho do arquivo criado pelo script getadsmtp.pl: ------------------------------------------------------------------------------------------------ svrpostfix:/etc/postfix # cat transport abelardo.nov...@dominio.com.br smtp:exchange mangana...@gmail.com smtp:exchange a...@dominio.com.br smtp:exchange a...@dominio.com.br smtp:exchange (...) zsan...@dominio.com.br smtp:exchange zelia.san...@dominio.com.br smtp:exchange zso...@dominio.com.br smtp:exchange zelia.so...@dominio.com.br smtp:exchange Agendamento para busca de emails e atualização do mapa ------------------------------------------------------------------------------------------------ 30 12,18 * * * /etc/postfix/getadsmtp.pl >/dev/null 40 12,18 * * * /usr/sbin/postmap /etc/postfix/transport >/dev/null -----Mensagem original----- De: postfix-br-boun...@listas.softwarelivre.org [mailto:postfix-br-boun...@listas.softwarelivre.org] Em nome de vic Enviada em: terça-feira, 23 de agosto de 2011 14:47 Para: Grupo de Usuarios Postfix do Brasil Assunto: Re: [Postfix-BR] RES: RES: RES: Postfix com MySQL: como entregar parte localmente e o restante em outro servidor Em ter 23 ago 2011, às 12:47:27, Adauto Soares da Silva escreveu: > Eu tinha até testado dessa forma, mas acabo recebendo o erro abaixo depois > de excluir a entrada e recarregar o Postfix: > > 5.1.1 <adauto.soa...@dominio.com.br>: Recipient address rejected: > User unknown in virtual mailbox table; > > Continua nesse erro 550 e fiz vários ajustes no transporte. Fica como se o > Postfix o ignorasse. Eu te agradeço pela ajuda e tem razão sobre VIRTUAL. O > man dele explicita sobre o redirecionamento pra outro domínio, não para o > mesmo servidor. Eu tinha testado com live.com. > > # @domain address, address, ... > # Redirect mail for other users in domain to > address. > > O transporte é que está pegando. > Para resolver o erro de usuário não existe, basta você adicionar no seu virtual_mailbox_maps e virtual_mailbox_domains um hash ou consulta no seu servidor exchange para que o postfix saiba os usuários que existem lá. -- vic http://choppnerd.com _______________________________________________ Postfix-BR mailing list Postfix-BR@listas.softwarelivre.org http://listas.softwarelivre.org/mailman/listinfo/postfix-br Essa mensagem e anexos são endereçados exclusivamente ao remetente acima indicado, podendo conter dados confidenciais. É proibido a pessoas não autorizadas, sob qualquer forma ou pretexto, utilizá-los, divulgá-los, alterá-los, de forma impressa ou copiada, total ou parcialmente. Caso tenha a recebido erroneamente, por favor, notifique o remetente e providencie imediata exclusão da original e de qualquer cópia. O uso impróprio será tratado conforme as normas da empresa e da legislação em vigor. Esta mensagem expressa o posicionamento pessoal do remetente e não reflete necessariamente a opinião da Mútua. _______________________________________________ Postfix-BR mailing list Postfix-BR@listas.softwarelivre.org http://listas.softwarelivre.org/mailman/listinfo/postfix-br