Poll

Navegador predeterminado de ALDOS

¿Cuál debe ser el navegador predeterminado en ALDOS?

  •  Firefox (opción actual)
  •  Qupzilla
  •  Otter Browser
  •  Seamonkey
  •  Chromium

Resultados
Other polls | 1,379 voters | 1 comentarios

Conectados...

Usuarios invitados: 454

Bienvenido(a) a Alcance Libre 27/09/2023, 12:06

Configuración básica de Apache.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: https://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

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.

Introducción.

Acerca del protocolo HTTP.

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

Acerca de Apache.

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.

URL: http://www.apache.org/

Equipamiento lógico necesario.

En CentOS y Red Hat™ Enterprise Linux.

Ejecute lo siguiente:

yum -y install httpd

Ejecute lo siguiente para incluir soporte para SSL/TLS:

yum -y install mod_ssl

Ejecute lo siguiente para incluir soporte para PHP y sus módulos para MySQL y PostgreSQL:

yum -y install php php-mysql php-pgsql

Ejecute lo siguiente para incluir soporte para Perl y Python:

yum -y install mod_perl mod_wsgi

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.

yum -y install lynx

Modificaciones necesarias en el muro cortafuegos.

Es necesario abrir los puertos 80/TCP (http) y 443/TCP (https).

Utilizando system-config-firewall.

Ejecute lo siguiente:

system-config-firewall-tui

Habilite las casillas WWW (HTTP) y WWW Seguro (HTTPS) y aplique los cambios.

Habilitando HTTP y HTTPS en system-config-firewall-tui.
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.
Habilitando HTTP y HTTPS en system-config-firewall.

Servicio iptables.

Ejecute lo siguiente:

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

Guarde los cambios ejecutando lo siguiente:

service iptables save

O bien edite el archivo /etc/sysconfig/iptables:

vi /etc/sysconfig/iptables

Añada el siguiente contenido:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

Reinicie el servicio iptables:

service iptables restart

Shorewall.

Edite el archivo /etc/shorewall/rules:

vi /etc/shorewall/rules

Añada el siguiente contenido:

#ACTION    SOURCE    DEST    PROTO     DEST    SOURCE #        PORT    PORT(S)1
ACCEPT    all    fw    tcp    80,443

Reinicie el servicio:

service shorewall restart

Iniciar servicio y añadirlo al arranque del sistema.

Ejecute lo siguiente para activar el servicio en todos lo niveles de ejecución:

chkconfig httpd on

Ejecute lo siguiente para iniciar el servicio:

service httpd start

Ejecute lo siguiente para reiniciar el servicio e interrumpiendo todas las conexiones establecidas en ese momento:

service httpd restart

Ejecute lo siguiente para cargar los cambios en la configuración sin interrumpir el servicio y manteniendo activas todas las conexiones establecidas:

service httpd reload

Ejecute lo siguiente para detener el servicio:

service httpd stop

SELinux y Apache.

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.

Políticas más utilizadas.

Ejecute lo siguiente para permitir el envío de correo electrónico a través de Apache:

setsebool -P httpd_can_sendmail 1

Ejecute lo siguiente para permitir que Apache pueda leer contenidos localizados en los directorios de inicio de los usuarios locales:

setsebool -P httpd_read_user_content 1


Nota.

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:

setsebool -P httpd_enable_homedirs 1

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:

setsebool -P httpd_enable_ftp_server 1

Ejecute lo siguiente sólo para desactivar la ejecución de guiones CGI:

setsebool -P httpd_enable_cgi 0

Ejecute lo siguiente para permitir las inclusiones del lado del servidor (SSI, Server Side Includes):

setsebool -P httpd_ssi_exec 1

Ejecute lo siguiente para permitir conexiones hacia bases de datos localizada en otros servidores:

setsebool -P httpd_can_network_connect_db 1

Ejecute lo siguiente para permitir conexiones de red hacia otros servicios —como por ejemplo sieve en Round Cube Mail— locales o remotos:

setsebool -P httpd_can_network_connect 1

Ejecute lo siguiente para desactivar la ejecución de PHP y otros lenguajes de programación:

setsebool -P httpd_builtin_scripting 0

Ejecute lo siguiente para permitir conexiones puertos de OpenStack:

setsebool -P httpd_use_openstack 1

Ejecute lo siguiente para consultar todas políticas disponibles que existen para Apache:

getsebool -a |grep httpd

Ejecute lo siguiente para consultar estas mismas políticas junto con una breve descripción:

semanage boolean -l |grep httpd

Contextos más utilizados.

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:

chcon -t httpd_sys_content_t /srv/www/dominio/public_html

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:

chcon -t httpd_sys_script_exec_t /srv/www/dominio/cgi-bin

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:

chcon -t httpd_sys_script_ro_t /srv/www/dominio/public_html/leer.php

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:

chcon -t httpd_sys_script_rw_t /srv/www/dominio/public_html/escribir.php

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:

semanage fcontext -a -t httpd_sys_rw_content_t \
     /srv/www/dominio/public_html/leer.php

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.

Procedimientos.

Archivos de configuración.

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/.

Ocultar la versión de Apache.

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:

vi /etc/httpd/conf.d/serversignature.conf

Añada el siguiente contenido:

ServerSignature Off
ServerTokens Prod
TraceEnable Off

Guarde los cambios y salga del editor de texto.

Recargue el servicio para que surtan efecto los cambios hechos a la configuración:

service httpd reload

Directorios virtuales.

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:

mkdir -p /srv/www

Cambie los contextos de SELinux para /srv/www ejecutando chcon con la opción -t con httpd_sys_content_t como argumento:

chcon -t httpd_sys_content_t /srv/www

Ejecute lo siguiente para hacer que este contexto sea en lo sucesivo el predeterminado de este directorio:

semanage fcontext -a -t httpd_sys_content_t /srv/www

Ejecute lo siguiente para crear el directorio /srv/www/ejemplo:

mkdir -p /srv/www/ejemplo

Verifique que éste heredó los mismos contextos de SELinux establecidos para /srv/www:

ls -Z /srv/www

Lo anterior debe devolver una salida similar a la siguiente:

drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 ejemplo

Utilice vi —o cualquier otro editor de texto— para crear el archivo /etc/httpd/conf.d/ejemplos.conf:

vi /etc/httpd/conf.d/ejemplos.conf

Añada el siguiente contenido:

Alias /ejemplo /srv/www/ejemplo

Guarde los cambios y salga del editor de texto.

Recargue el servicio para que surtan efecto los cambios hechos a la configuración:

service httpd reload

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.

lynx http://127.0.0.1/ejemplo/

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:

vi /etc/httpd/conf.d/ejemplos.conf

Utilice el siguiente contenido:

Alias /ejemplo /srv/www/ejemplo
<Directory "/srv/www/ejemplo">
    Options Indexes
    Require local
    Require all granted

</Directory>

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:

service httpd reload

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:

Alias /ejemplo /srv/www/ejemplo
<Directory "/srv/www/ejemplo">
    Options Indexes Includes SymLinksIfOwnerMatch
    AllowOverride all
    Require local
    Require all granted

</Directory>

En el ejemplo anterior:

  • La opción SymLinksIfOwnerMatch habilita el uso de enlaces simbólicos dentro del directorio sólo si los destinos de éstos pertenecen al mismo usuario. Sólo utilice ésta si necesita acceder a contenidos fuera del directorio a utilizar.
  • La opción Includes especifica que se permite la utilización de los SSI (Server Side Includes). Sólo utilice ésta si así lo requiere la aplicación o programa utilizado dentro este directorio.
  • La opción AllowOverride, con el valor all posibilita utilizar archivos .htaccess, los cuales a su vez permiten aplicar opciones de directorio al vuelo, sin necesidad de modificar otros archivos de configuración.

