HYDRA: Ataques de fuerza bruta SSH

Hoy he estado trasteando un poco con utilidades como ‘crunch’ para la generación de diccionarios y hydra para el uso de estos diccionarios a la hora de intentar realizar una autenticación.

El uso de crunch es simple:

crunch minimo maximo caracteres

Mininimo será número mínimo de caracteres que tendrán las palabras del diccionario y maximo lo mismo pero máximo. Caracteres serán la combinación de caracteres que usará para «fabricar» todo el diccionaro. Por ejemplo, si quisiesemos que solamente utilizará numeros en las combinaciones  y como minimo y maximo 2 digitos:

crunch 2 2 0123456789

Hydra es la herramienta que automatiza la prueba de usuarios y contraseñas en una gran variedad de servicios. .
Los parámetros que se van a utilizar en este ejemplo son los siguientes:

-l LOGIN / -L FILE: Establecer el nombre del usuario que se va a utilizar o una 
lista de nombres a probar. 

-p PASS / -P FILE: Contraseña a usar o lista de las mismas (diccionario) que se 
van a probar. 

-f/-F: Terminar la ejecución de programa cuando se encuentre un par usuario/
contraseña válido. 

-s PORT: Especificar el Puerto si éste es distinto al Puerto por defecto. 

-v / -V / -d: Activar el modo debug (depuración) para obtener más información 
sobre la ejecución de la herramienta.  

De esta forma con nmap podemos comprobar si la maquina objetivo tiene el servicio ssh abierto:

nmapPn 127.0.0.1

Generamos el diccionario con todas las combinaciones posibles que nos interesan:

crunch 3 3 0123456789 > pass.txt

Y realizamos el intento de login con hydra utilizando todos las palabras que nos generó crunch y con el usuario ‘root’:

hydra 127.0.0.1 ssh -s 22 -l root -P pass.txt -f -vV 

 

Podemos utilizar tambien un diccionario con nombres de usuario (si no lo conocemos). Utilizamos el parametro -L con hydra para indicarle que utilice ese fichero para la prueba de user/pass.

hydra 127.0.0.1 ssh -s 22 -L users -P worstpasswords.txt -f -vV 

Una pequeña aportación más a modo de apunte.

Espero que os ayude.

Share

Identificar hardware y modulos que lo usan

En esta breve receta voy a publicar un pequeño comando que me es muy útil para comprobar si todo el hardware de mi equipo esta correctamente seleccionado por el kernel. Lo hago con lspci:

 

lspci -nnk

Con este sencillo comando podemos tener una sencilla salida como esta:

00:00.0 Host bridge [0600]: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers [8086:1904] (rev 08)
Subsystem: Lenovo Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers [17aa:3808]
Kernel driver in use: skl_uncore
00:02.0 VGA compatible controller [0300]: Intel Corporation Skylake GT2 [HD Graphics 520] [8086:1916] (rev 07)
Subsystem: Lenovo Skylake GT2 [HD Graphics 520] [17aa:3808]
Kernel driver in use: i915
00:14.0 USB controller [0c03]: Intel Corporation Sunrise Point-LP USB 3.0 xHCI Controller [8086:9d2f] (rev 21)
Subsystem: Lenovo Sunrise Point-LP USB 3.0 xHCI Controller [17aa:3808]
00:14.2 Signal processing controller [1180]: Intel Corporation Sunrise Point-LP Thermal subsystem [8086:9d31] (rev 21)
Subsystem: Lenovo Sunrise Point-LP Thermal subsystem [17aa:3808]
00:16.0 Communication controller [0780]: Intel Corporation Sunrise Point-LP CSME HECI #1 [8086:9d3a] (rev 21)
Subsystem: Lenovo Sunrise Point-LP CSME HECI [17aa:3808]
00:17.0 SATA controller [0106]: Intel Corporation Sunrise Point-LP SATA Controller [AHCI mode] [8086:9d03] (rev 21)
Subsystem: Lenovo Sunrise Point-LP SATA Controller [AHCI mode] [17aa:3808]
Kernel driver in use: ahci
00:1c.0 PCI bridge [0604]: Intel Corporation Sunrise Point-LP PCI Express Root Port #5 [8086:9d14] (rev f1)
Kernel driver in use: pcieport
00:1c.5 PCI bridge [0604]: Intel Corporation Sunrise Point-LP PCI Express Root Port #6 [8086:9d15] (rev f1)
Kernel driver in use: pcieport
00:1f.0 ISA bridge [0601]: Intel Corporation Sunrise Point-LP LPC Controller [8086:9d48] (rev 21)
Subsystem: Lenovo Sunrise Point-LP LPC Controller [17aa:3808]
00:1f.2 Memory controller [0580]: Intel Corporation Sunrise Point-LP PMC [8086:9d21] (rev 21)
Subsystem: Lenovo Sunrise Point-LP PMC [17aa:3808]
00:1f.3 Audio device [0403]: Intel Corporation Sunrise Point-LP HD Audio [8086:9d70] (rev 21)
Subsystem: Lenovo Sunrise Point-LP HD Audio [17aa:3808]
Kernel driver in use: snd_hda_intel
00:1f.4 SMBus [0c05]: Intel Corporation Sunrise Point-LP SMBus [8086:9d23] (rev 21)
Subsystem: Lenovo Sunrise Point-LP SMBus [17aa:3808]
Kernel driver in use: i801_smbus
01:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15)
Subsystem: Lenovo RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [17aa:3837]
Kernel driver in use: r8169
02:00.0 Network controller [0280]: Intel Corporation Dual Band Wireless-AC 3165 Plus Bluetooth [8086:3166] (rev 79)
Subsystem: Intel Corporation Dual Band Wireless-AC 3165 Plus Bluetooth [8086:4210]
Kernel driver in use: iwlwifi
Kernel modules: iwlwifi

 

Como podeis ver en Kernel drive y Kernel Module nos advierte de que modulos/drivers estan siendo usados para cada hardware.

 

Share

[Gentoo] Instalar Snort en gentoo

En esta ocasión les vengo a enseñar como instalar snort en nuestro sistema gentoo. Al intentarlo solamente con portage he tenido muchos problemas, ya que entraba en conflicto con las librerias glibc entre otras tantas.

Al final, pude realizar la instalación utilizando un ebuild externo, con lo que os mostraré los sencillos pasos.

Lo primero que tenemos que hacer es añadir el grupo snort y usuario snort a nuestros sistema:

groupadd snort

useradd -m -g snort -s /bin/bash snort

El overlay que necesitaba instalar era `snort-2.9.2.2-r9999` el cual estaba disponible en el repostirio llamado `pinkbyte`. Con lo que vamos a añadir este repositorio a layman para poder instalar paquetes de ese repositorio:

layman -a pinkbyte

 

Una vez añadido el repostirio a layman nos dispondremos a instalar snort, pero antes, necesitamos instalar `net-libs/daq-0.6.2`:

emerge =net-libs/daq-0.6.2-r1

Ahora ya estaremos en disposición de instalar snort:

emerge -a =net-analyzer/snort-2.9.2.2-r9999

 

 

Con estos sencillos pasos ya deberiamos tener snort funcionando en nuestro sistema.

Ahora, para ejecutarlo tenemos que pasarle algunos parámetros, como el lugar donde se encuentra la libreria daq y algunas cosas más:

snort -q -v -A console –daq-dir /usr/lib/daq

-q – Para eliminar gran parte de la salida por consola.

-v – verbose de los paquetes.

-A console – Para que muestre la información en la terminal

–daq-dir – Directorio donde se encuentra daq

 

Espero que les pueda ayudar estos sencillos pasos para realizar la instalación en sus equipos gentoo.

Share

[Gentoo] python-exec bloquea actualización portage

Otro post más a modo de apunte para el futuro….

