Servidor Debian · 7 min read · Nov 06, 2025

El Servidor Perfecto - Debian 9 (Stretch) con Apache, BIND, Dovecot, PureFTPD e ISPConfig 3.1

Este tutorial muestra cómo preparar un servidor Debian 9 (con Apache2, BIND, Dovecot) para la instalación de ISPConfig 3.1, y cómo instalar ISPConfig. El panel de control de alojamiento web ISPConfig 3 te permite configurar los siguientes servicios a través de un navegador web: servidor web Apache o nginx, servidor de correo Postfix, servidor IMAP/POP3 Courier o Dovecot, MySQL, servidor de nombres BIND o MyDNS, PureFTPd, SpamAssassin, ClamAV, y muchos más. Esta configuración cubre Apache (en lugar de nginx), BIND y Dovecot.

1 Nota Preliminar

En este tutorial, usaré el nombre de host server1.example.com con la dirección IP 192.168.1.100 y la puerta de enlace 192.168.1.1. Estas configuraciones pueden diferir para ti, así que debes reemplazarlas donde sea apropiado. Antes de continuar, necesitas tener una instalación mínima de Debian 9. Esto podría ser una imagen mínima de Debian de tu proveedor de alojamiento o puedes usar el tutorial de Servidor Debian Mínimo para configurar el sistema base.

2 Instalar el servidor SSH (Opcional)

Si no instalaste el servidor OpenSSH durante la instalación del sistema, puedes hacerlo ahora:

apt-get install ssh openssh-server

A partir de ahora, puedes usar un cliente SSH como PuTTY y conectarte desde tu estación de trabajo a tu servidor Debian 9 y seguir los pasos restantes de este tutorial.

3 Instalar un editor de texto de shell (Opcional)

Usaremos el editor de texto nano en este tutorial. Algunos usuarios prefieren el clásico editor vi, por lo tanto, instalaremos ambos editores aquí. El programa vi por defecto tiene un comportamiento extraño en Debian y Ubuntu; para solucionar esto, instalamos vim-nox:

apt-get install nano vim-nox

Si vi es tu editor favorito, entonces reemplaza nano con vi en los siguientes comandos para editar archivos.

4 Configurar el Nombre de Host

El nombre de host de tu servidor debe ser un subdominio como “server1.example.com”. No uses un nombre de dominio sin la parte del subdominio como “example.com” como nombre de host, ya que esto causará problemas más adelante con tu configuración de correo. Primero, debes verificar el nombre de host en /etc/hosts y cambiarlo cuando sea necesario. La línea debe ser: “Dirección IP - espacio - nombre de host completo incl. dominio - espacio - parte del subdominio”. Para nuestro nombre de host server1.example.com, el archivo debe verse así:

nano /etc/hosts
127.0.0.1       localhost.localdomain   localhost
192.168.1.100   server1.example.com     server1

# Las siguientes líneas son deseables para hosts capaces de IPv6
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Luego edita el archivo /etc/hostname:

nano /etc/hostname

Deberá contener solo la parte del subdominio, en nuestro caso:

server1

Finalmente, reinicia el servidor para aplicar el cambio:

reboot

Inicia sesión nuevamente y verifica si el nombre de host es correcto ahora con estos comandos:

hostname  
hostname -f

La salida debe ser como esta:

root@server1:/tmp# hostname  
server1  
root@server1:/tmp# hostname -f  
server1.example.com

5 Actualiza tu Instalación de Debian

Primero, asegúrate de que tu /etc/apt/sources.list contenga el repositorio stretch/updates (esto asegura que siempre obtengas las actualizaciones de seguridad más recientes), y que los repositorios contrib y non-free estén habilitados ya que algunos paquetes requeridos no están en el repositorio principal.

nano /etc/apt/sources.list
deb http://ftp.us.debian.org/debian/ stretch main contrib non-free  
deb-src http://ftp.us.debian.org/debian/ stretch main contrib non-free  
  
deb http://security.debian.org/debian-security stretch/updates main contrib non-free  
deb-src http://security.debian.org/debian-security stretch/updates main contrib non-free

Ejecuta:

apt-get update

Para actualizar la base de datos de paquetes apt

