Servidor de e-mail com OpenBSD - Postfix & Cia

cvs

Nesse breve HOWTO vamos discorrer a respeito da instalação de um servidor de e-mail usando a plataforma OpenBSD com Postfix, MySQL e mais algumas coisas legais de se mexer.

[ Hits: 70.455 ]

Por: Thiago Alves em 28/01/2009 | Blog: http://www.seeufosseopresidente.com.br


MySQL



Agora vamos para a parte boa, MySQL, instalá-lo e configurá-lo.

Antes de mais nada, vamos fazer as instalações necessárias:
  • p5-Net-Daemon
  • p5-PlRPC
  • p5-DBI
  • p5-DBD-mysql
  • mysql-server

Vamos fazer essas instalações via ports.

# cd /usr/ports/databases/p5-DBD-mysql
# make install clean


Com isso todos os pacotes serão instalados, menos o mysql-server.

# export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.4/packages/`uname -m`
# pkg_add mysql-server

mysql-server-5.0.51ap1: complete
--- mysql-server-5.0.51ap1 -------------------
You can find detailed instructions on how to install a database
in /usr/local/share/doc/mysql/README.OpenBSD.

Agora vamos configurar o MySQL:

# mysql_install_db
# mysqld_safe &
# mysql_secure_installation


Set root password? [Y/n] (enter)
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!

Remove anonymous users? [Y/n] (enter)
... Success!

Disallow root login remotely? [Y/n] (enter)
... Success!

Remove test database and access to it? [Y/n] (enter)
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!

Reload privilege tables now? [Y/n] (enter)
... Success!

Cleaning up...

Pronto, está configurado seu MySQL.

Vamos configurar o socket do mysql para o postfix achá-lo facilmente.

# mkdir -p /var/spool/postfix/var/run/mysql/
# ln -f /var/run/mysql/mysql.sock /var/spool/postfix/var/run/mysql/mysql.sock


Para que o MySQL inicie em caso de reboot no servidor, adicione as seguintes linhas no seu arquivo /etc/rc.local:

if [ -x /usr/local/bin/mysqld_safe ]; then
    echo -n 'Iniciando MySQL'
    /usr/local/bin/mysqld_safe >/dev/null 2>&1 &
fi

No postfix, para ele trabalhar com as tabelas, adicione as seguintes linhas no main.cf:

virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailboxes.cf
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf

Agora vamos editar os arquivos referentes a essas configurações:

/etc/postfix/mysql_virtual_domains.cf

user = vmail
password = vmail
hosts = 127.0.0.1
dbname = mail
query = SELECT domain FROM domains WHERE domain='%s'

/etc/postfix/mysql_virtual_alias_maps.cf

user = vmail
password = vmail
hosts = 127.0.0.1
dbname = mail
query = SELECT alias FROM alias_maps WHERE account='%s'

/etc/postfix/mysql_virtual_mailboxes.cf

user = vmail
password = vmail
hosts = 127.0.0.1
dbname = mail
query = SELECT maildir FROM users WHERE login='%s'

Agora vamos criar o banco que vai trabalhar com esses arquivos de forma correta.

Pegue as seguintes linhas e jogue num arquivo, por exemplo, mail_schema.sql (só um exemplo, pode colocar o nome que quiser):

CREATE DATABASE mail;
use mail
CREATE TABLE domains (
    id       INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    domain   VARCHAR(255) NOT NULL UNIQUE
);

CREATE TABLE users (
    id       INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    login    VARCHAR(255) NOT NULL UNIQUE,
    name     VARCHAR(255) NOT NULL,
    password VARCHAR(13) NOT NULL,
    uid      SMALLINT NOT NULL DEFAULT 2000,
    gid      SMALLINT NOT NULL DEFAULT 2000,
    home     VARCHAR(255) NOT NULL DEFAULT '/var/mail/vhosts',
    maildir  VARCHAR(255) NOT NULL,
    quota    VARCHAR(10)  NOT NULL DEFAULT '10000000S'
);

CREATE TABLE alias_maps (
    id       INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    account  VARCHAR(255) NOT NULL UNIQUE,
    alias    VARCHAR(255) NOT NULL
);

E depois para criar o banco, faça o seguinte comando:

# mysql -u root -p < mail_schema.sql

E agora para popular, podemos fazer do jeito que fizemos para criar o banco ou na mão, segue o script e faça do jeito que achar melhor, lembrando que esse é apenas um exemplo:

GRANT SELECT ON mail.* to 'vmail'@'localhost' IDENTIFIED BY 'vmail';

INSERT INTO domains (domain) VALUES ('exemplo.com.br');

