Búsqueda de sitios web

Serie RHCSA: Instalación, configuración y seguridad de un servidor web y FTP - Parte 9


Un servidor web (también conocido como servidor HTTP) es un servicio que maneja contenido (más comúnmente páginas web, pero también otros tipos de documentos) a un cliente en una red.

Un servidor FTP es uno de los recursos más antiguos y más utilizados (incluso hasta el día de hoy) para poner archivos a disposición de los clientes en una red en los casos en los que no es necesaria la autenticación, ya que FTP utiliza nombre de usuario y contraseña sin cifrado.

El servidor web disponible en RHEL 7 es la versión 2.4 del servidor HTTP Apache. En cuanto al servidor FTP, utilizaremos el Very Secure Ftp Daemon (también conocido como vsftpd) para establecer conexiones protegidas por TLS.

En este artículo explicaremos cómo instalar, configurar y proteger un servidor web y un servidor FTP en RHEL 7.

Instalación de Apache y servidor FTP

En esta guía utilizaremos un servidor RHEL 7 con una dirección IP estática de 192.168.0.18/24. Para instalar Apache y VSFTPD, ejecute el siguiente comando:


yum update && yum install httpd vsftpd

Cuando se complete la instalación, ambos servicios estarán deshabilitados inicialmente, por lo que debemos iniciarlos manualmente por el momento y habilitarlos para que se inicien automáticamente a partir del siguiente inicio:


systemctl start httpd
systemctl enable httpd
systemctl start vsftpd
systemctl enable vsftpd

Además, tenemos que abrir los puertos 80 y 21, donde escuchan los demonios web y ftp, respectivamente, para permitir el acceso a esos servicios desde el exterior:


firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-service=ftp --permanent
firewall-cmd --reload

Para confirmar que el servidor web está funcionando correctamente, inicie su navegador e ingrese la IP del servidor. Deberías ver la página de prueba:

En cuanto al servidor ftp, tendremos que configurarlo más, lo cual haremos en un minuto, antes de confirmar que está funcionando como se esperaba.

Configuración y seguridad del servidor web Apache

El archivo de configuración principal para Apache se encuentra en /etc/httpd/conf/httpd.conf, pero puede depender de otros archivos presentes dentro de /etc/httpd. /conf.d.

Aunque la configuración predeterminada debería ser suficiente en la mayoría de los casos, es una buena idea familiarizarse con todas las opciones disponibles como se describe en la documentación oficial.

Como siempre, haz una copia de seguridad del archivo de configuración principal antes de editarlo:


cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.$(date +%Y%m%d)

Luego ábrelo con tu editor de texto preferido y busca las siguientes variables:

  1. ServerRoot: el directorio donde se guardan los archivos de configuración, errores y registro del servidor.
  2. Escuchar: indica a Apache que escuche en direcciones IP y/o puertos específicos.
  3. Incluir: permite la inclusión de otros archivos de configuración, los cuales deben existir. De lo contrario, el servidor fallará, a diferencia de la directiva IncludeOptional, que se ignora silenciosamente si los archivos de configuración especificados no existen.
  4. Usuario y grupo: el nombre del usuario/grupo para ejecutar el servicio httpd.
  5. DocumentRoot: el directorio desde el cual Apache entregará sus documentos. De forma predeterminada, todas las solicitudes se toman de este directorio, pero se pueden utilizar enlaces simbólicos y alias para señalar otras ubicaciones.
  6. ServerName: esta directiva establece el nombre de host (o dirección IP) y el puerto que utiliza el servidor para identificarse.

La primera medida de seguridad consistirá en crear un usuario y un grupo dedicados (es decir, tecmint/tecmint) para ejecutar el servidor web y cambiar el puerto predeterminado a uno superior (9000 en este caso):


ServerRoot "/etc/httpd"
Listen 192.168.0.18:9000
User tecmint
Group tecmint
DocumentRoot "/var/www/html"
ServerName 192.168.0.18:9000

Puede probar el archivo de configuración con.


apachectl configtest

y si todo está OK, reinicie el servidor web.


systemctl restart httpd

y no olvides habilitar el nuevo puerto (y deshabilitar el antiguo) en el firewall:


firewall-cmd --zone=public --remove-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload

Tenga en cuenta que, debido a las políticas de SELinux, sólo puede utilizar los puertos devueltos por


semanage port -l | grep -w '^http_port_t'

para el servidor web.

Si desea utilizar otro puerto (es decir, el puerto TCP 8100), deberá agregarlo al contexto del puerto SELinux para el servicio httpd:


semanage port -a -t http_port_t -p tcp 8100

Para proteger aún más su instalación de Apache, siga estos pasos:

1. El usuario que Apache está ejecutando no debería tener acceso a un shell:


usermod -s /sbin/nologin tecmint

2. Deshabilite el listado de directorios para evitar que el navegador muestre el contenido de un directorio si no hay ningún index.html presente en ese directorio.

Edite /etc/httpd/conf/httpd.conf (y los archivos de configuración para hosts virtuales, si los hay) y asegúrese de que la directiva Opciones, tanto en la parte superior como en los niveles de bloque de directorio, se establece en Ninguno:


Options None

3. Ocultar información sobre el servidor web y el sistema operativo en las respuestas HTTP. Edite /etc/httpd/conf/httpd.conf de la siguiente manera:


ServerTokens Prod 
ServerSignature Off

Ahora está listo para comenzar a publicar contenido desde su directorio /var/www/html.

Configurar y proteger el servidor FTP

Como en el caso de Apache, el archivo de configuración principal para Vsftpd (/etc/vsftpd/vsftpd.conf) está bien comentado y aunque la configuración predeterminada debería ser suficiente para la mayoría de las aplicaciones , debe familiarizarse con la documentación y la página de manual (man vsftpd.conf) para poder operar el servidor ftp de manera más eficiente (¡no puedo enfatizar eso lo suficiente!).

En nuestro caso, estas son las directivas utilizadas:


anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

Al usar chroot_local_user=YES, los usuarios locales serán (de forma predeterminada) colocados en una cárcel chroot en su directorio de inicio inmediatamente después de iniciar sesión. Esto significa que los usuarios locales no podrán acceder a ningún archivo fuera de sus directorios de inicio correspondientes.

Finalmente, para permitir que ftp lea archivos en el directorio de inicio del usuario, configure el siguiente valor booleano SELinux:


setsebool -P ftp_home_dir on

Ahora puedes conectarte al servidor ftp usando un cliente como Filezilla:

Tenga en cuenta que el registro /var/log/xferlog registra las descargas y cargas, lo que coincide con la lista de directorios anterior:

Lea también: Limite el ancho de banda de la red FTP utilizado por las aplicaciones en un sistema Linux con Trickle

Resumen

En este tutorial hemos explicado cómo configurar un servidor web y un servidor ftp. Debido a la amplitud del tema, no es posible cubrir todos los aspectos de estos temas (es decir, servidores web virtuales). Por ello, te recomiendo que consultes también otros excelentes artículos en esta web sobre Apache.