Posts com Tag ‘mail’

1. Introdução
O Postfix tem recurso de conversão de endereços de email, o que é uma característica bastante importante do sistema de correio eletrônico. Isso é realizado através da criação de apelidos virtuais (“virtual aliases”). Esse recurso acarreta as seguintes facilidades:

  • redirecionar o e-mail para um ou mais endereços;
  • ter uma série de apelidos para uma mesma caixa postal de destino;
  • hospedar múltiplos domínios virtuais numa única máquina;
  • implementar endereços em grupos (listas de distribuição);
  • implementar domínios de apelidos virtuais (“virtual alias domains”) onde todos os endereços são apelidos (“alias”) para endereços em outros domínios.

Isso é implementado fazendo-se uso de uma tabela opcional de apelidos virtuais (“virtual alias”) que reescreve endereços de destinatários seja para caixas postais locais, para caixas postais virtuais ou para destinos de e-mail remotos. Isto é diferente da tabela de aliases que é usada apenas para entrega local, já tratado no primeiro post que fizemos sobre o Postfix. Este processo de “virtual aliases” é implementado pelo “daemon cleanup” do Postfix, antes das ações do daemon gerenciador de filas QMGR (“Queue Manager”) do Postfix.

Domínios virtuais (“virtual alias domains”) não devem ser confundidos com domínios de caixa de correio virtuais (“virtual mailbox domains”) que são implementados com o agente Postfix “virtual” de entrega local de correio para usuários de domínios virtuais. Domínios de caixa de correio virtuais (“virtual mailbox domains”) faz com que cada endereço de destinatário possa ter sua própria caixa de correio.

2. Problema que a facilidade “virtual aliases” resolve
Considere existir 3 (três) domínios virtuais hospedados em uma máquina, chamados: dominio1.com, dominio2.org e dominio3.net. Considere também que não se está usando a facilidade “virtual aliases”. Assim, ao se enviar 3 (três) emails para as seguintes pessoas: maria@dominio1.com, maria@dominio2.org e maria@dominio3.net, estes três e-mails acabariam caindo numa mesma caixa postal local chamada maria.

Pois, sem o uso de “virtual aliases”, todos os nomes de usuários de e-mail compartilharão um único espaço de nomes da parte local. Assim, para hospedar múltiplos domínios virtuais onde estes tenham áreas de nomes separadas, necessita-se lançar mão da facilidade “virtual aliases”.

3. Configurar o Postfix
O parâmetro virtual_alias_map especifica o arquivo responsável pela base de dados de aliases usados pelo MTA para entregar os emails. Por exemplo, abaixo temos como fazer a configuração desse parâmetro do Postfix apontando para uma tabela simples de pesquisa do tipo hash (poderia existir a indicação de mais de uma tabela de pesquisa, separadas por espaços em branco ou vírgulas):
# postconf -e 'virtual_alias_maps = hash:/etc/postfix/virtual'

Para um entendimento mais detalhado do processo de reescrita de endereços através de apelidos virtuais (“Virtual aliasing”), ver Postfix Address Rewriting – Virtual aliasing.

Agora o Postfix utilizará os aliases virtuais que estejam colocados em /etc/postfix/virtual. O formato desse arquivo “virtual” é muito simples: duas colunas onde a chave de pesquisa é o endereço do destinatário e o(s) endereço(s) convertido é o resultado. Abaixo um exemplo de conteúdo deste arquivo:


# Minha tabela de virtuais
sergio2@dois.netlivre.org	sergio
antonio2@dois.netlivre.org	antonio
redes2@dois.netlivre.org	redes
sergio3@tres.exemplo.org	sergio
sergio3@quatro.exemplo.org	antonio
admin@br.exemplo.org		antonio,sergio

Depois de editar o arquivo /etc/postfix/virtual, deve-se transformar este arquivo em um arquivo de hash (isto é, gerar o arquivo virtual.db):
# postmap /etc/postfix/virtual
# /etc/init.d/postfix reload

O formato das tabelas de pesquisa de aliases virtuais está descrito na página virtual(5). No exemplo acima, graças a facilidade “virtual aliases” teremos como resultados:
– todas as mensagens endereçadas para sergio2@dois.netlivre.org terminarão na caixa de correio do usuário “sergio”;
– todas as mensagens endereçadas para sergio3@tres.exemplo.org terminarão na caixa de correio do usuário “sergio”;
– todas as mensagens endereçadas para sergio3@quatro.exemplo.org terminarão na caixa de correio do usuário “antonio”;

Se quiser testar, usando o terminal basta enviar um e-mail como este exemplo a seguir:
$ mail -s "Mensagem de teste de virtual alias" sergio3@quatro.exemplo.org <<< "Este eh o conteudo da mensagem de teste do uso de virtual alias."

Referências:
1- Servidor de e-mail Postfix (parte 1 – instalação mínima)
2- Servidor de e-mail Postfix (parte 2 – logs e programas de suporte)

Anúncios

1) Introdução
Os procedimentos aqui realizados foram testados utilizando o Debian/Linux 8 (debian Jessie) com o Postfix 2.11. O intuito deste post é registrar o que seria uma configuração muito básica para funcionamento de um serviço de email com o Postfix.

Continuaremos aqui com a configuração do post anterior, Servidor de e-mail Postfix (parte 1 – instalação mínima), onde apenas estão instalados os pacotes postfix e ssl-cert, e com o smtp utilizando a porta 25.

2) As filas de mensagem do Postfix

As filas de mensagem do Postfix estão localizadas, por padrão, na pasta /var/spool/postfix/. Abaixo um exemplo de um conteúdo básico desta pasta:


drwx------  2 postfix root     active
drwx------  2 postfix root     bounce
drwx------  2 postfix root     corrupt
drwx------ 18 postfix root     defer
drwx------ 18 postfix root     deferred
drwx------  2 postfix root     flush
drwx------  2 postfix root     hold
drwx------  2 postfix root     incoming
drwx-wx--T  2 postfix postdrop maildrop
drwx------  2 postfix root     private
drwx--s---  2 postfix postdrop public
drwx------  2 postfix root     saved

Em destaque, as 5 (cinco) filas que o Postfix utiliza para o processamento de mensagens, conforme seu gerenciador de filas QMGR – “Queue Manager”:

  • incoming: basicamente, esta é a fila de e-mails que estâo entrando a partir da rede (/var/spool/postfix/incoming/).
  • active: esta é a fila de e-mails que foram abertos pelo gerenciador QMGR para entregas. Apenas um número limitado de mensagens podem entrar nesta fila (uma proteção quanto a limitação de taxas de entrega) (/var/spool/postfix/active/).
  • deferred: esta é a fila de mensagens que não puderam ser entregues na primeira tentativa. O gerenciador da fila vai seguir as configurações do main.cf para novas tentativas de entregas. Por padrão ele vai dobrando o tempo de intervalo entre as tentativas de entrega (/var/spool/postfix/deferred/).
  • corrupt: os arquivos das filas que não conseguem ser lidos ou que estão danificados são movidos para esta fila para uma inspeção (/var/spool/postfix/corrupt/).
  • hold: mensagens que são colocadas em espera (“on hold”) pelo administrador ficam nesta fila, até o instante que alguém a libere (/var/spool/postfix/hold/).

Como visualizar as mensagens nas filas do Postfix
# mailq
# postcat -vq mensagemID

Onde:
– o primeiro comando acima para identificar as mensagens que estão nas filas do Postfix, listando as suas “mensagemID”;
– o segundo comando para abrir uma determinada mensagem (identificada por “mensagemID”). Será possível visualizar o corpo do email na saída padrão.

2.1) Dinâmica de funcionamento das filas

