Nagios + openldap auth + apache 2.4

Esta vez, vamos a integrar la authenticación de usuarios de nuestro nagios con nuestro openLDAP.

Primero de todo, habilitamos los módulos ldap / authnz_ldap

a2enmod authnz_ldap
a2enmod ldap

Modificamos el fichero de sites del nagios:

#nano /etc/apache2/sites-available/nagios.conf

Y lo dejamos tal que:

# SAMPLE CONFIG SNIPPETS FOR APACHE WEB SERVER
#
# This file contains examples of entries that need
# to be incorporated into your Apache web server
# configuration file. Customize the paths, etc. as
# needed to fit your system.

ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"


# SSLRequireSSL
Options ExecCGI
AllowOverride None
"<"IfVersion >= 2.3>

AuthType Basic
Require all granted
AuthName "Nagios Access"
AuthLDAPURL "ldap://ldap.miserver.local/dc=miserver,dc=local?uid?sub?(objectClass=*)"
AuthBasicprovider ldap
AuthUserFile /dev/null
Require valid-user


"<"IfVersion < 2.3>
Order allow,deny
Allow from all
AuthType Basic
Require all granted
AuthName "Nagios Access"
AuthLDAPURL ldap://ldap.miserver.local/dc=miserver,dc=local?uid?sub?(objectClass=*)
AuthBasicprovider ldap
AuthUserFile /dev/null
Require valid-user


Alias /nagios "/usr/local/nagios/share"


# SSLRequireSSL
Options None
AllowOverride None
"<"IfVersion >= 2.3>

AuthType Basic
Require all granted
AuthName "Nagios Access"
AuthLDAPURL ldap://ldap.miserver.local/dc=miserver,dc=local?uid?sub?(objectClass=*)
AuthBasicprovider ldap
AuthUserFile /dev/null
Require valid-user



"<"IfVersion < 2.3>
Order allow,deny
Allow from all
AuthType Basic
Require all granted
AuthName "Nagios Access"
AuthLDAPURL ldap://ldap.miserver.local/dc=miserver,dc=local?uid?sub?(objectClass=*)
AuthBasicprovider ldap
AuthUserFile /dev/null
Require valid-user



Ahora modificamos el nagios para que acepte los usuarios:

/
#nano /usr/local/nagios/etc/cgi.cfg

Y dejamos las siguientes líneas así:


authorized_for_system_information=*
authorized_for_configuration_information=*
authorized_for_system_commands=*
authorized_for_all_services=*
authorized_for_all_hosts=*
authorized_for_all_service_commands=*
authorized_for_all_host_commands=*

Reiniciamos apache + nagios y a probar !!!!!!!!

Kamailio 4.x Debian Jessie

Estos días estoy liado con el tema del sipproxy Kamailio….. un gran software y potente donde los haya.

Empezamos con que disponemos de un debian jessie limpito; instalamos las dependencias:


apt-get install git-core gcc flex bison libmysqlclient-dev make libssl-dev libcurl4-openssl-dev libxml2-dev libpcre3-dev mysql-server

Y ahora descargamos el source de kamailio:


root@sipproxy:/usr/src# wget -c http://www.kamailio.org/pub/kamailio/4.2.2/src/kamailio-4.4.4_src.tar.gz
root@sipproxy:/usr/src# tar -zxvf kamailio-4.4.4_src.tar.gz

Preparamos para compilar:

#make cfg

Editamos el fichero /usr/src/kamailio-4.4.4/modules.lst y modificamos:

.
.
# the list of extra modules to compile
include_modules=db_mysql
.
.

Guardamos y vamos a compilar:

#make install

Una vez compilado, tendremos los ficheros en /usr/local/etc/kamailio.

Creamos un usuario para el mysql / kamailio:

mysql> grant all privileges on kamailio.* to 'kamailio'@'%' identified by 'kamailio' with grant option;

Modificamos el kamctrlc para que use mysql (en mi caso) y lo dejamos tal que:


DBENGINE=MYSQL

## database host
DBHOST=localhost

## database name (for ORACLE this is TNS name)
DBNAME=kamailio

# database path used by dbtext, db_berkeley or sqlite
# DB_PATH="/usr/local/etc/kamailio/dbtext"

