Añadir más seguridad a nuestro servidor Web
Categorías : PHP, HTML, Programación, Servidores, .htaccess.

Hoy mirando los logs de mi servidor web, me he encontrado con que algún iluminado ha intentado acceder a mi página web pensándose que esta funcionaba bajo word press.
No es la primera vez que comento que alguien intenta entrar a la zona de administración de mi página web, y probablemente no será la última. Por ello hoy me he propuesto ilustrar un poco por encima, como podemos disuadir a estos iluminados que por aburrimiento se dedican a cargarse el trabajo de otros.
En este mundo nada es 100% seguro, por ello nunca viene mal añadir algunos mecanismos que dificulten aun más la tarea de romper la seguridad de nuestros servidores.
Me imagino que no debo ser el único que recibe este tipo de ataques, ya que me extraña muchísimo que una web como la mía sufra este tipo de cosas con bastante regularidad. Por lo que supongo que deben ser ataques automatizados, o de lo contrario, alguien me quiere mucho...
Lo que propongo en este artículo es banear a los usuarios que intenten acceder a carpetas y o archivos que son famosos por ser archivos de configuración / paneles de control.
Como podemos banear a estos usuarios? en los servidores php existe la posibilidad de crear un archivo de configuración llamado ".htaccess" el cual nos permite entre otras cosas denegar el acceso a nuestra web a las ips especificadas. Veamos un ejemplo :
<Limit GET>order allow,denydeny from 213.5.64.19 #spamer conocidoallow from all</Limit>
Para banear una IP debemos tener las lineas 1,2,4,5 siempre fijas, y entre medio (en este caso la linea 3) añadir el comando "deny from IP". Podemos añadir tantas ips como queramos, y tambien deberíais saber que la parrilla '#' se usa para insertar comentarios.
Ahora vamos a meternos en la piel de un hacker que desea acceder a nuestra web, el no sabe realmente desde donde acceder a la web, por lo que tiene que ir probando métodos conocidos, como por ejemplo entrar en la carpeta "admin" y ver si existe, y ver si puede hacer algo desde ella.
Aunque nosotros no tengamos dicha carpeta admin, si baneamos a ese usuario al probar de entrar en la carpeta 'admin' nos ahorraremos sus siguientes pruebas, y este se verá obligado a cambiar de IP para saltarse el baneo, a la que lleve 10 veces haciendo esto es posible que desista y busque otro objetivo mas fácil que nuestra web.
He elaborado una lista con los directorios / archivos en los que suelen mirar basada en mi propia experiencia :
/muieblackcat/ |
/admin/ |
/admin/pma/ |
/db/ |
/dbadmin/ |
/myadmin/ |
/mysql/ |
/mysqladmin/ |
/typo3/phpmyadmin/ |
/phpadmin/ |
/phpMyAdmin/ |
/phpmyadmin/ |
/phpmyadmin1/ |
/phpmyadmin2/ |
/pma/ |
/web/phpMyAdmin/ |
/xampp/phpmyadmin/ |
/websql/ |
/phpMyAdmin-2/ |
/php-my-admin/ |
/phpMyAdmin-2.2.3/ |
/phpMyAdmin-2.2.6/ |
/phpMyAdmin-2.5.1/ |
/phpMyAdmin-2.5.4/ |
/phpMyAdmin-2.5.5-rc1/ |
/phpMyAdmin-2.5.5-rc2/ |
/phpMyAdmin-2.5.5-pl1/ |
/phpMyAdmin-2.5.6-rc1/ |
/phpMyAdmin-2.5.6-rc2/ |
/phpMyAdmin-2.5.6/ |
/phpMyAdmin-2.5.7/ |
/phpMyAdmin-2.5.7-pl1/ |
/wp-login.php |
/blog/wp-login.php |
/wordpress/wp-login.php |
/wp/wp-login.php |
Yo recomiendo bloquear todos estos directorios y archivos, y si resulta que vuestro servidor tiene archivos para la configuración de vuestro sitio en alguna de estas ubicaciones os recomendaría que cambiéis su nombre de alguna forma para que no sean tan evidentes.
Con todo esto claro, la idea sería que si algún usuario entra en una de esas ubicaciones sea baneado, ya que de esta forma dificultareis mucho mas su recolección de información, y probablemente lo disuadiréis de seguir intentando acceder a vuestros datos.
Script PHP para banear IPs
Ahora lo que necesitamos es crear un script PHP para banear una ip especifica, y modificar el archivo ".htaccess" para re-direccionar todos los directorios y archivos mencionados anteriormente al script que banea ips.
<?phpif (!isset($_SESSION)) session_start();// Contador de actividades no permitidasif (isset($_SESSION["AvisoDeBaneado"])) $_SESSION["AvisoDeBaneado"] ++;else $_SESSION["AvisoDeBaneado"] = 1;if ($_SESSION["AvisoDeBaneado"] == 1) {// Aviso de actividad no permitidaecho "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /></head><body><h1>Atención! has realizado una actividad no permitida, si lo vuelves a intentar serás baneado.</h1></body></html>";}else {if (BanearIP() == TRUE) {// Banear actividad no permitidaecho "<html><body><h1>IP ".$_SERVER['REMOTE_ADDR']." BANEADA que tengas un buen dia.</h1></body></html>";}}function BanearIP($HTACCESS = ".htaccess") {// Leo el .htaccess en la variable $Txthta$Archivo = fopen($HTACCESS, "r");$Txthta = fread($Archivo, filesize($HTACCESS));fclose($Archivo);// Nueva IP para banear (\r\n es un salto de línea valido para windows, en linux se omite \r)$NuevaIP = "\r\n"."deny from ".$_SERVER['REMOTE_ADDR'];// Comentario que debemos buscar$TxtIpBaneada = "#INICIO ips baneadas";// Obtenemos la posición donde empieza el comentario$Posicion = strpos($Txthta, $TxtIpBaneada);// No se ha encontrado el comentario salimos.....if ($Posicion === FALSE) return FALSE;// Sumamos el tamaño del comentario$Posicion += strlen($TxtIpBaneada);// Guardo el .htaccess con la nueva ip baneada$Archivo = fopen($HTACCESS, "w");// Guardamos desde el inicio hasta el comentario (incluyendo el mismo)fwrite($Archivo, substr($Txthta, 0, $Posicion), $Posicion);// Guardamos la nueva ipfwrite($Archivo, $NuevaIP, strlen($NuevaIP));// Guardamos el resto del archivofwrite($Archivo, substr($Txthta, $Posicion, strlen($Txthta) - $Posicion), strlen($Txthta) - $Posicion);fclose($Archivo);return TRUE;}?>
Este script se basa en que el archivo ".htaccess" tenga el comentario "#INICIO ips baneadas" justo antes de las ips que van a ser denegadas, para añadir la ip del cliente actual a la lista del ".htaccess"
En este caso le he añadido tambien un primer aviso que se mostrara para advertir al usuario que si sigue metiendo las narices donde no debe acabara baneado.
Código del archivo .htaccess
Por último solo nos falta re-direccionar todos los archivos y carpetas al script para banear la IP, para ello también utilizaremos el ".htaccess", de forma que el archivo final debería quedar así :
<Limit GET>order allow,deny#INICIO ips baneadasdeny from 213.5.64.19 #spamer conocido#FIN ips baneadasallow from all</Limit>#RedireccionesRedirect 301 /muieblackcat http://www.MIURL.es/BanearIP.phpRedirect 301 /admin http://www.MIURL.es/BanearIP.phpRedirect 301 /admin/pma http://www.MIURL.es/BanearIP.phpRedirect 301 /db http://www.MIURL.es/BanearIP.phpRedirect 301 /dbadmin http://www.MIURL.es/BanearIP.phpRedirect 301 /myadmin http://www.MIURL.es/BanearIP.phpRedirect 301 /mysql http://www.MIURL.es/BanearIP.phpRedirect 301 /mysqladmin http://www.MIURL.es/BanearIP.phpRedirect 301 /typo3/phpmyadmin http://www.MIURL.es/BanearIP.phpRedirect 301 /phpadmin http://www.MIURL.es/BanearIP.phpRedirect 301 /phpMyAdmin http://www.MIURL.es/BanearIP.phpRedirect 301 /phpmyadmin http://www.MIURL.es/BanearIP.phpRedirect 301 /phpmyadmin1 http://www.MIURL.es/BanearIP.phpRedirect 301 /phpmyadmin2 http://www.MIURL.es/BanearIP.phpRedirect 301 /pma http://www.MIURL.es/BanearIP.phpRedirect 301 /web/phpMyAdmin http://www.MIURL.es/BanearIP.phpRedirect 301 /xampp/phpmyadmin http://www.MIURL.es/BanearIP.phpRedirect 301 /websql http://www.MIURL.es/BanearIP.phpRedirect 301 /phpMyAdmin-2 http://www.MIURL.es/BanearIP.phpRedirect 301 /php-my-admin http://www.MIURL.es/BanearIP.phpRedirect 301 /phpMyAdmin-2.2.3 http://www.MIURL.es/BanearIP.phpRedirect 301 /phpMyAdmin-2.2.6 http://www.MIURL.es/BanearIP.phpRedirect 301 /phpMyAdmin-2.5.1 http://www.MIURL.es/BanearIP.phpRedirect 301 /phpMyAdmin-2.5.4 http://www.MIURL.es/BanearIP.phpRedirect 301 /phpMyAdmin-2.5.5-rc1 http://www.MIURL.es/BanearIP.phpRedirect 301 /phpMyAdmin-2.5.5-rc2 http://www.MIURL.es/BanearIP.phpRedirect 301 /phpMyAdmin-2.5.5-pl1 http://www.MIURL.es/BanearIP.phpRedirect 301 /phpMyAdmin-2.5.6-rc1 http://www.MIURL.es/BanearIP.phpRedirect 301 /phpMyAdmin-2.5.6-rc2 http://www.MIURL.es/BanearIP.phpRedirect 301 /phpMyAdmin-2.5.6 http://www.MIURL.es/BanearIP.phpRedirect 301 /phpMyAdmin-2.5.7 http://www.MIURL.es/BanearIP.phpRedirect 301 /phpMyAdmin-2.5.7-pl1 http://www.MIURL.es/BanearIP.phpRedirect 301 /wp-login.php http://www.MIURL.es/BanearIP.phpRedirect 301 /blog/wp-login.php http://www.MIURL.es/BanearIP.phpRedirect 301 /wordpress/wp-login.php http://www.MIURL.es/BanearIP.phpRedirect 301 /wp/wp-login.php http://www.MIURL.es/BanearIP.php
Como podéis ver se utiliza el comando "Redirect 301" especificando la URL y la redirección.
Por último debo comentar que desde mi servidor de pruebas (xampp) el comando "Redirect 301" no funciona, esto es porque me falta activar el modulo "rewrite_module" dentro del archivo "httpd.conf". De todas formas la gran mayoría de servidores web lo tienen activado por defecto.
Y esto es todo, espero que por lo menos con estos apuntes se lo dejemos mas difícil a esta gentuza que se dedica a cargarse el trabajo de los demás.