O gerenciador de filas, qmgr, é responsável por agendar a entrega das mensagens. O gerenciador de filas utiliza alguns diretórios para diferentes propósitos. Novas mensagens irão parar na fila ativa (“active”). A fila ativa contém as mensagens que estão prontas para entrega. Se uma tentativa de entrega falhar, a mensagem será movida para a fila adiada (“deferred”). Esta fila será varrida de vez em quando e, se for o momento de tentar entregar uma mensagem novamente, o arquivo de fila para a mensagem será mais uma vez movido para a fila ativa (“active”). Se uma tentativa para entregar uma mensagem deve ou não ser feita novamente quando a fila for varrida dependerá de dois fatores: do tempo transcorrido a partir do momento em que a mensagem chegou e dos dois parâmetros de configuração que especificam um intervalo mínimo e máximo de tempo entre as novas tentativas.

a) Existem 2 parâmetros que definem quanto tempo a mensagem fica na fila:

  • maximal_queue_lifetime (default: 5d): tempo máximo em que uma mensagem é enfileirada antes de ser enviada de volta como não entregue (“undeliverable”).
  • bounce_queue_lifetime (default: 5d): o tempo máximo em que uma mensagem devolvida (“bounced”) permanece na fila antes de ser considerada não entregue (“undeliverable”). Ou seja, é o tempo de vida de mensagens devolvidas (“bounced messages”). Se for parametrizado para o valor zero, significa que os e-mails que não forem imediatamente enviados serão rejeitados e devolvidos aos seus remetentes como não entregues (“undeliverable”)

Para ver os valores correntes destes parâmetros, veja os exemplos de comandos abaixo:
# postconf -d | grep maximal_queue_lifetime
# postconf -n | grep maximal_queue_lifetime

b) Existem 3 parâmetros que definem o tempo de verificação da fila:

  • queue_run_delay (default: 300s): tempo entre análises da fila “deferred” pelo gerenciador de filas. Seu valor deve ser definido menor ou igual ao parâmetro $minimal_backoff_time.
  • minimal_backoff_time (default: 300s): tempo mínimo entre tentativas de entrega de uma mensagem rejeitada (“deferred message”). Este parâmetro deve ser maior ou igual a $queue_run_delay.
  • maximal_backoff_time (default: 4000s): tempo máximo entre tentativas de entregar uma mensagem rejeitada (“deferred message”). Este parâmetro deve ser maior ou igual a $minimal_backoff_time.

c) Como alterar estes parâmetros?
Isso é feito facilmente, como os dois exemplos abaixo:
# postconf -e 'maximal_queue_lifetime = 1d'
# postconf -e 'delay_warning_time = 0h'

2.2) Relatórios de estado de entrega
O daemon qmgr mantém um olho nos relatórios de status de entrega por mensagem nos seguintes diretórios. Cada arquivo de relatório de status tem o mesmo nome do arquivo de mensagem correspondente (que é a própria mensagemID):

  • bounce: informação por-recipiente sobre o porquê o e-mail está com mensagem de erro (“bounced”: non-delivery status) (/var/spool/postfix/bounce/).
  • defer: informação por-recipiente sobre o porquê o e-mail está com o envio atrasado. (“delayed”: non-delivery status) (/var/spool/postfix/defer/).
  • trace: rastrear informações de status por destinatário conforme solicitado com o comando do Postfix “sendmail -v” ou “sendmail -bv” (delivery status).

Nestes arquivos de relatórios são guardadas informações de quanto tempo a mensagem está aguardando ser despachada, razão do atraso ou do erro, e outras mensagens de controle.

3) Logs
A definição dos locais dos arquivos de logs do postfix estão definidos através do rsyslogd daemon. Rsyslogd é um utilitário do S.O. que provê suporte para loggin de mensagens tanto dos sockets da internet e como do S.O. O arquivo de configuração para o rsyslogd está em /etc/rsyslog.conf

Por padrão, os logs do postfix estarão sendo guardados na pasta /var/log/:
/var/log/mail.err
/var/log/mail.info
/var/log/mail.log
/var/log/mail.warn

3.1) Notificações de erro
Além dos registros de logs, existe a possibilidade de notificações de problemas com o Postfix a um certo destinatário . Por padrão, este destinatário é o “postmaster”, como podemos ver:
# postconf | grep error_notice_recipient
error_notice_recipient = postmaster

Esse destinatário recebe notificações sobre problemas de entrega de correio que são causados por erros de política, recursos, software ou protocolo. Essas notificações são ativadas com o parâmetro notify_classes. Por exemplo:
# postconf -e 'notify_classes = bounce, delay, policy, protocol, resource, software, data'
# /etc/init.d/postfix reload

NOTA: as notificações podem conter informações confidenciais tais como “SASL passwords” ou conteúdo de mensagens. É da responsabilidade do administrador do sistema tratar tais informações com o cuidado exigido.

4) Programas de suporte do Postfix
O Postfix quando instalado oferece alguns programas de suporte que podem ser utilizados para controlar, testar e depurar o sistema Postfix. Vamos ver aqui os seguintes programas de suporte:

  • mailq: lista as mensagens na fila Postfix, as quais aguardam ainda serem despachadas.
  • qshape: mostra as mensagens em cada uma das filas de mensagens do Postfix.
  • postcat: mostrar o conteúdo de mensagens na fila do Postfix
  • postsuper: permite manipular a fila de mensagens do Postfix, como excluir ou enfileirá-las de novo.
  • postconf: mostrar/alterar os valores atuais dos parâmetros de configuração do Postfix
  • newaliases: reconstrói todos os arquivos de aliases locais.

5) Exemplos de comandos
a) Exemplo 1

$ mailq
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
4CE54DA0064      319 Sat Sep 16 23:01:08  root@server17.netlivre.org
     (connect to alt2.gmail-smtp-in.l.google.com[108.177.96.26]:25: Connection timed out)
                                         marluce@gmail.com


0C363DA006B      318 Sat Sep 16 23:07:25  root@server17.netlivre.org
     (connect to mail.caldodecana.org[85.25.109.176]:25: Connection timed out)
                                         maria@caldodecana.org
-- 1 Kbytes in 2 Requests.

Comando útil: apresenta o número de mensagens enfileiradas que ainda aguardam serem despachadas.
$ mailq | grep -c "^[A-F0-9]"
$ mailq | tail -n 1

b) Exemplo 2
Para deletar todas as mensagens enfileiradas do Postfix.
# postsuper -d ALL
postsuper: Deleted: 2 messages
# mailq
Mail queue is empty

Para apagar as mensagens postergadas (“deffered”) da fila de mensagens do Postfix.
# postsuper -d ALL deferred

Para apagar alguma mensagem específica da fila de mensagens do Postfix.

# mailq | grep "email@example.com" ; primeiro identifica o ID da mensagem
056CB129FF0* 5513 Sun Feb 26 02:26:27 email@example.com
# postsuper -d 056CB129FF0 ; agora apaga a mensagem da fila

c) Exemplo 3
# postcat -vq 9681BDA0076
postcat: name_mask: all
postcat: inet_addr_local: configured 3 IPv4 addresses
postcat: inet_addr_local: configured 2 IPv6 addresses
*** ENVELOPE RECORDS active/9681BDA0076 ***
etc..etc…etc…

# postcat -vq 71B86DA006F
postcat: name_mask: all
postcat: inet_addr_local: configured 3 IPv4 addresses
postcat: inet_addr_local: configured 2 IPv6 addresses
*** ENVELOPE RECORDS deferred/7/71B86DA006F ***
etc..etc…etc…

No primeiro caso, a mensagem identificada com o ID=9681BDA0076 está na fila “active”. Já no segundo exemplo, a mensagem identificada com o ID=71B86DA006F está na fila “deferred”.

