Documentação - Sceo

Documentação do Sceo 0.28, 0.29 e 0.30

» Manual de Instalação
» Configuração
» Regras





Manual de Instalação



Copie o arquivo sceo_xxxx.tar.bz2 para a raiz do sistema:
# cp sceo_xxxx.tar.bz2 /

Descompacte-o:
# cd /
# tar xjvf sceo_xxxx.tar.bz2

Será criado o diretorio /usr/local/sceo.
Edite o arquivo /usr/local/sceo/sceo.conf para configurar o servidor SCEO
Este arquivo já vem configurado de forma a funcionar perfeitamente sem qualquer alteração

Uma mudança básica que você poderá fazer é alterar a opção 'Server_name' colocando o nome reverso de seu servidor


Os diretorios criados foram:
/usr/local/sceo
/usr/local/sceo/mod
/var/spool/sceo
/var/spool/sceo/erros
/var/log/sceo


Crie o usuario 'sceo' no seu sistema:

useradd sceo


Foi copiado para o /etc/rc.d o script de inicialização e parada do servidor
Para liga-lo
# /etc/rc.d/rc.sceo start

Para para-lo
# /etc/rc.d/rc.sceo stop

Para reinicia-lo
# /etc/rc.d/rc.sceo restart

Todo sistema fica no diretório /usr/local/sceo. Basta apenas fazer uma cópia deste diretório
para se ter um backup completo do servidor e sua configuração (Isso se você não espalhar
os arquivos de configuração pelo sistema)

Todos os arquivos de fila ficam em /var/spool/sceo e os que não puderem ser reportados
aos remetentes em caso de erro, são movidos para /var/spool/sceo/erros

Para liberar o reenvio de emails (Relay) para sua rede interna, basta mexer no arquivo de regras de conexões apontado pela opção 'Connection_rules'.
Digamos que sua rede interna seja 10.10.10.0/24:
Ip? "10.10.10.0/24" Relay!


Não é preciso reiniciar o servidor Sceo quando os arquivos de regras são alterados, apenas a alteração do sceo.conf requer um restart do servidor Sceo





Configuração

O arquivo de configuração do servidor é /usr/local/sceo/sceo.conf
É preciso reiniciar o Sceo para qualquer alteração neste arquivo entrar em vigor.
Para reiniciar o Sceo, execute:
/etc/rc.d/rc.sceo restart



 

 

Introdução


- O sistema diferencia maiúsculas de minúsculas.
- Textos devem ser usados entre aspas -> ".
- Cuidado para não passar valores invalidos ou textos sem aspas como parametro.
- Para as opções Liga/Desliga, o numero 1 vale como ligado e o valor 0 (ZERO) como desligado


Opções

### Port
Aponta para o número da porta na qual o servidor smtp vai escutar conexões

Exemplo:
Port 25

 

### Server_name
Indica o nome do servidor local.
É importante que o nome apontado por esta opção seja igual ao nome reverso do próprio servidor para evitar pontuação negativa por parte de outros sistemas de anti-spam.

### Resolve_all  ( Sceo 0.29 ou superior )
Esta opção permite ao administrador desativar o resolvedor de nomes do Sceo.
Por padrão, quando o Sceo recebe uma conexão ele automaticamente tenta achar o nome reverso do IP. As vezes nós temos nossa rede interna sem endereços hostnames configurados para todos os IPs e isto torna o processo de conexão lento pois o MTA fica tentando resolver estes nomes. É possível então fazer com que o Sceo não resolva mais os nomes reversos e então usar a ação Resolve! no arquivo apontado por Connection_rules e ter controle sobre quais redes ou ips o Sceo deve ou não achar seu nome reverso.
Os parametros desta opção podem ser 0 ou 1, onde:

0
= Desativado. O Sceo não vai achar o hostname do IP conectado. E se você quiser, deve usar a ação Resolve! nos arquivos de regras para isto.
1 = Ligado. O Sceo vai resolver todos os nomes de todas as conexões recebidos (Padrão e mantém a compatibilidade com as versões anteriores)

Exemplo:
Resolve_all 1
Resolve_all 0
 

### Sid
Indica o ID do servidor nos arquivos de fila.
É usado quando o servidor vai utilizar um diretório de fila compartilhado com outros MTAs Sceo.

Exemplo:
Sid "sv1"

 

### User
Indica qual usuário do sistema o servidor deve utilizar para trabalhar
Esta opção é usada apenas quando o MTA Sceo esta funcionando com um módulo externo,
apontado pela opção 'Module'

Exemplo:
User "sceo"

 

### Group
Indica qual grupo do sistema o servidor deve utilizar para trabalhar
Esta opção é usada apenas quando o MTA Sceo esta funcionando com um módulo externo,
apontado pela opção 'Module'

Exemplo:
Group "sceo"

 

### Pid_file
Aponta para o arquivo de pid do sistema.
Este arquivo é usado para saber se o servidor já esta em execução e o número de seu PID
para para-lo.

Exemplo:
Pid_file "/var/run/sceo.pid"

 

### Timezone
Indica o fuso horário do servidor.
Esta informação é usada para gerar o cabeçalho do email

Exemplo:
Timezone "-0300"

 

### Queue_path
Aponta para o caminho onde o servidor smtp irá guardar os arquivos de fila a serem processados.
Cada email é dividido em dois arquivos: os iniciados com 'c'( de conteúdo) e os iniciados
com 'l' (lista de destinatários).
Todo email que chega ao servidor será armazenado temporáriamente neste diretório.

Exemplo:
Queue_path "/var/spool/sceo"

 

### Queue_time
Indica ao servidor o intervalo de tempo ( em minutos ) para se processar um email que esta na fila. Se a entrega de um email falhar por algum motivo temporário ( Ex: servidor de destino não responde ) o servidor sceo tentará entregar o email após passar os minutos indicados por esta opção

Exemplo:
Queue_time 30


### Queue_sleep (Sceo 0.31 ou superior)
Especifica em segundos o tempo em que o processo que roda a fila de emails dorme.
Por padrao, o processo da fila roda a cada 60 segundos (Não aconselho um valor maior), mas quando se usa um controle via fila Qlimit, as vezes é necessário abaixar este valor e esta opção foi criada para isto.

Exemplo:
Queue_sleep 20


### Max_qprocs (Sceo 0.31 ou superior)
Define o número máximo de processos das duas filas: Normal e Qlimit. Por padrão fica desativado.
Você pode usar esta opção para impedir o Sceo de consumir todo o canal de dados com inúmeros processos tentando entregar emails ao mesmo tempo. Um recurso avançado para esta finalidade seria usar a segunda fila, qlimit.

Exemplo:
Max_qprocs 50


### Qlimit_max_procs (Sceo 0.31 ou superior)
Define o número máximo de processos apenas da fila qlimit. Por padrao fica desativada.
A Qlimit é uma segunda fila processada separadamente da fila principal. Você pode limita-la à um número baixo de processos simultâneos com esta opção e deixar a fila principal livre. Com a ação 'Qlimit!' dos arquivos de regras, você pode jogar emails com menos prioridade nesta fila.

Exemplo:
Qlimit_max_procs 30


### Qlimit_time (Sceo 0.31 ou superior)
Indica ao servidor o intervalo de tempo (em minutos) em que um arquivo de fila da qlimit deve ser processado novamente. É igual a opção Queue_time, só que age em cima da fila qlimit. Quando vamos usar a qlimit, aconselha-se a usar esta opção com o valor entre 5 e 10 minutos.

Exemplo:
Qlimit_time 10



### Temp_path ( Sceo 0.29 ou superior )
Aponta para o diretorio onde o Sceo deve criar os arquivos de controle dos modulos externos. O padrão é /tmp

Exemplo:
Temp_path "/var/spool/sceo/tmp"

 

### Lavg_queue
Indica ao servidor sceo um valor de Load Average para começar a enfileirar os emails.
Esta opção é usada para que o servidor pare de entregar emails até que sistema se recupere da sobrecarga

Exemplo:
Lavg_queue 12

 

### Lavg_negative
Indica ao servidor sceo um valor de Load Average para começar a negar o recebimento de novos emails.

Exemplo:
Lavg_negative 15

 

### Connect_timeout
Esta opção indica o máximo em segundos que o servidor deve esperar para tentar estabelecer uma conexão TCP com um MTA para entregar um email.

