Postfix, Postfixadmin, Mysql, Courier, Clamav, Amavisd e Postgrey

Observações:

  • Iremos levar em consideração que você possui uma instalação “limpa” do S.O. Debian GNU/Linux.

Atualizando o sitema

root@debian:~# aptitude update && aptitude dist-upgrade -y

Compilando e instalando o Postfix com suporte a quota

Por padrão, o Postfix não suporta o sistemas de quota. Com isso, vamos compilar o Postfix com o patch VDA para suportar esse recurso.

root@debian:~# cd /usr/src
root@debian:/usr/src# apt-get source postfix
root@debian:/usr/src# wget -c http://vda.sourceforge.net/VDA/postfix-vda-2.7.1.patch
root@debian:/usr/src/postfix-2.7.1# cd postfix-2.7.1
root@debian:/usr/src/postfix-2.7.1# patch -p1 < ../postfix-vda-2.7.1.patch

Em seguida, vamos instalar alguns pacotes necessários.

root@debian:/usr/src/postfix-2.7.1# aptitude install debhelper po-debconf  ssl-cert  hardening-wrapper -y
root@debian:/usr/src/postfix-2.7.1# aptitude install libdb-dev libpcre3-dev libmysqlclient-dev libssl-dev libsasl2-dev libpq-dev libcdb-dev -y
root@debian:/usr/src/postfix-2.7.1# aptitude install libldap2-dev -y

Em seguida, vamos remover o pacote do Postfix que vem junto com a distribuição e instalar o pacote compilado com suporte a quota.

root@debian:/usr/src/postfix-2.7.1# dpkg-buildpackage
root@debian:/usr/src/postfix-2.7.1# cd ../
root@debian:/usr/src# apt-get remove --purge postfix -y
root@debian:/usr/src# dpkg -i postfix_*.deb

Durante o processo de instalação, teremos que responder algumas perguntas na instalação dos pacotes.

Postfix Configuration

Tipo geral de configuração de mail: Site Internet
Nome de mail do sistema: mail.dominio.com.br

Em seguida, instale alguns pacotes extras necessários.

root@debian:/usr/src# dpkg -i postfix-doc*.deb
root@debian:/usr/src# dpkg -i postfix-mysql*.deb
root@debian:/usr/src# dpkg -i postfix-pcre*.deb

Agora podemos instalar o restante dos pacotes que se fazem necessários.

root@debian:~# aptitude install sasl2-bin libsasl2-2 libsasl2-modules libsasl2-modules-sql libsasl2-modules-gssapi-heimdal 
root@debian:~# aptitude install postfix-policyd-spf-perl bsd-mailx procmail gamin
root@debian:~# aptitude install mysql-server-5.1 mysql-client-5.1 libpam-mysql 

Ajustando o Sistema

Primeiramente precisamos ajustar o UID e GID da máquina para que as permissões possam ser atribuídas de maneira adequada.

root@debian:~# grep postfix /etc/passwd

postfix:x:104:107::/var/spool/postfix:/bin/false

Como podemos notar o GID do usuário postfix é 107. Esse valor vai ser usado para criarmos o usuário vmail que será responsável pelas mensagens e pela identificação dos módulos do courierauthmysql. Vamos criar um usuário com UID 107 no sistema para o funcionamento correto do sistema de vmail.

root@debian:~# adduser --system --shell /bin/false --home /srv/vmail --uid 107 --gid 107 vmail

Adicionando usuário de sistema 'vmail' (UID 107) ...
Adicionando novo usuário 'vmail' (UID 107) com grupo 'postfix' ...
Criando diretório pessoal '/srv/vmail' ...

Para manter algumas compatibilidades, vamos criar o link simbólico a seguir.

root@debian:~# cd /home
root@debian:~# ln -s /srv/vmail

Não esqueça de alterar as permissões dos diretórios que o Postfix utiliza no sistema.

root@debian:~# chgrp -R postfix /var/lib/postfix/

Também precisamos cadastrar o usuário postfix no grupo do sasl para os acessos corretos aos diretórios.

root@debian:~# usermod -G sasl postfix

E por fim, precisamos configura o home do usuário vmail corretamente também.

root@debian:~# chown -R vmail:postdrop /srv/vmail

Configurando o MySQL

