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]