apt-get upgrade

y para instalar las últimas actualizaciones (si las hay).

6 Cambiar la Shell por Defecto

/bin/sh es un enlace simbólico a /bin/dash, sin embargo, necesitamos /bin/bash, no /bin/dash. Por lo tanto, hacemos esto:

dpkg-reconfigure dash

¿Usar dash como la shell del sistema por defecto (/bin/sh)? <- no

Si no haces esto, la instalación de ISPConfig fallará.

7 Sincronizar el Reloj del Sistema

Es una buena idea sincronizar el reloj del sistema con un servidor NTP ( n etwork t ime p rotocol) a través de Internet. Simplemente ejecuta

apt-get install ntp

y la hora de tu sistema siempre estará sincronizada.

8 Instalar Postfix, Dovecot, MySQL, rkhunter y Binutils

Podemos instalar Postfix, Dovecot, MySQL, rkhunter y Binutils con un solo comando:

apt-get install postfix postfix-mysql postfix-doc mariadb-client mariadb-server openssl getmail4 rkhunter binutils dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-sieve dovecot-lmtpd sudo

Cuando prefieras MySQL sobre MariaDB, reemplaza los paquetes “mariadb-client mariadb-server” en el comando anterior con “mysql-client mysql-server”.

Se te harán las siguientes preguntas:

Tipo general de configuración de correo: <– Internet Site
Nombre del correo del sistema: <– server1.example.com

Para asegurar la instalación de MariaDB / MySQL y deshabilitar la base de datos de prueba, ejecuta este comando:

mysql_secure_installation

Responde a las preguntas de la siguiente manera:

¿Cambiar la contraseña de root? [Y/n] <-- y  
Nueva contraseña: <-- Ingresa una nueva contraseña de root de MySQL  
Reingresa la nueva contraseña: <-- Repite la contraseña de root de MySQL  
¿Eliminar usuarios anónimos? [Y/n] <-- y  
¿Deshabilitar el inicio de sesión remoto de root? [Y/n] <-- y  
¿Eliminar la base de datos de prueba y el acceso a ella? [Y/n] <-- y  
¿Recargar las tablas de privilegios ahora? [Y/n] <-- y

A continuación, abre los puertos TLS/SSL y de envío en Postfix:

nano /etc/postfix/master.cf

Descomenta las secciones de envío y smtps como sigue y agrega líneas donde sea necesario para que esta sección del archivo master.cf se vea exactamente como la de abajo.

[...]
submission inet n - - - - smtpd  
 -o syslog_name=postfix/submission  
 -o smtpd_tls_security_level=encrypt  
 -o smtpd_sasl_auth_enable=yes  
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject  
# -o smtpd_reject_unlisted_recipient=no  
# -o smtpd_client_restrictions=$mua_client_restrictions  
# -o smtpd_helo_restrictions=$mua_helo_restrictions  
# -o smtpd_sender_restrictions=$mua_sender_restrictions  
# -o smtpd_recipient_restrictions=  
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject  
# -o milter_macro_daemon_name=ORIGINATING  
smtps inet n - - - - smtpd  
 -o syslog_name=postfix/smtps  
 -o smtpd_tls_wrappermode=yes  
 -o smtpd_sasl_auth_enable=yes  
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject  
# -o smtpd_reject_unlisted_recipient=no  
# -o smtpd_client_restrictions=$mua_client_restrictions  
# -o smtpd_helo_restrictions=$mua_helo_restrictions  
# -o smtpd_sender_restrictions=$mua_sender_restrictions  
# -o smtpd_recipient_restrictions=  
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject  
# -o milter_macro_daemon_name=ORIGINATING
[...]

Reinicia Postfix después:

service postfix restart

Queremos que MySQL escuche en todas las interfaces, no solo en localhost. Por lo tanto, editamos /etc/mysql/mariadb.conf.d/50-server.cnf y comentamos la línea bind-address = 127.0.0.1 y agregamos la línea sql-mode=”NO_ENGINE_SUBSTITUTION”:

nano /etc/mysql/mariadb.conf.d/50-server.cnf
[...]
# En lugar de skip-networking, el valor por defecto ahora es escuchar solo en
# localhost, lo cual es más compatible y no es menos seguro.
#bind-address           = 127.0.0.1  
  
sql-mode="NO_ENGINE_SUBSTITUTION"  
  
[...]

Establece el método de autenticación de contraseña en MariaDB a nativo para que podamos usar PHPMyAdmin más tarde para conectarnos como usuario root:

echo "update mysql.user set plugin = 'mysql_native_password' where user='root';" | mysql -u root

Edita el archivo /etc/mysql/debian.cnf y establece la contraseña de root de MYSQL / MariaDB allí dos veces en las filas que comienzan con password.

nano /etc/mysql/debian.cnf

La contraseña de root de MySQL que debe ser agregada se muestra en lectura, en este ejemplo la contraseña es “howtoforge”.

# Generado automáticamente para scripts de Debian. ¡NO TOCAR!  
[client]  
host = localhost  
user = root  
password = howtoforge  
socket = /var/run/mysqld/mysqld.sock  
[mysql_upgrade]  
host = localhost  
user = root  
password = howtoforge  
socket = /var/run/mysqld/mysqld.sock  
basedir = /usr

Para prevenir el error ‘ Error en accept: Demasiados archivos abiertos ‘ estableceremos límites de archivos abiertos más altos para MariaDB ahora.

Abre el archivo /etc/security/limits.conf con un editor:

nano /etc/security/limits.conf

y agrega estas líneas al final del archivo.

mysql soft nofile 65535  
mysql hard nofile 65535

A continuación, crea un nuevo directorio /etc/systemd/system/mysql.service.d/ con el comando mkdir.

mkdir -p /etc/systemd/system/mysql.service.d/

y agrega un nuevo archivo dentro:

nano /etc/systemd/system/mysql.service.d/limits.conf

pega las siguientes líneas en ese archivo:

[Service]  
LimitNOFILE=infinity

Guarda el archivo y cierra el editor nano.

Luego recargamos systemd y reiniciamos MariaDB:

systemctl daemon-reload  
service mysql restart

Ahora verifica que la red esté habilitada. Ejecuta

netstat -tap | grep mysql

La salida debe verse así:

root@server1:/home/administrator# netstat -tap | grep mysql  
tcp6 0 0 [::]:mysql [::]:* LISTEN 17776/mysqld  
root@server1:/home/administrator#

9 Instalar Amavisd-new, SpamAssassin y ClamAV

Para instalar amavisd-new, SpamAssassin y ClamAV, ejecutamos

apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 arj nomarch lzop cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl libdbd-mysql-perl postgrey

La configuración de ISPConfig 3 utiliza amavisd que carga la biblioteca de filtros de SpamAssassin internamente, por lo que podemos detener SpamAssassin para liberar algo de RAM:

service spamassassin stop  
systemctl disable spamassassin

9.1 Instalar el Servidor XMPP Metronome (opcional)

Este paso instala el Servidor XMPP Metronome que proporciona un servidor de chat que es compatible con el protocolo XMPP. Este paso es opcional, si no necesitas un servidor de chat, entonces puedes omitir este paso. Ninguna otra función de ISPConfig depende de este software.

Agrega el repositorio de paquetes Prosody en Debian.

echo "deb http://packages.prosody.im/debian stretch main" > /etc/apt/sources.list.d/metronome.list  
wget http://prosody.im/files/prosody-debian-packages.key -O - | sudo apt-key add -

Actualiza la lista de paquetes:

apt-get update

y instala los paquetes con apt.

apt-get install git lua5.1 liblua5.1-0-dev lua-filesystem libidn11-dev libssl-dev lua-zlib lua-expat lua-event lua-bitop lua-socket lua-sec luarocks luarocks
luarocks install lpc

Agrega un usuario de shell para Metronome.

adduser --no-create-home --disabled-login --gecos 'Metronome' metronome

Descarga Metronome en el directorio /opt y compílalo.

cd /opt; git clone https://github.com/maranda/metronome.git metronome  
cd ./metronome; ./configure --ostype=debian --prefix=/usr  
make  
make install

Metronome ahora ha sido instalado en /opt/metronome.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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