Aqui iremos criar um usuário mail e uma base de dados para que o Postfix dentro do MySQL possa realizar a conexão no banco.

root@debian:~# mysql -u root -p
Enter password: 

mysql> CREATE DATABASE mail;
Query OK, 1 row affected (0.00 sec)

mysql> CREATE USER 'mail'@'localhost' IDENTIFIED BY 'senha_usuario_mail';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON `mail` . * TO 'mail'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye

Devido ao método chroot do Postfix, também precisamos criar um link do MySQL para que o acesso possa ser realizado corretamente.

root@debian:~# mkdir -p /var/spool/postfix/var/run/mysqld
root@debian:~# vi /etc/init.d/mysql

[...]
case "${1:-''}" in
  'start')

  [...]

  fi
  /bin/ln -f /var/run/mysqld/mysqld.sock /var/spool/postfix/var/run/mysqld/mysqld.sock
  ;;

[...]

Configurando a PAM

Aqui precisamos configurar a PAM para conexão no banco de dados.

Primeiramente, vamos realizar um backup dos arquivos atuais.

root@debian:~# mv /etc/pam.d/pop3 /etc/pam.d/pop3.bkp
root@debian:~# mv /etc/pam.d/imap /etc/pam.d/imap.bkp
root@debian:~# mv /etc/pam.d/smtp /etc/pam.d/smtp.bkp

Em seguida, podemos criar o arquivo pop3 com os dados para conexão no banco.

root@debian:~# vi /etc/pam.d/pop3

auth required pam_mysql.so host=127.0.0.1 db=mail user=mail passwd=senha_usuario_mail table=mailbox usercolumn=username passwdcolumn=password crypt=1
account sufficient pam_mysql.so host=127.0.0.1 db=mail user=mail passwd=senha_usuario_mail table=mailbox usercolumn=username passwdcolumn=password crypt=1

Como o conteúdo é idêntico a todos, podemos apenas duplicar o arquivo criado para os demais arquivos necessários da PAM.

root@debian:~# cp /etc/pam.d/pop3 /etc/pam.d/imap
root@debian:~# cp /etc/pam.d/pop3 /etc/pam.d/smtp

Ajustando o SASL

Após o Postfix configurado, crie o seguinte arquivo e adicione as linhas de configuração nele.

root@debian:~# vi /usr/lib/sasl2/smtpd.conf

#
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
auxprop_plugin: sql
allow_plaintext: true
sql_verbose: yes
sql_engine: mysql
sql_hostnames: localhost
sql_user: mail
sql_passwd: senha_usuario_mail
sql_database: mail
#sql_select: select password from mailbox where username = '%u@%r'
sql_select: select password from mailbox where username = '%u'

Precisamos também ajudar a permissão do arquivo smtpd.conf.

root@debian:~# chmod o= /usr/lib/sasl2/smtpd.conf

Depois crie o link simbólico a seguir.

root@debian:~# ln -s /usr/lib/sasl2/smtpd.conf /etc/postfix/sasl/smtpd.conf

Vamos agora habilitar o sasl para ser iniciado e para que trabalhe enjaulado junto com o Postfix.

root@debian:~# vi /etc/default/saslauthd

[...]
START=yes
[...]

#OPTIONS="-c -m /var/run/saslauthd"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"

Em seguida vamos criar o diretório necessário para o funcionamento correto do sasl.

root@debian:~# mkdir -p /var/spool/postfix/var/run/saslauthd

Tambem precisamos ajustar as permissões do diretóriodo sasl para que o Postfix possa trabalhar.

root@debian:~# chown postfix /var/spool/postfix/var/run/saslauthd/

Em seguida crie o link simbolico a seguir.

root@debian:~# cd /var/run
root@debian:~# mv saslauthd saslauthd.bkp
root@debian:~# ln -s /var/spool/postfix/var/run/saslauthd/

Feito isso, reinicie o serviço saslauthd.

root@debian:~# /etc/init.d/saslauthd restart

Criando o certificado para Criptografia com TLS

root@debian:~# cd /etc/postfix
root@debian:/etc/postfix# openssl req -new -x509 -nodes -out /etc/postfix/smtp.exemplo.com.br.pem  -keyout /etc/postfix/smtp.exemplo.com.br.pem -days 3650

Configurando o Postfix