Exemplo:
Connect_timeout 60

 

### Timeout
Indica o máximo em segundos que uma conexão pode ficar inativa

Exemplo:
Timeout 120

### Tarpit_limit ( Sceo 0.29 ou superior )
Liga e define o valor de tarpit.
Esta opção permite ao servidor limitar o número de destinatários a um mesmo IP por conexão. Quando definida como 0 (Zero - Padrão), o tarpit fica desativado.

Exemplo:
Tarpit_limit 10


### Tarpit_sleep
( Sceo 0.29 ou superior )
Define o tempo mínimo em segundos entre uma conexão e outra, para entrega dos próximos emails que ficaram pendentes devido a limitação do Tarpit_limit.
O Padrão desta opção é definido como 60 segundos.

Exemplo:
Tarpit_sleep 60


### Limit_buf
Ativa e especifica o tamanho do buffer de análise para detecção de possíveis ataques de conexões em curtos períodos de tempo.
Esta função do servidor analisa o número de vezes que um IP realizou conexões e o tempo entre uma conexão e outra. Se o limite especificado pelas opções Limit_cnx e Limit_time é atingido, a atual conexão é recusada e o arquivo de regras apontado por Limit_rules é executado

Exemplo:
Limit_buf 100
Limit_buf 0

Obs: O valor 0 (Zero) para Limit_buf desativa este recurso do servidor.


### Limit_cnx
Especifica o número máximo de conexões que podem atingir o limite de tempo especificado
em Limit_time entre uma conexão e outra.

Exemplo:
Limit_cnx 30


### Limit_time
Especifica o intervalo mínimo de tempo entre uma conexão e outra de um mesmo endereço IP

Exemplo:
Limit_time 1


### Limit_rules
Aponta o arquivo de regras a executar sempre que um limite for atingido por um IP
Este arquivo de regras é executado pelo servidor ainda com permissão de root, ou seja, é possível executar programas do sistema operacional para realizar qualquer tarefa e tomar
alguma providencia em relação ao IP em questão. Como exemplo: incluir uma regra no firewall através do iptables com a ação 'Exec!'

Exemplo:
Limit_rules "/usr/local/sceo/regras_limites"


### Module
Aponta um módulo externo para se usar como base de domínios e conta de emails locais.
Ao habilitar esta opção, o modo de funcionamento do servidor muda completamente para trabalhar baseado em consultas via PIPE que serão feitas ao programa apontado pela opção.
Se o modulo apontado for vazio -> "", então o servidor entende que deve utilizar os usuários
do sistema operacional e seus arquivos de emails, domínios, quotas apontados pelas opções Local_mail_list, Local_domains_list e Mailbox_size_list.
No modo normal (utilizando os usuários do sitema operacional) o servidor sceo encara os usuários do sistema como caixas postais. Já no modo modulo, os usuários passam a ser emails cadastrados em um banco de dados que é consultado atravéz do modulo apontado por esta opção

Exemplos:
Module ""
Acima esta acionado o Modo normal de trabalho (usuários do sistema operacional)

Module "/usr/local/sceo/modules/sceo_mysql /usr/local/sceo/modules/sceo_mysql.conf"

Acima foi apontado um modulo para se trabalhar com um banco de dados em Mysql, então os usuários passam a ser emails cadastrados do banco de dados.


### Nmodules

Indica o número de modulos a carregar na memória para atender às consultas do servidor smtp.
Quando maior a demanda do servidor smtp, mais modulos devem ser criados para  antender a mesma.
Cada vez que não há modulos livres para atender uma requisição, o servidor smtp cria
um modulo temporário para fazer a consulta e faz um log no arquivo apontado por Warning_log.
Se houver muitas mensagens desse tipo no Log, então será preciso aumentar o número de modulos a ser carregado.
Obs: Quando um arquivo de fila é processado manualmente ( sceo -p ) será
criado um modulo temporário para atender a este processo e uma linha de aviso será jogada dentro do log apontado por Warning_log, esta linha não deve ser considerada como uma sobre-carga de modulos.

Exemplo:
Nmodules 5



### Tls_module ( Sceo 0.31 ou superior )
Aponta um módulo externo para o Sceo usar conexão TLS.
Exemplo:
Tls_module "/usr/local/sceo/mod/sceo_tls.so"



### Tls_enable ( Sceo 0.31 ou superior )
Ativa (1) ou desativa (0) o modulo TLS. É útil para ser usado dentro do regras_conexao, por meio da ação Def!, para ativar/desativar o modulo para determinadas conexões.
Exemplo:
Tls_enable 1


### Tls_delivery ( Sceo 0.31 ou superior )
Ativa (1) ou desativa (0) a entrega de emails para outros MTAs usando conexão TLS.
Exemplo:
Tls_delivery 1


### Tls_privkey
( Sceo 0.31 ou superior )
Aponta para o arquivo que contém a chave privada do servidor.
Exemplo:
Tls_privkey "/usr/local/sceo/mod/certs/private.key"


### Tls_pubkey
( Sceo 0.31 ou superior )
Aponta para o arquivo que contém a chave publica do servidor.
Exemplo:
Tls_pubkey "/usr/local/sceo/mod/certs/public.crt"


### Tls_cafile
( Sceo 0.31 ou superior )
Aponta para o arquivo que contém a chave da entidade certificadora.
Exemplo:
Tls_cafile "/usr/local/sceo/mod/certs/cafile.crt"


### Local_domains_list
Aponta para um arquivo texto contendo uma lista de domínios locais
Os domínios são separados por linhas

Exemplo:
Local_domains_list "/usr/local/sceo/dominios_locais"


### Local_mail_list

Aponta para um arquivo texto contendo uma lista dos emails locais e seus respectivos usuários. Cada linha deste arquivo deve conter o seguinte formato:

Veja mais detalhes na documentação geral do sistema

Exemplo:
Local_mail_list "/usr/local/sceo/emails_locais"


### Blocked_user
Com esta opção é possível bloquear a autenticação tentativa de autenticação de certos usuários do sistema.
Não use esta opção para bloquear clientes que não pagaram a mensalidade, e sim para bloquear usuários como 'root', 'adm', etc...
Esta opção serve apenas para o cliente remoto não ficar tentando descobrir senhas de usuários de peso do sistema operacional.
Cada usuário especificado deve ser separado por um espaço.

Exemplo:
Blocked_users "root adm operador"

 

### System_users
Esta opção liga ou desliga o modo de trabalho com base nos usuários do sistema mais
os domínios locais.
Quando desligada, os emails locais são apenas aqueles que se encontram dentro do arquivo apontado pela opção Local_mail_list.
Quando ligada, todos os usuários do sistema podem ser usados com todos os domínios locais sem depender da lista de emails apontada por Local_mail_list.
O valor 0 significa DESLIGADA e 1 LIGADA.
Se você precisa separar os emails por domínios, deixe esta opção desligada e use o arquivo de lista de emails locais para espeficicar o email de cada domínio
e seu respectivo usuário
Obs: Esta opção não é usada quando o Sceo esta sendo usado com Modulo externo

Exemplos:
System_users 0
System_users 1

### Postmaster
Especifica o usuário local que receberá os emails contendo eventuais avisos do
servidor Sceo.

Exemplo:
Postmaster "root"

 

### Max_attempts
Especifica o número máximo de tentativas para processar um arquivo de fila.
As tentativas ocorrem a cada 'Queue_time' minutos.

Exemplo:
Max_attempts 48

Digamos que Queue_time esteja setado para 30 minutos, então a cada meia hora o servidor tentara entregar um email a seus destinatários ou reportar um erro ao remetente até completar um total de 48 vezes.

 

### Max_error_report
Especifica o número mínimo de vezes que o servidor deve reservar para tentar reportar um erro ao remetente

Exemplo:
Max_error_report 3

 

### Dlocal
Aponta o programa responsável pela entrega de emails locais
Esta opção aceita as variáveis:
%l = Usuário local do sistema que deve receber o email
%r = Email do destinatário
%f = Email do remetente
%o = Domínio do endereço do remetente
%c = Domínio do endereço do destinatário
%m = Nome do usuário que vem antes do @ no endereço do remetente
%d = Indica o ID da mensagem
%p = Nome do usuário que vem antes do @ no endereço do destinatário
%C ( Sceo 0.30 ou superior ) = Retorna o diretorio HOME do destinatário