INSERT INTO users (login, name, password, maildir)
VALUES ('thiago@exemplo.com.br', 'Thiago Alves', ENCRYPT('thiagogostosao'), 'exemplo.com.br/thiago/');

INSERT INTO alias_maps (account, alias)
VALUES ('postmaster@exemplo.com.br', 'postmaster@localhost.exemplo.com.br');

INSERT INTO alias_maps (account, alias)
VALUES ('root@exemplo.com.br', 'root@localhost.exemplo.com.br');

E agora, reinicie o postfix ou recarregue:

# postfix reload

Página anterior     Próxima página

Páginas do artigo
   1. Introdução - O que é o que?
   2. Postfix
   3. MySQL
   4. Courier-IMAP
   5. Filtragem de conteúdo (Spamassassin + ClamAV + Amavisd-new)
   6. Webmail (Squirrel ou RoundCube)
   7. Postfixadmin
   8. Sugestão de script
   9. Conclusão
Outros artigos deste autor

Compilando o Apache 2 com PHP e MySQL

Sistema de arquivos distribuídos usando Gmail

Instalando o VMWare no Slackware

MPlayer - The Movie Player

Sylpheed - a GTK+ based, lightweight, and fast e-mail client

Leitura recomendada

Utilizando GMail (Google Mail) em seu cliente de email favorito

Qmail completo para Madriva 2006

Zimbra - Como rastrear um e-mail dentro do log

PHPXmail - um front-end web para o XMail

Trabalhando com os logs do Postfix/Qmail usando o isoqlog

  
Comentários
[1] Comentário enviado por jmucelli em 28/01/2009 - 17:25h

Show de bola o artigo... parabéns... e continue escrevendo sobre o Open... muito bom

[2] Comentário enviado por diogojp em 29/01/2009 - 13:19h

Show de bola o artigo, vc ja tentou aplicar essa solução em um SO Freebsd ?

[3] Comentário enviado por cvs em 29/01/2009 - 13:20h

Opa..
Valeu...
Mas não, ainda não tentei...
Mas acredito que não havera muitas coisas diferentes pra fazer no freebsd.

[4] Comentário enviado por pogo em 30/01/2009 - 11:09h

CVS,

Muito bom o texto. Com certeza precisamos de mais artigos desta qualidade e voltados para sistemas BSD's. Parabéns!

[]'s

Pogo.

[5] Comentário enviado por mathcuei em 31/01/2009 - 18:49h

Caro Thiago!

Primeiramente, agradeço a grande contribuição a toda comunidade!

Estou tentando configurar o servidor como descrito, porém estou com dificuldades de instalação do postfix + mysql. O problema é relacionado alguma source nas configurações do proprio port. Qual é a versão do port que foi instalado? É por um acaso a da data 08/08/2008?

Estou usando a versão 4.4. Poderia ser isso?


Desde já agradecido!


Atenciosamente

[6] Comentário enviado por cvs em 02/02/2009 - 09:45h

Eu usei a versão padrão que fica em ftp://ftp.das.ufsc.br/pub/OpenBSD/4.4/ports.tar.gz e não tive que fazer nada alem do que descrevi para subir o postfix com suporte a mysql. A versão é a 4.4 mesmo que estou usando.

Qual erro que aparece? Cola ae pra gente ver.

[7] Comentário enviado por mathcuei em 03/02/2009 - 10:27h

Caro Thiago!

Acabei por descobrir qual era o erro apresentado. O problema na compilação estava acontecendo pelo uso do interpretador Bash. Efetuei a modificação para o interpretador padrão, continuando assim a compilação perfeitamente. Consegui subi o servidor, seguindo os passos descritos neste. Muito Obrigado pela atenção!


Atenciosamente


[8] Comentário enviado por TecBSD em 06/02/2009 - 12:08h

Para montar um script para popular:

GRANT SELECT ON mail.* to 'vmail'@'localhost' IDENTIFIED BY 'vmail';
use mail; (faltou acrescentar isso)
INSERT INTO domains (domain) VALUES ('exemplo.com.br');

INSERT INTO users (login, name, password, maildir)
VALUES ('thiago@exemplo.com.br', 'Thiago Alves', ENCRYPT('thiagogostosao'), 'exemplo.com.br/thiago/');

INSERT INTO alias_maps (account, alias)
VALUES ('postmaster@exemplo.com.br', 'postmaster@localhost.exemplo.com.br');

INSERT INTO alias_maps (account, alias)
VALUES ('root@exemplo.com.br', 'root@localhost.exemplo.com.br');

[9] Comentário enviado por pardalz em 21/01/2010 - 11:31h

amigão... pode me ajudar?


[11] Comentário enviado por pardalz em 21/01/2010 - 17:11h

respondi la..


Contribuir com comentário