¿Cómo bloquear el acceso de clientes por dirección IP a ciertas URL en mi servidor web?

9

¿Cómo puedo bloquear permanentemente cualquier dirección IP que acceda a páginas vulnerables conocidas /phpMyadmin/? Estoy ejecutando un servidor Debian y a menudo veo bots o hackers escaneando mi servidor tratando de encontrar vulnerabilidades.

73.199.136.112 - - [16/Oct/2017:05:18:05 -0700] "HEAD /phpMyadmin/ HTTP/1.0" 404 182 "-" "Mozilla/5.0 Jorgee"
73.199.136.112 - - [16/Oct/2017:05:18:05 -0700] "HEAD /phpMyAdmin/ HTTP/1.0" 404 182 "-" "Mozilla/5.0 Jorgee"
73.199.136.112 - - [16/Oct/2017:05:18:05 -0700] "HEAD /phpmyAdmin/ HTTP/1.0" 404 182 "-" "Mozilla/5.0 Jorgee"
73.199.136.112 - - [16/Oct/2017:05:18:05 -0700] "HEAD /phpmyadmin2/ HTTP/1.0" 404 182 "-" "Mozilla/5.0 Jorgee"
73.199.136.112 - - [16/Oct/2017:05:18:05 -0700] "HEAD /phpmyadmin3/ HTTP/1.0" 404 182 "-" "Mozilla/5.0 Jorgee"
73.199.136.112 - - [16/Oct/2017:05:18:05 -0700] "HEAD /phpmyadmin4/ HTTP/1.0" 404 182 "-" "Mozilla/5.0 Jorgee"

Ya he seguido esta pregunta de stackoverflow: Cómo asegurar phpMyAdmin .

Estoy buscando comenzar a bloquear los bots para que no ocupen el ancho de banda.

Gato blanco
fuente
44
Esto limpiará sus archivos de registro, pero no ayudará en absoluto con la seguridad. Mantenga siempre actualizado phpmyadmin o acceda solo desde localhost (y bloquee el resto del tráfico). Para acceder al servidor remoto, haga un túnel en el puerto a través de ssh.
Stefan M
Creo que ayudará a la seguridad porque bloqueará las direcciones IP maliciosas que intentan acceder a ese sitio.
Whitecat
@Whitecat 404significa el código HTTP Page not found. ¿Cómo siente que estas IP están ofendiendo IP? ¿De acuerdo con qué salida decide bloquear estas IP?
Valentin Bajrami
Quiero bloquear la ip en función del hecho de que van a phpMyAdmin. He asegurado mi sitio y sé que cualquiera que vaya a esa página es malicioso.
Whitecat
1
¿Por qué no creas un.htpasswd
NicoX

Respuestas:

18

