El servidor perfecto – Ubuntu 18.04 (Bionic Beaver) con Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot e ISPConfig 3.1
8. Instala Apache, PHP, phpMyAdmin, FCGI, SuExec, Pear y mcrypt
Puedes instalar Apache 2.4, PHP 7.2, phpMyAdmin, FCGI, suExec y Pear 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: <-- Press enter
A continuación, ejecuta el siguiente comando para activar los módulos de Apache suexec, rewrite, ssl, actions e include (además de dav, dav_fs y auth_digest si quieres utilizar WebDAV):
a2enmod suexec rewrite ssl actions include cgi
a2enmod dav_fs dav auth_digest headers
Para garantizar que el servidor no pueda ser atacado a través de la vulnerabilidad HTTPOXY, desactivaré la cabecera HTTP_PROXY en apache de forma global. Crea un nuevo archivo httpoxy.conf con nano:
nano /etc/apache2/conf-available/httpoxy.conf
Pega este contenido en el archivo:
<IfModule mod_headers.c> RequestHeader unset Proxy early </IfModule>
Habilita el archivo de configuración ejecutando:
a2enconf httpoxy
Reinicia después Apache:
service apache2 restart
Si quieres 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 es necesario sólo para los archivos . rb; los archivos Ruby con la extensión .rbx funcionan de forma inmediata).
Reinicia después Apache:
service apache2 restart
8.1 Caché de opcodes de PHP (opcional)
Opcache es un cacheador 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é de CMS. Se recomienda tener instaladas estas extensiones de PHP 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 utilizar PHP-FPM con Apache, necesitamos el módulo de Apache mod_proxy_fcgi, que está instalado por defecto y sólo hay que activarlo. Podemos instalar PHP-FPM y como sigue:
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 incorporado 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 en ISPConfig.
Ahora añadiremos el soporte para Let’s encrypt.
apt-get -y install certbot
10. Instalar Mailman
ISPConfig te permite gestionar (crear/modificar/borrar) listas de correo Mailman. Si quieres hacer uso de esta función, instala Mailman como sigue:
apt-get -y install mailman
Selecciona al menos un idioma, por ejemplo
Idiomas a soportar: <– es (inglés)
Falta la lista de sitios <– Ok
El error‘El trabajo para mailman.service falló porque el proceso de control salió con el código de error.‘ puede ser ignorado por ahora.
Antes de poder iniciar Mailman, hay que crear una primera lista de correo llamada mailman:
newlist mailman
root@server1:~# newlist mailman
Introduce el correo electrónico de la persona que dirige la lista: <– dirección de correo electrónico del administrador, por ejemplo [email protected]
Contraseña inicial de mailman: <– contraseña de administrador de la lista mailman
Para terminar de crear tu lista de correo, debes editartu archivo /etc/aliases (o su equivalente en
) añadiendo 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/mailman bounces mailman»
mailman-confirm:»|/var/lib/mailman/mailman confirma mailman»
mailman-join:»|/var/lib/mailman/mailman join mailman»
mailman-leave:»|/var/lib/mailman/mailman leave mailman»
mailman-owner:»|/var/lib/mailman/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/mailman unsubscribe mailman»
Pulsa enter para notificar al propietario de mailman… <– ENTER
root@server1:~#
Abre después /etc/aliases…
nano /etc/aliases
… y añade 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
después y reinicia Postfix:
service postfix restart
Por último, debemos activar la configuración de Mailman Apache:
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://<vhost>/cgi-bin/mailman/admin/<listname>, y la página web para los usuarios de una lista de correo puede encontrarse en http://<vhost>/cgi-bin/mailman/listinfo/<listname>.
En http://<vhost>/pipermail puedes encontrar los archivos de las listas de correo.
Activa la configuración con:
a2enconf mailman
Reinicia después Apache:
service apache2 restart
A continuación, inicia el demonio Mailman:
service mailman start
11. Instalar PureFTPd y Quota
Puedes instalar PureFTPd y Quota 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 como independiente y establece VIRTUALCHROOT=true:
[...] STANDALONE_OR_INETD=standalone [...] VIRTUALCHROOT=true [...]
Ahora configuramos PureFTPd para permitir sesiones FTP y TLS. El FTP es un protocolo muy inseguro porque todas las contraseñas y todos los datos se transfieren en texto claro. Al utilizar TLS, toda la comunicación puede ser encriptada, lo que hace que el FTP sea mucho más seguro.
Si quieres permitir sesiones FTP y TLS, ejecuta
echo 1 > /etc/pure-ftpd/conf/TLS
Para utilizar TLS, debemos crear un certificado SSL. Yo lo creo en /etc/ssl/privado/, 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) [AU]: <– Introduce el nombre de tu país (por ejemplo, «DE»).
Nombre del Estado o Provincia (nombre completo) [Algún Estado]:<– Introduce el nombre de tu Estado o Provincia.
Nombre de la localidad (por ejemplo, ciudad) []:<– Introduce tu Ciudad.
Nombre de la organización (por ejemplo, empresa) [Internet Widgits Pty Ltd]:<– Introduce el nombre de tu organización (por ejemplo, el nombre de tu empresa).
Nombre de la unidad organizativa (por ejemplo, sección) []:<– Introduce el Nombre de tu Unidad Organizativa (por ejemplo, «Departamento de TI»).
Nombre común (por ejemplo, TU nombre) []:<– Introduce el nombre de dominio completo del sistema (por ejemplo, «servidor1.ejemplo.com»).
Dirección de correo electrónico []:<– Introduce tu dirección de correo electrónico.
Cambia los permisos del certificado SSL:
chmod 600 /etc/ssl/private/pure-ftpd.pem
A continuación, reinicia PureFTPd:
service pure-ftpd-mysql restart
Edita /etc/fstab. El mío tiene este aspecto (he añadido ,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 a la partición con el punto de montaje /):
nano /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
/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 activar la cuota, ejecuta estos comandos:
mount -o remount /
quotacheck -avugm
quotaon -avug
Que mostrarán 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 demonio 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 después /etc/cron.d/awstats…
nano /etc/cron.d/awstats
… y comenta todo lo que hay en ese archivo:
#MAILTO=root #*/10 * * * * www-data [ -x /usr/share/awstats/tools/update.sh ] && /usr/share/awstats/tools/update.sh # Generate static reports: #10 03 * * * www-data [ -x /usr/share/awstats/tools/buildstatic.sh ] && /usr/share/awstats/tools/buildstatic.sh
14. Instalar Jailkit
Jailkit es necesario sólo si quieres hacer chroot a los usuarios de SSH. Se puede instalar de la siguiente manera(importante: Jailkit debe ser instalado antes de ISPConfig – ¡no puede ser instalado 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. Instala fail2ban y UFW
Esto es opcional pero recomendable, porque el monitor de ISPConfig intenta mostrar el registro:
apt-get -y install fail2ban
Para que fail2ban monitorice 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 cortafuegos UFW, ejecuta este comando apt:
apt-get install ufw