Servidor SMTP simples com OpenSMTPD

O grande pessoal do OpenBSD lançou mais um software fabuloso: OpenSMTPD . É mais fácil de configurar com segurança do que qualquer outro servidor de e-mail de código aberto.

Então, o que vamos configurar hoje? Vamos configurar um servidor de correio simples que aceita correio de um domínio para uma máquina local, bem como permite que usuários locais enviem correio.

Baixe e instale o opensmtpd:

$ wget http://www.opensmtpd.org/archives/opensmtpd-portable-latest.tar.gz
$ tar xzvf opensmtpd
-portable-latest.tar.gz
$ cd opensmtpd
-*
$
./configure && make && sudo make install
$ sudo adduser
--system --home /var/empty --no-create-home --shell /bin/false _smtpd

O OpenSMTPD não vem com um arquivo de unidade systemd ou um script de inicialização. Vou deixar escrevendo um como um exercício para o leitor.

Vamos configurar. Abra /usr/local/etc/smtpd.confem seu editor de texto favorito (presumo que você seguiu meu exemplo e não especificou um prefixo).

listen on eth0
table aliases file
:/etc/aliases
accept
from any for domain "spamd.worrbase.com" alias <aliases> deliver to mbox
accept
for local alias <aliases> deliver to mbox
accept
for any relay

Aqui estão os fundamentos de um arquivo de configuração para smtpd. Vamos examinar as linhas uma por uma.

listen on eth0

Esta linha é bastante autoexplicativa – instrui o OpenSMTPD a escutar na interface eth0.

Apelido

table aliases file:/etc/aliases

Esta linha especifica qual arquivo contém a tabela de aliases. Se você deseja ter endereços de e-mail que não mapeiam para nomes de usuário, esta é uma maneira de criá-los. Um arquivo de aliases tem o seguinte formato:

root: ubuntu
postmaster
: root
hostmaster
: root
webmaster
: root

O nome antes dos dois pontos é o nome do alias e o nome (ou nomes separados por vírgula) após os dois pontos é a conta de usuário para a qual ele vai. Algumas listas de e-mail básicas são configuradas por meio de apelidos de e-mail.

Depois de modificar os aliases, você deve executar newaliases se smtpd estiver em execução

accept from any for domain "spamd.worrbase.com" alias <aliases> deliver to mbox

Esta linha diz ao smtpd para aceitar o correio de qualquer host do domínio especificado e entregá-lo ao destinatário no formato mbox. Ele também especifica a tabela de alias que estamos usando.

accept for local alias <aliases> deliver to mbox

Esta linha permite entrega local. Por exemplo , enviará mensagens para usuários que nunca tocam na internet. Esta linha é para isso. Novamente, dizemos a ele para usar mbox e também fornecer nossa tabela de aliases.cron(8)

mbox vs Maildir

Dois dos formatos de caixa de correio mais populares são mbox e Maildir. O mbox armazena os e-mails de cada usuário concatenados em um único arquivo, normalmente ./var/mail/username

Maildir separa cada e-mail em um único arquivo, geralmente em . Maildir conterá pastas chamadas cur, new e tmp que contêm os e-mails individuais. Se houver subpastas, elas estarão , também com os arquivos cur, new e tmp.~username/Maildir~username/Maildir/.folder

mbox é adequado para pequenos sites. Em sites maiores, os arquivos de e-mail podem ficar muito grandes, especialmente se houver mensagens com anexos grandes. Também tenha em mente que, se você fizer backups, seus arquivos mbox quase sempre terão backups, pois eles mudam com frequência.

O Maildir é uma ótima escolha para sites maiores (não necessariamente corporativos), já que você não acaba com arquivos enormes que podem levar um tempo significativo para abrir. No entanto, a exaustão do inode é geralmente um problema com as implantações do Maildir devido ao grande número de arquivos.

OpenSMTPD suporta ambos os formatos.

Entrega externa

accept for any relay

Agora chegamos à última linha de nossa configuração, e é a que parece mais perigosa. Esta linha nos diz que para correspondência destinada a qualquer destino, iremos retransmiti-la. O OpenSMTPD descobre o servidor de email para o qual retransmitir, fazendo uma pesquisa DNS do registro MX.

Isso seria perigoso, mas não é neste caso. Por quê? O padrão do OpenSMTPD é aceitar apenas e-mails da máquina local se nada for especificado. Eles querem que você seja explícito ao aceitar e-mails de outros locais. Portanto, tudo o que essa regra faz efetivamente é permitir que os usuários enviem e-mails para a Internet.

Vamos falar sobre por que retransmitir qualquer mensagem seria perigoso muito rápido.

Os perigos de uma retransmissão aberta

Uma retransmissão aberta é um servidor de email que aceitará emails para qualquer destino e os retransmitirá para qualquer destino remoto. Os spammers adoram usar isso para rotear e-mails sem expor seus servidores de e-mail a listas negras ou cinza.

Parte da minha motivação para escrever este protocolo é que muitos HOWTOs básicos de servidores de e-mail instruem você a construir uma retransmissão de e-mail aberta. Este não.

Executando OpenSMTPD

Agora que construímos nossa configuração, vamos executá-la!

$ sudo smtpd

Agora está funcionando. Se você deseja enviar comandos para , use . Por exemplo, para ver a fila de saída, ( em postfix-lang), você pode usarsmtpd(8)smtpctl(8)mailq(8)

$ sudo smtpctl show queue

Outra forma de correr énewaliases(8)

$ sudo smtpctl update table aliases

Você pode parar, pausar ou retomar comsmtpd(8)

$ sudo smtpctl (stop|pause|resume)

Existem muitos mais comandos para fazer depuração, obter estatísticas, etc. Verifique para obter mais informações.man 8 smtpctl

Esta é apenas a ponta do iceberg. Isso não cobre a configuração de POP3 / IMAP ou filtragem de spam. Isso pode vir em outro protocolo.