Introdução
ACL Policy Daemon é uma ferramenta livre que se comunica com o MTA Postfix usando Protocolo de Delegação de política, implementando sistema de ACL (Access
Control List) para criar e melhorar o controle do tráfego do e-mail.
O que pode ser feito com ACL Policy Daemon:
- Greylisting;
- SPF validação;
- Controle de Mensagens por dia/hora;
- Limites de tamanho de mensagem variável por domínio ou e-mail;
- Verificar múltiplas RBL;
- Rejeitar mensagem somente se IP do cliente está listado em mais de uma RBL, ao mesmo tempo;
- Pequena curva de aprendizagem;
- Sintaxe inspirado no sistema de ACL do proxy HTTP Squid;
- Várias ACLs para usar e combinar.
Instalando e configurando o apolicy
Primeiro vamos começar com as dependências, lembrando que eu estou usando a distro CentOS 5.5:
# yum install python-twisted-core python-devel
Estes 2 pacotes (python-pyspf e python-pydns) eu tive que instalar 'na mão'.
Baixe o pacote da última versão do apolicy aqui: http://download.gna.org/apolicy/apolicy-0.73.tar.gz
Baixando o pacote do apolicy, siga os passos exatamente como indicado abaixo:
# wget http://www.apolicy.org/gpg/miguelfilho.gpg -O- -q | gpg --import
# wget http://download.gna.org/apolicy/apolicy-0.73.tar.gz
# wget http://download.gna.org/apolicy/apolicy-0.73.tar.gz.sig
# gpg --verify apolicy-0.73.tar.gz.sig
Descompacte o pacote e entre em seu diretório descompactado:
# tar zxf apolicy-0.73.tar.gz
Execute o comando abaixo para instalar:
# python setup.py install
Você verá as seguintes linhas no momento da instalação:
running install
running build
running build_py
creating build
creating build/lib
creating build/lib/apolicy
copying src/apolicy/parser.py -> build/lib/apolicy
copying src/apolicy/__init__.py -> build/lib/apolicy
copying src/apolicy/base.py -> build/lib/apolicy
copying src/apolicy/config.py -> build/lib/apolicy
copying src/apolicy/server.py -> build/lib/apolicy
running install_lib
creating /usr/lib/python2.4/site-packages/apolicy
copying build/lib/apolicy/parser.py -> /usr/lib/python2.4/site-packages/apolicy
copying build/lib/apolicy/__init__.py -> /usr/lib/python2.4/site-packages/apolicy
copying build/lib/apolicy/base.py -> /usr/lib/python2.4/site-packages/apolicy
copying build/lib/apolicy/config.py -> /usr/lib/python2.4/site-packages/apolicy
copying build/lib/apolicy/server.py -> /usr/lib/python2.4/site-packages/apolicy
byte-compiling /usr/lib/python2.4/site-packages/apolicy/parser.py to parser.pyc
byte-compiling /usr/lib/python2.4/site-packages/apolicy/__init__.py to __init__.pyc
byte-compiling /usr/lib/python2.4/site-packages/apolicy/base.py to base.pyc
byte-compiling /usr/lib/python2.4/site-packages/apolicy/config.py to config.pyc
byte-compiling /usr/lib/python2.4/site-packages/apolicy/server.py to server.pyc
running install_data
creating /etc/apolicy
copying main.conf -> /etc/apolicy
copying policy.conf -> /etc/apolicy
Se estiver da forma como acima é porque a instalação executou com sucesso, caso deseje criar o 'init script', siga o procedimento abaixo:
Copie o arquivo 'apolicy.init' para o diretório '/etc/init.d' com o seguinte nome: apolicy.
Execute o comando abaixo:
# chkconfig --add apolicy
Feito isto é só adicionar na inicialização do sistema com o comando:
# chkconfig --level 234 apolicy on
Agora o próximo passo é a configuração no Postfix.
Tenha uma maior atenção nessa parte porque você não pode errar.
No arquivo 'main.cf' do Postfix em 'smtpd_recipient_restrictions', coloque a linha referente ao apolicy (check_policy_service inet:127.0.0.1:10001) logo abaixo do
'reject_unauth_destination'.
Detalhe: Pode ser em qualquer posição abaixo de 'reject_unauth_destination' reforçando que tem que ser abaixo.
Exemplo de como deve ficar:
smtpd_recipient_restrictions ...,
...,
reject_unauth_destination,
check_policy_service inet:127.0.0.1:10001,
...
Também pode colocar em 'smtpd_client_restrictions', nesse caso você pode colocar em qualquer posição.
Configurando o Postfix
Agora devemos observar os arquivos de configuração do apolicy, mas primeiro vamos editar o arquivo de configuração do próprio apolicy.
Entre no diretório '/etc/apolicy' e dentro dele vai encontrar 2 arquivos: 'main.conf' e 'policy.conf'.
Primeiro vamos editar o 'main.conf', nesse arquivo é muito simples. Você pode alterar a porta em que o apolicy escuta, que no caso a padrão é a '10001'; eu mudei
minha configuração para '50001', isto fica seu critério. Você também pode definir o usuário que vai rodar com o apolicy e definições de log e outros.
Agora vamos ao que interessa, no arquivo 'policy.conf' (esse é o 'cara' que vai dar um "up" na segurança do MTA), adicionando ACL's.
Edite este arquivo.
Vou deixar aqui alguns exemplos das minhas configurações:
1- Neste exemplo abaixo eu configurei o apolicy para checar greylist, com exceção dos ips que estiver no local.txt:
acl email client_address /etc/apolicy/local.txt
acl grey_all greylisting time=1,lifetime=14400,backend=disk,root=/var/cache/apolicy/
action to_greyslist DEFER_IF_PERMIT Greylisting, Espere 1 minuto...
access grey_all !email to_greyslist
2- Checando rbl - no arquivo rbl.txt tem as listas que serão checadas e no local.txt os IPs ignorados na checagem:
acl rblmail client_address /etc/apolicy/local.txt
acl rbl1 rbl /etc/apolicy/rbl.txt
action brbl REJECT nao aceitamos spammers!!!!
access rbl1 !rblmail brbl
3- Neste exemplo, eu configurei para que o e-mail 'fulano@dominio.com.br' possa somente enviar para:
deltrano@dominio.com.br
acl pdest sender fulano@dominio.com.br
acl penviar recipient deltrano@dominio.com.br
action pemail OK
access pdest penviar pemail
4- Você precisa que um determinado e-mail não envie, mas que somente receba e-mails:
acl benvio sender fulano@dominio.com.br
action bemail REJECT nao pode enviar!!!
access benvio bemail
Bem, tentei demostrar um uso básico. Essa ferramenta é poderosa e com ela você pode criar muitas regras para reforçar a segurança do seu MTA.
Boa sorte pessoal.
Previamente publicado em:
Contato Linux Plue:
linuxplue.blogspot.com
Para entrar em contato com os editores da Linux Plue, envie um email para:
linuxplue@gmail.com (Ederson Carlos/Felipe Augusto)
"A base do conhecimento é a indagação, o interesse e o esforço".