Exemplo:
Dlocal "/usr/bin/procmail -d %l <"

Note que existe o caractere '<' no final que é muito importante pois indica ao sceo que o email deve ser passado ao procmail via stdin


### Adlocal_allowed ( Sceo 0.30 ou superior )
Indicamos com esta opção quais são os MDAs permitidos para serem usados no campo de destino dos alias. Esta opção deve ser usada em ambientes em que é permito ao cliente  configurar por si só um redirecionamento alias.
Por padrão ela fica desativada

Exemplo:
Adlocal_allowed "/usr/bin/procmail /usr/sbin/maildrop /usr/local/sbin/mailman"

 

### Immed_delivery ( Alterada na versão 0.29 )
Liga ou desliga o envio imediato de um email após seu recebimento
Digamos que você queira olhar qual é o conteúdo dos arquivos de fila que estão
sendo criados para uma determinada condição criada no arquivo de regras. Para isto
basta você setar esta opção para 0 (Zero) para ter tempo de olhar o arquivo de fila criado.
Esta opção foi criada apenas por carater de testes e deve ficar sempre ligada
0 = Desativado. O Sceo nao entregará o email imediatamente apos recebe-lo
1 = Ativado. O Sceo vai entregar a mensagem assim que cliente remoto desconectar
2 ( Somento Sceo 0.29 ou superior ) = Ativado. O Sceo vai entregar a mensagem assim que for aceita. Para isto ele cria um processo filho para tratar o email.

Exemplo:
Immed_delivery 1
Immed_delivery 2

 

### Mailbox_path
Aponta o caminho onde se encontram as caixas postais
Esta opção serve apenas para o servidor testar o tamanho da caixa postal

Exemplo:
Mailbox_path "/var/spool/mail"

 

### Default_mailbox_size
Define o tamanho padrão (em bytes)das caixas postais
O Valor 0 (ZERO) indica 'Sem limite'
Antes de entregar o email em certa caixa postal, o Sceo verifica o tamanho da mesma, se for maior ou igual ao limite padrão, o email é recusado e o remetente receberá um aviso.
Para especificar limites diferentes para cada caixa postal, use o arquivo apontado pela opção Mailbox_size_list descrita mais abaixo.


Exemplo:
Default_mailbox_size 52428800

 

### Max_header_size
Define o tamanho maximo (em bytes) do cabeçalho que cada email pode atingir
Esta opção é usada para evitar loops entre MTAs.

Exemplo:
Max_header_size 102400

 

### Mailbox_size_list
Aponta para um arquivo que contém uma lista com a quota de cada caixa postal separada.
Se uma caixa postal não é especificada neste arquivo, então o limite padrão (Default_mailbox_size) é utilizado.
Obs: É ignorada quando o Sceo roda com Modulo externo pois o mesmo deve oferecer suporte a controle de quotas.

Exemplo:
Mailbox_size_list "/usr/local/sceo/limites"

 

### Max_mail_size
Especifica o tamanho máximo (em bytes) de cada email
Sempre que um email ultrapassa este limite, ele é recusado após a entrega

Exemplo:
Max_mail_size 10485760

 

### Cp_errors
Liga ou desliga a copia de arquivos de fila que deram erros e não poderam ser reportados a seus respectivos remetentes por algum problema. Os arquivos de fila são copiados para o caminho apontado por 'Cp_errors_path'
O valor 0 (Zero) desliga a copia e 1 liga a copia.
É extremamente interessante ativar esta opção para identificar eventuais erros de configuração

Exemplo:
Cp_errors 1

 

### Cp_errors_path
Aponta para o caminho onde os arquivos de fila com erros serão copiados caso a opção
Cp_errors esteja ativada ( 1 )

Exemplo:
Cp_errors_path "/var/spool/sceo/erros"

 

### Connection_rules
Aponta para o arquivo de regras que será processado sempre que uma conexão for estabelecida.

Exemplo:
Connection_rules "/usr/local/sceo/regras_conexao"

 

### From_rules
Aponta para o arquivo de regras que será processado sempre que o remetente for especificado na atual conexão pelo comando smtp 'mail from'

Exemplo:
From_rules "/usr/local/sceo/regras_remetente"

 

### Rcpt_rules
Aponta para o arquivo de regras que será processado sempre que um destinatário for especificado na atual conexão pelo comando smtp 'rcpt to'

Exemplo:
Rcpt_rules "/usr/local/sceo/regras_destinatario"

 

### Data_rules
Aponta para o arquivo de regras que será processado logo após o recebimento do conteúdo do email.
Pode ser usado para fazer análises no corpo do email, rodar programas anti-spam e aceitar ou não a mensagem.

Exemplo:
Data_rules "/usr/local/sceo/regras_data"


### Qend_attempt_rules ( Sceo 0.31 ou superior )
Aponta para o arquivo de regras que será processado logo após o Sceo terminar de processar um arquivo de fila.
Pode ser usado para acionar programas que analisam o arquivo de fila que contém a lista  de emails (/var/spool/sceo/lxxxxxxxxxx_xxxxxx) para saber qual foi ou não entregue.
Obs: Este arquivo de regras não é rodado apenas quando o Sceo finaliza um arquivo de fila e sim sempre que ele termina de processar um arquivo de fila.

Exemplo:
Qend_attempt_rules "/usr/local/sceo/regras_qend"



 

### Report_file
Aponta para um arquivo texto base contendo a mensagem de erro que será reportada a um remetente para relatar um erro de entrega.
Se um email não pode ser entregue, o servidor utiliza o conteúdo deste arquivo texto para construir a mensagem de erro que é reportada ao remetente.

Exemplo:
Report_file "/usr/local/sceo/retorno.txt"

 

### Report_from
Especifica o endereço de remente do servidor Sceo para reportar as mensagens de erros.
O correto é sempre usar 'MAILER-DAEMON@'

Exemplo:
Report_from ""

 

### Subject_error_msg
Especifica o assunto das mensagens de erros gerada pelo servidor Sceo

Exemplo:
Subject_error_msg "[Erro na entrega do email][Mail delivery error]"

 

### Auth_relay
Liga ou desliga o reenvio de emails de clientes que se autenticaram
O Valor 0 (Zero) desliga o reenvio e 1 liga.
Se esta opção for ativada ( 1 ) sempre que o cliente conectado autenticar-se ele automaticamente será liberado para relay ( reenvio de emails para fora do servidor local )

Exemplos:
Auth_relay 0
Auth_relay 1

 

### Hshow_user
Liga ou desliga a exibição no cabeçalho do email de qual foi o usuário autenticado
O usuário é especifiado abaixo do primeiro 'Receibed' em (authenticated=)
O Valor 0 (Zero) desliga e 1 liga a exibição.

Exemplos:
Hshow_user 0
Hshow_user 1

 

### Incorrect_pass_delay
Especifica um tempo de espera ( sem segundos ) caso o cliente conectado erre o usuário ou senha. Esta opção é importante para invalidar tentatvias de scans de usuários e senhas.

Exemplo:
Incorrect_pass_delay 3

 

### Auth_tolerance
Esta é outra opção para combater o scan de senhas.
Ela deifine o máximo de erros de autenticação que um cliente pode cometer, se o número de erros atingir o valor apontado por esta opção, o cliente é desconectado na hora.

Exemplo:
Auth_tolerance 3

 

### From_level_check
Indica ao servidor Sceo qual é o nível de checagem que deve ser feito em relação aos endereços de remetentes especificados.
Níveis:
0 = Sem checagens. o remetente pode ser qualquer coisa que possua um '@' no meio
1 = Pelo menos o domínio do email deve existir (consulta via DNS)
2 = O domínio deve existir e possuir um MX responsável (consulta via DNS)

Exemplo:
From_level_check 1

 

### Rcpt_level_check
Indica ao servidor Sceo qual é o nível de checagem que deve ser feito em relação aos endereços de destinatários especificados.
Níveis:
0 = Sem checagens. o remetente pode ser qualquer coisa que possua um '@' no meio.
Se o email for local, ele deve existir
1 = Pelo menos o domínio do email deve existir (consulta via DNS)

Exemplo:
Rcpt_level_check 0

 

