Servidor Perfecto · 8 min read · Oct 28, 2025

El Servidor Perfecto - Ubuntu 18.04 (Bionic Beaver) con Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot e ISPConfig 3.1 - Página 2

8. Instalar Apache, PHP, phpMyAdmin, FCGI, SuExec, Pear y mcrypt

Apache 2.4, PHP 7.2, phpMyAdmin, FCGI, suExec y Pear se pueden instalar de la siguiente manera:

apt-get -y install apache2 apache2-doc apache2-utils libapache2-mod-php php7.2 php7.2-common php7.2-gd php7.2-mysql php7.2-imap phpmyadmin php7.2-cli php7.2-cgi libapache2-mod-fcgid apache2-suexec-pristine php-pear mcrypt imagemagick libruby libapache2-mod-python php7.2-curl php7.2-intl php7.2-pspell php7.2-recode php7.2-sqlite3 php7.2-tidy php7.2-xmlrpc php7.2-xsl memcached php-memcache php-imagick php-gettext php7.2-zip php7.2-mbstring php-soap php7.2-soap libapache2-reload-perl

Verás la siguiente pregunta:

Web server to reconfigure automatically: <-- apache2   
Configure database for phpmyadmin with dbconfig-common? <-- Yes  
MySQL application password for phpmyadmin: <-- Presiona 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 cgi
a2enmod dav_fs dav auth_digest headers

Para asegurarte de que el servidor no pueda ser atacado a través de la vulnerabilidad HTTPOXY, deshabilitaré el encabezado HTTP_PROXY en apache globalmente. Crea un nuevo archivo httpoxy.conf con nano:

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

Pega este contenido en el archivo:


    RequestHeader unset Proxy early

Habilita el archivo de configuración ejecutando:

a2enconf httpoxy

Reinicia Apache después:

service apache2 restart

Si deseas alojar archivos Ruby con la extensión .rb en tus sitios web creados a través de ISPConfig, debes comentar la línea application/x-ruby rb en /etc/mime.types:

nano /etc/mime.types
[...]
#application/x-ruby                             rb
[...]

(Esto solo es necesario para archivos .rb; los archivos Ruby con la extensión .rbx funcionan sin problemas).

Reinicia Apache después:

service apache2 restart

8.1 Caché de Opcode de PHP (opcional)

Opcache es un caché de opcode PHP gratuito para almacenar en caché y optimizar el código intermedio de PHP. APCu es un módulo de compatibilidad que proporciona funciones compatibles con APC para Opcache, que es utilizado por muchos sistemas de caché CMS. Se recomienda tener estas extensiones de PHP instaladas para acelerar tu página PHP.

APCu se puede instalar de la siguiente manera:

apt-get -y install php7.2-opcache php-apcu

Ahora reinicia Apache:

service apache2 restart

8.2 PHP-FPM

Para usar PHP-FPM con Apache, necesitamos el módulo mod_proxy_fcgi de Apache, que se instala por defecto y solo necesita ser habilitado. Podemos instalar PHP-FPM de la siguiente manera:

apt-get -y install php7.2-fpm

Asegúrate de habilitar los módulos y reiniciar Apache:

a2enmod actions proxy_fcgi alias   
service apache2 restart

10.1 Instalar HHVM (HipHop Virtual Machine), opcional

En este paso, instalaremos HHVM con apt. HHVM es un motor PHP rápido desarrollado por Facebook.

apt-get -y install hhvm

9. Instalar Let’s Encrypt

ISPConfig 3.1 tiene soporte integrado para la Autoridad de Certificación SSL gratuita Let’s Encrypt. La función Let’s Encrypt te permite crear certificados SSL gratuitos para tu sitio web en ISPConfig.

Ahora agregaremos soporte para Let’s Encrypt.

apt-get -y install certbot

10. Instalar Mailman

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

apt-get -y install mailman

Selecciona al menos un idioma, por ejemplo:

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

El error ‘ Job for mailman.service failed because the control process exited with error code. ‘ se puede ignorar por ahora.

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

newlist mailman

root@server1:~# 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 del 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: “|/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”

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

root@server1:~#

Abre /etc/aliases después…

nano /etc/aliases

… y agrega las siguientes líneas:

[...]
## lista de correo mailman
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

despues 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-available/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:///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.

Activa la configuración con:

a2enconf mailman

Reinicia Apache después:

service apache2 restart

Luego inicia el demonio de Mailman:

service mailman start

11. Instalar PureFTPd y Quota

PureFTPd y quota se pueden instalar con el siguiente comando:

apt-get -y 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 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

Country Name (2 letter code) [AU]: <– Introduce el nombre de tu país (por ejemplo, “DE”).
State or Province Name (full name) [Some-State]: <– Introduce el nombre de tu estado o provincia.
Locality Name (eg, city) []: <– Introduce tu ciudad.
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <– Introduce el nombre de tu organización (por ejemplo, el nombre de tu empresa).
Organizational Unit Name (eg, section) []: <– Introduce el nombre de tu unidad organizativa (por ejemplo, “Departamento de TI”).
Common Name (eg, YOUR name) []: <– Introduce el nombre de dominio completamente calificado del sistema (por ejemplo, “server1.example.com”).
Email Address []: <– Introduce 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 utilizado con UUID= como una forma más robusta de nombrar dispositivos  
# que funciona incluso si se agregan y eliminan discos. Ver fstab(5).  
#  
#        
/dev/mapper/server1--vg-root / ext4 errors=remount-ro,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 0 1  
/dev/mapper/server1--vg-swap_1 none swap sw 0 0  
/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0

Para habilitar quota, ejecuta estos comandos:

mount -o remount /
quotacheck -avugm  
quotaon -avug

Lo que mostrará la siguiente salida:

root@server1:/opt/metronome# quotacheck -avugm  
quotacheck: Scanning /dev/mapper/server1--vg-root [/] done  
quotacheck: Cannot stat old user quota file //quota.user: No such file or directory. Usage will not be subtracted.  
quotacheck: Cannot stat old group quota file //quota.group: No such file or directory. Usage will not be subtracted.  
quotacheck: Cannot stat old user quota file //quota.user: No such file or directory. Usage will not be subtracted.  
quotacheck: Cannot stat old group quota file //quota.group: No such file or directory. Usage will not be subtracted.  
quotacheck: Checked 13602 directories and 96597 files  
quotacheck: Old file not found.  
quotacheck: Old file not found.  
root@server1:/opt/metronome# quotaon -avug  
/dev/mapper/server1--vg-root [/]: group quotas turned on  
/dev/mapper/server1--vg-root [/]: user quotas turned on

12. Instalar el Servidor DNS BIND

BIND se puede instalar de la siguiente manera:

apt-get -y install bind9 dnsutils haveged

Habilita e inicia el Daemon haveged:

systemctl enable haveged  
systemctl start haveged

13. Instalar Vlogger, Webalizer y AWStats

Vlogger, Webalizer y AWStats se pueden instalar de la siguiente manera:

apt-get -y install vlogger webalizer awstats geoip-database libclass-dbi-mysql-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

14. 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 -y install build-essential autoconf automake1.11 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   
echo 5 > debian/compat

Luego construye el paquete jailkit ejecutando este comando:

./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*

15. Instalar fail2ban y UFW

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

apt-get -y install fail2ban

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

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

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

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

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.