miércoles, 2 de diciembre de 2009

Bash Watchdog Script

Situación:
En algunas oportunidades es necesario tener un script que levante algún servicio/proceso cuando el mismo falla. Es decir, supongamos que tenemos un servidor web, mail, dns que falla, es necesario tener un script que sea capaz de levantarlo cuando sea necesario de manera automatica

Solución:
En mi caso, tengo el servicio snmpd que por alguna razón falla constantemente. Debido a que necesito tener el mismo levantando construí el siguiente script que luego coloqué en un crontab.

Ejemplo del SCRIPT:
#!/bin/bash
#FILENAME= /root/SCRIPTS/snmpd.Watchdog
# Reiniciar SNMPD cuando el servicio no se encuentra levantado
RESTART="/etc/init.d/snmpd restart"
#path to pgrep command
PGREP="/usr/bin/pgrep"
# Nombre del servicio (en en este caso snmpd)
SNMPD="snmpd"
# obtener el numero del PID del proceso
$PGREP ${SNMPD}
if [ $? -ne 0 ] # Si snmpd no esta corriendo
then
# reiniciar snmpd
$RESTART
fi

Ejemplo del crontab:
Cada minutos:
* * * * * /root/SCRIPTS/snmpd.Watchdog
Cada 5 minutos
*/5 * * * * /root/SCRIPTS/snmpd.Watchdog

Mas información:
El script anterior es basado en el que se encuentra en:
http://zedomax.com/blog/2008/07/28/linux-server-hack-how-to-setup-a-shell-script-to-auto-restart-apache-httpd-server/

miércoles, 25 de noviembre de 2009

Implementar DNSSEC sobre Linux. Solo resolver

*** POST OBSOLETO ****
*** FAVOR LEER LA VERSION 2 ***


Problema:

Montar un servidor DNS solo como resolver, es decir, sin funcionar como servidor autorizado para ciertas zonas


Que se necesita:

- Servidor Linux
- Bind 9.3 o superior (en mi caso utilicé 9.6)


Alcance

- Vamos a validar todo lo que sea .br
- Vamos a validar todo lo que sea udp53.org

Procedimiento:
1) Instalar bind en un servidor Linux. En mi caso utilizo Mandriva y con un sencillo urpmi bind fue suficiente. Es importante destacar que para que DNSSEC ande se necesita tener instalado openssl y sus librerias. Actualmente la inmensa mayoría de las distribuciones ya viene con openssl

2) En /var/named.conf se necesita:
options {
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside "." trust-anchor dlv.isc.org.;
};

La primera opción permite dnssec para las zonas autorizadas y la segunda opción para realizar recursividad utilizando DNSSEC. La tercera opción la veremos con detalle más adelante.


3) Es necesario obtener las llaves públicas de los registros .br y udp53.org (que son los dominios que queremos verificar en este momento). Para ello:

[root@localhost etc]# dig br DNSKEY

{...}

br. 21502 IN DNSKEY 257 3 5 AwEAAdDoVnG9CyHbPUL2rTnE22uN66gQCrUW5W0NTXJBNmpZXP27w7PM Npyw3XCFQWP/XsT0pdzeEGJ400kdbbPqXr2lnmEtWMjj3Z/ejR8mZbJ/ 6OWJQ0k/2YOyo6Tiab1NGbGfs513y6dy1hOFpz+peZzGsCmcaCsTAv+D P/wmm+hNx94QqhVx0bmFUiCVUFKU3TS1GP415eykXvYDjNpy6AM=

{...}


[root@localhost etc]# dig udp53.org DNSKEY

{...}

udp53.org. 5882 IN DNSKEY 257 3 5 BEAAAAMKj6IGc8E/bBW7i6zDGgnKUXwamtR9PlFiuTg0/oa4i1okCg4J vLEq7EVpxdDi4yc1Ym9kGTUngZ59iVleoL8O5Zq+oPAPCYSbtn+ASsL6 0iCp4PJ6LV0A9d2NE/BetXO/Re/NRsSG18yFZCWGfX8mBnb2zG7Mb+0t pUuRsu9dBN31ljsbTUGmkDbqEw2xaDAUXqDGD5+pgN0NGqcPg0/HzFv9

{...}

