Lo que tenemos clasificado como ‘Hacking’
Baneando direcciones IPs en Apache bajo Windows
sin comentarios, by the moment porfaplis, deja uno que "é grati"
Hoy os presento un caso raro y de aquellos cansinos, un cliente con un servidor web ya con añitos, corriendo Windows 2003 Server parcheado hasta la médula, un día se enlentece que da miedo, este servidor recibe ciertos bots que sniffan literalmente todo su contenido, que no es pequeño llegando a generar con ello tráficos mensuales más allá de los 20 gigas. La mitad de los cuales se lo reparten entre bots snifadores y los spiders indexadores de la red, léase GoogleBot, Yahoo Crawler, Microsoft Search y sucedáneos rusos.
Casi siempre todo funciona bien, el servidor es robusto y responde sin muchas preocupaciones pero el problema llega cuando uno de estos robots se vuelve loco. Seguramente esta locura es producida por algún cambio en alguna variable que fuerza el número de escaneados diarios que realiza el bot, de esa forma el humano “snifante” prueba con diversos valores subiendo a veces sin saberlo la cantidad de peticiones por minuto de forma exponencial, el no ve las repercusiones en el servidor de origen, probablemente se dice, que bien ahora así tengo el contenido nuevo tan pronto como se publica, si soy el primero posiciono mejor, lo voy a dejar así. Y sin saberlo está haciendo un ataque DDOS o de denegación de servicio.
En este caso concreto es tal el consumo que en hora punta de tráfico las peticiones se enletecen hasta más allá de los 3 segundos por página peticionada.
Lo primero es detectar que algo paso, esto por suerte te lo dicen los clientes del servicio web en cuestión con emails técnicos del tipo:
“La web va lenta”, “La web va como el c…”
Recibido el tercer email de este tipo y tras comprobar que no es un problema de la conexión del cliente hacia la red, que también reportan, toca averiguar que está pasando.
1. Vemos el estado de saturación de la máquina. En Windows con el Administrador de Tareas.
2. Lo primero es ver que tal estamos de RAM, que consumo tenemos.
3. Luego vemos el espacio en disco que nos queda
4. El consumo de CPU
5. Ahora vamos a ver con ese mismo administrador de tareas que “programas” son los que más consumen
Si es MYSQL y la RAM va cargada tocará ampliar RAM, al igual de que si es disco.
Si es APACHE y la CPU va saturada, pues tocará ver cuantas peticiones y de quien son recibe el servidor web.
Para conocer cuantas peticiones recibe nuestro server hay muchas cosas y programas, pero en este caso no hay ningún sistema estadístico instalado, bueno si, Google Analytics, el cual pinta y colorea los datos que da gusto, pero a nivel técnico no nos sirve pues estamos buscando excesos y errores y me da a mi que Analytics los obvia, a saber porque con la todopoderosa y sus manías, que ya me cansan.
Aunque no tengamos nada instalado en server siempre nos podemos bajar los archivos de log del Apache para analizarlos en casita, con nuestra maquinita.
Ten en cuenta que estos archivos pueden ser gigantes, depende de como esté configurado el server, los hay con rotaciones y sin, pero puedes encontrartes con archivos de 2Gb. en servidores de alto tráfico, lidia con ellos si puedes. Lo mejor es rotarlos manualmente en el momento de máximo tráfico o ataque.
Para ello, detén el servicio de Apache, renombra los access.log y error.log y vuelve a iniciarlo, dejarás a tu cliente sin servicio un minuto escaso. Aguanta un ratito con el ataque, un par de horas a lo sumo, y vuelve a hacer lo mismo, de esa forma tendrás una muestra sanguínea del ataque o del momento de saturación del server y trabajarás única y exclusivamente con esos datos, localizando más rápidamente si existen direcciones IPs que un consumo excesivo de datos.
De Windows a Ubuntu y tiro porque me toca
Una vez muevas ese log a una carpeta accesible por FTP o HTTP faltará bajártela para analizarla en tu flamante workstation Ubuntu, que mola más que un OS X… al menos más que un Snow Leopard, pues falta ver si este próximo lunes día 6 de Junio lo que nos maravilla OS X Lion de la mano de Steve Jobs, palabra de AppleFun arrepentido venido a Ubuntu.
Analizando los archivos .log de Apache
Para analizarlo en nuestro Ubuntu vamos a usar Webzilla, para instalártela:
sudo apt-get install webalizer
Luego la configuramos con un:
sudo gedit /etc/webalizer/webalizer.conf
Aquí en principio sólo falta tocar el lugar, ruta y archivo donde está el access.log
LogFile /var/www/logs-para-analizar/access.log
OutputDir /var/www/webalizer
Incremental yes
Grabamos y ejecutamos el Webalizer con un complejísimo, es broma:
sudo webalizer
Unos segunditos y tachán, apunta tu navegador a:
http://localhost/webalizer
Selecciona el mes actual, y en la siguiente pantalla la opción “Clientes” aquí verás las IPs que han visitado más la página durante el ataque o la bajada de rendimiento del server, busca las más abultadas que vamos a revisarlas.
Ahora nos faltará saber el Quién es quién de cada IP
¿Quién es quién?
Para eso podemos usar varias opciones, entre ella una via web:
http://whois.domaintools.com/67.195.112.52
Donde 67.195.112.52 es la IP sobre la que quieres conocer información y la otra es usar las herramientas de red del sistema que incorpora Ubuntu.
Con ellas puedes realizar un WHOIS, un LOOKUP , etc.
Si entras en “Explorar los puertos”, cosa que tarda un rato podrás también detectar si detrás hay un servidor web, un servidor FTP, o un emule abierto. Datos que te permitirán determinar con algo más de certeza si se trata de una empresa o un usuario.
También puedes rastrear la ruta para más o menos ver de donde es el país de origen, si este por ejemplo es de Ukrania o de la conchinchina probablemente se trate de un buscador en el que no te importe perder posicionamiento.
Cuidadín cuidadín con los GoogleBots y familia
Pues eso, asegúrate que de todas esas IPs no te apuntes ninguna que sea de un buscador conocido en el que te quieras posicionar, pues si la anotas y luego la baneamos perderás el posicionamiento en ese buscador pues tu Apache no le dejará entrar.
Ya tenemos las IPs localizadas y correctamente anotadas, ahora vamos a banearlas
Baneando IPs en Apache bajo Windows
Bueno esto a decir verdad es más o menos igual en Windows que en Linux que un radiocassette donde sea capaz de correr Apache.
Busca el fichero de configuración de Apache httpd.conf
En la sección Directory
Introduce al final, justo antes del cierre de la directiva </Directory> y una en cada línea la siguiente instrucción:
deny from TU-NO-PASAS
por ejemplo si quisiéramos banear a Yahoo, NO lo hagas!
deny from 67.195.112.52
Graba el fichero y reinicia Apache, en Windows desde “Accesorios -> Herramientas del Sistema -> Servicios -> Apache” botón de la derecha reiniciar.
Listas negras de IPs malignas
También de paso y por el mismo precio que nos ponemos a banear, una práctica aceptable sería el banear sistemáticamente aquellas IPs que se han detectado en el mundo recientemente como IPs malignas.
Yo he sacado una lista desde:
http://isc.sans.org/ipsascii.html
y desde:
http://isc.sans.org/sources.html
Baneando que es gerundio.
Copia de seguridad remota de bases de datos
sin comentarios, by the moment porfaplis, deja uno que "é grati"
…MySql of course…
Con este comandito podrás hacer un backup en un fichero de texto de las bases de datos en servidores remotos a la máquina donde ejecutes el “comandito”:
mysqldump -h direccion_ftp_remoto –password=claveRemota –user=usuarioRemoto nombre_base_de_datos_remota –routines> /home/backup/mysql-servidor_talytal.sql
Hay otras combinaciones de este efectivo comando de Mysql, por ejemplo este que me sirve para realizar copias de una base de datos de un servidor a otro:
mysqldump –host=direccion_host_origen –password=clave_mysql_origen –user=usuario_origen tabla a copiar | mysql –password=clave_mysql_local –user=usuario_mysql_local tabla_destino
La tabla de destino tiene que existir, es indiferente si tiene datos o no, o si las estructuras son diferentes pues mysqldump la machacará con los datos que vienen del origen.
Además podrás despreocuparte un poquito de tus datos si añades esta copia a una tarea con cron para ello haz un:
sudo crontab -e
Y métele algo así como:
00 21 * * * mysqldump –host=… y toda tu comando
Esto copiará la tabla todos los días de la semana a las 21.00H.
Sincronizar ficheros mediante FTP
sin comentarios, by the moment porfaplis, deja uno que "é grati"
Para sincronizar ficheros entre dos servidores entre tu máquina local y un servidor remoto vamos a utilizar el programa para Linux “LFTP”, ya sabemos que para estas tareas es mucho mejor rSync pero, pero… si el servidor remoto no lo soporta, es por ejemplo un Windows Server o no lo tiene instalado y no podemos acceder mediante SSH porque se trata de un servidor requetecompartido este sistema de copia de seguridad, backup o sincronización mediante FTP te resultará de gran ayuda. Si no lo tienes instalado en tu sistema procede a instalarlo con un: sudo apt-get install lftp Una vez instalado conéctate al servidor remoto por FTP utilizando un nombre de usuario y una clave con: lftp -u usuario_ftp,clave servidor_ftp_o_ip Si da problemas de conexión podría ser por que el servidor FTP está en modo pasivo forzado si es así edita el fichero de configuración de LFTP con un: nano /etc/lftp.conf y descomenta la linea “passive-mode”: Ahora vamos a realizar una copia espejo de la carpeta del servidor remoto al servidor o equipo local mediante el comando “mirror” de lftp: mirror carpeta_servidor_conectado carpeta_destino_en_local
Si quieres abortar el backup o sincronizado haz un CTRL+C y si quieres salir de “lftp” escribe quit y pulsa enter Ahora tardará un buen rato en preparar la copia para posteriormente sincronizar todos y cada uno de los archivos.
Ahora nos quedaría hacer una especie de script y añadirlo a las tareas “cron” de forma que la sincronización o backup se hicies de forma automatizada sin que tengamos que mediar en ello. Para cargar un script de comando vamos a utilizar el siguiente comando lftp lftp -f <script_file> donde <script_file> será un archivo de texto con los comandos a ejecutar, esos comandos tienen la siguiente sintaxis:
Ya tenemos el script, ahora vamos a añadirlo a las tareas para
editamos el archivo crontab
sudo crontab -e
Y añadimos una línea como la que sigue:
