[toc]
# Configuración MySQL e instalación phpMyAdmin
<p style="text-align: justify;">
Vamos a configurar MySQL para nuestro servidor de correo, creando una base de datos segura y estructuras necesarias para gestionar dominios, usuarios y alias. También instalaremos y securizaremos phpMyAdmin para administrar la base de datos desde un navegador.
## Proteger MySQL
Aseguramos la instalación de MySQL ejecutando:
sudo mysql_secure_installation
Sigue las instrucciones:
* Cambia la contraseña del usuario root.
* Elimina usuarios anónimos (Remove anonymous users? → Yes).
* Deshabilita el acceso remoto de root (Disallow root login remotely? → Yes).
* Elimina la base de datos de prueba (Remove test database and access to it? → Yes).
* Recarga los privilegios (Reload privilege tables now? → Yes).
## Crear la Base de Datos y Usuario:
Accede a MySQL:
mysql -u root -p
<p style="text-align: justify;">
Ejecuta los siguientes comandos para crear la base de datos y un usuario seguro:
CREATE DATABASE mailserver;
CREATE USER 'mailuser'@'localhost' IDENTIFIED BY 'tu_contraseña_segura';
GRANT ALL PRIVILEGES ON mailserver.* TO 'mailuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Verifica que el usuario tenga acceso:
mysql -u mailuser -p -h localhost
SHOW DATABASES;
USE mailserver;
## Crear Tablas para Dominios, Usuarios y Alias
<p style="text-align: justify;">
Dentro de MySQL, crea las tablas necesarias para gestionar correos:
### Tabla de Dominios
CREATE TABLE virtual_domains (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
active BOOLEAN NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
### Tabla de Usuarios
CREATE TABLE virtual_users (
id INT(11) NOT NULL AUTO_INCREMENT,
domain_id INT(11) NOT NULL,
password VARCHAR(206) NOT NULL,
email VARCHAR(100) NOT NULL,
quota VARCHAR(10) NOT NULL,
active BOOLEAN NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY email (email),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
### Tabla de Alias
CREATE TABLE virtual_aliases (
id INT(11) NOT NULL AUTO_INCREMENT,
domain_id INT(11) NOT NULL,
source VARCHAR(100) NOT NULL,
destination VARCHAR(100) NOT NULL,
active BOOLEAN NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
### Agregar Datos de Prueba
#### Agregar Dominios
INSERT INTO virtual_domains
(id ,name , active)
VALUES
(1, 'domain.com', true),
(2, 'hostname.ccuellar.test', true),
(3, 'hostname', true),
(4, 'localhost.ccuellar.test', true),
(5, 'ccuellar.test', true);
#### Crear Usuarios
Usa contraseñas cifradas en MD5:
INSERT INTO mailserver.virtual_users
(id, domain_id, password, email,quota,active)
VALUES
(1, 5, MD5('secretpasswd'), 'email1@ccuellar.test',0, true),
(2, 5, MD5('admin123'), 'admin@ccuellar.test',0, true),
(3, 5, MD5('carlapass'), 'carla@ccuellar.test',0, true),
(4, 5, MD5('testpass'), 'user1@ccuellar.test',0, true),
(5, 5, MD5('securepwd'), 'user2@ccuellar.test',0, true),
(6, 5, MD5('postmaster'), 'postmaster@ccuellar.test',0, true);
## Instalar phpMyAdmin
Instala phpMyAdmin y sus dependencias:
sudo apt update
sudo apt install php libapache2-mod-php php-mysql php-opcache php-apcu php-mbstring
sudo apt install phpmyadmin
Durante la instalación:
* Selecciona Apache2 como servidor web.
* Usa dbconfig-common para configurar la base de datos.
* Configura una contraseña segura para phpMyAdmin.
Habilita las extensiones necesarias:
sudo phpenmod mbstring
sudo systemctl restart apache2
## Securizar phpMyAdmin
Autenticación Adicional:
Edita el archivo de configuración de Apache:
sudo vi /etc/apache2/conf-available/phpmyadmin.conf
Asegúrate de que incluya:
<Directory /usr/share/phpmyadmin>
AllowOverride All
...
</Directory>
Crea un archivo .htaccess para autenticación básica:
sudo vi /usr/share/phpmyadmin/.htaccess
Añade:
AuthType Basic
AuthName "Acceso Restringido"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user
Crea el archivo de contraseñas:
sudo htpasswd -c /etc/phpmyadmin/.htpasswd admin
Reinicia Apache:
sudo systemctl restart apache2
## Configurar Certificado SSL
Genera un certificado autofirmado:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/phpmyadmin.key \
-out /etc/ssl/certs/phpmyadmin.crt
sudo cp /etc/ssl/certs/phpmyadmin.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
Configura un VirtualHost para HTTPS:
sudo vi /etc/apache2/sites-available/phpmyadmin.conf
Añade:
<VirtualHost *:443>
ServerName phpmyadmin.ccuellar.test
DocumentRoot /usr/share/phpmyadmin
SSLEngine on
SSLCertificateFile /etc/ssl/certs/phpmyadmin.crt
SSLCertificateKeyFile /etc/ssl/private/phpmyadmin.key
</VirtualHost>
Habilita el sitio y reinicia Apache:
sudo a2ensite phpmyadmin.conf
sudo systemctl restart apache2
## Agregar el subdominio a DNS bind9
<p style="text-align: justify;">
Para agregar el subdominio phpmyadmin.ccuellar.test, debemos modificar la zona directa en el archivo /etc/bind/db.ccuellar.test y añadimos:
phpmyadmin IN A 10.24.153.2
Zona inversa:
2 IN PTR phpmyadmin.ccuellar.test.
Incrementamos el número serial y reiniciamos el servicio bind9. Ahora podremos usar phpmyadmin.ccuellar.test.
## Verificar Todo:
Accede a phpMyAdmin desde el navegador:
https://phpmyadmin.ccuellar.test
Usa las credenciales de autenticación básica y las de MySQL.
Con estos pasos, tendrás una base de datos MySQL segura y phpMyAdmin accesible de forma segura.
🤗
---
## [Índice de secciones aquí](https://hackmd.io/@ccuellar/rJ73y6FpJe)
## [👈Anterior sección](https://hackmd.io/@ccuellar/r1NBq0F61l) 😄 [Siguiente sección 👉](https://hackmd.io/@ccuellar/SkKQiAY61g)