Blog personal sobre aplicaciones de las TIC, las telecomunicaciones, opiniones personales, prácticas, experimentos, etc., haciendo uso principalmente de tecnologías libres. Andrés Gómez
domingo, 15 de noviembre de 2015
Configuración de Zabbix -> host, grupos, graficas, mapas, screens, eventos, triggers, slide shows.
Aqui pueden encontrar mi video donde explico un escenario completo de monitoreo de equipos de una red publica y una red privada. SI se integra con el video donde explico la configuración de notificaciones por correo, quedará el sistema completo e informando.
Instalación de Zabbix y alertas por gmail en Ubuntu server 14.04
Wikipedia: Zabbix es un Sistema de Monitoreo de Redes creado por Alexei Vladishev. Está diseñado para monitorear y registrar el estado de varios servicios de red, Servidores, y hardware de red.
Usa MySQL, PostgreSQL, SQLite, Oracle o IBM DB2 como base de datos. Su backend está escrito en C y el frontend web está escrito en PHP. Zabbix ofrece varias opciones de monitoreo:
- Chequeos simples que pueden verificar la disponibilidad y el nivel de respuesta de servicios estándar como SMTP o HTTP sin necesidad de instalar ningún software sobre el host monitoreado.
- Un agente Zabbix puede también ser instalado sobre máquinas UNIX y Windows para monitorear estadísticas como carga deCPU, utilización de red, espacio en disco, etc.
- Como alternativa a instalar el agente sobre los host, Zabbix incluye soporte para monitorizar vía protocolos SNMP, TCP yICMP, como también sobre IPMI, JMX, SSH, telnet y usando parámetros de configuración personalizados. Zabbix soporta una variedad de mecanismos de notificación en tiempo real, incluyendo XMPP.
Lanzado sobre los términos de la versión 2 de la GNU General Public License, Zabbix es Software Libre.
Instalación en Ubuntu server (probado en versión 14.04)
Vea el siguiente video, los comandos de instalación están a continuación:
sudo apt-get update
//editar el archivo sources.list
sudo nano /etc/apt/sources.list
# Zabbix Application PPA
deb http://ppa.launchpad.net/tbfr/zabbix/ubuntu precise main
deb-src http://ppa.launchpad.net/tbfr/zabbix/ubuntu precise main
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C407E17D5F76A32B
sudo apt-get update
sudo apt-get install zabbix-server-mysql php5-mysql zabbix-frontend-php
//editar el archivo zabbix_server.conf
sudo nano /etc/zabbix/zabbix_server.conf
DBName=zabbix
DBUser=zabbix
DBPassword=Your.Password.Here
cd /usr/share/zabbix-server-mysql/
sudo gunzip *.gz
//entrar a consola de mysql para crear el usuario zabbix
mysql -u root -p
//crear el usuario zabbix y contraseña, en este caso se pone zabbix123 como ejemplo. Use una propia.
create user 'zabbix'@'localhost' identified by 'zabbix123';
create database zabbix;
grant all privileges on zabbix.* to 'zabbix'@'localhost';
flush privileges;
exit;
//importar estructura de la base de datos
mysql -u zabbix -p zabbix < schema.sql
mysql -u zabbix -p zabbix < images.sql
mysql -u zabbix -p zabbix < data.sql
//editar el archivo prinicipal de php
sudo nano /etc/php5/apache2/php.ini
post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = UTC
sudo cp /usr/share/doc/zabbix-frontend-php/examples/zabbix.conf.php.example /etc/zabbix/zabbix.conf.php
//editar el archivo zabbixconf.php ara poner la contraseña fijada para el usuario zabbix de mysql en pasos anteriores
sudo nano /etc/zabbix/zabbix.conf.php
$DB['DATABASE'] = 'zabbix';
$DB['USER'] = 'zabbix';
$DB['PASSWORD'] = 'Your.Password.Here'
sudo cp /usr/share/doc/zabbix-frontend-php/examples/apache.conf /etc/apache2/conf-enabled/zabbix.conf
sudo a2enmod alias
sudo service apache2 restart
//editar el archivo zabbix-server
sudo nano /etc/default/zabbix-server
START=yes
sudo service zabbix-server start
sudo apt-get -y install postfix mailutils libsasl2-2 ca-certificates libsasl2-modules
cd /etc/postfix/
sudo cp main.cf main.cf.bkp
//editar el archivo main.cf
sudo nano main.cf
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_use_tls = yes
//editar el archivo sasl_password con sus credenciales de correo de gmail
sudo nano /etc/postfix/sasl_passwd
[smtp.gmail.com]:587 sucorreo@gmail.com:contrasena
sudo postmap hash:/etc/postfix/sasl_passwd
sudo chown root:root /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd
//Verificar los certificados
cat /etc/ssl/certs/Thawte_Premium_Server_CA.pem | sudo tee -a /etc/postfix/cacert.pem
sudo /etc/init.d/postfix reload
//realizar prueba de envio de correo por consola usando postfix
echo "prueba envio" | sudo mail -s " Test Postfix +Gmail+Zabbix " andres.gomez.ruiz@gmail.com
//verificar el log de eventos de email para comprobar que no existan errores
tail -f /var/log/mail.log
jueves, 26 de marzo de 2015
OpenWRT Router MR-3020 Controlar por puerto serie un dispositivo (Arduino)
La intención de este post es documentar el mejor escenario para dotar a un dispositivo de interfaz serial (en mi caso un Arduino uno) de capacidad para la comunicación inalámbrica que permita ser consultado y controlado.
Hay mucha documentación en ingles, pero este escenario es el que me funcionó a mi (después de probar muchas opciones), y que permite el control por el servidor Web que trae el OpenWRT. Además de contribuir con material en español.
Se usa router MR3020, aprovechando su puerto serial, se le conectan pines y una resistencia de 10Kohm entre vcc y tx
Se conecta el router y el arduino por sus puertos seriales mediante los pines GND, Tx y RX... NO se conecta VCC. Así:
Se flashea el rouert con OpenWRT. Así, se tiene así la interfaz /dev/ttyATH0 a 115200 bauds, para la comunicacion.
Se colocó el siguiente script en /etc/rc.local para que inicie a ejecutarse apenas el router finalice el booteo
con esto, cada dato que llegue se va a grabar como una nueva línea del archivo /tmp/reportes
Como esto significa que el tamaño del archivo va a aumentar muchisimo, entonces se colocó una tarea cada minuto para que desocupe el archivo. En cron se coloca:
Así ya se tiene que el archivo cada minuto se desocupa.
Con el codigo de Arduino del final se hace que el microcontrolador envie datos de la lectura del puerto analógico A0 cada 100mS y también esté verificando la entrada de comunicaciones seriales para accionar o no un LED segun le llegue un 1 o 0.
Para la visualización Web se usa el servidor web de OpenWRT con la opcion cgi-bin.
en /www/cgi-bin/ se crea un archivo llamado lectura con esto:
root@OpenWrt:/www/cgi-bin# cat /www/cgi-bin/lectura
---
Hay que darle permisos 775 al archivo lectura
Lo anterior levanta un sencilla pagina web. Lo especial es la linea "head -n -1 /tmp/reporte | tail -1" que lee la penúltima línea del archivo reportes mencionado anteriormente. Esto ya que siempre queda una linea en blanco al final del archivo.
Se imprime esa lectura.
Los dos formularios sirven para implementar dos botones, para encender o apagar un led. Para esto se llaman a los archivos "ledon" y "ledoff" respectivamente, lo unico que tienen esos archivos es la orden de enviar un 1 o un 0 por puerto serial:
archivo ledon:
Mediante la linea echo -n "1" > /dev/ttyATH0 se envia un 1 por el puerto serie
archivo ledoff:
Mediante la linea echo -n "0" > /dev/ttyATH0 se envia un 0 por el puerto serie
Se accede mediante un navegador web
http://192.168.1.1/cgi-bin/lectura (o la ip del enrutador)
Esta página se actualiza cada segundo
Código Arduino Uno:
Resultados:
Hay mucha documentación en ingles, pero este escenario es el que me funcionó a mi (después de probar muchas opciones), y que permite el control por el servidor Web que trae el OpenWRT. Además de contribuir con material en español.
Se usa router MR3020, aprovechando su puerto serial, se le conectan pines y una resistencia de 10Kohm entre vcc y tx
Router TP-Link MR3020, y su tarjeta mostrando el puerto serie.
Resistencia de 10Kohms entre VCC t tx
Se conecta el router y el arduino por sus puertos seriales mediante los pines GND, Tx y RX... NO se conecta VCC. Así:
Se flashea el rouert con OpenWRT. Así, se tiene así la interfaz /dev/ttyATH0 a 115200 bauds, para la comunicacion.
Se colocó el siguiente script en /etc/rc.local para que inicie a ejecutarse apenas el router finalice el booteo
cat /dev/ttyATH0 2>/dev/null | while read v1; do
echo "$v1" >> /tmp/reporte
done
con esto, cada dato que llegue se va a grabar como una nueva línea del archivo /tmp/reportes
Como esto significa que el tamaño del archivo va a aumentar muchisimo, entonces se colocó una tarea cada minuto para que desocupe el archivo. En cron se coloca:
root@OpenWrt:/www/cgi-bin# crontab -e
*/1 * * * * echo "" > /tmp/reporte
Así ya se tiene que el archivo cada minuto se desocupa.
Con el codigo de Arduino del final se hace que el microcontrolador envie datos de la lectura del puerto analógico A0 cada 100mS y también esté verificando la entrada de comunicaciones seriales para accionar o no un LED segun le llegue un 1 o 0.
Para la visualización Web se usa el servidor web de OpenWRT con la opcion cgi-bin.
en /www/cgi-bin/ se crea un archivo llamado lectura con esto:
root@OpenWrt:/www/cgi-bin# cat /www/cgi-bin/lectura
#!/bin/sh
#!/www/cgi-bin/volts
# simple CGI to tail most recent info from an arduino
/root/hora.sh
echo "Content-type: text/html"
echo ""
echo "<html><head><meta http-equiv="refresh" content="1">"
echo "<h2>Voltmeter</h2>"
echo "<pre>
</pre>"
echo "<h4>Lectura del puerto A0</h4>"
echo "<font size=24><pre>"
head -n -1 /tmp/reporte | tail -1
echo "</pre></font><br><br>"
echo '<form action="ledon">'
echo '<input type="radio" name="on" value="encender" checked>ON'
echo '<br><input type="submit" value="Submit"></form><br><br>'
echo '<form action="ledoff">'
echo '<input type="radio" name="on" value="encender" checked>OFF'
echo '<br><input type="submit" value="Submit"></form>'
echo "</html>"
echo ""
---
Hay que darle permisos 775 al archivo lectura
chmod 755 /www/cgi-bin/lectura
Lo anterior levanta un sencilla pagina web. Lo especial es la linea "head -n -1 /tmp/reporte | tail -1" que lee la penúltima línea del archivo reportes mencionado anteriormente. Esto ya que siempre queda una linea en blanco al final del archivo.
Se imprime esa lectura.
Los dos formularios sirven para implementar dos botones, para encender o apagar un led. Para esto se llaman a los archivos "ledon" y "ledoff" respectivamente, lo unico que tienen esos archivos es la orden de enviar un 1 o un 0 por puerto serial:
archivo ledon:
#!/bin/sh
echo "Content-type: text/html"
echo ""
echo "<html><head><meta http-equiv="refresh" content="1">"
echo "<h2>LED encendido</h2>"
echo "<pre>
</pre>"
echo "<font size=24><pre>"
echo -n "1" > /dev/ttyATH0
echo "</pre></font></html>"
Mediante la linea echo -n "1" > /dev/ttyATH0 se envia un 1 por el puerto serie
archivo ledoff:
#!/bin/sh
echo "Content-type: text/html"
echo ""
echo "<html><head><meta http-equiv="refresh" content="1">"
echo "<h2>LED apagado</h2>"
echo "<pre>
</pre>"
echo "<font size=24><pre>"
echo -n "0" > /dev/ttyATH0
echo "</pre></font></html>"
Mediante la linea echo -n "0" > /dev/ttyATH0 se envia un 0 por el puerto serie
Se accede mediante un navegador web
http://192.168.1.1/cgi-bin/lectura (o la ip del enrutador)
Esta página se actualiza cada segundo
Código Arduino Uno:
int led = 13; // Pin 13
void setup()
{
pinMode(led, OUTPUT); // Set pin 13 as digital out
// Start up serial connection
Serial.begin(115200); // baud rate
Serial.flush();
}
void loop()
{
String input = "";
// Read any serial input
while (Serial.available() > 0)
{
input += (char) Serial.read(); // Read in one char at a time
delay(5); // Delay for 5 ms so the next char has time to be received
}
if (input == "1")
{
digitalWrite(led, HIGH); // on
Serial.print("encendido");
}
else if (input == "0")
{
digitalWrite(led, LOW); // off
Serial.println("apagado");
}
int sensorValue = analogRead(A0);
float voltage = sensorValue * (5.0 / 1023.0);
Serial.println(voltage);
delay(100);
}
Resultados:
-----
---
jueves, 19 de marzo de 2015
SISTEMA GNU/LINUX COMO FIREWALL
En GNU/Linux existen muchas distros listas para aplicar funcionalidades de firewalll con bonitas interfaces de usuario, es más, desde la distro de un sistema embebido (openWRT, Raspbian, etc) tiene por defecto (aunque no es obligatorio) el modulo del kernel que le permite esta funcionalidad.
Sin embargo es necesario estudiar el diagrama de flujo de los paquetes del protocolo IP y entender como se aplica en la capa 3 (OSI) los conceptos del firewall y sus funcionalidades. PAra esto he realizado un manual con muchos ejemplos, diagramas y ejercicios para hacer una primera aproximación de fondo sobre el funcionamiento de un firewall en sistemas GNU/Linux.
Aqui: Ver Manual
miércoles, 11 de marzo de 2015
Convirtiendo una impresora USB en impresora de red gracias a un pequeño router y OpenWRT
Tengo una impresora Kiosera FS-1120D, a la que se le puede instalar una tarjeta Ethernet para tenerla como impresora de red, pero en mi caso no la trae, solamente trae interfaz USB.
Paralelamente he venido jugando con los enrutadores TP-Link MR3020 y con el grandioso firmware OpenWRT La idea es poder imprimir por red desde cualquier lado de una red IP (local o remota).
así:
opkg install usbutils
Con ello se tiene todo lo necesario, ahora a modificar los archivos de configuración.
Con el siguiente comando se debe editar el archivo. Si no sabe usar vi es necesario que busque ejemplos en la internet antes.
# vi /etc/config/p910nd
El archivo debe quedar así:
config p910nd
option device /dev/usb/lp0
option port 0
option bidirectional 1
option enabled 1
OK. Para finalizar se habilita el servidor de impresoras y se reinicia el router:
#/etc/init.d/p910nd enable
# reboot
Para configurar la impresora en un entorno Windows se debe hacer lo siguiente:
1. Instalar por USB la impresora en el equipo, con todos sus drivers archivos conrrespondientes. Hacer prueba de impresión por USB y que funcione todo. Luego desconectar el cable USB.
Ahora hay que ir a la configuración de la impresora que se instaló por USB y cambiar el puerto al TCP/IP recién creado.
Listo!!! Ya pueden hacer pruebas.
Paralelamente he venido jugando con los enrutadores TP-Link MR3020 y con el grandioso firmware OpenWRT La idea es poder imprimir por red desde cualquier lado de una red IP (local o remota).
así:
+
=
Esto no es más que la adaptación de otra guia a el router TP-Link MR3020 y en español.
Primero hay que cambiar el firmware del MR3020. Se conecta por la IP de administración del router mediante un navegador web (no vamos a explicar como hacerlo ya que es un procedimiento estandar).
Yo he bajado la imagen para este router compilada por OpenWRT en su version Barrier Breaker que la pueden obtener aqui.
Por la opción de Firmware Upgrade del router es simplemente subir el archivo descargado y esperar unos 3 minutos.
Luego de lo anterior el router es accesible por medio de la IP 192.168.1.1
Accedemos por un navegador Web usando dicha IP, lo primero que encontrarán es que el firmware solicita que sea configurada una clave para acceso como root. Pongan una que puedan recordar.
Adicionalmente el enrutador debe estar configurado en una dirección IP que tenga salida a internet, es decir, como un computador más. Por ejemplo mi red LAN está en el rango 192.168.30.0/24 por eso le puse una IP estática 192.168.30.101 con gateway 192.168.30.1 (el router local) y DNS de mi preferencia.
Conectar el Router MR3020 con un cable ethernet a nuestra red local, o también pueden habilitar la configuración WiFi para imprimir de forma inalámbrica.
Luego pueden acceder por SSH al router. Yo usé el software libre PuTTY; obtendrán esta consola:
Ya desde aqui debe introducir los siguientes comandos sin obtener errores:
opkg update
opkg install kmod-usb2opkg install usbutils
Instalar soporte de impresoras:
opkg install kmod-usb-printer
Instalar en servidor de impresoras p910nd, el cual es un pequeño demonio que no pone los trabajos en cola en el disco, sino que pasa directamente a la impresora.
opkg install p910nd
Con ello se tiene todo lo necesario, ahora a modificar los archivos de configuración.
Con el siguiente comando se debe editar el archivo. Si no sabe usar vi es necesario que busque ejemplos en la internet antes.
# vi /etc/config/p910nd
config p910nd
option device /dev/usb/lp0
option port 0
option bidirectional 1
option enabled 1
Ahora se debe configurar el firewall del MR3020 para que acepte peticiones del puerto 9100
Con el siguiente comando se debe editar el archivo.
# vi /etc/config/firewall
Al FINAL del archivo debe agregarse:
#Allow attached network printer
config 'rule'
option 'src' 'lan'
option 'proto' 'tcp'
option 'dest_port' '9100'
option 'target' 'ACCEPT'
config 'rule'
option 'src' 'lan'
option 'proto' 'tcp'
option 'dest_port' '9100'
option 'target' 'ACCEPT'
#/etc/init.d/p910nd enable
# reboot
Para configurar la impresora en un entorno Windows se debe hacer lo siguiente:
1. Instalar por USB la impresora en el equipo, con todos sus drivers archivos conrrespondientes. Hacer prueba de impresión por USB y que funcione todo. Luego desconectar el cable USB.
Ahora hay que ir a la configuración de la impresora que se instaló por USB y cambiar el puerto al TCP/IP recién creado.
Suscribirse a:
Entradas (Atom)