## database read/write user
DBRWUSER="kamailio"

## password for database read/write user
DBRWPW="kamailio"

## database read only user
DBROUSER="kamailio"

## password for database read only user
DBROPW="kamailio"

ahora creamos las bbdd:

root@monaca:/usr/local/etc/kamailio# /usr/local/sbin/kamdbctl create
MySQL password for root:
INFO: test server charset
INFO: creating database kamailio ...
INFO: granting privileges to database kamailio ...
INFO: creating standard tables into kamailio ...
INFO: Core Kamailio tables succesfully created.
Install presence related tables? (y/n): y
INFO: creating presence tables into kamailio ...
INFO: Presence tables succesfully created.
Install tables for imc cpl siptrace domainpolicy carrierroute
userblacklist htable purple uac pipelimit mtree sca mohqueue
rtpproxy? (y/n): y
INFO: creating extra tables into kamailio ...
INFO: Extra tables succesfully created.
Install tables for uid_auth_db uid_avp_db uid_domain uid_gflags
uid_uri_db? (y/n): y
INFO: creating uid tables into kamailio ...
INFO: UID tables succesfully created.
root@monaca:/usr/local/etc/kamailio#

preparamos el kamailio para que arranque y crearemos el init.d

root@monaca:/usr/src/kamailio-4.4.4/pkg/kamailio/deb/precise# cp kamailio.init /etc/init.d/kamailio


root@monaca:/usr/src/kamailio-4.4.4/pkg/kamailio/deb/precise# cp kamailio.default /etc/default/kamailio

Editamos el fichero /etc/default/kamailio

#
# Kamailio startup options
#

# Set to yes to enable kamailio, once configured properly.
RUN_KAMAILIO=yes

# User to run as
USER=kamailio

# Group to run as
GROUP=kamailio

# Amount of shared and private memory to allocate
# for the running Kamailio server (in Mb)
#SHM_MEMORY=64
#PKG_MEMORY=8

# Config file
CFGFILE=/usr/local/etc/kamailio/kamailio.cfg

# Enable the server to leave a core file when it crashes.
# Set this to 'yes' to enable Kamailio to leave a core file when it crashes
# or 'no' to disable this feature. This option is case sensitive and only
# accepts 'yes' and 'no' and only in lowercase letters.
# On some systems it is necessary to specify a directory for the core files
# to get a dump. Look into the kamailio init file for an example configuration.
#DUMP_CORE=yes

Creamos el fichero pid, usuarios:

adduser --quiet --system --group --disabled-password --shell /bin/false --gecos "kamailio" --home /var/run/kamailio kamailio

Copiamos el init.d

cp /usr/src/kamailio-4.4.4/pkg/kamailio/deb/precise/kamailio.init /etc/init.d/kamailio
mkdir -p /var/run/kamailio
chmod 755 /etc/init.d/kamailio
chown kamailio:kamailio /var/run/kamailio

y ahora para que arranque con el systcl, añadimos el siguiente fichero /etc/systemd/system/kamailio.service


[Unit]
Description=Kamailio SIP Server

[Service]
Type=forking
PIDFile=/var/run/kamailio.pid
ExecStart=/usr/local/sbin/kamctl start
ExecRestart=/usr/local/sbin/kamctl restart
ExecStop=/usr/local/sbin/kamctl stop

[Install]
WantedBy=multi-user.target

Enjoy your kamailio server 😉

Bloquear skype con cisco ASA

Esta vez, me ha tocado bloquear el skype en una empresa… con el cisco asa, a diferencia del iptables, la inspección a nivel 7, es un poco limitada.

He iniciado el skype y veo que las conexiones son a varias ip’s y, no puedo bloquear todas, ya que iba haciendo y aparecían nuevas.

Lo más sencillo… he mirado los AS que tiene skype:


http://www.tcpiputils.com/search?q=skype

198015 Skype Communications Sarl LU 1 17 0
198097 Skype Communications Sarl LU 2 27 0

Con estos datos, miramos los rangos de ip’s de cada uno:


http://www.tcpiputils.com/browse/as/198015
http://www.tcpiputils.com/browse/as/198097

resumiendo…. hacemos una regla para aplicar en el interface inside del asa


