You are on page 1of 49

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

Montando um servidor de e-mail completo com Postfix


Autor: Marco A. S. Mximo <marco.maximo at pwo.com.br> Data: 28/12/2003 Introduo Essa uma atualizao/aprimoramento/adio do primeiro tutorial: Servidor de email com SMTP, POP, IMAP, quota e MySQL O seu propsito, mostrar como configurar um servidor de e-mail Postfix para trabalhar com vrios domnios em uma mesma mquina, utilizando para isso, o MySQL. Esse tutorial voltado para administradores de sistema ou usurios interessados em montar um ambiente de email de alta performance. Os requisitos necessrios, so o conhecimento em Linux, um pouco de Postfix e experincia na compilao de pacotes. No me responsabilizo por qualquer problema ou perda de informaes que esse tutorial possa vir a causar. Fiz um grande esforo para tentar deixar esse tutorial o mais didtico e intuitivo possvel, chegando at a montar duas vezes o mesmo ambiente. Tudo isso para que, quem se propor a utiliz-lo tenha um mnimo de sucesso. Sendo assim, no darei suporte a usurios desse material nem responderei a e-mails com pedido de ajuda. Ficarei muito feliz em receber e-mails de agradecimentos ou relatos de sucesso que esse tutorial possa ter proporcionado. Tambm, gostaria que vocs mandassem sugestes e crticas (construtivas) para um maior enriquecimento desse material.

O que novo PostfixADMIN, um ambiente completo para gerenciar as contas virtuais atravs do servidor WEB; Atualizao dos pacotes: Postfix Courier-IMAP SASL PAM_MYSQL Utilizao do Maildrop para controle de COTAS ao invs da aplicao do PATCH no Postfix. No antigo ambiente, devido a configurao, o PROCMAIL e o MAILDROP no funcionavam corretamente; Aviso ao usurio, por parte do MAILDROP, caso o seu espao em disco ultrapasse os 90% de utilizao; VACATION, aplicativo que permite o Postfix enviar um email de resposta automtico, pode ser usado para casos em que o usurio no se encontre no escritrio; AMAVIS_NG + SpamAssassin; Nessa nova verso, fiz uma mudana RADICAL nos campos e nomes das tabelas do MySQL para adequ-los ao PostfixADMIN, nesse caso, quem possui um ambiente montado na verso antiga do tutorial, tambm explicarei como fazer a migrao. Levando em considerao a facilidade de administrao proporcionado pelo PostfixADMIN, acho que compensa o esforo; Correo de alguns erros de ortografia do primeiro tutorial; :-)

1 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

Um Webmail (squirrelmail) com suporte a MySQL, Courier-IMAP e Domnios Virtuais; Nesse ambiente foi utilizado o Mandrake 9.1 ao invs do Conectiva. S que esse tutorial pode ser portado para qualquer distribuio, bastando apenas suprir as dependncias atravs dos pacotes de sua distribuio; Mostrarei como fazer a instalao dos programas utilizando duas formas, atravs dos RPMS do Mandrake ou das FONTES. Em alguns casos, s consegui configurar usando uma das opes.

O problema Meu problema comeou quando me chamaram para trabalhar com servidores de e-mail que suportassem vrios domnios na mesma mquina, onde cada domnio representava uma empresa distinta. At ai eu sabia que o Postfix tinha esse tipo de suporte e um outro motivo da escolha foi devido a sua facilidade (mas experincias anteriores com Qmail :-)) e tambm a sua compatibilidade com o "Sendmail". Seguindo os manuais, consegui criar um ambiente para 2 domnios e outros tantos que aparecessem. Outros problemas comearam, quando por exemplo, um diretor do DOMINIO1 de nome Jos da Silva queria que o seu login fosse "jose.silva", at ai tudo bem. S que um outro diretor do DOMINIO2, tambm de nome Jos da Silva queria que o seu login tambm fosse jose.silva. Ferrou!!! Pois eu no poderia criar dois logins iguais e nem dava para explicar que esse login j tinha sido reservado para o diretor de uma outra empresa. Olha a encrenca! Pedi ajuda nas listas de discusses e me sugeriram usar MySQL ou um indicador no login; criando depois um alias para esse login. Bem, como eu no conhecia patavina de MySQL, optei pela segunda dica. Ento criei: "jose.silva-dm2" uma ALIAS (jose.silva@dominio2.com.br = jose.silva-dm2) Perfeito, resolveu o problema, s que tinha de explicar para todo mundo por que o seu login tinha esse "-dm2" e o seu e-mail, no. Sem falar nos relatrios de logs que no ficaram nada bonitos. O negcio comeou a ficar feio quando fechamos com um cliente que o seu Webmail mostrava o login da pessoa que estava logado no momento e l estava o "-dm*". Os meus problemas seriam resolvidos se eu pudesse criar o login j com o domnio, por exemplo: jose.silva@dominio1.com.br . E no que d! :-) O Linux aceita. S que quando esse usurio envia uma mensagem pelo Postifix, o seu email sai como: "jose.silva@dominio1.com.br@dominio1.com.br " Bem! No preciso dizer mais nada. Alguns dias antes de pedir as contas da empresa, resolvi como ltima soluo, pesquisar sobre o Postfix com MySQL. E o que lhes apresento agora, o resultado da minha pesquisa. H! Ainda continuo na empresa :-)

A soluo A soluo baseia-se em:

2 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

Utilizar o Postfix em conjunto com o MySQL, ou seja, todas as contas e aliases dos usurios so criadas no banco de dados e no no sistema, como por padro. Pode-se utilizar as contas LOCAIS (do sistema) j criadas, em conjunto com o MySQL, nesse caso, toda conta criada no MySQL reconhecida pelo Postfix com uma conta "VIRTUAL" e as contas locais como "LOCAL". Substituio de contas MBOX (patro do Postfix) por contas Maildir (igual ao Qmail). Isso traz vantagem na segurana e no desempenho.

Instalao do Mandrake 9.1 No vou entrar em detalhes na instalao do Mandrake, apenas para facilitar a compatibilidade com o tutorial, vou sugerir a seleo dos seguintes tens/pacotes durante a instalao. DICA: Para maiores detalhes da instalao do Mandrake, recomendo a seguinte URL: http://www.fasb.edu.br/softlivre/ 1.Tela de Inicializao. a. Tecle Enter 2.Escolhendo sua Lngua 3.Licena da Distribuio 4.Classe de Instalao 5.Configurando seu Mouse 6.Configurando seu Teclado 7.Nvel de Segurana a. Padro 8.Selecionando os Pontos de Montagem a. Particionamento Manual Estratgia de Particionamento: Nesse ambiente a partio mais utilizada a das caixas postais, no meu caso /Postfix. Crie no mnimo 3 parties: /swap (250MB) /postfix (caixas postais) / (raiz) Caso pretenda utilizar um Webmail, recomendvel voc criar um partio /var. 9. Escolhendo Pacotes para Instalar. Na seleo de Pacotes, marque: Estao de Internet Computador de Rede Configurao Desenvolvimento LSB Web/FTP Mail Seleo individual de pacotes Na prxima tela selecione: Desenvolvimento Outros

3 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

dev86 dev86-devel SERVIDOR Web/FTP php-mysql Banco de Dados MySQL Servidor de Rede Openssh-Server Fique vontade para selecionar outro aplicativos conforme a sua necessidade.

Antes de comear Crie o diretrio /source, pois esse diretrio ser usado para compilar os fontes. Isso no influencia em NADA a instalao, apenas s tenho preguia de digitar /usr/local/src. :-) Toda instalao ser executada como ROOT, apenas a compilao do COURIER-IMAP que ser feita por um usurio normal. Onde aparecer os caracteres "xxxxx", troque pela sua senha correspondente. Crie o grupo e usurio para o MAILDROP: # groupadd -g 108 maildrop # useradd -r -d /var/spool/mail -g 108 -u 108 -s /bin/false -M maildrop Se voc estiver usando o Mandrake, essa distribuio tambm conta com o gerenciador de pacotes ao estilo apt-get chamado de urpmi. Caso voc no queira ficar colocando e tirando CD's ou procurando na internet por pacotes e dependncias que iro aparecer durante o processo de compilao de alguns programas, recomendo voc atualizar a sua lista de mirror do banco de dados do urpmi. Faa o seguinte: Remova as fontes dos CD's de instalao: # urpmi.removemedia cdrom1 # urpmi.removemedia cdrom2 # urpmi.removemedia cdrom3 Adicione uma nova fonte: # urpmi.addmedia main ftp://mirrors.secsup.org/pub/linux/mandrake/Mandrake/9.1/i586 /Mandrake/RPMS with ../base/hdlist.cz # urpmi.addmedia contrib ftp://mirrors.secsup.org/pub/linux/mandrake/Mandrake/9.1/contrib/RPMS with ../../i586/Mandrake/base/hdlist2.cz DICA: Se voc usa proxy em sua rede, configure o urpmi com as variveis de proxy, por exemplo: # urpmi.addmedia --proxy <ip>:<porta> --proxy-user <usuario>:<senha> contrib ftp://mirrors.secsup.org/pub/linux/mandrake/Mandrake/9.1/contrib/RPMS with ../../i586/Mandrake /base/hdlist2.cz Caso voc tenha exportado as variveis de proxy, simplesmente:

4 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

# urpmi.addmedia --wget contrib ftp://mirrors.secsup.org/pub/linux/mandrake/Mandrake /9.1/contrib/RPMS with ../../i586/Mandrake/base/hdlist2.cz Agora, para voc instalar os pacotes, basta digitar " urpmi nome_do_pacote " que o urpmi baixa os pacotes e supre as dependncias automaticamente. Caso voc queira adicionar novas fontes ou de outros mirrors, acesse o site: http://plf.zarb.org/~nanardon/index.php DICA: Voc pode obter mais informao sobre o urpmi atravs do timo tutorial escrito pelo Gustavo Sverzut Barbieri em: http://www.linuxdicas.com.br/...artid=189

Aplicativos utilizados CheckInstall: http://asic-linux.com.mx/~izto/checkinstall/index.php MySQL: http://www.mysql.com/downloads/ Courier IMAP: http://twtelecom.dl.sourceforge.net/sourceforge/courier/ Maildrop: http://www.flounder.net/~mrsam/maildrop/ Postfix: http://www.postfix.org/ Mailm: http://homepage.ntlworld.com/edmund.grimley-evans/mailm/ Cyrus-SASL: http://asg.web.cmu.edu/cyrus/ PAM-MySQL: http://sourceforge.net/projects/pam-mysql/ PostixAdmin: http://high5.net/postfixadmin/ ClamAV: http://clamav.elektrapro.com Amavis_NEW: http://www.ijs.si/software/amavisd/ Vacation: http://high5.net/postfixadmin/

5 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

Squirrelmail: http://www.squirrelmail.org/

Instalando o CheckInstall O Checkinstall um programa muito til para quem gosta de compilar programas a partir do cdigo-fonte. Atravs dele, possvel gerar um binrio do fonte compilado para a sua distribuio e gerenci-los pelo seu gerenciador de pacotes. Se voc compilou o Postfix por exemplo, pode-se gerar um pacote para: RPM (RedHat, Mandrake, Conectiva etc...) DEB (Debian) TGZ (Slackware) Com isso voc pode gerenci-los facilmente, coisa que no acontece com o SOURCE. No nosso caso, vamos us-lo com a sintaxe "-R" de RPM. Consulte o --help para informaes para outras distribuies.

