É chegada a hora de fazer nosso servidor vestir aquela farda amarela e azul para fazer papel de carteiro. Escrevi e reescrevi esta parte várias vezes em busca de algo palatável para o leitor. Mas no fim, o método que funciona melhor é o 'polícia brasileira': mata primeiro, pergunta depois.

Nesta parte vamos apenas preparar e instalar tudo o que é necessário para o serviço de correio funcionar. Onde for essencial eu explico a operação com mais detalhes. No final dela não teremos nada funcionando, mas estaremos mais perto disso.

Usuários, grupos e filesystem {#usuários-grupos-e-filesystem}

Vamos criar, em um tapa só, todos os usuários, grupos e caminhos que vamos precisar. Esses usuários são necessários para isolar as coisas e não ter que rodar nada como root. Isso é importante do ponto de vista de segurança, uma vez que evita que um processo tenha acesso a privilégios demais, o que é perigoso caso o servidor seja alvo de uma invasão maliciosa.

# groupadd -g 200 postfix
# useradd -u 200 -d /dev/null -s /bin/false -g postfix postfix
# groupadd -g 201 postdrop
# groupadd -g 202 dovecot
# useradd -d /dev/null -s /bin/false -u 202 -g 202 dovecot
# groupadd -g 239 dkim
# useradd -d /dev/null -s /bin/false -u 239 -g 239 dkim
# groupadd -g 248 dovenull
# useradd -d /dev/null -s /bin/false -u 248 -g 248 dovenull
# groupadd -g 5000 vmail
# useradd -d /var/mail/vmail -s /bin/false -u 5000 -g 5000 vmail
# groupadd -g 5001 spamd
# useradd -d /var/lib/spamassassin -s /bin/false -u 5001 -g 5001 spamd

Usuários criados, hora de criar o espaço em disco.

Crie um novo volume no AWS e anexe-o a sua instância no dispositivo /dev/sdf. Esse volume pode ser magnético, pois performance aqui não é crucial. Custo é e o magnético é o mais barato, metade do preço por GB do General Purpose (SSD).

Se deseja criptografar esse volume, a hora é agora com o KMS. Mas pra isso você tem que estar usando uma instância pelo menos m3.medium. A t1.micro que estamos usando nesta série não suporta criptografia de volumes com o KMS, o que significa que esse volume não será criptografado. Se você está assustado com isso, volte na primeira parte da série e leia com calma a seção 'uma palavra sobre segurança'.

O tamanho desse volume fica por sua conta: se você quiser fornecer 5GB para cada usuário dos 20 que definimos no ViMbAdmin, crie um volume com 200GB. Se você prefere ir crescendo aos poucos, crie um volume menor e escale quando precisar. É isso que eu faço.

Com o volume criado e conectado à instância, rode:

# fdisk /dev/xvdf
<digite n, p, 1, enter, enter, wq>
# mkfs.ext4 /dev/xvdf1
# mkdir -p /var/spool/mail/vmail
# vi /etc/fstab

Coloque isto no final:

#
# Additional volumes
/dev/xvdf1 /var/spool/mail/vmail  ext4        defaults           1   1

Salve e saia do vi. Monte o filesystem e verifique se está tudo certo.

# mount /var/spool/mail/vmail
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.8G  5.3G  2.2G  72% /
tmpfs           296M     0  296M   0% /dev/shm
/dev/xvdf1       25G   44M   24G   1% /var/spool/mail/vmail

Por fim, ajuste a permissão do ponto de montagem:

# chown vmail:vmail /var/spool/mail/vmail

Instalando o pacotão {#instalando-o-pacotão}

Postfix primeiro. Para instalá-lo, também vamos utilizar o SlackBuild padrão, mas dessa vez tem um macetinho: o Postfix precisa ser compilado com suporte ao MySQL. Se você fizer a instalação padrão sem atentar para esse detalhe, ele virá sem suporte ao MySQL e não vai funcionar para o nosso propósito. Felizmente o sbopkg facilita isso.

# sbopkg -r
# sbopkg -i postfix:DATABASE=mysql

Responda com C e P e aguarde compilar e instalar.

O resto (Dovecot, DKIMproxy e SpamAssassin) é padrão, mas preste atenção na ordem das dependências.

E agora é hora do lanchinho. Instalar isso tudo aí vai demorar um bocado.

# sbopkg -i "dovecot dovecot-pigeonhole perl-net-ip perl-digest-sha1 \
  perl-digest-hmac perl-net-dns perl-TimeDate perl-MailTools \
  perl-Crypt-OpenSSL-Random perl-Crypt-OpenSSL-RSA perl-Mail-DKIM \
  perl-Net-Server dkimproxy GeoIP perl-Geo-IP perl-Socket6 \
  perl-Net-CIDR-Lite perl-Net-Patricia razor-agents re2c pyzor \
  perl-Net-Server perl-Net-Ident perl-NetAddr-IP \
  perl-Net-DNS-Resolver-Programmable perl-Mail-SPF perl-TimeDate \
  perl-MailTools perl-Crypt-OpenSSL-Random perl-Crypt-OpenSSL-RSA \
  perl-Mail-DKIM perl-Image-Info perl-Geography-Countries \
  perl-IP-Country perl-Net-LibIDN Net-SSLeay perl-IO-Socket-SSL \
  perl-IO-Socket-INET6 perl-Encode-Detect perl-Crypt-OpenSSL-Bignum \
  perl-www-robotrules perl-net-http perl-IO-HTML perl-lwp-mediatypes \
  perl-http-date perl-html-tagset perl-html-parser perl-encode-locale \
  perl-http-message perl-http-negotiate perl-http-daemon perl-http-cookies \
  perl-file-listing libwww-perl spamassassin"

Durante o processo haverá um aviso na hora de baixar o fonte do pacote perl-IO-Socket-INET6 que vai paralisar o andamento da instalação para aguardar a sua ação. A mensagem será:

ERROR: cannot verify pkgs.fedoraproject.org's certificate, issued by ‘/C=US/ST=North
Carolina/L=Raleigh/O=Fedora Project/OU=Fedora Project CA/CN=Fedora Project
CA/emailAddress=admin@fedoraproject.org’:
  Self-signed certificate encountered.
To connect to pkgs.fedoraproject.org insecurely, use `--no-check-certificate'.

sbopkg: Some https download errors can be worked around by temporarily
adding '--no-check-certificate' to WGETFLAGS. If unsure, see the wget
manual on the use of this flag.

Would you like to have sbopkg attempt this? [Y/n]:

Isso é o wget reclamando que o certificado SSL utilizado pelo servidor onde o fonte está é autoassinado (não emitido por uma entidade certificadora 'reconhecida'). Não é nada grave e o sbopkg sabe como resolver. Apenas responda Y e deixa rolar.

Apesar de ser muita coisa e tudo precisar ser compilado, não devem haver erros fatais. Se houver algum erro e o processo parar de vez, você terá que descobrir sozinho o que houve e corrigir para poder continuar. Todos os pacotes listados são essenciais.

Agora instale os bancos de dados do GeoIP.

ATENÇÃO: esse componente é software fechado e proprietário!

# mkdir -p /var/lib/GeoIP
# cd /var/lib/GeoIP
# wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
# wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
# wget http://download.maxmind.com/download/geoip/database/asnum/GeoIPASNum.dat.gz
# gunzip *.gz

Pronto, temos tudo que precisamos para o nosso servidor receber e enviar emails. Na próxima parte vamos configurar tudo que instalamos agora. Ela será a mais longa, chata e complexa. Dê um descanso para a sua cabeça antes de continuar. Sugiro até mesmo parar por agora e só continuar amanhã, de mente limpa.