4) Necesitamos las llaves DLV que pueden ser conseguidas en la pagina de la ISC en:
http://ftp.isc.org/www/dlv/dlv.isc.org.key.
Las llaves DLV ((DNSSEC Look-aside Validation) son un recurso adicional utilizado en aquellos servidores DNSSEC con recursividad. La idea es apoyar al conglomerado de internet en las primeras etapas de DNSSEC en el mundo

5) Vamos a copiar esas llaves obtenidas en el archivo named.conf bajo la sección trusted-keys (si no existe dicha sección en el archivo la crearemos). Por ejemplo

trusted-keys {
"br." 257 3 5
"AwEAAdDoVnG9CyHbPUL2rTnE22uN66gQCrUW5W0NTXJB
NmpZXP27w7PMNpyw3XCFQWP/XsT0pdzeEGJ400kdbbPq
Xr2lnmEtWMjj3Z/ejR8mZbJ/6OWJQ0k/2YOyo6Tiab1N
GbGfs513y6dy1hOFpz+peZzGsCmcaCsTAv+DP/wmm+hN
x94QqhVx0bmFUiCVUFKU3TS1GP415eykXvYDjNpy6AM=";

"dlv.isc.org." 257 3 5 "BEAAAAPHMu/5onzrEE7z1egmhg/WPO0+juoZrW3euWEn4MxDCE1+lLy2 brhQv5rN32RKtMzX6Mj70jdzeND4XknW58dnJNPCxn8+jAGl2FZLK8t+ 1uq4W+nnA3qO2+DL+k6BD4mewMLbIYFwe0PG73Te9fZ2kJb56dhgMde5 ymX4BI/oQ+cAK50/xvJv00Frf8kw6ucMTwFlgPe+jnGxPPEmHAte/URk Y62ZfkLoBAADLHQ9IrS2tryAe7mbBZVcOwIeU/Rw/mRx/vwwMCTgNboM QKtUdvNXDrYJDSHZws3xiRXF1Rf+al9UmZfSav/4NWLKjHzpT59k/VSt TDN0YUuWrBNh";

"udp53.org." 257 3 5 "BEAAAAMKj6IGc8E/bBW7i6zDGgnKUXwamtR9PlFiuTg0/oa4i1okCg4J vLEq7EVpxdDi4yc1Ym9kGTUngZ59iVleoL8O5Zq+oPAPCYSbtn+ASsL6 0iCp4PJ6LV0A9d2NE/BetXO/Re/NRsSG18yFZCWGfX8mBnb2zG7Mb+0t pUuRsu9dBN31ljsbTUGmkDbqEw2xaDAUXqDGD5+pgN0NGqcPg0/HzFv9";

};

6) Listo!!., reiniciar el servidor named. Por ejmplo:
/etc/init.d/named restart (o con rndc, como tu desees)

Revisar que se encuentre funcionando bien

La mejor opción es utilizar el famoso comando dig y chequear el flag AD en al respuesta. Por ejemplo:

RESPUESTA SIN DNSSEC

[root@localhost etc]# dig +dnssec registro.br

; <<>> DiG 9.6.0-P1 <<>> +dnssec registro.br
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43771 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 5




RESPUESTA CON DNSSEC

[root@localhost etc]# dig +dnssec registro.br

; <<>> DiG 9.6.0-P1 <<>> +dnssec registro.br
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1063 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 6, ADDITIONAL: 1



Más información:

* www.isc.org/files/DNSSEC_in_6_minutes.pdf
* http://registro.br/info/dnssec.html

viernes, 30 de octubre de 2009

Linux. Utilizar celular como modem para conectarse a Internet

Necesidad:
Utilizar el celular para conectarse a Internet. En mi caso utilicé el motorola W6 y Linux Mandriva

Que se necesita:
- Celular motorola
- Cable de conexión telefono -- PC

Procedimiento:
1) Instalar wvdial para maneja y discado del modem:

#urpmi wvdial

2) Identificar el nombre con el que Linux reconoce el modem. Para ello, ejecutaremos:

# tail -f /var/log/message

y simultaneamente conectaremos el telefono al PC/Laptop. Conseguiremos un nombre como /dev/ttyACM0

3) Verificar que el device se haya creado correctamente:

#ls -lh /dev/ttyACM0

4) Recomiendo crear un link simbolico entre /dev/modem y /dev/ttyACM0:

#ln -s /dev/ttyACM0 /dev/modem

5) Posteriormente hay que configurar el wvdial (ya estamos casi listos!). Para ello edita /etc/wvdial.conf similar a:

[Dialer Defaults]
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2
Abort on No Dialtone = off
Password = ''
Check Def Route = off
Phone = *99#
Idle Seconds = 0
Abort on Busy = off
;Minimize = on
Modem Type = Analog Modem
Stupid Mode = on
Baud = 115200
Auto DNS = on
Dial Command = ATM1L3DT
Auto Reconnect = off
Ask Password = off
Init = ATX3
ISDN = off
Dial Attempts = 1
Username = ''
;Dock = on
Carrier Check = on
Init3 = AT+CGDCONT=1,"IP","gprsweb.digitel.ve"
Modem = /dev/ttyACM0

La configuración anterior sirve perfectamente para Digitel en Venezuela. Las partes más importantes corresponden a los DNS, baud rate y el APN de digitel (gprsweb.digitel.ve).

6) Por último, ejecuta wvdial desde la consola:

#wvdial

Debes obtener algo como:

[root@localhost etc]# wvdial
--> WvDial: Internet dialer version 1.60
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: ATX3
ATX3
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2
ATQ0 V1 E1 S0=0 &C1 &D2
OK
--> Sending: AT+CGDCONT=1,"IP","gprsweb.digitel.ve"
AT+CGDCONT=1,"IP","gprsweb.digitel.ve"
OK
--> Modem initialized.
--> Sending: ATM1L3DT*99#
--> Waiting for carrier.
ATM1L3DT*99#
CONNECT
--> Carrier detected. Starting PPP immediately.
--> Starting pppd at Fri Oct 30 15:37:14 2009
--> Pid of pppd: 21573
--> Using interface ppp0
--> pppd: Connect: ppp0 <--> /dev/ttyACM0
--> pppd: PAP authentication succeeded
--> local IP address 10.251.89.163
--> remote IP address 192.168.100.101
--> primary DNS address 10.99.0.11
--> secondary DNS address 204.59.152.208

Espero esta información haya sido útil.

Suerte!

martes, 20 de octubre de 2009

Configurar SSH en Router Cisco

Como todo sabemos, telnet es un protocolo que ofrece bajos niveles de seguridad, basta con que coloquemos un sniffer y podamos las ordenes que el usuario esta escribiendo, desde nombre del usuario hasta el password que este uso para entrar en el equipo.

Para poder habilitar SSH en un equipo Cisco, el IOS debe de tener los modulos de cifrado DES o 3DES, IPsec.

De resto, es bastante sencillo.


Le asignamos un nombre al equipo

Router(config)# hostname Router-SSH
Router-SSH(config)#

Luego configuramos un nombre de dominio para el equipo con el comando ip domain-name

Router-SSH(config)# ip domain-name acostanetwork.com
Router-SSH(config)#

Luego creamos una llave RSA para la autenticacion y cifrado de la data

Router-SSH(config)# crypto key generate rsa
The name for the keys will be: Router-SSH.acostanetwork.com
Choose the size of the key modulus in the range of 360 to 2048
for your General Purpose Keys. Choosing a key modulus greater than
512 may take a few minutes.

How many bits in the modulus [512]: 1024
% Generating 1024 bit RSA keys ...[OK]


Luego ejecutamos el siguiente comando para que el router solo acepte peticiones SSH, de esta manera deshabilitamos el TELNET en el equipo


Router-SSH(config-line)#transport input ssh


Y listo!



Saludos!!!!

miércoles, 14 de octubre de 2009

Secuencia de Escape / Break Sequence Minicom - Linux - Cisco

Descripción:
En muchas ocasiones es necesario entrar en rommon a los routers y/o LAN Switch Cisco, tipicamente para una recuperación de password.

En las últimas dos semanas casualmente he recibido llamadas de un par de amigos indicandome que el break sequence no les funciona con Minicom y Linux, es decir, no pueden hacer el password recovery porque no la secuencia de escape (para minicom: ctrl-a f) no les funciona.

