Servidor Perfecto · 10 min read · Jan 20, 2026
El Servidor Perfecto - Ubuntu 15.10 (Wily Werewolf) con Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot e ISPConfig 3 - Página 2
8. Instalar Apache2, PHP5, phpMyAdmin, FCGI, suExec, Pear y mcrypt
Apache2, PHP5, phpMyAdmin, FCGI, suExec, Pear y mcrypt se pueden instalar de la siguiente manera:
apt-get install apache2 apache2-doc apache2-utils libapache2-mod-php5 php5 php5-common php5-gd php5-mysql php5-imap phpmyadmin php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec-pristine php-pear php-auth php5-mcrypt mcrypt php5-imagick imagemagick libruby libapache2-mod-python php5-curl php5-intl php5-memcache php5-memcached php5-ming php5-ps php5-pspell php5-recode php5-sqlite php5-tidy php5-xmlrpc php5-xsl memcachedVerás la siguiente pregunta:
Web server to reconfigure automatically: <-- apache2
Configure database for phpmyadmin with dbconfig-common? <-- Yes
Password of the database's administrative user: <-- Introduce la contraseña root de MySQL aquí y confirma ingresándola nuevamente en la siguiente pantalla
MySQL application password for phpmyadmin: <-- Presiona enterLuego 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 cgia2enmod dav_fs dav auth_digestY habilita el módulo mcrypt en PHP:
php5enmod mcryptReinicia Apache después:
service apache2 restartSi 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 restart8.1 Caché de Opcode APCu PHP
APCu es un caché de opcode PHP gratuito para almacenar en caché y optimizar el código intermedio de PHP. Se recomienda encarecidamente tener uno de estos instalados para acelerar tu página PHP.
APCu se puede instalar de la siguiente manera:
apt-get install php5-apcuAhora reinicia Apache:
service apache2 restart8.2 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-fpmAsegúrate de habilitar el módulo y reiniciar Apache:
a2enmod actions fastcgi alias
service apache2 restart8.3 Versiones Adicionales de PHP
A partir de ISPConfig 3.0.5, es posible tener múltiples versiones de PHP en un servidor (seleccionables a través de ISPConfig) que se pueden ejecutar a través de FastCGI y PHP-FPM. Para aprender cómo construir versiones adicionales de PHP (PHP-FPM y FastCGI) y cómo configurar ISPConfig, consulta este tutorial: Cómo Usar Múltiples Versiones de PHP (PHP-FPM & FastCGI) Con ISPConfig 3 (Ubuntu 12.10) (funciona también para Ubuntu 15.10).
8.4 Instalar SuPHP (opcional, no recomendado)
SuPHP ya no está disponible para Debian Jessie. El modo suphp no debería usarse más en ISPConfig ya que hay mejores modos de PHP como php-fpm y php-fcgi disponibles. Si realmente necesitas suphp por razones de legado, sigue los pasos en este capítulo para compilarlo manualmente:
apt-get install apache2-dev build-essential autoconf automake libtool flex bison debhelper binutilscd /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=0022A 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.loadY 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 de debian ya que los archivos
# son propiedad de root y no pueden ser ejecutados por suPHP debido a min_uid.
suPHP_Engine off
# # Usar un archivo de configuración php específico (un dir 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 suphpReinicia Apache después:
service apache2 restart9. Instalar Mailman
Desde la versión 3.0.4, ISPConfig también 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 mailmanSelecciona al menos un idioma, por ejemplo:
Languages to support: <– en (Inglés)
Missing site list <– Ok
Antes de que podamos iniciar Mailman, se debe crear una primera lista de correo llamada mailman:
newlist mailmanroot@server1:~# newlist mailman
Introduce el email 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 /etc/aliases (o archivo 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
newaliasesdespues y reinicia Postfix:
service postfix restartFinalmente, debemos habilitar la configuración de Apache de Mailman:
ln -s /etc/mailman/apache.conf /etc/apache2/conf-available/mailman.confEsto 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://
Bajo http://
Reinicia Apache después:
service apache2 restartLuego inicia el demonio de Mailman:
service mailman start10. Instalar PureFTPd y Quota
PureFTPd y quota se pueden instalar con el siguiente comando:
apt-get install pure-ftpd-common pure-ftpd-mysql quota quotatoolEdita 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/TLSPara 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.pemCountry 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.pemLuego reinicia PureFTPd:
service pure-ftpd-mysql restartEdita /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
devicio; esto puede ser usado 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
# /boot estaba en /dev/sda1 durante la instalación
UUID=9b8299f1-b2a2-4231-9ba1-4540fad76b0f /boot ext2 defaults 0 2
/dev/mapper/server1--vg-swap_1 none swap sw 0 0 Para habilitar quota, ejecuta estos comandos:
mount -o remount /quotacheck -avugm
quotaon -avugLo que mostrará la siguiente salida:
root@server1:/# quotacheck -avugm
quotacheck: Escaneando /dev/dm-0 [/] hecho
quotacheck: No se puede acceder al archivo de cuota de usuario antiguo //quota.user: No existe tal archivo o directorio. El uso no será restado.
quotacheck: No se puede acceder al archivo de cuota de grupo antiguo //quota.group: No existe tal archivo o directorio. El uso no será restado.
quotacheck: No se puede acceder al archivo de cuota de usuario antiguo //quota.user: No existe tal archivo o directorio. El uso no será restado.
quotacheck: No se puede acceder al archivo de cuota de grupo antiguo //quota.group: No existe tal archivo o directorio. El uso no será restado.
quotacheck: Se revisaron 11518 directorios y 83893 archivos
quotacheck: Archivo antiguo no encontrado.
quotacheck: Archivo antiguo no encontrado.
root@server1:/# quotaon -avug
/dev/dm-0 [/]: cuotas de grupo activadas
/dev/dm-0 [/]: cuotas de usuario activadas11. Instalar el Servidor DNS BIND
BIND se puede instalar de la siguiente manera:
apt-get install bind9 dnsutils12. Instalar Vlogger, Webalizer y AWstats
Vlogger, webalizer y AWstats se pueden instalar de la siguiente manera:
apt-get install vlogger webalizer awstats geoip-database libclass-dbi-mysql-perlAbre /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.sh13. 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 automake1.11 libtool flex bison debhelper binutilscd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.17.tar.gz
tar xvfz jailkit-2.17.tar.gz
cd jailkit-2.17
./debian/rules binaryAhora puedes instalar el paquete Jailkit.deb de la siguiente manera:
cd ..
dpkg -i jailkit_2.17-1_*.deb
rm -rf jailkit-2.17*14. Instalar fail2ban
Esto es opcional pero recomendado, porque el monitor de ISPConfig intenta mostrar el registro:
apt-get install fail2banPara 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 = 3Luego 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 = Agrega la línea ignoreregex que falta en el archivo postfix-sasl:
echo "ignoreregex =" >> /etc/fail2ban/filter.d/postfix-sasl.confReinicia fail2ban después:
service fail2ban restartRecibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.