« Página Inicial



Instalação de Servidor de Email com AntiSpam e AntiVírus

1 Estrela2 Estrelas3 Estrelas4 Estrelas5 Estrelas (2 votos, média: 4 de 5)
Loading ... Loading ...

Este tutorial explica passo a passo como configurar um servidor de email com suporte a vários recursos de antispam, múltiplos domínios, listas de discussão e armazenamento de contas em banco de dados MySQL utilizando o software Postfix.

Softwares Necessários
- Postfix - Servidor de Email
- Maildrop - Entrega de Emails
- Courier - Autenticação IMAP/POP/SMTP e Criptografia TLS
- SASL - Conexão SMTP autenticada e criptografada
- MySQL - Servidor de Banco de Dados (armazenamento de contas de usuários)
- SpamAssassin - anti-spam
- Policyd - AntiSpam
- TMDA - AntiSpam (Opcional para as contas)

Introdução
O objetivo deste manual é descrever como poderá ser feita a instalação
de um servidor de email com recursos AntiSpam e Quota de Disco fazendo
uso de usuários virtuais (usuários não existentes na máquina unix:
/etc/passwd). Para este tutorial estarei utilizando como base a
distribuição Debian Sarge v 3.1r3.

MySQL
Como estaremos armazenando os usuários e senhas de nosso servidor em
uma base de dados MySQL o primeiro serviço que precisamos estar
implantando é o mysql-server. Para instalar o mysql devemos executar os
seguintes comandos:

# apt-get install mysql-client mysql-server mysql-common
# mysql_secure_instalation (para proteger nosso servidor)

Em seguida devemos cria uma base de dados chamada postfix e gerar a seguinte estrutura:

CREATE DATABASE postfix;

