On Wed, 4 Apr 2001 [EMAIL PROTECTED] wrote:

>     Tenho que barrar o envio de emails externos para alguns usuarios. p.ex:
> 
>       Usuario 1 só poderia mandar emails localmente
>       Usuario 2 pode mandar emails interno e externo etc..


Você tem antivirus em seu sistema?  Acho que é mais facil usa-lo...


Outra opção é fazer o sendmail decidir.  Não é perfeito, pode ser
burlado, mas funciona muito bem para o uso normal.

Como essa decisão depende do "par" remetente|destinatário, a regra
"check_compat" é capaz de resolver o problema.

Para facilitar a administração é preciso usar "M4 Configuration" e
databases.

A regra "check_compat" é chamada com a informação:

        sender_address $| destination_address

com os "endereços de envelope", portanto SEM aliases.


É preciso decidir que informação o database vai conter:

  1 - usuários que PODEM mandar email para a Internet
  2 - usuários que NÃO podem mandar email para a Internet

A decisão é baseada na facilidade de administração.

Como o endereços passados para a check_compat são os de "envolope
address", deve-se acrescentar também os aliases usados no sistema.

Para se processar com maior facilidade os endereços de email, é
preciso "normaliza-los".  A regra 3 é a regra que "normaliza" o
endereco, colocando-o no formato:

          blabla < @ dominio > foobar

foobar é normalmente vazio, mas deve ser previsto nas regras para
evitar complicações.

As regras check_* podem retornar:

          OK  -> ação pemitida
          $# error $@ DSN $: "NNN mensagem de erro"

Sendo DSN um string com três números, na forma N.N.N, conforme
RFC1893:
        http://www.landfield.com/rfcs/rfc1893.html

e NNN são tres dígitos com o código do protocolo SMTP, RFC821:

        http://www.landfield.com/rfcs/rfc821.html

O mais simples é pegar os pares DSN/NNN de outras regras... ;)


Existem dois tipos de destinatários: locais e remotos (email na
Internet)

Existem dois tipos de remetentes: locais e remotos

Existem dois tipos usuários locais: os que podem mandar email para a
Internet e os que não podem mandar email pela Internet.  Chame-mo-os
de "user_ok" e "user_nok" respectivamente.


Existem as seguntes possibilidades:

        Destinatário    Remetente       Desisão

        user_nok        Internet        erro
        Internet        user_nok        erro
        user_ok         X               OK
        X               user_ok         OK
        user_xx         user_xx         OK


Como a regra check_compat vai ter que analisar os dois endereços,
então o ideal é criar-se uma outra regra para analisar cada endereço
separadamente.  Essa regra retorna "local" para usuarios locais sem
direito a Internet, "ok" para usuários locais com direito a Internet
ou "remoto" para endereços externos.

Decidir se um email é local ou remoto é apenas verificar se ele
pertence à classe "w", que reune todos os endereços e IPs locais,
incluindo os virtuais.

Se você está trabalhando com endereços virtuais, então é preciso
elaborar mais essas regras para poder diferenciar os endereços de cada
domínio.


>    Utilizo o sendmail sendmail-8.9.3-20 e procmail-3.14-2

Atualize para o 8.11!  Já que isso vai dar um trabalhão para
implementar e testar, melhor fazer logo para a nova versão!



Na configuração via M4 podemos acrescentar regras locais que
complementam as regras "check_*" usando-se "Local_check_*":

Local_check_compat
R$* $| $*               $: $2 $| $>verifica $1          processa destinatário
R$* $| $*               $: $2 $| $>verifica $1          processa remetente
Rlocal  $| local        $@ OK                           email local...
Rok     $| $*           $@ OK                           usuário OK!
R$*     $| ok           $@ OK                            "   "  " "
Rlocal  $| $*           $#error $@ 5.7.1 $: "550 Remetente nao pode mandar email para 
a Internet"
R$*     $| local        $#error $@ 5.7.1 $: "550 User unknown (destinatario 
desconhecido)"
R$*                     $#error $@ 5.7.1 $: "550 Relaying denied, Joe"

#  endereços que podem usar Internet DEVEM constar no database como
#  "OK"

LOCAL_CONFIG
Kliberados hash -o /etc/mail/liberados

LOCAL_RULESETS
Sverifica
R$*                     $: $>3 $1                       Canoniza
R$* <@ $=w > $*         $: $(liberados $1 $: local $)   liberado?
Rok                     $@ ok                           usuario OK
Rlocal                  $@ local                        usuario LOCAL
R$*                     $@ remoto                       não local...


É preciso elaborar mais essas regras.  Mailer-daemon é um usuário OK,
pode ser remoto ou não.  Pode-se fazer isso criando-se a categoria
"erro":

Sverifica
R$*                     $: $>3 $1                       Canoniza
R<@>                    $@ erro
R$n<@ $=w>              $@ erro
...

Local_check_compat
...
Rerro  $| local         $@ ok
Rerro  $| ok            $@ ok
Rremoto$| erro          $@ ok           Duplo bouncing?
R$*    $| erro          $@ ok           Existe esse caso?  Duplo bouncing?
Rerro  $! erro          $@ ok           Que que é isso??? :)
Rerro  $| remoto        $@ ok           Suspeito?  Spammer pode explorar?
...

É preciso analisar e experimentar um pouco mais essas situações.

Veja que isso NÃO impede que um usuário "proibido" possa falsificar
seu endereço de origem e mandar email para a Internet como um usuário
liberado.  Se o receptor sabe disso e não fizer um reply, então
ninguém será notificado do problema.

Veja que o SMTP não autentica as informações recebidas nem atesta as
informações transmitidas!  Não sei se com "SMTP AUTH" é possível
bloquear uso indevido...

Veja que esse tipo de coisa é um outro assunto, de um problema de
segurança muito mais amplo do que o SMTP/sendmail é capaz de lidar.


Os usuários devem ser corretamente orientados: se um usuário OK manda
email para um endereço na Internet com CC para usuário local, o
usuário na Internet ao fazer um "reply to all" vai receber um erro de
retorno, pois o usuário no CC não pode receber email externo.  O
usuário OK deve portanto ser instruido à usar nesses casos BCC para os
usuários locais, asim evita-se constrangimentos ao cliente externo.

O database é criado "nos conformes".  Cria-se um arquivo texto
contendo a informação desejada (normalmente com o mesmo nome do
arquivo de database):

# usuarios não listados não podem usar email na Internet

joao                  OK
pedro                 OK
vendas                OK
suporte               OK

# usuários obrigatórios ao sistema

root                  OK
mailer-daemon         OK
postmaster            OK

# usuários de castigo   ;)

fernanda              local
boy                   local

# end of file


E então gerar o .db com:

        cd /etc/mail
        makemap hash liberados  <liberados


--- Wagner                      [EMAIL PROTECTED]


Assinantes em 04/04/2001: 2210
Mensagens recebidas desde 07/01/1999: 107750
Historico e [des]cadastramento: http://linux-br.conectiva.com.br
Assuntos administrativos e problemas com a lista: 
            mailto:[EMAIL PROTECTED]

Responder a