Servidor Perfecto · 9 min read · Jan 08, 2026

El Servidor Perfecto - CentOS 6.5 x86_64 (Apache2, MySQL, PHP, PureFTPD, Postfix, Dovecot e ISPConfig 3) - Página 4

13 Establecer Contraseñas de MySQL y Configurar phpMyAdmin

Establecer contraseñas para la cuenta root de MySQL:

mysql_secure_installation

[root@server1 tmp]# mysql_secure_installation

NOTA: ¡SE RECOMIENDA EJECUTAR TODAS LAS PARTES DE ESTE SCRIPT PARA TODOS LOS SERVIDORES MySQL EN USO EN PRODUCCIÓN! ¡LEA CADA PASO CUIDADOSAMENTE!

Para iniciar sesión en MySQL y asegurarla, necesitaremos la contraseña actual para el usuario root. Si acaba de instalar MySQL y no ha establecido la contraseña de root aún, la contraseña estará en blanco, por lo que solo debe presionar enter aquí.

Ingrese la contraseña actual para root (presione enter si no hay): OK, contraseña utilizada con éxito, continuando…

Establecer la contraseña de root asegura que nadie pueda iniciar sesión en el usuario root de MySQL sin la autorización adecuada.

¿Establecer contraseña de root? [Y/n] <– ENTER Nueva contraseña: <– yourrootsqlpassword Reingrese nueva contraseña: <– yourrootsqlpassword ¡Contraseña actualizada con éxito! Recargando tablas de privilegios.. … ¡Éxito!

Por defecto, una instalación de MySQL tiene un usuario anónimo, permitiendo que cualquiera inicie sesión en MySQL sin tener que tener una cuenta de usuario creada para ellos. Esto está destinado solo para pruebas, y para hacer que la instalación sea un poco más fluida. Debe eliminarlos antes de pasar a un entorno de producción.

¿Eliminar usuarios anónimos? [Y/n] <– ENTER … ¡Éxito!

Normalmente, solo se debe permitir que root se conecte desde ‘localhost’. Esto asegura que alguien no pueda adivinar la contraseña de root desde la red.

¿Deshabilitar el inicio de sesión remoto de root? [Y/n] <– ENTER … ¡Éxito!

Por defecto, MySQL viene con una base de datos llamada ‘test’ a la que cualquiera puede acceder. Esto también está destinado solo para pruebas, y debe ser eliminado antes de pasar a un entorno de producción.

¿Eliminar la base de datos de prueba y el acceso a ella? [Y/n] <– ENTER

  • Eliminando base de datos de prueba… … ¡Éxito!
  • Eliminando privilegios en la base de datos de prueba… … ¡Éxito!

Recargar las tablas de privilegios asegurará que todos los cambios realizados hasta ahora surtan efecto de inmediato.

¿Recargar tablas de privilegios ahora? [Y/n] <– ENTER … ¡Éxito!

Limpiando…

¡Todo listo! Si ha completado todos los pasos anteriores, su instalación de MySQL ahora debería estar segura.

¡Gracias por usar MySQL!

[root@server1 tmp]#

Ahora configuramos phpMyAdmin. Cambiamos la configuración de Apache para que phpMyAdmin permita conexiones no solo desde localhost (comentando la estrofa ):

vi /etc/httpd/conf.d/phpmyadmin.conf

CentOS es inconsistente en los nombres de archivo que utilizan sus paquetes, dependiendo del orden de su repositorio, puede ser que el archivo de configuración de phpmyadmin esté en camelcase. Así que si el comando vi anterior resulta en un archivo nuevo vacío, use este comando en su lugar:

vi /etc/httpd/conf.d/phpMyAdmin.conf

| # # Aplicación web para gestionar MySQL # # # Order Deny,Allow # Deny from all # Allow from 127.0.0.1 # Alias /phpmyadmin /usr/share/phpmyadmin Alias /phpMyAdmin /usr/share/phpmyadmin Alias /mysqladmin /usr/share/phpmyadmin |

A continuación, cambiamos la autenticación en phpMyAdmin de cookie a http:

vi /usr/share/phpmyadmin/config.inc.php

| [...] /* Tipo de autenticación */ $cfg['Servers'][$i]['auth_type'] = 'http'; [...] |

Luego creamos los enlaces de inicio del sistema para Apache y lo iniciamos:

chkconfig –levels 235 httpd on
/etc/init.d/httpd start

Ahora puede dirigir su navegador a http://server1.example.com/phpmyadmin/ o http://192.168.0.100/phpmyadmin/ e iniciar sesión con el nombre de usuario root y su nueva contraseña de root de MySQL.

Si recibe un mensaje de error como este:

[root@server1 tmp]# /etc/init.d/httpd start
Iniciando httpd: httpd: apr_sockaddr_info_get() falló para server1.example.com
httpd: No se pudo determinar de manera confiable el nombre de dominio completamente calificado del servidor, usando 127.0.0.1 para ServerName

entonces su nombre de host no es resolvible en dns o aún no está configurado en el archivo /etc/hosts. Para solucionar este problema, ejecute:

echo “192.168.1.100 server1.example.com server1” >> /etc/hosts