Hoy me he encontrado en una situación un poco complicada con mi sistema gentoo y es que intentaba realizar una actualización de emerge pero python y python-exec bloqueaba dicha instalación. Intentaba actualizar python y tampoco me lo permitia con lo que la solución finalmente fué utilizar el parámetro –nodeps:

 

emerge –nodeps -u python:2.7

emerge –nodeps -u python:3.4
emerge -u portage

Solucionado! 🙂

Share

Obtener subdominios de un dominio por diccionario

Hola.

En casos de una auditoria nos es muy útil poder descubrir los subdominios que cuelgan de un dominio. Esto se puede conseguir a traves de google o con distintas herramientas. Pero en esta ocasión vamos a realizar un script propio, sencillo, el cual a traves de un diccionario creado por nosotros mismos vamos a poder averiguar los subdominios que cuelgan de un dominio y sus respectivas direcciones IP, empecemos.

Como siempre lo único que necesitamos para realizar esta tarea es, un equipo y como no, nuestro sistema operativo favorito, LINUX.

  1.  Creación del fichero de diccionario para búsqueda de dominios: Lo llamaremos ‘palabras.txt’ y lo podemos crear con nano por ejemplo. Este seria su contenido:

estudiante
intranet
correo
email
mail
primario
secundario
backup
intranet
gerencia
administracion
seguridad
contabilidad
contable

tecnico

admin

sistemas

interior

exterior

2. Creación del script:

for i in $(cat palabras.txt);
do
host $i.DOMINIO.COM;
done

Tenemos que cambiar el contenido de DOMINIO.COM por el DOMINIO que queremos analizar.

 

De esta forma si corremos ese comando con el dominio: GOOGLE.com este seria el resultado:

Host estudiante.google.com not found: 3(NXDOMAIN)
Host intranet.google.com not found: 3(NXDOMAIN)
Host correo.google.com not found: 3(NXDOMAIN)
email.google.com is an alias for gmail.google.com.
gmail.google.com is an alias for www3.l.google.com.
www3.l.google.com has address 216.58.201.142
www3.l.google.com has IPv6 address 2a00:1450:4003:804::200e
mail.google.com is an alias for googlemail.l.google.com.
googlemail.l.google.com has address 216.58.201.133
googlemail.l.google.com has IPv6 address 2a00:1450:4003:804::2005
Host primario.google.com not found: 3(NXDOMAIN)
Host secundario.google.com not found: 3(NXDOMAIN)
Host backup.google.com not found: 3(NXDOMAIN)
Host intranet.google.com not found: 3(NXDOMAIN)
Host gerencia.google.com not found: 3(NXDOMAIN)
Host administracion.google.com not found: 3(NXDOMAIN)
Host seguridad.google.com not found: 3(NXDOMAIN)
Host contabilidad.google.com not found: 3(NXDOMAIN)
Host contable.google.com not found: 3(NXDOMAIN)
Host mx.google.com not found: 3(NXDOMAIN)
Host mx01.google.com not found: 3(NXDOMAIN)
Host mx02.google.com not found: 3(NXDOMAIN)

Como podemos ver ha encontrado el subdominio ‘mail’ y el subdominio ‘email’.

Este seria el objetivo. Adaptar las palabras claves para el dominio que necesitamos y con esto podemos obtener muy buena información. Ademas, podemos filtrar un poco más la salida para obviar los resultados que no han coincidido, lo podemos hacer con grep:

for i in $(cat palabras.txt); do host $i.google.com; done | grep has

Ahora, esta seria la salida:

www3.l.google.com has address 216.58.201.142
www3.l.google.com has IPv6 address 2a00:1450:4003:804::200e
googlemail.l.google.com has address 216.58.201.133
googlemail.l.google.com has IPv6 address 2a00:1450:4003:804::2005

Mucho más sencilla, ¿verdad?

 

 

Espero os pueda servir de utilidad.

Un saludo.

Share

Bloquear windows update con iptables

Son muchos los administradores de redes que quieren bloquear las actualizaciones de windows para todos los usuarios de su red.