Solución:
La solución es muy sencilla, probada con diversos terminales y sistemas operativo; incluso, muchas veces es más sencillo que la propia combinación de las teclas de escape:

* Apagar el Router/LAN Switch
* Conectar la consola al PC/Laptop con Linux
* Configurar Minicom con la siguiente configuración:
1200 baud rate
No parity
8 data bits
1 stop bit
No flow control

* Enciende el router/switch y presiona la barra espaciadora por 10-15 segundos
* Luego configura nuevamente Minicom a 9600 baud rate.
* Presiona enter

Listo, ya debes tener un prompt similar a:

rommon 2>

P.D. Esta solución también se encuentra documentada en Cisco en: http://www.cisco.com/en/US/products/hw/routers/ps133/products_tech_note09186a0080174a34.shtml#topic3

viernes, 2 de octubre de 2009

Recuperar y actualizar telefonos Polycom IP que no arrancan

Problema: 
El teléfono polycom se queda en un loop y no arranca. En mi experiencia he trabajado perfectamente el provisioning de los teléfonos tanto con TFTP como con FTP, entre los teléfonos con los que he trabajado se encuentran los Polycom IP: 301, 330, 430, 501, 601 y 650. El Polycom IP-4000 no me funcionó con FTP, siempre tuve que trabajar con TFTP con este equipo. 
  Que se necesita: 
 Un servidor TFTP 
 Una conexión hacia Internet 
 Un Navegador Web 
 Una Herramienta para descomprimir archivos bien sea Winzip o Winrar 
 Una imagen para el telefono (se puede conseguir en www.polycom.com) 
  Procedimiento: 
 1) Conectaremos el Teléfono y el PC ambos a un concentrador o LAN Switch 
 2) El PC y el teléfono deben estar en el mismo bus físico y en la misma subred IP. En nuestro caso utilizamos IPs: 192.168.127.72 (PC) y 192.168.127.71 (Telefono). Ambos con la máscara 255.255.255.0 3) En el servidor TFTP el directorio raíz debe contener los archivos de polycom anteriormente mencionados. Es decir, los archivos correspondientes a la imagen y configuración del teléfono 4) La configuración en el teléfono se explica a continuación
  1. Seleccionar el Botón Menú
  2. Seleccionar en el menú la opción settings
  3. Dentro del menú settings seleccionar la advanced
  4. Seguidamente se le solicitar el Password para entrar en configuración del teléfono.
  5. Seguidamente aparecerá el menú admin Settings.
  6. Dentro del menú admin Settings seleccionar la opción network config.
  7. Seguidamente con las flecha de la parte derecha del teléfono buscar la opción Server menú y buscar la opción servidor TFTP y colocar la dirección IP de nuestro PC.
Luego de esto, el teléfono actualizará la imagen a la misma que se encuentre en el FTP server. 

  En caso de problemas: 
 * Revisar la mac-address del telefono. La misma se encuentra en la parte posterior del mismo 
 * Copiar el archivo 000000000000.cfg bajo el nombre mac-address.cfg (por ejemplo cp 000000000000.cfg 0004f2342041.cfg) 
 * Editar 0004f2342041.cfg e identificar el parámetro: APP_FILE_PATH y colocar el nombre del archivo .ld conseguido en tu TFTP server. Ejemplo: APP_FILE_PATH="version2.2.ld" 
 * Apagar y prender el telefono Eso es todo, este procedimiento debe servir para actualizar teléfonos Polycom y recuperar alguno de los mismos que tengan inconvenientes en arrancar. 


 





When you live with people that share the same purpose and passion, you have more time to share your thoughts, emotions, adventures, and growth together. Go to acimcentre.org/ to join them.

viernes, 21 de agosto de 2009

Implementando SNMPv3 en cisco y monitoreo en CACTI

Para la configuracion de de SNMP v3 en un equipo cisco, la configuracion es relativamente sencilla.


Primero que todo, configuramos una "view" de la siguiente manera, en modo de configuracion global, ejecutamos el siguiente comando

2801-1(config)#snmp-server view lectura iso included

