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 6: Cota de caixa postal e autenticação SASL
3.12. Cota de e-mails
Quem vai ser responsável pelo controle de cota de disco nesse ambiente é o Maildrop.
Os valores de cotas serão cadastrados no banco de dados, sendo independente para cada usuário. O Maildrop irá ler as tabelas do MySQL e conforme o valor especificado, ele irá fazer o controle de tal cota.
Quando você enviou um email para usuario.silva@dominio1.com.br, o Maildrop criou o arquivo "maildirsize" dentro do ~/MAILDIR/ do usuário. Exemplo:
# ls /postfix/dominio1.com.br/usuario.silva/Maildir
courierimapkeywords
courierimapuiddb
courierpop3dsizelist
cur
maildirsize
new
tmp
# cat /postfix/dominio1.com.br/usuario.silva/Maildir/maildirsize
Vamos testar se a cota esta funcionado:
Primeiro vamos alterar o valor da cota do usuário para um valor menor, 10KB é o suficiente.
Execute o seguinte comando no shell, para verificarmos o tamanho da cota atual do usuário:
# mysql -D postfix -u postfix -psuasenha -e "SELECT username,quota FROM mailbox WHERE username='usuario.silva@dominio1.com.br';"
# mysql -D postfix -u postfix -psuasenha -e "UPDATE mailbox SET quota='10000S' WHERE username='usuario.silva@dominio1.com.br';"
Para fazer o teste, vamos instalar o nail, que é um cliente de e-mail na console, que permite o envio de anexos com o parâmetro -a:
# apt-get update
# apt-get install nail
# nail -s "teste" -a /usr/local/src/maildrop-1.6.3.tar.bz2 usuario.silva@dominio1.com.br
Após isto, vamos verificar o que o log do servidor de e-mail nos diz:
# tail /var/log/mail.log
Jul 30 09:47:56 smtp postfix/pipe[1369]: 148FB812: to=<usuario.silva@dominio1.com.br>, relay=maildrop, delay=0, status=bounced (permission denied. Command output: maildrop: maildir over quota. )
Lembrando que 10000 não corresponde exatamente à 10KB :)
3.13. SASL2 no Postfix:
O SASL permite que um usuário consiga enviar email pelo servidor smtp (relay) sem que o seu IP esteja na lista de IP's liberados para relay, no postfix é configurado na linha "mynetworks" no arquivo main.cf.
O requisito para enviar email é que o usuário exista no sistema. Isso é um ótimo recurso, pois o usuário onde estiver pode enviar email pelo seu servidor, sem que você precise liberar o "Relay" para todo mundo.
Crie os seguintes arquivos com o respectivo conteúdo:
/usr/lib/sasl2/smtpd.conf:
Quem vai ser responsável pelo controle de cota de disco nesse ambiente é o Maildrop.
Os valores de cotas serão cadastrados no banco de dados, sendo independente para cada usuário. O Maildrop irá ler as tabelas do MySQL e conforme o valor especificado, ele irá fazer o controle de tal cota.
Quando você enviou um email para usuario.silva@dominio1.com.br, o Maildrop criou o arquivo "maildirsize" dentro do ~/MAILDIR/ do usuário. Exemplo:
# ls /postfix/dominio1.com.br/usuario.silva/Maildir
courierimapkeywords
courierimapuiddb
courierpop3dsizelist
cur
maildirsize
new
tmp
# cat /postfix/dominio1.com.br/usuario.silva/Maildir/maildirsize
10000000S 0 0 4127 1Toda vez que o usuário recebe um email, o Maildrop calcula o espaço utilizado e escreve nesse arquivo.
Vamos testar se a cota esta funcionado:
Primeiro vamos alterar o valor da cota do usuário para um valor menor, 10KB é o suficiente.
Execute o seguinte comando no shell, para verificarmos o tamanho da cota atual do usuário:
# mysql -D postfix -u postfix -psuasenha -e "SELECT username,quota FROM mailbox WHERE username='usuario.silva@dominio1.com.br';"
+-------------------------------+-----------+ | username | quota | +-------------------------------+-----------+ | usuario.silva@dominio1.com.br | 10000000S | +-------------------------------+-----------+A cota está em 10MB, vamos altera-la para 10KB, com o seguinte comando:
# mysql -D postfix -u postfix -psuasenha -e "UPDATE mailbox SET quota='10000S' WHERE username='usuario.silva@dominio1.com.br';"
Para fazer o teste, vamos instalar o nail, que é um cliente de e-mail na console, que permite o envio de anexos com o parâmetro -a:
# apt-get update
# apt-get install nail
# nail -s "teste" -a /usr/local/src/maildrop-1.6.3.tar.bz2 usuario.silva@dominio1.com.br
Após isto, vamos verificar o que o log do servidor de e-mail nos diz:
# tail /var/log/mail.log
Jul 30 09:47:56 smtp postfix/pipe[1369]: 148FB812: to=<usuario.silva@dominio1.com.br>, relay=maildrop, delay=0, status=bounced (permission denied. Command output: maildrop: maildir over quota. )
Lembrando que 10000 não corresponde exatamente à 10KB :)
3.13. SASL2 no Postfix:
O SASL permite que um usuário consiga enviar email pelo servidor smtp (relay) sem que o seu IP esteja na lista de IP's liberados para relay, no postfix é configurado na linha "mynetworks" no arquivo main.cf.
O requisito para enviar email é que o usuário exista no sistema. Isso é um ótimo recurso, pois o usuário onde estiver pode enviar email pelo seu servidor, sem que você precise liberar o "Relay" para todo mundo.
Crie os seguintes arquivos com o respectivo conteúdo:
/usr/lib/sasl2/smtpd.conf:
# /usr/lib/sasl2/smtpd.conf
# -----------
pwcheck_method: saslauthd
# -----------
pwcheck_method: saslauthd
/etc/pam.d/smtp:
# /etc/pam.d/smtp
# ------------------------
#%PAM-1.0
auth sufficient /lib/security/pam_unix_auth.so try_first_pass
auth optional /lib/security/pam_mysql.so user=postfix \
passwd=xxxxx \
host=localhost \
db=postfix \
table=mailbox \
usercolumn=username \
passwdcolumn=password \
crypt=1
account sufficient /lib/security/pam_unix_acct.so
account required /lib/security/pam_mysql.so user=postfix \
passwd=xxxxxx \
host=localhost \
db=postfix \
table=mailbox \
usercolumn=username \
passwdcolumn=password \
crypt=1
# ------------------------
#%PAM-1.0
auth sufficient /lib/security/pam_unix_auth.so try_first_pass
auth optional /lib/security/pam_mysql.so user=postfix \
passwd=xxxxx \
host=localhost \
db=postfix \
table=mailbox \
usercolumn=username \
passwdcolumn=password \
crypt=1
account sufficient /lib/security/pam_unix_acct.so
account required /lib/security/pam_mysql.so user=postfix \
passwd=xxxxxx \
host=localhost \
db=postfix \
table=mailbox \
usercolumn=username \
passwdcolumn=password \
crypt=1
Habilitando o SASL no Postfix:
Descomente as seguintes linhas no arquivo /etc/postfix/main.cf:
# ====== 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
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
Dica: edite o arquivo /etc/default/saslauthd e descomente a linha:
START=yes
Depois disto, inicie o serviço de autenticação SASL e reinicie o postfix:
# /etc/init.d/saslauthd start
# /etc/init.d/postfix restart
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