Instalando
### RPMS # urpmi checkinstall ou ### SOURCE # tar -zxvf checkinstall-1.5.3.tgz -C /source # cd /source/checkinstall # make # make install Para testar se o programa esta OK... # checkinstall -R
Done. The new package has been installed and saved to /usr/src/RPM/RPMS/i386/checkinstall-1.5.3-1.i386.rpm You can remove it from your system anytime using: rpm -e checkinstall-1.5.3-1

Nesse caso ele gravou o pacote criado no diretrio / usr/src/RPM/RPMS/i386/. Esse ser o diretrio que todos o RPMs sero gravados quando forem criados. Mova-os para algum lugar que deseje.

6 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

Instalando o MySQL e a base do Postfix Estou utilizando o MySQL que vem junto com a distribuio, caso no esteja utilizando o Mandrake, instale os pacotes correspondentes a sua distribuio. Foram instalados os seguintes pacotes: MySQL-common-4.0.11a-5mdk MySQL-4.0.11a-5mdk MySQL-client-4.0.11a-5mdk No Mandrake, execute o comando "mysql_install_db" para criar o banco de dados: # mysql_install_db Depois da tabela mysql criada, inicie o servio: # service mysql start Por default, a senha do ROOT para acesso ao MySQL est em branco. Vamos alter-la para uma nova e desabilitar alguns tens para aumentar a segurana do banco de dados. OBS: Tecle Enter quando for perguntado sobre o password do ROOT, pois est em branco. Depois responda as perguntas conforme a sua preferncia (normalmente YES para todas). # mysql_secure_installation All done! If you've completed all of the above steps, your MySQL installation should now be secure. Thanks for using MySQL! DICA: Por padro no Mandrake, o log do MySQL est desabilitado. Esse recurso muito til para identificar alguns erros durante a instalao de aplicativos que fazem acesso ao banco. Para resolver esse problema, crie o arquivo /etc/my.cnf com o seguinte contedo: [mysql.server] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock [mysqladmin] socket=/var/lib/mysql/mysql.sock [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock language=/usr/share/mysql/portuguese/ log=/var/lib/mysql/mysqld.log [mysql] socket=/var/lib/mysql/mysql.sock Crie o arquivo de log e mude a permisso: # touch /var/lib/mysql/mysqld.log # chown mysql:mysql /var/lib/mysql/mysqld.log Reinicie o MySQL e teste:

7 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

# service mysql restart # tail /var/lib/mysql/mysqld.log Beleza! Vamos agora criar as tabelas para o POSTFIX. Crie um arquivo com o nome "postfix_mysq.db" com o seguinte contedo: ATENO: Substitua, no primeiro bloco, o valor "senha_do_postfix" pela senha do usurio do postfix. Substitua, caso queira, o diretrio onde ficaram as caixas postais dos usurios, no ltimo bloco no campo home. No meu caso estou usando o diretrio /postfix/.

# INICIO DO postfix_mysq.db ================= # # Postfix / MySQL # # Cria o usurio e senha do Postfix e Maildrop para # acesso ao banco USE mysql INSERT INTO user (Host, User, Password) VALUES ('localhost','postfix',password('xxxxx')); INSERT INTO user (Host, User, Password) VALUES ('localhost','maildrop',password('xxxxx')); INSERT INTO db (Host, Db, User, Select_priv) VALUES ('localhost','postfix','postfix','Y'); INSERT INTO db (Host, Db, User, Select_priv) VALUES ('localhost','postfix','maildrop','Y'); FLUSH PRIVILEGES; # # Cria o banco postfix CREATE DATABASE postfix;

# # Cria a estrutura da tabela alias USE postfix; CREATE TABLE alias ( address varchar(255) NOT NULL default '', goto text NOT NULL, domain varchar(255) NOT NULL default '', create_date datetime NOT NULL default '0000-00-00 00:00:00', change_date datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(4) NOT NULL default '1', PRIMARY KEY (address) ) TYPE=MyISAM COMMENT='Virtual Aliases - mysql_virtual_alias_maps'; # # Cria a estrutura da tabela domain USE postfix; CREATE TABLE domain ( domain varchar(255) NOT NULL default '',

8 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

description varchar(255) NOT NULL default '', transport varchar(255) NOT NULL default 'maildrop', create_date datetime NOT NULL default '0000-00-00 00:00:00', change_date datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(4) NOT NULL default '1', PRIMARY KEY (domain) ) TYPE=MyISAM COMMENT='Virtual Domains - mysql_virtual_domains_maps';

# # Cria a estrutura da tabela mailbox USE postfix; CREATE TABLE mailbox ( username varchar(255) NOT NULL default '', password varchar(255) NOT NULL default '', name varchar(255) NOT NULL default '', home char(255) default '/postfix/', maildir varchar(255) NOT NULL default '', quota varchar(255) NOT NULL default '10000000S', domain varchar(255) NOT NULL default '', create_date datetime NOT NULL default '0000-00-00 00:00:00', change_date datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(4) NOT NULL default '1', passwd_expire enum('N','Y') default 'Y', uid int(10) unsigned default '108', gid int(10) unsigned default '108', PRIMARY KEY (username) ) TYPE=MyISAM COMMENT='Virtual Mailboxes - mysql_virtual_mailbox_maps';

# # Cria o usurio de administrao do PostfixAdmin USE mysql INSERT INTO user (Host, User, Password) VALUES ('localhost','postfixadmin',password('xxxxx')); INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv) VALUES ('localhost', 'postfix', 'postfixadmin', 'Y', 'Y', 'Y', 'Y'); FLUSH PRIVILEGES;

# # Cria a tabela de administrao do PostfixAdmin # USE postfix; CREATE TABLE admin ( username varchar(255) NOT NULL default '', password varchar(255) NOT NULL default '', domain varchar(255) NOT NULL default '', create_date datetime NOT NULL default '0000-00-00 00:00:00', change_date datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(4) NOT NULL default '1', PRIMARY KEY (username) ) TYPE=MyISAM COMMENT='Virtual Admins - Store Virtual Domain Admins';

9 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

Depois do arquivo criado, execute o comando: # mysql -psenha_do_root < postfix_mysq.db O banco e as tabelas, bem como o usurio do postfix sero criados. Vamos testar o acesso do usurio postfix: # mysql -D postfix -u postfix -psenha_do_postfix mysql> show tables;
+-------------------+ | Tables_in_postfix | +-------------------+ | admin | | alias | | domain | | mailbox | +-------------------+

mysql> desc alias;


+-------------+--------------+------+-----+---------------------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------------------+-------+ | address | varchar(255) | | PRI | | | | goto | text | | | | | | domain | varchar(255) | | | | | | create_date | datetime | | | 0000-00-00 00:00:00 | | | change_date | datetime | | | 0000-00-00 00:00:00 | | | active | tinyint(4) | | | 1 | | +-------------+--------------+------+-----+---------------------+-------+

Descrio: Essa tabela onde sero criados os redirecionamentos (ALIAS). address: o endereo do novo redirecionamento (ALIAS) goto: o destinatrio(os) do redirecionamento. Exemplo: address => goto postmaster@dominio.com.br > marco@dominio.com.br postmaster@dominio2.com.br => marco@dominio2.com.br, marcelo@dominio1.com.br mysql> desc domain;
+-------------+--------------+------+-----+---------------------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------------------+-------+ | domain | varchar(255) | | PRI | | | | description | varchar(255) | | | | | | transport | varchar(128) | | | maildrop | | | create_date | datetime | | | 0000-00-00 00:00:00 | | | change_date | datetime | | | 0000-00-00 00:00:00 | | | active | tinyint(4) | | | 1 | | +-------------+--------------+------+-----+---------------------+-------+

Descrio: Essa tabela aonde voc cria e indica o domnio. transport: Nesse campo, voc indica se o transporte ser "local", para usurios do sistema ou "maildrop", para usurios virtuais. O padro "maildrop".

10 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

mysql> desc mailbox;


+---------------+------------------+------+-----+---------------------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+------------------+------+-----+---------------------+-------+ | username | varchar(255) | | PRI | | | | password | varchar(255) | | | | | | name | varchar(255) | | | | | | home | varchar(255) | YES | | /postfix/ | | | maildir | varchar(255) | | | | | | quota | varchar(255) | | |10000000S | | | domain | varchar(255) | | | | | | create_date | datetime | | | 0000-00-00 00:00:00 | | | change_date | datetime | | | 0000-00-00 00:00:00 | | | active | tinyint(4) | | | 1 | | | uid | int(10) unsigned | YES | | 108 | | | gid | int(10) unsigned | YES | | 108 | | | passwd_expire | enum('N','Y') | YES | | Y | | +---------------+------------------+------+-----+---------------------+-------+

Descrio: a principal tabela, onde sero criados os usurios e suas configuraes como senha, diretrio, cota de disco, etc. username: o login do usurio. Exemplo: marco.maximo@dominio.com.br password: a senha do usurio, voc pode usar dois tipos de senhas: crypt() ou clear text. Esse ltimo interessante caso voc v usar alguma autenticao que use Cram-MD5. Eu uso o crypt, acho mais tico. name: O nome completo do usurio. home: o diretrio aonde ser criado as caixas postais dos usurios. Normalmente usado o /home, mas no meu caso usarei o diretrio /postfix/. Usar um outro diretrio no lugar do /home/ recomendvel, pois o dono desse diretrio deve ser o usurio maildrop. Isso pode causar um problema caso voc j tenha usurios criados nesse diretrio. Um outro motivo o programa MSEC que vem no Mandrake. Ele constantemente faz uma checagem nas permisses dos diretrios contido seu banco de dados, conforme o nvel de segurana escolhido e muitas vezes, tive a permisso do diretrio /HOME alterada para o original pelo programa. Uma opo para resolver esse problema desabilitar o MSEC mas, segurana nunca demais. :-) maildir : o Maildir do usurio, aonde os email sero armazenados. quota: a cota de disco do usurio, o default 10MB. Note o "S" no final do valor, ele necessrio para o MAILDROP criar o arquivo "maildirsize" no diretrio do usurio. Esse arquivo contm um clculo da cota atual do usurio. domain: Domnio de qual faz parte o usurio. active: Esse campo serve para habilitar(1) ou desabilitar(0) a conta do usurio, usado pelo courier-imap para permitir o login do usurio. Serve tambm para maltratar um pouco dos seus desafetos dentro da empresa :-) uid: virtual uid (use o do usurio maildrop). gid: virtual gid (use o do usurio maildrop). passwd_expire: Esse campo utilizado por alguns programas para forar a mudana de senha por parte do usurio.

mysql> desc admin;


+-------------+--------------+------+-----+---------------------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------------------+-------+

11 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

| username | varchar(255) | | PRI | | | | password | varchar(255) | | | | | | domain | varchar(255) | | | | | | create_date | datetime | | | 0000-00-00 00:00:00 | | | change_date | datetime | | | 0000-00-00 00:00:00 | | | active | tinyint(4) | | | 1 | | +-------------+--------------+------+-----+---------------------+-------+

Descrio: Essa tabela usado pelo PostfixAdmin para criar os administradores que iro ser responsveis pela administrao das contas dos respectivos domnios. Legal! O nosso banco de email est criado. O que temos que fazer, "ensinar" ao Postfix a conectar-se no MySQL e pegar os dados que ele precisa sobre o usurio, mas antes, vamos configurar o Courier-IMAP. 10 - Instalando o Courier-IMAP Como iremos utilizar o Postfix com suporte a Maildir ao estilo Qmail, ento o Courier-IMAP o programa que permite o acesso a esse tipo de caixa postal. Ele tambm vai ser responsvel por validar os logins dos usurios e permitir que eles baixem as suas mensagens por POP3 ou acesso por IMAP. Tudo isso, lendo informaes da tabela "mailbox" no MySQL.