### No_mailbox_delay
Indica o número de segundos a esperar quando é especificado um destinatário que não existe.
Se um servidor remoto esta entregando um email em nosso servidor e ele especifica um destinatário que não existe na tabela de emails locais o servidor Sceo aguarda o número de segundos espeficiado por esta opção antes de reportar que o email local não existe.
Esta opção serve para invalidar scans de destinatários por parte de spammers

Exemplo:
No_mailbox_delay 2

 

### Central_log
Aponta para um arquivo onde será armazenado todo log de comunicação do servidor.
Este log fica bem grande com o passar do tempo e deve ser rotacionado.
Ele pode ser renomeado a qualquer momento sem precisar parar o servidor Sceo, automaticamente será criado outro no lugar.
O log gerado por esta opção é muito importante para idenficar eventuais problemas de entrega de emails.

Exemplo:
Central_log "/var/log/sceo.log"

 

### Sumary_log
Aponta para um arquivo onde será armazenado um log resumido dos emails entregues para e pelo servidor Sceo.
Este log é muito útil para gerar graficos de estatísticas.
Ele pode ser renomeado a qualquer momento sem precisar parar o servidor Sceo, automaticamente será criado outro no lugar.

Exemplo:
Sumary_log "/var/log/sceo_resumo.log"

 

### Warning_log
Aponta para um arquivo onde será armazenado um log sobre enventuais erros e avisos do funcionamento do servidor Sceo.
Ele pode ser renomeado a qualquer momento sem precisar parar o servidor Sceo, automaticamente será criado outro no lugar.

Exemplo:
Warning_log "/var/log/sceo_erros.log"

 

### Refused_log ( Sceo 0.30 ou superior )
Aponta para um arquivo onde será armazenado um log contendo mensagens recusadas.
Este log é muito útil para encontrarmos rapidamente o motivo da recusa de determinado  email. Por padrão ela fica desativada.

Exemplo:
Refused_log "/var/log/sceo_refused.log"


### Central_log_lvl ( Sceo 0.31 ou superior )
Indica o nível de detalhes do arquivo de log central.
No momento existem apenas dois niveis: 0 e 1
0 -> Nivel normal com maior número de detalhes
1 -> Nivel resumido

Exemplo:
Central_log_lvl 0


Mensagens de Protocolo

Todas as opções abaixo são usadas para especificar a mensagem que será reportada ao servidor/cliente remoto.
Elas não precisam conter o codigo SMTP correspondente a seu significado pois o servidor Sceo se encarrega disto.

Msg_mail_toobig
Mensagem reportada quando o email entregue ultrapassa o valor definido por 'Max_mail_size'
Exemplo:
Msg_mail_toobig "Email muito grande"


Msg_lavg
Mensagem reportada ao cliente/servidor remoto que acabou de estabelecer uma conexão, porém, o Load Average do servidor esta alto demais no momento e ele deve tentar  novamente mais tarde.
Exemplo:
Msg_lavg "Load average, tente mais tarde"


Msg_cannot_resolve
Mensagem reportada ao cliente/servidor remoto sempre que espeficiar um email cujo domínio não existe.
Exemplo:
Msg_cannot_resolve "Dominio inexistente ou sem MX responsavel"


Msg_cannot_connect
Mensagem reportada ao remetente quando o servidor Sceo não conseguiu conectar no servidor MX responsável pelo email de destinatário para entregar o email
Exemplo:
Msg_cannot_connect "Nao foi possivel conectar no servidor responsavel"


Msg_invalid_cmd
Mensagem reportada ao cliente/servidor remoto quando passou um comando SMTP invalido ou não suportado pelo servidor Sceo.
Exemplo:
Msg_invalid_cmd "Comando invalido"


Msg_invalid_param
Mensagem reportada ao cliente/servidor remoto quando passou um parâmetro invalido em algum comando SMTP.
Exemplo:
Msg_invalid_param "Parametro invalido"


Msg_sequence_error
Mensagem reportada ao cliente/servidor remoto sempre que enviar um comando SMTP fora de sua sequencia correta
Exemplo:
Msg_sequence_error "Sequencia invalida de comandos"


Msg_no_mailbox
Mensagem reportada ao cliente/servidor remoto quando um email local não existe
Exemplo:
Msg_no_mailbox "Esse email nao existe. (no such user)"


Msg_toomany_rcpts

Mensagem reportada ao cliente/servidor remoto quando o número de destinatários passados ultrapassa o limite de 100.
Exemlo:
Msg_toomany_rcpts "Muitos destinatarios"


Msg_relay_denied
Mensagem reportada ao cliente remoto negado relay (reenvio)
Exemplo:
Msg_relay_denied "Reenvio negado. (Relay denied)"


Msg_transaction_falied
Mensagem reportada ao cliente/servidor remoto reportando algum erro na transferencia da mensagem.
Exemplo:
Msg_transaction_falied "Erro na transacao da mensagem"


Msg_ok
Mensagem reportada ao cliente/servidor remoto dizendo que o comando passado foi aceito sem problemas
Exemplo:
Msg_ok "Ok"


Msg_send_body
Mensagem reportada ao cliente/servidor remoto apos o comando 'DATA' dizendo a ele que pode enviar o conteúdo do email
Exemplo:
Msg_send_body "Envie o emai e termine com ."


Msg_allowed_sender
Mensagem reportada ao cliente/servidor remoto dizendo que o remetente passado foi aceito.
Exemplo:
Msg_allowed_sender "Remetente liberado"


Msg_allowed_rcpt
Mensagem reportada ao cliente/servidor remoto dizendo que o destinatário passado foi aceito.
Exemplo:
Msg_allowed_rcpt "Destinatario liberado"


Msg_mail_accepted
Mensagem reportada ao cliente/servidor remoto dizendo que o email foi aceito por completo
Exemplo:
Msg_mail_accepted "Email aceito"


Msg_goodbye
Mensagem reportada ao cliente/servidor remoto dizendo adeus.
Exemplo:
Msg_goodbye "Ate logo"


Msg_auth_ok
Mensagem reportada ao cliente dizendo que a autenticação foi bem sucedida
Exemplo:
Msg_auth_ok "Autenticacao bem sucedida"


Msg_auth_falied
Mensagem reportada ao cliente dizendo que a autenticação falhou
Exemplo:
Msg_auth_falied "Falha na autenticacao"


Msg_auth_required
Mensagem reportada ao cliente dizendo que ele deve se autenticar para dar relay (reenvio de emails para fora do servidor local)
Exemplo:
Msg_auth_required "Autenticao requerida"


Msg_nodisk_space
Mensagem reportada ao cliente/servidor remoto dizendo que não há espaço em disco ou a quota foi atingida
Exemplo:
Msg_nodisk_space "Sem espaco local. Tente mais tarde"


Msg_perm_deny
Mensagem reportada ao cliente/servidor remoto dizendo que houve um erro interno de permissão
Exemplo:
Msg_perm_deny "Permissao negada"


Msg_invalid_domain
Mensagem reportada ao cliente/servidor dizendo que o domínio do remetente ou destinatário é inválido
Exemplo:
Msg_invalid_domain "Dominio invalido"


Msg_header_toobig
Mensagem reportada ao cliente/servidor remoto dizendo que cabeçalho da mensagem é muito grande e pode estar havendo um loop entre servidores
Exemplo:
Msg_header_toobig "Cabecalho muito grande ou loop detectado"


Msg_internal_error
Mensagem reportada ao cliente/servidor remoto dizendo que houve uma falha interna indeterminada
Exemplo:
Msg_internal_error "Falha interna"


Msg_mailbox_unavaibble
Mensagem reportada ao cliente/servidor remoto dizendo que o email espeficiado não esta disponível no momento e ele deve tentar mais tarde
Exemplo:
Msg_mailbox_unavaibble "Email indisponivel no momento. Tente mais tarde"


Msg_full_mailbox
Mensagem reportada ao cliente/servidor remoto que a caixa postal especificada esta cheia.
Exemplo:
Msg_full_mailbox "Caixa postal cheia"


Msg_refused

Mensagem reportada ao cliente/servidor remoto que o pedido foi recusado
Exemplo:
Msg_refused "Recusado (Refused)"






Regras

São nos arquivos de regras que você realmente controla o seu servidor SMTP. Criar  blacklists, acionar programas externos, relays, bloqueios, forçar redirecionamentos, forçar MXzes, etc, etc, etc. Tudo é feito aqui, nos arquivos de regras.
Se você quer dominar o seu servidor MTA, aprenda a usa-las.

