MySQL Configuration · 8 min read · Dec 07, 2025
Usuários Virtuais E Domínios Com Postfix, Courier, MySQL E SquirrelMail (CentOS 6.3 x86_64) - Página 2
6 Definir Senhas MySQL E Configurar phpMyAdmin
Inicie o MySQL:
chkconfig --levels 235 mysqld on
/etc/init.d/mysqld startEm seguida, defina senhas para a conta root do MySQL:
mysql_secure_installation[root@server1 ~]# mysql_secure_installation
NOTA: É RECOMENDADO EXECUTAR TODAS AS PARTES DESTE SCRIPT PARA TODOS OS SERVIDORES MySQL EM USO NA PRODUÇÃO! POR FAVOR, LEIA CADA PASSO CUIDADOSAMENTE!
Para fazer login no MySQL e protegê-lo, precisaremos da senha atual para o usuário root. Se você acabou de instalar o MySQL e ainda não definiu a senha do root, a senha estará em branco, então você deve apenas pressionar enter aqui.
Digite a senha atual para root (pressione enter para nenhum): <– ENTER
OK, senha usada com sucesso, prosseguindo…
Definir senha root? [Y/n] <– ENTER
Nova senha: <– yourrootsqlpassword
Reinsira a nova senha: <– yourrootsqlpassword
Senha atualizada com sucesso!
Recarregando tabelas de privilégios..
… Sucesso!
Por padrão, uma instalação do MySQL tem um usuário anônimo, permitindo que qualquer pessoa faça login no MySQL sem precisar ter uma conta de usuário criada para ela. Isso é destinado apenas para testes e para tornar a instalação um pouco mais suave. Você deve removê-los antes de passar para um ambiente de produção.
Remover usuários anônimos? [Y/n] <– ENTER
… Sucesso!
Normalmente, o root deve ser permitido apenas conectar-se a partir de ‘localhost’. Isso garante que alguém não possa adivinhar a senha do root pela rede.
Desabilitar login remoto do root? [Y/n] <– ENTER
… Sucesso!
Por padrão, o MySQL vem com um banco de dados chamado ‘test’ que qualquer um pode acessar. Isso também é destinado apenas para testes e deve ser removido antes de passar para um ambiente de produção.
Remover banco de dados de teste e acesso a ele? [Y/n] <– ENTER
- Removendo banco de dados de teste…
… Sucesso! - Removendo privilégios no banco de dados de teste…
… Sucesso!
Recarregar as tabelas de privilégios garantirá que todas as alterações feitas até agora terão efeito imediatamente.
Recarregar tabelas de privilégios agora? [Y/n] <– ENTER
… Sucesso!
Limpando…
Tudo pronto! Se você completou todos os passos acima, sua instalação do MySQL agora deve estar segura.
Obrigado por usar o MySQL!
[root@server1 ~]#
Agora configuramos o phpMyAdmin. Mudamos a configuração do Apache para que o phpMyAdmin permita conexões não apenas de localhost (comentando a parte
vi /etc/httpd/conf.d/phpMyAdmin.conf| [...] # |
Em seguida, criamos os links de inicialização do sistema para o Apache e o iniciamos:
chkconfig --levels 235 httpd on
/etc/init.d/httpd startAgora você pode direcionar seu navegador para http://server1.example.com/phpMyAdmin/ ou http://192.168.0.100/phpMyAdmin/ e fazer login com o nome de usuário root e sua nova senha root do MySQL.
7 Criar O Banco De Dados MySQL Para Postfix/Courier
Criamos um banco de dados chamado mail:
mysqladmin -u root -p create mailEm seguida, vamos para o shell do MySQL:
mysql -u root -pNo shell do MySQL, criamos o usuário mail_admin com a senha mail_admin_password (substitua pela sua própria senha) que tem privilégios SELECT, INSERT, UPDATE, DELETE no banco de dados mail. Este usuário será usado pelo Postfix e Courier para se conectar ao banco de dados de e-mail:
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'mail_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost.localdomain' IDENTIFIED BY 'mail_admin_password';
FLUSH PRIVILEGES;Ainda no shell do MySQL, criamos as tabelas que o Postfix e o Courier precisam:
USE mail;CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
ENGINE=MyISAM;CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
ENGINE=MyISAM;CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota bigint(20) DEFAULT '10485760',
PRIMARY KEY (email)
) ENGINE=MyISAM;CREATE TABLE transport (
domain varchar(128) NOT NULL default '',
transport varchar(128) NOT NULL default '',
UNIQUE KEY domain (domain)
) ENGINE=MyISAM;quit;Como você pode ter notado, com o comando quit; saímos do shell do MySQL e estamos de volta ao shell do Linux.
A tabela domains armazenará cada domínio virtual que o Postfix deve receber e-mails (por exemplo, example.com).
| domain |
| example.com |
A tabela forwardings é para alias de um endereço de e-mail para outro, por exemplo, encaminhar e-mails de [email protected] para [email protected].
| source | destination |
| [email protected] | [email protected] |
A tabela users armazena todos os usuários virtuais (ou seja, endereços de e-mail, porque o endereço de e-mail e o nome de usuário são os mesmos) e senhas (em forma criptografada) e um valor de cota para cada caixa de correio (neste exemplo, o valor padrão é 10485760 bytes, o que significa 10MB).
| password | quota | |
| [email protected] | No9.E4skNvGa. (“segredo” em forma criptografada) | 10485760 |
A tabela transport é opcional, é para usuários avançados. Ela permite encaminhar e-mails para usuários individuais, domínios inteiros ou todos os e-mails para outro servidor. Por exemplo,
| domain | transport |
| example.com | smtp:[1.2.3.4] |
encaminharia todos os e-mails para example.com via o protocolo smtp para o servidor com o endereço IP 1.2.3.4 (os colchetes [] significam “não faça uma busca do registro MX DNS” (o que faz sentido para endereços IP…). Se você usar um nome de domínio totalmente qualificado (FQDN) em vez disso, você não usaria os colchetes.).
8 Configurar Postfix
Agora precisamos dizer ao Postfix onde ele pode encontrar todas as informações no banco de dados. Portanto, precisamos criar seis arquivos de texto. Você notará que digo ao Postfix para se conectar ao MySQL no endereço IP 127.0.0.1 em vez de localhost. Isso ocorre porque o Postfix está sendo executado em uma jaula chroot e não tem acesso ao socket do MySQL, que tentaria se conectar se eu dissesse ao Postfix para usar localhost. Se eu usar 127.0.0.1, o Postfix usa a rede TCP para se conectar ao MySQL, o que não é um problema mesmo em uma jaula chroot (a alternativa seria mover o socket do MySQL para a jaula chroot, o que causa alguns outros problemas).
Agora vamos criar nossos seis arquivos de texto.
vi /etc/postfix/mysql-virtual_domains.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT domain AS virtual FROM domains WHERE domain='%s' hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_forwardings.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT destination FROM forwardings WHERE source='%s' hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_mailboxes.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s' hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_email2email.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT email FROM users WHERE email='%s' hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_transports.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT transport FROM transport WHERE domain='%s' hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT quota FROM users WHERE email='%s' hosts = 127.0.0.1 |
chmod o= /etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cfAgora criamos um usuário e grupo chamado vmail com o diretório home /home/vmail. Este é onde todas as caixas de correio serão armazenadas.
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -mEm seguida, fazemos algumas configurações do Postfix. Certifique-se de substituir server1.example.com por um FQDN válido, caso contrário, seu Postfix pode não funcionar corretamente!
postconf -e 'myhostname = server1.example.com'
postconf -e 'mydestination = server1.example.com, localhost, localhost.localdomain'
postconf -e 'mynetworks = 127.0.0.0/8'
postconf -e 'virtual_alias_domains ='
postconf -e ' virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'
postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'
postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'
postconf -e 'virtual_mailbox_base = /home/vmail'
postconf -e 'virtual_uid_maps = static:5000'
postconf -e 'virtual_gid_maps = static:5000'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_authenticated_header = yes'
postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtpd_tls_cert_file = /etc/postfix/smtpd.cert'
postconf -e 'smtpd_tls_key_file = /etc/postfix/smtpd.key'
postconf -e 'transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf'
postconf -e 'virtual_create_maildirsize = yes'
postconf -e 'virtual_maildir_extended = yes'
postconf -e 'virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf'
postconf -e 'virtual_mailbox_limit_override = yes'
postconf -e 'virtual_maildir_limit_message = "O usuário que você está tentando alcançar está acima da cota."'
postconf -e 'virtual_overquota_bounce = yes'
postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'
postconf -e 'inet_interfaces = all'Depois, criamos o certificado SSL que é necessário para TLS:
cd /etc/postfix
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509Nome do País (código de 2 letras) [XX]: <– Digite o Nome do Seu País (por exemplo, “DE”).
Nome do Estado ou Província (nome completo) []: <– Digite o Nome do Seu Estado ou Província.
Nome da Localidade (por exemplo, cidade) [Cidade Padrão]: <– Digite Sua Cidade.
Nome da Organização (por exemplo, empresa) [Empresa Padrão Ltda]: <– Digite o Nome da Sua Organização (por exemplo, o nome da sua empresa).
Nome da Unidade Organizacional (por exemplo, seção) []: <– Digite o Nome da Sua Unidade Organizacional (por exemplo, “Departamento de TI”).
Nome Comum (por exemplo, seu nome ou o nome do host do seu servidor) []: <– Digite o Nome de Domínio Totalmente Qualificado do sistema (por exemplo, “server1.example.com”).
Endereço de E-mail []: <– Digite Seu Endereço de E-mail.
Em seguida, altere as permissões do smtpd.key:
chmod o= /etc/postfix/smtpd.keyReceba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.