El servidor perfecto – Debian 10 (Buster) con Apache, BIND, Dovecot, PureFTPD e ISPConfig 3.2
Este tutorial muestra cómo preparar un servidor Debian 10 (con Apache2, BIND, Dovecot) para la instalación de ISPConfig 3.2, 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, utilizaré el nombre de host servidor1.ejemplo.com con la dirección IP 192.168.0.100 y la puerta de enlace 192.168.0.1. Estas configuraciones pueden ser diferentes en tu caso, por lo que deberás sustituirlas cuando corresponda. Antes de seguir adelante necesitas tener una instalación mínima de Debian 10. Puede ser una imagen mínima de Debian de tu proveedor de alojamiento o puedes utilizar el tutorial Servidor mínimo de Debian para configurar el sistema base.
Todos los comandos siguientes se ejecutan como usuario root. Entra como usuario root directamente o entra como tu usuario normal y luego usa el comando
su -
para convertirte en usuario root en tu servidor antes de continuar. IMPORTANTE: Debes utilizar ‘su -‘ y no sólo ‘su’, de lo contrario tu variable PATH será configurada erróneamente por Debian.
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 utilizar un cliente SSH como PuTTY y conectarte desde tu estación de trabajo a tu servidor de Debian 9 y seguir los pasos restantes de este tutorial.
3 Instala un editor de texto shell (opcional)
En este tutorial utilizaremos nano editor de texto en este tutorial. Algunos usuarios prefieren el clásico editor vi, por lo que instalaremos aquí ambos editores. El programa vi por defecto tiene un comportamiento extraño en Debian y Ubuntu; para solucionarlo, instalaremos vim-nox:
apt-get install nano vim-nox
Si tu editor favorito es vi, sustituye nano por 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 «servidor1.ejemplo.com». No utilices un nombre de dominio sin la parte del subdominio como «ejemplo.com» como nombre de host, ya que esto causará problemas más adelante con la configuración de tu correo. En primer lugar, debes comprobar el nombre de host en/etc/hosts y cambiarlo cuando sea necesario. La línea debería ser «Dirección IP – espacio – nombre de host completo incluyendo el dominio – espacio – parte del subdominio». Para nuestro nombre de host servidor1.ejemplo.com, el archivo deberá tener este aspecto:
nano /etc/hosts
127.0.0.1 localhost.localdomain localhost 192.168.0.100 server1.example.com server1 # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
A continuación, edita el archivo /etc/hostname:
nano /etc/hostname
En nuestro caso, sólo contendrá la parte del subdominio:
server1
Por último, reinicia el servidor para aplicar el cambio:
systemctl reboot
Vuelve a conectarte y comprueba si el nombre de host es correcto ahora con estos comandos:
hostname
hostname -f
El resultado será el siguiente:
root@server1:/tmp# hostname
server1
root@server1:/tmp# hostname -f
server1.example.com
5 Actualiza tu instalación de Debian
En primer lugar, asegúrate de que tu /etc/apt/sources. list contiene el repositorio buster/updates (así te aseguras de obtener siempre las últimas actualizaciones de seguridad), y de que los repositorios contrib y non-free están activados, ya que algunos paquetes necesarios no están en el repositorio principal.
nano /etc/apt/sources.list
deb http://deb.debian.org/debian/ buster main contrib non-free
deb-src http://deb.debian.org/debian/ buster main contrib non-free
deb http://security.debian.org/debian-security buster/updates main contrib non-free
deb-src http://security.debian.org/debian-security buster/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 el shell por defecto
/bin/sh es un enlace simbólico a /bin/dash, pero nosotros necesitamos /bin/bash, no /bin/dash. Por lo tanto, hacemos lo siguiente
dpkg-reconfigure dash
¿Usar dash como shell por defecto del sistema (/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(network time protocol) a través de Internet. Simplemente ejecuta
apt-get -y install ntp
y la hora de tu sistema estará siempre sincronizada.
8 Instalar Postfix, Dovecot, MariaDB, rkhunter y Binutils
Podemos instalar Postfix, Dovecot, MariaDB como alternativa a MySQL, rkhunter y Binutils con un solo comando:
apt-get -y 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 curl
Se te harán las siguientes preguntas:
Tipo general de configuración del correo: <– Sitio de Internet
Nombre del correo del sistema: <– servidor1.ejemplo.com
Para asegurar la instalación de MariaDB y desactivar la base de datos de prueba, ejecuta este comando:
mysql_secure_installation
Responde a las preguntas de la siguiente manera:
Change the root password? [Y/n] <-- y
New password: <-- Enter a new MariaDB root password
Re-enter new password: <-- Repeat the MariaDB root password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Remove test database and access to it? [Y/n] <-- y
Reload privilege tables now? [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 se indica a continuación y añade líneas donde sea necesario para que esta sección del archivo master.cf tenga el mismo aspecto que el siguiente. IMPORTANTE: Elimina el # delante de las líneas que empiezan por smtps y submission también y no sólo de las líneas -o que hay después de estas líneas.
[...] 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 después Postfix:
systemctl restart postfix
Queremos que MySQL escuche en todas las interfaces, no sólo 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 añadiendo un # delante.
nano /etc/mysql/mariadb.conf.d/50-server.cnf
[...] # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. #bind-address = 127.0.0.1
[...]
Establece el método de autenticación de la contraseña en MariaDB como nativo para que podamos utilizar más tarde PHPMyAdmin 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 allí la contraseña raíz de MYSQL / MariaDB dos veces en las filas que empiezan con la palabra contraseña.
nano /etc/mysql/debian.cnf
La contraseña raíz de MySQL que hay que añadir se muestra en rojo. En este ejemplo, la contraseña es «howtoforge».
# Automatically generated for Debian scripts. DO NOT TOUCH!
[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 evitar el error ‘Error en la aceptación: Demasiados archivos abiertos‘ estableceremos ahora límites de archivos abiertos más altos para MariaDB.
Abre el archivo /etc/security/limits.conf con un editor
nano /etc/security/limits.conf
y añade 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 añade 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
systemctl restart mariadb
Ahora comprueba que la red está activada. Ejecuta
netstat -tap | grep mysql
El resultado debería ser el siguiente
root@server1:/home/administrator# netstat -tap | grep mysql
tcp6 0 0 [::]:mysql [::]:* LISTEN 16623/mysqld
9 Instalar Amavisd-new, SpamAssassin y ClamAV
Para instalar amavisd-new, SpamAssassin y ClamAV, ejecutamos
apt-get install amavisd-new spamassassin clamav clamav-daemon unzip bzip2 arj nomarch lzop cabextract p7zip p7zip-full unrar lrzip 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:
systemctl stop spamassassin
systemctl disable spamassassin
10 Instalar el servidor web Apache y PHP
Puedes instalar Apache2, PHP, FCGI, suExec, Pear y mcrypt de la siguiente manera:
apt-get -y install apache2 apache2-doc apache2-utils libapache2-mod-php php7.3 php7.3-common php7.3-gd php7.3-mysql php7.3-imap php7.3-cli php7.3-cgi libapache2-mod-fcgid apache2-suexec-pristine php-pear mcrypt imagemagick libruby libapache2-mod-python php7.3-curl php7.3-intl php7.3-pspell php7.3-recode php7.3-sqlite3 php7.3-tidy php7.3-xmlrpc php7.3-xsl memcached php-memcache php-imagick php-gettext php7.3-zip php7.3-mbstring memcached libapache2-mod-passenger php7.3-soap php7.3-fpm php7.3-opcache php-apcu libapache2-reload-perl
A continuación, ejecuta el siguiente comando para habilitar 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 dav_fs dav auth_digest cgi headers actions proxy_fcgi alias
Para asegurarnos de que el servidor no puede ser atacado a través de la vulnerabilidad HTTPOXY, desactivaremos la cabecera HTTP_PROXY en apache de forma global añadiendo el archivo de configuración /etc/apache2/conf-available/httpoxy.conf.
Nota: La vulnerabilidad se llama httpoxy (sin ‘r’) y por tanto el archivo donde añadimos la configuración para evitarla se llama httpoxy.conf y no httproxy.conf, por lo que no falta la ‘r’ en el nombre del archivo.
nano /etc/apache2/conf-available/httpoxy.conf
Pega el siguiente contenido en el archivo:
<IfModule mod_headers.c> RequestHeader unset Proxy early </IfModule>
Y habilita el módulo ejecutando:
a2enconf httpoxy
systemctl restart apache2
11 Instalar Let’s Encrypt
ISPConfig utiliza ahora acme.sh como cliente de Let’s Encrypt. Instala acme.sh con el siguiente comando:
curl https://get.acme.sh | sh -s
12 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 install mailman
Selecciona al menos un idioma, por ejemplo:
Languages to support: <-- en (English)
Missing site list <-- Ok
Antes de iniciar Mailman, hay que crear una primera lista de correo llamada mailman:
newlist mailman
root@server1:~# newlist mailman
Enter the email of the person running the list: <-- admin email address, e.g. [email protected]
Initial mailman password: <-- admin password for the mailman list
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 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
y reinicia Postfix:
systemctl restart postfix
Por último, debemos habilitar la configuración de Mailman Apache:
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 puede encontrarse en http://server1.example.com/cgi-bin/mailman/listinfo/.
En http://server1.example.com/pipermail puedes encontrar los archivos de las listas de correo.
Reinicia después Apache:
systemctl restart apache2
A continuación, inicia el demonio Mailman:
systemctl restart mailman
13 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
Crea el archivo dhparam para pure-ftpd:
openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 2048
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
Country Name (2 letter code) [AU]: <-- Enter your Country Name (e.g., "DE").
State or Province Name (full name) [Some-State]: <-- Enter your State or Province Name.
Locality Name (eg, city) []: <-- Enter your City.
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- Enter your Organization Name (e.g., the name of your company).
Organizational Unit Name (eg, section) []: <-- Enter your Organizational Unit Name (e.g. "IT Department").
Common Name (eg, YOUR name) []: <-- Enter the Fully Qualified Domain Name of the system (e.g. "server1.example.com").
Email Address []: <-- Enter your Email Address.
Cambia los permisos del certificado SSL:
chmod 600 /etc/ssl/private/pure-ftpd.pem
Luego reinicia PureFTPd:
systemctl restart pure-ftpd-mysql
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>
# / was on /dev/sda1 during installation
UUID=45576b38-39e8-4994-b8c1-ea4870e2e614 / ext4 errors=remount-ro,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 0 1
# swap was on /dev/sda5 during installation
UUID=8bea0d1e-ec37-4b20-9976-4b7daaa3eb69 none swap sw 0 0
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
Para activar la cuota, ejecuta estos comandos:
mount -o remount /
quotacheck -avugm
quotaon -avug
14 Instalar el servidor DNS BIND
BIND se puede instalar de la siguiente manera:
apt-get install bind9 dnsutils
Si tu servidor es una máquina virtual, es muy recomendable instalar el demonio haveged para conseguir una mayor entropía para la firma DNSSEC. También puedes instalar haveged en servidores no virtuales, no debería perjudicar.
apt-get install haveged
Puedes encontrar una explicación sobre este tema aquí.
15 Instalar Webalizer, AWStats y GoAccess
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 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
Instalar la última versión de GoAccess directamente desde el repositorio de GoAccess:
echo "deb https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list
wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/goaccess.gpg add -
apt-get update
apt-get install goaccess
16 Instalar Jailkit
Jailkit sólo es necesario si quieres hacer chroot a los usuarios de SSH. Se puede instalar de la siguiente manera:
apt-get install build-essential autoconf automake libtool flex bison debhelper binutils
cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.20.tar.gz
tar xvfz jailkit-2.20.tar.gz
cd jailkit-2.20
echo 5 > debian/compat
./debian/rules binary
Ahora puedes instalar el paquete .deb de Jailkit de la siguiente manera:
cd ..
dpkg -i jailkit_2.20-1_*.deb
rm -rf jailkit-2.20*
17 Instala fail2ban y UFW Firewall
Esto es opcional pero recomendado, porque el monitor de ISPConfig intenta mostrar el registro:
apt-get install fail2ban
Para que fail2ban monitorice PureFTPd y Dovecot, crea el archivo /etc/fail2ban/jail.local:
nano /etc/fail2ban/jail.local
Y añade la siguiente configuración en él.
[pure-ftpd]
enabled = true
port = ftp
filter = pure-ftpd
logpath = /var/log/syslog
maxretry = 3
[dovecot]
enabled = true
filter = dovecot
logpath = /var/log/mail.log
maxretry = 5
[postfix-sasl]
enabled = true
port = smtp
filter = postfix[mode=auth]
logpath = /var/log/mail.log
maxretry = 3
Reinicia fail2ban después:
systemctl restart fail2ban
Para instalar el cortafuegos UFW, ejecuta este comando apt:
apt-get install ufw
18 Instalar la herramienta de administración de bases de datos PHPMyAdmin
Desde Debian 10, PHPMyAdmin ya no está disponible como paquete .deb. Por lo tanto, lo instalaremos desde el código fuente.
Crea carpetas para PHPMyadmin:
mkdir /usr/share/phpmyadmin
mkdir /etc/phpmyadmin
mkdir -p /var/lib/phpmyadmin/tmp
chown -R www-data:www-data /var/lib/phpmyadmin
touch /etc/phpmyadmin/htpasswd.setup
Ve al directorio /tmp y descarga las fuentes de PHPMyAdmin:
cd /tmp
wget https://files.phpmyadmin.net/phpMyAdmin/4.9.0.1/phpMyAdmin-4.9.0.1-all-languages.tar.gz
Descomprime el archivo descargado y mueve los archivos a la carpeta /usr/share/phpmyadmin y limpia el directorio /tmp.
tar xfz phpMyAdmin-4.9.0.1-all-languages.tar.gz
mv phpMyAdmin-4.9.0.1-all-languages/* /usr/share/phpmyadmin/
rm phpMyAdmin-4.9.0.1-all-languages.tar.gz
rm -rf phpMyAdmin-4.9.0.1-all-languages
Crea un nuevo archivo de configuración para PHPMyaAdmin basado en el archivo de ejemplo proporcionado:
cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php
Abre el archivo de configuración con el editor nano:
nano /usr/share/phpmyadmin/config.inc.php
Establece una contraseña segura (blowfish secret) que debe tener 32 caracteres:
$cfg['blowfish_secret'] = 'bD3e6wva9fnd93jVsb7SDgeiBCd452Dh'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
No utilices mi secreto blowfish de ejemplo, pon el tuyo propio.
A continuación, añade una línea para establecer el directorio que PHPMyAdmin utilizará para almacenar los archivos temporales:
$cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';
A continuación, creamos el archivo de configuración de Apache para PHPMyAdmin abriendo un nuevo archivo en el editor nano:
nano /etc/apache2/conf-available/phpmyadmin.conf
Pega la siguiente configuración en el archivo y guárdala.
# phpMyAdmin default Apache configuration
Alias /phpmyadmin /usr/share/phpmyadmin
<Directory /usr/share/phpmyadmin>
Options FollowSymLinks
DirectoryIndex index.php
<IfModule mod_php7.c>
AddType application/x-httpd-php .php
php_flag magic_quotes_gpc Off
php_flag track_vars On
php_flag register_globals Off
php_value include_path .
</IfModule>
</Directory>
# Authorize for setup
<Directory /usr/share/phpmyadmin/setup>
<IfModule mod_authn_file.c>
AuthType Basic
AuthName "phpMyAdmin Setup"
AuthUserFile /etc/phpmyadmin/htpasswd.setup
</IfModule>
Require valid-user
</Directory>
# Disallow web access to directories that don't need it
<Directory /usr/share/phpmyadmin/libraries>
Order Deny,Allow
Deny from All
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
Order Deny,Allow
Deny from All
</Directory>
Activa la configuración y reinicia Apache.
a2enconf phpmyadmin
systemctl restart apache2
En el siguiente paso, configuraremos el almacén de configuración de phpMyadmin (base de datos).
Entra en MariaDB como usuario root:
mysql -u root -p
En el shell de MariaDB, crea una nueva base de datos para PHPMyAdmin:
MariaDB [(none)]> CREATE DATABASE phpmyadmin;
A continuación, crea un nuevo usuario:
MariaDB [(none)]> CREATE USER 'pma'@'localhost' IDENTIFIED BY 'mypassword';
Sustituye la palabra mypassword por una contraseña segura de tu elección en los comandos anteriores y siguientes, utiliza la misma contraseña las dos veces. A continuación, concede al usuario acceso a esta base de datos y recarga los permisos de la base de datos.
MariaDB [(none)]> GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> EXIT;
Por último, carga las tablas SQL en la base de datos:
mysql -u root -p phpmyadmin < /usr/share/phpmyadmin/sql/create_tables.sql
Introduce la contraseña de root de MariaDB cuando se te solicite.
Ahora sólo tenemos que establecer los datos del usuario phpmyadmin en el archivo de configuración. Abre de nuevo el archivo en el editor nano:
nano /usr/share/phpmyadmin/config.inc.php
Desplázate hacia abajo hasta que veas las líneas de abajo y edítalas:
/* User used to manipulate with storage */
$cfg['Servers'][$i]['controlhost'] = 'localhost';
$cfg['Servers'][$i]['controlport'] = '';
$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = 'mypassword';
/* Storage database and tables */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
$cfg['Servers'][$i]['relation'] = 'pma__relation';
$cfg['Servers'][$i]['table_info'] = 'pma__table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma__column_info';
$cfg['Servers'][$i]['history'] = 'pma__history';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
$cfg['Servers'][$i]['tracking'] = 'pma__tracking';
$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
$cfg['Servers'][$i]['recent'] = 'pma__recent';
$cfg['Servers'][$i]['favorite'] = 'pma__favorite';
$cfg['Servers'][$i]['users'] = 'pma__users';
$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
$cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
$cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
$cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
$cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
$cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';
He marcado en rojo las líneas que he editado. Sustituye mypassword por la contraseña que hayas elegido para el usuario phpmyadmin. Ten en cuenta que también se han eliminado los // delante de las líneas.
19 Instalar RoundCube Webmail (opcional)
En este capítulo, instalaremos el cliente de correo web RoundCube. En primer lugar, tenemos que crear la base de datos para Roundcube manualmente, ya que actualmente hay un problema en el instalador de RoundCube en Debian que hace que no cree la base de datos automáticamente. Ejecuta este comando para crear la base de datos:
echo "CREATE DATABASE roundcube;" | mysql --defaults-file=/etc/mysql/debian.cnf
A continuación, instala RoundCube con este comando:
apt-get install roundcube roundcube-core roundcube-mysql roundcube-plugins
El instalador te hará las siguientes preguntas:
Configure database for roundcube with dbconfig.common? <-- yes
MySQL application password for roundcube: <-- press enter
A continuación, edita el archivo RoundCube /etc/roundcube/config.inc.php y ajusta algunos parámetros:
nano /etc/roundcube/config.inc.php
Ajusta el default_host a localhost y el smtp_server.
$config['default_host'] = 'localhost';
$config['smtp_server'] = 'localhost';
$config['smtp_port'] = 25;
A continuación, edita el archivo de configuración de Apache RoundCube /etc/apache2/conf-enabled/roundcube.conf:
nano /etc/apache2/conf-enabled/roundcube.conf
Y añade una línea para el alias apache /webmail y otra para /roundcube, puedes añadir la línea justo al principio del archivo. NOTA: ¡No uses /mail como alias o el módulo de correo electrónico de ispconfig dejará de funcionar!
Alias /roundcube /var/lib/roundcube
Alias /webmail /var/lib/roundcube
A continuación, recarga Apache:
systemctl reload apache2
Ahora puedes acceder a RoundCube de la siguiente manera:
http://192.168.0.100/webmail
http://www.example.com/webmail
http://server1.example.com:8080/webmail (después de haber instalado ISPConfig, ver el siguiente capítulo)
Existen algunos plugins para integrar RoundCube Webmail con ISPConfig, mira aquí las instrucciones de instalación del plugin ISPConfig RoundCube.
20 Descargar ISPConfig 3
20 Descarga la versión estable de ISPConfig (recomendada)
Para instalar ISPConfig 3 desde la última versión liberada, haz esto:
cd /tmp
wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz
tar xfz ISPConfig-3-stable.tar.gz
cd ispconfig3_install/install/
21 Instalar ISPConfig
El siguiente paso es ejecutar el instalador de ISPConfig.
php -q install.php
Esto iniciará el instalador de ISPConfig 3. El instalador configurará todos los servicios como Postfix, Dovecot, etc. por ti. No es necesaria una configuración manual como la requerida para ISPConfig 2 (guías de instalación perfectas).
# php -q install.php
--------------------------------------------------------------------------------
_____ ___________ _____ __ _ ____
|_ _/ ___| ___ \ / __ \ / _(_) /__ \
| | \ `--.| |_/ / | / \/ ___ _ __ | |_ _ __ _ _/ /
| | `--. \ __/ | | / _ \| '_ \| _| |/ _` | |_ |
_| |_/\__/ / | | \__/\ (_) | | | | | | | (_| | ___\ \
\___/\____/\_| \____/\___/|_| |_|_| |_|\__, | \____/
__/ |
|___/
--------------------------------------------------------------------------------
>> Initial configuration
Operating System: Debian 10.0 (Buster) or compatible
Following will be a few questions for primary configuration so be careful.
Default values are in [brackets] and can be accepted with <ENTER>.
Tap in "quit" (without the quotes) to stop the installer.
Select language (en,de) [en]: <-- Hit Enter
Installation mode (standard,expert) [standard]: <-- Hit Enter
Full qualified hostname (FQDN) of the server, eg server1.domain.tld [server1.example.com]: <-- Hit Enter
MySQL server hostname [localhost]: <-- Hit Enter
MySQL server port [3306]: <-- Hit Enter
MySQL root username [root]: <-- Hit Enter
MySQL root password []: <-- Enter your MySQL root password
MySQL database to create [dbispconfig]: <-- Hit Enter
MySQL charset [utf8]: <-- Hit Enter
Configuring Postgrey
Configuring Postfix
Generating a 4096 bit RSA private key
.......................................................................++
........................................................................................................................................++
writing new private key to 'smtpd.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: <-- Enter 2 letter country code
State or Province Name (full name) [Some-State]: <-- Enter the name of the state
Locality Name (eg, city) []: <-- Enter your city
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- Enter company name or press enter
Organizational Unit Name (eg, section) []: <-- Hit Enter
Common Name (e.g. server FQDN or YOUR name) []: <-- Enter the server hostname, in my case: server1.example.com
Email Address []: <-- Hit Enter
Configuring Mailman
Configuring Dovecot
Configuring Spamassassin
Configuring Amavisd
Configuring Getmail
Configuring BIND
Configuring Jailkit
Configuring Pureftpd
Configuring Apache
Configuring vlogger
[INFO] service Metronome XMPP Server not detected
Configuring Ubuntu Firewall
Configuring Fail2ban
[INFO] service OpenVZ not detected
Configuring Apps vhost
Installing ISPConfig
ISPConfig Port [8080]:
Admin password [admin]:
Do you want a secure (SSL) connection to the ISPConfig web interface (y,n) [y]: <-- Hit Enter
Generating RSA private key, 4096 bit long modulus
.......................++
................................................................................................................................++
e is 65537 (0x10001)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: <-- Enter 2 letter country code
State or Province Name (full name) [Some-State]: <-- Enter the name of the state
Locality Name (eg, city) []: <-- Enter your city
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- Enter company name or press enter
Organizational Unit Name (eg, section) []: <-- Hit Enter
Common Name (e.g. server FQDN or YOUR name) []: <-- Enter the server hostname, in my case: server1.example.com
Email Address []: <-- Hit Enter
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: <-- Hit Enter
An optional company name []: <-- Hit Enter
writing RSA key
Configuring DBServer
Installing ISPConfig crontab
no crontab for root
no crontab for getmail
Detect IP addresses
Restarting services ...
Installation completed.
El instalador configura automáticamente todos los servicios subyacentes, por lo que no es necesaria una configuración manual.
Después puedes acceder a ISPConfig 3 bajo http(s)://servidor1.ejemplo.com:8080/ o http(s)://192.168.0.100:8080/ ( http o https depende de lo que hayas elegido durante la instalación). Accede con el nombre de usuario admin y la contraseña admin (deberías cambiar la contraseña por defecto después de tu primer acceso):
El sistema está ahora listo para ser utilizado.
21.1 Manual de ISPConfig 3
Para aprender a usar ISPConfig 3, recomiendo encarecidamente descargarel Manual de ISPConfig 3.
En más de 300 páginas, cubre el concepto detrás de ISPConfig (administrador, revendedores, clientes), explica cómo instalar y actualizar ISPConfig 3, incluye una referencia para todos los formularios y campos de formulario en ISPConfig junto con ejemplos de entradas válidas, y proporciona tutoriales para las tareas más comunes en ISPConfig 3. También se explica cómo hacer que tu servidor sea más seguro y viene con una sección de resolución de problemas al final.
22 Descarga de la imagen de la máquina virtual de este tutorial
Este tutorial está disponible como imagen de máquina virtual lista para usar en formato ovf/ova que es compatible con VMWare y Virtualbox. La imagen de la máquina virtual utiliza los siguientes datos de acceso:
Inicio de sesión SSH / Shell
Nombre de usuario: administrador
Contraseña: howtoforge
Nombre de usuario: root
Contraseña: howtoforge
Inicio de sesión en ISPConfig
Nombre de usuario: admin
Contraseña: admin
Inicio de sesión en MySQL
Nombre de usuario: root
Contraseña: howtoforge
La IP de la máquina virtual es 192.168.0.100, se puede cambiar en el archivo /etc/network/interfaces. Por favor, cambia todas las contraseñas anteriores para asegurar la máquina virtual.
23 Enlaces
- Debian: http://www.debian.org/
- ISPConfig: http: //www.ispconfig.org/