Esto puede ser más pesado de lo que está buscando, pero puede considerar usar fail2ban ( https://www.fail2ban.org ). Esa es una herramienta que puede monitorear sus archivos de registro y prohibir automáticamente las direcciones que generan registros que coinciden con un conjunto de patrones personalizables.

Andy Dalton
fuente
55
tbh este problema exacto fail2banestá diseñado para abordar. Es un poco pesado, pero de nuevo el criterio deseado es bastante dinámico en sí mismo. Todas las cosas consideradas fail2banson tan livianas como las que obtendrás al tratar de resolver esta clase de problemas usando una herramienta estándar.
Bratchley
1
Bueno, supongo que podría escribir un cgi binario suid-root, alojarlo como / phpmyadmin, que agrega la regla de firewall de su llamador.
Joshua
7

No lo hagas En el mejor de los casos, no logrará nada más que hacer que sus registros estén menos abarrotados; en el peor de los casos, terminará bloqueando a los visitantes legítimos que obtuvieron (a través de DHCP) una dirección IP que solía pertenecer a alguien cuya PC estaba infectada como un nodo de botnet.

El verdadero problema aquí es el desorden de registros, y se puede resolver simplemente configurando su registro para eliminar las solicitudes que se conocen como análisis de vuln para vulns que su sitio no tiene, y no tendrá, porque no está utilizando los vulnerables marcos que están buscando. Si le preocupa la pérdida completa del registro (tal vez brinden evidencia que sugiera quién fue responsable de un ataque diferente, o cuándo comenzó un ataque, etc.), entonces simplemente estrangulando múltiples entradas de registro para URL basura de una IP determinada en un corto período de tiempo Debería funcionar mejor.

R .. GitHub DEJA DE AYUDAR AL HIELO
fuente
66
fail2banlas prohibiciones son temporales: X golpes de un mal intento de inicio de sesión en Y segundos, Z minutos de bloqueo, con XY y Z configurables. Dejar caer registros de intentos de intrusión activa me parece una opción significativamente más peligrosa.
Shadur
2
en el 0.1% de posibilidades de que esto suceda, los usuarios legítimos de esta instancia de phpmyadmin deberían poder enviar un mensaje a OP para desbloquearse. Además, fail2ban puede bloquear un ataque de escaneo antes de que llegue a la vulnerabilidad sin parche o de día cero en su servidor.
Segfault
1
@Segfault: presumiblemente no hay usuarios legítimos /phymyadmin/porque /phymyadmin/no existe en el servidor (ver: 404). Por el contrario, los usuarios legítimos en cuestión son los usuarios del sitio que serían bloqueados por firewalls.
R .. GitHub DEJA DE AYUDAR AL HIELO
1
El "mejor" en realidad incluye más pruebas bloqueadas, incluidas las que podrían haber tenido éxito. Jugar con el contenido del registro también parece una buena manera de perder información cuando te das cuenta de que has cometido algún tipo de error en tu filtro. Si le preocupa el desorden de registros, entonces necesita una plataforma de análisis como ELK para examinar todo lo que le interesa.
Bratchley
2
El otro problema relacionado es el uso creciente de CGN. Un ISP puede tener cientos de clientes compartiendo una sola dirección IP, haciendo que el bloqueo de IP sea peligroso en el mejor de los casos, incluso temporales. Puede tener un usuario legítimo y un escaneo activo desde la misma dirección al mismo tiempo.
Bob
3

busque el deny 73.199.136.112archivo phpMyAdmin.conf en uno de los directorios de configuración httpd y agregue la sección permitir / denegar del archivo de configuración y una IP requerida en la sección 2.4. Puse un ejemplo del archivo de configuración completo a continuación, donde tengo las entradas a la inversa, bloqueo todo menos los segmentos IP permitidos para acceder a la herramienta.

[thebtm@server conf.d]# cat /etc/httpd/conf.d/phpMyAdmin.conf
# phpMyAdmin - Web based MySQL browser written in php
# 
# Allows only localhost by default
#
# But allowing phpMyAdmin to anyone other than localhost should be considered
# dangerous unless properly secured by SSL

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8

   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 10.10.26
       Require ip 192.168.56
       Require ip 127.0.0.1       
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 10.10.25
     Allow from 192.168.56
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

<Directory /usr/share/phpMyAdmin/setup/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

# These directories do not require access over HTTP - taken from the original
# phpMyAdmin upstream tarball
#
<Directory /usr/share/phpMyAdmin/libraries/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

<Directory /usr/share/phpMyAdmin/setup/lib/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

<Directory /usr/share/phpMyAdmin/setup/frames/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

# This configuration prevents mod_security at phpMyAdmin directories from
# filtering SQL etc.  This may break your mod_security implementation.
#
#<IfModule mod_security.c>
#    <Directory /usr/share/phpMyAdmin/>
#        SecRuleInheritance Off
#    </Directory>
#</IfModule>
thebtm
fuente
Esto es asombroso Pero el problema es que hay bots constantes de muchas IP diferentes. No puedo seguir el ritmo de cada IP diferente, ya que obtengo entre 20-30 ips maliciosos únicos por día.
Whitecat
2
Es por eso que mostré el reverso donde permites que los segmentos a los que deseas tener acceso y bloqueen automáticamente el resto.
thebtm
Alias /phpmyadmin /usr/share/phpMyAdmind /phpmyadmindebe cambiarse a otra cosa por motivos de seguridad. Alias /secret /usr/share/phpMyAdmind
nicoX
Modifiqué el archivo de configuración predeterminado que viene con la herramienta cuando lo instalé e hice algunas direcciones IP aleatorias.
thebtm