Configuração do exim4 para envio de e-mails

Muitas aplicações linux necessitam de enviar notificações por e-mail. Por exemplo o cron jobs utiliza o e-mail para enviar relatórios e alertas… no meu caso interessa-me que os diversos scripts descritos ao longo destes posts me enviem e-mails no caso de excedidas as características técnicas do raspberry pi, se tenho mensagens na BBS para mim, ou se houve actualizações de software…

Decidi-me pelo exim4 Mail Transport Agent pela simplicidade de configuração, espaço em disco e a necessidade de recursos mínimos de CPU.

O meu raspberry pi corre a versão Debian Buster e para instalar o exim4 deve fazer o seguinte,

Definir o nome da sua máquina descrito no artigo - Configurar correctamente o nome de uma máquina linux

Actualizar o seu sistema e instalar o exim4

Configurar o exim4

Siga os passos seguintes, responda às questões do instalador adaptando as respostas às suas configurações,

- a primeira janela pergunta-lhe qual o tipo de servidor que pretende. Para o que pretendo, seleccionei "mail sent by smarthost; no local mail"
- a próxima, pergunta-lhe pelo nome do servidor de e-mail. Escreva o nome que utilizou no hostname
- a seguir, quais são os endereços IP que podem utilizar o servidor. Responda com "127.0.0.1 ; ::1"
- próxima, outros destinos para os quais correio é aceite. No meu caso utilizei as configurações de hosts para o meu endereço de IP público (endereço fixo): "ct1ebq.oitaven.pt; localhost.localdomain; localhost;" ou deixe em branco
- nome de domínio visível para utilizadores locais, uma vez mais no meu caso "ct1ebq.oitaven.pt"
- endereço IP ou host name para o envio de correio. No meu caso "mail.opensolutions.pt::587". Aqui, por exemplo, poderia ser o servidor de envio do gmail, ao qual responderia "smtp.gmail.com::587"
- mantenha o pedido de nomes DNS mínimas (Dial-on-Demand)? Responda "No"
- dividir a configurações em diversos ficheiros? Seleccione "Yes"

O resultado do meu ficheiro de configuração foi,

Agora tem de configurar os detalhes da conta de envio de correio. Edite o ficheiro /etc/exim4/passwd.client e adicione esta linha no final, de acordo com as suas configurações

Proteja este ficheiro,

Os restantes ficheiros de configurações encontram-se em /etc/exim4
Não os altere. Sempre que faça alterações a qualquer configuração de correr o comando sudo update-exim4.conf e reiniciar o exim4.

Notas:

Acabei por fazer pequenas alterações aqui e ali. Deixo-as também para minha referência,

Editei o ficheiro /etc/exim4/exim4.conf.localmacros

O ficheiro /etc/exim4/exim4.conf deve conter as linhas seguintes, para a minha configuração,

Foram estas linhas que permitiram o meu servidor de e-mail aceitar e-mails sem erros.

Alguns processos, como referi no início, poderão enviar e-mails para o root ou outros utilizadores do sistema: pi ou pi-star.
Edite o ficheiro /etc/aliases e modifique de acordo com as suas configurações. O meu ficou assim,

Basicamente, todos os e-mails enviados são re-encaminhados para root, que por sua vez re-encaminha para o user pi-star, tendo como final destinatário ct1ebq.
Corra o seguinte comando para aplicar as alterações,

Pode ainda criar configurações mais complexas que resolvam users e nome de máquina em e-mails verdadeiros. Edite o ficheiro /etc/email-addresses

sudo nano /etc/email-addresses

E acrescente as linhas que pretender. Eis um pequeno exemplo,

Vamos testar

Aplique as suas configurações e reinicie o exim4,

Envie um e-mail a partir da linha de comandos linux,

"-v" dá-lhe os detalhes da comunicação e indica-lhe algum erro que possa ter de corrigir.
Mais 2 exemplos, para o envio de um pequeno texto,

Não esqueça de fazer cópias de segurança depois do exim4 bem configurado e testado!

Referências:
(alguns dos links que segui)
https://www.exim.org/docs.html
https://www.digitalocean.com/community/tutorials/how-to-install-the-send-only-mail-server-exim-on-ubuntu-12-04
https://raspinotes.wordpress.com/2019/03/10/send-email-from-raspberrypi-with-exim4/
http://www.manu-j.com/blog/wordpress-exim4-ubuntu-gmail-smtp/75/
https://askubuntu.com/questions/167043/how-do-i-configure-exim4-to-send-mail-through-a-password-protected-ssl-smtp-mail
https://linuxcommando.blogspot.com/2014/04/how-to-setup-exim4-on-debian-to-use.html
https://www.vultr.com/docs/setup-exim-to-send-email-using-gmail-in-debian

Configurar correctamente o nome de uma máquina linux

Quando temos um servidor linux, um computador desktop, ou mesmo um raspberry pi há serviços que gostariamos de correr que dependem de uma boa configuração do nome da máquina.

No meu caso o que me levou a esta necessidade foi a instalação do serviço para envio de e-mails de alerta e notificação, o exim4 a correr no raspberry pi.

A instalação do exim4, se pretendermos enviar e-mails como cliente para servidores como o gmail ou servidores de correio muito exigentes em termos de filtragem do que é ou não é spam obriga-nos a uma configuração bem feita.

Em qualquer distribuição linux o nome da nossa máquina é configurado em 2 ficheiros: /etc/hosts e /etc/hostname, idependentemente de existirem ferramentas para os editar e configurar automaticamente…

Deixo aqui o exemplo da configuração de ambos os ficheiros,

hostname, deve conter apenas uma linha com o nome da máquina. Faça,

e na primeira linha escreva o nome que quer dar à sua máquina. Geralmente o nome define a função deste computador ou servidor. No meu caso, escrevi: ct1ebq

Para ver o resultado, após o reboot da máquina faça,

O que no meu caso devolve,

 Static hostname: ct1ebq
       Icon name: computer
      Machine ID: 18634e1464184094bc66dcacfba0bf43
         Boot ID: ac42129fd59b46528ae6c13fd83ca8d6
Operating System: Raspbian GNU/Linux 10 (buster)
          Kernel: Linux 5.4.72-v7l+
    Architecture: arm

Agora o ficheiro hosts.

Este ficheiro permite o computador resolver nomes sem consultar qualquer servidor de DNS. Resolve os nomes em endereços IP do próprio computador, de computadores da rede de intranet ou da Internet.

Recordem que o que me levou a uma correcta configuração do nome da máquina foi a necessidade de autenticação num servidor de e-mail na Internet.
Tive então de utilizar um domínio que já tenho: oitaven.pt e indicar que o nome da minha pequena máquina é um subdomínio de oitaven.pt

Não esquecer que, para toda a Internet, o nome da minha máquina só será reconhecido depois de configurar no servidor de DNS um A HOST com a variável "ct1ebq".

Edite o ficheiro hosts,

O ficheiro ficou então assim,

89.115.0.209 ct1ebq.oitaven.pt
127.0.0.1 localhost.localdomain localhost

::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 ct1ebq

O nome do meu raspberry pi é ct1ebq e traduz o endereço 89.115.0.209 como subdomínio de oitaven.pt

A configuração do ficheiro /etc/hosts tem efeito imediato e é consultado cada vez que o sistema operativo ou qualquer aplicação solicita a resolução de nomes, por exemplo um browser.
Pode ser alterado a qualquer momento sem reiniciar o computador.