Instalando
### RPMS Instale os pacotes: # urpmi maildirmake++ # urpmi courier-imap # urpmi courier-imap-mysql # urpmi courier-imap-pop ### SOURCE Dependncias: libgdbm2-devel-1.8.0-19mdk.i586.rpm libmysql12-devel-4.0.11a-5mdk.i586.rpm libopenssl0.9.7-devel-0.9.7a-1mdk.i586.rpm pam-devel-0.75-30mdk.i586.rpm libfam0-devel-2.6.9-5mdk.i586.rpm Faa o download do pacote em: http://umn.dl.sourceforge.net/.../courier-imap-2.2.0.tar.bz2

# tar -jxvf courier-imap-2.2.0.tar.bz2 -C /source/ Para compilar o courier voc precisa estar como usurio comum, se voc descompactou como root, mude as permisses do diretrio para seu usurio, no meu caso "marco": # chown marco:marco /source/courier-imap-2.2.0/ -R # cd /source/courier-imap-2.1.2/ # su marco

12 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

$ ./configure --prefix=/usr --sysconfdir=/etc/courier/ --libexecdir=/usr/lib/courier $ make $ exit # checkinstall -R


Done. The new package has been installed and saved to /usr/src/RPM/RPMS/i386/courier-imap-2.2.0-1.i386.rpm You can remove it from your system anytime using: rpm -e courier-imap-2.2.0-1

Configurando
# cd /etc/courier # cp imapd.dist imapd # cp imapd-ssl.dist imapd-ssl # cp pop3d.dist pop3d # cp pop3d-ssl.dist pop3d-ssl # cp authmysqlrc.dist authmysqlrc # cp authdaemonrc.dist authdaemonrc # cp quotawarnmsg.example quotawarnmsg # mkdir dist # mv *.dist dist/ Isso criar os seguintes arquivos de configurao do courier: imapd, pop3d, authmysqlrc, authdaemonrc, imapd-ssl, pop3d-ssl. Esses 2 ltimos para conexes seguras. DICA: Acho interessante manter os arquivos *.dist, isso ir ajudar caso voc queira lembrar das configuraes default do courier. As configuraes default dos arquivos imapd e pop3d, ao meu ver, j so boas. Altere caso voc sinta necessidade. Edite o /etc/courier/authmysqlrc . Esse arquivo responsvel pelas configuraes do Courier para que ele conecte no MySQL e autentique os usurios. Edite-o conforme as suas configuraes. Exemplo: # vim /etc/courier/authmysqlrc MYSQL_SERVER localhost MYSQL_USERNAME postfix MYSQL_PASSWORD xxxxx MYSQL_SOCKET /var/lib/mysql/mysql.sock MYSQL_PORT 3306 MYSQL_OPT 0 MYSQL_DATABASE postfix MYSQL_USER_TABLE mailbox MYSQL_CRYPT_PWFIELD password MYSQL_UID_FIELD uid MYSQL_GID_FIELD gid MYSQL_LOGIN_FIELD username MYSQL_HOME_FIELD home

13 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

MYSQL_NAME_FIELD name MYSQL_MAILDIR_FIELD maildir MYSQL_QUOTA_FIELD quota MYSQL_WHERE_CLAUSE active=1 ATENO: No deixe espaos ou tab no comeo do nome. Exemplo: MYSQL_MAILDIR_FIELD maildir - (Beleza!) MYSQL_QUOTA_FIELD quota - (Errado) Isso causa erro para o Maildrop. Inicie o servio: RPMS # service courier-imap start SOURCE # cd /etc/init.d/ # ln -s /usr/lib/courier/imapd.rc imapd # ln -s /usr/lib/courier/pop3d.rc pop3d Coloque as seguintes linhas no arquivo /etc/rc.d/rc.local para que os servios IMAP e POP3 sejam iniciados automaticamente durante a inicializao da mquina. /etc/init.d/imapd start /etc/init.d/pop3d start Achei cmodo criar 2 links simblicos para eles dentro dos diretrios onde esto os meus scripts de inicializao. Para inici-los a partir desse diretrio s digitar: # ./imapd start # ./pop3d start Teste se os servios IMAP e POP iniciaram sem problema, vamos rodar os seguintes comandos: # ps ax /usr/lib/courier/authlib/authdaemond.mysql start /usr/lib/courier/authlib/authdaemond.mysql start /usr/lib/courier/authlib/authdaemond.mysql start /usr/lib/courier/couriertcpd -address=0 -stderrlogger /usr/lib/courier/authlib/authdaemond.mysql start /usr/lib/courier/authlib/authdaemond.mysql start /usr/lib/courier/authlib/authdaemond.mysql start /usr/lib/courier/courierlogger imapd /usr/lib/courier/couriertcpd -address=0 -stderrlogger /usr/lib/courier/courierlogger pop3d Deve aparecer algo como isso. As linhas indicam que os servios imap e pop3 subiram usando a autenticao pelo MySQL. Vamos checar se as portas dos servios esto abertas e respondendo: # netstat -a | less

14 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

tcp 0 0 *:mysql *:* tcp 0 0 *:pop3 *:* tcp 0 0 *:imap *:* Teste do IMAP:

OUA OUA OUA

# telnet 0 143 Trying 0.0.0.0... Connected to 0 (0.0.0.0). Escape character is '^]'. * OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE STARTTLS] Courier-IMAP ready. Copyright 1998-2003 Double Precision, Inc. See COPYING for distribution information. 0 logout * BYE Courier-IMAP server shutting down 0 OK LOGOUT completed Connection closed by foreign host. Teste do POP3: # telnet 0 110 Trying 0.0.0.0... Connected to 0 (0.0.0.0). Escape character is '^]'. +OK Hello there. quit +OK Better luck next time. Connection closed by foreign host. Se aparecer isso, ento esta ok. Vamos agora instalar/configurar o Maildrop.

Instalando o Maildrop O Maildrop ser responsvel pela entrega propriamente dita da mensagem sua respectiva caixa postal. Ele tambm far o controle da cota de disco. Com o Maildrop voc tambm poder implementar algumas regras de filtragem. ## SOURCE Baixe e instale o pacote: http://umn.dl.sourceforge.net/.../maildrop-1.6.3.tar.bz2

Instalando: # tar -jxvf maildrop-1.6.3.tar.bz2 -C /source/ # cd /source/maildrop-1.6.3/

15 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

# ./configure \ --prefix=/usr \ --sysconfdir=/etc/maildrop \ --enable-maildrop-uid=108 \ --enable-maildrop-gid=108 \ --enable-syslog=1 \ --enable-maildropmysql \ --enable-maildirquota # make # checkinstall -R # mkdir /etc/maildrop # cp maildropmysql.config /etc/ # cp maildir/quotawarnmsg /etc/maildrop/ Crie o diretrio para as caixas postais e mude as permisses para o Maildrop: # mkdir /postfix # chown maildrop:apache /postfix/ # chmod 770 /postfix/ Configurando o MAILDROP: Configure o Maildrop para acessar o MySQL. Edite o arquivo /etc/maildropmysql.conf : # vim /etc/maildropmysql.conf hostname localhost port 3306 socket /var/lib/mysql/mysql.sock database postfix dbuser maildrop dbpw xxxxx dbtable mailbox default_gidnumber default_uidnumber 108 108

uid_field username uidnumber_field uid gidnumber_field gid maildir_field maildir homedirectory_field home quota_field quota mailstatus_field active where_clause "" DICA: O Maildrop possui um recurso de aviso de email para o usurio caso a sua caixa postal ultrapasse a porcentagem de utilizao de um valor especificado. Nesse tutorial usarei o valor de 90% (explicado mais adiante). Sendo assim, voc pode personalizar a mensagem de aviso que o usurio ira receber, bastando para isso editar o arquivo /etc/maildrop/quotawarnmsg.

16 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

Instalando o Postfix Vamos instalar o Postfix com suporte a Maildir + SASL + MySQL, na maioria das distribuies isso no vem habilitado por padro, sendo necessrio uma nova compilao. O Postfix tambm no tem suporte a cota de disco com o formato Maildir, sendo necessrio, em alguns casos, a instalao de uma Patch para tal. No nosso caso, como j explicado, a cota ser administrada pelo MAILDROP, sendo assim, no ser necessrio a instalao de nenhum PATCH. Baixe o Postfix de: ftp://ftp.matrix.com.br/.../postfix-2.0.16.tar.gz

Dependncias - Instale as dependncias para a compilao do Postfix: # urpmi libdbtcl3.3 # urpmi libdb3.3-devel # urpmi libmysql12-devel # urpmi libpcre0-devel # urpmi libsasl2-devel Instalando: # tar -zxvf postfix-2.0.16.tar.gz -C /source/ # cd /source/postfix-2.0.16/ # make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -I/usr/include/sasl' 'AUXLIBS=/usr/lib/libmysqlclient.so -lm -L/usr/lib -R/usr/lib -lsasl2' # make # make upgrade Verifique se o suporte ao MySQL foi habilitado: # postconf -m static pcre nis regexp environ proxy mysql btree unix hash Configurando o Postfix: Crie 4 arquivos dentro do diretrio /etc/postfix/ com o seguinte contedo: # mysql_virtual_alias_maps.cf # ----------------------------user = postfix password= xxxxx dbname = postfix table = alias select_field = goto

17 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

where_field = address hosts = localhost # mysql_virtual_mailbox_maps.cf # -----------------------------user = postfix password= xxxxx dbname = postfix table = mailbox select_field = maildir where_field = username hosts = localhost # mysql_transport_maps.cf # -------------------------user = postfix password = xxxxxx hosts = localhost dbname = postfix table = domain select_field = transport where_field = domain # mysql_virtual_mailbox_limit_maps.cf # -----------------------------------user = postfix password = xxxxx dbname = postfix table = mailbox select_field = quota where_field = username hosts = localhost OBS: No esquea de configurar as linhas "user, password" conforme a sua configurao. MASTER.CF: # vim /etc/postfix/master.cf OBS: Nesse ambiente, no irei utilizar o Postfix com a opo de CHROOT, sendo assim, edite o /etc/postfix /master.cf e troque TODOS os "y" por "n" na coluna "chroot". Configure o suporte ao Maildrop: maildrop unix n n pipe flags=DRhu user=maildrop argv=/usr/bin/maildrop -w 90 -d ${recipient} OBS: A configurao da segunda linha deve ter pelo menos 2 espaos no comeo da linha, conforme o exemplo. O parmetro "-w 90" representa a porcentagem de utilizao da caixa postal pode chegar at ser avisado pelo sistema. A mensagem de aviso enviado pelo MAILDROP com o contedo do arquivo /etc/maildrop/quotawarnmsg.

18 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