d) Exemplo 4
Colocando uma mensagem na fila “hold”:
# postsuper -h 9681BDA0076
postsuper: 9681BDA0076: placed on hold
postsuper: Placed on hold: 1 message

Comprovando que a mensagem está relmente na fila “hold”:
# postcat -vq 9681BDA0076
postcat: name_mask: all
postcat: inet_addr_local: configured 3 IPv4 addresses
postcat: inet_addr_local: configured 2 IPv6 addresses
*** ENVELOPE RECORDS hold/9681BDA0076 ***
etc..etc…etc…

6) Outros parâmetros de configuração úteis
Não vamos aqui entrar em muitos comentários pois são configurações complementares e não essenciais. Para qualquer dúvida, consultar o documento Postfix Configuration Parameters. De qualquer forma, vamos listar já na forma de exemplos de como estabelcer tais parâmetros:

# postconf -e 'delay_warning_time = 10m'
# postconf -e 'mailbox_size_limit = 51200000'
# postconf -e 'message_size_limit = 10240000'
# postconf -e 'maximal_queue_lifetime = 5h'
# postconf -e 'bounce_queue_lifetime = 1h'
# postconf -e 'smtpd_recipient_limit = 100'
# /etc/init.d/postfix reload

Nota: verifique a saída de /var/log/mail.log ou de /var/log/mail.info se há qualquer aviso de problemas na configuração executada, após o último comando exemplificado acima para recarregar a configuração do Postfix.

7) Quadro resumo dos comandos:

Comando Descrição
Mostrar mensagens
mailq Mostra as mensagens nas filas do postfix
qshape active Mostra o conteúdo da fila active.
qshape incoming Mostra o conteúdo da fila incoming.
qshape hold Mostra o conteúdo da fila hold.
qshape deferred Mostra o conteúdo da fila deferred.
qshape active incoming Mostra os conteúdos das filas active e incoming.
qshape -s Mostra os domínios de destino.
postcat -vq mensagemID Mostra o conteúdo de determinada mensagem.
postsuper
postsuper -h mensagemID Colocar uma mensagem na fila “hold”.
postsuper -H mensagemID Liberar uma mensagem da fila “hold”.
postsuper -d mensagemID Deletar uma mensagem da fila.
postsuper -d ALL Deletar todas as mensagens da fila do Postfix.
postsuper -p Fazer um purge na nos arquivos temporários da fila que podem ser sobras de um crash no sistema ou no postfix.
postsuper -s Verifica a estrutura das filas e repara a fila caso exista algum problema.
Enviar mensagens
mailq -q Iniciar entrega de todos as mensagens enfileiradas.
postfix flush Reenviar todos os emails da fila de mensagem, esvaziando o buffer.
postqueue -i mensagemID Iniciar entrega imediata de mensagem da fila “deferred”.
postqueue -s dominio.com.br Iniciar entrega imediata mensagens na fila para determinado domínio.
Ferramenta de configuração do Postfix:
postconf Mostra todos os parâmetros.
postconf -d Exibe os parâmetros padrão (valores defaults, independentemente das definições em main.cf).
postconf -n Exibe os parâmetros não padrão (configurados através de main.cf).
postconf -e ‘parâmetro = valor’ Adiciona um novo parâmetro no final do arquivo de configuração do postfix.

 

Referências:
1- Servidor de e-mail Postfix (parte 1 – instalação mínima)
2- Servidor de e-mail Postfix (parte 3 – Domínios de aliases virtuais)
3- Postfix Documentation
4- Postfix Bottleneck Analysis
5- Postfix Configuration Parameters
6- How To Configure Custom Postfix Bounce Messages

1) Introdução
Os procedimentos aqui realizados foram testados utilizando o Debian/Linux 8 (debian Jessie) com o Postfix 2.11. O intuito deste post é registrar o que seria uma configuração muito básica para funcionamento de um serviço de email com o Postfix.

2) Fazer duas configurações oportunas numa nova instalação
a) Atualizar data e hora do servidor:
# dpkg-reconfigure tzdata

Para verificar:
# date
Dom Set 17 13:14:05 -03 2017

b) Configurar a língua portuguesa para interface com o sistema e aplicativos
# apt-get install locales
# dpkg-reconfigure locales

…selecionando pt_BR.UTF-8 UTF-8

Para verificar:
# echo $LANG
pt_BR.UTF-8

3) Instalar o postfix

Para uma instalação mais completa de um ambiente de mensageria, são sugeridos os seguintes pacotes:
postfix-mysql postfix-pgsql postfix-ldap postfix-pcre sasl2-bin dovecot-common resolvconf postfix-cdb ufw postfix-doc openssl-blacklist

Mas neste primeiro instante vamos instalar apenas os pacotes: postfix e ssl-cert

$ apt-cache policy postfix
# apt-get install postfix ssl-cert

Tela 1 de instalação do Postfix

Tela 2 de instalação do Postfix

Após as duas telas básicas de configuração que exemplificamos acima, a instalação deve ocorrer e a seguinte mensagem ao final é colocada:
Postfix is now set up with a default configuration. If you need to make changes, edit /etc/postfix/main.cf (and others) as needed. To view Postfix configuration values, see postconf(1).
After modifying main.cf, be sure to run '/etc/init.d/postfix reload'.

O que fora feito na instalação? As principais ações foram:
Adicionado novo grupo 'postfix' (GID 116)
Adicionado novo usuário 'postfix' (UID 109) com grupo 'postfix'
Criado o diretório '/var/spool/postfix' com seus subdiretórios
Adicionado novo grupo 'postdrop' (GID 117)
setting myhostname: server17.netlivre.org
setting alias maps
setting alias database
setting myorigin
setting destinations: server17.netlivre.org, localhost.netlivre.org, localhost
setting relayhost:
setting mynetworks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
setting mailbox_command
setting mailbox_size_limit: 0
setting recipient_delimiter: +
setting inet_interfaces: all

Observações:
a) Cada máquina é identificada por um nome principal (ou “canônico”), the system’s host name, armazenado no arquivo /etc/hostname. Quando da instalação do S.O. da máquina, definimos para os exercícios deste post:
$hostname = server17

b) O nome de domínio (domain name) vem de um nome de máquina completo, adquirido através de resolução de nome, presente no arquivo /etc/hosts. Deve-se escrever neste arquivo /etc/hosts um nome completo para a máquina no começo da lista de nomes associada com o endereço da máquina, como no exemplo seguinte:
<ip-máqina> server17.netlivre.org server17

c) Para configuração do parâmetro myhostname do Postfix, o padrão é usar o “fully-qualified domain name (FQDN)”, no caso server17.netlivre.org.

d) Já “destinations” é formado pelo Postfix da seguinte forma: $myhostname, localhost.$mydomain, localhost. Assim, teremos no nosso caso o parâmetro correspondente do Postfix, que é mydestination, conformado da seguine maneira:
mydestination = server17.netlivre.org, localhost.netlivre.org, localhost

4) Iniciar o postfix e verificar se deamon postfix está ativo, bem como sua versão
# /etc/init.d/postfix start
$ /usr/sbin/postconf -d | grep mail_version
mail_version = 2.11.3

Para verificar se o deamon do postfix está ativo, proceder de quatro maneiras:
i) Procedimento 1: verificar os processos ativos


# ps -aux | grep --color postfix
postfix   3110  0.0  0.1  42460  5564 ?  S   Set17  0:00 tlsmgr -l -t unix -u -c
postfix  12157  0.0  0.0  38232  3796 ?  S   00:08  0:00 pickup -l -t unix -u -c
root     29139  0.0  0.1  36168  3904 ?  Ss  Set16  0:00 /usr/lib/postfix/master
postfix  29141  0.0  0.1  38392  4020 ?  S   Set16  0:00 qmgr -l -t unix -u