reemplazar “server1.example.com” en el comando anterior con su nombre de host completo y “server1” con la parte secundaria del nombre de host.

14 Instalar Amavisd-new, SpamAssassin y ClamAV

Para instalar amavisd-new, spamassassin y clamav, ejecute el siguiente comando:

yum -y install amavisd-new spamassassin clamav clamd unzip bzip2 unrar perl-DBD-mysql

Luego iniciamos freshclam, amavisd y clamd.amavisd:

sa-update
chkconfig –levels 235 amavisd on
chkconfig –del clamd
chkconfig –levels 235 clamd.amavisd on
/usr/bin/freshclam
/etc/init.d/amavisd start
/etc/init.d/clamd.amavisd start

15 Instalando Apache2 Con mod_php, mod_fcgi/PHP5, Y suPHP

ISPConfig 3 le permite usar mod_php, mod_fcgi/PHP5, cgi/PHP5 y suPHP en una base por sitio web.

Podemos instalar Apache2 con mod_php5, mod_fcgid y PHP5 de la siguiente manera:

yum -y install php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-pecl-apc php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel mod_fcgid php-cli httpd-devel

A continuación, abrimos /etc/php.ini…

vi /etc/php.ini

… y cambiamos el informe de errores (para que las notificaciones ya no se muestren) y descomentamos cgi.fix_pathinfo=1:

| [...] ;error_reporting = E_ALL & ~E_DEPRECATED error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED [...] ; cgi.fix_pathinfo proporciona soporte *real* para PATH_INFO/PATH_TRANSLATED para CGI. El comportamiento anterior de PHP era establecer PATH_TRANSLATED en SCRIPT_FILENAME, y no entender qué es PATH_INFO. Para más información sobre PATH_INFO, consulte las especificaciones de cgi. Establecer esto en 1 hará que PHP CGI corrija sus rutas para ajustarse a la especificación. Un ajuste de cero hace que PHP se comporte como antes. El valor predeterminado es 1. Debe corregir sus scripts para usar SCRIPT_FILENAME en lugar de PATH_TRANSLATED. ; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo cgi.fix_pathinfo=1 [...] |

A continuación, instalamos suPHP (hay un paquete mod_suphp disponible en los repositorios, pero desafortunadamente no es compatible con ISPConfig, por lo tanto, tenemos que construir suPHP nosotros mismos):

cd /tmp
wget http://suphp.org/download/suphp-0.7.1.tar.gz
tar xvfz suphp-0.7.1.tar.gz
cd suphp-0.7.1/
./configure –prefix=/usr –sysconfdir=/etc –with-apr=/usr/bin/apr-1-config –with-apxs=/usr/sbin/apxs –with-apache-user=apache –with-setid-mode=owner –with-php=/usr/bin/php-cgi –with-logfile=/var/log/httpd/suphp_log –enable-SUPHP_USE_USERGROUP=yes
make
make install

Luego agregamos el módulo suPHP a nuestra configuración de Apache…

vi /etc/httpd/conf.d/suphp.conf

| LoadModule suphp_module modules/mod_suphp.so |

… y creamos el archivo /etc/suphp.conf de la siguiente manera:

vi /etc/suphp.conf

| [global] ;Ruta al archivo de registro logfile=/var/log/httpd/suphp.log ;Nivel de registro loglevel=info ;Usuario bajo el cual se ejecuta Apache webserver_user=apache ;Ruta donde deben estar todos los scripts docroot=/ ;Ruta a chroot() antes de ejecutar el script ;chroot=/mychroot ; Opciones de seguridad allow_file_group_writeable=true allow_file_others_writeable=false allow_directory_group_writeable=true allow_directory_others_writeable=false ;Verificar si el script está dentro de DOCUMENT_ROOT check_vhost_docroot=true ;Enviar mensajes de error menores al navegador errors_to_browser=false ;Variable de entorno PATH env_path=/bin:/usr/bin ;Umask a establecer, especificar en notación octal umask=0077 ; UID mínimo min_uid=100 ; GID mínimo min_gid=100 [handlers] ;Controlador para scripts php x-httpd-suphp="php:/usr/bin/php-cgi" ;Controlador para scripts CGI x-suphp-cgi="execute:!self" |

Finalmente reiniciamos Apache:

/etc/init.d/httpd restart

15.1 Ruby

A partir de la versión 3.0.3, ISPConfig 3 tiene soporte integrado para Ruby. En lugar de usar CGI/FastCGI, ISPConfig depende de que mod_ruby esté disponible en el Apache del servidor.

Para CentOS 6.4, no hay un paquete mod_ruby disponible, por lo que debemos compilarlo nosotros mismos. Primero instalamos algunos requisitos previos:

yum -y install httpd-devel ruby ruby-devel

A continuación, descargamos e instalamos mod_ruby de la siguiente manera:

cd /tmp
wget http://fossies.org/unix/www/apache_httpd_modules/mod_ruby-1.3.0.tar.gz
tar zxvf mod_ruby-1.3.0.tar.gz
cd mod_ruby-1.3.0/
./configure.rb –with-apr-includes=/usr/include/apr-1
make
make install