MAIN.CF: # vim /etc/postfix/main.cf Faa o backup do arquivo original e crie o /etc/postfix/main.cf com o seguinte contedo: #======== CONFIGURAES =============== queue_directory = /var/spool/postfix/ program_directory=/usr/sbin command_directory = /usr/sbin daemon_directory = /usr/lib/postfix mail_owner = postfix default_privs=nobody default_transport=smtp alias_maps=hash:/etc/postfix/aliases alias_database=hash:/etc/postfix/aliases readme_directory = no sample_directory = /etc/postfix sendmail_path = /usr/sbin/sendmail setgid_group = postdrop manpage_directory = /usr/local/man newaliases_path = /usr/bin/newaliases mailq_path = /usr/bin/mailq smtpd_banner=$myhostname ESMTP MEU DOMINIO disable_vrfy_command=yes home_mailbox=Maildir/ # ========== NOME DO DOMNIO =========== myhostname=postfix.dominio.com.br mydomain=local.com.br myorigin= $mydomain mydestination= $mydomain, $transport_maps #=====REDES p/ Relay====== # 192.168.0.0/24=MINHA REDE # mynetworks=127.0.0.0/8 192.168.0.0/24 #======== MYSQL ============== virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_mailbox_base = /postfix virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_uid_maps = static:108 virtual_gid_maps = static:108 transport_maps = mysql:/etc/postfix/mysql_transport_maps.cf

#======= Quota ============ virtual_mailbox_limit_inbox = no virtual_mailbox_limit_maps= mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf virtual_mailbox_limit_override = yes virtual_maildir_extended = yes virtual_create_maildirsize = yes virtual_mailbox_limit = 100000000

19 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later. virtual_overquota_bounce = yes #====== SASL ================ #smtpd_sasl_auth_enable = yes #smtpd_sasl_security_options = noanonymous #broken_sasl_auth_clients = yes #smtpd_recipient_restrictions = # permit_sasl_authenticated, # permit_mynetworks, # check_relay_domains

# =======MAILDROP ========== fallback_transport = /usr/bin/maildrop maildrop_destination_recipient_limit = 1 unknown_local_recipient_reject_code = 450 OBS: Essa a configurao bsica desse arquivo, fique vontade para incluir novas implementao. Note que as linhas referentes ao SASL esto comentadas, elas s sero teis durante a sua configurao. O parmetro "maildrop_destination_recipient_limit" faz com que o MAILDROP entregue os emails para mais de um destinatrio, caso contrario, apenas um ir receber a mensagem.

Configuraes finais: # rm -rf /var/spool/postfix/etc # rm /usr/lib/sendmail # ln -s /usr/sbin/sendmail /usr/lib/sendmail Agora hora de testar se o Postfix esta se comunicando com o MySQL. # service postfix restart Precisamos criar um domnio e um usurio para teste. Vamos fazer primeiramente na "mo", fazendo passo a passo para voc visualizar todo o procedimento de criao de um usurio virtual. Logue-se como ROOT no MySQL e faa: # mysql -D postfix -pxxxxx Criando o Dominio VIRTUAL e LOCAL: mysql> INSERT INTO domain ( domain, description, transport, active) VALUES ( 'dominio1.com.br' , 'Dominio de Teste' , 'maildrop' , '1');

20 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

mysql> INSERT INTO domain ( domain, description, transport, active) VALUES ( 'local.com.br' , 'Dominio LOCAL da Mquina' , 'local' , '1'); mysql> SELECT domain, description, transport, active FROM domain;
+-----------------+--------------------------+-----------+--------+ | domain | description | transport | active | +-----------------+--------------------------+-----------+--------+ | dominio1.com.br | Dominio de Teste | maildrop | 1 | | local.com.br | Dominio LOCAL da Mquina | local | 1 | +-----------------+--------------------------+-----------+--------+

Criando o Usurio: ATENO: No esquea de escolher uma senha em "encrypt('xxxxx')" mysql> INSERT INTO mailbox ( username, password, name, home, maildir, quota, domain) VALUES ( 'marco.maximo@dominio1.com.br' , encrypt('xxxxx') , 'Marco Maximo' , '/postfix/' , 'dominio1.com.br/marco.maximo/Maildir/' , '10000000S' , 'dominio1.com.br'); mysql> SELECT username FROM mailbox;
+-----------------------------+ | username | +-----------------------------+ | marco.maximo@dominio.com.br | +-----------------------------+

Criando o HOME do usurio: # mkdir -p /postfix/dominio1.com.br/marco.maximo # maildirmake++ /postfix/dominio1.com.br/marco.maximo/Maildir ou # maildirmake /postfix/dominio1.com.br/marco.maximo/Maildir # chown maildrop:apache /postfix/ -R

21 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

# chmod 770 /postfix/ -R Testando o Maildrop: Teste se o MAILDROP consegue enviar o email para a caixa postal dos usurios. # cat /etc/lilo.conf | maildrop-mysql -d marco.maximo@dominio1.com.br # ls /postfix/dominio1.com.br/marco.maximo/Maildir/new/ 1068052088.M222683P4357V00000030I03C90_0.marco,S=621 Beleza, funcionou. Testando o Postfix: Como usurio local: # echo "Funcionou..." | mail -s "TESTE do POSTFIX" marco@local.com.br ******************** LOG DO POSTFIX ******************* Nov 11 14:24:39 marco postfix/pickup[21819]: F285215721: uid=0 from=<root> Nov 11 14:24:39 marco postfix/cleanup[21880]: F285215721: messageid=<20031111162439.F285215721@postfix.dominio.com.br> Nov 11 14:24:39 marco postfix/nqmgr[21820]: F285215721: from=<root@local.com.br>, size=327, nrcpt=1 (queue active) Nov 11 14:24:40 marco postfix/local[21884]: F285215721: to=<marco@local.com.br>, orig_to=<marco>, relay=local, delay=1, status=sent (maildir) ******************************************************** # ls /home/marco/Maildir/new/ 1068567812.V302I15701.marco.local.com.br Beleza, funcionou. Como usurio virtual: # echo "Funcionou..." | mail -s "TESTE do POSTFIX" marco.maximo@dominio1.com.br ******************** LOG DO POSTFIX ******************* Nov 7 14:28:00 teste postfix/pickup[20191]: 82EE0143AD: uid=0 from=<root> Nov 7 14:28:00 teste postfix/cleanup[20226]: 82EE0143AD: messageid=<20031107162800.82EE0143AD@postfix.dominio.com.br> Nov 7 14:28:00 teste postfix/nqmgr[20192]: 82EE0143AD: from=<root@local.com.br,.local.com.br>, size=817, nrcpt=1 (queue active) Nov 7 14:28:00 teste postfix/pipe[20228]: 82EE0143AD: to=<marco.maximo@dominio1.com.br>, relay=maildrop, delay=0, status=sent (dominio1.com.br) ************************************************ # ls /postfix/dominio1.com.br/marco.maximo/Maildir/new/ 1068222707.M754502P20250V000302I000135EA_0.teste,S=342 Opa, acho que foi: # cat /postfix/dominio1.com.br/marco.maximo/Maildir/new/ 1068222707.M754502P20250V0000302I000135EA_0.teste\,S\=342

22 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

------------------------------------------------------------Received: by postfix.dominio.com.br (Postfix, from userid 0) id AE1ED143AD; Fri, 7 Nov 2003 14:31:47 -0200 (BRST) To: marco.maximo@dominio1.com.br Subject: TESTE do POSTFIX Message-Id: <20031107163147.AE1ED143AD@postfix.dominio.com.br> Date: Fri, 7 Nov 2003 14:31:47 -0200 (BRST) From: root@local.com.br,.local.com.br (root) Funcionou... ------------------------------------------------------------, foi!!!!! :-) Teste de Autenticao do IMAP: # telnet 0 143 Trying 0.0.0.0... Connected to 0 (0.0.0.0). Escape character is '^]'. * OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE STARTTLS] Courier-IMAP ready. Copyright 1998-2003 Double Precision, Inc. See COPYING for distribution information. 0 login marco.maximo@dominio1.com.br xxxxxx 0 OK LOGIN Ok. 0 select inbox * FLAGS (\Draft \Answered \Flagged \Deleted \Seen \Recent) * OK [PERMANENTFLAGS (\* \Draft \Answered \Flagged \Deleted \Seen)] Limited * 1 EXISTS * 1 RECENT * OK [UIDVALIDITY 1068222985] Ok 0 OK [READ-WRITE] Ok 0 logout * BYE Courier-IMAP server shutting down 0 OK LOGOUT completed Connection closed by foreign host. Beleza, funcionou!!! Teste de Autenticao do POP3: # telnet 0 110 Trying 0.0.0.0... Connected to 0 (0.0.0.0). Escape character is '^]'. +OK Hello there. user marco.maximo@dominio1.com.br +OK Password required. pass xxxxx +OK logged in. list

23 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

+OK POP3 clients that break here, they violate STD53. 1 351 . quit +OK Bye-bye. Connection closed by foreign host. Beleza, funcionou!!! DICA: Em caso de erro de autenticao, sempre d uma olhada nos logs do MySQL e veja se foi feito e como foi feito o SELECT do courier. Isso pode ser til para identificar erros no arquivo de configurao do courier. Um outro problema pode ser no MySQL: ou o servio no esta funcionando ou o usurio no tem permisso de acesso ao banco de dados.

Cota de disco Quem vai ser responsvel pelo controle de cota de disco nesse ambiente o Maildrop. Os valores de cotas sero cadastrados no banco de dados, sendo independente para cada usurio. O Maildrop ir ler as tabelas do MySQL e conforme o valor especificado, ele ir fazer o controle de tal cota. Quando voc enviou um email para marco.maximo@dominio1.com.br , o Maildrop criou o arquivo "maildirsize" dentro do ~/MAILDIR/ do usurio. Exemplo: # ls /postfix/dominio1.com.br/marco.maximo/Maildir courierimapuiddb cur/ maildirsize new/ tmp/ # cat /postfix/dominio1.com.br/marco.maximo/Maildir/maildirsize 10000000S 796 1 Toda vez que o usurio recebe um email, o Maildrop calcula o espao utilizado e escreve nesse arquivo. Vamos testar se a cota esta funcionado: Primeiro vamos alterar o valor da cota do usurio para um valor menor, 1MB o suficiente. Execute no shell: # mysql -D postfix -pxxxx -e "SELECT username='marco.maximo@dominio1.com.br';"
+------------------------------+-----------+ | username | quota | +------------------------------+-----------+ | marco.maximo@dominio1.com.br | 10000000S | +------------------------------+-----------+

username,quota

FROM

mailbox

WHERE

A cota esta em 10MB, vamos altera-la para 1MB: # mysql -D postfix -pxxxxx -e "UPDATE username='marco.maximo@dominio1.com.br';" # mysql -D postfix -pxxxxx -e "SELECT username='marco.maximo@dominio1.com.br';" mailbox SET quota='1000000S' WHERE

username,

quota

FROM

mailbox

WHERE

24 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

+------------------------------+----------+ | username | quota | +------------------------------+----------+ | marco.maximo@dominio1.com.br | 1000000S | +------------------------------+----------+

Vamos agora enviar email at a sua caixa chegue no limite especificado. Para isso vou usar um programa que envia email com anexo chamado "MAILM". Baixe-o em: http://rano.org/mailm/mailm-0.3.tar.gz

# ls -lh /tmp/arquivo.tar -rw-r--r-- 1 root root 381K Nov 7 15:06 /tmp/arquivo.tar # mailm -t marco.maximo@dominio1.com.br -ad /tmp/arquivo.tar # mailm -t marco.maximo@dominio1.com.br -ad /tmp/arquivo.tar ******************** LOG DO POSTFIX ******************* Nov 7 15:08:13 teste postfix/pipe[20706]: 0CA0A14ECF: to=<marco.maximo@dominio1.com.br>, relay=maildrop, delay=0, status=bounced (permission denied. Command output: maildrop: maildir over quota. ) ******************************************************* Lembrando, que 1000000 no corresponde a 1MB precisamente :-)