object-group network redesSkype
network-object 91.190.216.0 255.255.255.0
network-object 91.190.217.0 255.255.255.0
network-object 91.190.218.0 255.255.255.0
network-object 91.190.219.0 255.255.255.0
network-object 91.190.220.0 255.255.255.0
access-list aplicarInside extended deny ip any object-group redesSkype
access-group aplicarInside in interface inside

Y con ésto, ya tenemos bloqueado el skype 😉

iwlist + ngrep debian

Otro apunte.

para ver de un vistazo las redes inalámbricas que tenemos a nuestro alcance y la potencia, podemos usar el comando iwlist, pero nos muestra quizás demasiados parámetros….. si queremos ver si solapamos canales, podemos usar nuestro amigo grep.


# iwlist wlan0 scanning | grep "ESSID\|Frequency\|Quality"

Y el resultado debe ser, algo similar a:


Frequency:2.412 GHz (Channel 1)
Quality=23/70 Signal level=-87 dBm
ESSID:"xxxxx"
Frequency:2.462 GHz (Channel 11)
Quality=22/70 Signal level=-88 dBm
ESSID:"xxxxx"
Frequency:2.467 GHz (Channel 12)
Quality=39/70 Signal level=-71 dBm
ESSID:"xxxxx"
Frequency:2.462 GHz (Channel 11)
Quality=32/70 Signal level=-78 dBm
ESSID:"xxxxxx"

usando “|” con grep, podemos especificar algo para filtrar, pero si tenemos que filtrar por varios, deberemos usar:


iwlist wlan0 scanning | grep "$EXPRESION1 \|$EXPRESION2 \|$EXPRESION'N' \"

🙂 Sencillo

QoS mikrotik; limitando tráfico FTP

Esta vez, necesito limitar el Rx/tx del servicio FTP que tengo en casa…. limitaré a 2 Mb’s simetricos, con puntas de 3 Mbp’s…

Primero, identificamos el tráfico….. primero identificamos la conexión y luego, después de identificar, marcamos los paquetes:


add action=mark-connection chain=postrouting comment=FTP_POSTROUTING disabled=no dst-port=21 new-connection-mark=FTP passthrough=yes protocol=tcp
add action=mark-connection chain=prerouting comment=FTP_PRE_ROUTING disabled=no dst-port=21 new-connection-mark=FTP passthrough=yes protocol=tcp
add action=mark-packet chain=postrouting comment=FTP_GENERAL connection-mark=FTP disabled=no new-packet-mark=FTP_GENERAL passthrough=no
add action=mark-packet chain=prerouting comment=FTP_GENERAL connection-mark=FTP disabled=no new-packet-mark=FTP_GENERAL passthrough=no

Y ahora, a la queue tree:

/queue tree
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=2M max-limit=3M name=FTP_UPLOAD packet-mark=FTP_GENERAL parent=global-in priority=7 queue=default-small
add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=2M max-limit=3M name=FTP_DOWNLOAD packet-mark=FTP_GENERAL parent=global-out priority=7 queue= default-small

Aquí hemos de mirar si nuestro FTP usa otro rango de puertos….

Enjoy your QoS

QoS Mikrotik para VoIP

Otro apunte.

Esta vez, necesito aplicar QoS con máxima prioridad en unos routers mikrotik que tengo instalados….. por norma general uso asterisk / freeswitch y SIP siempre en udp, así que los puertos son:


SIP signaling: 5060
RTP: 10000 ... 20000

Primero, hemos de identificar el tráfico con reglas mangle


add action=mark-connection chain=prerouting comment=rtp dst-port=10000-20000 new-connection-mark=SIP protocol=udp
add action=mark-connection chain=postrouting comment=rtp dst-port=10000-20000 new-connection-mark=SIP protocol=udp
add action=mark-connection chain=prerouting comment=sip dst-port=5060 new-connection-mark=SIP protocol=udp
add action=mark-connection chain=postrouting comment=sip dst-port=5060 new-connection-mark=SIP protocol=udp

Marcamos los paquetes de sip y rtp…. para hacer la queue, necesitamos identificar los paquetes que identificamos con el mark-connection y la manera de hacerlo :


add action=mark-packet chain=prerouting connection-mark=SIP new-packet-mark=SIP_GENERAL passthrough=no
add action=mark-packet chain=postrouting connection-mark=SIP new-packet-mark=SIP_GENERAL passthrough=no