Primeiramente vamos acertar o nome de origem dos emails:

root@debian:~# vi /etc/mailname

mail.dominio.com.br

Vamos aproveitar e ajustar os arquivos de aliases. Primeiro vamos mover os arquivos aliases para o /etc/postfix.

root@debian:~# mv /etc/aliases* /etc/postfix 

Em seguida ajuste o arquivo aliases alterando o alias da conta root para uma conta de usuário admin do sistema.

root@debian:~# vi /etc/postfix/aliases

[...]

root:	conta@dominio.com.br

E para validar, recarregar as configurações dos alias.

root@debian:~# postalias /etc/postfix/aliases

Em seguida, faça um backup do main.cf original para configurar o sistema na nossa necessidade.

root@debian:~# mv main.cf main.cf.orig
root@debian:~# vi /etc/postfix/main.cf

smtpd_banner = $myhostname ESMTP
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

readme_directory = no

# TLS parameters
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_cert_file = /etc/postfix/mail.dominio.com.br.pem
smtpd_tls_key_file = /etc/postfix/mail.dominio.com.br.pem
smtpd_tls_CAfile = /etc/postfix/mail.dominio.com.br.pem
smtpd_use_tls=yes
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases

myhostname = mail.dominio.com.br
mydomain = dominio.com.br
myorigin = $myhostname
mydestination = $myhostname, localhost
relayhost =
#mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mynetworks = 127.0.0.0/8, 200.200.200.32/27
relay_domains = $mydestination

home_mailbox = Maildir/
#mail_spool_directory = /var/mail

#mailbox_command = procmail -a "$EXTENSION"
mailbox_command = /usr/bin/procmail -a "$EXTENSION" DEFAULT=$HOME/Maildir/ MAILDIR=$HOME/Maildir/
mailbox_size_limit = 0
message_size_limit = 10240000
recipient_delimiter = +

mynetworks_style = subnet
inet_interfaces = all

default_transport = smtp

# Amavis
#content_filter=smtp-amavis:[127.0.0.1]:10024

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain = $mydomain
#smtpd_tls_auth_only = no
#smtpd_sasl_application_name = smtpd

# MySQL
transport_maps = mysql:/etc/postfix/mysql_transport_maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_transport = virtual
virtual_minimum_uid = 107
virtual_uid_maps = static:107
virtual_gid_maps = static:107
virtual_mailbox_base = /srv/vmail

# Quota
virtual_mailbox_limit = 51200000
virtual_mailbox_limit = 0
virtual_maildir_extended = yes
virtual_mailbox_limit_override = yes
virtual_mailbox_limit_maps= mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_overquota_bounce = yes
virtual_maildir_limit_message = Desculpe, o diretório de correio do usuário estourou sua quota, por favor tente novamente depois.

#Limitar a quantidade de CC
smtpd_recipient_limit = 30

#Gerenciamento de tempo de fila
#queue_run_delay = 150s
#minimal_backoff_time = 150s
#maximal_backoff_time = 150s
bounce_queue_lifetime = 300s
maximal_queue_lifetime = 300s

#smtpd_helo_restrictions =
  #permit_mynetworks,
  #permit_sasl_authenticated,
  #reject_invalid_hostname,
  #reject_unknown_hostname,
  #reject_non_fqdn_hostname,
  #reject_unauth_pipelining

smtpd_client_restrictions =
  permit_mynetworks,
  permit_sasl_authenticated,
  reject_unauth_pipelining,
  reject_rbl_client dnsbl.njabl.org,
  reject_rbl_client list.dsbl.org,
  reject_rbl_client bl.spamcop.net,
  reject_rbl_client rbl.brasilrbl.com.br
  #reject_rbl_client zen.spamhaus.org,
  #reject_rbl_client cbl.abuseat.org
  #reject_unknown_client,

smtpd_sender_restrictions =
  permit_sasl_authenticated,
  reject_non_fqdn_sender,
  reject_unauth_pipelining,
  reject_unknown_sender_domain
  #check_sender_access regexp:/etc/postfix/sender-proibidos