En las últimas versiones de Windows , Windows 8 y Windows 10 las actualizaciones se descargan en segundo plano sin interacción ninguna con el usuario y muchas veces el usuario desconoce esto. Mientras se esta realizando esta descarga se esta consumiendo un gran ancho de banda. Existe un método rápido para bloquear las actualizaciones de windows 10 en cada máquina con windows 8 o windows 10:

Inicio -> services.msc -> Buscar servicio ‘Windows Update’ -> Detener servicio y Deshabilitar.

En este manual vamos a ir mas allá y lo que vamos a hacer es bloquear las actualizaciones de windows pero para TODA NUESTRA RED.

 

Para ello necesitamos:

  • Máquina linux como router
  • Dnmasq instalado
  • Una regla de iptables para redirigir las peticiones DNS hacia dnsmasq

 

Con dnsmasq instalado lo único que tenemos que hacer es editar su archivo de configuración en /etc/dnsmasq.conf y añadir lo siguiente:

 

address=/download.microsoft.com/127.0.0.1
address=/windowsupdate.microsoft.com/127.0.0.1
address=/windowsupdate.windows.com/127.0.0.1
address=/update.microsoft.com/127.0.0.1
address=/update.windows.com/127.0.0.1
address=/crl.microsoft.com/127.0.0.1
address=/office.microsoft.com/127.0.0.1
address=/download.windowsupdate.com/127.0.0.1
address=/wustat.microsoft.com/127.0.0.1
address=/wustat.windows.com/127.0.0.1

expand-hosts

Guardamos los cambios en el archivo dnsmasq.conf y pasamos al siguiente paso.

 

2. Redirigir las peticiones DNS de nuestra red hacia dnsmasq:

iptables -t nat -A PREROUTING -i <INTERFAZ_LAN> -p udp –dport 53 -j DNAT –to <IP_LINUX_ROUTER>:53

Si tenemos un firewall con politica por defecto DROP, tendriamos que dar acceso al trafico del puerto 53, en ambos sentidos. Trafico de ida y de vuelta. Lo podemos hacer con las siguientes sencillas reglas iptables:

iptables -t filter -A INPUT -p tcp –dport 53 -j ACCEPT

iptables -t filter -A OUTPUT -p tcp –sport 53 -j ACCEPT

iptables -t filter -A OUTPUT -p udp –dport 53 -j ACCEPT

iptables -t filter -A OUTPUT -p udp –sport 53 -j ACCEPT

 

3. Reiniciar el servicio dnsmasq..

Ahora solo nos queda reiniciar el servidor dnsmasq y nuestro pequeño truco empezará a funcionar:

/etc/init.d/dnmasq restart

A partir de ahora, ninguna máquina en nuestra red con windows 8 o windows 10 podrá realizar una actualización y conseguiremos ahorrar un monton de ancho de banda que estas actualizaciones generan.

 

Share

[Gentoo] Pequeño manual de Equery

Equery es una herramienta que no debe faltar en tu sistema gentoo. Ya que, permite un sin fin de posibilidades. En esta ocasión vengo a dar algunos ejemplos de como podemos utilizar esta herramienta tan útil, pero antes, la tenemos que instalar con el paquete gentoolkit:

# emerge app-portage/gentoolkit

Empecemos….

Saber que aplicación creó un directorio o archvio en nuestro sistema: Con belongs.

# equery belongs -e /usr/src/linux

Podemos ver el resultado. Como muestra que la creación del directorio /usr/src/linux ha sido provocada por el paquete `sys-kernel/gentoo-sources`

* Searching for /usr/src/linux …
sys-kernel/gentoo-sources-4.10.9 (/usr/src/linux-4.10.9-gentoo)

Listar todos los paquetes con una USE en especifica en el árbol portage:

# equery hasuse mp3

 

