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:
<?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í:
<?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:
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)
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í:
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:
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:
<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 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
Espero le sirva a alguien
Imagen usada únicamente como ilustración