Não é preciso reiniciar o Sceo quando se altera um arquivo de regra.


 

Introdução


Na versão 0.28  os arquivos de regras são processados sempre que é estabelecida uma conexão (Connection_rules), quando é especificado o remetente (From_rules), quando é especificado um destinatário (Rcpt_rules)ou quando o conteúdo do email é entregue (Data_rules)

Vamos dar um exemplo da entrega de um email para você entender EXATAMENTE como funciona o protocolo SMTP e o processamento de regras do MTA Sceo.

É IMPORTANTÍSSIMO que você entenda como funciona este protocolo para ter um completo controle sobre seu servidor de emails.


Sempre que um MTA remoto esta entregando um email ao nosso MTA, dizemos que eles estão conversando através do protocolo SMTP. Eles falam 'SMTPpeis', que por sinal é extremamente simples e limitado.
Digamos que um email de fulano@dominioexterno.com.br foi para  beltrano@meudominio.com.br, onde este último se encontra em nosso servidor de emails. No exemplo de conversa abaixo, 'R' significa o servidor Remoto e 'L' o nosso servidor Local:

Servidor remoto conecta-se em nosso servidor Local, na porta 25 (TCP) e o nosso servidor manda o seguinte e inicia a conversa:

L:    220 sv1.meudominio.com.br SMTP SCEO v0.28b
R:    ehlo mta1.dominioexterno.com.br
L:    250-sv1.meudominio.com.br
       250-SIZE 10485760
       250-AUTH PLAIN LOGIN
       250 8BITMIME
< caso seja um cliente interno, seria aqui o processo de autenticação>
R:    mail from: <fulano@dominioexterno.com.br>
L:    250 Remetente liberado
R:    rcpt to: <beltrano@meudominio.com.br>
L:    250 Destinatario liberado
R:    data
L:    354 Envie o email e termine com .
R:    From: "Fulano"
fulano@dominioexterno.com.br
        To: "Beltrano" beltrano@meudominio.com.br
        Subject: Ola amigo

        Ola amigo.

         Faz tempo que nao conversamos.
         Bla bla bla bla bla bla bla bla bla
         Bla bla bla bla bla bla bla bla bla
         .
L:     250 Email aceito (ID: 883622518_129160)
R:     quit
L:     221 Ate logo

Pronto ! O email esta entregue. Vamos agora comentar as partes do exemplo:

» Antes de mostrar a mensagem de boas vindas, o Sceo executa o primeiro arquivo de regras, apontado por Connection_rules e depois exibe a seguinte mensagem. ( Se você quiser, é claro)
L:    220 sv1.meudominio.com.br SMTP SCEO v0.28b
» Note que todas as respostas SMTP são precedidas de um número. É este número que vale para o servidor que entrega a mensagem saber se foi um Ok ou um Erro. O codigo 220 significa (Olá estou funcionando normalmente) Se fosse um codigo iniciado por 4 como o valor 421, significaria um (Olá estou com problemas agora, tente mais tarde).

R:
    ehlo mta1.dominioexterno.com.br
» Nada demais. O servidor remoto apenas disse um 'Olá', identificou-se e pediu uma lista do que o nosso servidor suporta. Nenhum arquivo de regra é processado neste ponto

L:    250-sv1.meudominio.com.br
       250-SIZE 10485760
       250-AUTH PLAIN LOGIN
       250 8BITMIME
» Nosso servidor responde então a lista de nossos serviços. O Codigo 250 significa (Ok. Tudo certo).

< caso seja um cliente interno, seria aqui o processo de autenticação > Não é processado qualquer arquivo de regra no processo de autenticação

R:    mail from: <fulano@dominioexterno.com.br>
» Aqui começa a ficar interessante. O servidor remoto especificou o endereço do remetente. Feito isso o Sceo vai executar o arquivo de regra apontado por From_rules (geralmente o regras_remetente) e lá você pode testar o que quiser e tomar alguma ação ou simplesmente não fazer nada.

L:    250 Remetente liberado
» Esta é a resposta de 'Ok liberado' caso você não tenha mandado o Sceo cortar a conexão ou recusar o remetente no arquivo de regras anterior.

R:    rcpt to: <beltrano@meudominio.com.br>
» Agora ele especificou o destinatário e o Sceo processa então o arquivo apontado por Rcpt_rules (geralmente o regras_destinatario). É neste arquivo onde nós colocamos a maior parte de regras de controle, pois agora sabemos quem é o destinatário. Podemos fazer muitas coisas neste ponto.

L:    250 Destinatario liberado
» Esta é a resposta de 'Ok liberado' caso você não tenha mandado o Sceo cortar a conexão ou recusar o destinatário no arquivo de regras anterior.

R:    data
» Esta é a etapa em que o servidor remoto diz que vai enviar o conteúdo do email ( Cabeçalho e Corpo). Nenhum arquivo de regra é processado neste ponto

L:    354 Envie o email e termine com .
» Nosso servidor reponde com o codigo 354 que significa que esta pronto para receber o email. A mensagem deve terminar com uma linha contendo apenas um ponto final

R:    From: "Fulano" 
fulano@dominioexterno.com.br
        To: "Beltrano" 
beltrano@meudominio.com.br
        Subject: Ola amigo

        Ola amigo.

         Faz tempo que nao conversamos.
         Bla bla bla bla bla bla bla bla bla
         Bla bla bla bla bla bla bla bla bla
         .
» A ultima linha contendo apenas o ponto final indica o fim do conteúdo do email. Veja que o cabeçalho do email foi passado nesta etapa também mas o que esta no cabeçalho  NÃO importa ao servidor MTA. Ele não vai obedecer o que esta lá. Pra ele é tudo a mesma coisa: "UMA MENSAGEM sem significado". Após receber o ponto final, o Sceo vai executar o arquivo de regras apontado por Data_rules (geralmente o regras_data). Neste arquivo nós podemos acionar programas externos como anti-spam, anti-virus, etc...

L:     250 Email aceito (ID: 883622518_129160)
» Caso você não tenha mandando o Sceo recusar o email no arquivo de regras anterior, ele vai retornar esta mensagem ao servidor remoto, dizendo que o email foi aceito e seu ID é
883622518_129160. A partir deste momento o servidor remoto entende que não tem mais responsabilidade sobre o email e pode exclui-lo se quiser.

R:     quit
» E então ele vai embora. Nenhum arquivo de regra é executado neste ponto

L:     221 Ate logo
» Resposta de nosso servidor, educado.




 


################## Arquivos de regras ##################
--------------------
Regras de conexões
--------------------
No arquivo de configuração sceo.conf a opção Connection_rules aponta para o arquivo de regras a ser executado sempre que um cliente remoto conecta para entregar um email.
Neste arquivo não é possível utilizar todas as condições e ações existentes no sistema de regras do servidor. Quando um cliente conecta o arquivo de regras é executado e as únicas informações que o servidor possui são: Número IP do cliente e nome reverso desse endereço IP.

-------------------------
Regras de remetente
-------------------------
No arquivo sceo.conf a opção From_rules aponta para o arquivo de regras a ser executado sempre que o cliente conectado especificar o endereço do remetente com o comando 'mail from'.
Neste arquivo é possível usar apenas opções que não estão associadas a informações de destinatários pois eles ainda não foram passados pelo cliente conectado


-------------------------
Regras de destinatários
-------------------------
No arquivo sceo.conf a opção Rcpt_rules aponta para o arquivo de regras a ser executado sempre que o cliente conectado especifica um destinatário com o comando 'rcpt to'.
Neste arquivo é possível usar quase todas as condições e ação existentes no sistema de regras do servidor pois aqui ele já possui muitas informações relacionadas a atual conexão.

-------------------------
Regras do Data
-------------------------
No arquivo sceo.conf a opção Data_rules aponta para o arquivo de regras a ser executado logo apos o recebimento completo do corpo do email.
Neste arquivo não é possível usar as variáveis, condições e ações que se referenciem a apenas 1 destinatário pois eles podem ser apenas um ou muitos.

 


Regras

As regras são construídas com condições e ações.
Todas as condições são seguidas do caractere '?' e todas as ações são seguidas de '!' no final.

Exemplo de condição: From?
Exemplo de ação: Relay!