* Searching for USE flag mp3 …
[IP-] [ ] app-cdr/brasero-3.12.1:0/3.1
[IP-] [ ] app-emulation/wine-2.0:0
[IP-] [ ] app-misc/tracker-1.10.5:0/100
[IP-] [ ] media-plugins/gst-plugins-meta-1.10.3:1.0
[IP-] [ ] media-sound/audacity-2.0.5:0
[IP-] [ ] media-video/ffmpeg-3.2.4:0/55.57.57
[IP-] [ ] virtual/ffmpeg-9-r2:0

Podemos ver que paquetes dependen de un paquete:

# equery depends gtk+

Para ver las dependencias de un paquete, es decir, todas las que deben estar en nuestro sistema para que funcione.

# equery g dev-util/netbeans

Esto es muy útil en el caso de tener algún problema al realizar una actualización, ya que, visualizando las dependencias podemos bloquear X paquete para evitar cualquier conflicto o bloqueo.

Para búsquedas en el arbol de portage y overlay. (Permite expresiones regulares). Por ejemplo podemos buscar el texto java en los paquetes de portage:

# equery list -po *java*

Este seria el resultado:

* Searching for *java* …
[-P-] [ ~] app-emacs/javascript-2.0_beta8:0
[-P-] [ ~] app-emacs/javascript-2.2.1:0
[-P-] [ ] app-eselect/eselect-java-0.2.0:0
[-P-] [ ~] app-eselect/eselect-java-0.2.0-r1:0
[IP-] [ ] app-eselect/eselect-java-0.3.0:0
[-P-] [ ~] app-portage/java-ebuilder-0.1:0
[-P-] [ ~] app-portage/java-ebuilder-0.2:0
[-P-] [ -] app-portage/java-ebuilder-9999:0
[-P-] [ ~] dev-haskell/language-javascript-0.5.14.2:0/0.5.14.2
[-P-] [ ~] dev-haskell/language-javascript-0.6.0.9:0/0.6.0.9
[-P-] [ ] dev-java/ant-javamail-1.9.2:0
[-P-] [ ~] dev-java/ant-javamail-1.9.2-r2:0
[-P-] [ ] dev-java/apple-java-extensions-bin-1.5-r1:0
[-P-] [ ] dev-java/dbus-java-2.7-r1:0
[-P-] [ ] dev-java/dnsjava-2.1.6:0
[-P-] [ ~] dev-java/dnsjava-2.1.7:0
[-P-] [ ] dev-java/geoip-java-1.3.0:0
[-P-] [ ] dev-java/gnu-javamail-1.0-r2:1
[-P-] [ ] dev-java/java-apicheck-0_p20150907:0
[IP-] [ ] dev-java/java-config-2.2.0-r3:2
[-P-] [ ] dev-java/java-dep-check-0.3-r1:0
[-P-] [ ~] dev-java/java-dep-check-0.4:0
[IP-] [ ] dev-java/java-getopt-1.0.14:1
[-P-] [ ] dev-java/java-gnome-4.0.19:4.0
[-P-] [ ~] dev-java/java-gnome-4.0.20:4.0
[-P-] [ ] dev-java/java-gnome-4.1.3:4.1
[-P-] [ ] dev-java/java-sdk-docs-1.7.0.80:1.7
[-P-] [ ] dev-java/java-sdk-docs-1.8.0.121:1.8
[-P-] [ ] dev-java/java-service-wrapper-3.5.25-r1:0
[IP-] [ ] dev-java/javacc-5.0-r2:0
[-P-] [ ] dev-java/javacsv-2.1:0
[IP-] [ ] dev-java/javacup-0.11b_p20151001:0
[IP-] [ ] dev-java/javahelp-2.0.05_p63:0
[-P-] [ ] dev-java/javassist-2.6-r2:2
[IP-] [ ] dev-java/javassist-3.18.2:3
[IP-] [ ] dev-java/javatoolkit-0.3.0-r9:0
[-P-] [ ] dev-java/javax-inject-1-r2:0
[-P-] [ ~] dev-java/javax-mail-1.4:0
[-P-] [ ] dev-java/libmatthew-java-0.7.2-r1:0
[-P-] [ ] dev-java/libreadline-java-0.8.0-r3:0
[-P-] [ ~] dev-java/matrix-toolkits-java-0.9.12:0
[I–] [??] dev-java/netbeans-java-8.0.2-r2:8.0
[-P-] [ ] dev-java/netbeans-java-8.0.2-r5:8.0
[-P-] [ ~] dev-java/netbeans-java-8.1-r2:8.1
[-P-] [ ] dev-java/netbeans-java-8.2:8.2
[-P-] [ ] dev-java/netbeans-javacard-8.0.2:8.0
[-P-] [ ~] dev-java/netbeans-javacard-8.1:8.1
[-P-] [ ] dev-java/netbeans-javacard-8.2:8.2
[-P-] [ ] dev-java/netbeans-javadoc-8.0.2:8.0
[-P-] [ ~] dev-java/netbeans-javadoc-8.1:8.1
[-P-] [ ] dev-java/netbeans-javadoc-8.2:8.2
[IP-] [ ] dev-java/netbeans-javafx-8.0.2:8.0
[-P-] [ ~] dev-java/netbeans-javafx-8.1:8.1
[-P-] [ ] dev-java/netbeans-javafx-8.2:8.2
[-P-] [ ] dev-java/oracle-javamail-1.5.2:0
[-P-] [ ~] dev-java/oracle-javamail-1.5.5:0
[-P-] [ ~] dev-java/oracle-javamail-1.5.6:0
[-P-] [ ~] dev-java/protobuf-java-3.0.0_beta3_p1:0/10b3
[-P-] [ ~] dev-java/protobuf-java-3.0.2:0/10
[-P-] [ ~] dev-java/protobuf-java-3.1.0:0/11
[-P-] [ ] dev-java/sun-java3d-bin-1.3.2-r1:0
[-P-] [ ] dev-java/sun-java3d-bin-1.4.0_pre5-r1:0
[-P-] [ ~] dev-java/sun-java3d-bin-1.5.2:0
[-P-] [ ] dev-java/sun-javamail-1.4.3:0
[-P-] [ ~] dev-java/xjavac-2.4.0:1
[IP-] [ ] dev-java/xjavac-20110814:1
[-P-] [ ] dev-java/xz-java-1.5:0
[-P-] [ ~] dev-java/xz-java-1.6:0
[-P-] [ ~] dev-java/xz-java-1.6-r1:0
[-P-] [ ~] dev-lang/gnuprologjava-0.2.6:0
[-P-] [ ~] dev-ruby/rex-java-0.1.2:0
[-P-] [ ] java-virtuals/javamail-1.0-r4:0
[-P-] [ ] net-misc/java-wakeonlan-1.0.0-r2:0
[-P-] [ ] sec-policy/selinux-java-2.20151208-r4:0
[-P-] [ ] sec-policy/selinux-java-2.20151208-r6:0
[-P-] [ ] sec-policy/selinux-java-2.20161023-r1:0
[-P-] [ ] sec-policy/selinux-java-2.20161023-r3:0
[-P-] [ ~] sec-policy/selinux-java-2.20161023-r4:0
[-P-] [ ~] sec-policy/selinux-java-2.20170204-r1:0
[-P-] [ ] sec-policy/selinux-java-2.20170204-r2:0
[-P-] [ ~] sec-policy/selinux-java-2.20170204-r3:0
[-P-] [ -] sec-policy/selinux-java-9999:0
[IP-] [ ] sys-apps/baselayout-java-0.1.0:0
[-P-] [ ] x11-plugins/hexchat-javascript-0.3.1:0
[-P-] [ ~] x11-plugins/hexchat-javascript-0.3.2:0

