Servidor Perfecto · 13 min read · Nov 02, 2025

El Servidor Perfecto CentOS 7.3 con Apache, 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 dovecot-sql.conf vacío 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 tu 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

Establece contraseñas para la cuenta root de MySQL:

mysql_secure_installation
[root@server1 tmp]# mysql_secure_installation  
  
  NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB  
  SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
Para iniciar sesión en MariaDB y asegurarla, necesitaremos la contraseña  
actual para el usuario root. Si acabas de instalar MariaDB, y  
no has establecido la contraseña root aún, la contraseña estará en blanco,  
por lo que solo debes presionar enter aquí.
Introduce la contraseña actual para root (presiona enter si no hay):  
OK, se utilizó la contraseña correctamente, continuando...
Establecer la contraseña root asegura que nadie pueda iniciar sesión en el usuario root de MariaDB  
sin la autorización adecuada.  

¿Establecer contraseña root? [Y/n] <-- ENTER  
Nueva contraseña: <-- tucontraseñaderootsql  
Reingresa la nueva contraseña: <-- tucontraseñaderootsql  
¡Contraseña actualizada con éxito!  
Recargando tablas de privilegios..  
 ... ¡Éxito!  
  
Por defecto, una instalación de MariaDB tiene un usuario anónimo, permitiendo que cualquiera  
inicie sesión en MariaDB sin tener que tener una cuenta de usuario creada para  
el. Esto está destinado solo para pruebas, y para hacer que la instalación  
sea un poco más fluida. Debes eliminarlos antes de pasar a un  
entorno de producción.  
  
¿Eliminar usuarios anónimos? [Y/n] <-- ENTER  
 ... ¡Éxito!  
  
Normalmente, root solo debería poder conectarse desde 'localhost'.  Esto  
asegura que alguien no pueda adivinar la contraseña 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 la 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 has completado todos los pasos anteriores, tu 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 dos líneas “Require ip” y agregando la nueva línea “Require all granted” en el bloque ):

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


   
     # Apache 2.4
     
     #  Require ip 127.0.0.1
     #  Require ip ::1  
        Require all granted
     
   
   
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   

            

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 puedes dirigir tu navegador a http://server1.example.com/phpmyadmin/ o http://192.168.1.100/phpmyadmin/ e iniciar sesión con el nombre de usuario root y tu nueva contraseña root de MySQL.

11 Instalar Amavisd-new, SpamAssassin, ClamAV y Postgrey

Para instalar amavisd-new, SpamAssassin y ClamAV, ejecuta 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

Edita el archivo de configuración freshclam /etc/freshclam.conf

nano /etc/freshclam.conf

y comenta la línea “Example”

[....]  
# Example  
[....]

Para habilitar actualizaciones automáticas de firmas de ClamAV con freshclam, edita el archivo /etc/sysconfig/freshclam:

nano /etc/sysconfig/freshclam

y pon un # delante de la última línea para que se vea así:

# FRESHCLAM_DELAY=disabled-warn # REMOVE ME

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/PHP5, PHP-FPM

ISPConfig 3 te permite usar mod_php, mod_fcgi/PHP, cgi/PHP y PHP-FPM en una base por sitio web.

Podemos instalar Apache2 con mod_php5, 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 wget

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

nano /etc/php.ini

… y cambiamos la configuración de informes de errores (para que las notificaciones ya no se muestren), 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 más información sobre PATH_INFO, consulta 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. Debes corregir tus 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'
[...]

Habilita httpd y PHP-FPM para que se inicien al arrancar y comienza 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 añadiremos soporte para Let’s encrypt.

mkdir /opt/certbot  
cd /opt/certbot  
wget https://dl.eff.org/certbot-auto  
chmod a+x ./certbot-auto

Ahora ejecuta el comando certboot-auto que descargará e instalará el software y sus dependencias.

./certbot-auto

El comando te dirá que “no se encontraron nombres en tus archivos de configuración” y pregunta si debe continuar, por favor elige “c” para cancelar aquí ya que los certificados serán creados por ispconfig.

13 Instalación de mod_python

