[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)