El servidor perfecto CentOS 7.6 con Apache, PHP 7.2, Postfix, Dovecot, Pure-FTPD, BIND e ISPConfig 3.1
Este tutorial muestra la instalación de ISPConfig 3.1 en un servidor CentOS 7.6 (64Bit). ISPConfig es un panel de control de alojamiento web que te permite configurar los siguientes servicios a través de un navegador web: Servidor web Apache, PHP 7.2, servidor de correo Postfix, MySQL, servidor de nombres BIND, PureFTPd, SpamAssassin, ClamAV, Mailman, y muchos más.
1 Requisitos
Para instalar un sistema de este tipo necesitarás lo siguiente
- Un sistema de servidor mínimo Centos 7.6. Puede ser un servidor instalado desde cero, como se describe en nuestro tutorial sobre servidores mínimos Centos 7, o un servidor virtual o un servidor raíz de una empresa de alojamiento que tenga instalada una configuración mínima de Centos 7.6.
- Una conexión rápida a Internet.
2 Nota preliminar
En este tutorial, utilizo 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.
3 Prepara el servidor
Establece la disposición del teclado
En caso de que la distribución del teclado del servidor no coincida con la tuya, puedes cambiar al teclado adecuado (en mi caso «de» para una distribución de teclado alemana, con el comando localectl:
localectl set-keymap de
Para obtener una lista de todos los mapas de teclado disponibles, ejecuta:
localectl list-keymaps
Quiero instalar ISPConfig al final de este tutorial, ISPConfig viene con el script del cortafuegos Bastille que usaré como cortafuegos, por lo que ahora desactivo el cortafuegos por defecto de CentOS. Por supuesto, eres libre de dejar el cortafuegos de CentOS activado y configurarlo según tus necesidades (pero entonces no deberías usar ningún otro cortafuegos más adelante ya que probablemente interferirá con el cortafuegos de CentOS).
Ejecuta…
yum -y install net-tools
systemctl stop firewalld.service
systemctl disable firewalld.service
para detener y desactivar el cortafuegos de CentOS. No pasa nada si obtienes errores aquí, esto sólo indica que el cortafuegos no estaba instalado.
A continuación, debes comprobar que el cortafuegos se ha desactivado realmente. Para ello, ejecuta el comando:
iptables -L
El resultado debería ser así:
[root@server1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
O utiliza el comando firewall-cmd:
firewall-cmd --state
[root@server1 ~]# firewall-cmd --state
not running
[root@server1 ~]#
Ahora voy a instalar el editor de configuración de red y el editor basado en el shell «nano» que utilizaré en los próximos pasos para editar los archivos de configuración:
yum -y install nano wget NetworkManager-tui yum-utils
Si no has configurado tu tarjeta de red durante la instalación, puedes hacerlo ahora. Ejecuta…
nmtui
… y ve a Editar una conexión:
Selecciona tu interfaz de red:
A continuación, introduce los datos de tu red: desactiva el DHCP e introduce una dirección IP estática, una máscara de red, tu puerta de enlace y uno o dos servidores de nombres, y pulsa Aceptar:
A continuación, selecciona Aceptar para confirmar los cambios que has hecho en la configuración de la red
y Salir para cerrar la herramienta de configuración de red nmtui.
Deberías ejecutar
ifconfig
ahora para comprobar si el instalador ha acertado con tu dirección IP:
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.100 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::20c:29ff:fee5:5b47 prefixlen 64 scopeid 0x20<link>
inet6 2003:c2:9731:a445:20c:29ff:fee5:5b47 prefixlen 64 scopeid 0x0<global>
ether 00:0c:29:e5:5b:47 txqueuelen 1000 (Ethernet)
RX packets 227784 bytes 317714901 (302.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 205574 bytes 23608521 (22.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]#
Si tu tarjeta de red no aparece ahí, entonces no estará habilitada en el arranque, En este caso, abre el archivo /etc/sysconfig/network-scripts/ifcfg-eth0
nano /etc/sysconfig/network-scripts/ifcfg-ens33
y pon ONBOOT en sí:
[...]
ONBOOT=yes
[...]
y reinicia el servidor.
Comprueba en tu /etc/resolv. conf si aparecen todos los servidores de nombres que has configurado previamente:
cat /etc/resolv.conf
Si faltan servidores de nombres, ejecuta
nmtui
y vuelve a añadir los servidores de nombres que faltan.
Ahora, a la configuración…
Ajustar /etc/hosts y /etc/hostname
A continuación, editaremos /etc/hosts. Haz que tenga este aspecto:
nano /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.100 server1.example.com server1
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
Ajusta el nombre de host en el archivo /etc/hostname. El archivo deberá contener el nombre de dominio completo (por ejemplo, servidor1.ejemplo.com en mi caso) y no sólo el nombre corto como «servidor1». Abre el archivo con el editor nano:
nano /etc/hostname
Y establece el nombre de host en el archivo.
server1.example.com
Guarda el archivo y sal de nano.
Poner SELinux en permisivo
SELinux es una extensión de seguridad de CentOS que debería proporcionar seguridad extendida. ISPConfig no viene con un conjunto de reglas de SELinux, por lo tanto lo puse en permisivo (esto es una necesidad si quieres instalar ISPConfig más tarde).
Edita /etc/selinux/config y pon SELINUX=permisivo:
nano /etc/selinux/config
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=permissive # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
Después debemos reiniciar el sistema:
reboot
4 Habilitar los repositorios adicionales e instalar algunos programas
En primer lugar, importamos las claves GPG de los paquetes de software:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
A continuación, habilitamos el repositorio EPEL en nuestro sistema CentOS, ya que muchos de los paquetes que vamos a instalar a lo largo de este tutorial no están disponibles en el repositorio oficial de CentOS 7:
yum -y install epel-release
A continuación, actualizamos los paquetes existentes en el sistema:
yum -y update
Ahora instalamos algunos paquetes de software que son necesarios más adelante:
yum -y groupinstall 'Development Tools'
5 Cuota
(Si has elegido un esquema de particionamiento diferente al mío, debes ajustar este capítulo para que quota se aplique a las particiones en las que lo necesites).
Para instalar quota, ejecutamos este comando:
yum -y install quota
Ahora comprobamos si la cuota ya está activada para el sistema de archivos donde se almacenan los datos del sitio web (/var/www) y del maildir (var/vmail). En esta configuración de ejemplo, tengo una gran partición raíz, así que busco ‘ / ‘:
mount | grep ' / '
[root@server1 ~]# mount | grep ' / '
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,noquota)
[root@server1 ~]#
Si tienes una partición /var separada, entonces utiliza :
mount | grep ' /var '
en su lugar. Si la línea contiene la palabra «noquota«, sigue los siguientes pasos para activar la cuota.
Activar la cuota en la partición / (raíz)
Normalmente se habilita la cuota en el archivo /etc/fstab, pero si el sistema de archivos es el sistema de archivos raíz «/», entonces la cuota tiene que ser habilitada por un parámetro de arranque del Kernel de Linux.
Edita el archivo de configuración de grub:
nano /etc/default/grub
busca la línea que empieza por GRUB_CMDLINE_LINUX y añade rootflags=uquota,gquota a los parámetros de la línea de comandos para que la línea resultante tenga este aspecto:
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet rootflags=uquota,gquota"
y aplica los cambios ejecutando el siguiente comando
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg_bak
grub2-mkconfig -o /boot/grub2/grub.cfg
y reinicia el servidor.
reboot
Ahora comprueba si la cuota está activada:
mount | grep ' / '
[root@server1 ~]# mount | grep ' / '
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,usrquota,grpquota)
[root@server1 ~]#
Cuando la cuota está activada, podemos ver«usrquota,grpquota» en la lista de opciones de montaje.
Activar la cuota en una partición /var separada
Si tienes una partición /var separada, edita /etc/fstab y añade ,u quota,gquota a la partición /(/dev/mapper/centos-var):
nano /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Sep 21 16:33:45 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 1 1
/dev/mapper/centos-var /var xfs defaults,uquota,gquota 1 2
UUID=9ac06939-7e43-4efd-957a-486775edd7b4 /boot xfs defaults 1 3
/dev/mapper/centos-swap swap swap defaults 0 0
A continuación, ejecuta
mount -o remount /var
quotacheck -avugm
quotaon -avug
para activar la cuota. Si obtienes un error de que no hay ninguna partición con cuota habilitada, reinicia el servidor antes de continuar.
6 Instala Apache, PHP, MySQL y phpMyAdmin
Habilita el repositorio Remi para obtener las nuevas versiones de PHP:
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum-config-manager --enable remi-php72
Podemos instalar los paquetes necesarios con un solo comando:
yum -y install ntp httpd mod_ssl mariadb-server php php-mysql php-mbstring phpmyadmin
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ñade la regla de cabecera de apache al final del archivo httpd.conf:
echo "RequestHeader unset Proxy early" >> /etc/httpd/conf/httpd.conf
Y reinicia httpd para aplicar el cambio de configuración.
service httpd restart