Archivo de la etiqueta: Desarrollo

Script para la recolección de eventos de Microsoft windows remotamente

Este script lo desarrollé para un cliente y permite recoger eventos de una o varias máquinas corriendo Microsoft Windows. Se ha probado con Microsoft Windows Server 2003 pero posiblemente funcione bien en otras versiones. A continuación inserto la documentación creada para el cliente, que explica en detalle el funcionamiento.

Descarga el script Remote-Events_log-retriever

Sigue leyendo

Convertir una máquina GNU/Linux en un “appliance”

Un cliente me pidió que le crease unas máquinas GNU/Linux con varios programas para la monitorización y el análisis del tráfico de red. La idea era repartir varias máquinas por distintos puntos de su extensa red y vigilar durante un tiempo ese segmento.

El cliente tan solo quería varias máquinas con GNU/Linux y algunos programas instalados, que se administrasen remotamente por SSH y enviaran a un servidor splunk central las alertas de Snort. Pero a mí me pareció una ocasión ideal para explotar la flexibilidad de GNU/Linux y las cosas chulas que se pueden hacer de una forma sencilla, así que me planteé los siguientes puntos que debería cubrir la solución:

  • Los usuarios no deben conocer la contraseña de administrador
  • Debe ser factible la gestión de los programas que se instalen (esto requiere privilegios de administrador)
  • Permitir su uso por usuarios con conocimiento cero de GNU/Linux (esto quiere decir que hay que evitar la SHELL)
  • Si llega a manos de un usuario con conocimientos, no quiero que desmonte el chiringuito. Hay que limitar el acceso
  • Los datos deben estar cifrados en el disco, ya que pueden contener datos sensibles y se van a mover por la geografía estatal
  • Se deben poder configurar las tarjetas de red

Para cubrir estos requisitos hay que:

  • Proteger la BIOS y el gestor de aranque (Grub) por contraseña
  • Cifrar la mayor parte del disco duro
  • Modificar el inicio para que init no lance el proceso login
  • Crear una interfaz de uso sencillo y que no permita el acceso a la SHELL

Esto en la práctica implica transformar un GNU/Linux en una caja “tonta” que muestre un menú con las distintas acciones que se le permite realizar al usuario al arrancar la máquina, es decir en el TTy1. Además decidí mostrar el log de Snort en el TTy2.

A continuación muestro la documentación entregada al cliente en la que se explica con detalle la arquitectura. La documentación incluye, en el Anexo, un script que automatiza el proceso de configuración una vez instalado GNU/Linux.

Sigue leyendo

Script modular para el bastionado de GNU/Linux

Objetivo

El script bastiona-linux pretende facilitar el proceso de aplicación de los requisitos corporativos de bastionado, a la vez que crea una plataforma flexible para la incorporación de nuevas medidas que puedan surgir en el futuro así como para eliminar o modificar las ya existentes.

Ejecución

El script se puede ejecutar de dos maneras:

1-      Mediante la asignación de permisos de ejecución

chmod +x bastiona-REL.sh

./ bastiona-REL.sh

2-      Invocando una nueva instancia de bash con el script como argumento

bash bastiona-REL.sh

Argumentos de ejecución

Es posible indicar como argumento de ejecución las opciones:

  • -h o –help: Muestra un mensaje de ayuda por pantalla
  • -r o –restore: Restaura el sistema al estado pre-bastionado, deshace todos los cambios realizados por el script de bastionado

Sigue leyendo

Gestor de scripts Unix centralizado y distribuible

Voy a describir el funcionamiento y la estructura de una herramienta que creé hace tiempo, pero que creo que puede serle útil a más gente, la herramienta sirve para gestionar los scripts de forma centralizada en entornos de tipo Unix y se llama DCSM de sus siglas en inglés (Distributable Centralized Scripts Manager, Gestor de scripts centralizado y distribuible) esta programada mediante shell scripts y se desarrolló sobre Solaris pero funciona en cualquier Unix, el único requisito es un servidor CVS (era muy complejo instalar subversion en los Solaris 8 😉 ) y crond. A continuación reproduzco el documento que describe esta herramienta.

La situación general, en gran cantidad de redes,  a la hora de gestionar los scripts de los servidores, que siempre existen, es crear los scripts específicos para cada servidor, y si es necesario en otro servidor se copia. Este sistema de administración de scripts es muy típico y, aunque evita algo de trabajo, tiene unas claras desventajas, las que intento solucionar son las siguientes:

  1. Es difícil hacer un seguimiento de los scripts que están en cada servidor.
  2. Si se modifica un script que se usa en más de un servidor hay que modificarlo en cada uno de los servidores, si tenemos en cuenta el punto 1 puede ser que no se apliquen los cambios deseados a todos los servidores.

Estas desventajas se pueden resolver mediante la centralización de la gestión y distribución de los scripts.

Sigue leyendo

Routerconfigs de cacti no se ejecuta automáticamente

Me he encontrado con este problema y ha resultado ser un fallo en la gestión de la base de datos, routerconfigs establece una opción global que indica si ya se está ejecutando un proceso en de backups. Por algún motivo (posiblemente alguna de mis pruebas mientras desarrollaba las modificaciones para soportar ssh) esta variable se quedó establecida a 1 y esto impide la ejecución automática de este plugin. La variable es “plugin_routerconfigs_running” y se encuentra en la tabla “settings” de la base de datos de cacti, para comprobar su valor ejecutar desde un terminal:

mysql -u cacti -p cacti -e “select * from settings where name=’plugin_routerconfigs_running’;”
Enter password:
+—————————————+——-+
| name                                                      | value |
+—————————————+——-+
| plugin_routerconfigs_running   | 1         |
+—————————————+——-+

Si la columna value está establecida a 1 routerconfigs no se ejecutará así que para solucionarlo tan solo hay que ejecutar:

mysql -u cacti -p cacti -e “REPLACE INTO settings (name, value) VALUES (‘plugin_routerconfigs_running’, 0);”
Enter password:

Y para asegurar que todo ha ido bien

mysql -u cacti -p cacti -e “select * from settings where name=’plugin_routerconfigs_running’;”
Enter password:
+—————————————+——-+
| name                                                      | value |
+—————————————+——-+
| plugin_routerconfigs_running   | 0         |
+—————————————+——-+

Con esto routerconfigs se debería ejecutar a la perfección ;)…

O al menos eso pensaba… jejeje tras un día de ejecución volvió a fallar con el mismo resultado así que algo en el código no funciona como debe… entro en modo debugging debugging debugging uuuups que me me sa metio un bug 😛 bueno pues eso tras unas horas de estudio del código y debuggings varios hay un caso en el que un include hace un return antes de hacer el replace pertinente en esta tabla. El archivo en cuestión es el router-download.php, en la línea 66 encontramos un return solito dentro de un else tal que así

if (!empty($devices)) {

.

.

.

} else {
return;
}

para solucionar el problema el else debe quedar de esta otra forma

} else {
db_execute(“REPLACE INTO settings (name, value) VALUES (‘plugin_routerconfigs_running’, 0)”);
return;
}

Y ahora sí con esto va como la seda os lo juro que ya lleva meses rulandooooo

byte byte my nerds 😛

Plugin routerconfigs de cacti a traves de ssh

Actualmente uso cacti para recolectar datos sobre el estado de la red en el trabajo, también tenemos el Cisco Works para la administración de la misma y desde el principio lo usé para hacer copias de seguridad de las configuraciones de los dispositivos. La cuestión es que no me gusta nada el Cisco Works, creo que consume una cantidad absurda de recursos de la máquina, buscar información en los logs es una verdadera odisea y los servicios dejan de funcionar cuando les apetece, sí se pueden detectar las caidas de los servicios mediante la configuración de alertas de las tareas que ejecute, de modo que si dejas  de recibir correos sabes que ha caido el servicio de automatización de tareas: el JRN (seria algo equivalente al CRON de Unix o al planificador de tareas de Windows). Pero es que dejó de gustarme desde el principio, los que vendieron el servicio pretendias que se usase como plataforma de monitorización pero es muy poco flexible: tan solo permite el envío de alertas a una única cuenta de correo, las alerta son muy poco configurables y cuando he recibido algún correo de alerta no me ha notificado la recuperación del dispositivo. Debo decir que no he dedicado grandes esfuerzos ni tiempo a comprender este software pero la gente a la que he consultado mis dudas, que tienen certificaciones, no han sabido responder mis dudas. Así que desde el principio preferí enfocar mis esfuerzos a Nagios y posteriormente añadí Cacti obteniendo una plataforma con niveles de soporte a los que alertar diferentes criticidades en los dispositivos y tiempos de respuesta para cada nivel, algo mucho más flexible no? 🙂 además junté la capacidad de backup del Cisco Works a la de alerta de Nagios de modo que se envía la versión y la configuración del dispositivo que esté fallando junto a los datos de contacto y localización de la oficina, a eso le llamo yo un buen sistema de alertas.

Bueno ya vale de royos lo que sí tiene chulo el CiscoWorks es la capacidad de ver las diferencias entre dos versiones de las configuraciones de un dispositivo esa fué la razón de seguir usandolo para los backups, sino habría creado un servicio de Nagios que realizase la tarea, pero como ya lo realizaba un software preferí coger las configuraciones por sftp desde la máquina de Nagios… hasta que descubrí el plugin routerconfigs que también dispone de esta funcionalidad genial!. Tras instalarlo y configurarlo vi que no tenia soporte para Cisco ASA ni para CSS y que además tan solo realiza conexiones por telnet así que los dispositivos configurados para ssh no funcionan. Bueno es software libre tengo el código así que ha modificarlo. Las modificaciones que he realizado son:

  • Soporte para copiar a través de SSH
  • Mejoras en rendimiento (muy básicas, seguro que se pueden realizar más)
  • Agregado soporte para ASA y CSS
  • Integración con el sistema de logs de Cacti durante la conexión
  • Copiar el startup-config en lugar del running-config

He modificado la versión 0.1 que cuelgo aquí por si puede ser de utilidad para alguien:

para aplicar el patch una vez descargado el plugin y el patch en el mismo directorio:

tar zxf routerconfigs-0.1.tar.gz

patch -p0 < routerconfigs_0.1_ssh.patch

Espero que os sea útil 😉

Desarrollando una extensión para F-spot

Me he decidido a desarrollar una extensión para f-spot, me gusta la filosofía de este estupendo gestor fotografico pero hecho en falta alguna funcionalidad, en concreto me voy a centrar en un buscador que muestre las fotos que no han sido exportadas nunca o que no han sido exportadas mediante alguna extensión de exportación en concreto. Iré explicando los detalles del proceso en este post ¿sere capaz de programar esta extensión? ¿llegará a tener calidad suficiente como para que la añadan al core del programa? ¿servira este post como guía para otros desarrolladores?… Todas estas dudas se iran solventando en futuros episodios, así que no te pierdas el próximo en este mismo canal y a la misma hora.

Sigue leyendo