smtpd_recipient_restrictions =
  permit_mynetworks,
  permit_sasl_authenticated,
  reject_invalid_hostname,
  reject_non_fqdn_hostname,
  reject_non_fqdn_recipient,
  reject_unauth_destination,
  reject_unauth_pipelining,
  reject_unknown_recipient_domain,
  #check_policy_service inet:127.0.0.1:60000
  #check_recipient_access regexp:/etc/postfix/sender-proibidos
  #reject_unknown_client,

O próximo passo é criar os arquivos necessários para conexão e acsso ao banco de dados.

root@debian:~# vi /etc/postfix/mysql_transport_maps.cf

user = mail
password = senha_usuario_mail
hosts = localhost
dbname = mail
table = domain
select_field = transport
where_field = domain
root@debian:~# vi /etc/postfix/mysql_virtual_alias_maps.cf

user = mail
password = senha_usuario_mail
hosts = localhost
dbname = mail
table = alias
select_field = goto
where_field = address
root@debian:~# vi /etc/postfix/mysql_virtual_domains_maps.cf

user = mail
password = senha_usuario_mail
hosts = localhost
dbname = mail
table = domain
select_field = domain
where_field = domain
#additional_conditions = and backupmx = '0' and active = '1'
root@debian:~# vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cf

user = mail
password = senha_usuario_mail
hosts = localhost
dbname = mail
table = mailbox
select_field = quota
where_field = username
root@debian:~# vi /etc/postfix/mysql_virtual_mailbox_maps.cf

user = mail
password = senha_usuario_mail
hosts = localhost
dbname = mail
table = mailbox
select_field = CONCAT(SUBSTRING_INDEX(username,'@',-1),'/',SUBSTRING_INDEX(username,'@',1),'/')
where_field = username

Precisamos também ajustar algumas permissões

chmod o= /etc/postfix/mysql_*
chgrp postfix /etc/postfix/mysql_*

E já podemos reiniciar o serviço do Postfix.

root@debian:~# /etc/init.d/postfix restart

Configurando o Courier

Primeiramente vamos instalar os pacotes necessários.

root@debian:~# aptitude install courier-authdaemon courier-authlib courier-base courier-imap courier-pop courier-authlib-mysql

Assim como fizemos em todos os outros serviços, também precisamos configurar o Courier para conectar na base MySQL.

root@debian:~# vi /etc/courier/authdaemonrc

#authmodulelist="authpam"
authmodulelist="authmysql"

# confirme se a linha a seguir possui o módulo de auticaçãodo mysql

authmodulelistorig="authuserdb authpam authpgsql authldap authmysql authcustom authpipe"

Em seguida, faça um backup do arquivo authmysqlrc e configure seguindo o modelo a seguir.

root@debian:~# mv /etc/courier/authmysqlrc /etc/courier/authmysqlrc.orig
root@debian:~# vi /etc/courier/authmysqlrc

#
MYSQL_SERVER localhost
MYSQL_USERNAME mail
MYSQL_PASSWORD senha_usuario_mail
MYSQL_PORT 3306
MYSQL_DATABASE mail
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD 107
MYSQL_GID_FIELD 107
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD "/srv/vmail"
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(username,'@',-1),'/',SUBSTRING_INDEX(username,'@',1),'/')
MYSQL_QUOTA_FIELD quota

Reinicie os serviços do Courier:

root@debian:~# /etc/init.d/courier-authdaemon restart
root@debian:~# /etc/init.d/courier-imap restart
root@debian:~# /etc/init.d/courier-pop restart

Instalando e Configurando o Postfixadmin

Instalar os pacotes do apache e php, necessários.

root@debian:~# aptitude install apache2 libapache2-mod-php5 
root@debian:~# aptitude install php5 php5-gd php5-imap php5-mysql php5-mcrypt php5-xmlrpc php5-intl php-pear
root@debian:~# cd /var/www
root@debian:/var/www# wget -c http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.3.5/postfixadmin-2.3.5.tar.gz
root@debian:/var/www# tar xzvf postfixadmin-2.3.5.tar.gz
root@debian:/var/www# mv postfixadmin-2.3.5 postfixadmin

Com isso já temos o aplicativo disponível. Hora de configurá-lo.

root@debian:/var/www# vi postfixadmin/config.inc.php

