Olá, Antes de mais nada, por favor, não envie cópias para mim de suas postagens na lista. Estou inscrito na lista, por isso respondi sua mensagem inicial :-)
On Sat, Dec 27, 2003 at 09:01:35AM -0200, Ricardo Castanheira wrote: > Andre obrigado pela ajuda, mas na verdade eu queira por exemplo bloquear > somente um endereço especifico e não todo mundo. É possível fazer sim, mas de uma maneira que envolve uma configuração um pouco mais complicada. Eu consegui fazer isso usando classes de restrição do Postfix. Trata-se de um recurso avançado bastante útil que lhe permite criar seus próprios parâmetros de configuração e atribuir valores aos mesmos. Logicamente, podem existir inúmeras outras maneiras de fazer isso, mas vou dizer como fiz. A coisa toda gira em torno da maneira como o parâmetro smtpd_sender_restrictions funciona, ou seja, com o esquema de "first match". Você define uma lista de restrições como valor para esse parâmetro e a primeira restrição que casar com a mensagem ou conexão sendo analisada recebe a restrição com o qual ela casou. Por exemplo, não adianta tentar definir que um ou outro endereço de seu domínio deve ser bloqueado se você tem como primeiro valor do parâmetro smtpd_sender_restrictions o valor permit_mynetworks, por exemplo. Como o permit_mynetworks checa os valores do parâmetro mynetworks e permite o relay para todas as redes listadas nesse parâmetro, sua restrição não adiantaria. Ou seja, você disse primeiro que liberaria toda a sua rede através da especificação do valor permit_mynetworks no parâmetro smtpd_sender_restrictions e foi isso que o Postfix fez, liberou sua rede interna completamente. Não importa se depois do valor permit_mynetworks você tenha especificado quaisquer outras restrições : a primeira é que vale (first match). Em meu setup, possui uma série adicionais de condições a serem checadas no parâmetro smtpd_sender_restrictions, mas, para efeitos didáticos, vou usar o seguinte : smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/remetentes_internos, permit_mynetworks, check_relay_domains A linha acima diz que primeiro o Postfix (na verdade, o daemon smtpd do Postfix) deve checar o arquivo /etc/postfix/remetentes_internos (na verdade, o arquivo será /etc/postfix/remetentes_internos.db, um mapa hash criado com o comando postmap) antes de mais nada e verificar as restrições contidas nesse arquivo. Se nenhuma das restrições contidas no arquivo casar com o caso sendo analisado, continue checando se a conexão SMTP é originada da rede interna (permit_mynetworks) e, por fim, cheque se o domínio usado pelo remetente é um dos domínios para os quais fazemos relay (check_relay_domains consulta o valor do parâmetro relay_domains, portanto, tenha certeza de tê-lo definido corretamente). O contéudo do arquivo /etc/postfix/remetentes_internos deve ter algo como o seguinte : [EMAIL PROTECTED] chechar_interno [EMAIL PROTECTED] chechar_interno Isso mesmo, ao invés de usar OK, REJECT ou qualquer outra restrição, estamos indicando uma restrição chamada "checar_interno", a qual vamos definir como uma classe de restrição. Para definí-la, no arquivo /etc/postfix/main.cf use : smtpd_restriction_classes = checar_interno Pronto, aqui você diz que uma nova classe de restrição de nome "checar_interno" existe. Mas o que ela faz ? Fácil, vamos definir isso também. Veja a seguir : checar_interno = check_recipient_access hash:/etc/postfix/destinatarios_internos, reject Pronto. Definimos o que nossa classe de restrição fará. Vejamos o arquivo /etc/postfix/destinatarios_internos : dominiointerno.com.br OK * REJECT Isso. No final das contas, a restrição "checar_interno" diz que se o domínio do destinatário usado for dominiointerno.com.br, a mensagem passará sem problemas pelo Postfix. Caso contrário, ela será rejeitada. Neste ponto, a configuração já está completa. Você só precisa gerar os mapas de lookup e dar um reload no Postfix. Use os comandos abaixo para isso : postmap /etc/posfix/remetentes_internos postmap /etc/postfix/destinatarios_internos postfix reload Pronto. Tudo funcionando (pelo menos em meus testes). Isso tudo é necessário porque você quer restringir seletivamente usuários válidos de seu domínio válido de forma que eles somente enviem mensagens para os outros usuários de seu próprio domínio e não para usuários de outros domínios externos. Fluxo da mensagem (ou como ela é bloqueada) =========================================== Seu usuário interno [EMAIL PROTECTED] envia uma mensagem para um usuário externo [EMAIL PROTECTED] A mensagem entra no Postfix pelo daemon smtpd e, portanto, as restrições definidas em pelo parãmetro smtpd_sender_restrictions serão analisadas. Primeiro, a restrição check_sender_access é analisada. Ela ponta para um arquivo de nome /etc/postfix/remtentes_internos. O mapa hash desse arquivo (/etc/postfix/remetentes_internos.db, criado com o postmap) é analisado e o postfix encontra uma entrada correspondente ao seu usuário interno com o seguinte : [EMAIL PROTECTED] chechar_interno Ok, então quer dizer que para esse usuário, a restrição "checar_interno" deve ser executada/verificada. O Postfix verifica então que a restrição "checar_interno" é uma classe de restrição que diz o seguinte : checar_interno = check_recipient_access hash:/etc/postfix/destinatarios_internos, reject Ok, então ele checa o arquivo /etc/postfix/destinatarios_internos (lembre-se, na verdade, ele estará checando o mapa hash /etc/postfix/destinatarios_internos.db) e procura uma restrição que case. Na primeira linha, ele encontra : dominiointerno.com.br OK Ok, para qualquer usuário do domínio interno a mensagem pode ser entregue sem problemas. Hmm, mas essa mensagem foi enviada para o usuário externo [EMAIL PROTECTED] Ok, não casou. O Postfix continua analisando o restante do arquivo /etc/postfix/destinatarios_internos.db. A próxima entrada diz : * REJECT Opa, essa é forte :-) Para qualquer coisa, rejeite. Ok, o Postfix cumpre suas ordens e rejeita a mensagem. Repare que estamos garantindo que o usuário consiga enviar mensagens para outros usuários do domínio interno somente listando o mesmo com a restrição (liberação na verdade) OK na primeira linha do arquivo. Caso existam mais domínios internos, os mesmos devem ser listados também no começo do arquivo e a restrição de rejeição total deve ser listado como última restrição. Bom, espero que tenha entendido. Mensagem grande, mas explicado. Atenciosamente, -- ++----------------------------------------------------------------------++ || André Luís Lopes [EMAIL PROTECTED] || || http://people.debian.org/~andrelop || || Debian-BR Project http://www.debian-br.org || || Public GPG KeyID 9D1B82F6 ||
signature.asc
Description: Digital signature