Y ahora hacemos la Queue Tree, asignando la prioridad más alta (1):


add name=VOIP packet-mark=SIP_GENERAL parent=global priority=1 queue=default

Y ahora….. a probarr!!!!!

Monitorizar hardware ESXI nagios

Esta vez vamos a monitorizar el estado del hardware HP de un ESXI

Tengo, para frikear, unos HP DL380 G5 y DL360G5, de los cuales, debido al tiempo que tienen, se han estropeado algunas fuentes de alimentación y algunos discos.

Primero de todo, de la página www.hp.com de EEUU, descargamos:

http://h20566.www2.hp.com/portal/site/hpsc/template.PAGE/public/psi/swdHome/?sp4ts.oid=3288134&spf_p.tpst=swdMain&spf_p.prp_swdMain=wsrp-navigationalState%3DswEnvOID%253D4115%257CswLang%253D%257Caction%253DlistDriver&javax.portlet.begCacheTok=com.vignette.cachetoken&javax.portlet.endCacheTok=com.vignette.cachetoken


* RECOMMENDED * HP ESXi Utilities Offline Bundle for VMware ESXi 5.0 and vSphere 5.1

* RECOMMENDED * HP NMI Sourcing Driver for VMware ESXi 5.x

HP ESXi Offline Bundle for VMware ESXi 5.x

Copiamos estos 3 ficheros por SFTP al directorio /TMP de nuestro ESXI...... una vez copiados, los instalamos:


#esxcli software vib install -d /tmp/ficheroainstalar

Una vez instalados los 3, nos pedirá reiniciar. Volvemos a entrar con el cliente de ESXI y nos vamos a la pestaña de [configuration]

estadoesxi

Ahora vamos a la parte de nagios y descargamos el siguiente plugin.


http://exchange.nagios.org/directory/Plugins/Operating-Systems/%2A-Virtual-Environments/VMWare/Check-hardware-running-VMware-ESXi/details

Y lo copiamos en:
/usr/local/nagios/libexec

Una vez copiado, editamos el fichero commands.cfg y añadimos al final de todo:

define command{
command_name check_esx_wbem
command_line $USER1$/check_esx_wbem.py https://$HOSTADDRESS$:5989 $ARG1$ $ARG2$ verbose
}

Y ahora definimos los servicios a monitorizar:


define host {
use esxi-server
host_name olimpo_craem_net
alias olimpo_craem_net
address 192.168.2.203
icon_image linux_server.gif
statusmap_image linux_server.gd2
hostgroups esxi-home
}

define service{
use generic-service
host_name olimpo_craem_net
service_description ESXi Hardware Monitor
check_command check_esx_wbem!readuser!password
}

Y ahora en nuestro nagios, parte web, tendremos ésto:
captura2

Ahora podremos dormir tranquilos con nuestro servidor monitorizado 🙂

Tunnel IPIP mikrotik + ip dinámicas

En esta ocasión, he tenido la necesidad de tumbar un tunel PPTP en una mikrotik, para hacer el cambio contra un tunnel IPIP.

Recordemos que, el tunnel PPTP, aunque sencillo de configurar, tiene los siguientes incovenientes:

– La MTU del tunnel, queda a 1460 bytes; tenemos una sobrecarga de cabeceras considerable.
– El rendimiento de tunnel en general, no es muy bueno.
– Consumo medio de recursos en los routers; requiere cifrado.

el uso de IPIP, viene justificado por:

– La mtu del tunnel, queda en 1480 bytes.
– El rendimiento del tunnel, es muy bueno, en comparación con pptp
– El consumo de cpu en el router, al no llevar cifrado, es casi nulo.

Una vez explicado, tengo el inconveniente de que, en uno de los extremos es ip dinámica…. el tunnel IPIP, recordemos que, va de extremo a extremo… fijado de ip pública a ip pública…… Mirando mikrotik, veo que soporta scripts.

Nos ponemos manos a la obra:

:global ip_nueva [:resolve midominio.dyndns.org]
:global ip_actual [ /interface ipip get 1 remote-address]
if ($ip_nueva!=$ip_actual) do={/interface ipip set 1 remote-address=$ip_nueva }