[...]
$CONF['configured'] = true;
[...]
$CONF['default_language'] = 'pt-br';
[...]
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'mail';
$CONF['database_password'] = 'senha_usuario_mail';
$CONF['database_name'] = 'mail';
$CONF['database_prefix'] = '';
[...]
$CONF['admin_email'] = 'postmaster@dominio.com.br';
[...]
$CONF['smtp_server'] = 'localhost';
$CONF['smtp_port'] = '25';
[...]
$CONF['min_password_length'] = 6;
$CONF['generate_password'] = 'YES';
$CONF['show_password'] = 'YES';
$CONF['page_size'] = '50';
[...]
$CONF['default_aliases'] = array (
'abuse' => 'abuse@dominio.com.br',
'hostmaster' => 'hostmaster@dominio.com.br',
'postmaster' => 'postmaster@dominio.com.br',
'webmaster' => 'webmaster@dominio.com.br'
);
[...]
$CONF['aliases'] = '0';
$CONF['mailboxes'] = '0';
$CONF['maxquota'] = '0'
[...]
$CONF['quota'] = 'YES';
$CONF['quota_multiplier'] = '1024000';
[...]
$CONF['transport_options'] = array (
    'virtual',  // for virtual accounts
    'local',    // for system accounts
    'vacation', // for system accounts
    'relay'     // for backup mx
);
$CONF['transport_default'] = 'virtual';
[...]
$CONF['welcome_text'] = <<<EOM
Olá,

Bem vindo a sua nova conta de e-mail.
EOM;
[...]

Com o arquivo de configuração pronto, acesse o postfixadmin pelo seu navegador favorito e configure-o seguindo o que lhe pede.

http://ip_do_seu_servidor/postfixadmin/setup.php
Postfix Admin Setup Checker

Change setup password

Setup password: ******
Setup password (again): ******

Generate password hash

Setup password

O sistema irá gerar um password hash para você.

Adicione a mesma em config.inc.php

root@debian:/var/www# vi postfixadmin/config.inc.php

$CONF['setup_password'] = 'password_hash';

Em seguida, preencha o restante dos dados para criar o usuário superadmin do Postfixadmin.

Create superadmin account
Setup password: mesma_senha_de_setup
Administrador: endereço_de_email
Senha: ******
Senha (confirmação): ******	 

Criar administrador

Em seguida, a mensagem de sucesso.

Administrador criado!
(fabriciovc@dominio.com.br)

Para finalizar, basta apagar o arquivo setup.php

root@debian:~ # rm postfixadmin/setup.php

Acesse o Postfix pelo seu navegador, loque com o email do administrador que você criou e agora é só criar os domínios e as contas de correio.

http://ip_do_seu_servidor/postfixadmin/

Testando o SASL

Depois que o usuário estiver devidamente criado na base, você pode testar se o usuário esta autenticando normalmente por SASL. Você poderá usar o seguinte comando:

root@debian:~# testsaslauthd -u fabriciovc@dominio.com.br -p senha
0: OK "Success."

ou

root@debian:~# testsaslauthd -u fabriciovc@dominio.com.br -p senha -f /var/spool/postfix/var/run/saslauthd/mux
0: OK "Success."

Implementando Antivirus e Antispan com Amavisd-new

Como de costume, primeiramente, vamos instalar os pacotes.

root@debian:~# aptitude install bzip2 unrar unzip zip arj pax arc ripole cabextract lzop p7zip-full -y
root@debian:~# aptitude install clamav clamav-freshclam clamav-daemon amavisd-new razor spamassassin

Instalando suporte a razor e pyzor

root@debian:~# aptitude install libnet-dns-perl razor pyzor -y

Acertando as configurações do razor e do pyzor

root@debian:~# su - amavis -c 'razor-admin -d --create'
root@debian:~# su - amavis -c 'razor-admin -register'
root@debian:~# su - amavis -c 'razor-admin -discover'
root@debian:~# su - amavis -c 'pyzor discover'

Configuranções do Spamassassin

Em seguida vamos habilitar o uso do Spamassassin.

root@debian:~# vi /etc/default/spamassassin

ENABLED=1

[...]

Agora podemos configurar o Spamassassin.

root@debian:~# vi /etc/spamassassin/local.cf

rewrite_header Subject ***SPAM***
report_safe 0
trusted_networks 127. 192.168.0.
required_score 2.0

[...]

Configurando o Amavisd

