A web server (also known as a HTTP server) is a service that handles content (most commonly web pages, but other types of documents as well) over to a client in a network.
A FTP server is one of the oldest and most commonly used resources (even to this day) to make files available to clients on a network in cases where no authentication is necessary since FTP uses username and password without encryption.
El servidor web disponible en RHEL 7 es la versión 2.4 del Servidor HTTP Apache. En cuanto al servidor FTP, utilizaremos el Daemon de FTP Muy Seguro (también conocido como vsftpd) para establecer conexiones seguras mediante TLS.

En este artículo explicaremos cómo instalar, configurar y asegurar un servidor web y un servidor FTP en RHEL 7.
Instalando Apache y el 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, ejecuta el siguiente comando:
# yum update && yum install httpd vsftpd
Cuando la instalación se complete, ambos servicios estarán desactivados inicialmente, por lo que debemos iniciarlos manualmente por el momento y habilitarlos para que se inicien automáticamente a partir del próximo arranque:
# systemctl start httpd # systemctl enable httpd # systemctl start vsftpd # systemctl enable vsftpd
Además, debemos 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, abre tu navegador e ingresa la IP del servidor. Deberías ver la página de prueba:

En cuanto al servidor FTP, tendremos que configurarlo más adelante, lo cual haremos en un minuto, antes de confirmar que está funcionando como se espera.
Configurando y asegurando el 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 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:
- ServerRoot: el directorio donde se guardan los archivos de configuración, errores y registros del servidor.
- Listen: instruye a Apache a escuchar en una dirección IP y/o puertos específicos.
- Include: permite la inclusión de otros archivos de configuración, que 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.
- User y Group: el nombre del usuario/grupo con el que se ejecutará el servicio httpd.
- DocumentRoot: el directorio desde el cual Apache servirá sus documentos. De forma predeterminada, todas las solicitudes se toman de este directorio, pero se pueden usar enlaces simbólicos y alias para apuntar a otras ubicaciones.
- ServerName: esta directiva establece el nombre de host (o dirección IP) y el puerto que el servidor utiliza para identificarse.
La primera medida de seguridad consistirá en crear un usuario y grupo dedicados (por ejemplo, tecmint/tecmint) para ejecutar el servidor web y cambiar el puerto predeterminado por uno más alto (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
Puedes probar el archivo de configuración con
# apachectl configtest
y si todo está OK, reinicia el servidor web.
# systemctl restart httpd
y no olvides habilitar el nuevo puerto (y deshabilitar el anterior) en el firewall:
# firewall-cmd --zone=public --remove-port=80/tcp --permanent # firewall-cmd --zone=public --add-port=9000/tcp --permanent # firewall-cmd --reload
Ten en cuenta que, debido a las políticas de SELinux, solo puedes usar los puertos devueltos por
# semanage port -l | grep -w '^http_port_t'
para el servidor web.
Si deseas usar otro puerto (por ejemplo, el puerto TCP 8100), deberás agregarlo al contexto de puerto de SELinux para el servicio httpd:
# semanage port -a -t http_port_t -p tcp 8100

Para asegurar aún más tu instalación de Apache, sigue estos pasos:
1. El usuario con el que se ejecuta Apache no debería tener acceso a una shell:
# usermod -s /sbin/nologin tecmint
2. Desactiva la lista de directorios para evitar que el navegador muestre el contenido de un directorio si no hay un archivo index.html presente en dicho directorio.
Edita /etc/httpd/conf/httpd.conf
(y los archivos de configuración para los hosts virtuales, si los hay) y asegúrate de que la directiva Options, tanto en la parte superior como en los bloques de directorios, esté configurada como None:
Options None
3. Oculta información sobre el servidor web y el sistema operativo en las respuestas HTTP. Edita /etc/httpd/conf/httpd.conf
de la siguiente manera:
ServerTokens Prod ServerSignature Off
Ahora estás listo para comenzar a servir contenido desde tu directorio /var/www/html.
Configuración y seguridad del servidor FTP
Al igual que 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, debes familiarizarte con la documentación y la página del 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=YES
, los usuarios locales se colocarán (por defecto) en una cárcel chroot en su directorio principal justo después de iniciar sesión. Esto significa que los usuarios locales no podrán acceder a ningún archivo fuera de sus respectivos directorios principales.
Finalmente, para permitir que el FTP lea archivos en el directorio principal del usuario, establece el siguiente booleano de SELinux:
# setsebool -P ftp_home_dir on
Ahora puedes conectarte al servidor FTP utilizando un cliente como Filezilla:

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

Leer también: Limitar el ancho de banda de red FTP utilizado por 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 vastedad del tema, no es posible cubrir todos los aspectos de estos temas (por ejemplo, los hosts virtuales web). Por lo tanto, te recomiendo que también consultes otros excelentes artículos en este sitio web sobre Apache.
Source:
https://www.tecmint.com/rhcsa-series-install-and-secure-apache-web-server-and-ftp-in-rhel/