Montando um servidor de e-mail completo com Postfix
Este tutorial aborda a criação de um servidor de e-mail baseado em banco de dados MySQL, com suporte a cota de usuários, antispam, antivírus, webmail e tudo mais o que se pode imaginar.
Parte 19: Webmail - Squirrelmail
Desde o meu primeiro tutorial, muitas pessoas me pediam sugestões
de um webmail que se integrasse a esse ambiente, esse também foi
um dos meus problemas quando comecei a trabalhar com essa solução.
Dos webmails que testei, o que mais me surpreendeu foi o Squirrelmail. O Squirrelmail é um completo webmail que se integra completamente nesse ambiente com domínios virtuais. Ele é escrito em PHP, o que possibilita a sua total personalização.
Um outro recurso muito interessante, é a possibilidade de se aumentar as funcionalidades do Squirrelmail com a instalação de plugins.
Vou demonstrar uma instalação simples com suporte a MySQL e a instalação de um plugin para mudança de senha.
Dependências:
Apache e PHP.
# urpmi php-pear
Instalando:
No site existem versões em RPM, mas aconselho a utilizar as versão SOURCE devido a sua facilidade de personalização.
Faça o download em: # 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 configuração do Squirrelmail pode ser feita de duas formas:
Como estamos utilizando o MySQL, nada mais cômodo como guardar as configuração dos usuários e seus livros de endereços em tabelas SQL. O Squirrelmail permite essa facilidade, sendo assim, vamos criar as tabelas e as permissões de acesso a elas.
Crie um arquivo para a criação das tabelas com o seguinte conteúdo:
Dos webmails que testei, o que mais me surpreendeu foi o Squirrelmail. O Squirrelmail é um completo webmail que se integra completamente nesse ambiente com domínios virtuais. Ele é escrito em PHP, o que possibilita a sua total personalização.
Um outro recurso muito interessante, é a possibilidade de se aumentar as funcionalidades do Squirrelmail com a instalação de plugins.
Vou demonstrar uma instalação simples com suporte a MySQL e a instalação de um plugin para mudança de senha.
Dependências:
Apache e PHP.
# urpmi php-pear
Instalando:
No site existem versões em RPM, mas aconselho a utilizar as versão SOURCE devido a sua facilidade de personalização.
Faça o download em: # 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 configuração do Squirrelmail pode ser feita de duas formas:
- Por um script de configuração "configure".
- Editando diretamente o arquivo "webmail/config/config.php"
Como estamos utilizando o MySQL, nada mais cômodo como guardar as configuração dos usuários e seus livros de endereços em tabelas SQL. O Squirrelmail permite essa facilidade, sendo assim, vamos criar as tabelas e as permissões de acesso a elas.
Crie um arquivo para a criação das tabelas com o seguinte conteúdo:
#================ squirrelmail.db ============
#
# Cria o banco do Webmail
#
CREATE DATABASE webmail;
use webmail;
#
# Tabela de preferência dos usuários '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 endereço dos usuários '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 usuário "squirreluser" e da permissão 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;
#
# Cria o banco do Webmail
#
CREATE DATABASE webmail;
use webmail;
#
# Tabela de preferência dos usuários '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 endereço dos usuários '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 usuário "squirreluser" e da permissão 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 | +-------------------+ | address | | userprefs | +-------------------+
Agora vamos configurar o Squirrelmail.
Dentro do diretório webmail/config/ existe um arquivo chamado "config_default.php". Esse arquivo explica para que serve cada parâmetro de configuração.
Crie um arquivo chamado "config.php" com o conteúdo do arquivo "config_default.php", exemplo:
# cp config_default.php config.php
Uma outra forma de gerar esse arquivo, é usando o script de configuração:
# ./configure
Recomendo essa última forma, pois cria um arquivo config.php mais "limpo".
Essas são as principais linhas que devem ser alteradas no arquivo "webmail/config/config.php" para a configuração do seu domínio 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;
$delete_folder = true;
$noselect_fix_enable = 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';
$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;
$delete_folder = true;
$noselect_fix_enable = 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 configuração, escolha a opção 8 e habilite-os digitando os seu número correspondente.
Agora acesse o webmail pelo link:
http://ip_do_servidor/webmail/
Para logar no webmail você precisa fornecer seu nome completo de usuário, 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 estão listados 174 plugins.
Vamos instalar um plugin útil para a mudança de senha dos usuários VIRTUAIS, chamado change_mysqlpass, para isso você precisa também 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
# 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 variáveis:
$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';
$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 opção 8, habilite os dois plugins (compatibility, change_mysqlpass) e faça um reload no seu browser.
Todo o usuário criado, ao se logar pela primeira vez no webmail, receberá um pedido de mudança de senha. Isso é causado pelo valor "Y" no campo "passwd_expire" da tabela "mailbox".
DICA: Caso ocorra algum erro, pode ser devido a variável "$use_ssl_for_password_change = 1;". Se o seu servidor não estiver com o suporte SSL ativo, altere para 0 para resolver o problema.
Plugins recomendados:
- msg_flags: ícones para as mensagens.
- smallcal: pequeno calendário na barra lateral.
- newuser_wiz: ajuda o usuário a configurar alguns dados iniciais.
- vlogin: completa o login do usuário com o seu domínio "@dominio.com.br".