El módulo 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 causará que la instalación falle con el error “ version = “fatal: Not a git repository (or any of the parent directories): .git “. Para solucionarlo, ejecuta este comando sed (¡el comando es una sola 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 instala el módulo con este comando.

make install

y habilita 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

Abre /etc/pure-ftpd/pure-ftpd.conf…

nano /etc/pure-ftpd/pure-ftpd.conf

Si deseas permitir sesiones FTP y TLS, establece TLS en 1 eliminando el # delante de 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 descomentes esto a ciegas. Asegúrate de que :
# 1) Tu 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 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]: <– Ingresa el nombre de tu país (por ejemplo, “DE”).
Nombre del estado o provincia (nombre completo) []: <– Ingresa el nombre de tu estado o provincia.
Nombre de la localidad (por ejemplo, ciudad) [Default City]: <– Ingresa tu ciudad.
Nombre de la organización (por ejemplo, empresa) [Default Company Ltd]: <– Ingresa el nombre de tu organización (por ejemplo, el nombre de tu empresa).
Nombre de la unidad organizativa (por ejemplo, sección) []: <– Ingresa el nombre de tu unidad organizativa (por ejemplo, “Departamento de TI”).
Nombre común (por ejemplo, tu nombre o el nombre de host de tu servidor) []: <– Ingresa el Nombre de Dominio Totalmente Calificado del sistema (por ejemplo, “server1.example.com”).
Dirección de correo electrónico []: <– Ingresa tu dirección de correo electrónico.

Cambia los permisos del certificado SSL:

chmod 600 /etc/ssl/private/pure-ftpd.pem

Finalmente, reinicia PureFTPd:

systemctl restart pure-ftpd.service

Eso es todo. Ahora puedes intentar conectarte usando tu cliente FTP; sin embargo, debes configurar tu cliente FTP para usar TLS.

15 Instalar BIND

Podemos instalar BIND de la siguiente manera:

yum -y install bind bind-utils haveged

Haz una copia de seguridad del archivo existente /etc/named.conf y crea 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).\
//\
// Consulta /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";

Crea 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 creas 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

Edita el archivo /etc/httpd/conf.d/awstats.conf:

nano /etc/httpd/conf.d/awstats.conf

y cambia la línea:

Require local

a:

Require all granted

Y reinicia apache:

systemctl restart httpd.service

17 Instalar Jailkit

Jailkit se utiliza para chroot usuarios SSH y cronjobs. Se puede instalar de la siguiente manera (importante: Jailkit debe ser instalado antes de ISPConfig - ¡no se puede instalar después!).

cd /tmp  
wget http://olivier.sessink.nl/jailkit/jailkit-2.19.tar.gz  
tar xvfz jailkit-2.19.tar.gz  
cd jailkit-2.19  
./configure  
make  
make install  
cd ..  
rm -rf jailkit-2.19*

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 monitorización para ssh, correo electrónico y servicio ftp.

nano /etc/fail2ban/jail.local

Agrega 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 comienza:

mkdir /var/run/fail2ban  
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 deseas gestionar listas de correo con Mailman en tu servidor, entonces instala mailman ahora. Mailman es compatible con ISPConfig, por lo que podrás 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
Introduce 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 de administrador para la lista de mailman
Para terminar de crear tu lista de correo, debes editar tu 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”

Presiona enter para notificar al propietario de mailman… <– ENTER

[root@server1 tmp]#

Abre /etc/aliases después…

nano /etc/aliases

… y agrega 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"

Ejecuta

newaliases

despues y reinicia Postfix:

systemctl restart postfix.service

Ahora abre el archivo de configuración de Apache de Mailman /etc/httpd/conf.d/mailman.conf…

nano /etc/httpd/conf.d/mailman.conf

… y agrega la línea ScriptAlias /cgi-bin/mailman/ /usr/lib/mailman/cgi-bin/. Comenta Alias /pipermail/ /var/lib/mailman/archives/public/ y agrega 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/

    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all



#Alias /pipermail/ /var/lib/mailman/archives/public/
Alias /pipermail /var/lib/mailman/archives/public/

    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
    AddDefaultCharset Off


# Descomenta la siguiente línea, para redirigir consultas a /mailman a la
# página listinfo (recomendado).

# RedirectMatch ^/mailman[/]*$ /mailman/listinfo

Reinicia Apache:

systemctl restart httpd.service

Crea los enlaces de inicio del sistema para Mailman y comienza:

systemctl enable mailman.service  
systemctl start mailman.service

Después de haber instalado ISPConfig 3, puedes acceder a Mailman de la siguiente manera:

Puedes usar el alias /cgi-bin/mailman para todos los vhosts de Apache (ten en cuenta que suExec y CGI deben estar deshabilitados para todos los vhosts desde los que deseas acceder a Mailman), lo que significa que puedes acceder a la interfaz de administración de Mailman para una lista en http:///cgi-bin/mailman/admin/, y la página web para los usuarios de una lista de correo se puede encontrar en http:///cgi-bin/mailman/listinfo/.

Bajo http:///pipermail/ puedes encontrar los archivos de la lista de correo.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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