O podemos buscar todos los paquetes que contengan gnome en su nombre:

equery list -po *gnome*

Esta es una pequeña aportación sobre equery. Si alguien piensa que deberia añadir algo a esta pequeña guía puede compartirla con nosotros a través de los comentarios.

Share

[Gentoo] Evitar un paquete al compilar

En ocasiones desconocemos cosas muy sencillas que nos hubieran sido útiles en alguna ocasión. Esto es lo que me ocurrió a mí, al conocer un comando el cual en muchas ocasiones me hubiera facilitado mucho la labor en algunos problemas de compilación de algún paquete o actualización del sistema. Es el siguiente:

emerge --resume --skipfirst

Con este sencillo comando le estamos diciendo a portage que IGNORE el primer paquete que va a intentar emerger (el que nos dio el problema). Si estamos haciendo un upgrade de nuestro sistema gentoo y algún paquete nos esta dando problemas de compilación una y otra vez, podemos ignorarlo y continuar con el siguiente.

Para poder terminar con la actualización del sistema o la instalación del paquete y después solucionar el problema.

Lo dicho, algo tan sencillo que después de tantos años yo desconocía.

Share

Monitorizar una IP o tu conexión a internet. Script BASH

¿Alguna vez has querido monitorizar tu conexión a internet para detectar si cae o tiene perdida de paquetes, o monitorizar quizás un servidor en internet?

