Servidor de e-mail completo
Este artigo é uma revisão do artigo do Marco Máximo, também publicado aqui no VOL, que faz algumas atualizações e algumas correções, dentre elas: uso do SASL2 para autenticação, Uebimiau como webmail, tema do outlook express para o webmail, ferramentas de monitoria e análise do uso do servidor de e-mail.
Parte 4: Mais configurações (e mais testes!)
3.5. Copiar o arquivo de exemplo de warning de cota:
# cd /etc/courier
# cp /usr/share/doc/courier-base/examples/quotawarnmsg.example quotawarnmsg
3.6. Configurar o courier para autenticar no MySQL:
As configurações default dos arquivos imapd e pop3d, ao meu ver, já são boas. Altere caso você sinta necessidade.
Edite o /etc/courier/authmysqlrc. Esse arquivo é responsável pelas configurações do Courier para que ele conecte no MySQL e autentique os usuários. Edite-o conforme as suas configurações. Exemplo:
# vim /etc/courier/authmysqlrc
# cd /etc/courier
# cp /usr/share/doc/courier-base/examples/quotawarnmsg.example quotawarnmsg
3.6. Configurar o courier para autenticar no MySQL:
As configurações default dos arquivos imapd e pop3d, ao meu ver, já são boas. Altere caso você sinta necessidade.
Edite o /etc/courier/authmysqlrc. Esse arquivo é responsável pelas configurações do Courier para que ele conecte no MySQL e autentique os usuários. Edite-o conforme as suas configurações. Exemplo:
# vim /etc/courier/authmysqlrc
MYSQL_SERVER localhost MYSQL_USERNAME postfix MYSQL_PASSWORD xxxxx MYSQL_SOCKET /var/run/mysqld/mysqld.sock MYSQL_PORT 3306 MYSQL_OPT 0 MYSQL_DATABASE postfix MYSQL_USER_TABLE mailbox MYSQL_CRYPT_PWFIELD password MYSQL_UID_FIELD uid MYSQL_GID_FIELD gid MYSQL_LOGIN_FIELD username MYSQL_HOME_FIELD home MYSQL_NAME_FIELD name MYSQL_MAILDIR_FIELD maildir MYSQL_QUOTA_FIELD quota MYSQL_WHERE_CLAUSE active=1
3.7. Reiniciar os serviços e testar se estão ativos:
# /etc/init.d/courier-authdaemon restart
Stopping Courier authentication services: done.
Starting Courier authentication services: done.
# /etc/init.d/courier-imap restart
Stopping Courier IMAP server: imapd.
Starting Courier IMAP server: imapd.
# /etc/init.d/courier-pop restart
Stopping Courier POP3 server: pop3d.
Starting Courier POP3 server: pop3d.
# telnet 0 143
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2005 Double Precision, Inc. See COPYING for distribution information.
0 logout
* BYE Courier-IMAP server shutting down
0 OK LOGOUT completed
Connection closed by foreign host.
# telnet 0 110
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
+OK Hello there.
quit
+OK Better luck next time.
Connection closed by foreign host.
Ok, os serviços POP e IMAP estão ativos, vamos ao restante das configurações.
3.8. Configurando o maildrop:
Iremos criar um arquivo, chamado /etc/maildropmysql.config, o conteúdo dele segue abaixo.
Neste arquivo precisamos alterar as linhas:
dbpw suasenha default_gidnumber seuGID default_uidnumber seuUID# vim /etc/maildropmysql.config
hostname localhost port 3306 socket /var/lib/mysql/mysql.sock database postfix dbuser maildrop dbpw suasenha dbtable mailbox default_gidnumber seuGID default_uidnumber seuUID uid_field username uidnumber_field uid gidnumber_field gid maildir_field maildir homedirectory_field home quota_field quota mailstatus_field active where_clause ""
Baixar o maildrop:
# wget -c http://umn.dl.sourceforge.net/sourceforge/courier/maildrop-1.6.3.tar.bz2
Decompactar e preparar para compilar:
# tar xvjf maildrop-1.6.3.tar.bz2
# cd maildrop-1.6.3
# ./configure\
--prefix=/usr\
--sysconfdir=/etc/maildrop\
--enable-maildrop-uid=seuUID\
--enable-maildrop-gid=seuGID\
--enable-syslog=1\
--enable-maildropmysql\
--enable-maildirquota
Compilar:
# make
Instalar:
# make install
OBS: O download e compilação do maildrop vem após a criação do arquivo de configuração dele, pois este arquivo é usado durante o ./configure.
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 ira receber, bastando para isso editar o arquivo /etc/courier/quotawarnmsg.
3.9. Configurando o Postfix:
Vamos verificar se o pacote instalado no sistema realmente tem suporte ao MySQL:
# postconf -m
btree
cidr
environ
hash
mysql <-- aqui está ele
nis
proxy
regexp
sdbm
static
tcp
unix
Crie 4 arquivos dentro do diretório /etc/postfix/ com o seguinte conteúdo:
OBS: Altere a linha "password" para a senha que você definiu no script de criação do banco, para o usuário postfix.
mysql_virtual_alias_maps.cf:
# mysql_virtual_alias_maps.cf
# -----------------------------
user = postfix
password = xxxxx
dbname = postfix
table = alias
select_field = goto
where_field = address
hosts = localhost
# -----------------------------
user = postfix
password = xxxxx
dbname = postfix
table = alias
select_field = goto
where_field = address
hosts = localhost
mysql_virtual_mailbox_maps.cf:
# mysql_virtual_mailbox_maps.cf
# ------------------------------
user = postfix
password = xxxxx
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
hosts = localhost
# ------------------------------
user = postfix
password = xxxxx
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
hosts = localhost
mysql_transport_maps.cf:
# mysql_transport_maps.cf
# --------------------------
user = postfix
password = xxxxx
hosts = localhost
dbname = postfix
table = domain
select_field = transport
where_field = domain
# --------------------------
user = postfix
password = xxxxx
hosts = localhost
dbname = postfix
table = domain
select_field = transport
where_field = domain
mysql_virtual_mailbox_limit_maps.cf:
# mysql_virtual_mailbox_limit_maps.cf
# ------------------------------------
user = postfix
password = xxxxx
dbname = postfix
table = mailbox
select_field = quota
where_field = username
hosts = localhost
# ------------------------------------
user = postfix
password = xxxxx
dbname = postfix
table = mailbox
select_field = quota
where_field = username
hosts = localhost
Editar o arquivo master.cf:
Edite todos os parâmetros da coluna "chroot" para "n", pois não estaremos rodando nada do postfix num ambiente chrootado.
Configure o suporte ao Maildrop:
maildrop unix - n n - - pipe
flags=DRhu user=maildrop argv=/usr/bin/maildrop -w 90 -d ${recipient}
OBS:
- A configuração da segunda linha deve ter pelo menos 2 espaços no começo da linha, conforme o exemplo.
- O parâmetro "-w 90" representa a porcentagem de utilização da caixa postal pode chegar até ser avisado pelo sistema. A mensagem de aviso é enviada pelo MAILDROP com o conteúdo do arquivo /etc/courier/quotawarnmsg.
Faça um backup do arquivo:
# cp main.cf mainf.cf.orig
Zere o arquivo main.cf e insira o seguinte texto nele:
OBS: Troque as linhas:
virtual_uid_maps = static:seuUID
virtual_gid_maps = static:seuGID
Pelo GID e UID configurados anteriormente.
#======== CONFIGURAÇÕES ===============
queue_directory = /var/spool/postfix/
program_directory=/usr/sbin
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
mail_owner = postfix
default_privs=nobody
default_transport=smtp
local_recipient_maps =
delay_warning_time = 5m
alias_maps=hash:/etc/postfix/aliases
alias_database=hash:/etc/postfix/aliases
readme_directory = no
sample_directory = /etc/postfix
sendmail_path = /usr/sbin/sendmail
setgid_group = postdrop
manpage_directory = /usr/local/man
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
smtpd_banner=$myhostname ESMTP MEU DOMÍNIO
disable_vrfy_command=yes
home_mailbox=Maildir/
# ========== NOME DO DOMÍNIO ===========
myhostname=postfix.dominio.com.br
mydomain=local.com.br
myorigin= $mydomain
mydestination= $mydomain, $transport_maps
#=====REDES p/ Relay======
# 192.168.0.0/24=MINHA REDE
#
mynetworks=127.0.0.0/8 192.168.0.0/24
#======== MYSQL ==============
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_base = /postfix
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_uid_maps = static:seuUID
virtual_gid_maps = static:seuGID
transport_maps = mysql:/etc/postfix/mysql_transport_maps.cf
#======= Quota ============
virtual_mailbox_limit_inbox = no
virtual_mailbox_limit_maps= mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_extended = yes
virtual_create_maildirsize = yes
virtual_mailbox_limit = 100000000
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later.
virtual_overquota_bounce = yes
#====== SASL ================
#smtpd_sasl_auth_enable = yes
#smtpd_sasl_security_options = noanonymous
#broken_sasl_auth_clients = yes
#smtpd_recipient_restrictions =
# permit_sasl_authenticated,
# permit_mynetworks,
# check_relay_domains
# =======MAILDROP ==========
fallback_transport = /usr/bin/maildrop
maildrop_destination_recipient_limit = 1
unknown_local_recipient_reject_code = 450
queue_directory = /var/spool/postfix/
program_directory=/usr/sbin
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
mail_owner = postfix
default_privs=nobody
default_transport=smtp
local_recipient_maps =
delay_warning_time = 5m
alias_maps=hash:/etc/postfix/aliases
alias_database=hash:/etc/postfix/aliases
readme_directory = no
sample_directory = /etc/postfix
sendmail_path = /usr/sbin/sendmail
setgid_group = postdrop
manpage_directory = /usr/local/man
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
smtpd_banner=$myhostname ESMTP MEU DOMÍNIO
disable_vrfy_command=yes
home_mailbox=Maildir/
# ========== NOME DO DOMÍNIO ===========
myhostname=postfix.dominio.com.br
mydomain=local.com.br
myorigin= $mydomain
mydestination= $mydomain, $transport_maps
#=====REDES p/ Relay======
# 192.168.0.0/24=MINHA REDE
#
mynetworks=127.0.0.0/8 192.168.0.0/24
#======== MYSQL ==============
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_base = /postfix
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_uid_maps = static:seuUID
virtual_gid_maps = static:seuGID
transport_maps = mysql:/etc/postfix/mysql_transport_maps.cf
#======= Quota ============
virtual_mailbox_limit_inbox = no
virtual_mailbox_limit_maps= mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_extended = yes
virtual_create_maildirsize = yes
virtual_mailbox_limit = 100000000
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later.
virtual_overquota_bounce = yes
#====== SASL ================
#smtpd_sasl_auth_enable = yes
#smtpd_sasl_security_options = noanonymous
#broken_sasl_auth_clients = yes
#smtpd_recipient_restrictions =
# permit_sasl_authenticated,
# permit_mynetworks,
# check_relay_domains
# =======MAILDROP ==========
fallback_transport = /usr/bin/maildrop
maildrop_destination_recipient_limit = 1
unknown_local_recipient_reject_code = 450
Dicas:
- Note que as linhas referentes ao SASL estão comentadas, elas só serão úteis durante a sua configuração.
- O parâmetro "maildrop_destination_recipient_limit" faz com que o MAILDROP entregue os emails para mais de um destinatário, caso contrario, apenas um irá receber a mensagem.
Em tempo, desculpe pela demora na publicação, este não merecia esperar tanto :) ... mas em contrapartida, já estamos quase com a fila de espera em dia.
Um abraço