ii) Procedimento 2: invocar o status do deamon
# postfix status
postfix/postfix-script: the Postfix mail system is running: PID: 29139

iii) Procedimento 3

$ /etc/init.d/postfix status
● postfix.service - LSB: Postfix Mail Transport Agent
   Loaded: loaded (/etc/init.d/postfix)
  Drop-In: /run/systemd/generator/postfix.service.d
           └─50-postfix-$mail-transport-agent.conf
   Active: active (running) since Sáb 2017-09-16 22:23:26 -03; 2 days ago

iv) Procedimento 4: verificar o log do postfix
# cat /var/log/mail.log

Observações:
a) Para listar informações do subsistema de rede do Linux, pode-se usar o netstat. Assim, pode-se ver o estado das conexões de rede através da listagem dos sockets abertos. Os sockets ativos de todas as famílias de endereços configuradas serão identificados:

# netstat -ltunp | grep --color -E "smtp|master"
tcp        0      0 *:smtp           *:*        OUÇA       29139/master    
tcp6       0      0 [::]:smtp        [::]:*     OUÇA       29139/master 

Onde as colunas de saída deste comando representa:
protocolo, Recv-Q, Send-Q, Endereço Local, Endereço Remoto, Estado, PID/Program name

b) Um comando ainda mais seguro que o netstat seria usando nmap: nmap -A -T4 localhost (que pode demorar vários minutos para apresentar a resposta).

c) Portas associadas à lista oficial de serviços conhecidos:

# cat /etc/services
smtp	25/tcp	   mail
urd	465/tcp	   ssmtp smtps  # URL Rendesvous Directory for SSM

Onde as quatro colunas são: nome do serviço, porta/protocolo, aliases, comentários.

d) Se deseja descobrir quais portas os programas estão usando, deve-se usar o programa lsof para descobrir exatamente quais portas estão vinculadas a quais processos. Exemplos de comandos:
# lsof | grep --color smtpd
# lsof -i TCP:25
# lsof -i:25

e) Um pouco mais das diferenças entre Nmap, Netstat e lsof

Nmap:
O Nmap é um scanner de portas, uma ferramenta de mapeamento de rede. Isso significa que é usado para descobrir informações sobre hosts em uma rede (seu ip, portas abertas, etc.). O Nmap obtém suas informações por experiência, tentando se conectar a cada porta por sua vez e exibindo o resultado da tentativa de conexão. Esse processo é muito mais lento, portanto, por padrão, ele só tenta os 1000 números de portas mais comuns. Ele pode investigar cada porta para determinar o tipo de serviço que está sendo executado nela, mas não pode mostrar o ID do processo. Nmap pode:

  • Mostrar portas abertas em um sistema remoto;
  • impressão digital da pilha TCP/IP de um alvo;
  • determinar informações sobre a versão do serviço e da aplicação;
  • e muito mais.

Então, quando se deve usar o Nmap?

  • quando se quer saber sobre portas abertas em um sistema remoto;
  • quando quiser mais informações sobre o serviço que está ouvindo em cada porta;
  • quando se precisa de uma segunda opinião sobre as portas de escuta;

Netstat:
Netstat (do pacote net-tools) é uma ferramenta de estatística de rede usada para listar conexões ativas, de e para, o seu computador. A lista pode ser bem longa já que inclui muitos soquetes Unix-domain (amplamente usados por daemons) que não tem nada a ver com redes (por exemplo, comunicação dbus, tráfego X11 e comunicações entre sistema de arquivos virtuais e o desktop). O Netstat obtém suas informações diretamente do sistema operacional. Ele pede ao kernel uma lista de todas as portas de escuta e as exibe. Pode mostrar quais endereços estão a ouvir que portas e, com o privilégio suficiente, quais IDs dos processos. Netstat pode:

  • mostrar as conecções correntemente-ativas;
  • mostrar informações das rotas;
  • mostrar estatísticas das interfaces de rede;
  • e muito mais.

Então, quando deve-se usar o netstat?

  • quando se quer saber o que está sendo ouvido em sua máquina local;
  • quando se precisa de informações de processo ou interface/endereço para cada porta;
  • quando se confia no sistema operacional para dar a resposta correta. Se você foi pirateado, um rootkit pode fazer o sistema operacional mentir para netstat sobre o que realmente está acontecendo. Ou seja, Netstat é menos confiável que Nmap (já que Netstat não conecta à máquina pela rede, mas checam o que está sendo executado no sistema. Por esta razão, esta aplicação pode ser alvo de substituição por atacantes).

Ons: quando se desejar um monitoramento interativo, pode-se fazer por exemplo:
# watch -n 1 netstat -ta

Lsof:
O Lsof (LiSt Open Files) é um utilitário de linha de comando que lista informações sobre arquivos abertos por processos, onde um arquivo aberto pode ser um arquivo regular, um diretório, um arquivo especial de bloco, um arquivo especial de caracter, uma referência textual de execução, uma biblioteca, um stream ou um arquivo de rede (soquete de internet, arquivo NFS ou soquete de domínio UNIX). Lsof é uma espécie de netstat + ps combinados.

5) Anatomia do Postfix
A figura a seguir mostra os principais componentes do sistema Postfix, e os principais fluxos de informação entre eles:

Anatomia do Postfix 1

5.1) Recebendo e-mails
Quando uma mensagem entra no sistema de correio Postfix, a primeira parada é a fila de entrada (“incoming queue”). A figura abaixo mostra os principais componentes que estão envolvidos com novas mensagens:

Anatomia do Postfix 2

  • e-mail postado localmente: o programa sendmail do Postfix invoca o programa postdrop que deposita a mensagem no diretório maildrop, onde a mensagem é retirada pelo daemon pickup. Este daemon faz algumas verificações de sanidade, a fim de proteger o resto do sistema Postfix.
  • e-mail entra a partir da rede: o servidor SMTP do Postfix recebe a mensagem e faz algumas verificações de sanidade, a fim de proteger o resto do sistema Postfix.
  • e-mail gerado internamente pelo próprio sistema Postfix para retornar o correio não entregue ao remetente: os deamons bounce (chamado também pelo nome defer) encaminha as más notícias.
  • e-mail encaminhado pelo agente de entrega local, seja através de uma entrada no banco de dados de alias do sistema, ou através de uma entrada em um arquivo .forward por usuário: isto está indicado com a seta não marcada.
  • e-mail gerado internamente pelo próprio sistema Postfix, a fim de notificar o postmaster de um problema (esse caminho também é indicado com a seta não marcada): o sistema Postfix pode ser configurado para notificar o postmaster de problemas de protocolo SMTP, violações de políticas UCE, e assim por diante.
  • o daemon cleanup implementa a fase final de processamento de novas mensagens. Ele adiciona na mensagem, quando ausente, o “From:” e outros cabeçalhos da mensagens, organiza a reescrita de endereços a forma padrão user@fully.qualified.domain e, opcionalmente, extrai os endereços de destinatários dos cabeçalhos das mensagens. O daemon cleanup insere o resultado como um arquivo na fila única de entrada e notifica o gerenciador de filas qmgr da chegada do novo correio. O daemon cleanup pode ser configurado para transformar endereços com base nas tabelas de pesquisas canônica e virtual.
  • a pedido do daemon cleanup, o daemon trivial-rewrite reescreve os endereços para a forma padrão user@fully.qualified.domain.

6) Arquivos de configuração do postfix
Os dois principais arquivos de configuração do postfix são:
/etc/postfix/master.cf; e
/etc/postfix/main.cf

Se alterar um desses arquivos, o postfix deve ser recarregado:
# /etc/init.d/postfix reload