Recargue el servicio para que surtan efecto los cambios hechos a la configuración:

service httpd reload

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.

lynx http://127.0.0.1/ejemplo/

Limitar el acceso a directorios por dirección IP.

Edite de nuevo el archivo /etc/httpd/conf.d/ejemplos.conf:

vi /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:

Alias /ejemplo /srv/www/ejemplo
<Directory "/srv/www/ejemplo">
    Require local
    Require ip 192.168.70.0/25

    Options Indexes
</Directory>

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:

service httpd reload

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.

lynx http://127.0.0.1/ejemplo/

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:

Alias /ejemplo /srv/www/ejemplo
<Directory "/srv/www/ejemplo">
    Require local
    Require all granted

    Options Indexes
</Directory>

Limitar el acceso por usuario y contraseña.

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:

AuthName "Mensaje de bienvenida sin acentos ni tildes"
AuthType Basic
Require valid-user
AuthUserFile /cualquier/archivo/de/contraseñas

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:

mkdir -p /srv/www/privado

Genere un archivo denominado arbitrariamente /etc/httpd/conf.d/ejemplo-autenticar.conf:

vi /etc/httpd/conf.d/ejemplo-autenticar.conf

Añada con el siguiente contenido:

Alias /privado /srv/www/privado
<Directory "/srv/www/privado">
    Options Indexes
    AllowOverride All
</Directory>

Recargue el servicio para que surtan efecto los cambios hechos a la configuración:

service httpd reload

Genere el archivo /srv/www/privado/.htaccess.

vi /srv/www/privado/.htaccess

Agregue el siguiente contenido:

AuthName "Solamente usuarios autorizados"
AuthType Basic
Require valid-user
AuthUserFile /srv/www/.htpasswd

Ejecute lo siguiente para generar el archivo /srv/www/.htpasswd:

touch /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:

chmod 600 /srv/www/.htpasswd
chown apache:apache /srv/www/.htpasswd

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:

htpasswd /srv/www/.htpasswd juan
htpasswd /srv/www/.htpasswd pedro
htpasswd /srv/www/.htpasswd hugo
htpasswd /srv/www/.htpasswd luis

Realice las comprobaciones desde el anfitrión local utilizando el navegador Lynx.

lynx http://127.0.0.1/privado/

Reasignación de directivas para PHP.

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:

php_flag directiva_php valor

Ejemplo

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/:

  • allow_url_fopen: permite hacer descargas desde PHP. Útil para actualizar aplicaciones como Joomla. El valor predeterminado es On
  • expose_php: define si se muestra u oculta que PHP está instalado en el servidor. El valor predeterminado es On.
  • post_max_size: define el tamaño máximo de los datos enviados a través de las operaciones POST del servidor HTTP. El valor predeterminado es 8 MiB.
  • upload_max_filesize: tamaño máximo de los datos a subir al servidor a través de PHP. El valor predeterminado es 2 MiB.

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:

mkdir /var/www/aplicacion

Genere el archivo /etc/httpd/conf.d/ejemplo-directivas-php.conf ejecutando lo siguiente:

vi /etc/httpd/conf.d/ejemplo-directivas-php.conf

Añada el siguiente contenido:

Alias /aplicacion /var/www/aplicacion
<Directory "/var/www/aplicacion">
    AllowOverride All
</Directory>

Genere el archivo /var/www/aplicacion/.htaccess realizando lo siguiente:

touch /var/www/aplicacion/.htaccess

Edite el archivo /var/www/aplicacion/.htaccess:

vi /var/www/aplicacion/.htaccess

Agregue el siguiente contenido:

php_flag allow_url_fopen Off
php_value post_max_size 256M
php_flag expose_php Off
php_value upload_max_filesize 256M

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:

<?php
     phpinfo();
?>

Recargue el servicio para que surtan efecto los cambios hechos a la configuración:

service httpd reload

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.

lynx http://127.0.0.1/aplicacion/info.php

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.

DirectiveLocal ValueMaster 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