Autor Tema: Bloquear IPs o países por medio del htaccess (Wordpress)  (Leído 3805 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ELITE

  • The Communiter-
  • *
  • Mensajes: 6146
  • NEMO ME IMPUNE LACESSIT
Bloquear IPs o países por medio del htaccess (Wordpress)
« : junio 18, 2024, 11:41:06 am »
En mi post anterior les dije como había hecho mi Log en PHP implementando Geolocalización y que funciona muy bien.

Bueno, en algunos de mis clientes de Wordpress (principalmente) me ha tocado implementarlo por los ataques DoS o las peticiones maliciosas a algunos archivos en sus webs. Para ello, lo único que debemos hacer es subir tanto el archivo log404.php que contiene la lógica del log y el archivo log404.txt que es el que guardará todos los registros de la web.

Acá tenemos dos opciones, la primera es "trackear" todas las peticiones, esto carga un poco la web (pero ni se nota) y podemos hacerlo llamando desde el archivo wp-config.php a nuestro log de la siguiente manera:

Código: [Seleccionar]
<?php
// Resto del archivo 
require_once ABSPATH "log404.php";

En mi caso, prefiero y siempre lo uso desde el 404 de la web en cuestión. Porqué? Bueno, porque toda petición maliciosa irá a parar (en su mayoría) al 404 del sitio. Entonces, en Wordpress solo es ir a /webSpaceName/wp-content/themes/themeName/404.php y la ultima línea cambiarla así:

Código: [Seleccionar]
<?php
// Línea original
// get_footer();

// Nueva línea llamando al log
require_once(ABSPATH."log404.php");

get_footer();
?>


Esto nos va a crear el ya mencionado log en la raíz del sitio, con información como esta:

Código: [Seleccionar]
28/05/2024 04:03:32 - 15.235.145.161 - Singapore -  - GET - /wp-admin/js/widgets/cloud.php -  *
28/05/2024 04:03:36 - 15.235.145.161 - Singapore -  - GET - /wp-admin/css/colors/cloud.php -  *
28/05/2024 04:03:40 - 15.235.145.161 - Singapore -  - GET - /wp-admin/includes/cloud.php -  *
01/06/2024 01:36:45 - 104.244.77.158 - Luxembourg - Luxembourg - GET - /wp-login.php -  *
10/06/2024 14:59:26 - 78.111.2.100 - Iran -  - GET - /wp-login.php -  *
12/06/2024 23:56:42 - 162.144.238.177 - United States -  - GET - /wp-login.php -  *
17/06/2024 03:29:16 - 18.192.69.44 - Germany - Frankfurt am Main - GET - /vendor/phpunit/phpunit/phpunit.xsd -  *

Ya acá tenemos las IPs desde donde nos están "atacando" y es momento de bloquearlas. Para eso usaremos el archivo .htaccess de nuestra web (para el caso Wordpress).

Bloquear una IP es algo sumamente sencillo, usamos lo siguiente en el .htaccess (abajo del todo)
Código: [Seleccionar]
Deny from 15.235.145.161

Ahora, si queremos bloquear bloques completos para ya no recibir mas peticiones de esos bloques, se puede hacer así:
Código: [Seleccionar]
Deny from 15.235

En mi caso, solo llego hasta los dos bloques, nunca pongo solo el primer bloque, para ello prefiero ver de que país estan atacando y bloquearlo de una vez usando:
Código: [Seleccionar]
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SG BlockCountry
Deny from env=BlockCountry

En el caso anterior, estoy bloqueando por completo el trafico desde China y Singapur.



Ojo, esto lo he hecho sin la necesidad de los módulos (osea usando IfModule) pero dependiendo de la configuracion del servidor web, pueda que se necesite hacer uso de ellos, y para tal caso tengo el siguiente Snippet:
Código: [Seleccionar]
<IfModule mod_geoip.c>
GeoIPEnable On
</IfModule>
<IfModule mod_geoip.c>
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE KR BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE KP BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SG BlockCountry

Order allow,deny
Allow from all
Deny from env=BlockCountry
</IfModule>

Yo me he topado con varios sitios que no tienen activo o configurado el módulo mod_geoip y por eso prefiero de la primer forma que les he puesto, lo tengo implementado en muchas webs.



Por acá les dejo una lista de los Códigos de países para GeoIP así como este link para el módulo GeoIP y uno de mis favoritos How to Block IP Address with .htaccess  :yahoo:

Debo decir que he logrado bloquear por completo el trafico de X países en varios sitios de mis clientes, así que puedo dar fe que lo que les he puesto en este post funciona a la perfección :hi:

Espero le sirva a alguien  :drinks:


Imagen usada únicamente como ilustración