En esta ocasión os traigo un pequeño script bash para realizar esto. El script comprobará si existen perdida de paquetes a una IP en concreto y lo reflejará en el log del sistema, ademas, aprovecharemos y guardaremos la caída en un archivo llamado log_fails.txt.

El tema del aviso tambien se puede configurar para que os envie un SMS a cualquier móvil, un mail… un sin fin de posibilidades.

El script en cuestión seria este:


#!/bin/bash
SITIO1=8.8.8.8 # DNS de Google principal
SITIO2=8.8.4.4 # DNS de Google secundario

while true
do
ping -c8 ${SITIO1} >/dev/null 2>/dev/null

respuesta1=$? #Guardamos estado de stderr

if [ $respuesta1 -eq 1 ];
then
sleep 10 # Esperamos 10 segundos para realizar una 2º prueba
ping -c3 ${SITIO2} >/dev/null 2>/dev/null
respuesta2=$?
if [ $respuesta2 -eq 1 ];
then
logger SERVIDOR CAIDO. HORA: $(date)
echo "SERVIDOR CAIDO. HORA: $(date)" >> log_fails.txt
fi
fi
sleep 10 # Esperamos 10 segundos para volver a comprobar desde el inicio
done

Guardamos este archivo con el nombre check.sh por ejemplo….

Le damos permisos de ejecución y ejecutamos con &exit para que quede en proceso de 2º plano:


chmod +x check.sh
sh check.sh &exit

Como podeis observar registramos la caída con el comando logger. Esto simplemente añade una linea con el texto «SERVIDOR CAIDO. HORA: » en /var/log/messages…

Esta pequeña receta con pocas lineas, nos servirá de mucho si queremos monitorizar nuestra conexión a internet o cualquier otra IP de nuestra red o de internet.

Si lo que quereis es monitorizar es solamente una IP, tendreis que fijar en las variables ‘SITIO1’ y ‘SITIO2’ la misma IP.

Espero os sirva de ayuda.
Un saludo.

Share

Forzar FSCK con SystemD

¿Te gustaria forzar el chequeo de fsck a tu sistema de archivos? Con systemD es muy sencillo, con tune2fs le podemos indicar al sistema que cuando monte nuestra unidad X veces, antes de la siguiente, revise dicha unidad con fsck… Se hace con el siguiente comando:


tune2fs -c 5 /dev/sda7

Donde:

-c 5 : Le indicamos que al montar 5 veces esta unidad, la compruebe con fsck.
/dev/sda7 : Seria la unidad en cuestión.

Con openRC bastaria con crear un fichero en la raiz de la unidad llamada «forcefsck» y reiniciar el sistema.


touch /forcefsk && reboot

Con systemD la mejor forma que he encontrado de realizar el chequeo con fsck es la comentada anteriormente con tune2fs y indicando un número para el chequeo.

¡Hasta la siguiente entrada!

Share