Normalmente, o arquivo que se edita com maior frequência é “main.cf”, que é o arquivo onde estão definidos os parâmetros que controlam o comportamento dos processos daemon do Postfix. Se o valor de um parâmetro não for especificado no “main.cf”, o Postfix usará o valor padrão que está codificado diretamente no código-fonte.

O formato do arquivo de configuração main.cf pode ser encontrado em postconf(5), ou através de linha de comando via terminal:
$ man -e 5 postconf

Neste arquivo de documentação se descreve todos os parâmetros de configuração disponíveis.


7) Processo mestre do postfix: master

O daemon “master(8)” ($ man -e 8 master) é o processo residente que executa os daemons Postfix sob demanda: daemons para enviar ou receber mensagens via rede, daemons para entregar o correio localmente, etc. Esses daemons são criados sob demanda até um número máximo configurável por serviço.

O comportamento do deamon master(8) é controlado através do arquivo de configuração master.cf, como está descrito em master(5) ($man -e 5 master).

8) Caixas de correio para entregas locais
As caixas de correio podem ser de dois formatos: maildir e mbox. Por padrão, o Postfix entrega as mensagens locais (mensagens para os domínios listados no parâmetro de configuração, em main.cf, mydestination) no formato mbox. O formato mbox para caixas de correio armazena todas as mensagens de uma caixa de correio em um único arquivo de texto. Cada usuário terá sua caixa de correio.

O local onde estarão estas caixas de correio é definida através do parâmetro de configuração, em main.cf, chamado mail_spool_directory. Por padrão do Postfix no Debian, seu valor é /var/mail, conforme podemos ver:

# postconf | grep mail_spool_directory
mail_spool_directory = /var/mail

Vejamos um exemplo típico de conteúdo desta pasta:

$ ls -la /var/mail
total 16
drwxrwsr-x 2 root mail 4096 .
drwxr-xr-x 12 root root 4096 ..
-rw-rw---- 1 antonio mail 514 antonio
-rw-rw---- 1 sergio mail 1015 sergio

Temos dois arquivos que correspondem as caixas postais de destino de dois usuários: cada arquivo correspondendo a um usuário da máquina local. Ou seja, o arquivo de caixa de correio tem o mesmo nome do usuário do S.O. As mensagens que chegam para cada usuário vão sendo adicionadas uma após a outra dentro do arquivo de destino correspondente.

Caso se deseje alterar esta pasta padrão de entrega das mensagens do Postfix (que no caso do Debian é a pasta /var/mail), fazê-lo através do parâmetro de configuração home_mailbox (em main.cf).
Obs: o parâmetro home_mailbox só é eficaz para domínios locais quando o próprio Postfix realiza a entrega. Se a entrega for feita por algum outro agente de entrega como Procmail ou Maildrop, será necessário configurar esse software para entrega maildir.

9) Apelidos locais (“local aliases”)
Tabelas de apelidos locais ($ man -e 5 aliases) fornecem um mecanismo ao sistema para redirecionar o correio (e-mail) para outros destinatários locais, ou pertencentes a qualquer domínio da internet. Essas tabelas de pesquisa são especificadas através do parâmetro do Postfix alias_maps. O valor padrão é mostrado a seguir:
# postconf -n | grep alias_maps
alias_maps = hash:/etc/aliases

É possível indicar mais de uma tabela de apelidos locais (“local aliases”). Para isso, estas devem estar listadas no parâmetro do Postfix “alias_maps” separadas por espaços em branco ou vírgula. As tabelas serão procuradas na ordem especificada até encontrar uma correspondência. Nota: estas procuras são recursivas.

Os redirecionamentos são processados pelo agente Postfix de entrega de e-mails “local“. Ou seja, só serão aplicados a apelidos de usuários locais (apelidos a nível do S.O.) e já na última etapa de trabalho do Postfix. O arquivo /etc/aliases é parte do sendmail ($ man sendmail), que é instalado no momento da instalação do Postfix. Esta tabela se encontra em /etc/aliases, podendo ser editada. Para que a tabela tenha efeito, é necessário executar o comando a seguir:
# newaliases

Esse comando serve para construir o arquivo de mapa /etc/aliases.db, que será lido e interpretado pelo Postfix. O arquivo aliases.db é um banco de dados em arquivo em formato BDB:
$ file /etc/aliases.db
/etc/aliases.db: Berkeley DB (Hash, version 9, native byte-order)

Um arquivo típico de apelidos (“aliases”) locais poderia ser:
# arquivo típico de aliases
# neste arquivo de aliases declaramos os apelidos e as contas de destino
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
operador: licia@comando.com
news: root
webmaster: root
security: root
www: root
ftp: root
abuse: root
noc: root
security: root
root: sergio
redes: antonio, sergio

Pelo exemplo da tabela aliases acima, todas as mensagens enviadas para os usuários postmaster, nobody e hostmaster acabarão caindo na caixa postal do usuário local sergio. Já as mensagens destinadas ao operador serão reencaminhadas ao endereço licia@comando.com.
Obs: mailer-daemon, hostmaster e postmaster são endereços especiais de mail exigidos por vários RFC’s (em especial a RFC 2142, section 5).


10) Verificando a porta do serviço de e-mail

Uma maneira mundo fácil é utilizando a ferramenta Telnet. Telnet é uma ferramenta bastante útil para solucionar problemas relacionados ao SMTP e fluxo de mensagens. Por exemplo, Telnet pode ser usado para verificar se o SMTP está instalado corretamente e que ele possui todos os comandos necessários.

Verificaremos se o serviço de e-mail está funcionando, e em que porta ele está configurado para trabalhar (porta 25 ou a 465):

$ telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 server17.netlivre.org ESMTP Postfix (Debian/GNU)

$ telnet 127.0.0.1 465
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

Pelas duas tentativas acima vemos claramente que a porta em uso é a porta 25.

11) Testando envio de e-mail para usuários locais com o aplicativo “mail”

Tem um aplicativo que envia e-mail via texto, chamado “mail” ($ man mail).
Exemplo de comando:
$ mail root -s teste10
digitar aqui o corpo da mensagem <Enter>
<Ctrl-D>

12) Testando envio de e-mail para usuários locais com o aplicativo “Telnet”
Supondo que a porta em uso é a 25, teremos:

$ telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 server17.netlivre.org ESMTP Postfix (Debian/GNU)
helo netlivre.org
250 server17.netlivre.org
mail from: antonio
250 2.1.0 Ok
rcpt to: sergio
250 2.1.5 Ok
rcpt to: root
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
subject: teste com uso do telnet
Teste de envio de mensagem com Telenet. Vamos esperar que a mensagem seja enviada.
.
250 2.0.0 Ok: queued as 8DD22DA0072
quit
221 2.0.0 Bye
Connection closed by foreign host.

No exemplo acima, temos uma mensagem que foi enviada para os usuários sergio e root.

Verificando existência de usuários:
# telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 server17.netlivre.org ESMTP Postfix (Debian/GNU)
vrfy root
252 2.0.0 root
vrfy sergio
252 2.0.0 sergio
vrfy redes
252 2.0.0 redes
vrfy joao
550 5.1.1 <joao>: Recipient address rejected: User unknown in local recipient table

No caso acima, os usuários root, sergio e redes existem na máquina. Já o usuário joao é inexistente.

Referências:
1- Servidor de e-mail Postfix (parte 2 – logs e programas de suporte)
2- Postfix – Debian Wiki
3- Exemplo de um arquivo de configuração do Postfix main.cf
4- PostfixBasicSetupHowto

O filtro de conteúdo AMaViS

Publicado: 13/09/2017 em Linux, Serviços IP
Tags:,

