Servicios de producción usuales
Introducción
En este capítulo, examinaremos la implementación de algunos de los servicios más comunes encontrados en los servidores Red Hat Enterprise Linux.
El objetivo no es proporcionar un manual de software completo. De hecho, Internet está lleno de tutoriales bien explicados, guías y casos prácticos. En su lugar, este capítulo explica la implementación básica de estos servicios en Red Hat Enterprise Linux, de forma que pueda añadir rápida y fácilmente las opciones de configuración que mejor se adapten a su arquitectura.
Así pues, para implementar un servicio, lea toda la sección correspondiente del libro, comprenda las opciones y configúrelo. A continuación, inicie el servicio y efectúe las pruebas.
Si encuentra problemas al iniciar el servicio después de configurarlo, su primer reflejo debería ser analizar los archivos de registro localizados en /var/log. Estos archivos siempre explican lo que ocurre cuando se inicia el servicio.
Asegúrese también de que el cortafuegos del sistema no impide el acceso al servicio. Compruebe que los puertos necesarios estén abiertos.
Tenga cuidado también con SELinux, que a veces puede impedir el funcionamiento de un servicio sin razón aparente. Deberá desactivarlo para estar seguro.
Servidor web Apache
1. Presentación
Apache es un servidor HTTP producido por la Apache Software Foundation. Conocido oficialmente como Apache HTTP Server (Servidor HTTP Apache), es el servidor web más popular de Internet.
La razón de su éxito es que, además de ser de código abierto (open source), está disponible en varios sistemas operativos: UNIX y derivados (Linux, Mac OSX, Solaris, BSD) y Windows.
Apache se utiliza en productos de algunos de los nombres más importantes de la industria, como Oracle o IBM con el programa WebSphere.
Además de ser muy potente, este software cuenta con un impresionante número de módulos, que van desde la compatibilidad con diversos lenguajes como Perl, Python y PHP, hasta módulos SSL/TLS para el acceso seguro a la web, funciones de proxy y alojamiento virtual, lo que permite que una sola máquina física albergue varios sitios web.
La última versión de Apache (a la publicación de este libro) es la 2.4.57; no recomendamos utilizar versiones anteriores de este producto.
2. Configurar
a. Instalar
El nombre del servidor Apache es (sin sorpresas) httpd. Instálelo de la siguiente forma:
dnf install httpd
Habilite el servicio httpd para que se inicie al arrancar y ejecútelo:
systemctl enable --now httpd
Apache debe iniciarse. De hecho, la instalación predefinida ya está configurada para el funcionamiento estándar de un sitio web.
Configurar el cortafuegos
El servidor HTTP utiliza los siguientes puertos para funcionar, así que asegúrese de que estén abiertos en el cortafuegos:
http 80/tcp # WorldWideWeb HTTP
https 443/tcp # http protocol over TLS/SSL
https 443/udp # http protocol over TLS/SSL
Una vez que el servidor esté en funcionamiento, intente una conexión web desde otra máquina a la dirección IP del servidor:
http://<dirección_IP>/
Debería ver una página de prueba en la pantalla.
Página de prueba del servidor Apache
Reiniciar Apache
Cuando modifique la configuración de httpd...
Servidor web Nginx
1. Presentación
Nginx, para engine x (motor x), es un competidor desconocido (outsider) de httpd Apache. Este servidor, creado en 2004, fue diseñado con el objetivo declarado de superar a Apache y pretende ser más rápido para las siguientes tareas:
-
Sitio web clásico
-
Reverse Proxy, proxy inverso (explorado más adelante): actúa como un servidor front-end (frontal o del lado del usuario) para filtrar y procesar los flujos HTTP/S entrantes antes de redirigirlos a los servidores web internos.
-
Equilibrio de la carga: distribución de los flujos entrantes a varios servidores para mejorar la distribución del rendimiento.
-
Caché HTTP: guarda localmente las páginas visitadas con más frecuencia para poder servirlas a los usuarios con mayor rapidez.
-
Proxy de correo: actúa como servidor frontal para filtrar y procesar los correos electrónicos entrantes (email) antes de redirigirlos a los servidores internos.
En las páginas siguientes, veremos la configuración mínima para un sitio web clásico, del mismo modo que Apache con el equivalente de los Virtual Host, y después exploraremos un uso muy extendido de Nginx por su facilidad de implementación, como servidor proxy inverso (Reverse Proxy).
La instalación de Nginx es sencilla:
dnf install -y nginx
Una vez finalizada la instalación, inicie el servidor y actívelo al arrancar:
systemctl enable --now nginx
Si lo desea, puede desactivar cualquier servidor Apache que ocupe los puertos 80 y 443 con el comando systemctl disable --now httpd.
Por último, autorice los puertos 80 y 443 con el comando firewall-cmd.
2. Dar servicio a un sitio web clásico
El servidor está instalado. Al igual que Apache, una configuración y un sitio web predefinidos ya están instalados. Lo único que queda es conectarse (después de obtener la dirección IP del servidor con el comando ip address).
a. Archivos y directorios importantes
Ubicación |
Uso |
/etc/nginx |
Directorio principal de configuración |
/etc/nginx/nginx.conf |
Archivo de configuración principal, describe el comportamiento general del servidor |
/etc/nginx/conf.d/ |
Ubicación de las configuraciones secundarias. Aquí es donde almacenamos las configuraciones para nuestros sitios web. |
/var/log/nginx/ |
Logs de nginx |
/var/log/nginx/access.log... |
PHP y MySQL (MariaDB)
Además de Apache, MySQL y PHP forman el famoso equipo que compone los servidores LAMP (Linux, Apache, PHP y MySQL), muy populares en la Web.
PHP es un lenguaje interpretado por el servidor web para generar páginas web dinámicas. La página web no es estática, sino que se construye bajo demanda en función de diversos parámetros.
MySQL es un potente sistema de gestión de bases de datos SQL. Cuando fue comprado por Sun Microsystems, el fundador de MySQL creó un «fork» (bifurcación) llamado MariaDB. Sin embargo, MariaDB sigue siendo altamente compatible con MySQL.
MariaDB ha sido adoptada ahora por los principales actores de la comunidad de código abierto y es el sistema de gestión de bases de datos predeterminado en RHEL.
LAMP forma parte de una arquitectura clásica cliente-servidor de 3 niveles:
-
Nivel externo (vista de usuario): es la pieza final de datos que se presenta al cliente. Aquí se trata de una página web enviada por el servidor Apache.
-
Nivel conceptual: Se trata de la parte funcional, que lleva a cabo la «actividad central» de la arquitectura, realizando diversas operaciones sobre los datos en función de lo que desee el cliente. Aquí funciona mediante el lenguaje PHP y podría consistir, por ejemplo, en la visualización de fichas de clientes y presupuestos.
-
Nivel interno (almacenamiento físico): Es la parte responsable de la gestión de datos. Almacena los datos que va a procesar la aplicación empresarial. A menudo se trata de una base de datos, en este caso MySQL/MariaDB.
Los principios aquí descritos están adaptados a RHEL 7, pero pueden transponerse fácilmente a RHEL 8 o 9.
1. Instalar PHP
La instalación de PHP y del módulo Apache (mod_php) es muy sencilla:
dnf install php
Una vez instalado PHP, simplemente reinicie el servidor Apache para que tenga en cuenta el nuevo módulo.
Así podremos generar una página PHP sencilla para probar la instalación. Cree el siguiente archivo:
Archivo /var/www/html/info.php
<?php
phpinfo();
?>
A continuación, desde un cliente web, vaya al servidor web, a la página /info.php. Debería obtener una página que muestre la configuración de PHP en el sistema....
Desarrollar usando Python
1. Presentación
En cuanto a las tecnologías con las que hay que familiarizarse, tenemos que hablar de Python, un lenguaje de scripting polivalente que es una adición útil a la caja de herramientas de cualquier gestor de sistemas.
Python es un lenguaje de programación interpretado, como PHP, que no necesita ser compilado en un lenguaje que el procesador pueda entender directamente. Este lenguaje maduro, que existe desde 1991, está diseñado para ser sencillo de dominar sin dejar de ser potente.
Su versatilidad lo hace indispensable. Python puede encontrarse en aplicaciones tan diversas como:
-
Programación científica: muy popular en la comunidad científica, Python sustituye a Matlab en algunos casos porque dispone de librerías de funciones adaptadas a las ciencias para el tratamiento de datos procedentes de experimentos, matemáticas avanzadas y visualización, etc.
-
Las extensiones de software, que consisten en añadir funciones programadas en Python (como Blender, GIMP, Inkscape).
-
La herramienta de scripting web: ayudado por estructuras de desarrollo como Django, Python puede sustituir a lenguajes de scripting como PHP o JavaScript. Es así como se ha hecho un hueco entre los grandes de la Web.
-
La herramienta de scripting shell de Linux: del mismo modo que el scripting bash o sh (que también son intérpretes de comandos), Python puede ayudar a los responsables de sistemas en sus tareas cotidianas de gestión de servidores.
-
Multiplataforma: se puede encontrar en sistemas tan variados como Windows, MacOS, Android y Linux.
Es la función del lenguaje de secuencias de comandos shell la que vamos a examinar más de cerca aquí, con algunos principios básicos que hay que conocer sobre Python.
Existen dos versiones principales de Python:
-
La versión 2 (o versión legacy, heredada), está en sus últimos días, pero sigue siendo muy utilizada para scripts bien establecidos. A veces necesitará instalarla si encuentra que ciertos scripts no funcionan con la versión actual de Python.
-
La versión 3 es la versión...
DNS
1. Presentación de BIND y de DNS
El servidor BIND (Berkeley Internet Name Daemon), desarrollado bajo los auspicios del Internet Systems Consortium, es el servidor DNS más utilizado en Internet. Por ello, se ha convertido en un estándar y cada nueva versión se espera con impaciencia, sobre todo por el papel estratégico que desempeña en la red de redes.
Conceptos de DNS
Las máquinas accesibles en una red IP (normalmente Internet) tienen una dirección IP. Los humanos, en cambio, tendemos a memorizar nombres. Existen dos mecanismos para asociar una dirección IP a un nombre:
-
Cuando se devuelve una dirección IP para un nombre dado, se habla de resolución DNS. Este es el tipo de resolución más común, cuando se accede a un servidor en Internet, por ejemplo.
Ejemplo
¿Cuál es la dirección IP de la máquina www.wikipedia.org? Résolución DNS: la dirección IP de www.wikipedia.org es 91.198.174.232.
-
Cuando queremos obtener el nombre de una dirección IP conocida, utilizamos la resolución DNS inversa. Este tipo de resolución se encuentra a menudo en el resultado de un comando traceroute.
Ejemplo
¿Cuál es el nombre asociado a la dirección IP 212.27.50.197? Resolución DNS inversa: el nombre asociado a la dirección IP 212.27.50.197 es velizy-6k-1-po1.intf.routers.proxad.net.
El servicio que permite asociar un nombre a una dirección IP es el DNS (Domain Name System, Sistema de Nombres de Dominio). Las máquinas que ofrecen servicios DNS son los servidores DNS.
Esto se resuelve cuando el cliente envía una petición DNS a uno de los servidores DNS configurados localmente. Si su máquina Red Hat Enterprise Linux quiere acceder a un sitio web público, por ejemplo, envía una solicitud DNS para obtener la dirección IP a uno de los servidores DNS configurados en el archivo /etc/resolv.conf.
Su máquina Red Hat Enterprise Linux también puede ser un servidor DNS, es decir, manejar las peticiones DNS de los clientes. Puede hacerlo instalando el servidor Bind del que se habla en esta sección.
Nombre de dominio y FQDN
Un nombre de dominio se compone de dos o más partes (o segmentos) que reflejan una organización jerárquica, separadas por puntos, del tipo...
FTP
1. Presentación
FTP (File Transfer Protocol) es un protocolo de transferencia de archivos de red IP estandarizado por el IETF (Internet Engineering Task Force). Aunque es preferible utilizar protocolos de transferencia de archivos seguros como SFTP o SCP, el FTP se sigue utilizando ampliamente en Internet. Por ejemplo, Red Hat utiliza un servidor FTP para poner a disposición imágenes ISO de sus sistemas operativos, al igual que Cisco para distribuir IOS para sus enrutadores, conmutadores y cortafuegos.
Existen dos configuraciones típicas de servidor FTP:
-
Servidores anónimos, a los que cualquiera puede conectarse.
-
Servidores con autenticación: necesita un nombre de usuario/contraseña para acceder al contenido.
Para esto último, ahora es preferible utilizar SFTP, que es el equivalente de FTP con encriptación y autenticación SSH.
Entre las soluciones de servidor FTP disponibles en los sistemas Red Hat Enterprise Linux, se encuentra vsftpd (Very Secure FTP daemon, o demonio FTP muy seguro).
Este tiene varias ventajas:
-
Su autenticación se basa en PAM (Privileged Access Management), por lo que dispone de una amplia gama de métodos de autenticación. Los usuarios pueden identificarse mediante una base de datos MySQL, por ejemplo.
-
Utiliza usuarios virtuales, que no existen en el sistema operativo, sino que están vinculados a una cuenta del sistema única.
2. Configurar
a. Instalar
Para instalar vsftpd, escriba:
dnf install vsftpd
La versión de vsftpd utilizada para los ejemplos es la 3.0.3.35.
Una vez finalizada la configuración, habilite vsftpd para que se inicie al arrancar la máquina:
systemctl enable vsftpd
Después arranque el servidor manualmente con el comando:
systemctl start vsftpd
Configurar el cortafuegos
El servidor FTP utiliza los siguientes puertos para funcionar. Asegúrese de que estén abiertos en el cortafuegos:
ftp-data 20/tcp
ftp 21/tcp
b. Configurar para usuarios anónimos
La configuración predeterminada de vsftpd permite conectarse en modo anónimo y en modo usuario, utilizando...
NFS
1. Presentación
NFS (Network File System) es literalmente un sistema de archivos de red. Con NFS, una máquina puede acceder a un sistema de archivos montado en un servidor remoto y verlo como un sistema de archivos local. De este modo, los archivos remotos pasan a formar parte de la estructura de la arborescencia local del servidor.
Como NFS es un protocolo UNIX/Linux, las máquinas de este tipo suelen acceder al directorio compartido.
La versión más común de NFS es la 3, que cuenta con funciones ampliadas. La versión 4 es adecuada para su uso en Internet, ya que permite atravesar fácilmente los cortafuegos.
Por defecto, en Red Hat Enterprise Linux, NFS utiliza TCP para transportar los datos, pero también se puede utilizar UDP. En una red estable, TCP es más eficiente y fiable que UDP.
2. Configurar
a. Instalar
NFS está instalado de forma predeterminada en Red Hat Enterprise Linux.
Si este no es el caso, instale el servidor y todas las herramientas:
dnf install nfs-utils
El nombre del servicio es nfs-service.
Una vez finalizada la configuración, habilite NFS para que se inicie al arrancar la máquina:
systemctl enable nfs-server.service
Después, inicie el servidor manualmente con el comando:
systemctl start nfs-server.service
Configurar el cortafuegos
El servidor NFS utiliza los siguientes puertos para funcionar. Asegúrese de que estén abiertos en el cortafuegos:...
DHCP
1. Presentación
DHCP significa Dynamic Host Configuration Protocol (protocolo de configuración dinámica de anfitrión). Este protocolo está diseñado para configurar automáticamente los parámetros de red de una máquina que lo solicite.
El servidor DHCP contiene los parámetros de las máquinas de la red.
Una máquina configurada con DHCP solicita su configuración de red al servidor DHCP cuando arranca.
El servidor DHCP le asigna un contrato de arrendamiento DHCP: los parámetros que le proporciona serán válidos durante un periodo de tiempo determinado.
Red Hat Enterprise Linux contiene un servidor DHCP para IPv4 e IPv6.
2. Configurar
a. Instalar
El nombre del servidor DHCP es dhcpd, pero en yum se llama dhcp. Instálelo de la siguiente manera:
dnf install dhcp-server
La versión de dhcpd utilizada para los ejemplos es la 4.3.0.
Habilite el servicio dhcpd para que se inicie al arrancar:
systemctl enable dhcpd
Inicie dhcpd:
systemctl start dhcpd
Inicie dhcpd para IPv6:
systemctl enable dhcpd6
b. Archivos y directorios importantes
Ubicación |
Uso |
/etc/dhcp/dhcpd.conf |
Configuración del servidor DHCP |
/etc/dhcp/dhcpd6.conf |
Configuración del servidor DHCP en IPv6 |
/etc/sysconfig/dhcpd y dhcpd6 |
Opciones de arranque del servidor en IPv4 y en IPv6 |
/var/lib/dhcpd/dhcpd/dhcpd.leases y dhcpd6.leases |
Base de datos de arrendamientos asignados a máquinas en IPv4 y en IPv6 |
c. Configurar la puesta en marcha
La configuración de inicio del servidor DHCP en IPv4 es:
/etc/sysconfig/dhcpd...
Máquinas virtuales y contenedores
1. Virtualizar usando KVM/Qemu
a. Presentación
La virtualización es una tecnología bien conocida que permite emular máquinas y sus sistemas operativos en máquinas físicas.
Por ejemplo, en una máquina física RHEL 7, se pueden ejecutar máquinas virtuales (VM, Virtual Mahines), Windows 10 y Ubuntu.
El principio de la virtualización consiste en emular una arquitectura de hardware completa. De este modo, el sistema operativo de la máquina huésped ignora que se está ejecutando en un anfitrión físico. Los procesadores modernos incorporan conjuntos de instrucciones adaptados a la virtualización (Intel VT-x o AMD-V), lo que permite a las máquinas virtuales alcanzar un rendimiento cercano al de una máquina física.
Las ventajas de la virtualización son infinitas:
-
Reducción del número de máquinas físicas.
-
Rendimiento optimizado y mejor gestión de los recursos de hardware.
-
Gestión más sencilla y flexible (normalmente remota).
-
Despliegue masivo de aplicaciones, mayor fiabilidad.
-
Etc.
La mayoría de los servidores, especialmente los servidores web, están ahora virtualizados. Coexisten con docenas o cientos de otros, en servidores rack en centros de datos especializados. Puede arrendar fácilmente un servidor privado virtual (VPS, Virtual Private Server) por unos pocos euros en Internet.
Se pueden instalar máquinas virtuales en un PC de escritorio, por ejemplo, para probar distintos entornos.
VMware es actualmente el líder del mercado, ofreciendo virtualización para centros de datos con VMware vSphere y virtualización de equipos con VMware Player.
Sin embargo, Red Hat, siempre dispuesto a estar a la vanguardia, está apostando fuerte ofreciendo servicios similares y apoyando activamente la iniciativa KVM, que exploraremos en esta sección.
Los sistemas de virtualización, que permiten simular infraestructuras de hardware en una arquitectura física real, se conocen como hipervisores.
b. Instalar el hipervisor KVM
Antes de ejecutar KVM, puede comprobar si el procesador de su máquina está optimizado para la virtualización. Busque las cadenas vmx o svm en las especificaciones del procesador:
egrep -c '(vmx|svm)' /proc/cpuinfo
Por ejemplo:...
Conceptos de orquestación: Kubernetes/OpenShift
La contenerización basta por sí misma para poner en marcha unos cuantos servicios en unas cuantas máquinas.
Cuando los contenedores se utilizan en masa y se convierten en el centro de la estrategia corporativa, su gestión puede convertirse rápidamente en una pesadilla. Por ello, el uso de herramientas de orquestación se vuelve esencial cuando se alcanza un determinado volumen de contenedores o cuando se requiere fiabilidad.
En efecto, cuando los servicios utilizan varios contenedores repartidos en varias máquinas, resulta imposible gestionarlos individualmente. Los sistemas de orquestación de contenedores sincronizan conjuntos de contenedores interdependientes entre varios hosts, con las siguientes ventajas:
-
Los contenedores pueden lanzarse en varios hosts, ya sean máquinas físicas o virtuales.
-
Aumento o disminución del número de contenedores en función de la demanda.
-
Gestión del almacenamiento compartido entre contenedores.
-
Distribución de la carga entre contenedores.
-
Gestión de la fiabilidad, lanzando nuevos contenedores en caso de problema.
Kubernetes es probablemente la solución de orquestación de contenedores más popular. Originalmente desarrollado por Google, ahora es de código abierto y mantenido por la comunidad.
Con un ciclo de desarrollo bastante rápido y una comunidad...