CREATE TABLE `alias` (
`address` varchar(255) NOT NULL default ,
`goto` text NOT NULL,
`domain` varchar(255) NOT NULL default ,
`created` datetime NOT NULL default ‘0000-00-00 00:00:00′,
`modified` datetime NOT NULL default ‘0000-00-00 00:00:00′,
`active` tinyint(1) NOT NULL default ‘1′,
PRIMARY KEY (`address`),
KEY `address` (`address`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT=’Virtual Aliases’;

CREATE TABLE `domain` (
`domain` varchar(255) NOT NULL default ,
`description` varchar(255) NOT NULL default ,
`aliases` int(10) NOT NULL default ‘0′,
`mailboxes` int(10) NOT NULL default ‘0′,
`maxquota` int(10) NOT NULL default ‘0′,
`transport` varchar(255) default NULL,
`backupmx` tinyint(1) NOT NULL default ‘0′,
`created` datetime NOT NULL default ‘0000-00-00 00:00:00′,
`modified` datetime NOT NULL default ‘0000-00-00 00:00:00′,
`active` tinyint(1) NOT NULL default ‘1′,
PRIMARY KEY (`domain`),
KEY `domain` (`domain`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT=’Virtual Domains’;

CREATE TABLE `mailbox` (
`username` varchar(255) NOT NULL default ,
`password` varchar(255) NOT NULL default ,
`name` varchar(255) NOT NULL default ,
`maildir` varchar(255) NOT NULL default ,
`quota` int(11) NOT NULL default ‘10485760′,
`domain` varchar(255) NOT NULL default ,
`created` datetime NOT NULL default ‘0000-00-00 00:00:00′,
`modified` datetime NOT NULL default ‘0000-00-00 00:00:00′,
`active` tinyint(1) NOT NULL default ‘1′,
PRIMARY KEY (`username`),
KEY `username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT=’Virtual Mailboxes’;

CREATE TABLE `vacation` (
`email` varchar(255) NOT NULL default ,
`subject` varchar(255) NOT NULL default ,
`body` text NOT NULL,
`cache` text NOT NULL,
`domain` varchar(255) NOT NULL default ,
`created` datetime NOT NULL default ‘0000-00-00 00:00:00′,
`active` tinyint(1) NOT NULL default ‘1′,
PRIMARY KEY (`email`),
KEY `email` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT=’Virtual Vacation’;

Após a criação da base de dados devemos criar um usuário postfix que tenha permissão na base de dados “postfix”:

$mysql -u root -p
mysql> USE mysql;
mysql> INSERT INTO user (Host, User, Password) VALUES (’localhost’,'postfix’,password(’postfix’));
mysql> INSERT INTO db (Host, Db, User, Select_priv) VALUES (’localhost’,'postfix’,'postfix’,'Y’);
mysql> FLUSH PRIVILEGES;
mysql> GRANT USAGE ON postfix.* TO postfix@localhost;
mysql> GRANT SELECT, INSERT, DELETE, UPDATE ON postfix.* TO postfix@localhost;

Configuração Importante para o MySQL
Como o postfix é executado como chroot em /var/spool/postfix devemos criar um link do socket do mysql lá dentro. Caso contrário o postfix não conseguirá acessar o MySQL.
Adicionar no arquivo /etc/mysql/debian-start :

echo “Criando Link de /var/run/mysqd/mysqld.sock no chroot do postfix (/var/spool/postfix)”
ln -f /var/run/mysqld/mysqld.sock /var/spool/postfix/var/run/mysqld/mysqld.sock

Postfix
Abaixo veremos como é feita a instalação e configuração do servidor de email Postfix.

Instalação
O primeiro software necessário para a montagem do servidor de email é a
instalação do postfix com suporte ao banco de dados mysql:

# apt-get install postfix postfix-mysql postfix-tls

Configuração Básica

main.cf
O exemplo abaixo mostra como deve ser configurado o arquivo main.cf do postfix:

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA’s job.
append_dot_mydomain = no

# Uncomment the next line to generate “delayed mail” warnings
#delay_warning_time = 4h

#MailMan
owner_request_special = no

#MailMan / TMDA
recipient_delimiter = +

#Tamanho maximo de 20mb por mensagem
message_size_limit = 20971520

myhostname = mailserv.diotto.net
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = mailserv.diotto.net,localhost
relayhost =
mynetworks = 127.0.0.0/8, 143.106.243.0/24, 143.106.244.0/24
#mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

# Mailbox Virtuais

##################


virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_base = /var/email
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 1001
virtual_transport = maildrop
#virtual_transport = virtual
virtual_uid_maps = static:1001
virtual_gid_maps = static:1001

# Configuracoes para Habilitar Suporte a Cota

##################


virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_maildir_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Desculpe, este usuario esta com a cota estourada, por favor tente mais tarde.
virtual_overquota_bounce = yes
virtual_mailbox_limit = 51200000
virtual_mailbox_limit_inbox = no

# =======MAILDROP ==========
fallback_transport = /usr/bin/maildrop
maildrop_destination_recipient_limit = 1
unknown_local_recipient_reject_code = 450

master.cf
Até o momento não precisamos fazer nenhuma alteração no master.cf, o padrão do Debian é suficiente.

mysql_virtual_alias_maps.cf

user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address

mysql_virtual_domains_maps.cf

user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
#additional_conditions = and backupmx = ‘0′ and active = ‘1′

mysql_virtual_mailbox_maps.cf

user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
select_field = CONCAT(domain,’/',maildir)
#additional_conditions = and active = ‘1′

mysql_virtual_mailbox_limit_maps.cf

user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = quota
where_field = username
#additional_conditions = and active = ‘1′

mysql_relay_domains_maps.cf

user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = ‘1′

Utilizando o Courier para IMAP, POP e Criptografia (TLS/SSL)
Para a instalação do Courier podemos fazer uso do apt, conforme abaixo:

# apt-get install courier-authdaemon courier-authmysql courier-base courier-imap \
courier-imap-ssl courier-pop courier-pop-ssl courier-ssl \
libsasl2-modules libsasl2 libsasl2-modules-sql

Habilitando a autenticação via MySQL
Alterar a linha authmodulelist no /etc/courier/authdaemonrc para:

authmodulelist=”authmysql authpam”

Configurar o arquivo /etc/courier/authmysqlrc:

MYSQL_UID_FIELD ‘1001′
MYSQL_GID_FIELD ‘1001′
MYSQL_HOME_FIELD “/var/email”
MYSQL_LOGIN_FIELD username
MYSQL_MAILDIR_FIELD CONCAT(domain,’/',maildir,’/Maildir/’)
MYSQL_NAME_FIELD name
MYSQL_OPT 0
MYSQL_PASSWORD postfix
MYSQL_PORT 0
MYSQL_QUOTA_FIELD quota
MYSQL_SERVER localhost
MYSQL_SOCKET /var/run/mysqld/mysqld.sock
MYSQL_USERNAME postfix
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_DATABASE postfix

Habilitando SMTP Autenticado com o SASL
Para permitir SMTP autenticado devemos adicionar as seguintes linhas ao nosso main.cf:

# SMTP

##################


smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unauth_destination,
reject_unauth_pipelining,
reject_invalid_hostname,
reject_unlisted_recipient,
reject_rbl_client opm.blitzed.org,
reject_rbl_client list.dsbl.org,
reject_rbl_client bl.spamcop.net,
reject_rbl_client sbl-xbl.spamhaus.org,
reject_rbl_client zombie.dnsbl.sorbs.net

# Verificacoes do SMTP - Obrigacao todos a dar helo e desabilita comando vrfy e etrn
smtpd_helo_restrictions = reject_invalid_hostname
smtpd_etrn_restrictions = permit_mynetworks, reject
smtpd_helo_required = yes
disable_vrfy_command = yes

O arquivo smtpd.conf
Para que o smtp faça a autenticação estaremos utilizando o
Courier-authdaemon, para isso devemos informar ao SASL que consulte ao
‘authdaemond’ para autenticar o usuário, deste modo o arquivo
/etc/postfix/sasl/smtpd.conf ficará assim:

pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path:/var/run/courier/authdaemon/socket
[i]

Executar agora os comandos:
[i]
# mkdir /var/run/authdaemond
# chmod 755 /var/run/authdaemond

ATENÇÃO:Como estamos executando o postfix com chroot em
/var/spool/postfix (padrão do Debian) devemos criar um link para o
socket do authdaemon dentro da pasta com chroot:

mkdir -p /var/spool/postfix/var/run/courier/authdaemon
ln /var/run/courier/authdaemon/socket /var/spool/postfix/var/run/courier/authdaemon/socket
chown -R daemon:daemon /var/spool/postfix/var/run/courier

Devemos também verificar as permissões de /var/run/authdaemond/socket para que o postfix possa acessá-lo.
O link que acabamos de criar deve ser refeito toda vez que o authdaemon for reiniciado, deste modo devemos abrir o arquivo /etc/init.d/courier-authdaemond e inserir depois de authdaemond start:

ln -f /var/run/courier/authdaemon/socket /var/spool/postfix/var/run/courier/authdaemon/socket

Habilitando Criptografia SSL para SMTP, POP e IMAP
Para habilitar o uso de criptografia SSL para os serviços de SMTP, POP e IMAP devemos:

IMAP

# cd /etc/courier
# openssl req -new -x509 -nodes -out imapd.pem -keyout imapd.pem -days 365

POP

# cd /etc/courier
# openssl req -new -x509 -nodes -out pop3d.pem -keyout pop3d.pem -days 365

SMTP
Inserir no arquivo /etc/postfix/main.cf:

smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key

Gerar o par de chaves:

# cd /etc/postfix
# openssl req -new -x509 -nodes -out smtpd.cert -keyout smtpd.key -days 365

Apache (para utilizar WebMail com SSL)
Obs: neste caso é necessário os pacotes apache e apache-ssl instalados.

# cd /etc/apache-ssl
# openssl req -new -x509 -nodes -out apache.pem -keyout apache.pem -days 365

Quota de Email com o Maildrop
O Maildrop será responsável pela entrega propriamente dita da mensagem
à sua respectiva caixa postal. Ele também fará o controle da cota de
disco. Com o Maildrop você também poderá implementar algumas regras de
filtragem.
A versão existente nos repositórios do Debian Sarge é a versão 1.5.3 e
originalmente não vem compilada com suporte a MySQL, então faremos o
download dos fontes com o comando:

# mkdir ~/maildrop
# cd ~/maildrop
# apt-get install fakeroot
# apt-get build-dep maildrop
# apt-get source maildrop
# cd maildrop-1.5.3/debian

Aqui precisaremos fazer uma alteração um pouco mais delicada,
precisamos modificar o padrão com que o pacote é compilado, habilitando
o suporte a mysql. Edite o arquivo rules e procure a seguinte parte:

[ -f config.status ] || CPPFLAGS=”$CFLAGS” ./configure –prefix=/usr \
–mandir=’${prefix}/share/man’ –libexecdir=’${prefix}/lib/maildrop’ \
–sysconfdir=/etc \
–enable-use-dotlock=1 –enable-use-flock=1 \
–enable-sendmail=/usr/sbin/sendmail –enable-maildirquota
[ -f maildrop/maildrop ] || make

e altere para:

[ -f config.status ] || CPPFLAGS=”$CFLAGS” ./configure –prefix=/usr \
–mandir=’${prefix}/share/man’ –libexecdir=’${prefix}/lib/maildrop’ \
–sysconfdir=/etc/maildrop \
–enable-maildrop-uid=1001 \
–enable-maildrop-gid=1001 \
–enable-syslog=1 \
–enable-maildropmysql \
–enable-use-dotlock=1 –enable-use-flock=1 \
–enable-sendmail=/usr/sbin/sendmail –enable-maildirquota
[ -f maildrop/maildrop ] || make

Depois de modificado, podemos compilar e gerar o .deb:

# cd ..
# dpkg-buildpackage -rfakeroot -uc -b

Depois disso iremos testar (antes de instalar o .deb gerado) se o Maildrop foi compilado com suporte a MySQL:

# maildrop/maildrop -v
maildrop 1.5.3 Copyright 1998-2003 Double Precision, Inc.
GDBM extensions enabled.
Maildir quota extension enabled.
Virtual user database via MySQL extension enabled.
This program is distributed under the terms of the GNU General Public
License. See COPYING for additional information.

Ótimo, nosso binário está com suporte a MySQL, agora vamos agora criar
o diretório de configuração e copiar os arquivos de configuração do
maildrop:

# mkdir /etc/maildrop
# cp maildropmysql.config /etc/
# cp maildir/quotawarnmsg /etc/maildrop/

Agora vamos instalar o .deb ;)

# cd ..
# dpkg -i maildrop_1.5.3-1.1_i386.deb
Selecting previously deselected package maildrop.
(Reading database … 97308 files and directories currently installed.)
Unpacking maildrop (from maildrop_1.5.3-1.1_i386.deb) …
Setting up maildrop (1.5.3-1.1) …

Configurando o maildrop:
Configure o Maildrop para acessar o MySQL. Edite o arquivo /etc/maildropmysql.conf:

# vi /etc/maildropmysql.config
hostname localhost
port 3306
socket /var/run/mysqld/mysqld.sock
database postfix
dbuser postfix
dbpw postfix
dbtable mailbox

default_gidnumber 1001
default_uidnumber 1001

uid_field username
uidnumber_field 1001
gidnumber_field 1001
maildir_field concat(maildir,’/Maildir’)
homedirectory_field concat(’/var/email/’,domain,’/')
quota_field concat(quota,’S')
mailstatus_field active
where_clause “”
homedirectory_base /var/email/

DICA: O maildrop possui um recurso de aviso de email para o
usuário caso a sua caixa postal ultrapasse a porcentagem de utilização
de um valor especificado. Nesse tutorial usarei o valor de 90%
(explicado mais adiante).
Sendo assim, você pode personalizar a mensagem de aviso que o usuário
irá receber, bastando para isso editar o arquivo
/etc/maildrop/quotawarnmsg, no meu caso o arquivo está assim:

From: Mail Delivery System <postmaster@diotto.net>
Reply-To: postmaster@diotto.net
To: Valued Customer:;
Subject: Aviso de Cota de Email
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 7bit

Prezado usuario,
Sua caixa de emails no servidor esta com mais de 90% ocupada.
Para continuar recebendo emails voce precisa remover algumas mensagens.
Sugerimos que limpe suas pastas Lixeira, Enviados e Spam (caso possua).
Obrigado

Testando a Configuração

SMTP

telnet 127.0.0.1 25

Trying 127.0.0.1…
Connected to 127.0.0.1.
Escape character is ‘^]’.
220 localhost.localdomain ESMTP Postfix
> EHLO ceset.unicamp.br
250-localhost.localdomain
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 8BITMIME
> AUTH PLAIN AHVzZXJAZG9tYWluLnRsZABzZWNyZXQ=
235 Authentication successful

Como conseguir o código de autenticação:
O script perl abaixo fará a criptografia da senha:

perl -MMIME::Base64 -e ‘print encode_base64(”\0usuario\@ceset.unicamp.br\0senha”)’

Configurando Antivírus e Anti-Spam

Amavis + SpamAssassin
Introdução ao AMaViS
Umd os melhores softwares para trabalhar em conjunto com o postfix para
bloqueio de Vírus e Spam é o AMaViS (A Mail Virus Scanner). AMaViS é
uma interface entre Postfix, spamassassin e algum antivírus (por
exemplo o ClamAV, que é gratuito). Atenção: AMaViS contém alguns
recursos antispam mas não faz verificação de vírus, ele precisa de um
antivírus externo para isso, por isso a necessidade do ClamAV.

Clamav
O clamav é um antivírus gratuito disponível para distribuições Unix,
estaremos utilizando-o em nosso servidor. Sua instalação é bem simples
e não requer nenhuma configuração adicional.

Instalando softwares necessários

# apt-get install amavisd-new spamassassin spamc razor clamav clamav-base clamav-daemon clamav-freshclam libclamav1

Configurando o AMaVis
Para configurar o amavis devemos editar o arquivo /etc/amavis/amavisd.conf e setar as seguintes opções principais:

$mydomain = ‘diotto.net’;
#@bypass_virus_checks_acl = qw( . ); Se esta linha estiver comentada a checagem de vírus está habilitada
#@bypass_spam_checks_acl = qw( . ); Se esta linha estiver comentada a checagem de spam está habilitada
@lookup_sql_dsn = ( [ 'DBI:mysql:postfix', 'postfix', 'senha' ] );
$sql_select_policy = ‘SELECT “Y” as local FROM domain WHERE
CONCAT(”@”,domain) IN (%k)’; # Faz consulta ao mysql para saber se
domínio é local ou não
$final_virus_destiny = D_DISCARD; #Descarta emails com vírus
$final_banned_destiny = D_REJECT; #Como gerenciar email com anexos
bloqueados. Vários tipos como PIF, EXE, COM ou DOC são infectados.
Depois podemos escolher que arquivos não permitir.
$final_spam_destiny = D_PASS;
$sa_tag_level_deflt = -1000; # Nível para adicionar cabeçalho de X-Spam-Status no email
$sa_tag2_level_deflt = 5.0; # Nível para marcar email como spam
$sa_kill_level_deflt = 10; # Se o nível for acima deste amavis executa a ação definida em $final_spam_destiny.
$sa_spam_subject_tag = ‘***SPAM*** ‘; # Remarca assunto do email

Configurando Clamav para funcionar com AMaVis
Para que clamav + amavis funcionem perfeitamente é necessário que os
dois sejam executados com o mesmo usuário. Iremos então mudar o usuário
de execução do clamav para o usuário chamado “amavis”:
Modificar no arquivo /etc/clamav/clamd.conf:

User amavis

Modificar no arquivo /etc/clamav/freshclam.conf:

DatabaseOwner amavis

Modificar permissões na Base de Dados de vírus, arquivos de log e socket de execução:

# chown -R amavis:amavis /var/lib/clamav
# chown -R amavis:amavis /var/log/clamav
# chown -R amavis:amavis /var/run/clamav

Habilitando a checagem de Spam / Virus no Postfix
Para que os emails sejam checados com o AMaViS devemos alterar os arquivos main.cf e master.cf do postfix conforme abaixo:
main.cf :

content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings

master.cf

#Configuração do Amavis
amavis unix - - - - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes

#Config do Amavis
127.0.0.1:10025 inet n - - - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks

Policyd
O Policyd é um plugin anti-spam para o Postfix que tem recursos de
lista cinza, que serão utilizados para bloquear alguns spammers.

Compilar e Instalar

# cd /usr/local/src
# wget http://policyd.sourceforge.net/policyd-v1.80.tar.gz
# cd policy-1.80
# make build
# make install

Criar um script de limpeza que é executado no Corntab a cada Hora

# crontab -e
0 * * * * /usr/local/policyd/cleanup -c /usr/local/policyd/policyd.conf

Criar a Base Policyd no Mysql:


# mysql -u root -p < DATABASE.mysql
# mysql -u root -p
mysql> GRANT USAGE ON policyd.* TO postfix@localhost;
mysql> GRANT SELECT, INSERT, DELETE, UPDATE ON policyd.* TO postfix@localhost;
mysql> FLUSH PRIVILEGES;
mysql> quit

Arquivo de Configuração
Editar o arquivo /usr/local/policyd/policyd.conf e definir:

MYSQLHOST=”"
MYSQLDBASE=”policyd”
MYSQLUSER=”policyd”
MYSQLPASS=”senha”
DEBUG=3
DAEMON=1
BINDHOST=127.0.0.1
BINDPORT=10031
PIDFILE=/var/run/policyd.pid

Criando Script de Inicialização
Criar o arquivo /etc/init.d/policyd com o conteúdo:

#! /bin/sh

# /etc/init.d/policyd: start and stop the policy daemon

case “$1″ in
start)
echo -n “Starting policy daemon: policyd”
/usr/local/policyd/policyd -c /usr/local/policyd/policyd.conf
exit 0
;;
stop)
echo -n “Stopping policy daemon: policyd”
killall policyd
exit 0
;;
*)
echo “Usage: /etc/init.d/rsync {start|stop|restart}”
exit 1
esac

Criar um link em /etc/rc2.d:

# cd /etc/rc2.d
# ln -s ../init.d/policyd S20policyd

Configurando o Postfix
Inserir as configurações abaixo no arquivo /etc/postfix/main.cf.
Obs: É necessário ter instalado no mínimo o Postfix 2.1 para que as regras abaixo funcionem!

smtpd_recipient_restrictions =
..
reject_unauth_destination,
reject_unlisted_recipient,
check_policy_service inet:127.0.0.1:10031
..

TMDA
O software TMDA foi desenvolvido para trabalhar em conjunto com o
servidor de emails QMail. Portanto para fazê-lo funcionar perfeitamente
com o postfix são necessárias algumas alterações no sistema. Nesta
solução o que foi desenvolvido é o esquema abaixo:

/-> Maildir
Postfix -> Maildrop ->
\-> TMDA -> Maildir

- O postfix recebe o email enviado
- O email é encaminhado ao Maildrop
- O Maildrop possui um script (/etc/maildroprc) que faz a verificação
das configurações do usuário e, dependendo da configuração do mesmo
envia direto para o Maildir (sem configuração do TMDA) ou envia ao
filtro do TMDA (com configuração do TMDA)

Configuração do Postfix
Primeiramente é necessário fazer com
que o Postfix utilize o Maildrop como Agente de Transporte de email,
portanto as seguintes configurações são necessária:

Arquivo master.cf

maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/bin/env SENDER=${sender}
RECIPIENT=${recipient} EXTENSION=${extension} /usr/bin/maildrop
-w 90 -d ${user}@${nexthop} ${extension} ${recipient} ${user} ${nexthop}

Instalacao do TMDA

cd /usr/local/src
wget http://tmda.net/releases/tmda.tgz
tar xvfz tmda.tgz
mv tmda-1.0.4 /usr/local/tmda
cd /usr/local/tmda
./compileall

Configurando o Maildrop
O maildrop deverá ser configurado de modo que verique se o usuario tem
as configurações necessárias para rodar o TMDA, ou se o TMDA nao esta
configurado para aquela conta, entregando o email direto na Mailbox.
Para isso vamos criar o arquivo /etc/maildroprc:

# /etc/maildroprc
#Definindo variaveis e parametros recebidos pelo maildrop
LOGNAME=tolower(”$LOGNAME”)
EXTENSION=”$1″
RECIPIENT=tolower(”$2″)
USER=tolower(”$3″)
HOST=tolower(”$4″)
HOME=”/var/email/$HOST/$USER”
SENDER=”$5″
DEFAULT=”/var/email/$HOST/$USER/.”
DEST=”Maildir”

#Arquivo de log, util para debug
logfile “/var/email/$HOST/mailfilter.log”

#Verificacoes de delimitaor,sender e estrutura de pastas

if ( “$EXTENSION” ne “” )
{
DELIMITER=”+”
}
if (!$SENDER)
{
SENDER = “<>”
}
`test -e /var/email/$HOST`
if ( $RETURNCODE != 0 )
{
log “Pasta /var/email/$HOST nao existe, sera criada”
`mkdir /var/email/$HOST`
`chmod -R 0700 /var/email/$HOST`

}
`test -e /var/email/$HOST/$USER`
if ( $RETURNCODE != 0 )
{
log “Pasta /var/email/$HOST/$USER nao existe, sera criada”
`maildirmake /var/email/$HOST/$USER`
`chmod -R 0700 /var/email/$HOST/$USER`
}

`test -e /var/email/$HOST/${USER}/.tmda_install`
if ( $RETURNCODE != 0 )
{
log “Vai gravar direto na pasta do usuario, pois
/var/email/$HOST/${USER}/.tmda_install nao existe”
to “/var/email/$HOST/$USER/$DEST”;
}
else
{
include “/var/email/$HOST/${USER}/.tmda_install”
}

#if ( $RECIPIENT eq $SENDER )
#{
# if ( $COPYTOSELF ne “Y” )
# {
# log “Dumping message to /dev/null/ because SENDER and RECIPIENT match”
# to “/dev/null”
# }
#}

if ( $RECIPIENT eq $SENDER )
{
#Nao passa pelo TMDA se a pessoa esta mandando email para ela mesma
to “/var/email/$HOST/$USER/$DEST”;
}
else
{
if ( $TMDA eq “Y” )
{
#Caso em que o e-mail vai para o TMDA
to “| /usr/local/tmda/bin/tmda-filter”
}
else
{
#Caso nao va par ao TMDA, vai par ao Mailbox
to “/var/email/$HOST/$USER/$DEST”;
}
}

#Fim do arquivo

Conteúdo do arquivo /var/email/diotto.net/<usuario>/.tmda_install

TMDA=”Y”
import SENDER
import RECIPIENT
import EXTENSION

Instalando a Interface Web do TMDA: tmda-cgi

# wget http://tmda.net/tmda-cgi/releases/tmda-cgi-0.15.tar.bz2
# tar -xvjf tmda-cgi-0.15.tar.bz2
# mv tmda-cgi-0.15 /usr/local/tmda-cgi
# cd /usr/local/tmda-cgi
# ./configure

Serão solicitadas várias informações, a mais importante é o nome do
script que lista os usuários virtuais, que deve ficar assim: “vpopmail1
/usr/local/tmda/bin/vuserinfo ~”. O script vuserinfo ainda não existe,
iremos criá-lo.

# make
# make install

Criar o script /usr/local/tmda/bin/vuserinfo:

#!/bin/sh

mailbase=”/var/email/”
domain=`echo $1|cut -d@ -f2`
maildir=`echo $1|cut -d@ -f1`

echo -e “name:\t$1″
echo -e “passwd:”
echo -e “clear passwd:”
echo -e “uid:\t0″
echo -e “gid:\t0″
echo -e “\tall services available”
echo -e “dir:\t$mailbase$domain/$maildir”
echo -e “quota:\tNOQUOTA”
echo -e “usage:\tNOQUOTA”
echo -e “gecos:\tNone”

Após instalado o tmda-cgi atua em conjunto com o apache, e sua
configuração basicamente consiste em montar a pasta
/usr/local/tmda-cgi/skel de modo que permita uma instalação e
desistalação do software da pasta pessoal do usuário. A pasta ficará
conforme a estrutura abaixo:

|– install
| |– .tmda
| | |– config
| | |– crypt_key
| | |– filters
| | | |– incoming
| | | `– outgoing
| | |– lists
| | | |– blacklist
| | | |– confirmed
| | | |– revoked
| | | |– whitelist
| | | `– whitelist_confirmed
| | |– logs
| | | |– debug
| | | |– incoming
| | | `– outgoing
| | |– pending
| | |– response
| | |– templates
| | | |– confirm_accept.txt
| | | `– confirm_request.txt
| | `– tmda-cgi.ini
| |– .tmda_install
| `– anomalies
`– uninstall
`– anomalies

Listas de Discussão
Para permitir o uso de lista de discussão no servidor estarei fazendo
uso do Mailman, o Mailman é um sistema utilizado para administrar
listas de discussão ou listas de informativos (as famosas newsletter)
similar aos conhecidos Majordomo ou Smartmail. A vantagem é que o
Mailman possui administração via Web, onde o administrador pode
gerenciar o sistema de sua mesa de trabalho, usando um browser comum.
Ele possui também filtros de conteúdo, arquivamento das mensagens
enviadas para a lista, moderação de membros, filtros anti-spam dentre
(várias outras funcionalidades http://www.gnu.org/software/mailman/).
O Mailman é utilizado para gerenciar as listas de projetos como o KDE,
Gnome, SaMBa e usado em empresas com a Red Hat, Apple, Sun, Conectiva
dentre outras.

# apt-get install mailman

É necessário incluir algumas linhas no httpd.conf do Apache para a administração via browser.

ScriptAlias /mailman “/var/lib/mailman/cgi-bin”
Alias /pipermail “/var/lib/mailman/archives/public”

Após dar um restart em seu Apache, a interface gráfica deve estar disponível pelo endereço http://seuservidor/mailman/listinfo

Configuração do Postfix
Estas são as alterações necessárias no main.cf do Postfix. Para maiores detalhes, consulte a documentação do mesmo.
Recomendo que não faça o reload no postfix por enquanto, pois ainda não temos os arquivos $mailman/data/*

virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf
alias_maps = hash:/var/lib/mailman/data/aliases, hash:/etc/aliases

Configuração do Mailman
No arquivo /var/lib/mailman/Mailman/Defaults.py:

DEFAULT_EMAIL_HOST = ‘listas.diotto.net’
DEFAULT_URL_HOST = ‘listas.diotto.net’
DEFAULT_URL_PATTERN = ‘http://%s/mailman/’
DEFAULT_SERVER_LANGUAGE = ‘pt_BR’

Em DEFAULT_EMAIL_HOST é interessante deixar o domínio principal de sua máquina, o que terá mais listas sob seu domínio.
Em DEFAULT_URL_HOST será o endereço a ser acessado via browser. Eu estou usando o hostname da máquina.
No arquivo /var/lib/mailman/Mailman/mm.py:
[i]
MTA = “Postfix”
POSTFIX_STYLE_VIRTUAL_DOMAINS = ['listas.diotto.net']

Neste arquivo fica a lista de todos os domínios virtuais que o mailman poderá responder.
Crie o arquivo /var/lib/mailman/data/virtual-mailman com uma linha pertencendo ao usuário “mailman”:

listas.diotto.net anything

O Mailman deverá atualiza-lo a cada lista que você criar ou remover,
junto com um arquivo chamado virtual-mailman.db. Este é o arquivo que o
postfix irá ler para achar seu usuário chamado <lista-subscribe (a)
dominio com br>, por exemplo.
Se esse arquivo não estiver sendo atualizado, você verá mensagens de
//”user unknow”// nos logs do seu postfix. Criando lista administrativa

Utilize os comandos abaixo para criar uma lista chamada ‘mailman’, que servirá para tarefas administrativas.

# newlist mailman
# config_list -i /var/lib/mailman/data/sitelist.cfg mailman

Este último comando fará com que seja atribuída a esta lista uma configuração inicial padrão.
Aproveite para colocar os agendamentos do Mailman no cron:

# cd cron
# crontab crontab.in

Atenção: Faça um backup do seu cron atual, caso já possua algum agendamento! Problemas ao criar uma lista

Devemos agora definir uma senha mestre para o Mailman com o comando:

# mmsitepass

Iniciando e parando o Mailman

# /etc/init.d/mailman stop
# /etc/init.d/mailman start

Compartilhe / Adicione como Favorito: Escolha um serviço de favoritos/compartilhamento para adicionar esta postagem.
  • bodytext
  • del.icio.us
  • Facebook
  • Google
  • Pownce
  • Rec6
  • StumbleUpon
  • Technorati

Deixar uma resposta

Posts Relacionados