Serie RHCSA: Instalación, configuración y protección 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 hacer que los archivos estén disponibles para los clientes en una red en los casos en los que no es necesaria la autenticación, ya que FTP utiliza un nombre de usuario y una 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, usaremos 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 asegurar un servidor web y un servidor FTP en RHEL 7.

Instalación de Apache y servidor FTP

En esta guía usaremos 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 se deshabilitarán inicialmente, por lo que debemos iniciarlos manualmente por el momento y habilitarlos para que comiencen automáticamente comenzando con el 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 los demonios web y ftp están escuchando, 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, encienda su navegador e ingrese la IP del servidor. Debería ver la página de prueba:

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

Configuración y protección del servidor web Apache

El archivo de configuración principal de 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 para 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, haga 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 ábralo con su editor de texto preferido y busque las siguientes variables:

  1. ServerRoot: the directory where the server’s configuration, error, and log files are kept.
  2. Listen: instructs Apache to listen on specific IP address and / or ports.
  3. Include: allows the inclusion of other configuration files, which must exist. Otherwise, the server will fail, as opposed to the IncludeOptional directive, which is silently ignored if the specified configuration files do not exist.
  4. User and Group: the name of the user/group to run the httpd service as.
  5. DocumentRoot: The directory out of which Apache will serve your documents. By default, all requests are taken from this directory, but symbolic links and aliases may be used to point to other locations.
  6. ServerName: this directive sets the hostname (or IP address) and port that the server uses to identify itself.

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 por 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á bien, reinicie el servidor web.

# systemctl restart httpd

y no olvide 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, solo puede usar 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 asegurar aún más su instalación de Apache, siga estos pasos:

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

# usermod -s /sbin/nologin tecmint

2. Deshabilite la lista de directorios para evitar que el navegador muestre el contenido de un directorio si no hay 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, esté configurada a 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 servir contenido desde su directorio/var/www/html.

Configuración y protección del 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, debería familiarizarse con el documentación y la página de manual (man vsftpd.conf) para 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 u003d YES , los usuarios locales serán (de forma predeterminada) ubicados en una cárcel con chroot en su directorio de inicio justo 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 booleano SELinux:

# setsebool -P ftp_home_dir on

Ahora puede conectarse al servidor ftp usando un cliente como Filezilla:

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

Resumen

En este tutorial hemos explicado cómo configurar una 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 lo tanto, te recomiendo que consultes también otros excelentes artículos en este sitio web sobre Apache.