Registro de acceso de Apache

Registro de acceso de Apache

Utilizo fail2ban para detectar solicitudes maliciosas a cualquiera de mis dominios alojados, lo cual funciona muy bien, con una excepción.

Si se envía una solicitud a la IP en lugar de a un fqdn o un subdominio, se detecta y se escribe en other_vhosts_access.log ya que la IP en sí no es un host virtual.

Entrada de ejemplo:

somedomain.de:80 20.37.96.167 - - [24/ene/2020:15:47:04 +0100] "POST //4walls/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/ 1,1" 301 587 "https://www.google.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/79.0.3945.88 Safari/537.36"

Al parecer, Apache realiza una búsqueda inversa de la IP y escribe el nombre de host en primer lugar.

Esto hace que fail2ban bloquee automáticamente la IP del servidor en lugar de la IP del solicitante.

¿Cómo puedo evitar la entrada somedomain.de:80?

Respuesta1

Apache realiza una búsqueda inversa de la IP y escribe el nombre del host en primer lugar.

Si su filtro se realizó correctamente (por ejemplo, expresiones regulares ancladas sin términos generales), no importa dónde estén escritos exactamente el dominio y la dirección extranjera.

Supongo que en la entrada de registro de su ejemplo, somedomain.dees suya y 20.37.96.167es una dirección de "intruso". Entonces la expresión de error adecuada se vería así:

# ban everything (with code 300-599):
failregex = ^\S+\s+<ADDR>\s+\S+\s+\S+\s+\[\]\s+"[^\"]+" [345]\d+

La parte anclada ^\S+\s+<ADDR>coincide somedomain.de:80 20.37.96.167y buscaría en la cadena desde el principio solo debido al ancla ^.
Esto también sería suficiente como expresión regular, si tiene que prohibir todo other_vhosts_access.log(independientemente del estado http resultante).

Si tiene una versión de fail2ban <= 0.9, use <HOST>en lugar de <ADDR>.

También puedes comprobar fail2ban-regexsi capturaría algunos falsos positivos, por ejemplo:

fail2ban-regex --raw -vv /path/to/log '^\S+\s+<ADDR>\s+\S+\s+\S+\s+\[\]\s+"[^\"]+" [345]\d+' \
  | grep <your-IP-or-hostname>

información relacionada