Servidor Perfecto · 10 min read · Jan 25, 2026

El Servidor Perfecto - Debian 8.4 Jessie (Apache2, BIND, Dovecot, ISPConfig 3.1) - Página 2

10 Instalar Apache2, PHP, FCGI, suExec, Pear, phpMyAdmin y mcrypt

Apache2, PHP5, phpMyAdmin, FCGI, suExec, Pear y mcrypt se pueden instalar de la siguiente manera:

apt-get install apache2 apache2.2-common apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-gd php5-mysql php5-imap phpmyadmin php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt php5-imagick imagemagick libruby libapache2-mod-python php5-curl php5-intl php5-memcache php5-memcached php5-pspell php5-recode php5-sqlite php5-tidy php5-xmlrpc php5-xsl memcached libapache2-mod-passenger

Verás las siguientes preguntas:

Web server to reconfigure automatically: <- apache2  
 Configure database for phpmyadmin with dbconfig-common? <- yes  
Enter the password of the administrative user? <- yourrootmysqlpassword  
Enter the phpmyadmin application password? <-  Just press enter

Luego ejecuta el siguiente comando para habilitar los módulos de Apache suexec, rewrite, ssl, actions e include (más dav, dav_fs y auth_digest si deseas usar WebDAV):

a2enmod suexec rewrite ssl actions include dav_fs dav auth_digest cgi headers

Para asegurarnos de que el servidor no pueda ser atacado a través de la vulnerabilidad HTTPOXY, deshabilitaremos el encabezado HTTP_PROXY en apache globalmente agregando el archivo de configuración /etc/apache2/conf-available/httpoxy.conf.

sudo nano /etc/apache2/conf-available/httpoxy.conf

Pega el siguiente contenido en el archivo:


    RequestHeader unset Proxy early

Y habilita el módulo ejecutando:

a2enconf httpoxy  
service apache2 restart

10.1 Instalar HHVM (HipHop Virtual Machine)

En este paso instalaremos HHVM desde su repositorio oficial de Debian. Agrega el repositorio de HHVM e importa la clave.

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449  
echo deb http://dl.hhvm.com/debian jessie main | sudo tee /etc/apt/sources.list.d/hhvm.list

Actualiza la lista de paquetes:

sudo apt-get update

y instala HHVM:

sudo apt-get install hhvm

10.2 Instalar SuPHP (opcional, pero no recomendado)

NOTA ACTUALIZADA: SuPHP ya no debería ser instalado, procede al paso 11

SuPHP ya no está disponible para Debian Jessie. El modo suphp ya no debería ser utilizado en ISPConfig ya que hay mejores modos de PHP como php-fpm y php-fcgi disponibles. Si realmente necesitas suphp por razones de legado, entonces sigue los pasos en este capítulo para compilarlo manualmente. Pero no recomendamos su instalación.

apt-get install apache2-dev build-essential autoconf automake libtool flex bison debhelper binutils
cd /usr/local/src  
wget http://suphp.org/download/suphp-0.7.2.tar.gz  
tar zxvf suphp-0.7.2.tar.gz  
wget -O suphp.patch https://lists.marsching.com/pipermail/suphp/attachments/20130520/74f3ac02/attachment.patch  
patch -Np1 -d suphp-0.7.2 < suphp.patch  
cd suphp-0.7.2  
autoreconf -if  
./configure --prefix=/usr/ --sysconfdir=/etc/suphp/ --with-apr=/usr/bin/apr-1-config --with-apache-user=www-data --with-setid-mode=owner --with-logfile=/var/log/suphp/suphp.log  
make  
make install  

Crea el directorio de configuración de suphp y el archivo suphp.conf:

mkdir /var/log/suphp  
mkdir /etc/suphp  
nano /etc/suphp/suphp.conf
[global]  
;Ruta al archivo de registro  
logfile=/var/log/suphp/suphp.log  
  
;Nivel de registro  
loglevel=info  
  
;Usuario bajo el cual se ejecuta Apache  
webserver_user=www-data  
  
;Ruta donde deben estar todos los scripts  
docroot=/var/www  
  
;Ruta a chroot() antes de ejecutar el script  
;chroot=/mychroot  
  