Instalando o SASL O SASL permite que um usurio consiga enviar email pelo servidor smtp (relay) sem que o seu IP esteja na lista de IP's liberados para relay, no postfix configurado na linha "mynetworks" no arquivo main.cf . O requisito para enviar email que o usurio exista no sistema. Isso um timo recurso, pois o usurio onde estiver pode enviar email pelo seu servidor, sem que voc precise liberar o "Relay" para todo mundo. Nessa verso do tutorial, configurei o SASL para autenticao de usurios LOCAIS (do sistema) e VIRTUAIS (MySQL). Instalando o SASL: Nessa configurao irei basear-me nos pacotes RPM. O Mandrake j vem com o Cyrus-SASL compilado, sendo que a instalao muito simples. Passei 2 dias tentando fazer o SASL 2, instalado a partir do cdigo-fonte funcionar com o POSTFIX + MYSQL, mas sem sucesso. No descobri porque, mas se algum conseguiu por favor entre em contato. :-) Dependncias: # RPMS # urpmi cyrus-sasl # urpmi libsasl2-plug-login # urpmi libsasl2-plug-plain # urpmi pam-devel # urpmi sharutils # urpmi metamail

25 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

Instalando o PAM-MYSQL: http://sourceforge.net/projects/pam-mysql/ Para permitir a autenticao SASL usando o MySQL, vamos usar o mdulo "pam_mysql". Baixe-o em: http://sourceforge.net/projects/pam-mysql/

Preparando para compilar: # tar -zxvf pam_mysql-0.5.tar.gz -C /source/ # cd /source/pam_mysql/ # make # cp pam_mysql.so /lib/security/ Crie os seguintes arquivos com o respectivo contedo: # /usr/lib/sasl2/smtpd.conf # ----------pwcheck_method: saslauthd # /etc/pam.d/smtp # -----------------------#%PAM-1.0 auth sufficient /lib/security/pam_unix_auth.so try_first_pass auth optional /lib/security/pam_mysql.so user="postfix" \ passwd="xxxxx" \ host="localhost" \ db="postfix" \ table="mailbox" \ usercolumn="username" \ passwdcolumn="password" \ crypt=1 account sufficient /lib/security/pam_unix_acct.so account required /lib/security/pam_mysql.so user="postfix" \ passwd="xxxxxx" \ host="localhost" \ db="postfix" \ table="mailbox" \ usercolumn="username" \ passwdcolumn="password" \ crypt=1 Habilitando o SASL no Postfix: Descomente as seguintes linhas no arquivo /etc/postfix/main.cf : # ====== SASL ================ smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous

26 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

broken_sasl_auth_clients = yes smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, check_relay_domains Reinicie o Postfix: # service postfix restart Inicie o servio de autenticao do SASL: # service saslauthd start # ps ax 30844 ? 30845 ? 30846 ? 30853 ? 30854 ?

S S S S S

0:00 saslauthd -a pam -T 0:00 saslauthd -a pam -T 0:00 saslauthd -a pam -T 0:00 saslauthd -a pam -T 0:00 saslauthd -a pam -T

Testes: Para testar a autenticao SASL necessrio a criao de uma senha para teste. Execute o seguinte comando: Usurio VIRTUAL: # printf 'marco.maximo@dominio1.com.br{TEXTO} marco.maximo@dominio1.com.br{TEXTO}xxxxx' | mmencode bWFyY28ubWF4EuY29tLmJyAHJkcm1heC0zNTA= Usurio LOCAL: # printf 'marco{TEXTO}marco{TEXTO}xxxxx' | mmencode bWFyY28AbWFyY28AcmRybWF4 OBS: Esse comando ir gerar uma senha criptografada e a senha deve ser fornecida toda na mesma linha durante o teste. Agora faa: Usurio VIRTUAL: # telnet 0 25 Trying 0.0.0.0... Connected to 0 (0.0.0.0). Escape character is '^]'. 220 postfix.dominio.com.br ESMTP MEU DOMINIO ehlo postfix 250-postfix.dominio.com.br 250-PIPELINING 250-SIZE 10240000 250-ETRN 250-AUTH LOGIN PLAIN

27 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

250-AUTH=LOGIN PLAIN 250-XVERP 250 8BITMIME (na mesma linha faa:) AUTH PLAIN bWFyY28ubWF4EuY29tLmJyAHJkcm1heC0zNTA= 235 Authentication successful quit 221 Bye Usurio LOCAL: # telnet 0 25 Trying 0.0.0.0... Connected to 0 (0.0.0.0). Escape character is '^]'. 220 postfix.dominio.com.br ESMTP MEU DOMINIO ehlo postfix 250-postfix.dominio.com.br 250-PIPELINING 250-SIZE 10240000 250-ETRN 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250-XVERP 250 8BITMIME (na mesma linha faa:) AUTH PLAIN bWFyY28AbWFyY28AcmRybWF4 235 Authentication successful quit 221 Bye DICA: Caso ocorra algum erro aps voc conectar via telnet na porta 25, provvel que tenha ocorrido algum na compilao do Postfix. Para recompilar o Postfix, voc deve antes rodar o comando "make clean". D uma olhado no /var/log/messages em caso de erro.

Funcionou! Agora quando voc for enviar e-mail, habilite a opo de autenticao no seu cliente de e-mail.

Instalando o PostfixAdmin O PostfixAdmin um ambiente de administrao do Postfix + MySQL, feito totalmente em PHP. Com ele, voc pode: Criar domnio virtuais;

28 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

Criar/Excluir contas virtuais; Criar/Excluir Aliases; Alterao de Senhas, etc. Voc tambm pode adapt-lo s suas necessidades, bastando apenas um conhecimento da linguagem PHP. Para esse ambiente, foi necessrio fazer algumas alteraes no cdigo original para adequ-lo ao Maildrop. Essas foram algumas das minhas alteraes: Traduo do Ambiente para Portugus BR Desabilitei a criao automtica de um ALIAS para cada endereo de email criado, achei desnecessrio para esse ambiente. Desabilite a opo de DELETAR os dados do "mailbox" do usurio, em caso de se apagar um ALIAS para essa caixa. Adaptao de 2 script para CRIAO e EXCLUSO de usurio. Isso foi necessrio, pois o MAILDROP nesse ambiente, no cria o MAILDIR/ do usurio caso ele no exista. Para a EXCLUSO, o Postfixadmin no apaga o diretrio dos usurios. Com esses 2 scripts, voc tambm pode realizar outras configuraes, no meu caso por exemplo, a configurao de um Webmail. Uso do SUDO para dar permisses de execuo para esses dois scripts. Incluso do campo ATIVO na pgina de administrao com a possibilidade de ativar/desativar um conta de usurio. Mudana na forma de apresentao do valor da COTA de disco. Mudana na forma de apresentao da DATA de alterao da conta, para um formato BR.

Dependncias: Apache PHP # urpmi php-mysql # urpmi php-ini ATENO: Caso voc no esteja utilizando o Mandrake, certamente a sua distribuio deve possuir o Apache e o PHP nos CD's de instalao. No entrarei em detalhes sobre configurao do APACHE, pois o foco aqui outro. Usarei a configurao DEFAULT do servidor. Instalao: Se voc for utilizar a minha verso com essas alteraes, baixe-o nesse link: http://smaximo.minidns.net/.../postfixadmin-MODIFICADO.tar.bz2 Aps o download, descompacte no diretrio ROOT do servidor WEB ou em algum outro, lembrando apenas de criar um ALIAS na configurao do servidor. # tar -jxvf postfixadmin-ALTERADO.tar.bz2 -C /var/www/html/ Copie os scripts para um outro diretrio e mude as permisses: # mv /var/www/html/postfixadmin/*.sh /var/www/ # chmod 700 /var/www/*.sh # chown apache:apache /var/www/html/postfixadmin/ -R # cd /var/www/html/postfixadmin/ Configurao do SUDO:

29 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

Como comentei antes por causa do MAILDROP, nesse ambiente precisei criar 2 scripts: adduser.sh e userdel.sh. Esses scripts devem possuir permisso de ROOT para execuo. A forma que achei para resolver esse problema foi o uso do SUDO. * Se algum tiver alguma sugesto melhor, por favor entre em contato. Edite o arquivo /etc/sudoers e adicione as seguintes linhas: # POSTFIXADMIN apache ALL=NOPASSWD:/var/www/adduser.sh apache ALL=NOPASSWD:/var/www/userdel.sh Edite o arquivo config.inc.php e configure as variveis conforme a sua configurao. As principais so: // Login information for the database $db_host = "localhost"; $db_name = "postfix"; $db_user = "postfixadmin"; $db_pass = "xxxxx"; Depois de configurado as variveis, habilite o acesso a pgina de administrao de domnio do PostfixAdmin, no meu caso usarei o usurio "admin". # cd /var/www/html/postfixadmin/admin/ # htpasswd .htpasswd admin New password: Re-type new password: Updating password for user admin Inicie o servidor apache: # service httpd start Agora pelo BROWSER, acesse o endereo: http://ip_do_servidor/postfixadmin/admin Ele ir lhe pedir o usurio e o password que voc cadastrou no arquivo .htpasswd. No PostfixAdmin, voc precisa cadastrar os administradores correspondentes para cada domnio que voc possui na mquina. Depois de cadastrado o administrador daquele domnio, acesse pelo endereo http://ip_do_servidor /postfixadmin/, colocando o usurio e senha cadastrados. No irei entrar em detalhes sobre o funcionamento do PostfixAdmin, pois a sua interface muito intuitiva. DICA: Caso ocorra algum problema na criao do usurio, verifique a configurao e permisso dos scripts de criao (USERDEL e ADDUSER). Verifique tambm no /var/log/messages se o comando sudo foi executado.

30 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

Anti-vrus ClamAV Download: http://aleron.dl.sourceforge.net/.../clamav-0.65.tar.gz

Dependncias: # urpmi libbzip2_1-devel Instalao: # tar -zxvf clamav-0.65.tar.gz -C /source/ # cd /source/clamav-0.65/ # adduser -s /bin/false -c "Amavis User" -d /var/amavis amavis OBS: O ClamAV deve usar o mesmo usurio do Amavis. # ./configure --prefix=/usr/ --sysconfdir=/etc/clamav # make # checkinstall -R # mkdir /var/run/clamav/ # mkdir /var/amavis/clamd # chown -R amavis:amavis /var/amavis # chown amavis:amavis /var/run/clamav # mkdir /var/lib/clamav Configurao: Edite o arquivo /etc/clamav/clamav.conf e configure conforme o exemplo: # ------------------------------------------# Example LogFile /var/amavis/clamd/clamd.log LogFileMaxSize 2M LogTime LogVerbose PidFile /var/run/clamav/clamd.pid DataDirectory /usr/share/clamav LocalSocket /var/amavis/clamd/clamav.socket # TCPSocket 3310 # TCPAddr 127.0.0.1 MaxDirectoryRecursion 15 User amavis ScanArchive ArchiveMaxFileSize 10M ArchiveMaxRecursion 5 ArchiveMaxFiles 1000 ClamukoScanOnOpen ClamukoScanOnClose ClamukoScanOnExec ClamukoIncludePath /home ClamukoMaxFileSize 1M ClamukoScanArchive # -------------------------------------------

31 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