Atualmente o servidor é sensível a maiúsculas e minúsculas, ou seja, elas devem ser digitadas da mesma forma que foram aqui. Caso contrário o servidor ignora  a linha de regra inteira.
Quando uma regra é valida e suas ações são executadas, o processamento das regras pára. Com excessão de algumas ações que não interrompem o processamento das regras por que são de execução imediata do servidor, São elas: Cp!, Exec!, Log!, Fchange!, Tchange!, Mark!, Hadd!, Sendmail!

Condições


### Auth?

Esta condição checa se o atual cliente conectado se autenticou ou não. A condição é valida se a resposta for sim
Exemplo:
Auth? Proc_rules! "/home/usuario_local"

No exemplo acima se a atual conexão é autenticada o servidor passa a processar o arquivo de regras /home/usuario_local


### Cmp_reverse?

Condição que compara a string apontada com reverso do ip do cliente conectado. A condição é valida se as strings forem iguais
Exemplo:
Cmp_reverse? "mx.spamlandia.com" Reply! "550 Spammer !" Close!

No exemplo acima se o endereço reverso for igual a mx.spamlandia.com o servidor retornara a mensagem "550 Spammer !" e fecha a conexão

### Cmp_str?

Condição que compara textos. Os textos são separados por ' : '
Esta opção pode ser usada para comprar os textos das variáveis internas.
Exemplo:
Cmp_str? "%u:roberval" Reply! "550 Voce nao esta autorizado a enviar emails, %u" Deny!

### Exec_resp?

Testa o valor retornado pelo programa executado pela ação 'Exec!'
Exemplo:
Exec! "sceo_greylist -i %i -f %f -t %r" Exec_resp? "1" Reply! "451 Greylist em operacao. Tente mais tarde" Deny!

Se o programa sceo_greylist responder o valor 1, então o servidor smtp enviará a mensagem '451 Greylist..' ao cliente conectado e negará internamente a entrega ao respectivo destinatario (Deny!)

### Find_filestr?

Condição para fazer uma busca de um texto dentro de um arquivo qualquer. No parâmetro desta condição nos devemos colocar dois campos separados por ':', o primeiro é o arquivo onde fazer a busca e o segundo é o texto a procurar. Esta função só é útil utilizando as variáveis do sistema que são descritas no final  deste documento.
Exemplo:
Find_filestr? "/etc/blacklist:%f" Reply! "550 Você esta na blacklist. Caia fora !" Close!

No exemplo acima se o remetente (%f) estiver dentro do arquivo /etc/blacklist, o servidor responderá o que estiver em Reply! e fechará a conexão

### Find_in_from?

Esta condição procura por um texto no campo do remetente
Exemplo:
Find_in_from? "@minhacasa.com.br" Relay!

No exemplo acima se o texto "@minhacasa.com.br" estiver contido no endereço de remetente, o servidor liberará reenvio (Relay!) para aquela conexão

### Find_in_reverse?

Esta condição procura por um texto dentro do endereço reverso do cliente conectado
Exemplo:
Find_in_reverse? ".dsl." !Auth? Reply! "550 Nao aceitamos emails de speedy" Close!

No exemplo acima se a conexão vier de um speedy e não for autenticada o servidor vai recusar e fechar a conexão. Note que a condição Auth? é precedida do operador '!' que
inverte o resultado de checagem. Este operador é aceito antes de qualquer condição

### Find_in_to?

Condição que procura um texto dentro do campo destinatário
Exemplo:
Find_in_to? "root@" Reply! "550 CAI FORA !!" Close!

No exemplo acima se for encontrado "root@" no campo de  destinatário, a conexão é fechada e a mensagem de Reply! é retornada ao cliente

### Find_strfile?

Esta condição procura em uma string por textos contidos dentro de um arquivo. No parâmetro desta condição nós devemos colocar dois campos separados por ' : ', o
primeiro é a string onde se vai fazer a busca e o segundo é o caminho do arquivo que contem o texto a ser procurado separado por linha.
Exemplo:
Find_strfile? "%e:/etc/blacklist" Reply! "550 Classificado como spam" Close!

Se o endereço reverso (%e) do cliente contiver algum texto  que esta dentro do arquivo /etc/blacklist, a conexão será  finalizada. O arquivo deve conter uma lista de todos os
textos a procurar separados por linha.

### Find_str?

Esta condição procura um texto dentro do primeiro campo passado.
Ela possui dois campos separados por ':', o primeiro é o texto onde a procura será feita e o segundo é o texto a procurar
Exemplo:
Find_str? "%e:adsl" Reply! "550 Nao aceitamos emails diretos de ADSL" Close!

### From?

Testa pelo remetente (mail from)
Exemplo:
From? "meuemail@meudominio.com.br" Find_in_to? "@gmail.com" Relay!

Se for o email apontado pela 'From?' com destino a algum email do gmail.com e reenvio será liberado

### Helo?

Testa pelo campo helo do protocolo smtp especificado pelo cliente durante a conexão
Exemplo:
Helo? "eu.sou.voce" Reply! "550 Nao eh nao. voce eh um spammer" Close!

Se o cliente especifica o seu endereço de IP  no campo helo ou algo parecido, é um spammer com certeza. O único problema desta regra é se o cliente conectado for
o próprio servidor (em caso de webmail). Neste caso é fácil resolver.
Digamos que o ip de nosso servidor seja: 200.200.200.254
Exemplo:
!Ip? "200.200.200.254" Helo? "200.200.200.254" Reply! "550 Nao eh nao. voce eh um spammer" Close!

Se o cliente conectado não for o ip 200.200.200.254 e enviar um helo '200.200.200.254' a conexão é fechada

### Internal_from?

Testa se o remetente especificado é interno ou não.
Esta condição é valida se a resposta for sim. Ela pode ser invertida usando o operador ! antes dela
Exemplo:
Internal_from? Relay!

Acima se o remetente for "interno" o reenvio é liberado
!Internal_from? !Internal_rcpt? Reply! "550 Relay negado. Remetente invalido" Close!

Acima se o remetente não estiver na lista de emails locais tentando enviar um email para um destinatário também de fora o reenvio é negado

### Internal_rcpt?

Testa se o destinatário (rcpt) é interno ou não.
Esta condição é valida se a resposta for sim e também pode ser invertida usando o operador !
Exemplo:
Internal_rcpt? Stop!

No exemplo acima se o destinatário for interno o servidor vai parar(Stop!) a execução das REGRAS imediatamente e aceitar o email

### Ip?

Testa pelo endereço ip do cliente
Exemplo:
Ip? "192.168.0." Relay!
Ip? "68.67.66." Proc_rules! "/etc/ips_suspeitos"
!Ip? "10.10.10.5" Relay!


### Itest?

Realiza testes com valores numericos
É usado para testar os valores de variáveis e até resultados de programas executados
Esta condição aceita 3 operações de comparação:
> (maior que)
< (menor que)
= (igual a)

Exemplo:
Exec! "proc_anti_spam /var/spool/sceo/c%d" Itest? "%t>5" Reply! "550 Voce foi considerado Spammer" Deny!

NO exemplo acima utiliza variáveis que são aceitas apenas no Data_rules

### Rbl_resp? ( Sceo 0.29 ou superior )
Testa a resposta da ultima consulta RBL feita pela ação Rbl_test!
Para esta condição ser verdadeira, o número de RBLs onde o IP foi encontrado precisa ser igual ao valor passado como parametro.

Exemplo:
Rbl_test! "bl.spamlista1.org rbl.spamlista2.net" Rbl_rest? "2" Reply! "550 Voce esta em duas Blacklists" Deny!
Ou
Rbl_test! "bl.spamlista1.org rbl.spamlista2.net"
!Rbl_resp? "0" Reply! "550 Blacklist: %T" Deny!


As ultimas regras ficam em linhas separadas. Note a ' ! ' na frente do Rbl_resp que inverte o resultado da resposta. No caso, a condição será verdadeira se o Rbl_test! retornou um valor DIFERENTE de 0 ( Zero ). Veja que usamos também como resposta a variavel %T para o remetente saber em qual Blacklist ele esta listado. A variavel %T e %R só podem ser usadas em uma linha diferente e abaixo da linha onde você executou um Rbl_test!. Por isto o exemplo acima dividiu todo o esquema em duas linhas.
Obs: Você pode por exemplo realizar o teste Rbl_test! no Connection_rules e testar apenas com a Rbl_resp?  no arquivo apontado por Rcpt_rules. Não tem problema pois o Sceo armazena o resultado da consulta Rbl até o final da conexão ou o cliente remoto executar um 'rset' via SMTP.


