Actualizar DNS con DHCP

En la entrada anterior vimos como montar un servidor bind y un server dhcp en linux para bloquear la resolución de algunas webs en nuestra red de área local. (Suplantando nuestros dns en la red local). Ya que tenemos el laboratorio montado en casa, podemos mejorar sus funcionalidades haciendo que todos los dispositivos que reciban una dirección DHCP de nuestro servidor queden registrados en el DNS con una entrada dinámica. Hacerlo a mano sería bastante laborioso y en breves tendríamos la zona dns desactualizada.

Para ello me he creado una zona a la que llamaré “canostra.local”, esta zona engloba mi red local. Siguiendo con el ejemplo anterior, tendremos 3 dispositivos en la red:

	192.168.22.1  --> Gateway
	192.168.22.2  --> Equipo Windows con reserva de DHCP
	192.168.22.11 --> DNS + DHCP.

Para poder crear el dynamic dns, el primer paso es editar el archivo para crear las nuevas zonas:

sudo vi /etc/bind/named.conf.local

Sigue leyendo

Tratando logs con awk

Hoy en el trabajo me he encontrado con una problemática bastante común cuando tratamos de filtrar logs: mucha información que no nos interesa.

Para solventar este problema, habitualmente, la primera aproximación sería con grep y cut pero habitualmente se quedan cortos ya que es complicado usarlos para filtrar por fecha/hora.

En este ejemplo se usará un archivo de log del estilo

2016/06/29 17:10:35.838:Fatal error core dumped
2016/06/29 17:15:35.838:Fatal error core dumped
2016/06/29 17:20:35.838:Fatal error core dumped
2016/06/29 17:30:35.838:Fatal error core dumped

Para poder filtrar por hora, podemos usar awk, en el siguiente script contaremos el numero de líneas que hay en un intervalo de tiempo determinado (por defecto, los últimos 15 min).

#!/bin/awk -f

BEGIN {

if(minutos==""){minutos=15 }
    umbral = minutos *60  # Miramos los ultimos N segundos del log 
    now = strftime("%H:%M:%S",systime())
    counter=0;
    debug=0
 }
{ 
    split($2,chunks,".");
    hour=chunks[1];
    m=split(hour,w,":")
    n=split(now,t,":")
    FIRSTTIME= (t[1]*3600) + (t[2]*60) + t[3]
    SECONDTIME= (w[1]*3600) + (w[2]*60) + w[3]
    DIFFTIME=(FIRSTTIME - SECONDTIME)
    if (debug == 1){
        printf("%s|%s|%s\n",FIRSTTIME,SECONDTIME,DIFFTIME)
    }
    if(DIFFTIME < umbral ){
        counter++;
    }
}
END { print  counter }

Para ejecutarlo bastaría con ejecutar:

cat mylog.log | awk -f script.awk -v minutos=8

Y el resultado sería

echo '2016/06/29 17:10:35.838:Fatal error core dumped
2016/06/29 17:15:35.838:Fatal error core dumped
2016/06/29 17:20:35.838:Fatal error core dumped
2016/06/29 17:30:35.838:Fatal error core dumped' | awk -f /var/www/scripts/countSuperacionesAma.awk -v minutos=8
1

Pues de este modo tan sencillo podemos tratar logs en función del tiempo.

Compilar un Kernel en Debian, Ubuntu y derivados.

IMG_0291-1.PNG
1. Conceptos básicos

Si posees conocimientos de GNU/Linux y sistemas operativos puedes aventurarte a la próxima sección; en la presente discutiremos conceptos básicos.

Cuando hablamos de “Linux” es frecuente referirnos al sistema operativo y sus aplicaciones y no al núcleo del sistema. La realidad es que Linux es solamente el núcleo del sistema (también denominado kernel): componente de gran envergadura que hace operar nuestra computadora. Entre las funciones más importantes del kernel: Sigue leyendo

TROYANIZACIÓN DE MÓDULOS PAM

 “Es un sistema UNIX, lo conozco” – Alexis Murphy (Jurasic Park I)


En sistemas derivados de UNIX, la autenticación de usuarios así como la implementación sistemas de autenticación adicionales, se basa en una arquitectura modular formada en primera instancia por los denominados módulos PAM (Pluggable Authentication Module), lo cual dota al sistema operativo de una base altamente flexible y personalizable para establecer medidas de seguridad adicionales a la hora de autenticar usuarios tanto de acceso local como remoto, de forma transparente a las aplicaciones.
 
Debido a la homogeneidad anterior, resulta menos complejo el portar el funcionamiento de un módulo PAM de un sistema a otro.
Arquitectura PAM

Sigue leyendo

Agregar carpetas de referencias en Visual Studio

Buenos días,

Como últimamente, la entrada de hoy tratará sobre mejorar nuestra experiencia como programador con algunas cosillas que son tan sencillas que se nos escapan.
Como ya he dicho otras veces, seguramente hay más maneras de realizar esto, pero esta es la que mejor resultados me ha dado.

Los últimos días he estado trabajando en proyectos con más de 10 referencias cruzadas entre proyectos de visual studio, esto es una putada a la hora de actualizar las referencias de cada proyecto, sobre todo si cada vez que se hace un “merge” de la rama padre a la rama hija y perdemos la ubicación de nuestras librerías.

Hasta ahora hacía de espartano y añadía las referencias manualmente perdiendo una cantidad de tiempo considerable en organizar mi entorno de trabajo, otra opción es copiarlas librerías que necesitamos en la carpeta de salida del proyecto (bin/), una solución poco práctica sobretodo si necesitamos añadir nuevos métodos..

Por ello, unos compañeros me hicieron ver la luz.. Hay que configurar los proyectos para que escupan las librerías en una carpeta común y luego en el las propiedades del proyecto añadir la reference PATH a la carpeta configurada anteriormente.

menú de propiedades

En esta imagen se muestran las propiedades de un proyecto visual studio

Reference Path VS2012

Cómo configurar el directorio de referencias

De este modo, el compilador cogerá las librerías necesarias también de esa carpeta además de las rutas por defecto del sistema.

Para los seguidores de gcc el equivalente de añadir una carpeta de librerías se podría realizar de dos modos distintos:

Usando una orden especifica en tiempo de configuración (usando -L y -rpath)
gcc XXX.c -o xxx.out -L$HOME/.usr/lib -lXX -Wl,-rpath=/home/user/.usr/lib
O añadir una linea en el bashrc de nuestra carpeta de usuario
export LD_LIBRARY_PATH=LD_LIBRARY_PATH=/home/user/.usr/lib:/usr/local/lib:/usr/lib:/lib