1. Introdução
AMaViS = A Mail Virus Scanner
AMaViS é um filtro de conteúdo de código aberto para correio eletrônico, implementando transferência de mensagens, decodificação, alguns procedimentos de verificação, e interface com filtros de conteúdo externos para fornecer proteção contra spam, vírus e outros malwares. Pode ser considerada uma interface entre um remetente (MTA, Mail Transfer Agent) e o Antivírus.

O AMaViS por si só não é um antivírus, ele faz esta interface, chamando o antivírus, previamente configurado, para fazer a varredura dos e-mails que chegam ao servidor. Outro recurso que pode ser utilizado é o bloqueio de mensagens com arquivos anexos de extensão .exe, .com etc.


2. Entendendo um pouco mais o AMaViS

AMaViS pode ser usado para:

  • detectar vírus, spam, tipos de conteúdo banidos ou erros de sintaxe nas mensagens de correio;
  • bloquear, marcar, redirecionar (usando sub-endereçamento) ou encaminhar a mensagem dependendo do seu conteúdo, origem ou tamanho;
  • quarentena (e liberação), ou arquivar mensagens de correio para arquivos, para caixas de correio ou para um banco de dados SQL;
  • limpar as mensagens passadas usando um “sanitizante” externo;
  • gerar assinaturas do DKIM;
  • verificar as assinaturas do DKIM e fornecer uma lista branca baseada em DKIM.

Características notáveis do AMaViS:

  • fornecer estatísticas SNMP e monitoramento de status usando uma extensiva MIB com mais de 300 variáveis;
  • fornecer logs de eventos estruturados no formato JSON;
  • honrar adequadamente as configurações por destinatário mesmo em mensagens de vários destinatários, enquanto escaneia a mensagem uma única vez apenas;
  • suportar email internacionalizado (RFC 6530, SMTPUTF8, EAI, IDN).

Uma instalação de filtragem de correio comum com AMaViS consiste em um Postfix como MTA, SpamAssassin como classificador de spam e ClamAV como proteção anti-vírus, todos executados em um sistema operacional similar a Unix. Muitos outros scanners de vírus (cerca de 30) e alguns outros scanners de spam (CRM114, DSPAM, Bogofilter) também são suportados, bem como alguns outros MTAs.

 

3. Instalar o AMaViS
# apt-get install amavisd-new zoo unzip bzip2 arj unrar cpio lzop


4. Configurar o serviço

a) Colocar o Amavis para ouvir também na porta 10026, além do padrão 10024:
Editar /etc/amavis/conf.d/20-debian_defaults, e fazer:
$inet_socket_port = [10024,10026]; # default listening socket

Obs: reiniciar o Amavis

b) Veriifcar se o AMaViS está ativo:
# netstat -tap | grep amavis (ou ainda: netstat -tapun | grep amavis )
tcp 0 0 localhost.localdo:10024 *:* OUÇA 24341/amavisd-new (
tcp 0 0 localhost.localdo:10026 *:* OUÇA 24341/amavisd-new (

# ps -A | grep amavi
28142 ? 00:00:00 /usr/sbin/amavi
28167 ? 00:00:00 /usr/sbin/amavi
28168 ? 00:00:00 /usr/sbin/amavi

# /etc/init.d/amavis status -l
● amavis.service - LSB: Starts amavisd-new mailfilter
Loaded: loaded (/etc/init.d/amavis)
Active: active (running) since Ter 2017-09-12 21:45:18 -03; 1h 22min ago
Process: 28123 ExecStop=/etc/init.d/amavis stop (code=exited, status=0/SUCCESS)
Process: 28130 ExecStart=/etc/init.d/amavis start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/amavis.service
├─28142 /usr/sbin/amavisd-new (master)
├─28167 /usr/sbin/amavisd-new (ch3-avail)
└─28168 /usr/sbin/amavisd-new (ch2-avail)

# 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

# telnet 127.0.0.1 10026
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready

Obs: <quit> para sair

Parar/reiniciar/status e outros:
# /etc/init.d/amavis stop|start|restart|debug|status

c) logs:
Por padrão os arquivos de logs do AMaViS está em: /var/log/mail.log

5. Interface com o Postfix

a) Configurar o servidor smtp (postfix) para enviar os emails a serem filtrados. Deve-se instruir o Postfix para enviar os emails para o amavisd-new, o que é feito no ficheiro /etc/postfix/main.cf inserindo as seguintes linhas:
content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings

b) Configurar no Postfix o serviço para recebimento dos emails filtrados do amavisd-new, o que é feito no ficheiro /etc/postfix/master.cf:

amavis unix - - - - 2 smtp
      -o smtp_data_done_timeout=1200
      -o smtp_send_xforward_command=yes
      -o smtp_bind_address=

Onde:

  • unix: acessível para clientes locais apenas;
  • 2: número de instãncias simultâneas (que estará sendo programada no próprio arquivo de configuração do AMaViS para ouvir as portas 10024 e 10026).
  • smtp: comando a ser executado.

c) Reiniciar o postfix
# systemctl restart postfix

d) Entendendo um pouco mais

    • os arquivos main.cf e master.cf definem como as instâncias do postfix se conectarão aos serviços (amavis, dovecot, smtpd, smtps….), bem como define qual o programa daemon executará quando um serviço é solicitado.
    • verificar que os serviços estão funcionando:
# netstat -tap | grep 1002
   tcp    0   0 localhost.localdo:10023 *:*    OUÇA     850/postgrey.pid --
   tcp    0   0 localhost.localdo:10024 *:*    OUÇA     14157/amavisd-new (
   tcp    0   0 localhost.localdo:10025 *:*    OUÇA     24488/master    
   tcp    0   0 localhost.localdo:10026 *:*    OUÇA     14157/amavisd-new (
   tcp    0   0 localhost.localdo:10027 *:*    OUÇA     24488/master 
    • verificar que o amavisd-new aceita ligações:

# 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
.

    • verificar que o postfix pode receber de volta os emails filtrados:

# telnet 127.0.0.1 10025
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 luna1016.startdedicated.com ESMTP Postfix (Debian/GNU)
quit
221 2.0.0 Bye
Connection closed by foreign host.

  • Próximo passo: fazer a instalação e configuração dos filtros.

6. Alguns comandos úteis do Postfix
Listamos a seguir alguns comandos úteis para administração das filas de mensagens do MTA Postfix.

Comando Descrição
mailq Visualizar a fila de mensagens do postfix
postfix flush Reenviar todos os emails da fila de mensagem, esvaziando o buffer.
postcat -vq message_id Visualizar o conteúdo de determinada mensagem.
postsuper -d message_id Deletar uma mensagem da fila.
postsuper -d ALL Deletar todas as mensagens da fila do Postfix.
qshape deferred Mostra a fila de mensagens deferred.
Ferramenta de configuração do Postfix:
postconf
postconf -n
postconf -e parâmetro=valor
Mostra todos os parâmetros.
Exibe os parâmetros não padrão.
Adiciona um novo parâmetro no final do arquivo.
postque -i message_id Iniciar a entrega imediata de uma mensagem da fila deferred.
postqueue -s nome_dominio Iniciar a entrega imediata de mensagens na fila para um domínio especifico.
qshape active Mostra o conteúdo da fila active.
qshape incoming Mostra o conteúdo da fila incoming.
qshape hold Mostra o conteúdo da fila hold.
qshape deferred Mostra o conteúdo da fila deferred.
qshape -s Mostra os domínios de destino.

 

Para enviar email direto pelo prompt:
$ mail “conta_de_email” <Enter>
Subject: meu assunto  <Enter>
corpo_da_mensagem  <Enter>
Para sair, pressione CTtrl + D.

7. Cuidados especiais:
Inicialize os daemons do ClamAV e do AMaViS e reinicialize o Postfix:

# /usr/local/sbin/clamd
# /usr/local/sbin/amavisd
# postfix reload

A seqüência de inicialização deverá ser preferencialmente esta, visto que o Postfix dependerá do AMaViS, e este do ClamAV, para fazer a verredura dos e-mails. Verifique os arquivos de log, para ver se todos os daemons estão funcionando corretamente.

7. Outras verificações de serviços de rede
# ps -A | grep fail2ban
# ps -A | grep dovecot
# ps -A | grep freshclam

 

Links:
1- PostfixAmavisNew
2- Proteção contra Vírus no Postfix
3- Manual postfix
4- sobre o DKIM
5- Controlando as filas do postfix
6- Manual comando qshape do Postfix
7- Manual comando postsuper do Postfix
8- Postfix FAQ

Mime types

Publicado: 12/05/2013 em Programação
Tags:, ,

Mime – Multipurpose Internet Mail Extensions

“Mime Type” consiste de de um sistema de identificadores padronizados (gerenciados pela IANA) consistindo de um tipo e um sub-tipo, separados por uma barra. A combinação de tipo e subtipo é geralmente chamada “MIME type“. Exemplos:
text/html
text/plain
image/gif

Assim:

  • “type” é referente a um grupamento lógico de vários MIME types que são relacionados um ao outro; isto é, uma categorização de alto nível;
  • “subtypes” são específicos para um determinado tipo de arquivo dentro do seu grupo.

O MIME identifica o tipo de dado contido no arquivo. Como consequência, MIME é largamente utilizado para indicar qual o programa que deveria ser utilizado para abrir o arquivo. Por exemplo, usando o valor do cabeçalho “Content-type” definido em uma resposta HTTP, o navegador pode abrir o arquivo com uma aplicação apropriada. Na máquina local, o arquivo “/etc/mime.types” contém as regras definidas para mapeamento do “filename” para os MIME types.

Sobre o “Content-type”, este é simplesmente um cabeçalho presente em muitos protocolos, tal como em HTTP, que faz uso dos “MIME types” para especificar a natureza do arquivo que está sendo tratado.

Abaixo temos exemplos de alguns Mime Type padrões:

Código tratador         Extensão do Arquivo
 (Mime Types)
---------------------------------------------
image/x-icon                    ico
image/bmp                       bmp
image/jpeg                      jpeg jpg jpe
image/svg+xml                 svg
image/png                       png
text/plain                        asc txt
text/css                           css
text/html                         html htm shtml
application/xml                 xml xsl
application/cgi                  cgi
application/x-javascript        js
application/x-tar               tgz tar
application/pdf                 pdf 
application/ogg                ogg
application/x-httpd-php-source  phps

Referências:
1- Official IANA MIME type list

Ícone do MuttO Mutt é um aplicativo baseado em texto (para terminais) que interage com os usuários através de menus diferentes, que são na sua maioria line-/entry-based ou baseado em página. Um menu baseado em linha é o conhecido menú de “índice” (listando todas as mensagens da pasta atualmente aberta) ou o “alias” menu (permitindo-lhe selecionar os destinatários a partir de uma lista). É um aplicativo poderoso para leitura e envio de emails em sistemas operacionais UNIX/Linux.

O mutt é tão somente um MUA (“Mail User Agent”, que é a parte que o usuário enxerga para enviar e receber emails.), ou seja, ele NÃO é um MTA (“Mail Transfer Agent”, que é a parte que faz o roteamento e a transferência do mail entre hosts, ISPs, e assim por diante).

1. Instalar o Mutt
O mutt possui os pacotes mutt e mutt-patched o qual inclui alguns patches extras, como por exemplo a lista das caixas de e-mail de um dos lados da tela (direito ou esquerdo dependendo da configuração do .muttrc);

# apt-get install mutt mutt-patched

Após a instalação o mutt ainda não tem seu arquivo de configuração. Caso o mutt seja chamado pela linha de comando, este tentará ler e-mail’s da máquina local. Não há problema nisso, mas certamente não haverá e-mail a ser mostrado.

2. Os arquivos de configuração do Mutt
As configurações básicas do Mutt estão na pasta /etc/Muttrc.d/. Nesta pasta existem alguns arquivos com a extensão “.rc”. São arquivos de diretivas de configurações gerais que neste primeiro momento não necessitarão de alterações. Já na pasta /usr/share/doc/mutt existem arquivos de documentação e de exemplos. Em especial, veja os arquivos manual.txt.gz (manual completo) e o arquivo README.Debian (aqui algumas dicas de como configurar o .muttrc). Se o usuário dispor de um navegador, o manual também está disponível na forma de hipertexto em file:///usr/share/doc/mutt/html/index.html. Na subpasta /exemplos, tem, entre outros, o arquivo Muttrc.gz que deve ser olhado.

3. Configurar as diretivas gerais do Mutt
O arquivo principal de configuração do mutt é o .muttrc. Este arquivo fica na pasta raiz do usuário. O Mutt é muito configurável e muito funcional. Pode-se configurar o básico do Mutt e explorar opções mais avançadas em um outro momento.

Para ter o .muttrc funcional rapidamente, sugere-se que utilize as configurações padrões que ficam em /etc/Muttrc.d/ e se personalize para ter acesso ao servidor de email MTA do usuário. Faça isso através de um laço for da seguinte forma:

$ for i in /etc/Muttrc.d/*.rc; do cat $i >> ~/.muttrc;done

Deve ser verificado se foi gerado o arquivo .muttrc na pasta raiz do usuário, contendo as diretivas de configurações mais comuns. O próximo passo é ajustar as diretivas em .muttrc para o Mutt poder ler a caixa de e-mail do usuário, por exemplo imap do gmail.

4. Configurar as diretivas de configuração do Mutt para acesso ao Gmail

Adicione as seguintes linhas ao arquivo ~/.muttrc:

set realname="José Osório dos Reis" # Nome real para aparecer no email
set imap_user = 'usuario_gmail@gmail.com'
set imap_pass=""
set folder = "imaps://imap.gmail.com:993/"
set spoolfile = +INBOX
set imap_check_subscribed
set smtp_url = "smtp://usuario_gmail@smtp.gmail.com:587/"
set smtp_pass= ""
set sort = threads
set sort_aux = reverse-date

Note que o Mutt irá solicitar senhas para imap e smtp. As senhas também podem ser colocadas diretamente nos campos em aspas. Mas cuidado, pois fragiliza a SEGURANÇA.

As linhas seguintes completam as funcionalidades básicas do Mutt com gmail, ajustando as questões de pastas laterais, mover para lixeira, gravar e-mail enviados em sentmail, entre outras coisas:

set trash=+[Gmail]/Trash
set record="+[Gmail]/Sent Mail"
set postponed="+[Gmail]/Drafts"
set header_cache="~/.mutt/cache/headers"
set message_cachedir="~/.mutt/cache/bodies"
set certificate_file=~/.mutt/certificates
set sidebar_width=25
set sidebar_visible=yes #no
set sidebar_delim='|'
color sidebar_new yellow default
bind index \CP sidebar-prev
bind index \CN sidebar-next
bind index \CO sidebar-open

Observe que para nagegar no menu da esquerda (para selecionar a pasta de mensagens do Gmail) no Mutt, deve-se usar e . Para abrir as mensagens da pasta selecionada, deve-se usar .

5. Configurar diretivas de cores do Mutt

# colors
color normal     white black
color attachment brightyellow black
color hdrdefault cyan black
color indicator  black cyan
color markers    brightred black
color quoted     green black
color signature  cyan black
color status     brightgreen blue
color tilde      blue black
color tree       red black
color sidebar_new yellow default
color index     yellow         default  ~N      # New
color index     yellow         default  ~O      # Old
color header    yellow         default  "^from"
color header    brightgreen    default  "^from:"
color header    green      default  "^to:"
color header    green      default  "^cc:"
color header    green      default  "^date:"
color header    yellow     default  "^newsgroups:"
color header    yellow     default  "^reply-to:"
color header    brightcyan default  "^subject:"
color header    red        default  "^x-spam-rule:"
color header    yellow     default  "^x-mailer:"
color header    yellow     default  "^message-id:"
color header    yellow     default  "^Organization:"
color header    yellow     default  "^Organisation:"
color header    yellow     default  "^User-Agent:"
color header    yellow     default  "^message-id: .*pine"
color header    yellow     default  "^X-Fnord:"
color header    yellow     default  "^X-WebTV-Stationery:"
color header    yellow     default  "^X-Message-Flag:"
color header    yellow     default  "^X-Spam-Status:"
color header    yellow     default  "^X-SpamProbe:"
color header    red        default  "^X-SpamProbe: SPAM"
color body      yellow     default  "[;:]-[)/(|]"  # colorise smileys

 

6. Configurar outras diretivas do Mutt

set date_format="!%a %b %d, %Y at %I:%M:%S%p %Z"
# ordering of headers in the pager
unhdr_order *
hdr_order Date: From: To: Cc: X-Newsreader: X-Mailer: Organization: Organisation: User-Agent: X-Fnord: X-WebTV-Stationery: X-Message-Flag: Newsgroups: Reply-To: Subject:

7. Hot keys e flags
Mais comuns message index keys
Key      Description
c        change to a different mailbox
Esc c    change to a folder in read-only mode
C        copy the current message to another mailbox
Esc C    decode a message and copy it to a folder
Esc s    decode a message and save it to a folder
D        delete messages matching a pattern
d        delete the current message
F        mark as important
l        show messages matching a pattern
N        mark message as new
o        change the current sort method
O        reverse sort the mailbox
q        save changes and exit
s        save-message
T        tag messages matching a pattern
t        toggle the tag on a message
Esc t    toggle tag on entire message thread
U        undelete messages matching a pattern
u        undelete-message
v        view-attachments
x        abort changes and exit
<Return>    display-message
<Tab>    jump to the next new or unread message
@        show the author's full e-mail address
$        save changes to mailbox
/        search
Esc /    search-reverse
^L       clear and redraw the screen
^T       untag messages matching a pattern

Flat do status da mensagem:
Flag Description
D        message is deleted (is marked for deletion)
d        message has attachments marked for deletion
K        contains a PGP public key
N        message is new
O        message is old
P        message is PGP encrypted
r        message has been replied to
S        message is signed, and the signature is successfully verified
s        message is signed
!        message is flagged
*        message is tagged
n        thread contains new messages (only if collapsed)
o        thread contains old messages (only if collapsed)

8. Alguns comandos úteis via linha de comando
O comando utilizado será o mutt. Segue abaixo o exemplo:

$ cat /caminho/arquivo.txt | mutt -s "Assunto" -a /caminho/arquivoanexo fulano@dominio

Explicando:
arquivo.txt = mensagem que será inserida no corpo do e-mail
arquivoanexo = arquivo que será enviado como anexo, se necessário

Referências:
1- Arquivo de configuração do Mutt
2- Gmail: configurar clientes de email

Pommo, “pos modern mass mailer”, com uma sigla não-muito-bem casada, é um poderoso programa de envio de mails em massa, baseado em servidor web e firmemente enraizada em uma base Linux + Apache + MySQL + PHP base (LAMP): PHP (4.3.2 ou superior) e MySQL 4.1.11 (ou superior) . POMMO foi desenvolvido com o usuário final em mente, o que é demonstrado pela sua rápida instalação baseada na Web (é possível instalar e configurar tudo em menos de 15 minutos), pela sua maneira simples e poderosa de criar e enviar mailings, e pela a sua utilização intuitiva. POMMO está internacionalizado para várias linguas, incluindo Português, Espanhol, Francês Inglês e Italiano.

Enfim, um aplicativo interessante em licenciamento GPL para gerenciar listas de assinantes e envio de emails em massa para um site ou blog.

Como instalar?

  • Primeiro, certifique-se de estar instalado e funcionando o Apache, PHP e MySQL em seu servidor;
  • Faça o download da versão mais recente do Pommo: o arquivo tem um nome semelhante a “poMMo-aardvarkPR16.1.tar.gz”;
  • Extraia os arquivos do pacote baixado no seu computador: $tar -xvf poMMo-aardvarkPR16.1.tar.gz ;
  • Transfira toda a estrutura de arquivos do Pommo para a pasta que será acessada pelo Apache:
  • /var/www# cp -a /home/nome_usuario/download/pommo/ . ; para fazer a cópia recursiva de diretórios mantendo os atributos dos arquivos. Neste caso, a pasta raiz do pommo será /var/www/pommo

    Caso seja uma cópia entre máquinas diferentes (que estejam dentro de uma mesma rede), utilize o comando “scp” para fazer esta cópia. Caso a outra máquina esteja em outra rede, utilize um aplicativo de transferência de arquivos como o “gftp”, utilizando protocolo ftp ou ssh.

  • Ajuste as informações do proprietário e permissões dos arquivos. Utilizando o terminal:
  • /var/www# chmod 750 pommo
    /var/www# chown -R www-data:www-data pommo

  • Vá até o seu gerenciador MySQL e crie um banco de dados para o Pommo. Utilizando o terminal:
  • #mysql -u usuario_admin_mysql -p ; para se autenticar no MySQL
    mysql> show databases; para visualizar as bases de dados existentes
    mysql> CREATE database pommo; para criar base dados necessário ao funcionamento Pommo
    mysql> quit; para sair do MySQL

  • Abra o arquivo /var/www/pommo/config.sample.php, coloque as informações relacionadas ao seu servidor e site. Em seguida salve o arquivo como config.php. Um arquivo config.php simples pode ser assim:
  • <?php die();
    ?>
    [db_hostname] = “localhost”
    [db_username] = “root”
    [db_password] = “senha_admin_bd”
    [db_database] = “pommo”
    [db_prefix] = “pommo_”

    [lang] = pt-br

    [debug] = off
    [verbosity] = 3
    [date_format] = 3

    ** [baseURL] = “/mysite/newsletter/”
    ** [workDir] = “/path/to/pommoCache”
    [hostname] = pommo.meusite.org
    ** [hostport] = 8080

  • Acerte o Apache, dando autoridade para o novo site no servidor. Isto pode ser feito de algumas maneiras diferentes, onde uma das possibilidades é pela configuração do novo site através do arquivo /etc/apache2/httpd.conf:
  • <VirtualHost *:80>
    ServerName pommo.meusite.org
    DocumentRoot /var/www/pommo
    DirectoryIndex /index.php
    ErrorDocument 404 /documentoerro404.html
    </VirtualHost>

  • Se o Apache estiver na mesma máquina do Pommo:

    /etc/init.d/apache2 restart ; para reiniciar o apache

  • Agora utilize o seu navegador para ir até o local onde o Pommo foi instalado (por exemplo,  http://pommo.meusite.org) e siga as instruções que faltam para a instalação.
  • Endereços importantes:
    1. atualizar seus dados ou cancelar sua assinatura: http://meusite/pommo/user/login.php
    2. para inscrever-se na lista: http://meusite/pommo/user/subscribe.php

    Bom uso!

    Mais informações:
    1- Manual de instalação do Pommo
    2- Características do Pommo
    3- Gerenciar lista de assinantes com o Pommo
    4- Pommo mailing list e newsletter