### Rev_fail?

Realiza um teste completo de reverso no IP conectado
O processo é:
- Resolver o hostname do IP.
- Resolver o IP do hostname.
- Comparar o IP resolvido com o IP conectado.
Esta função é valida se o IP resolvido é diferente do IP conectado, ou seja, erro no teste

Exemplo:
Rev_fail? Reply! "550 Voce nao parece ter um hostname valido" Deny!

### Tmark?

Testa por uma "marca" feita na atual conexão por Mark!
Exemplo:
Tmark? "Copiar" Exec! "cp /var/spool/sceo/c%d /home/emails_salvos"

 

### To?

Checa pelo campo destinatário (rcpt to)
Exemplo:
To? "meuemail@meudominio.com" Stop!

Se for enviado um email para meuemail@meudominio.com o servidor vai parar de processar as regras

 

### Spf_resp?

Testa o valor da resposta SPF (Spf_test!)
Exemplo:
Spf_resp? "4" Reply! "550 Fail, voce nao passou pelo teste SPF" Deny!

 

Ações


### Accept!

Força o servidor a aceitar o atual endereço de remetente ou destinatario mesmo que o domínio do mesmo não exista.
Exemplo:
Ip? "200.200.200.6" Accept!

### Resolve! ( Sceo 0.29 ou superior )

Esta ação acha o nome reverso do IP conectado ( o hostname do IP). Só tem efeito com o Resolve_all do sceo.conf desativado ( 0 ). Ela é usada para dar controle de quais redes ou IPs o Sceo deve ou não resolver seus nomes

Exemplo:
!Ip? "192.168.0.0/24" Resolve!



### Close!

Fecha a atual conexão
Exemplo:
Close!
Ip? "192.168.0.50" Close!


### Cp!

Esta função faz um copia (Bcc) do email para algum outro
Exemplo:
From? "zepreguicoso@meudominio.com.br" Cp! "meuemail@meudominio.com.br"

Todos os emails enviados pelo zepreguicoso@meudominio.com.br serão copiados para meuemail@meudominio.com.br

### Data_reply!

Forca uma resposta quando é passado o comando smtp 'data'
Esta ação faz com que o 'data' seja autoamticamente recusado
Exemplo:
Data_reply! "500 Voce nao esta autorizado a entregar este email"


Esta ação pode ser usada quando não se deseja recusar o email durante o 'rcpt to'

### Def!

Esta ação muda o valor de alguma opção pre-configurada no arquivo sceo.conf.
As alterações só funcionam em opções numéricas e só valem para a atual conexão, ou seja,
não é tomada como valor global para todas as próximas conexões.
Exemplo:
From? "lucas@meudominio.com.br" Def! "Hshow_user 1"
Ip? "10.10.10.0/24" Def! "Max_mail_size 10000000"
!Internal_rcpt? Def! "Immed_delivery 0"

 

### Exec!

Esta função executa um programa via Shell no linux
Exemplo:
From? "cliente@meucliente.com.br" To? "meuemail@meudominio.com.br" Exec! "/bin/envia_sms"

O programa /bin/envia_sms é executado se um email de cliente@meucliente.com.br chegar para meuemail@meudominio.com.br

 

### Fchange!

Muda o endereço de remetente (mail from)
Exemplo:
From? "fulano@teste.com.br" Fchange! "meuemail@meudominio.com.br"

Se o endereço de remetente for igual a fulano@teste.com.br, ele será trocado por meuemail@meudominio.com.br

### Hadd!

Adiciona uma linha ao cabeçalho do email que será recebido.
Pode ser usado para marcar testes de SPF, etc...
Obs: Voce pode adicionar mais de uma linha no cabeçalho apenas chamando esta ação novamente. Esta ação não funciona no Data_rules
Exemplo:
Spf_resp? "3" Hadd! "X-Spf: Softfail"

### Mark!

Cria uma "marca" na atual conexão para ser testada (Tmark?) mais a frente em um outro arquivo de regra.
A melhor forma de explicar o motivo desta ação é com exemplos:
Vamos supor que queremos fazer uma copia do arquivo de fila em um lugar separado caso algum destinatario esteja em uma lista externa:
No arquivo apontado por Rcpt_rules colocamos:
Find_filestr? "/etc/lista_negra.txt:%r" Mark! "Copiar"

Então no arquivo apontado por Data_rules colocamos:
Tmark? "Copiar" Exec! "cp /var/spool/sceo/c%d /home/emails_salvos"

### Add_hits! ( Sceo 0.30 ou superior )

Adiciona ou retira "pontos" para a atual conexão. Você pode usar esta opção para pontuar negativamente um host conectado caso não tenha reverso devidamente configurado, caso não passe no teste de SPF, etc.
Você pode adicionar os hits usando valores positivos como parâmetro, ou tirar usando valores negativos. Use a variável %H com o Itest? para testar o valor dos Hits.

Exemplo unico com várias regras:
Spf_resp? "3" Add_hits! "2"
Rev_fail? Add_hits! "1"
Rbl_test!
Add_hits! "%R"
Itest? "%H>2" Reply! "550 Voce cometeu muitos crimes. RECUSADO" Deny!

### Mx_dest!

Força a entrega do email (em caso de relay) para um servidor específico.
Exemplo:
Find_in_to? "@gmail.com" Mx_dest! "smtp.provedor2.com.br"

Todo email com destino ao gmail.com passará pelo smtp.provedor2.com.br

### Mx_auth!

Força uma autenticação na hora de entregar o atual email em seu destino (Isso apenas em caso de relay).
Esta função possui dois campos separados por ' : ' onde o primeiro é o usuário e o segundo a senha.
Exemplo:
Find_in_to? "@gmail.com" Mx_dest! "smtp.provedor2.com.br" Mx_auth! "meuusuario:minhasenha"

No exemplo acima, todos os emails com destino ao gmail serão reenviados para o smtp.provedor2.com.br e o servidor  se autenticará na hora de entregar a mensagem

### Proc_rules!

Executa um outro arquivo de regra parando o atual.
Ao terminar a execução do novo arquivo o servidor NÃO volta a executar o antigo arquivo. Caso não encontre o arquivo de regra apontado, o servidor continuará processando o atual arquivo de regras
Exemplo:
Find_in_from? "@spammers.com" Proc_rules! "/etc/regras_spammers"

Sempre que chegar um email de @spammers.com o  processamento de regras será transferido para o arquivo /etc/regras_spammers que pode conter qualquer outra condição ou ação contida neste documento. Se o arquivo de regras não existir, o servidor continuara na proxima linha do atual arquivo de regras

### Inc_rules! ( Sceo 0.30 ou superior )

Executa um outro arquivo de regras, porém, diferente a Proc_rules o servidor voltará a processar o arquivo de regras original ao terminar de processar o arquivo apontado.
Nenhum tipo de erro é gerado caso o arquivo de regras não seja encontrado
Exemplo:
Find_in_from? "@dominiodocliente.com" Inc_rules! "/home/%o/.regras_sceo"

Use esta ação para criar regras "pessoais" de usuários e domínios


### Deny!

Nega apenas a entrega para o atual destinatário
Exemplo:
Ip? "10.10.10.5" To? "meuemail@meudominio.com.br" Deny! Reply! "550 o usuario %r nao quer receber suas mensagens"

Todo email enviado pelo ip 10.10.10.5 para o meuemail@meudominio.com.br receberá a resposta apontada pelo Reply! e será negado

### Rbl_test! ( Sceo 0.29 ou superior )
Realiza uma ou mais consultas em listas RBLs
O parametro desta ação deve conter no mínimo uma lista RBL a consultar.
As listas devem ser separadas por um espaço

Exemplo:
Rbl_test! "rbl.lista1.org"
Rbl_test! "rbl.lista1.org bl.lista2.net rbls.lista3.com"

Esta ação retorna na variável %R o número de listas onde o IP se encontra e em %T o resultado do campo TXT da primeira lista onde o IP foi encontrado.
Veja mais sobre a condição Rbl_resp? para bloquear ou não a conexão após um Rbl_test!


### Relay!

Libera o reenvio de emails para destinatários externos
Exemplo:
Ip? "127.0.0.1" Relay!
Ip? "192.168.0." Relay!