En el extremo que tenemos ip dinámica, usamos un servicio de dyndns gratuito.

Definimos variables:
1º Línea definimos variable global ip_nueva y le asignamos el valor que tiene el dyndns
2º Consultamos el valor actual de la ip en el tunnel. El número 1 significa el número de tunnel.
3º Si la ip nueva es diferente a la actual….. sorpresa… actualizamos la ip del tunnel.

Esto está muy bien, pero ahora, para ejecutarlo cada minuto…. en la consola de nuestra mikrotik:


add comment="Script ipip Dynamic" disabled=no interval=1m name=ipip1 on-event=":global ip_nueva [:resolve midominio.dyndns.org]r
n:global ip_actual [ /interface ipip get 1 remote-address]r
nif ($ip_nueva!=$ip_actual) do={/interface ipip set 1 remote-address=$ip_nueva }" policy=ftp,read,write,policy,test,winbox,api start-date=feb/13/2014
start-time=14:18:26

Enjoy you dynamic IP 😉

Cambiar password Comtrend movistar FTTH

Lo de hoy es una curiosidad….. necesitaba cambiar el password del router FTTH en casa de un amigo y en remoto.

El portal alejandra no nos funcionaba; nos registramos pero tardaba mucho y el tiempo apremia.

Revisando y googleando un poco, me veo algo tal que:

Abrimos el navegador y tecleamos:

http://192.168.1.1/password.cgi

Y nos encontramos ésto:

Captura de pantalla de 2014-01-25 11:30:30

Sin salir de mi asombro, en medio de la pantalla, botón derecho del ratón y :

Ver código fuente

Ante mi asombro, veo ésto: O_o

Captura de pantalla de 2014-01-25 11:30:51

Pues nada… el resto ya os lo imagináis

Sed buenos 🙂

Squid3 + openLdap Debian

Hace unos días, me tocó usar squid contra openLdap para autentificar los usuarios. A priori, es bastante más fácil que contra un active directory, ya que no hace falta ni kerberos, samba ni windbind.

Partimos de la base que ya tenemos el openLdap funcionando correctamente y nuestro squid también… así que ahora, editamos el fichero /etc/squid3/squid.conf y lo dejamos tal que:


auth_param basic program /usr/lib/squid3/squid_ldap_auth -b "dc=craem,dc=net" -f "uid=%s" -h 192.168.2.5
auth_param basic children 30
auth_param basic realm Servidor Proxy cRAeM
auth_param basic credentialsttl 6 hours
auth_param basic casesensitive off

acl usuariosLdap proxy_auth REQUIRED
http_access allow usuariosLdap
http_access deny all

Antes de todo, miraremos si tenemos el fichero /usr/lib/squid3/squid_ldap_auth y probamos si el ldap funciona correctamente, haciendo la siguiente prueba:

root@proxy:/etc/squid3# /usr/lib/squid3/squid_ldap_auth -b "dc=craem,dc=net" -f "uid=%s" 192.168.2.5

Le damos al intro y ponemos un user y password:

root@netflow:/etc/squid3# /usr/lib/squid3/squid_ldap_auth -b "dc=craem,dc=net" -f "uid=%s" 192.168.2.5
usuario password
OK

Si sale Ok, entonces es que funcionará.. sinó, pues es que faltará alguna librería o similar

El primer parámetro: auth_param basic children
Indica el número máximo de procesos de auth concurrentes… ojo si tenemos muchos usuarios y colocamos un número bajo, aunque no debería ser problema.

auth_param basic realm Servidor Proxy cRAeM
Es lo que saldrá en la ventanita de user / pass … me gusta tenerlo personalizado 😉

auth_param basic credentialsttl 6 hours
Básicamente, el tiempo que tendrá cacheada nuestras credenciales

auth_param basic casesensitive off
Pues eso

El resto:

acl usuariosLdap proxy_auth REQUIRED
http_access allow usuariosLdap
http_access deny all

acl usuariosLdap proxy_auth REQUIRED
Definimos la acl usuariosLdap con autenticación requerida

http_access allow usuariosLdap
http_access deny all

Permitimos el acceso a los usuarios autentificados y el resto… deny

Enjoy your ldap + squid