Apache

  • Un miembro de la comunidad Linux en español (castellano) en Google Plus preguntaba cómo podía saber cuándo fue la última vez que se reinició el servidor Web Apache. He aquí la respuesta.

  • En este artículo voy a describir técnicas y herramientas para llevar a cabo un análisis forense de un archivo (o archivos) de log de un servidor Web Apache o Nginx.

  • El objetivo de este artículo es demostrar de qué forma es posible obtener un listado de módulos de Apache que se encuentran actualmente cargados y cuales se encuentran disponibles.

    La mayoría de las funcionalidades del servidor HTTP Apache son provistas a través de módulos. Un módulo puede ser estático (static) o compartido (shared). Un módulo estático se incluye en el binario de Apache en tiempo de compilación, por lo que siempre está disponible. Un modulo compartido se carga en tiempo de ejecución mediante una directiva LoadModule en la configuración de Apache. Esto implica que es posible instalar un módulo compartido en un sistema, pero que no sea cargado por Apache (por lo tanto no sea utilizable).

  • Este artículo explica cómo configurar Apache para que todos los pedidos sean redireccionados a un mismo dominio, "http://ejemplo.com".

  • Esta semana tuve que desarrollar una solución para descargar un backup fresco a través de HTTP. Se trata de una de esas manganetas que lamentablemente uno tiene que implementar, sobre uno de esos sistemas que uno quisiera no administrar, para esos clientes que uno quisiera no tener. Sin embargo, cuando uno tiene una mentalidad positiva cuenta con la certeza de que de todo lo malo se puede sacar algo bueno, como por ejemplo: aprender algo nuevo.

  • Este artículo explica cómo modificar el conjunto de caracteres utilizado para determinados tipos de archivo (de acuerdo a la extensión) en las respuestas a peticiones de servidor Web Apache, mediante un archivo de configuración .htaccess.

  • Supongamos que tenemos un servidor Web LAMP (típicamente Linux+Apache+PHP+MySQL/MariaDB) con Apache y diferentes versiones de PHP instaladas y necesitamos cambiar la versión de PHP en uso por Apache (por ejemplo necesitamos pasar de PHP 5.6 a PHP 7.0). Este artículo explica los simples pasos para llevar a cabo esta tarea.

  • Siempre que terminamos de configurar un servidor LAMP (Linux+Apache+MySQL+PHP en general), es necesario hacer una prueba para verificar su correcto funcionamiento. Por ello, en este artículo dejo un script PHP para interactuar con una base de datos MySQL, junto con un script para crear una base de datos MySQL de prueba, como para tener siempre a mano.

  • Esta semana tuve la necesidad de habilitar SSL en un servidor Web que aloja diferentes dominios (cada uno con su certificado SSL/TLS provisto por Let's Encrypt). El problema es que este servidor Web posee una única dirección IP a la cual resuelven todos los nombres de host de los diferentes dominios y sitios Web hospedados en el mismo.

    Tradicionalmente sólo se podía habilitar SSL en un sitio Web si éste estaba ligado a una y sólo una dirección IP en particular. Esto era una limitación muy grande pues si, por ejemplo, necesitaba habilitar SSL en 3 sitios Web diferentes, necesitaba 3 direcciones IP dedicadas a cada uno.

    Afortunadamente, con la llegada de Apache 2.2.12 en 2009 se agregó el soporte para SNI (Server Name Indication). SNI es una extensión del protocolo TLS a través de la cual los clientes le indican al servidor el nombre de host al cual están tratando de conectarse, para que éste les envíe el certificado correspondiente. De esta forma es posible tener múltiples certificados asociados a diferentes nombres de host en una misma dirección IP. Por supuesto los clientes deben soportar esta extensión.

    Actualmente la mayoría de los clientes soportan esta extensión, a excepción de unas pocas librerías y sistemas operativos cuasi-obsoletos como Symbian o Blackberry OS, al igual que el navegador de línea de comandos ELinks.

    Gracias a SNI es posible configurar sitios HTTPS basados en nombre, de la misma forma en que se configuran sitios HTTP basados en nombre (VirtualHosts).

  • Este artículo explica cómo configurar SSL para implementar HTTPS en un servidor Web Apache sobre sistemas Debian/Devuan y derivados. En la actualidad es imprescindible contar con soporte para HTTPS en nuestros sitios Web, ya que Google desde hace un par de años está poniendo el foco en la seguridad en Internet (de hecho la considera una de las principales prioridades) y el buscador valora el soporte para HTTPS como un factor de peso al momento de posicionar.

  • Hoy estaba revisando un log de Apache en busca de una serie de eventos anormales que detecté con Grafana, y me topé con una tonelada de entradas producidas por collectd:

    [root@centos ~]# less /var/log/httpd/access_log
    localhost - - [11/Nov/2018:03:48:47 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:48:56 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:49:06 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:49:16 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:49:26 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:49:36 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:49:46 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:49:56 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:50:06 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:50:16 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:50:26 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:50:36 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:50:46 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:50:56 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:51:06 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:51:16 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:51:26 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:51:36 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:51:46 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:51:56 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:52:06 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:52:16 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:52:26 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:52:36 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:52:46 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:52:56 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:53:06 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    localhost - - [11/Nov/2018:03:53:16 -0300] "GET /apache_status?auto HTTP/1.1" 200 299 "-" "collectd/5.8.0"
    

    Veamos cómo configurar Apache para que no registre en el log los accesos desde localhost.

  • Por culpa del referral spam, ya no es posible confiar en los datos relacionados a fuentes de tráfico provistos por Google Analytics. Al menos ya no es una fuente de datos confiable y precisa, pues nuestras cuentas de Analytics están plagadas de spam.

    Cabe recordar que el referral spam en cuentas de Google Analytics no afecta al sitio Web, es decir no se trata de tráfico hacia nuestro sitio, sino que es tráfico malicioso hacia los servidores de Google que recopilan datos para Analytics. Por ello, si necesitamos datos confiables acerca del tráfico efectivo hacia nuestro sitio Web, no queda otra alternativa que extraerlos desde los logs de acceso del servidor Web, ya sea Apache, Nginx u otro.

  • En Apache, la funcionalidad necesaria para interpretar scripts Python la provee el módulo "mod_python".

    mod_python es un módulo que embebe el intérprete python en el servidor Web Apache. Permite escribir aplicaciones Web en Python que se ejecuten más rápido que el tradicional CGI y tengan acceso a características avanzadas tales como la capacidad de retener conexiones a bases de datos, datos entre accesos y características internas de Apache.

  • Apache Tomcat (o simplemente Tomcat, anteriormente conocido como Jakarta Tomcat) es un servidor web y servlet container Open Source desarrollado por la fundación Apache (Apache Software Foundation). Tomcat implementa las especificaciones de Java Servlet y JavaServer Pages (JSP) de Sun Microsystems, y provee un entorno de servidor Web HTTP donde el código Java pueda ejecutar.

    Debido a que el servidor Tomcat no posee soporte para HTTPS, el objetivo de este artículo es demostrar cómo implementar un proxy reverso (implementado utilizando Apache) para dar soporte HTTPS a Tomcat. La comunicación entre Apache y Tomcat se realiza a través del conector "mod_jk", el cual se instala como un módulo de Apache.

  • Apache, más precisamente Apache HTTP Server, es un servidor Web multiplataforma seguro, eficiente y extensible de código abierto. Provee la funcionalidad suficiente para cubrir todos los requisitos especificados por los estándares del protocolo HTTP actual.

  • Supongamos que hemos comprado un VPS (servidor privado virtual) con Debian/Devuan para montar nuestro sitio Web, y ya hemos instalado y comprobado el correcto funcionamiento de una pila LAMP (Linux+Apache+PHP+MySQL). Ahora deseamos instalar Joomla! para montar nuestro sitio Web. Este artículo demuestra los simples pasos de instalación de Joomla! en un servidor LAMP con Debian.

  • ModSecurity es un módulo para servidores HTTP cuyo propósito es reforzar la seguridad de las aplicaciones Web. Es efectivamente un sistema de prevención y detección de intrusos para servidores Web.

  • En el artículo de ayer expliqué cómo implementar una lista negra de dominios para evitar el hotlinking. Pido disculpas por no explicar detalladamente de qué se trata esto del "hotlinking", pero no tengo ganas de explicarlo y existe una entrada en Wikipedia que lo explica claramente. Ya expuse mi opinión acerca de por qué no es conveniente utilizar una lista blanca. Pero para reforzar la idea, está el caso de las redes sociales descentralizadas (por ejemplo Diaspora*). Las redes sociales descentralizadas no poseen un único dominio, sino cientos (o miles). Esto hace que sea imposible determinar ni predecir desde qué dominios se hará hotlinking "válido". Válido porque no queremos impedir el hotlinking desde redes sociales, para lograr que nuestros artículos se vean de forma correcta (la imagen de nuestro sitio artículo que agregan las redes sociales al momento de compartir un link).

    Ahora bien, implementar una lista negra es simple, lo difícil es determinar quiénes son los ladrones que nos están robando (además de contenido) ancho de banda. Para ello, sólo se puede recurrir a los logs de acceso del servidor Web.

  • En este artículo comparto un sencillo script Bash que desarrollé para calcular el uptime (el tiempo que ha transcurrido desde que ha iniciado) de un servidor HTTP Apache. No confundir con el uptime del sistema operativo (tiempo transcurrido desde que ha iniciado el sistema, se obtiene con el comando uptime), sino que se trata de obtener el tiempo que lleva en ejecución el servicio "apache2" (el cual puede ser mucho menor al del sistema operativo si el servicio ha sido reiniciado).

  • Este artículo explica cómo habilitar y deshabilitar el listado de directorios en un servidor Web Apache.