{"id":626,"date":"2019-10-24T17:04:55","date_gmt":"2019-10-24T15:04:55","guid":{"rendered":"https:\/\/www.tiraquelibras.com\/blog\/?p=626"},"modified":"2021-02-02T11:10:12","modified_gmt":"2021-02-02T10:10:12","slug":"servidor-de-correo-configuracion-mysql-e-instalacion-phpmyadmin-parte-5-15","status":"publish","type":"post","link":"https:\/\/blog.tiraquelibras.com\/?p=626","title":{"rendered":"Servidor de correo &#8211; Configuraci\u00f3n MySQL e instalaci\u00f3n PHPMyAdmin (parte 5)"},"content":{"rendered":"<p>Esta es una entrada dentro de la serie para la instalaci\u00f3n de un servidor de correo completo. \u00cdndice completo de contenidos pincha <a href=\"https:\/\/blog.tiraquelibras.com\/?p=601\" class=\"external external_icon\" rel=\"nofollow\" target=\"_blank\">aqu\u00ed<\/a>.<\/p>\n<hr \/>\n<p>En esta entrada vamos a crear la base de datos para nuestro servidor de correo, en la cual figurar\u00e1n tanto los dominios, como los buzones y los alias para buzones que formar\u00e1n lo que ser\u00e1 nuestro ecosistema personal de correo electr\u00f3nico para nuestros dominios.<\/p>\n<hr \/>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_76 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Tabla de contenidos<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-69fe0fda21ef4\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-69fe0fda21ef4\"  aria-label=\"Alternar\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=626\/#Securizar_instalacion_de_MySQL\"  rel=\"nofollow\" target=\"_blank\">Securizar instalaci\u00f3n de MySQL<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-2 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=626\/#Crear_la_base_de_datos\"  rel=\"nofollow\" target=\"_blank\">Crear la base de datos<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-3 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=626\/#Crear_tabla_de_dominios\"  rel=\"nofollow\" target=\"_blank\">Crear tabla de dominios<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-4 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=626\/#Crear_tabla_de_usuarios_y_credenciales\"  rel=\"nofollow\" target=\"_blank\">Crear tabla de usuarios y credenciales<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-5 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=626\/#Crear_tabla_de_alias\"  rel=\"nofollow\" target=\"_blank\">Crear tabla de alias<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-6 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=626\/#Agregar_dominios\"  rel=\"nofollow\" target=\"_blank\">Agregar dominios<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-7 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=626\/#Crear_un_buzon_de_pruebas\"  rel=\"nofollow\" target=\"_blank\">Crear un buz\u00f3n de pruebas<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-8 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=626\/#PHPMyAdmin\"  rel=\"nofollow\" target=\"_blank\">PHPMyAdmin<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=626\/#Instalaicon\"  rel=\"nofollow\" target=\"_blank\">Instalaic\u00f3n<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=626\/#Configurar_autenticacion_Apache\"  rel=\"nofollow\" target=\"_blank\">Configurar autenticaci\u00f3n Apache<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11 external external_icon\" href=\"https:\/\/blog.tiraquelibras.com\/?p=626\/#Configurar_certificado_SSL\"  rel=\"nofollow\" target=\"_blank\">Configurar certificado SSL<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h1><span class=\"ez-toc-section\" id=\"Securizar_instalacion_de_MySQL\"><\/span>Securizar instalaci\u00f3n de MySQL<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>A continuaci\u00f3n, securizamos la instalaci\u00f3n de <strong>MySQL<\/strong> con el comando<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">mysql_secure_installation<\/pre>\n<p>Cambiamos la contrase\u00f1a de root, desactivamos el login para usuario an\u00f3nimo, desactivamos el login remoto de root, borramos la base de datos de test, recargamos los privilegios de tablas, todo ello contestando a las preguntas que nos ir\u00e1 realizando el asistente:<\/p>\n<ul>\n<li>Remove anonymous users?<\/li>\n<li>Disallow root login remotely?<\/li>\n<li>Remove test database and access to it?<\/li>\n<li>Reload privilege tables now?<\/li>\n<\/ul>\n<hr \/>\n<h1><span class=\"ez-toc-section\" id=\"Crear_la_base_de_datos\"><\/span>Crear la base de datos<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>Creamos la base de datos con el siguiente comando, con el usuario <em><strong>root<\/strong> <\/em>que usamos para la instalaci\u00f3n:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">mysqladmin -u root -p create mailserver<\/pre>\n<p>Creamos un usuario para que solo tenga acceso a esta base de datos, cambiando la password por la que se quiera configurar:<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">GRANT SELECT ON mailserver.* TO \u2018mailuser\u2019@\u2019127.0.0.1\u2019 IDENTIFIED BY \u2018supersecretpassword\u2019;<\/pre>\n<p>Reiniciamos privilegios<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">FLUSH PRIVILEGES;<\/pre>\n<hr \/>\n<h1><span class=\"ez-toc-section\" id=\"Crear_tabla_de_dominios\"><\/span>Crear tabla de dominios<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>Cambiamos a la base de datos creada:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">use mailserver;<\/pre>\n<p>Creamos la tabla para los dominios <strong>virtual_domains<\/strong>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">CREATE TABLE `virtual_domains` (\r\n  `id` int(11) NOT NULL auto_increment,\r\n  `name` varchar(50) NOT NULL,\r\n  `active` BOOLEAN NOT NULL,\r\n  PRIMARY KEY (`id`)\r\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;<\/pre>\n<hr \/>\n<h1><span class=\"ez-toc-section\" id=\"Crear_tabla_de_usuarios_y_credenciales\"><\/span>Crear tabla de usuarios y credenciales<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>Creamos la tabla para los buzones y credenciales <strong>virtual_users<\/strong>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">CREATE TABLE `virtual_users` (\r\n  `id` int(11) NOT NULL auto_increment,\r\n  `domain_id` int(11) NOT NULL,\r\n  `password` varchar(106) NOT NULL,\r\n  `email` varchar(100) NOT NULL,\r\n  `quota` varchar(10) NOT NULL,\r\n  `active` BOOLEAN NOT NULL,\r\n  PRIMARY KEY (`id`),\r\n  UNIQUE KEY `email` (`email`),\r\n  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE\r\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;<\/pre>\n<p>Las credenciales vamos a almacenarlas en MD5, por lo que el tipo de campo ser\u00e1 <em><strong>varchar<\/strong> <\/em>de 106 caracteres, ya que la codificaci\u00f3n la haremos fuera de la base de datos.<\/p>\n<hr \/>\n<h1><span class=\"ez-toc-section\" id=\"Crear_tabla_de_alias\"><\/span>Crear tabla de alias<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>Creamos la tabla de alias para usuarios <strong>virtual_aliases<\/strong>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">CREATE TABLE `virtual_aliases` (\r\n  `id` int(11) NOT NULL auto_increment,\r\n  `domain_id` int(11) NOT NULL,\r\n  `source` varchar(100) NOT NULL,\r\n  `destination` varchar(100) NOT NULL,\r\n  `active` BOOLEAN NOT NULL,\r\n  PRIMARY KEY (`id`),\r\n  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE\r\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;<\/pre>\n<hr \/>\n<h1><span class=\"ez-toc-section\" id=\"Agregar_dominios\"><\/span>Agregar dominios<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>Agregamos varios dominios a la tabla\u00a0<strong>virtual_domains<\/strong>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">INSERT INTO `mailserver`.`virtual_domains`\r\n  (`id` ,`name` , `active`)\r\nVALUES\r\n  ('1', 'domain.com', true),\r\n  ('2', 'hostname.tiraquelibras.com', true),\r\n  ('3', 'hostname', true),\r\n  ('4', 'localhost.tiraquelibras.com', true),\r\n  ('5', 'tiraquelibras.com', true);\r\n<\/pre>\n<p>El <strong>ID<\/strong> que se indica en cada entrada es importante para los siguientes dos puntos.<\/p>\n<hr \/>\n<h1><span class=\"ez-toc-section\" id=\"Crear_un_buzon_de_pruebas\"><\/span>Crear un buz\u00f3n de pruebas<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>Creamos un buz\u00f3n de prueas <strong>email1@tiraquelibras.com<\/strong>, para realizar pruebas de login y env\u00edo\/recepci\u00f3n en las siguientes entradas:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">INSERT INTO `mailserver`.`virtual_users`\r\n  (`id`, `domain_id`, `password` , `email`, `active`)\r\nVALUES\r\n  ('1', '5', MD5(\u2018secretpasswd\u2019), 'email1@tiraquelibras.com', true);<\/pre>\n<hr \/>\n<h1><span class=\"ez-toc-section\" id=\"PHPMyAdmin\"><\/span>PHPMyAdmin<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<h2><span class=\"ez-toc-section\" id=\"Instalaicon\"><\/span>Instalaic\u00f3n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Creamos un usuario espec\u00edfico para acceder a la interfaz web distinto de root y reiniciamos los privilegios:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">grant all on *.* to 'phpmyadmin'@'localhost' identified by 'supersecretpasswdforphpmyadmin' with grant option;\r\nflush privileges;\r\n<\/pre>\n<p>Ahora instalamos los paquetes de PHP:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">apt-get -y install php7.0 libapache2-mod-php7.0<\/pre>\n<p>Se instalan varios paquetes adiccionales.<\/p>\n<p>Reiniciamos <strong>Apache<\/strong>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">service apache2 restart<\/pre>\n<p>Ahora tenemos que instalar el soporte <strong>MySQL<\/strong> para <strong>PHP<\/strong>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">apt-get -y install php7.0-mysql<\/pre>\n<p>Reiniciamos de nuevo Apache:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">service apache2 restart<\/pre>\n<p>Confirmamos que la cach\u00e9 <strong><em>OPCache<\/em><\/strong> para optimizar el rendimiento de Apache2 se encuentra instalada correctamente:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\"># php7.0 --version\r\nPHP 7.0.33-0+deb9u3 (cli) (built: Mar  8 2019 10:01:24) ( NTS )\r\nCopyright (c) 1997-2017 The PHP Group\r\nZend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies\r\n    with Zend OPcache v7.0.33-0+deb9u3, Copyright (c) 1999-2017, by Zend Technologies\r\n<\/pre>\n<p>Vemos que la cach\u00e9 est\u00e1 instalada con la informaci\u00f3n mostrada:<\/p>\n<blockquote><p>with Zend OPcache<\/p><\/blockquote>\n<p>Si no la tuvi\u00e9ramos ser\u00eda necesario instalarla con el comando:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">apt-get -y install php7.0-opcache<\/pre>\n<p>Otra cach\u00e9 muy \u00fatil es APCu, la cual es libre para cachear y optimizar c\u00f3digo intermedio de PHP:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">apt-get -y install\u00a0php-apcu<\/pre>\n<p>Reiniciamos de nuevo Apache:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">service apache2 restart<\/pre>\n<p>Instalamos PHPMyAdmin:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">apt-get -y install phpmyadmin<\/pre>\n<p>Y seguimos los pasos del asistente.<\/p>\n<p>Indicamos que ser\u00e1 para Apachd2:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-642\" src=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2019\/10\/php-1-300x107.png\" alt=\"\" width=\"300\" height=\"107\" \/><\/p>\n<p>Empieza a reconfigurar Apache2 hasta que nos pregunta por la base de datos para phpmyadmin con <strong><em>dbconfig-common<\/em><\/strong>, le indicamos que s\u00ed:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-643 size-full\" src=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2019\/10\/php-2.png\" alt=\"\" width=\"919\" height=\"347\" \/><\/p>\n<p>Nos pregunta por la contrase\u00f1a para la aplicaci\u00f3n, indicamos la del usuario creado antes y la confirmamos:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-644\" src=\"https:\/\/blog.tiraquelibras.com\/wp-content\/uploads\/2019\/10\/php-3.png\" alt=\"\" width=\"914\" height=\"213\" \/><\/p>\n<p>Ahora accediendo a la URL http:\/\/X.X.X.X\/phpmyadmin, siendo X.X.X.X la IP de tu servidor en el que est\u00e1s trabajando, accedemos a la interfaz Web, con las credenciales del usuario creadas al principio de este apartado.<\/p>\n<p>Vemos que la configuraci\u00f3n web para PHPMyAdmin se encuentra en el directorio <strong><em>\/etc\/apache2\/conf-enabled\/phpmyadmin.conf<\/em><\/strong><\/p>\n<p>Habilitamos la extensi\u00f3n de PHP <strong><em>mbstring<\/em><\/strong> que ser\u00e1 usada para administrar variables NON-ASCII y convertirlas en variables de diferentes codificaciones:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">sudo phpenmod mbstring<\/pre>\n<p>Reiniciamos Apache2:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">systemctl restart apache2<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Configurar_autenticacion_Apache\"><\/span>Configurar autenticaci\u00f3n Apache<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Securizamos la instancia <strong>PHPMyAdmin<\/strong>, al ser un objetivo habitual de los atacantes. Hay que tener una preocupaci\u00f3n extra para impedir accesos no autorizados. Usaremos la autenticaci\u00f3n de <strong>Apache<\/strong> con <strong><em>.htaccess<\/em><\/strong> y funcionalidades de autorizaci\u00f3n.<\/p>\n<p>Primero debemos de habilitar el uso de <strong><em>.htaccess<\/em><\/strong> editando la configuraci\u00f3n de <strong>Apache<\/strong> editando el archivo<\/p>\n<p><strong><em>\/etc\/apache2\/conf-available\/phpmyadmin.conf<\/em><\/strong> y agregando la directiva <strong><em>AllowOverride All <\/em><\/strong>en la secci\u00f3n <strong><em>&lt;Directory \/usr\/share\/phpmyadmin&gt;<\/em><\/strong>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">...\r\n&lt;Directory \/usr\/share\/phpmyadmin&gt;\r\n    Options SymLinksIfOwnerMatch\r\n    DirectoryIndex index.php\r\n    AllowOverride All\r\n...<\/pre>\n<p>Guardamos y reiniciamos Apache para implementar los cambios:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">systemctl restar apache2<\/pre>\n<p>Ahora creamos el archivo <strong><em>.htaccess<\/em><\/strong> en el directorio en donde se encuentra la instancia de PHPMyAdmin, en <strong><em>nano \/usr\/share\/phpmyadmin\/.htaccess<\/em><\/strong>, y agregamos el siguiente contenido:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">AuthType Basic\r\nAuthName \"Restricted Files\"\r\nAuthUserFile \/etc\/phpmyadmin\/.htpasswd\r\nRequire valid-user\r\n<\/pre>\n<p>Para la localizaci\u00f3n indicada en el par\u00e1metro <strong><em>AuthUserFilen<\/em> <\/strong>vamos a crear un archivo de contrase\u00f1as con la utilizada <strong><em>htpasswd<\/em><\/strong>, indicando el username que queramos:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">sudo htpasswd -c \/etc\/phpmyadmin\/.htpasswd username<\/pre>\n<p>En nuestro caso usaremos el mismo que para el acceso a PHPMyAdmin:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">sudo htpasswd -c \/etc\/phpmyadmin\/.htpasswd userforphpmyadmin<\/pre>\n<p>Agregamos la password y la confirmamos.<\/p>\n<p>Ahora si queremos agregar nuevos usuarios usar\u00edamos el comando <strong><u>sin la opci\u00f3n<\/u> <em>-c.<\/em><\/strong><\/p>\n<p>Al acceder a la URL http:\/\/X.X.X.X\/phpmyadmin, siendo X.X.X.X la IP de tu servidor en el que est\u00e1s trabajando, nos pedir\u00e1 la credencial de acceso que acabamos de crear.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Configurar_certificado_SSL\"><\/span>Configurar certificado SSL<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Ahora securizamos con un certificado autofirmado.<\/p>\n<p>Primero nos aseguramos que el m\u00f3dulo <strong><em>ssl<\/em><\/strong> est\u00e1 instalado y activado para Apache2 y lo reiniciamos:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">a2enmod ssl\r\n\r\nservice apache2 restart<\/pre>\n<p>Creamos una entrada en nuestro DNS, por ejemplo <em><strong>phpmyadmin.tiraquelibras.com<\/strong><\/em>, e instalamos un certificado de Let\u2019s Ecrypt para este dominio, indicando que redirija a HTTPS.<\/p>\n<p>Creamos un VirtualHost para este dominio nuevo <strong><em>nano \/etc\/apache2\/sites-available\/phpmyadmin.tiraquelibras.com<\/em><\/strong> con el siguiente contenido:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">&lt;VirtualHost *:80&gt;\r\n\r\nServerAdmin email@email.com # Indicar un email correcto.\r\nServerName phpmyadmin.tiraquelibras.com\r\nDocumentRoot \/var\/www\/html\/phpmyadmin.tiraquelibras.com\r\n\r\nErrorLog ${APACHE_LOG_DIR}\/phpmyadmin.tiraquelibras.com_error.log\r\nCustomLog ${APACHE_LOG_DIR}\/phpmyadmin.tiraquelibras_access.log combined\r\n\r\n&lt;Directory \/usr\/share\/phpmyadmin&gt;\r\n    Allow from all\r\n    Deny from None\r\n    Order Allow,Deny\r\n&lt;\/Directory&gt;\r\n\r\n&lt;Location \/phpmyadmin&gt;\r\n    Allow from all\r\n    Deny from None\r\n    Order Allow,Deny\r\n&lt;\/Location&gt;\r\n\r\n&lt;\/VirtualHost&gt;\r\n<\/pre>\n<p>Este contenido nos va a permitir acceder a PHPMyAdmin desde el dominio creado.<\/p>\n<p>Ahora habilitamos el dominio<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">a2ensite phpmyadmin.tiraquelibras.com.conf<\/pre>\n<p>para que cree el link simb\u00f3lico con el directorio <strong><em>sites-enabled<\/em><\/strong>.<\/p>\n<p>Reiniciamos Apache<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">systemctl restart apache2<\/pre>\n<p>Ahora creamos el certificado de <strong>Let&#8217;s Encrypt<\/strong> para el dominio <em><strong>phpmyadmn.tiraquelibras<\/strong><\/em><strong><em>.com<\/em><\/strong> y le indicamos que haga la redirecci\u00f3n a <strong>HTTPS.<\/strong> Para m\u00e1s informaci\u00f3n sobre certificados Let&#8217;s Encrypt puedes visitar la entrada para Centos pinchando <a href=\"https:\/\/blog.tiraquelibras.com\/?p=558\" class=\"external external_icon\" rel=\"nofollow\" target=\"_blank\">aqu\u00ed<\/a> o para Debian pinchando <a href=\"https:\/\/blog.tiraquelibras.com\/?p=535\" class=\"external external_icon\" rel=\"nofollow\" target=\"_blank\">aqu\u00ed<\/a>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">certbot --apache -d phpmyadmin.tiraquelibras.com<\/pre>\n<p>Esto modifica los archivos de configuraci\u00f3n del <strong>VirtualHost<\/strong> para <strong>HTTP<\/strong> y crea el de <strong>HTTPS<\/strong> en el archivo que hemos creado en el paso anterior <strong><em>\/etc\/apache2\/sites-available\/strato.yeloquehay.com.conf<\/em><\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">...\r\nRewriteEngine on\r\nRewriteCond %{SERVER_NAME} =strato.yeloquehay.com\r\nRewriteRule ^ https:\/\/%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]\r\n...<\/pre>\n<p>Y se cre\u00f3 el siguiente archivo para <strong>HTTPS <\/strong>en el archivo <strong><em>\/etc\/apache2\/sites-available\/strato.yeloquehay.com-le-ssl.conf:<\/em><\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">&lt;IfModule mod_ssl.c&gt;\r\n&lt;VirtualHost *:443&gt;\r\n\r\nServerAdmin email@email.com # Indicar un email correcto.\r\nServerName phpmyadmin.tiraquelibras.com\r\nDocumentRoot \/var\/www\/html\/phpmyadmin.tiraquelibras.com\r\n\r\nErrorLog ${APACHE_LOG_DIR}\/phpmyadmin.tiraquelibras.com_error.log\r\nCustomLog ${APACHE_LOG_DIR}\/phpmyadmin.tiraquelibras_access.log combined\r\n\r\n&lt;Directory \/usr\/share\/phpmyadmin&gt;\r\n    Allow from all\r\n    Deny from None\r\n    Order Allow,Deny\r\n&lt;\/Directory&gt;\r\n\r\n&lt;Location \/phpmyadmin&gt;\r\n    Allow from all\r\n    Deny from None\r\n    Order Allow,Deny\r\n&lt;\/Location&gt;\r\n\r\n\r\n\r\nSSLCertificateFile \/etc\/letsencrypt\/live\/phpmyadmin.tiraquelibras.com\/fullchain.pem\r\nSSLCertificateKeyFile \/etc\/letsencrypt\/live\/phpmyadmin.tiraquelibras.com\/privkey.pem\r\nInclude \/etc\/letsencrypt\/options-ssl-apache.conf\r\n&lt;\/VirtualHost&gt;\r\n&lt;\/IfModule&gt;\r\n<\/pre>\n<p>Ahora agregamos al final del archivo sudo <strong><em>nano \/etc\/phpmyadmin\/config.inc.php<\/em><\/strong> la siguiente l\u00ednea:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">$cfg['ForceSSL'] = true;<\/pre>\n<p>Y para acabar modificamos el archivo <strong><em>\/usr\/share\/phpmyadmin\/.htaccess<\/em><\/strong> para redirigir la URL si accedemos a la IP del servidor en lugar de al nombre de dominio, cambiando X.X.X.X por la IP del servidor en el que est\u00e1s trabajando:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">RewriteEngine On\r\nRewriteCond %{HTTP_HOST} ^X.X.X.X\r\nRewriteRule (.*) https:\/\/phpmyadmin.tiraquelibras.com\/phpmyadmin [R=301,L]\r\n\r\n&lt;If \"%{HTTPS} == 'on'\"&gt;\r\nAuthType Basic\r\nAuthName \"Restricted Files\"\r\nAuthUserFile \/etc\/phpmyadmin\/.htpasswd\r\nRequire valid-user\r\n&lt;\/If&gt;\r\n<\/pre>\n<p>con esto ya tendr\u00edamos acceso a la URL https:\/\/phpmyadmin.tiraquelibras.com\/phpmyadmin, pudiendo administrar la base de datos de dominios, buzones y alias.<\/p>\n<hr \/>\n<p>\u00cdndice general pincha <a href=\"https:\/\/blog.tiraquelibras.com\/?p=601\" class=\"external external_icon\" rel=\"nofollow\" target=\"_blank\">aqu\u00ed<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Esta es una entrada dentro de la serie para la instalaci\u00f3n de un servidor de correo completo. \u00cdndice completo de contenidos pincha aqu\u00ed. En esta<span class=\"read-more-link\"><a class=\"read-more\" href=\"https:\/\/blog.tiraquelibras.com\/?p=626\">Read More<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":633,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,22],"tags":[64,63,65,62],"class_list":["post-626","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sistemas","category-ti","tag-alias","tag-backend","tag-domain","tag-mysql"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/posts\/626","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=626"}],"version-history":[{"count":0,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/posts\/626\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=\/wp\/v2\/media\/633"}],"wp:attachment":[{"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=626"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=626"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.tiraquelibras.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=626"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}