root@debian:~# vi /etc/amavis/conf.d/20-debian_defaults

# Descomente as linhas a seguir:

[...]
  [ qr'^\.(Z|gz|bz2)$'           => 0 ],  # allow any in Unix-compressed
  [ qr'^\.(rpm|cpio|tar)$'       => 0 ],  # allow any in Unix-type archives
  [ qr'^\.(zip|rar|arc|arj|zoo)$'=> 0 ],  # allow any within such archives
[...]
# Caso precise habilitar whitelist para algum domínio específico, use o modelo a seguir:

[...]
  # ENVELOPE SENDER SOFT-WHITELISTING / SOFT-BLACKLISTING

  @whitelist_sender_maps = ( new_RE(
    qr'.*@dominio.com.br$'i,
  ));

Testando se o amavis esta respondendo

root@debian:~# telnet 127.0.0.1 10024

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
quit
221 2.0.0 [127.0.0.1] amavisd-new closing transmission channel
Connection closed by foreign host.

Ajustando o Postfix

Para que o Postfix acione o Amavis para verificação de virus e spam, precisamos configurá-lo.

root@debian:~# vi /etc/postfix/master.cf

### Amavisd-new ###
smtp-amavis unix -      -       y       -       2  smtp
  -o smtp_data_done_timeout=1200
  -o smtp_send_xforward_command=yes
  -o disable_dns_lookups=yes
 
127.0.0.1:10025 inet n  -       y       -       -  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 smtpd_error_sleep_time=0
  -o smtpd_soft_error_limit=1001
  -o smtpd_hard_error_limit=1000

Não esqueça de reiniciar o serviço.

root@debian:~# /etc/init.d/postfix restart
root@debian:~# telnet 127.0.0.1 10025

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 cortesvillela.com.br ESMTP Postfix (Debian/GNU)
quit
221 Bye
Connection closed by foreign host.

Não esqueça de adicionar ao final arquivo /etc/postfix/main.cf a linha abaixo e reiniciar o serviço do Postfix:

root@debian:~# vi /etc/postfix/main.cf

content_filter=smtp-amavis:[127.0.0.1]:10024 

Reiniciando os Serviços

root@localhost:~# /etc/init.d/clamav-daemon restart
root@localhost:~# /etc/init.d/clamav-freshclam restart
root@localhost:~# /etc/init.d/spamassassin restart
root@localhost:~# /etc/init.d/amavis restart
root@localhost:~# /etc/init.d/postfix restart

Instalando o Postgrey

Primeiramente vamos instalar os pacotes do Postgrey.

root@debian:~# aptitude install postgrey

Em seguida, configure o tempo de delay de entrega dos emails.

root@debian:~# vi /etc/default/postgrey

POSTGREY_OPTS="--inet=10023 --delay=60"

Agora adicione no postfix a entrada para ele acionar o Postgrey para controle de spam.

root@debian:~# vi /etc/postfix/main.cf

smtpd_recipient_restrictions =
  [...]
  check_policy_service inet:127.0.0.1:60000

Testando o Imap

root@debian:~# telnet localhost 143

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION] 
    Courier-IMAP ready. Copyright 1998-2010 Double Precision, Inc.  See COPYING for distribution information.
a login fabriciovc@dominio.com.br senha
a OK LOGIN Ok.
a logout
* BYE Courier-IMAP server shutting down
a OK LOGOUT completed
Connection closed by foreign host.

Testando o Pop

root@debian:~# telnet localhost 110

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.
user 
 fabriciovc@dominio.com.br
+OK Password required.
pass senha
+OK logged in.
quit
+OK Bye-bye.
Connection closed by foreign host.

Logs e Outras Informações

Verifique os logs para ver se não é mostrada nenhuma falha.

Agora teste enviando um e-mail com um virus para qualquer destinatário deste equipamento e verifique se está funcionando corretamente.

Um virus pode ser baixado em http://www.eicar.org/85-0-Download.html caso queira testar a interceptação de virus.

TODO - Itens que precisam ser homologados

Vacation

O Vacation funciona para gerenciar as mensagens de ausência ou ferias do usuários. Útil quando você sai de férias por exemplo e não vai ler e-mails por um tempo e deixa uma mensagem pré-definida com as informações sobre as pessoas que vão ser contactadas no tempo que você estará fora.

