Servidor Perfecto · 13 min read · Oct 30, 2025
El Servidor Perfecto CentOS 7.6 con Apache, PHP 7.2, Postfix, Dovecot, Pure-FTPD, BIND e ISPConfig 3.1 - Página 2

7 Instalar Dovecot
Dovecot se puede instalar de la siguiente manera:
yum -y install dovecot dovecot-mysql dovecot-pigeonhole
Crea un archivo vacío dovecot-sql.conf y crea enlaces simbólicos:
touch /etc/dovecot/dovecot-sql.conf ln -s /etc/dovecot/dovecot-sql.conf /etc/dovecot-sql.conf ln -s /etc/dovecot/dovecot.conf /etc/dovecot.conf
Ahora crea los enlaces de inicio del sistema y comienza Dovecot:
systemctl enable dovecot systemctl start dovecot
8 Instalar Postfix
Postfix se puede instalar de la siguiente manera:
yum -y install postfix
Luego apaga Sendmail y comienza Postfix y MariaDB (MySQL):
systemctl enable mariadb.service systemctl start mariadb.service
systemctl stop sendmail.service systemctl disable sendmail.service systemctl enable postfix.service systemctl restart postfix.service
Deshabilitamos sendmail para asegurarnos de que no se inicie en caso de que esté instalado en su servidor. Por lo tanto, el mensaje de error “Failed to issue method call: Unit sendmail.service not loaded.” se puede ignorar.
9 Instalar Getmail
Getmail se puede instalar de la siguiente manera:
yum -y install getmail
10 Establecer Contraseñas de MySQL y Configurar phpMyAdmin
Establezca contraseñas para la cuenta raíz 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 MariaDB EN USO DE PRODUCCIÓN! ¡LEA CADA PASO CUIDADOSAMENTE!
Para iniciar sesión en MariaDB y asegurarla, necesitaremos la contraseña actual para el usuario root. Si acaba de instalar MariaDB, 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 para ninguno): OK, se utilizó la contraseña con éxito, continuando...
Establecer la contraseña de root asegura que nadie pueda iniciar sesión en el usuario root de MariaDB sin la autorización adecuada. ¿Establecer contraseña de root? [Y/n] <-- ENTER Nueva contraseña: <-- sucontraseñaderootsql Reingrese nueva contraseña: <-- sucontraseñaderootsql ¡Contraseña actualizada con éxito! Recargando tablas de privilegios.. ... ¡Éxito! Por defecto, una instalación de MariaDB tiene un usuario anónimo, lo que permite a cualquiera iniciar sesión en MariaDB 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, MariaDB 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 MariaDB ahora debería estar segura. ¡Gracias por usar MariaDB! [root@server1 tmp]#
Ahora configuramos phpMyAdmin. Cambiamos la configuración de Apache para que phpMyAdmin permita conexiones no solo desde localhost (comentando las líneas marcadas en rojo):
nano /etc/httpd/conf.d/phpMyAdmin.conf
# phpMyAdmin - Navegador MySQL basado en web escrito en php # # Permite solo localhost por defecto # # Pero permitir phpMyAdmin a cualquiera que no sea localhost debe considerarse # peligroso a menos que esté debidamente asegurado por SSL Alias /phpMyAdmin /usr/share/phpMyAdmin Alias /phpmyadmin /usr/share/phpMyAdmin
A continuación, cambiamos la autenticación en phpMyAdmin de cookie a http:
nano /etc/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:
systemctl enable httpd.service systemctl restart httpd.service
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 MySQL.
11 Instalar Amavisd-new, SpamAssassin, ClamAV y Postgrey
Para instalar amavisd-new, SpamAssassin y ClamAV, ejecute el siguiente comando:
yum -y install amavisd-new spamassassin clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd unzip bzip2 perl-DBD-mysql postgrey re2c
Luego iniciamos freshclam, amavisd y clamd.amavisd:
sa-update freshclam systemctl enable amavisd.service systemctl start amavisd.service systemctl start [email protected] systemctl enable postgrey.service systemctl start postgrey.service
12 Instalación de Apache con mod_php, mod_fcgi/PHP, PHP-FPM
ISPConfig 3 le permite usar mod_php, mod_fcgi/PHP, cgi/PHP y PHP-FPM en una base por sitio web.
Podemos instalar Apache2 con mod_php, mod_fcgid y PHP 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 php-fpm php-intl php-imagick php-pspell wget
A continuación, abrimos /etc/php.ini…
nano /etc/php.ini
… y cambiamos el informe de errores (para que no se muestren más avisos), establecemos la zona horaria y descomentamos cgi.fix_pathinfo=1:
[...] ;error_reporting = E_ALL & ~E_DEPRECATED error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT [...] ; cgi.fix_pathinfo proporciona soporte *real* para PATH_INFO/PATH_TRANSLATED para CGI. PHP's ; el comportamiento anterior era establecer PATH_TRANSLATED en SCRIPT_FILENAME, y no entender ; qué es PATH_INFO. Para obtener más información sobre PAppp.tldTH_INFO, consulte las especificaciones cgi. Establecer ; esto en 1 hará que PHP CGI corrija sus rutas para cumplir con 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 [...] date.timezone = 'Europe/Berlin' [...]
Habilite httpd y PHP-FPM para que se inicien al arrancar y comience el servicio PHP-FPM.
systemctl start php-fpm.service systemctl enable php-fpm.service systemctl enable httpd.service
Finalmente, reiniciamos Apache:
systemctl restart httpd.service
Ahora agregaremos soporte para Let’s encrypt.
mkdir /opt/certbot cd /opt/certbot wget https://dl.eff.org/certbot-auto chmod a+x ./certbot-auto
Ahora ejecute el comando certbot-auto que descargará e instalará el software y sus dependencias.
./certbot-auto
El comando le dirá que “no se encontraron nombres en sus archivos de configuración” y pregunta si debe continuar, elija “c” para cancelar aquí ya que los certificados serán creados por ispconfig.

13 Instalación de mod_python
El módulo de Apache mod_python no está disponible como paquete RPM, por lo tanto, lo compilaremos desde la fuente. El primer paso es instalar los archivos de desarrollo de python y descargar la versión actual de mod_python como archivo .tar.gz
yum -y install python-devel
cd /usr/local/src/ wget http://dist.modpython.org/dist/mod_python-3.5.0.tgz tar xfz mod_python-3.5.0.tgz cd mod_python-3.5.0
y luego configurar y compilar el módulo.
./configure make
Hay un error en el módulo compilado que hará que la instalación falle con el error “ version = “fatal: Not a git repository (or any of the parent directories): .git “. Para solucionarlo, ejecute este comando sed (¡el comando es una línea!).
sed -e 's/(git describe --always)/(git describe --always 2>\/dev\/null)/g' -e 's/`git describe --always`/`git describe --always 2>\/dev\/null`/g' -i $( find . -type f -name Makefile\* -o -name version.sh )
Luego instale el módulo con este comando.
make install y habilite el módulo en Apache:
echo 'LoadModule python_module modules/mod_python.so' > /etc/httpd/conf.modules.d/10-python.conf systemctl restart httpd.service
14 Instalar PureFTPd
PureFTPd se puede instalar con el siguiente comando:
yum -y install pure-ftpd
Luego crea los enlaces de inicio del sistema y comienza PureFTPd:
systemctl enable pure-ftpd.service systemctl start pure-ftpd.service
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…
nano /etc/pure-ftpd/pure-ftpd.conf
Si desea permitir sesiones FTP y TLS, establezca TLS en 1 eliminando el # frente a la línea TLS. Se recomienda encarecidamente habilitar TLS.
[...] # 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 usar TLS, debemos crear un certificado SSL. Lo creo en /etc/ssl/private/, por lo tanto, 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) [Empresa 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 Completo del sistema (por ejemplo, “server1.example.com”).
Dirección de correo electrónico []: <– Ingrese su dirección de correo electrónico.
Cambia los permisos del certificado SSL:
chmod 600 /etc/ssl/private/pure-ftpd.pem
Crea un archivo DHParam:
openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 2048
Finalmente, reinicia PureFTPd:
systemctl restart pure-ftpd.service
Eso es todo. Ahora puede intentar conectarse usando su cliente FTP; sin embargo, debe configurar su cliente FTP para usar TLS.
15 Instalar BIND
Podemos instalar BIND de la siguiente manera:
yum -y install bind bind-utils haveged
Haga una copia de seguridad del archivo existente /etc/named.conf y cree uno nuevo de la siguiente manera:
cp /etc/named.conf /etc/named.conf_bak cat /dev/null > /etc/named.conf nano /etc/named.conf
// named.conf\
//\
// Proporcionado por el paquete bind de Red Hat para configurar el servidor DNS ISC BIND named(8)\
// como un servidor de nombres solo en caché (como un resolvedor DNS localhost solamente).\
//\
// Consulte /usr/share/doc/bind*/sample/ para archivos de configuración de ejemplo named.\
//\
options {\
listen-on port 53 { any; };\
listen-on-v6 port 53 { any; };\
directory "/var/named";\
dump-file "/var/named/data/cache_dump.db";\
statistics-file "/var/named/data/named_stats.txt";\
memstatistics-file "/var/named/data/named_mem_stats.txt";\
allow-query { any; };\
allow-recursion {"none";};\
recursion no;\
};\
logging {\
channel default_debug {\
file "data/named.run";\
severity dynamic;\
};\
};\
zone "." IN {\
type hint;\
file "named.ca";\
};\
include "/etc/named.conf.local";\Cree el archivo /etc/named.conf.local que se incluye al final de /etc/named.conf (/etc/named.conf.local se llenará más tarde por ISPConfig si crea zonas DNS en ISPConfig):
touch /etc/named.conf.local
Luego creamos los enlaces de inicio y comenzamos BIND:
systemctl enable named.service systemctl start named.service systemctl enable haveged.service systemctl start haveged.service
16 Instalar Webalizer y AWStats
AWStats se puede instalar de la siguiente manera:
yum -y install webalizer awstats perl-DateTime-Format-HTTP perl-DateTime-Format-Builder
Edite el archivo /etc/httpd/conf.d/awstats.conf:
nano /etc/httpd/conf.d/awstats.conf
y cambie la línea:
Require local
a:
Require all granted
Y reinicie apache:
systemctl restart httpd.service
17 Instalar Jailkit
Jailkit se utiliza para chroot usuarios SSH y cronjobs. Se puede instalar de la siguiente manera:
cd /tmp wget http://olivier.sessink.nl/jailkit/jailkit-2.20.tar.gz tar xvfz jailkit-2.20.tar.gz cd jailkit-2.20 ./configure make make install cd .. rm -rf jailkit-2.20*
18 Instalar Fail2Ban
Esto es opcional pero recomendado, porque el monitor de ISPConfig intenta mostrar el registro.
yum -y install iptables-services fail2ban fail2ban-systemd systemctl stop firewalld.service systemctl mask firewalld.service systemctl disable firewalld.service systemctl stop firewalld.service
A continuación, creamos el archivo /etc/fail2ban/jail.local y habilitamos la supervisión para ssh, correo electrónico y servicio ftp.
nano /etc/fail2ban/jail.local
Agregue el siguiente contenido al archivo jail.local:
[sshd] enabled = true action = iptables[name=sshd, port=ssh, protocol=tcp] [pure-ftpd] enabled = true action = iptables[name=FTP, port=ftp, protocol=tcp] maxretry = 3 [dovecot] enabled = true action = iptables-multiport[name=dovecot, port="pop3,pop3s,imap,imaps", protocol=tcp] maxretry = 5 [postfix-sasl] enabled = true action = iptables-multiport[name=postfix-sasl, port="smtp,smtps,submission", protocol=tcp] maxretry = 3
Luego crea los enlaces de inicio del sistema para fail2ban y lo inicia:
systemctl enable fail2ban.service systemctl start fail2ban.service
19 Instalar rkhunter
rkhunter se puede instalar de la siguiente manera:
yum -y install rkhunter
20 Instalar Mailman
Si desea gestionar listas de correo con Mailman en su servidor, entonces instale mailman ahora. Mailman es compatible con ISPConfig, por lo que podrá crear nuevas listas de correo a través de ISPConfig más tarde.
yum -y install mailman
Antes de que podamos iniciar Mailman, se debe crear una primera lista de correo llamada mailman:
touch /var/lib/mailman/data/aliases postmap /var/lib/mailman/data/aliases /usr/lib/mailman/bin/newlist mailman ln -s /usr/lib/mailman/mail/mailman /usr/bin/mailman
[root@server1 tmp]# /usr/lib/mailman/bin/newlist mailman
Ingrese el correo electrónico de la persona que ejecuta la lista: <– dirección de correo electrónico del administrador, por ejemplo, [email protected]
Contraseña inicial de mailman: <– contraseña del administrador para la lista de mailman
Para terminar de crear su lista de correo, debe editar su archivo /etc/aliases (o equivalente) agregando las siguientes líneas, y posiblemente ejecutando el programa newaliases:
lista de correo mailman
mailman: “|/usr/lib/mailman/mail/mailman post mailman”
mailman-admin: “|/usr/lib/mailman/mail/mailman admin mailman”
mailman-bounces: “|/usr/lib/mailman/mail/mailman bounces mailman”
mailman-confirm: “|/usr/lib/mailman/mail/mailman confirm mailman”
mailman-join: “|/usr/lib/mailman/mail/mailman join mailman”
mailman-leave: “|/usr/lib/mailman/mail/mailman leave mailman”
mailman-owner: “|/usr/lib/mailman/mail/mailman owner mailman”
mailman-request: “|/usr/lib/mailman/mail/mailman request mailman”
mailman-subscribe: “|/usr/lib/mailman/mail/mailman subscribe mailman”
mailman-unsubscribe: “|/usr/lib/mailman/mail/mailman unsubscribe mailman”
Presione enter para notificar al propietario de mailman… <– ENTER
[root@server1 tmp]#
Abra /etc/aliases después…
nano /etc/aliases
… y agregue las siguientes líneas:
[...] mailman: "|/usr/lib/mailman/mail/mailman post mailman" mailman-admin: "|/usr/lib/mailman/mail/mailman admin mailman" mailman-bounces: "|/usr/lib/mailman/mail/mailman bounces mailman" mailman-confirm: "|/usr/lib/mailman/mail/mailman confirm mailman" mailman-join: "|/usr/lib/mailman/mail/mailman join mailman" mailman-leave: "|/usr/lib/mailman/mail/mailman leave mailman" mailman-owner: "|/usr/lib/mailman/mail/mailman owner mailman" mailman-request: "|/usr/lib/mailman/mail/mailman request mailman" mailman-subscribe: "|/usr/lib/mailman/mail/mailman subscribe mailman" mailman-unsubscribe: "|/usr/lib/mailman/mail/mailman unsubscribe mailman"
Ejecute
newaliases
a continuación y reinicie Postfix:
systemctl restart postfix.service
Ahora abra el archivo de configuración de Apache de Mailman /etc/httpd/conf.d/mailman.conf…
nano /etc/httpd/conf.d/mailman.conf
… y agregue la línea ScriptAlias /cgi-bin/mailman/ /usr/lib/mailman/cgi-bin/. Comente Alias /pipermail/ /var/lib/mailman/archives/public/ y agregue la línea Alias /pipermail /var/lib/mailman/archives/public/:
# # configuraciones de httpd para usar con mailman. # ScriptAlias /mailman/ /usr/lib/mailman/cgi-bin/ ScriptAlias /cgi-bin/mailman/ /usr/lib/mailman/cgi-bin/
Reinicie Apache:
systemctl restart httpd.service
Cree los enlaces de inicio del sistema para Mailman y comience:
systemctl enable mailman.service systemctl start mailman.service
Después de haber instalado ISPConfig 3, puede acceder a Mailman de la siguiente manera:
Puede usar el alias /cgi-bin/mailman para todos los vhosts de Apache (¡tenga en cuenta que suExec y CGI deben estar deshabilitados para todos los vhosts desde los que desea acceder a Mailman!), lo que significa que puede acceder a la interfaz de administración de Mailman para una lista en http://
Bajo http://
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.