Finalmente, debemos agregar el módulo mod_ruby a la configuración de Apache, por lo que creamos el archivo /etc/httpd/conf.d/ruby.conf…

vi /etc/httpd/conf.d/ruby.conf

| LoadModule ruby_module modules/mod_ruby.so RubyAddPath /1.8 |

… y reiniciamos Apache:

/etc/init.d/httpd restart

(Si omite la directiva RubyAddPath /1.8, verá errores como los siguientes en el registro de errores de Apache cuando llame a archivos Ruby:

[Thu May 26 02:05:05 2011] [error] mod_ruby: ruby:0:in `require’: no such file to load – apache/ruby-run (LoadError)
[Thu May 26 02:05:05 2011] [error] mod_ruby: failed to require apache/ruby-run
[Thu May 26 02:05:05 2011] [error] mod_ruby: error in ruby ) #### 15.2 Python Para instalar mod_python, simplemente ejecutamos… yum -y install mod_python … y reiniciamos Apache después: /etc/init.d/httpd restart #### 15.3 WebDAV WebDAV ya debería estar habilitado, pero para verificar esto, abra /etc/httpd/conf/httpd.conf y asegúrese de que los siguientes tres módulos estén activos: vi /etc/httpd/conf/httpd.conf | [...] LoadModule auth_digest_module modules/mod_auth_digest.so [...] LoadModule dav_module modules/mod_dav.so [...] LoadModule dav_fs_module modules/mod_dav_fs.so [...] | Si tiene que modificar /etc/httpd/conf/httpd.conf, no olvide reiniciar Apache después: /etc/init.d/httpd restart #### 15.4 Versiones Adicionales de PHP A partir de ISPConfig 3.0.5, es posible tener múltiples versiones de PHP en un servidor (seleccionables a través de ISPConfig) que pueden ejecutarse a través de FastCGI y PHP-FPM. El procedimiento para construir versiones adicionales de PHP en CentOS se describe en este tutorial: Cómo Usar Múltiples Versiones de PHP (PHP-FPM & FastCGI) Con ISPConfig 3 (CentOS 6.3) ### 16 Instalar PureFTPd PureFTPd se puede instalar con el siguiente comando: yum -y install pure-ftpd Luego, cree los enlaces de inicio del sistema y inicie PureFTPd: chkconfig –levels 235 pure-ftpd on
/etc/init.d/pure-ftpd start Ahora configuramos PureFTPd para permitir sesiones FTP y TLS. FTP es un protocolo muy inseguro porque todas las contraseñas y todos los datos se transfieren en texto claro. Al usar TLS, toda la comunicación puede ser cifrada, haciendo que FTP sea mucho más seguro. OpenSSL es necesario para TLS; para instalar OpenSSL, simplemente ejecutamos: yum install openssl Abra /etc/pure-ftpd/pure-ftpd.conf… vi /etc/pure-ftpd/pure-ftpd.conf Si desea permitir sesiones FTP y TLS, establezca TLS en 1: | [...] # Esta opción puede aceptar tres valores : # 0 : deshabilitar la capa de cifrado SSL/TLS (predeterminado). # 1 : aceptar tanto sesiones tradicionales como cifradas. # 2 : rechazar conexiones que no utilicen mecanismos de seguridad SSL/TLS, # incluidas las sesiones anónimas. # No descomente esto a ciegas. Asegúrese de que : # 1) Su servidor ha sido compilado con soporte SSL/TLS (--with-tls), # 2) Un certificado válido está en su lugar, # 3) Solo los clientes compatibles iniciarán sesión. TLS 1 [...] | Para poder usar TLS, debemos crear un certificado SSL. Lo creo en /etc/ssl/private/, por lo que primero creo ese directorio: mkdir -p /etc/ssl/private/ Después, podemos generar el certificado SSL de la siguiente manera: openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem Nombre del país (código de 2 letras) [XX]: <– Ingrese el nombre de su país (por ejemplo, “DE”).
Nombre del estado o provincia (nombre completo) []: <– Ingrese el nombre de su estado o provincia.
Nombre de la localidad (por ejemplo, ciudad) [Ciudad Predeterminada]: <– Ingrese su ciudad.
Nombre de la organización (por ejemplo, empresa) [Compañía Predeterminada Ltd]: <– Ingrese el nombre de su organización (por ejemplo, el nombre de su empresa).
Nombre de la unidad organizativa (por ejemplo, sección) []: <– Ingrese el nombre de su unidad organizativa (por ejemplo, “Departamento de TI”).
Nombre común (por ejemplo, su nombre o el nombre de host de su servidor) []: <– Ingrese el Nombre de Dominio Totalmente Calificado del sistema (por ejemplo, “server1.example.com”).
Dirección de correo electrónico []: <– Ingrese su dirección de correo electrónico. Cambie los permisos del certificado SSL: chmod 600 /etc/ssl/private/pure-ftpd.pem Finalmente reinicie PureFTPd: /etc/init.d/pure-ftpd restart Eso es todo. Ahora puede intentar conectarse usando su cliente FTP; sin embargo, debe configurar su cliente FTP para usar TLS.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.