Preparando o ambiente

Primeiramente vamos criar o grupo e o usuário vacation.

root@debian:~# groupadd vacation
root@debian:~# useradd -d /var/spool/vacation -g vacation -s /bin/false -m vacation

E seguida vamos copiar o arquivo do vacation para o seu HOME.

root@debian:~# cp /var/www/postfixadmin/VIRTUAL_VACATION/vacation.pl /var/spool/vacation/

Agora vamos criar o diretório que vai armazenar os logs e acertar as permissões dos diretórios e arquivos.

root@debian:~# mkdir /var/log/vacation/
root@debian:~# chown -R vacation:vacation /var/spool/vacation/
root@debian:~# chown -R vacation:vacation /var/log/vacation/
root@debian:~# chmod 750 /var/spool/vacation/
root@debian:~# chmod 700 /var/spool/vacation/vacation.pl
root@debian:~# touch /var/log/vacation.log
root@debian:~# chown vacation:vacation /var/log/vacation.log

Precisamos instalar as dependências para o vacation funcionar corretamente.

root@debian:~# aptitude install libmail-sender-perl libemail-valid-perl libmime-perl liblog-log4perl-perl liblog-dispatch-perl -y
root@debian:~# aptitude install libmail-sender-perl libgetopt-argvfile-perl libmime-charset-perl libmime-encwords-perl  -y

Aqui iremos acertar as configurações no arquivo vacation.pl.

root@debian:~# vim /var/spool/vacation/vacation.pl

[...]
#our $db_type = 'Pg'; ->temos que comentar essa linha
our $db_type = 'mysql';
 
# leave empty for connection via UNIX socket
our $db_host = '';
 
# connection details
our $db_username = 'mail';
our $db_password = 'senha';
our $db_name     = 'mail';
 
our $vacation_domain = 'autoreply.dominio.com.br';
 
[...]
our $syslog = 1;
our $log_to_file = 1; 
 
[...]
my $interval = 1*1*1;
# disabled by default
#our $interval = 0; -> comentar essa linha e deixar my $interval = 60*60*24;

Uma etapa importante é criar dois domínios um principal e um domínio para o vacation que vão ser as auto repostas de ferias ou ausência.

Para isso, logue no Postfixadmin …

http://ip_servidor/postfixadmin
  • Selecione Domínios/Criar domínio
  • Agora informe o domínio
  • A sua descrição
  • Informe uma cota ou deixe ela como 0
  • Transporte deixe o virtual
  • Selecione Adicionar aliases padrão
  • E selecione Criar domínio

Agora vamos criar o domínio do vacation

  • O domínio agora será “autoreply.dominio.com.br” pois “dominio.com.br” é o domínio anteriormente criado
  • Coloque uma descrição para ele exemplo domínio de ferias
  • Selecione em transporte como vacation
  • Selecione criar domínio
  • Pode sair dessa tela.

Quota Notifications

Por: Fernando Bortolanza | fernandobortolanza[em]gmail.com

Se você quer receber as notificações de uso quota das contas de email, caso a o espaço destinado esteja cheio, siga os passos a seguir:

root@debian:~# cd /usr/local/sbin/
root@debian:~# wget http://puuhis.net/vhcs/quota.txt
root@debian:~# mv quota.txt quota_notify
root@debian:~# chmod 755 quota_notify

Abra o arquivo quota_notify e edite as seguintes variáveis:

root@debian:~# vi /usr/local/sbin/quota_notify

my $POSTFIX_CF = "/etc/postfix/main.cf";
my $MAILPROG = "/usr/sbin/sendmail -t";
my $WARNPERCENT = 80;
my @POSTMASTERS = ('postmaster@dominio.com.br');
my $CONAME = 'ISP.tld';
my $COADDR = 'postmaster@dominio.com.br';
my $SUADDR = 'postmaster@dominio.com.br';
my $MAIL_REPORT = 1;
my $MAIL_WARNING = 1;

E para finalizar, vamos agendar oo script para nos avisar usando o cron.

root@debian:~# crontab -e

[...]
0 0 * * * /usr/local/sbin/quota_notify &> /dev/null

Voltar

linux/artigos/smtp-postfix-mysql-postfixadmin.txt · Última modificação: 13/01/2015 10:44 (edição externa)