Bienvenido(a) a Alcance Libre 27/09/2023, 12:06
Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1
© 1999-2016 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.
HTTP (Hypertext Transfer Protocol o Protocolo de Trasferencia de Hipertexto) es el método utilizado para transferir o transportar información a través de Internet y (WWW, World Wide Web). Su propósito original fue el proveer una forma de publicar y recuperar documentos en formato HTML.
El desarrollo del protocolo fue coordinado por World Wide Web Consortium y la IETF (Internet Engineering Task Force o Fuerza de Trabajo en Ingeniería de Internet), culminando con la publicación de varios RFC (Request For Comments), de entre los que destaca el RFC 2616, mismo que define la versión 1.1 del protocolo, que es el utilizado hoy en día.
HTTP es un protocolo de solicitud y respuesta a través de TCP, entre agentes de usuario (Navegadores, motores de índice y otras herramientas) y servidores, regularmente utilizando el puerto 80. Entre la comunicación entre éstos puede intervenir otros tipos de implementaciones, como serían servidores Intermediarios (Proxies), puertas de enlace y túneles.
URL: http://tools.ietf.org/html/rfc2616
Apache es un servidor HTTP de código fuente abierto y licenciamiento libre que funciona en Linux, sistemas operativos derivados de Unix™, Windows™, Novell™ Netware y otras plataformas. Ha desempeñado un papel muy importante en el crecimiento de Internet y continua siendo el servidor HTTP más utilizado, siendo además el servidor de facto contra el cual se realizan las pruebas comparativas y de desempeño para otros productos competidores. Es desarrollado y mantenido por una comunidad de desarrolladores auspiciada por Apache Software Foundation.
Ejecute lo siguiente:
|
Ejecute lo siguiente para incluir soporte para SSL/TLS:
|
Ejecute lo siguiente para incluir soporte para PHP y sus módulos para MySQL y PostgreSQL:
|
Ejecute lo siguiente para incluir soporte para Perl y Python:
|
Para poder realizar pruebas desde el mismo anfitrión local puede utilizar cualquier navegador —Firefox, Elinks, Lynx u Opera. A fin de poder prescindir del uso del modo gráfico y poder trabajar desde una terminal de texto, sugerimos instalar y utilizar el navegador Lynx.
|
Es necesario abrir los puertos 80/TCP (http) y 443/TCP (https).
Ejecute lo siguiente:
|
Habilite las casillas WWW (HTTP) y WWW Seguro (HTTPS) y aplique los cambios.
Habilitando HTTP y HTTPS en system-config-firewall-tui.
O bien utilice la herramienta gráfica desde el escritorio.
Habilitando HTTP y HTTPS en system-config-firewall.
Ejecute lo siguiente:
|
Guarde los cambios ejecutando lo siguiente:
|
O bien edite el archivo /etc/sysconfig/iptables:
|
Añada el siguiente contenido:
|
Reinicie el servicio iptables:
|
Edite el archivo /etc/shorewall/rules:
|
Añada el siguiente contenido:
|
Reinicie el servicio:
|
Ejecute lo siguiente para activar el servicio en todos lo niveles de ejecución:
|
Ejecute lo siguiente para iniciar el servicio:
|
Ejecute lo siguiente para reiniciar el servicio e interrumpiendo todas las conexiones establecidas en ese momento:
|
Ejecute lo siguiente para cargar los cambios en la configuración sin interrumpir el servicio y manteniendo activas todas las conexiones establecidas:
|
Ejecute lo siguiente para detener el servicio:
|
En CentOS y Red Hat™ Enterprise Linux, de modo predeterminado SELinux viene activo en modo obligatorio (enforcing). Éste añade seguridad y protección adicional. Algunas opciones impedirán utilizar ciertas funciones, como directorios virtuales fuera del directorio /var/www, directorios ~/public_html, el envío de correo electrónico desde aplicaciones basadas sobre HTTP, etc.
Desactivar por completo SELinux en un sistema operativo para servidores —en lugar de intentar aprender a utilizarlo— puede considerarse algo absolutamente irresponsable y negligente e invariablemente denotará una completa ignorancia de parte del administrador de sistemas respecto de aspectos de seguridad fundamentales en CentOS y Red Hat™ Enterprise Linux.
Ejecute lo siguiente para permitir el envío de correo electrónico a través de Apache:
|
Ejecute lo siguiente para permitir que Apache pueda leer contenidos localizados en los directorios de inicio de los usuarios locales:
|
![]() |
Estas últimas dos políticas son indispensables para el funcionamiento de cualquier cliente de correo electrónico basado sobre HTTP (Webmails). |
Ejecute lo siguiente para habilitar el uso de los directorios ~/public_html de los usuarios regulares o anfitriones virtuales asignados a usuarios regulares:
|
Ejecute lo siguiente para permitir administrar a través de FTP o FTPS cualquier directorio gestionado por Apache o bien permitir a Apache funcionar como un servidor FTP escuchando peticiones a través del puerto de FTP:
|
Ejecute lo siguiente sólo para desactivar la ejecución de guiones CGI:
|
Ejecute lo siguiente para permitir las inclusiones del lado del servidor (SSI, Server Side Includes):
|
Ejecute lo siguiente para permitir conexiones hacia bases de datos localizada en otros servidores:
|
Ejecute lo siguiente para permitir conexiones de red hacia otros servicios —como por ejemplo sieve en Round Cube Mail— locales o remotos:
|
Ejecute lo siguiente para desactivar la ejecución de PHP y otros lenguajes de programación:
|
Ejecute lo siguiente para permitir conexiones puertos de OpenStack:
|
Ejecute lo siguiente para consultar todas políticas disponibles que existen para Apache:
|
Ejecute lo siguiente para consultar estas mismas políticas junto con una breve descripción:
|
Cualquier contenido que sea puesto dentro de /var/www automáticamente heredará el contexto httpd_sys_content_t.
Para definir que un directorio fuera de /var/www —como por ejemplo /srv/www/dominio/public_html— pueda ser utilizado, se debe asignar a éste el contexto httpd_sys_content_t a través de chcon, como se muestra en el siguiente ejemplo:
|
Cualquier contenido que sea puesto dentro de /var/www/cgi-bin automáticamente heredará el contexto httpd_sys_script_exec_t.
El siguiente ejemplo define se permita utilizar un directorio distinto a /var/www/cgi-bin para ejecutar guiones CGI:
|
Ejecute lo siguiente para definir que un archivo hipotético /srv/www/dominio/public_html/leer.php pueda ser utilizado con permisos de sólo lectura de datos estando localizado fuera del directorio /var/www:
|
Ejecute lo siguiente para definir que un archivo hipotético /srv/www/dominio/public_html/escribir.php pueda ser utilizado con permisos de lectura y escritura de datos estando localizado fuera del directorio /var/www:
|
Este contexto es requerido para archivos de configuración y directorios de cache, complementos, datos, extensiones, módulos, plantillas, temas o temporales de aplicaciones como Joomla, Wordpress, Moodle, vTigerCRM, Group-Office, etc. cuando éstos utilizan componentes fuera de /var/www y se requieren permisos de lectura y escritura.
Ejecute semanage con fcontext como argumento, la opción -a, la opción -t con httpd_sys_content_t como argumento y el directorio o archivo de destino como último argumento para establecer este contexto como el predeterminado para éste:
|
Lo anterior permitirá establecer los contextos establecidos como los predeterminados para cada directorio o archivo definido. Es decir se restaurarán estos mimos contextos al ejecutar restorecon sobre estos archivos o directorios. Puede aplicarse también con cualquiera de los otros contextos descritos arriba.
Cualquier ajuste que se requiera realizar, ya sea para configurar anfitriones virtuales, u otra funcionalidad adicional, se puede realizar sin tocar el archivo principal de configuración (/etc/httpd/conf/httpd.conf), utilizando cualquier archivo con extensión *.conf dentro del directorio /etc/httpd/conf.d/.
De modo predeterminado Apache mostrará siempre la versión de éste en todas las páginas de error, de índices e informativas y permitirá utilizar el método TRACE. Este último puede permitir ataques tipo style="font-style:italic;" Cross-Site Tracing (XST) y potencialmente permitir de que un atacante pueda robar información de las cookies empleadas por las aplicaciones Web. Una excelente medida de seguridad consiste en ocultar la versión de Apache utilizada. Mientras menos información se muestre menor será el interés de un atacante potencial.
Utilice el editor de texto y genere un nuevo archivo denominado /etc/httpd/conf.d/serversignature.conf:
|
Añada el siguiente contenido:
|
Guarde los cambios y salga del editor de texto.
Recargue el servicio para que surtan efecto los cambios hechos a la configuración:
|
El siguiente ejemplo añadirá un alias para el directorio /srv/www/ejemplo/ haciendo se muestre como http://127.0.0.1/ejemplo/.
Genere primero el directorio /srv/www:
|
Cambie los contextos de SELinux para /srv/www ejecutando chcon con la opción -t con httpd_sys_content_t como argumento:
|
Ejecute lo siguiente para hacer que este contexto sea en lo sucesivo el predeterminado de este directorio:
|
Ejecute lo siguiente para crear el directorio /srv/www/ejemplo:
|
Verifique que éste heredó los mismos contextos de SELinux establecidos para /srv/www:
|
Lo anterior debe devolver una salida similar a la siguiente:
|
Utilice vi —o cualquier otro editor de texto— para crear el archivo /etc/httpd/conf.d/ejemplos.conf:
|
Añada el siguiente contenido:
|
Guarde los cambios y salga del editor de texto.
Recargue el servicio para que surtan efecto los cambios hechos a la configuración:
|
Asumiendo que realizará la prueba desde el mismo anfitrión local, visualice este nuevo directorio virtual con cualquier navegador a través de http://127.0.0.1/ejemplo/. Se mostrará que el directorio existe, pero el acceso a éste se encuentra denegado.
Realice las comprobaciones desde el anfitrión local utilizando el navegador Lynx.
|
Lo anterior deberá mostrar un error 403 (acceso denegado), pues el directorio carece de un archivo índice. Para poder acceder deberá haber un documento índice en el interior (index.html, index.php, etc) o bien que dicho directorio sea configurado para mostrar el contenido.
Edite de nuevo el archivo /etc/httpd/conf.d/ejemplos.conf:
|
Utilice el siguiente contenido:
|
La opción Indexes indica que se deberá mostrar el índice de contenido del directorio en ausencia de un archivo index.html. En Apache 2.4 se deniega el acceso a todos los directorios salvo que se indique lo contrario, razón por la cual se utiliza Require all granted.
Recargue el servicio para que surtan efecto los cambios hechos a la configuración:
|
Asumiendo que realizará la prueba desde el mismo anfitrión local, acceda hacia http://127.0.0.1/ejemplo/ con cualquier navegador y visualice el resultado.
Si se requiere que este directorio tenga aún mayor funcionalidad, se pueden añadir más opciones, como por ejemplo AllowOverride, Includes y SymLinksIfOwnerMatch, como se muestra en el siguiente ejemplo:
|
En el ejemplo anterior:
Recargue el servicio para que surtan efecto los cambios hechos a la configuración:
|
Asumiendo que realizará la prueba desde el mismo anfitrión local, acceda hacia http://127.0.0.1/ejemplo/ con cualquier navegador y visualice el resultado.
Realice las comprobaciones desde el anfitrión local utilizando el navegador Lynx.
|
Edite de nuevo el archivo /etc/httpd/conf.d/ejemplos.conf:
|
Defina algo similar a lo siguiente para limitar el acceso de un directorio que esté disponible sólo hacia ciertas direcciones IP o segmentos de red:
|
El ejemplo anterior establece que el orden de acceso, donde primero se aplicarán las reglas de denegación y luego las que permitirán el acceso y que se denegará el acceso a todo el mundo, permitiendo el acceso sólo desde 127.0.0.0/8 y 192.168.70.0/25.
Recargue el servicio para que surtan efecto los cambios hechos a la configuración:
|
Asumiendo que realizará la prueba desde el mismo anfitrión local, acceda hacia http://127.0.0.1/ejemplo/ con cualquier navegador y visualice el resultado.
Realice las comprobaciones desde el anfitrión local utilizando el navegador Lynx.
|
En Apache 2.4 la política predeterminada es denegar el acceso a todo el mundo. Para permitir el acceso a todo el mundo al directorio descrito en el ejemplo, se requiere definir lo siguiente:
|
La autenticación para directorios contra un archivo que incluya nombres de usuario y contraseñas —que también puede combinarse con el acceso por dirección IP— se realiza utilizando la siguiente sintaxis:
|
Lo anterior puede ser incluido en la configuración existente para cualquier directorio o bien en archivo .htaccess.
Genere el directorio /srv/www/privado/ ejecutando lo siguiente:
|
Genere un archivo denominado arbitrariamente /etc/httpd/conf.d/ejemplo-autenticar.conf:
|
Añada con el siguiente contenido:
|
Recargue el servicio para que surtan efecto los cambios hechos a la configuración:
|
Genere el archivo /srv/www/privado/.htaccess.
|
Agregue el siguiente contenido:
|
Ejecute lo siguiente para generar el archivo /srv/www/.htpasswd:
|
Ejecute lo siguiente para cambir los permisos de sólo lectura y escritura para usuario y asignar como propietario al usuario y grupo apache:
|
Añada algunos usuarios virtuales al /srv/www/.htpasswd ejecutando htpasswd usando como argumentos la ruta del archivo de contraseñas y nombre un usuario a añadir o modificar:
|
Realice las comprobaciones desde el anfitrión local utilizando el navegador Lynx.
|
Suelen darse los casos donde una aplicación, escrita en PHP, requiere algunas directivas de PHP en particular. En muchos casos se llegan a necesitar variables que pueden comprometer la seguridad de otras aplicaciones hospedadas en el servidor. Para tal fin es que se puede evitar modificar el archivo /etc/php.ini utilizando la opción php_flag en un archivo .htaccess. La siguiente sintaxis es la siguiente:
|
Se procederá a asignar siguientes directivas al directorio en la ruta /var/www/aplicacion, mismo que será visualizado desde Apache como http://127.0.0.1/aplicacion/:
El valor para allow_url_fopen será Off (requerido sólo por aplicaciones PHP muy antiguas o muy mal escritas), el valor para expose_php será Off, el valor para post_max_size será 256M y el valor para upload_max_filesize será 256M.
Genere el directorio /var/www/aplicacion ejecutando lo siguiente:
|
Genere el archivo /etc/httpd/conf.d/ejemplo-directivas-php.conf ejecutando lo siguiente:
|
Añada el siguiente contenido:
|
Genere el archivo /var/www/aplicacion/.htaccess realizando lo siguiente:
|
Edite el archivo /var/www/aplicacion/.htaccess:
|
Agregue el siguiente contenido:
|
Genere el archivo /var/www/aplicacion/info.php, una función que muestra toda la información acerca de PHP en el servidor, a fin de corroborar los valores de las directivas de PHP en relación al directorio, con el siguiente contenido:
|
Recargue el servicio para que surtan efecto los cambios hechos a la configuración:
|
Acceda con cualquier navegador de red hacia http://127.0.0.1/aplicacion/info.php.
Realice las comprobaciones desde el anfitrión local utilizando el navegador Lynx.
|
Corrobore que los valores para las variables de PHP para el directorio involucrado realmente han sido asignadas. En la sub-sección PHP Core de la sección Configuration, hay tres columnas. La primera, Directive, corresponde a la directivas PHP. La segunda, Local Value, corresponde a los valores de las directivas de PHP para el directorio actual. La tercera, Master Value, corresponde a los valores de las directivas predeterminadas que están definidas en el archivo /etc/php.ini.
Directive | Local Value | Master Value |
---|---|---|
post_max_size | 256M | 8M |
expose_php | Off | On |
allow_url_fopen | Off | On |
upload_max_filesize | 256M | 2M |
Última Edición: 27/03/2018, 08:10| Hits: 271,340