Crie o arquivo de inicializao do Clamav em /etc/init.d/: # vim /etc/init.d/clamd #! /bin/sh # # chkconfig: 345 87 07 # description: clamd Start/Stop the clamav daemon. # # processname: clamd # config: /etc/clamav/clamav.conf # pidfile: /var/run/clamav/clamd.pid # Source function library. . /etc/rc.d/init.d/functions # See how we were called. case "$1" in start) gprintf "Starting %s: " "clamd" daemon clamd echo touch /var/lock/subsys/clamd ;; stop) gprintf "Stopping %s: " "clamd" echo "QUIT\r" | telnet 127.0.0.1 3310 sleep 5 kill `cat /var/run/clamav/clamd.pid` sleep 2 echo rm -f /var/lock/subsys/clamd ;; *) gprintf "Usage: %s {start|stop}\n" "clamd" exit 1 esac exit 0 # chmod 744 /etc/init.d/clamd # cd /etc/init.d/ # chkconfig --add clamd # service clamd start Atualizando o banco de dados dos vrus: # clamscan ----------- SCAN SUMMARY ----------Known viruses: 10146 Scanned directories: 1 Scanned files: 18 Infected files: 0 Data scanned: 0.09 MB

32 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

I/O buffer size: 131072 bytes Time: 0.470 sec (0 m 0 s) # freshclam ClamAV update process started at Fri Nov 14 11:25:08 2003 SECURITY WARNING: NO SUPPORT FOR DIGITAL SIGNATURES Connecting via 192.168.0.1:3128 Reading CVD header (main.cvd): OK main.cvd is up to date (version: 4, sigs: 9816, f-level: 1, builder: tomek) Connecting via 192.168.0.1:3128 Reading CVD header (daily.cvd): OK Downloading daily.cvd [*] daily.cvd updated (version: 18, sigs: 330, f-level: 1, builder: diego) Database updated (10146 signatures) from database.clamav.net (192.168.0.1). Crie o arquivo de atualizao diria: #!/bin/bash' >/etc/cron.daily/virusupdate # echo '/usr/bin/freshclam --quiet' >> /etc/cron.daily/virusupdate # chmod a+xr /etc/cron.daily/virusupdate # cat /etc/cron.daily/virusupdate #!/bin/bash /usr/bin/freshclam --quiet Instalao do Amavis_NEW Vide: http://www.ijs.si/software/amavisd/ http://www.ijs.si/software/amavisd/INSTALL O Amavis_NEW, uma verso do Amavis que possui alm de um vrus scanner, um Anti-SPAM utilizando o conhecido SpamAssassin. Dependncias: # urpmi ncftp # urpmi lha # urpmi lzop e unrar: ftp://194.199.20.114/linux/.../unrar-3.2.3-2.9.i386.rpm zoo: ftp://216.254.0.38/linux/.../zoo-2.10-11.9.i386.rpm unzoo: ftp://fr.rpmfind.net/linux/.../unzoo-4.4-2.i386.rpm arc: ftp://216.254.0.38/linux/.../arc-5.21e-6.i386.rpm nomarch: ftp://216.254.0.38/linux/.../nomarch-1.3-1mdk.i586.rpm unarj: ftp://194.199.20.114/linux/.../unarj-2.65-3.9.i386.rpm arj: ftp://216.254.0.38/linux/.../arj-3.10-0.1.i386.rpm freeze: ftp://194.199.20.114/linux/.../freeze-2.5.0-7.i386.rpm compress: ftp://ftp.warwick.ac.uk/pub/.../compress-4.0.1.tar.gz

33 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

Instalando dependncias do Perl com o Perl-CPAN Iniciando a shell CPAN: # perl -MCPAN -e shell Instalando: cpan> install File::MMagic cpan> install Config::IniFiles cpan> install Convert::TNEF cpan> install Convert::UUlib cpan> install Compress::Zlib cpan> install Archive::Tar cpan> install Archive::Zip cpan> install Unix::Syslog cpan> install MIME::Base64 cpan> install Net::Server cpan> install Net::SMTP Should all FTP connections be passive (y|n) ? [no] no cpan> install Digest::MD5 cpan> install Time::HiRes cpan> install Mail::SpamAssassin cpan> exit Instalando: http://www.ijs.si/.,./amavisd-new-20030616-p6.tar.gz Crie o usurio para o Amavis caso ele ainda no exista: # adduser -s /bin/false -c "Amavis User" -d /var/amavis amavis # tar -zxvf amavisd-new-20030616-p6.tar.gz -C /source/ # cd /source/amavisd-new-20030616/ # mkdir -p /var/amavis/clamd # chown -R amavis:amavis /var/amavis # chmod -R 750 /var/amavis/ # cp amavisd /usr/local/sbin/ # ln -s /usr/local/sbin/amavisd /usr/sbin/amavisd # cp amavisd.conf /etc/ # mkdir /var/virusmails # chown amavis:amavis /var/virusmails # cp amavisd_init.sh /etc/init.d/amavisd # chmod 744 /etc/init.d/amavisd # cd /etc/init.d/ # chkconfig --add amavisd Edite o arquivo /etc/amavisd.conf e altere as seguintes linhas: $MYHOME = '/var/amavis'; # (default is '/var/amavis') $mydomain = 'local.com.br'; # (no useful default) $daemon_user = 'amavis'; # (no default; customary: vscan or amavis) $daemon_group = 'amavis'; # (no default; customary: vscan or amavis) $QUARANTINEDIR = '/var/virusmails';

34 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

$log_level = 0; #Por default o SpamAssassin, rejeit todo o email identificado como SPAM. #O problema que isso pode gerar erros de Falso Negativo. Nesse caso ele pode rejeitar emails vlidos. #Eu gosto de utilizar a opo aonde os email localizados como SPAM, recebem uma marcao no Subject tipo ***SPAM*** $final_virus_destiny = D_BOUNCE; # (defaults to D_BOUNCE) $final_banned_destiny = D_BOUNCE; # (defaults to D_BOUNCE) $final_spam_destiny = D_PASS; # (defaults to D_REJECT) $final_bad_header_destiny = D_PASS; # (defaults to D_PASS), D_BOUNCE suggested $sa_spam_subject_tag = '***SPAM***'

# Coloque aqui, o email do administrador ou crie um ALIAS para esse email, que recebera os aviso dos emails localizados pelo Amavis. $virus_admin = "virusalert\@$mydomain";

#Descomente todos as indicaes de outros anti-vrus e deixe apenas o do ClamAV ou de algum outro que voc esteja usando. Tambm edite a linha referente ao clamav e inclua "/var/amavis/clamd/clamav.socket" Ex:

# ### http://clamav.elektrapro.com/ ['Clam Antivirus-clamd', \&ask_daemon, ["CONTSCAN {}\n", '/var/amavis/clamd/clamav.socket'], qr/\bOK$/, qr/\bFOUND$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ], # NOTE: run clamd under the same user as amavisd, # match the socket name in clamav.conf to the socket name in this entry # # ['KasperskyLab AntiViral Toolkit Pro (AVP)', ['avp','kavscanner'], # '-* -P -B -Y -O- {}', [0,3,8], [2,4], # any use for -A -K ? # qr/infected: (.+)/, # sub {chdir('/opt/AVP') or die "Can't chdir to AVP: $!"}, # sub {chdir($TEMPBASE) or die "Can't chdir back to $TEMPBASE $!"}, # ], Testes: Verifique a inicializao e certifique-se se existe algum erro na configurao do amavis com: # amavisd debug Em outro terminal, teste se ele esta respondendo pela porta: # telnet 127.0.0.1 10024 Trying 127.0.0.1... Connected to localhost (127.0.0.1). Escape character is '^]'. 220 [127.0.0.1] ESMTP amavisd-new service ready

35 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

=================== Sada do Log ================= Nov 14 16:58:34 marco.local.com.br amavisd[25899]: Net::Server: 2003/11/14-16:58:34 CONNECT TCP Peer: "127.0.0.1:32954" Local: "127.0.0.1:10024" Nov 14 16:58:34 marco.local.com.br amavisd[25899]: lookup_ip_acl: key="127.0.0.1" matches "127.0.0.1", result=1 Nov 14 16:58:34 marco.local.com.br amavisd[25899]: prolong_timer after new request - timer reset: remaining time = 300 s Nov 14 16:58:34 marco.local.com.br amavisd[25899]: SMTP> 220 [127.0.0.1] ESMTP amavisd-new service ready =================================================== Iniciando o servio: # service amavisd start

Configurao do Postfix com Amavis_NEW No final do /postfix/etc/master adicione: # AMAVIS-NEW+SpamAssassin smtp-amavis unix - n 2 smtp -o smtp_data_done_timeout=1200 -o disable_dns_lookups=yes 127.0.0.1:10025 inet n n -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o mynetworks=127.0.0.0/8 - smtpd

No final do /postfix/etc/main.cf adicione: #===== AMAVIS ============== content_filter = smtp-amavis:[127.0.0.1]:10024 Reinicie o Postfix e teste: # telnet 127.0.0.1 10025 Trying 127.0.0.1... Connected to localhost (127.0.0.1). Escape character is '^]'. 220 postfix ESMTP MEU DOMINIO quit 221 Bye Connection closed by foreign host. V para o diretrio de teste do Amavis e como usurio COMUM, envie alguns exemplos de email com vrus e com spam: # cd /source/amavisd-new-20030616/test-messages/

36 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

# su marco Email c/ Virus: $ sendmail -i marco.maximo@dominio1.com.br < sample-virus-simple.txt ================== SADA DO LOG ====================== Nov 26 15:15:41 marco postfix/pickup[7706]: 211D818167: uid=500 from=<marco> Nov 26 15:15:41 marco postfix/cleanup[7369]: 211D818167: messageid=<20031126171541.211D818167@postfix> Nov 26 15:15:41 marco postfix/nqmgr[3486]: 211D818167: from=<marco@local.com.br>, size=2662, nrcpt=1 (queue active) Nov 26 15:15:41 marco postfix/smtpd[7982]: connect from localhost.localdomain[127.0.0.1] Nov 26 15:15:41 marco postfix/smtpd[7982]: 8CDC918170: client=localhost.localdomain[127.0.0.1] Nov 26 15:15:41 marco postfix/cleanup[7339]: 8CDC918170: messageid=<VA07926-03@marco.local.com.br> Nov 26 15:15:41 marco postfix/nqmgr[3486]: 8CDC918170: from=<virusalert@local.com.br>, size=1659, nrcpt=1 (queue active) Nov 26 15:15:41 marco postfix/smtpd[7982]: disconnect from localhost.localdomain[127.0.0.1] Nov 26 15:15:41 marco postfix/smtpd[7311]: connect from localhost.localdomain[127.0.0.1] Nov 26 15:15:41 marco postfix/pipe[7859]: 8CDC918170: to=<marco.maximo@dominio1.com.br>, relay=maildrop, delay=0, status=sent (dominio1.com.br) Nov 26 15:15:41 marco postfix/smtpd[7311]: A655D18170: client=localhost.localdomain[127.0.0.1] Nov 26 15:15:41 marco postfix/cleanup[7369]: A655D18170: messageid=<VS07926-03@marco.local.com.br> Nov 26 15:15:41 marco postfix/nqmgr[3486]: A655D18170: from=<>, size=2980, nrcpt=1 (queue active) Nov 26 15:15:41 marco postfix/smtpd[7311]: disconnect from localhost.localdomain[127.0.0.1] Nov 26 15:15:41 marco postfix/local[7751]: A655D18170: to=<marco@local.com.br>, relay=local, delay=0, status=sent (maildir) Nov 26 15:15:41 marco amavis[7926]: (07926-03) INFECTED (Eicar-Test-Signature), <marco@local.com.br> -> <marco.maximo@dominio1.com.br>, quarantine virus-20031126-151541-07926-03, Message-ID: <20031126171541.211D818167@postfix>, Hits: Nov 26 15:15:41 marco postfix/smtp[7634]: 211D818167: to=<marco.maximo@dominio1.com.br>, relay=127.0.0.1[127.0.0.1], delay=0, status=sent (250 2.5.0 Ok, id=07926-03, BOUNCE) ================================================== Se tudo correu sem problema, "marco.maximo@dominio1.com.br". o usurio "marco" enviou um email para o usurio