En caso de querer limitar el arbol, podemos ponernos mas intensos y especificar oid por oid ( 100%), de esta manera vamos a evitar que un snmpwalk a nuestro equipo muestre informacion de mas.
Ejm:
snmp-server view lectura 1.3.6.1.2.1.2.2.1.10 included

o tambien ( podemos pasarle el nombre del objeto)

snmp-server view lectura ifInOctets included

Luego de esto, creamos el grupo que va a utilizar la vista que creamos anteriormente

2801-1(config)#snmp-server group sololectura v3 auth read lectura

La v3, hace referencia a que se esta usando la version 3 de snmp, el comando Auth, nos dice que la entidad que hace los snmpgets, snmpwalks, etc. Debe de ser autentificada y por ultimo "read lectura", nos dice que el grupo sololectura va a hacer uso de la vista "lectura".


2801-1(config)#snmp-server user rollingpaper sololectura v3 auth md5 acostanetwork

Por ultimo, creamos el usuario "rollingpaper" que pertenece al grupo "sololectura", y va a usar md5 para autentificacion y por ultimo, configuramos la clave "acosatnetwork"

Listo, como sabemos si funciona?, si tenemos un equipo linux (Si es Debian mucho mejor :P), podemos correl el siguiente comando


rolling:/home# snmpwalk -v3 -u rollingpaper -l authNoPriv -a MD5 -A acostanetwork X.X.X.X .1

Y obtendremos el resultado deaseado, en este caso, puse al final .1 para que camine sobre todo el arbol.

Ejm ( en este ejemplo yo use el objeto iso, por eso recomiendo hacer los "views" por OID, se da demasiada informacion poniendo el nombre de un objeto como "iso" a la hora de un snmpwalk)

rolling:/home# snmpwalk -v3 -u rollingpaper -l authNoPriv -a MD5 -A acostanetwork 192.168.127.84 .1
SNMPv2-MIB::sysDescr.0 = STRING: Cisco IOS Software, 2801 Software (C2801-IPVOICE-M), Version 12.3(11)T6, RELEASE SOFTWARE (fc3)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2005 by Cisco Systems, Inc.
Compiled Fri 03-Jun-05 02:19 by ccai
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.9.1.619
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (19653625) 2 days, 6:35:36.25
SNMPv2-MIB::sysContact.0 = STRING:
SNMPv2-MIB::sysName.0 = STRING: 2801-1.yourdomain.com
SNMPv2-MIB::sysLocation.0 = STRING:
SNMPv2-MIB::sysServices.0 = INTEGER: 78
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORID.1 = OID: SNMPv2-SMI::enterprises.9.7.129
SNMPv2-MIB::sysORID.2 = OID: SNMPv2-SMI::enterprises.9.7.115
SNMPv2-MIB::sysORID.3 = OID: SNMPv2-SMI::enterprises.9.7.265
SNMPv2-MIB::sysORID.4 = OID: SNMPv2-SMI::enterprises.9.7.112
SNMPv2-MIB::sysORID.5 = OID: SNMPv2-SMI::enterprises.9.7.106
SNMPv2-MIB::sysORID.6 = OID: SNMPv2-SMI::enterprises.9.7.47
SNMPv2-MIB::sysORID.7 = OID: SNMPv2-SMI::enterprises.9.7.122
SNMPv2-MIB::sysORID.8 = OID: SNMPv2-SMI::enterprises.9.7.135
SNMPv2-MIB::sysORID.9 = OID: SNMPv2-SMI::enterprises.9.7.43
SNMPv2-MIB::sysORID.10 = OID: SNMPv2-SMI::enterprises.9.7.37
SNMPv2-MIB::sysORID.11 = OID: SNMPv2-SMI::enterprises.9.7.92
SNMPv2-MIB::sysORID.12 = OID: SNMPv2-SMI::enterprises.9.7.53
SNMPv2-MIB::sysORID.13 = OID: SNMPv2-SMI::enterprises.9.7.54


Ahora, para agregarlo a Cacti, solo hace falta colocar los siguientes valores, como se muestra en la imagen.







Espero que sea de su agrado,
Saludos

Una propuesta inesperada dentro de IETF – Ethernet sobre HTTPS

En el presente post quiero hablar mayormente sobre un documento con poco tiempo en IETF llamado “Ethernet sobre HTTPS”. Debo confesar que su...