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

