Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

linux:artigos:smtp-postfix-mysql-postfixadmin [13/01/2015 10:44] (atual)
Linha 1: Linha 1:
 +~~NOTOC~~
 +====== 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 =====
 +
 +<​code>​
 +root@debian:​~#​ aptitude update && aptitude dist-upgrade -y
 +</​code>​
 +
 +===== 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.
 +
 +<​code>​
 +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
 +</​code>​
 +
 +Em seguida, vamos instalar alguns pacotes necessários.
 +
 +<​code>​
 +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
 +</​code>​
 +
 +Em seguida, vamos remover o pacote do Postfix que vem junto com a distribuição e instalar o pacote compilado com suporte a quota.
 +
 +<​code>​
 +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
 +</​code>​
 +
 +Durante o processo de instalação,​ teremos que responder algumas perguntas na instalação dos pacotes.
 +
 +<​code>​
 +Postfix Configuration
 +
 +Tipo geral de configuração de mail: Site Internet
 +Nome de mail do sistema: mail.dominio.com.br
 +</​code>​
 +
 +Em seguida, instale alguns pacotes extras necessários.
 +
 +<​code>​
 +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
 +</​code>​
 +
 +Agora podemos instalar o restante dos pacotes que se fazem necessários.
 +
 +<​code>​
 +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 ​
 +</​code>​
 +
 +===== 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.
 +
 +<​code>​
 +root@debian:​~#​ grep postfix /etc/passwd
 +
 +postfix:​x:​104:​107::/​var/​spool/​postfix:/​bin/​false
 +</​code>​
 +
 +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.
 +
 +<​code>​
 +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'​ ...
 +</​code>​
 +
 +Para manter algumas compatibilidades,​ vamos criar o link simbólico a seguir.
 +
 +<​code>​
 +root@debian:​~#​ cd /home
 +root@debian:​~#​ ln -s /srv/vmail
 +</​code>​
 +
 +Não esqueça de alterar as permissões dos diretórios que o Postfix utiliza no sistema.
 +
 +<​code>​
 +root@debian:​~#​ chgrp -R postfix /​var/​lib/​postfix/​
 +</​code>​
 +
 +Também precisamos cadastrar o usuário postfix no grupo do //​**sasl**//​ para os acessos corretos aos diretórios.
 +
 +<​code>​
 +root@debian:​~#​ usermod -G sasl postfix
 +</​code>​
 +
 +E por fim, precisamos configura o home do usuário vmail corretamente também.
 +
 +<​code>​
 +root@debian:​~#​ chown -R vmail:​postdrop /srv/vmail
 +</​code>​
 +
 +===== 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.
 +
 +<​code>​
 +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
 +</​code>​
 +
 +Devido ao método //chroot// do Postfix, também precisamos criar um link do MySQL para que o acesso possa ser realizado corretamente.
 +
 +<​code>​
 +root@debian:​~#​ mkdir -p /​var/​spool/​postfix/​var/​run/​mysqld
 +</​code>​
 +
 +<​code>​
 +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
 +  ;;
 +
 +[...]
 +</​code>​
 +
 +===== Configurando a PAM =====
 +
 +Aqui precisamos configurar a PAM para conexão no banco de dados.
 +
 +Primeiramente,​ vamos realizar um backup dos arquivos atuais.
 +
 +<​code>​
 +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
 +</​code>​
 +
 +Em seguida, podemos criar o arquivo pop3 com os dados para conexão no banco.
 +
 +<​code>​
 +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
 +</​code>​
 +
 +Como o conteúdo é idêntico a todos, podemos apenas duplicar o arquivo criado para os demais arquivos necessários da PAM.
 +
 +<​code>​
 +root@debian:​~#​ cp /​etc/​pam.d/​pop3 /​etc/​pam.d/​imap
 +root@debian:​~#​ cp /​etc/​pam.d/​pop3 /​etc/​pam.d/​smtp
 +</​code>​
 +
 +===== Ajustando o SASL =====
 +
 +Após o Postfix configurado,​ crie o seguinte arquivo e adicione as linhas de configuração nele.
 +
 +<​code>​
 +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'​
 +</​code>​
 +
 +Precisamos também ajudar a permissão do arquivo //​**smtpd.conf**//​.
 +
 +<​code>​
 +root@debian:​~#​ chmod o= /​usr/​lib/​sasl2/​smtpd.conf
 +</​code>​
 +
 +Depois crie o link simbólico a seguir.
 +
 +<​code>​
 +root@debian:​~#​ ln -s /​usr/​lib/​sasl2/​smtpd.conf /​etc/​postfix/​sasl/​smtpd.conf
 +</​code>​
 +
 +Vamos agora habilitar o //​**sasl**//​ para ser iniciado e para que trabalhe enjaulado junto com o Postfix.
 +
 +<​code>​
 +root@debian:​~#​ vi /​etc/​default/​saslauthd
 +
 +[...]
 +START=yes
 +[...]
 +
 +#​OPTIONS="​-c -m /​var/​run/​saslauthd"​
 +OPTIONS="​-c -m /​var/​spool/​postfix/​var/​run/​saslauthd -r"
 +</​code>​
 +
 +Em seguida vamos criar o diretório necessário para o funcionamento correto do //​**sasl**//​.
 +
 +<​code>​
 +root@debian:​~#​ mkdir -p /​var/​spool/​postfix/​var/​run/​saslauthd
 +</​code>​
 +
 +Tambem precisamos ajustar as permissões do diretóriodo //​**sasl**//​ para que o Postfix possa trabalhar.
 +
 +<​code>​
 +root@debian:​~#​ chown postfix /​var/​spool/​postfix/​var/​run/​saslauthd/​
 +</​code>​
 +
 +Em seguida crie o link simbolico a seguir.
 +
 +<​code>​
 +root@debian:​~#​ cd /var/run
 +root@debian:​~#​ mv saslauthd saslauthd.bkp
 +root@debian:​~#​ ln -s /​var/​spool/​postfix/​var/​run/​saslauthd/​
 +</​code>​
 +
 +Feito isso, reinicie o serviço //​**saslauthd**//​.
 +
 +<​code>​
 +root@debian:​~#​ /​etc/​init.d/​saslauthd restart
 +</​code>​
 +
 +===== Criando o certificado para Criptografia com TLS =====
 +
 +<​code>​
 +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
 +</​code>​
 +
 +===== Configurando o Postfix =====
 +
 +Primeiramente vamos acertar o nome de origem dos emails:
 +
 +<​code>​
 +root@debian:​~#​ vi /​etc/​mailname
 +
 +mail.dominio.com.br
 +</​code>​
 +
 +Vamos aproveitar e ajustar os arquivos de //​**aliases**//​. Primeiro vamos mover os arquivos aliases para o //​**/​etc/​postfix**//​.
 +
 +<​code>​
 +root@debian:​~#​ mv /​etc/​aliases* /​etc/​postfix ​
 +</​code>​
 +
 +Em seguida ajuste o arquivo aliases alterando o //alias// da conta root para uma conta de usuário admin do sistema.
 +
 +<​code>​
 +root@debian:​~#​ vi /​etc/​postfix/​aliases
 +
 +[...]
 +
 +root:​ conta@dominio.com.br
 +</​code>​
 +
 +E para validar, recarregar as configurações dos alias.
 +
 +<​code>​
 +root@debian:​~#​ postalias /​etc/​postfix/​aliases
 +</​code>​
 +
 +Em seguida, faça um backup do //​**main.cf**//​ original para configurar o sistema na nossa necessidade.
 +
 +<​code>​
 +root@debian:​~#​ mv main.cf main.cf.orig
 +</​code>​
 +
 +<​code>​
 +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,​
 +</​code>​
 +
 +O próximo passo é criar os arquivos necessários para conexão e acsso ao banco de dados. ​
 +
 +<​code>​
 +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
 +</​code>​
 +
 +<​code>​
 +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
 +</​code>​
 +
 +<​code>​
 +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'​
 +</​code>​
 +
 +<​code>​
 +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
 +</​code>​
 +
 +<​code>​
 +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
 +</​code>​
 +
 +Precisamos também ajustar algumas permissões
 +
 +<​code>​
 +chmod o= /​etc/​postfix/​mysql_*
 +chgrp postfix /​etc/​postfix/​mysql_*
 +</​code>​
 +
 +E já podemos reiniciar o serviço do Postfix.
 +
 +<​code>​
 +root@debian:​~#​ /​etc/​init.d/​postfix restart
 +</​code>​
 +
 +===== Configurando o Courier =====
 +
 +Primeiramente vamos instalar os pacotes necessários.
 +
 +<​code>​
 +root@debian:​~#​ aptitude install courier-authdaemon courier-authlib courier-base courier-imap courier-pop courier-authlib-mysql
 +</​code>​
 +
 +Assim como fizemos em todos os outros serviços, também precisamos configurar o Courier para conectar na base MySQL.
 +
 +<​code>​
 +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"​
 +</​code>​
 +
 +Em seguida, faça um backup do arquivo //​**authmysqlrc**//​ e configure seguindo o modelo a seguir.
 +
 +<​code>​
 +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
 +</​code>​
 +
 +Reinicie os serviços do Courier:
 +
 +<​code>​
 +root@debian:​~#​ /​etc/​init.d/​courier-authdaemon restart
 +root@debian:​~#​ /​etc/​init.d/​courier-imap restart
 +root@debian:​~#​ /​etc/​init.d/​courier-pop restart
 +</​code>​
 +
 +===== Instalando e Configurando o Postfixadmin =====
 +
 +Instalar os pacotes do //apache// e //php//, necessários.
 +
 +<​code>​
 +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
 +</​code>​
 +
 +<​code>​
 +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
 +</​code>​
 +
 +Com isso já temos o aplicativo disponível. Hora de configurá-lo.
 +
 +<​code>​
 +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;
 +[...]
 +</​code>​
 +
 +Com o arquivo de configuração pronto, acesse o //​postfixadmin//​ pelo seu navegador favorito e configure-o seguindo o que lhe pede.
 +
 +<​code>​
 +http://​ip_do_seu_servidor/​postfixadmin/​setup.php
 +</​code>​
 +
 +<​code>​
 +Postfix Admin Setup Checker
 +
 +Change setup password
 +
 +Setup password: ******
 +Setup password (again): ******
 +
 +Generate password hash
 +
 +Setup password
 +</​code>​
 +
 +O sistema irá gerar um //password hash// para você.
 +
 +Adicione a mesma em //​**config.inc.php**//​
 +
 +<​code>​
 +root@debian:/​var/​www#​ vi postfixadmin/​config.inc.php
 +
 +$CONF['​setup_password'​] = '​password_hash';​
 +</​code>​
 +
 +Em seguida, preencha o restante dos dados para criar o usuário //​superadmin//​ do Postfixadmin.
 +
 +<​code>​
 +Create superadmin account
 +Setup password: mesma_senha_de_setup
 +Administrador:​ endereço_de_email
 +Senha: ******
 +Senha (confirmação):​ ******  ​
 +
 +Criar administrador
 +</​code>​
 +
 +Em seguida, a mensagem de sucesso.
 +
 +<​code>​
 +Administrador criado!
 +(fabriciovc@dominio.com.br)
 +</​code>​
 +
 +Para finalizar, basta apagar o arquivo //​**setup.php**//​
 +
 +<​code>​
 +root@debian:​~ # rm postfixadmin/​setup.php
 +</​code>​
 +
 +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.
 +
 +<​code>​
 +http://​ip_do_seu_servidor/​postfixadmin/​
 +</​code>​
 +
 +===== 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:
 +
 +<​code>​
 +root@debian:​~#​ testsaslauthd -u fabriciovc@dominio.com.br -p senha
 +0: OK "​Success."​
 +</​code>​
 +
 +ou
 +
 +<​code>​
 +root@debian:​~#​ testsaslauthd -u fabriciovc@dominio.com.br -p senha -f /​var/​spool/​postfix/​var/​run/​saslauthd/​mux
 +0: OK "​Success."​
 +</​code>​
 +
 +===== Implementando Antivirus e Antispan com Amavisd-new =====
 +
 +Como de costume, primeiramente,​ vamos instalar os pacotes.
 +
 +<​code>​
 +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
 +</​code>​
 +
 +==== Instalando suporte a razor e pyzor ====
 +
 +<​code>​
 +root@debian:​~#​ aptitude install libnet-dns-perl razor pyzor -y
 +</​code>​
 +
 +Acertando as configurações do //razor// e do //pyzor//
 +
 +<​code>​
 +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'​
 +</​code>​
 +
 +==== Configuranções do Spamassassin ====
 +
 +Em seguida vamos habilitar o uso do Spamassassin.
 +
 +<​code>​
 +root@debian:​~#​ vi /​etc/​default/​spamassassin
 +
 +ENABLED=1
 +
 +[...]
 +</​code>​
 +
 +Agora podemos configurar o Spamassassin.
 +
 +<​code>​
 +root@debian:​~#​ vi /​etc/​spamassassin/​local.cf
 +
 +rewrite_header Subject ***SPAM***
 +report_safe 0
 +trusted_networks 127. 192.168.0.
 +required_score 2.0
 +
 +[...]
 +</​code>​
 +
 +==== Configurando o Amavisd ====
 +
 +<​code>​
 +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,​
 +  ));
 +</​code>​
 +
 +=== Testando se o amavis esta respondendo ===
 +
 +<​code>​
 +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.
 +</​code>​
 +
 +==== Ajustando o Postfix ====
 +
 +Para que o Postfix acione o Amavis para verificação de virus e spam, precisamos configurá-lo.
 +
 +<​code>​
 +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
 +</​code>​
 +
 +Não esqueça de reiniciar o serviço.
 +
 +<​code>​
 +root@debian:​~#​ /​etc/​init.d/​postfix restart
 +</​code>​
 +
 +<​code>​
 +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.
 +</​code>​
 +
 +Não esqueça de adicionar ao final arquivo //​**/​etc/​postfix/​main.cf**//​ a linha abaixo e reiniciar o serviço do Postfix:
 +
 +<​code>​
 +root@debian:​~#​ vi /​etc/​postfix/​main.cf
 +
 +content_filter=smtp-amavis:​[127.0.0.1]:​10024 ​
 +</​code>​
 +
 +==== Reiniciando os Serviços ====
 +
 +<​code>​
 +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
 +</​code>​
 +
 +===== Instalando o Postgrey =====
 +
 +Primeiramente vamos instalar os pacotes do Postgrey.
 +
 +<​code>​
 +root@debian:​~#​ aptitude install postgrey
 +</​code>​
 +
 +Em seguida, configure o tempo de delay de entrega dos emails.
 +
 +<​code>​
 +root@debian:​~#​ vi /​etc/​default/​postgrey
 +
 +POSTGREY_OPTS="​--inet=10023 --delay=60"​
 +</​code>​
 +
 +Agora adicione no postfix a entrada para ele acionar o Postgrey para controle de spam.
 +
 +<​code>​
 +root@debian:​~#​ vi /​etc/​postfix/​main.cf
 +
 +smtpd_recipient_restrictions =
 +  [...]
 +  check_policy_service inet:​127.0.0.1:​60000
 +</​code>​
 +
 +===== Testando o Imap =====
 +
 +<​code>​
 +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.
 +</​code>​
 +
 +===== Testando o Pop =====
 +
 +<​code>​
 +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.
 +</​code>​
 +
 +===== 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.
 +
 +<​code>​
 +root@debian:​~#​ groupadd vacation
 +root@debian:​~#​ useradd -d /​var/​spool/​vacation -g vacation -s /bin/false -m vacation
 +</​code>​
 +
 +E seguida vamos copiar o arquivo do vacation para o seu HOME.
 +
 +<​code>​
 +root@debian:​~#​ cp /​var/​www/​postfixadmin/​VIRTUAL_VACATION/​vacation.pl /​var/​spool/​vacation/​
 +</​code>​
 +
 +Agora vamos criar o diretório que vai armazenar os logs e acertar as permissões dos diretórios e arquivos.
 +
 +<​code>​
 +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
 +</​code>​
 +
 +Precisamos instalar as dependências para o vacation funcionar corretamente.
 +
 +<​code>​
 +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
 +</​code>​
 +
 +Aqui iremos acertar as configurações no arquivo //​vacation.pl//​.
 +
 +<​code>​
 +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;
 +</​code>​
 +
 +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 ...
 +
 +<​code>​
 +http://​ip_servidor/​postfixadmin
 +</​code>​
 +
 +  * 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:
 +
 +<​code>​
 +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
 +</​code>​
 +
 +Abra o arquivo quota_notify e edite as seguintes variáveis:
 +
 +<​code>​
 +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;
 +</​code>​
 +
 +E para finalizar, vamos agendar oo script para nos avisar usando o cron.
 +
 +<​code>​
 +root@debian:​~#​ crontab -e
 +
 +[...]
 +0 0 * * * /​usr/​local/​sbin/​quota_notify &> /dev/null
 +</​code>​
 +
 +
 +----
 +<​html>​
 +<a href="​javascript:​window.history.go(-1)">​Voltar</​a>​
 +</​html>​
  
linux/artigos/smtp-postfix-mysql-postfixadmin.txt · Última modificação: 13/01/2015 10:44 (edição externa)