O Amavis interceptou a mensagem e enviou para o ClamAV aps ter sido registrado como uma "mensagem infectada" ( Nov 14 17:43:42 marco amavis[26311]: (26311-07) INFECTED (Eicar-Test-Signature)). O Amavis colocou o email em quarentena e enviou 2 email. Um aviso ao remetente, no caso, o usurio "marco". Um outro para o administrador do sistema ($virus_admin = ) Essa apenas uma configurao bsica para que o Amavis possa funcionar, voc pode explorar outras configuraes mais avanadas.

Instalando o Mail Vacation VACATION um recurso que possibilita configurar o servidor para enviar um email de resposta para o remetente de um uma determinada conta, ou seja, quem envia um email para uma conta configurada com esse recurso, recebe automaticamente um email de resposta contendo um agradecimento ou algum aviso sobre a

37 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

localidade do mesmo. Esse recurso mais utilizado em caso de frias ou viagem de um funcionrio. Dependncias: # urpmi perl-DBI # urpmi procmail Instalando dependncias do Perl com o Perl-CPAN: # perl -MCPAN -e shell cpan> install DBD::mysql DICA: Normalmente, pode ocorrer alguns erro no teste durante a instalao do mdulo DBD::mysql. Caso ocorra esse problema, force a instalao manualmente, exemplo: # cd ~/.cpan/build/DBD-mysql-2.9003/ # make install Instalao: Faa o download do programa em: http://high5.net/postfixadmin/...vacation-2.2.tgz # tar -zxvf vacation-2.2.tgz -C /source/ # cd /source/vacation/ O Vacation utiliza o MySQL para guardar as mensagens de resposta dos usurios, sendo assim, vamos criar as tabelas. Crie um arquivo com o seguinte contedo: #============== vacation_mysql.cf ======= USE postfix; CREATE TABLE vacation ( email varchar(255) NOT NULL default '', subject varchar(255) NOT NULL default '', body text NOT NULL, cache text NOT NULL ) TYPE=MyISAM COMMENT='Virtual Vacation - Vacation Daemon Table'; E execute: # mysql -pxxxxx < vacation_mysql.cf Crie um usurio no sistema para receber os emails que forem enviados para as pessoas que estejam cadastradas no banco de dados do VACATION. Depois copie os arquivos de configurao para o $HOME do usurio criado (vacation). # adduser vacation # cp dot.forward /home/vacation/.forward # cp dot.procmailrc /home/vacation/.procmailrc # cp vacation.pl /home/vacation/ # chown vacation:vacation /home/vacation -R Configurao: Edite o arquivo /home/vacation/.forward e indique o caminho correto do procmail. No Mandrake /usr/bin /procmail.

38 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

# cat /home/vacation/.forward "| /usr/bin/procmail" Edite o arquivo /home/vacation/vacation.pl e configure os valores para acesso ao banco de dados. No meu caso, usei os mesmos dados do usurio do postfixadmin. $db_name = "postfix"; $db_user = "postfixadmin"; $db_pass = "xxxxx"; $sendmail = "/usr/sbin/sendmail"; DICA: Voc tambm pode editar o arquivo /home/vacation/.procmailrc ou /home/vacation/vacation.pl e habilitar as linhas de logs em caso de erro. Teste se o usurio do postfix tem acessa o banco: # mysql -D postfix -u postfixadmin -pxxxxxx -e "desc vacation;"
+---------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+-------+ | email | varchar(255) | | | | | | subject | varchar(255) | | | | | | body | text | | | | | | cache | text | | | | | +---------+--------------+------+-----+---------+-------+

Edite o arquivo "config.inc.php" do POSTFIXADMIN e habilite o suporte ao vacation: // When you want to offer the "vacation" daemon to your users, // set this to "YES". // You need to install the vacation module first! $use_vacation = "YES"; $vacation_text = "Resposta automtica, caso voc esteja fora do escritrio."; $vacation_file = "vacation.php"; $vacation_email = "vacation@local.com.br"; TESTE: Depois de liberar o suporte a Vacation do PostfixAdmin, acesse a pgina de login no PostfixAdmin e clique no link referente ao Vacation, nesse caso "Resposta automtica, caso voc esteja fora do escritrio. Na pgina que se segue, coloque o email e senha do usurio e edite a mensagem de resposta automtica e clique em "Saindo". Para testar, envie um email para o usurio, voc deve receber uma mensagem de aviso do servidor como sendo do usurio. Para retirar a mensagem automtica, coloque o usurio e senha e clique em "Voltando". Teste, enviando como usurio normal um email para o usurio virtual cadastrado. $ echo "TESTE" | mail -s "VACATION" marco.maximo@dominio1.com.br DICA: Caso ocorra algum erro de no validao da senha do usurio, tente alter-la usando o Postfixadmin.

39 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

Uma causa do erro, pode ser a forma com que o Postfixadmin l e grava a senha no MySQL.

Webmail - Squirrelmail Desde o meu primeiro tutorial, muitas pessoas me pediam sugestes de um webmail que se integrasse a esse ambiente, esse tambm foi um dos meus problemas quando comecei a trabalhar com essa soluo. Dos webmails que testei, o que mais me surpreendeu foi o Squirrelmail. O Squirrelmail um completo webmail que se integra completamente nesse ambiente com domnios virtuais. Ele escrito em PHP, o que possibilita a sua total personalizao. Um outro recurso muito interessante, a possibilidade de se aumentar as funcionalidades do Squirrelmail com a instalao de plugins. Vou demonstrar uma instalao simples com suporte a MySQL e a instalao de um plugin para mudana de senha. Dependncias: Apache e PHP. # urpmi php-pear Instalando: No site existem verses em RPM, mas aconselho a utilizar as verso SOURCE devido a sua facilidade de personalizao. Faa o download em: http://unc.dl.sourceforge.net/.../squirrelmail-1.4.2.tar.bz2 # tar -jxvf squirrelmail-1.4.2.tar.bz2 -C /var/www/html/ # cd /var/www/html/ # mv squirrelmail-1.4.2/ webmail # chown apache:apache webmail/ -R # cd webmail/ Configurando: A configurao do Squirrelmail pode ser feita de duas formas: Por um script de configurao "configure". Editando diretamente o arquivo "webmail/config/config.php" Irei mostrar a configurao do arquivo "config.php", pois a utilizao do script de configurao bastante fcil. Como estamos utilizando o MySQL, nada mais cmodo como guardar as configurao dos usurios e seus livros de endereos em tabelas SQL. O Squirrelmail permite essa facilidade, sendo assim, vamos criar as tabelas e as permisses de acesso a elas. Crie um arquivo para a criao das tabelas com o seguinte contedo:

40 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

#================ squirrelmail.db ============ # # Cria o banco do Webmail # CREATE DATABASE webmail; use webmail; # # Tabela de preferncia dos usurios 'userprefs' # CREATE TABLE userprefs ( user varchar(128) NOT NULL default '', prefkey varchar(64) NOT NULL default '', prefval blob NOT NULL, PRIMARY KEY (user,prefkey) ) TYPE=MyISAM; # # Tabela do livro de endereo dos usurios 'address' # CREATE TABLE address ( owner varchar(128) NOT NULL default '', nickname varchar(16) NOT NULL default '', firstname varchar(128) NOT NULL default '', lastname varchar(128) NOT NULL default '', email varchar(128) NOT NULL default '', label varchar(255) default NULL, PRIMARY KEY (owner,nickname), KEY firstname (firstname,lastname) ) TYPE=MyISAM; # # Cria o usurio "squirreluser" e da permisso de # acesso ao banco "webmail" # USE mysql INSERT INTO user (Host, User, Password) VALUES ('localhost','squirreluser',password('xxxxx')); INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv) VALUES ('localhost', 'webmail', 'squirreluser', 'Y', 'Y', 'Y', 'Y'); FLUSH PRIVILEGES; Crie o banco e as tabelas: # mysql -pxxxxx < squirrelmail.db Teste se foi criado: # mysql -pxxxxx -D webmail -e "show tables;"
+-------------------+ | Tables_in_webmail |

41 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

+-------------------+ | address | | userprefs | +-------------------+

Agora vamos configurar o Squirrelmail. Dentro do diretrio webmail/config/ existe um arquivo chamado "config_default.php". Esse arquivo explica para que serve cada parmetro de configurao. Crie um arquivo chamado "config.php" com o contedo do arquivo "config_default.php", exemplo: # cp config_default.php config.php Uma outra forma de gerar esse arquivo, usando o script de configurao: # ./configure Recomendo essa ltima forma, pois cria um arquivo config.php mais "limpo". Essas so as principais linhas que devem ser alteradas no arquivo "webmail/config/config.php" para a configurao do seu domnio com suporte a MySQL e Courier-IMAP: $org_name = "Minha Empresa"; $org_title = "TESTE"; $provider_name = 'Minha Empresa'; $squirrelmail_default_language = 'pt_BR'; $domain = 'dominio1.com.br'; $imapServerAddress = 'localhost'; $imapPort = 143; $useSendmail = false; $smtpServerAddress = 'localhost'; $smtpPort = 25; $sendmail_path = '/usr/sbin/sendmail'; $pop_before_smtp = false; $imap_server_type = 'courier'; $invert_time = false; $optional_delimiter = 'detect'; $default_folder_prefix = ''; $trash_folder = 'INBOX.Trash'; $sent_folder = 'INBOX.Sent'; $draft_folder = 'INBOX.Drafts''; $default_move_to_trash = true; $default_move_to_sent = true; $default_save_as_draft = true; $show_prefix_option = true; $list_special_folders_first = true; $use_special_folder_color = true; $auto_expunge = true; $default_sub_of_inbox = true; $show_contain_subfolders_option = true; $default_unseen_notify = 2; $default_unseen_type = 1; $auto_create_special = true;

42 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

$delete_folder $noselect_fix_enable

= true; = true;

$default_charset = 'iso-8859-1'; $data_dir = SM_PATH . 'data/'; $attachment_dir = $data_dir; $dir_hash_level = 0; $default_left_size = '150'; $force_username_lowercase = true; $default_use_priority = true; $hide_sm_attributions = true; $default_use_mdn = true; $edit_identity = true; $edit_name = true; $allow_thread_sort = true; $allow_server_sort = true; $allow_charset_search = true; $uid_support = true; $default_use_javascript_addr_book = true; $addrbook_dsn = 'mysql://squirreluser:xxxxx@localhost/webmail'; $addrbook_table = 'address'; $prefs_dsn = 'mysql://squirreluser:xxxxx@localhost/webmail'; $prefs_table = 'userprefs'; $prefs_user_field = 'user'; $prefs_key_field = 'prefkey'; $prefs_val_field = 'prefval'; DICA: Quase todos os plugins do Squirrelmail vem desabilitados por default. Usando o script de configurao, escolha a opo 8 e habilite-os digitando os seu nmero correspondente. Agora acesse o webmail pelo link: http://ip_do_servidor/webmail/ Para logar no webmail voc precisa fornecer seu nome completo de usurio, ou seja, usuario@dominio. Exemplo: user: marco.maximo@dominio1.com.br pass: xxxxxx Instalando plugins: Como eu havia falado, uma forma de voc aumentar as funcionalidades do Squirrelmail instalando novos plugins. No site, atualmente esto listados 174 plugins. Vamos instalar um plugin til para a mudana de senha dos usurios VIRTUAIS, chamado change_mysqlpass, para isso voc precisa tambm de outro plugin chamado de compatibility. Baixe-os em: http://www.squirrelmail.org/countdl.php?...compatibility-1.2.tar.gz http://www.squirrelmail.org/...change_mysqlpass-3.2-1.2.8.tar.gz Instalando:

43 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

# tar -zxvf compatibility-1.2.tar.gz -C /var/www/html/webmail/plugins/ # tar -zxvf change_mysqlpass-3.2-1.2.8.tar.gz -C /var/www/html/webmail/plugins/ # cd /var/www/html/webmail/plugins/change_mysqlpass/ # cp config.php.sample config.php # chown root:apache config.php # chmod 640 config.php Edite o arquivo "config.php" e configure as seguintes variveis: $mysql_server = 'localhost'; $mysql_database = 'postfix'; $mysql_table = 'mailbox'; $mysql_userid_field = 'username'; $mysql_password_field ='password'; $mysql_manager_id = 'postfixadmin'; $mysql_manager_pw = 'xxxxxx'; $mysql_saslcrypt = 0; $mysql_unixcrypt = 1; $mysql_MD5crypt = 0; $use_ssl_for_password_change = 1; $mysql_password_force = 1; $mysql_password_change_field = 'passwd_expire'; $mysql_password_change_field_delimiter = '"'; $mysql_password_change_yes_value = 'Y'; $mysql_password_change_no_value = 'N'; # cd /var/www/html/webmail/ # ./configure Escolha a opo 8, habilite os dois plugins (compatibility, change_mysqlpass) e faa um reload no seu browser. Todo o usurio criado, ao se logar pela primeira vez no webmail, receber um pedido de mudana de senha. Isso causado pelo valor "Y" no campo "passwd_expire" da tabela "mailbox". DICA: Caso ocorra algum erro, pode ser devido a varivel "$use_ssl_for_password_change = 1;". Se o seu servidor no estiver com o suporte SSL ativo, altere para 0 para resolver o problema. Plugins recomendados: msg_flags: cones para as mensagens. smallcal: pequeno calendrio na barra lateral. newuser_wiz: ajuda o usurio a configurar alguns dados iniciais. vlogin: completa o login do usurio com o seu domnio "@dominio.com.br".

Migrando a database antiga Se voc montou seu ambiente utilizando o antigo tutorial, voc ter notado que eu mudei o nome da tabela e dos seus campos. Essas alteraes foram necessrias devido a necessidade de adequao ao PostfixAdmin.

44 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

Voc pode tomar dois caminhos: Adequar o PostfixAdmin ao seu ambiente e suas tabelas do MySQL. Migrar o contedo do banco para as novas tabelas do PostfixAdmin. Se voc optou pela primeira opo, parabns, voc conhece bastante PHP e possui um bom tempo livre :-) Caso tenha optado pela segunda opo, vou explicar como fazer essa manobra com "pouco" trauma. OBS: Esse soluo que fiz talvez no seja a mais elegante, mas pelo menos funcionou. Prova de que os fins justificam os meios :-) Preparando o arquivo: Crie um backup da antiga tabela no diretrio /root/tmp/: # mysqldump -B mail --tables virtual_users -psenha > /root/tmp/backup_mail.cf Edite o arquivo gerado, com o editor VI (Se voc no conhece o VI, acho uma boa hora para aprender) e apague as linhas parecidas com: # MySQL dump 8.16 # # Host: localhost Database: mail #-------------------------------------------------------# Server version 3.23.46-log # # Table structure for table 'virtual_users' # CREATE TABLE virtual_users ( unique_id int(32) unsigned NOT NULL auto_increment, id char(128) NOT NULL default '', password char(128) default NULL, uid int(10) unsigned default '502', gid int(10) unsigned default '503', home char(255) default NULL, maildir char(255) default NULL, date_add date default NULL, time_add time default NULL, domain char(128) default NULL, nome char(255) default NULL, imapok tinyint(3) unsigned default '1', disk_usage int(10) unsigned default NULL, quota char(128) default '10000000S', htaccess tinyint(4) default '0', PRIMARY KEY (id), KEY unique_id (unique_id) ) TYPE=MyISAM; # # Dumping data for table 'virtual_users' # ======================================== # Deixe s os dados da tabela. Exemplo:

45 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

INSERT INTO virtual_users VALUES (494, 'sandra.hirose@seu_dominio.com.br', 'ad6UWax8vrpqg', 108, 108, '/home/', 'seu_dominio.com.br/sandra.hirose/Maildir/', '2002-11-28', '03:09:58', 'seu_dominio.com.br', 'SANDRA ETSUKO HIROSE',1,0, '10000000S', 0); ATENO: Retire todas as linhas vazias do COMEO e do FINAL do arquivo. Com o VI aberto, no modo de comando (sinal de dois-pontos), execute o seguinte comando: :%s/INSERT INTO virtual_users VALUES (//g :%s/);//g Com isso voc vai deixar a linha parecida com isso: 494, 'sandra.hirose@seu_dominio.com.br', 'ad6UWax8vrpqg', 108, 108, '/home/', 'seu_dominio.com.br/sandra.hirose/Maildir/', '2002-11-28', '03:09:58', 'seu_dominio.com.br', 'SANDRA ETSUKO HIROSE', 1, 0, '10000000S', 0 Agora crie o script em PHP com o seguinte contedo (add_mysql.php): #!/usr/bin/php -q <? // Variveis de acesso ao MySQL $host = "localhost"; $user = "root"; $senha = "senha"; $name_db = "postfix"; //Arquivo com o backup do antiga tabela "virtual_users" $file_bak = "/root/tmp/backup_mail.cf"; //============= //INICIO //============= $conexao = mysql_connect($host,$user,$senha); mysql_select_db("$name_db", $conexao); // Corta o arquivo $f=file("$file_bak"); for($i=0;$i<count($f);$i++) { list($id, $username, $password, $uid, $gid, $home, $maildir, $date, $time, $domain, $name, $active, $disk_usage, $quota, $htaccess)=explode(", ", $f[$i]); $insert = "INSERT INTO mailbox (username, password, name, home, maildir, quota, domain, create_date, active, uid, gid, disk_usage, htaccess) VALUES ($username, $password, $name, $home, $maildir, $quota, $domain, $date, $active, $uid, $gid, $disk_usage, $htaccess)"; mysql_query($insert,$conexao); echo "\n"; echo "Usurio $username cadastrado com sucesso!!! \n"; } ?> Edite as seguintes variveis conforme a sua configurao: $host = "localhost"; $user = "root"; $senha = "senha"; $name_db = "postfix";

46 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

Cruze os dedos e execute o script :-) # chmod +x add_mysql.php # ./add_mysql.php Teste se foi tudo ok... # mysql -D postfix -u root -psenha -e "select * from mailbox;" Se ocorreu tudo certo, vai aparecer um monte de coisa na tela. Agora, temos de terminar o servio. Para a migrao ser perfeita, temos que corrigir mais 3 campos da tabela, so eles: QUOTA UID GID A QUOTA diferente da antiga tabela, agora precisa ter um "S" no final de cada valor. Isso necessrio para que o MAILDROP crie o arquivo $HOME/Maildir/maildirsize de cada usurio caso no exista. Esse arquivo controla a sua COTA conforme especificado no MySQL. Os valores do campos UID e GUI devem ser o mesmo do usurio MAILDROP. Conecte-se no MySQL e execute: # mysql -D postfix -u root -psenha mysql> select quota from mailbox where username='marco.maximo@dominio1.com.br';
+------------+ | quota | +------------+ | 30000000 | +------------+

Alterando a COTA: mysql> update mailbox set quota=concat(quota, 'S'); mysql> select quota from mailbox where username='marco.maximo@dominio1.com.br';
+-------------+ | quota | +-------------+ | 30000000S | +-------------+

mysql> select uid,gid from mailbox where username='marco.maximo@dominio1.com.br';


+------+------+ | uid | gid | +------+------+ | 502 | 503 | +------+------+

Alterando o UID e GID: mysql> update mailbox set uid=108,gid=108 where uid=502 and gid=503;

47 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

mysql> select uid,gid from mailbox where username='marco.maximo@dominio1.com.br';


+------+------+ | uid | gid | +------+------+ | 108 | 108 | +------+------+

Beleza, banco migrado com sucesso. Espero :-)

Migrando a tabela aliases Voc como eu, talvez possua muitos redirecionamentos de email (ALIASES), sendo assim voc pode seguir o seguinte roteiro para migrar de forma menos traumtica e trabalhosa os seu dados. Crie o arquivo de backup: # mysqldump -B mail --tables aliases -psenha > /root/tmp/backup_alias.cf Edite o arquivo gerado, com o VI, e apague as linhas parecidas com: # MySQL dump 8.16 # # Host: localhost Database: mail #-------------------------------------------------------# Server version 3.23.46-log # # Table structure for table 'aliases' # CREATE TABLE aliases ( alias varchar(255) NOT NULL default '', rcpt varchar(255) default NULL, date_add date default NULL, time_add time default NULL, PRIMARY KEY (alias) ) TYPE=MyISAM; # # Dumping data for table 'aliases' # Deixe s os dados da tabela. Exemplo: INSERT INTO aliases VALUES ('suporte@dominio1.com.br', 'silva@dominio1.com.br', '2003-03-31', '00:00:00'); ATENO: Retire todas as linhas vazias do COMEO e do FINAL do arquivo. Com o VI aberto, no modo de comando (sinal dois-pontos) execute o seguinte comando: :%s/INSERT INTO aliases VALUES (//g :%s/);//g

48 de 49

26/03/2013 15:45

Montando um servidor de e-mail completo com Postfix [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=526

Saia do VI e execute o seguinte comando: # cat backup_alias.cf | cut -d\' -f2 | cut -d@ -f2 > dominios.log Edite o arquivo criado e execute o seguinte comando: :%s/^/'/g :%s/$/'/g Salve e saia, agora faa: # paste -d, backup_alias.cf dominios.log > saida.txt Agora crie o script em PHP com o seguinte contedo (add_alias_mysql.php): #!/usr/bin/php -q <? // Variveis de acesso ao MySQL $host = "localhost"; $user = "root"; $senha = "senha"; $name_db = "postfix"; // Arquivo com o backup do antiga tabela "virtual_users" $file_bak = "/root/tmp/saida.txt"; //============= //INICIO //============= $conexao = mysql_connect($host, $user, $senha); mysql_select_db("$name_db", $conexao); // Corta o arquivo $f=file("$file_bak"); for($i=0;$i<count($f);$i++) { list($address, $goto, $create_date, $change_date, $domain)=explode(", ", $f[$i]); $insert = "INSERT INTO alias (address, goto, domain, create_date) VALUES ($address, $goto, $domain, $create_date)"; mysql_query($insert,$conexao); echo "\n"; echo "ALIAS $username cadastrado com sucesso!!! \n"; } ?> De permisso de execuo e execute o script. Boa sorte.

http://www.vivaolinux.com.br/artigo/Montando-um-servidor-de-email-completo-com-Postfix Voltar para o site

49 de 49

26/03/2013 15:45

You might also like