### Relay_denied!

Nega o reenvio de emails para destinatários externos
Exemplo:
Ip? "192.168.0.67" Relay_denied!
Find_in_from? "@dominio.com.br" Relay_denied!

 

### Reply!

Envia uma mensagem de protocolo ao cliente conectado
Exemplo:
Ip? "10.10.10" Reply! "500 Seu IP esta bloqueado" Close!

### Sendmail!

Faz com que o servidor envie um email de auto resposta ao remetente
Exemplo:
To? "zedeferias@meudominio.com.br" Sendmail! "/home/mail/meudominio.com.br/zedeferias/auto_resp.txt:%r:%f"

Se um email chegar para zedeferias@meudominio.com.br o servidor enviará um email de auto resposta para o remetente.
Obs: Cuidado com mensagens de auto resposta. Veja a sessão Exemplos
mais abaixo onde há uma explicação detalhada sobre o assunto.

###Spf_test!

Executa um teste SPF no domínio do remetente. O resultado desta ação pode ser medido pela variável %y ou pela condição Spf_resp?
Obs: Esta ação não funciona no Connection Rules e Data_rules
Exemplo:
Spf_test!

Neste exemplo o servidor realiza um teste SPF no endereço de remetente passado e guarda as informações para serem usadas com a variável %y ou com a condição Spf_resp?

 

### Stop!

Pára a checagem do arquivo de regras.
Exemplo:
To? "teste@teste.com.br" Stop!

Se o email de destinatário for teste@teste.com.br a checagem das regras é interrompida para o atual destinatário e as regras abaixo não serão lidas.

### Tchange!

Muda o atual endereço de destinatario (rcpt to).
Exemplo:
From? "fulano@teste.com.br" Find_in_to? "@meudominio.com.br" Tchange! "meuemail@outrodominio.com.br"

Se o endereço de remetente for igual a fulano@teste.com.br com destino a algum email para @meudominio.com.br, ele será trocado por meuemail@outrodominio.com.br.



### Qlimit!

Joga o atual email para a fila qlimit. Esta fila é usada como fila secundário onde podemos limitar o fluxo de saída de emails menos importantes de forma a não consumirem todo o canal de dados.
A qlimit obedece às regras estipuladas pelas opções, Qlimit_max_procs e Qlimit_time.
Fisicamente ela se encontra em /var/spool/sceo/qlimit

Exemplo no arquivo apontado por From_rules:
From? "newsletter@dominiolocal.com.br" Qlimit!

Sempre que alguém de dentro da empresa disparar emails de mala direta, eles serão jogados na qlimit e não consumirão todo o canal de dados. Isso se você configurou bem as opções Qlimit_max_procs e Qlimit_time.

OBS:
Para ver os emails da qlimit com a ferramenta 'fila', use a opção '-q':
#> fila -q

Para forçar o processamento de um arquivo de fila usando o sceo, use a opção '-pq'
#> sceo -pq <id_arquivo_de_fila>
----


Variáveis

As variáveis podem ser utilizadas dentro dos parâmetros das diversas condições e ações do servidor

São elas:

----------------------------------------------------
%r - Equivale ao atual destinatário especificado com 'rcpt to'
Obs: Não funciona no Data_rules
----------------------------------------------------
%f - Equivale ao remetente especificado com o  comando 'mail from'
----------------------------------------------------
%i - Equivale ao numero de IP do cliente conectado
----------------------------------------------------
%e - Equivale ao nome reverso do cliente conectado
----------------------------------------------------
%s - Equivale ao nome reverso se existir, caso contrario ele retorna o endereço IP do cliente
----------------------------------------------------
%h - Equivale a identificação utilizada pelo cliente no comando helo
----------------------------------------------------
%o - Equivale ao domínio do endereço de email do remetente utilizando pelo comando 'mail from'
----------------------------------------------------
%c - Equivale ao domínio do endereço de email do atual destinatário especificado com o comando 'rcpt to'
Obs: Não funciona no Data_rules
----------------------------------------------------
%m - Equivale ao nome de usuário que vem antes do '@' no endereço de email do remetente especificado com o comando 'mail from'
----------------------------------------------------
%p - Equivale ao nome de usuário que vem antes do '@' no endereço de email do atual destinatário especificado com o comando 'rcpt to'
Obs: Não funciona no Data_rules
----------------------------------------------------
%y - Equivale ao valor retornado pelo teste Spf executado no domínio do remetente
Valores Possiveis:
0 = None
1 = Pass
2 = Neutral
3 = SoftFail
4 = Fail
5 = TempError
6 = PermError
----------------------------------------------------
%n - Equivale ao número total de destinatarios
----------------------------------------------------
%t - Equivale ao valor retornado pelo ultimo programa executado pela ação Exec!
----------------------------------------------------
%l - Equivale ao nome de usuário do sitema do atual destinatário especificado
Obs: Só funciona no Rcpt_rules
----------------------------------------------------
%q - Equivale ao nome de usuário do sitema do atual remetente especificado. Retorna um valor nulo quando o remetente é um alias
Obs: Só a partir do From_rules
----------------------------------------------------
%d - Equivale ao id do atual email. Pode ser usado para apontar o arquivo de fila do atual email para checagens em seu conteúdo:
Ex: "/var/spool/sceo/c%d"
Obs: Só funciona no Data_rules
----------------------------------------------------
%z - Equivale ao tamanho em bytes do atual email recebido.
Obs: Esta variável vale o valor passado pelo 'SIZE=' durante o comando 'Mail from' para o From_rules e Rcpt_rules, porém, ela vale o tamanho exato do email durante o Data_rules
----------------------------------------------------
%u - Equivale ao nome do usuário utilizado na autenticação
----------------------------------------------------
%R - Equivale ao número de RBLs em que o IP foi encontrado, usando a ação Rbl_test!
----------------------------------------------------
%T - Equivale a resposta TXT da primeira Blacklist onde o IP foi encontrado
----------------------------------------------------
%C - Equivale ao diretorio HOME do destinatario, caso seja local ( Sceo 0.30 ou superior )
----------------------------------------------------
%F - Equivale ao diretorio HOME do remetente, caso seja local ( Sceo 0.30 ou superior )
----------------------------------------------------
%U - Equivale ao diretorio HOME do usuario autenticado ( Sceo 0.30 ou superior )
----------------------------------------------------
%H - Equivale ao valor de Hits adicionados da atual conexão ( Sceo 0.30 ou superior )
----------------------------------------------------







 

Exemplos


- Processar um arquivo de regras para cada cliente interno:
A regra abaixo deve ser colocada no arquivo apontado por Rcpt_rules

Internal_rcpt? Proc_rules! "/home/regras/%c/%p/regra_pessoal"


- Recusar entrega não autenticada de servidores baseados em speedy, etc...
No arquivo apontado por From_rules:

!Auth? Find_strfile? "%e:/etc/blacklist" Reply! "550 So aceitamos emails de servidores validos" Deny!


No arquivo blacklist você poderá ter o seguinte conteúdo:
.dsl.
.adsl.
.speedy
.cable

Se o servidor encontrar alguma destas linhas contidas no nome reverso do cliente conectado, o remetente será recusado.
Obs: Ao invés de Deny! você poderia usar o Close! para já fechar a  conexão de vez


Auto Resposta


Digamos que um cliente tenha saído de ferias e você configurou auto resposta no arquivo de regras dele. Se por acaso um outro amigo dele sair de férias também e configurar auto resposta e ele enviar um email a esse seu cliente, vai começar um tiroteio de auto resposta entre os dois servidores. Para evitar isso é preciso salvar em um arquivo texto uma lista contendo os emails que já receberam auto resposta, podemos fazer isso com a seguinte regra dentro do arquivo de regras do cliente:

!Find_filestr? "/home/regras/cliente1/lista_autoresp.txt:%f" Exec! "echo %f >> /home/regras/cliente1/lista_autoresp.txt" Sendmail! "/home/regras/cliente1/autoresp.eml:%r:%f"


Dessa forma o servidor procura primeiro no arquivo lista_autoresp.txt pelo email daquele remetente, se não encontrar então ele grava o email na lista e manda uma auto resposta.



Acesse o nosso Fórum para postar suas dúvidas e encontrar mais exemplos de regras.






· MTA Sceo - Brasil - Hospedaria Internet ·