; Opciones de seguridad  
allow_file_group_writeable=false  
allow_file_others_writeable=false  
allow_directory_group_writeable=false  
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=0022  
  
; 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  
umask=0022

A continuación, agregaremos un archivo de configuración para cargar el módulo suphp en apache:

echo "LoadModule suphp_module /usr/lib/apache2/modules/mod_suphp.so" > /etc/apache2/mods-available/suphp.load

Y luego abre /etc/apache2/mods-available/suphp.conf…

nano /etc/apache2/mods-available/suphp.conf

… y agrega el siguiente contenido:


        AddType application/x-httpd-suphp .php .php3 .php4 .php5 .phtml
        suPHP_AddHandler application/x-httpd-suphp

    
        suPHP_Engine on
    

    # Por defecto, deshabilitar suPHP para aplicaciones web empaquetadas en debian ya que los archivos
    # son propiedad de root y no pueden ser ejecutados por suPHP debido a min_uid.
    
        suPHP_Engine off
    

# # Usa un archivo de configuración php específico (un directorio que contenga un archivo php.ini)
#       suPHP_ConfigPath /etc/php5/cgi/suphp/
# # Indica a mod_suphp NO manejar solicitudes con el tipo .
#       suPHP_RemoveHandler 

Habilita el módulo suphp en apache:

a2enmod suphp

Reinicia Apache después:

service apache2 restart

11 Instalar Let’s Encrypt

ISPConfig 3.1 tiene soporte para la autoridad de certificados SSL gratuita Let’s Encrypt. La función Let’s Encrypt te permite crear certificados SSL gratuitos para tu sitio web desde dentro de ISPConfig.

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 ejecuta el comando certbot-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 “no” aquí ya que los certificados serán creados por ISPConfig.

12 Instalar PHP-FPM y XCache

XCache es un caché de opcodes PHP gratuito y de código abierto para almacenar en caché y optimizar el código intermedio de PHP. Es similar a otros cachés de opcodes PHP, como eAccelerator y APC. Se recomienda encarecidamente tener uno de estos instalados para acelerar tu página PHP.

12.1 PHP-FPM (recomendado)

A partir de ISPConfig 3.0.5, hay un modo PHP adicional que puedes seleccionar para usar con Apache: PHP-FPM.

Para usar PHP-FPM con Apache, necesitamos el módulo mod_fastcgi de Apache (por favor, no lo confundas con mod_fcgid - son muy similares, pero no puedes usar PHP-FPM con mod_fcgid). Podemos instalar PHP-FPM y mod_fastcgi de la siguiente manera:

apt-get install libapache2-mod-fastcgi php5-fpm

Asegúrate de habilitar el módulo y reiniciar Apache:

a2enmod actions fastcgi alias  
service apache2 restart

12.2 Instalar XCache

XCache se puede instalar de la siguiente manera:

apt-get install php5-xcache

Ahora reinicia Apache:

service apache2 restart

13 Instalar Mailman

ISPConfig te permite gestionar (crear/modificar/eliminar) listas de correo de Mailman. Si deseas hacer uso de esta función, instala Mailman de la siguiente manera:

apt-get install mailman

Selecciona al menos un idioma, por ejemplo:

Languages to support: <-- en (Inglés)  
 Missing site list <-- Ok

Antes de que podamos iniciar Mailman, debe crearse una primera lista de correo llamada mailman:

newlist mailman
root@server1:~# newlist mailman  
Enter the email of the person running the list: <-- dirección de correo electrónico del administrador, por ejemplo, [email protected]  
Initial mailman password: <-- contraseña del administrador para la lista de mailman  
To finish creating your mailing list, you must edit your /etc/aliases (or  
equivalent) file by adding the following lines, and possibly running the  
`newaliases' program:  
   
## mailman mailing list  
mailman:              "|/var/lib/mailman/mail/mailman post mailman"  
mailman-admin:        "|/var/lib/mailman/mail/mailman admin mailman"  
mailman-bounces:      "|/var/lib/mailman/mail/mailman bounces mailman"  
mailman-confirm:      "|/var/lib/mailman/mail/mailman confirm mailman"  
mailman-join:         "|/var/lib/mailman/mail/mailman join mailman"  
mailman-leave:        "|/var/lib/mailman/mail/mailman leave mailman"  
mailman-owner:        "|/var/lib/mailman/mail/mailman owner mailman"  
mailman-request:      "|/var/lib/mailman/mail/mailman request mailman"  
mailman-subscribe:    "|/var/lib/mailman/mail/mailman subscribe mailman"  
mailman-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe mailman"  
   
Hit enter to notify mailman owner... <-- ENTER  
   
root@server1:~#

Abre /etc/aliases después…

nano /etc/aliases

… y agrega las siguientes líneas:

[...]  
## mailman mailing list  
mailman:              "|/var/lib/mailman/mail/mailman post mailman"  
mailman-admin:        "|/var/lib/mailman/mail/mailman admin mailman"  
mailman-bounces:      "|/var/lib/mailman/mail/mailman bounces mailman"  
mailman-confirm:      "|/var/lib/mailman/mail/mailman confirm mailman"  
mailman-join:         "|/var/lib/mailman/mail/mailman join mailman"  
mailman-leave:        "|/var/lib/mailman/mail/mailman leave mailman"  
mailman-owner:        "|/var/lib/mailman/mail/mailman owner mailman"  
mailman-request:      "|/var/lib/mailman/mail/mailman request mailman"  
mailman-subscribe:    "|/var/lib/mailman/mail/mailman subscribe mailman"  
mailman-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe mailman"

Ejecuta:

newaliases

y reinicia Postfix:

service postfix restart

Finalmente, debemos habilitar la configuración de Apache de Mailman:

ln -s /etc/mailman/apache.conf /etc/apache2/conf-enabled/mailman.conf

Esto define el alias /cgi-bin/mailman/ para todos los vhosts de Apache, lo que significa que puedes acceder a la interfaz de administración de Mailman para una lista en http://server1.example.com/cgi-bin/mailman/admin/, y la página web para los usuarios de una lista de correo se puede encontrar en http://server1.example.com/cgi-bin/mailman/listinfo/.

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

Reinicia Apache después:

service apache2 restart

Luego inicia el demonio de Mailman:

service mailman start

14 Instalar PureFTPd y Quota

PureFTPd y quota se pueden instalar con el siguiente comando:

apt-get install pure-ftpd-common pure-ftpd-mysql quota quotatool

Edita el archivo /etc/default/pure-ftpd-common…

nano /etc/default/pure-ftpd-common

… y asegúrate de que el modo de inicio esté configurado en standalone y establece VIRTUALCHROOT=true:

[...]  
STANDALONE_OR_INETD=standalone  
[...]  
VIRTUALCHROOT=true  
[...]  

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.

Si deseas permitir sesiones FTP y TLS, ejecuta

echo 1 > /etc/pure-ftpd/conf/TLS

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
Country Name (2 letter code) [AU]: <-- Ingresa el nombre de tu país (por ejemplo, "DE").  
State or Province Name (full name) [Some-State]: <-- Ingresa el nombre de tu estado o provincia.  
Locality Name (eg, city) []: <-- Ingresa tu ciudad.  
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- Ingresa el nombre de tu organización (por ejemplo, el nombre de tu empresa).  
Organizational Unit Name (eg, section) []: <-- Ingresa el nombre de tu unidad organizativa (por ejemplo, "Departamento de TI").  
Common Name (eg, YOUR name) []: <-- Ingresa el nombre de dominio completamente calificado del sistema (por ejemplo, "server1.example.com").  
Email Address []: <-- Ingresa tu dirección de correo electrónico.

Cambia los permisos del certificado SSL:

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

Luego reinicia PureFTPd:

service pure-ftpd-mysql restart

Edita /etc/fstab. El mío se ve así (agregué, usrjquota=quota.user, grpjquota=quota.group, jqfmt=vfsv0 a la partición con el punto de montaje /):

nano /etc/fstab
# /etc/fstab: información estática del sistema de archivos.  
#  
# Usa 'blkid' para imprimir el identificador único universal para un  
# dispositivo; esto puede ser usado con UUID= como una manera más robusta de nombrar dispositivos  
# que funciona incluso si se agregan y eliminan discos. Ver fstab(5).  
#  
#        
# / estaba en /dev/sda1 durante la instalación  
UUID=3dc3b58d-97e5-497b-8254-a913fdfc5408 / ext4 errors=remount-ro,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 0 1  
# swap estaba en /dev/sda5 durante la instalación  
UUID=36bf486e-8f76-492d-89af-5a8eb3ce8a02 none swap sw 0 0  
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0

Para habilitar quota, ejecuta estos comandos:

mount -o remount /
quotacheck -avugm  
quotaon -avug

15 Instalar BIND DNS Server

BIND se puede instalar de la siguiente manera:

apt-get install bind9 dnsutils

Si tu servidor es una máquina virtual, se recomienda encarecidamente instalar el demonio haveged para obtener una mayor entropía para la firma DNSSEC. Puedes instalar haveged en servidores no virtuales también, no debería causar problemas.

apt-get install haveged

Una explicación sobre ese tema se puede encontrar aquí.

16 Instalar Webalizer y AWStats

Webalizer y AWStats se pueden instalar de la siguiente manera:

apt-get install webalizer awstats geoip-database libclass-dbi-mysql-perl libtimedate-perl

Abre /etc/cron.d/awstats después…

nano /etc/cron.d/awstats

… y comenta todo en ese archivo:

#MAILTO=root

#*/10 * * * * www-data [ -x /usr/share/awstats/tools/update.sh ] && /usr/share/awstats/tools/update.sh

# Generar informes estáticos:
#10 03 * * * www-data [ -x /usr/share/awstats/tools/buildstatic.sh ] && /usr/share/awstats/tools/buildstatic.sh

17 Instalar Jailkit

Jailkit solo es necesario si deseas chroot usuarios SSH. Se puede instalar de la siguiente manera (importante: Jailkit debe ser instalado antes de ISPConfig - ¡no se puede instalar después!):

apt-get install build-essential autoconf automake libtool flex bison debhelper binutils
cd /tmp  
wget http://olivier.sessink.nl/jailkit/jailkit-2.19.tar.gz  
tar xvfz jailkit-2.19.tar.gz  
cd jailkit-2.19  
./debian/rules binary

Ahora puedes instalar el paquete Jailkit.deb de la siguiente manera:

cd ..  
dpkg -i jailkit_2.19-1_*.deb  
rm -rf jailkit-2.19*

18 Instalar fail2ban y UFW Firewall

Esto es opcional pero recomendado, porque el monitor de ISPConfig intenta mostrar el registro:

apt-get install fail2ban

Para hacer que fail2ban monitoree PureFTPd y Dovecot, crea el archivo /etc/fail2ban/jail.local:

nano /etc/fail2ban/jail.local
[pureftpd]
enabled  = true
port     = ftp
filter   = pureftpd
logpath  = /var/log/syslog
maxretry = 3

[dovecot-pop3imap]
enabled = true
filter = dovecot-pop3imap
action = iptables-multiport[name=dovecot-pop3imap, port="pop3,pop3s,imap,imaps", protocol=tcp]
logpath = /var/log/mail.log
maxretry = 5

[postfix-sasl]
enabled  = true
port     = smtp
filter   = postfix-sasl
logpath  = /var/log/mail.log
maxretry = 3

Luego crea los siguientes dos archivos de filtro:

nano /etc/fail2ban/filter.d/pureftpd.conf
[Definition]
failregex = .*pure-ftpd: \(.*@\) \[WARNING\] Authentication failed for user.*
ignoreregex =
nano /etc/fail2ban/filter.d/dovecot-pop3imap.conf
[Definition]
failregex = (?: pop3-login|imap-login): .*(?:Authentication failure|Aborted login \(auth failed|Aborted login \(tried to use disabled|Disconnected \(auth failed|Aborted login \(\d+ authentication attempts).*rip=(?P\S*),.*
ignoreregex =

Luego, para agregar la línea ignoreregex en el archivo de filtro postfix-sasl, ejecuta:

echo "ignoreregex =" >> /etc/fail2ban/filter.d/postfix-sasl.conf

Reinicia fail2ban después:

service fail2ban restart

Para instalar el firewall UFW, ejecuta este comando apt:

apt-get install ufw
Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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