Archivo de la categoría: Magia linuxera

¡Guarda con los Wildcards en los Unix / Linux!

(O “Cómo un guacho, un ‘*’ y un ‘tar’ te pueden ca*ar la vida”)

No puedo salir de mi asombro, ¡Me voló la galera lo que acabo de leer! ¡10 años usando Linux y nunca se me hubiese ocurrido!

Via slashdot me entero de este artículo titulado ‘Wildcards gone wild’ y publicado hace algunos dias por Leon Juranic, un investigador de DefenseCode.

Habla básicamente de ciertos chanchullos venenosos que puede uno hacer para convertir la ejecución de utilidades básicas de todo unix como ‘tar‘ y ‘chown‘, acompañadas de un aparentemente inofensivo *, en un total compromiso del sistema.

Según el autor del artículo, no se trata de nada nuevo, algunos hackers de la ‘vieja escuela‘ ya lo hacían. Pero, de alguna manera, estas técnicas nunca tuvieron grán difusión y nunca se habló de ello seriamente hasta ahora.

Todo administrador linux y toda persona minimamente interesada en la seguridad informática, deberia leerlo. Chusmeenlo, a mi me dejó boquiabierto y sintiendome un total naboletti por nunca haber visto esto antes.

Saludos,
Germán

Magia linuxera: Medir y diagnosticar el tráfico de red.

Recientemente uno de mis proveedores de servicio de internet en un centro de computos me alerto sobre un excesivo uso de red en mis servidores linux.

Esta situación me llevó a tener que investigar sobre herramientas que me permitieran medir el tráfico generado por cada servicio en ejecución.

Dejo a continuación algunos tips que me permitieron diagnosticar y solucionar mi problema esperando que sean de utilidad a personas en situaciones similares.

Tip 1: Ver puertos a la escucha

En muchos casos desconocemos cuales son las aplicaciones que tenemos instaladas en nuestro servidor que están generando consumo. Si ese es el caso, podriamos visualizar una lista de aplicaciones que están a la escucha utilizando el comando:

sudo netstat -lptu

Notese que netstat, para algunos servicios conocidos, nos mostrará un nombre de servicio en lugar del numero de puerto, por ejemplo ‘http’ en lugar de ’80’.

Tip 2: Ver el tráfico de red general del equipo y los hosts remotos con mayor consumo

Si queremos saber cuanto tráfico está circulando en general por las interfaces de red de nuestro equipo y una lista de hosts remotos conectados a nuestro equipo ordenados por consumo podemos utilizar la herramienta iftop

iftop -n -i eth0

El parámetro -n es para que me muestre solo ips y no resuelva los reversos a hostnames.El parámetro -i eth0 restringe la medición a la interfáz de red eth0.

Tip 3: Ver que a que servicio está conectado un host determinado

Si en el listado anterior vemos un host que está consumiendo demasiado, probablemente queramos saber a que servicio está conectado dicho host.

Una de las herramientas que podriamos utilizar para este fin es tcpdump, una herramienta que nos permite ver que paquetes estan circulando por la red. Con el filtro adecuado podemos restringir el dump para ver solo lo que nos interesa. En nuestro caso nos interesa ver los paquetes dirigidos al host que está generando tráfico.

tcpdump -f 'dst host 192.168.1.50'

Tip 4: Ver el tráfico de red total para un determinado servicio

Tanto si sospechamos que un servicio está generando demasiado tráfico, como si efectivamente lo corroboramos en base a los tips anteriores; Podremos visualizar el tráfico total para ese puerto o servicio utilizando el comando:

iftop -n -i eth0 -f 'dst port 27015 || src port 27015'

En lugar del numero de puerto, podemos colocar los mismos nombres de servicio que nos devuelve netstat.
Por ejemplo:

iftop -n -i eth0 -f 'dst port http || src port http'

Magia Linuxera: Gateway para compartir una VPN

No es casual que se utilice el termino gurú para referirse a la gente que sabe mucho de GNU/Linux. Ocurre que Linux tiene tanta potencia, y permite hacer cosas grosas con simplicidad y elegancia, que cuando ves a una persona resolverte la vida ejecutando dos comandos mágicos en una terminal, lo sentís un verdadero gurú.

Hoy configuré en la oficina algo muy simple, pero muy útil que me renovó ese sabor de la “magia” de linux.

Resulta que en la empresa donde trabajo, tenemos clientes distribuidos por distintas partes del mundo y a menudo nos ocurre que varias personas necesitamos acceder a la red del mismo cliente al mismo tiempo y las VPNs que nos dan solo soportan una conexión por usuario.

La situación se nos volvió crítica cuando tuvimos que hacer pruebas en simultaneo con el cliente previo a una implementación, terminar de instalar y configurar algunos módulos y al mismo tiempo dar soporte a otro soft que tenemos instalado en el mismo cliente. Teníamos al rededor de 6 personas intentando trabajar y solo dos conexiones VPN.

Esta escaecés de credenciales nos llevó al extremo de tener que armar grupos de Skype y planillas de google calc para coordinar el uso de las VPNs.

Finalmente encontramos una solución a este problema configurando uno de los servidores linux como gateway para compartir la VPN.

Paso a explicar entonces el procedimiento para compartir una VPN Cisco en Linux.

Paso 1: Conectarse a la VPN

Por ahi alguno de los lectores ya trabaja con VPNs cisco desde Linux. En mi caso, las estaciones de trabajo de la oficina usan windows y siempre utilizamos el cliente de cisco. Para los que como yo, tienen que pasar las configuraciones de las VPN a Linux, explico el procedimiento:

El cliente que se utiliza para conectar a VPNs cisco es el vpnc, este cliente utiliza archivos .conf que, a diferencia de los .pcf que utiliza el cliente de windows, no están encriptados.

Para convertir los pcf  al formato que utiliza la herramienta vpnc de linux, existe un script llamado pcf2vpnc, en Ubuntu viene junto con el paquete vpnc, en otras distros se baja de http://svn.unix-ag.uni-kl.de/vpnc/trunk/pcf2vpnc

La ejecución de este script es:
$ pcf2vpnc mivpn.pcf > mivpn.conf

Luego como root (o anteponiendo sudo)
# cp mivpn.conf /etc/vpnc
# vpnc mivpn

A partir de este momento estaremos conectados a la VPN. Notese que al ejecutar el comando ifconfig se puede ver una interfáz tun0 que corresponde al tunel VPN que acabamos de levantar.

Paso 2: El gateway

Configurar un linux como gateway es bastante sencillo.

Suponiendo que nuestra VPN corresponde a la interfáz tun0 y la placa de red del equipo es eth0 ejecutaremos los siguientes comandos como usuario root:
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
# iptables -A FORWARD -i eth0 -j ACCEPT

Paso 3: Rutas

Ahora que nuestro equipo está conectado a la VPN y opera como gateway, tenemos que decirle a las pcs que se van a conectar, que utilicen nuestro equipo como ruta a los hosts al otro lado de la vpn.
Suponiendo que las ip al otro lado de la vpn son de la forma: 192.168.226.X y la ip de nuestro equipo gateway es 192.168.1.32 ejecutaremos el siguiente comando:

En linux

$ route add -net 192.168.226.0/24 gw 192.168.1.32

En windows

> route add 192.168.226.0 mask 255.255.255.0 192.168.1.32

Paso 4: El acto de fe

A continuación, haremos el acto fe que se realiza después de probar cosas raras y mágicas como esta: probar y corroborar el funcionamiento de nuestra solución, para luego danzar cual indígena en trance festejando que todo funciona (?)

Apendice feliz: Juntando todo en un script

Como todo buen administrador, querremos scriptear este proceso para no tener que volver a hacerlo paso a paso la próxima vez que se levante la VPN o cuando se reinicie el equipo.

Para ello les dejo el siguiente script que podrán luego colocar en su rc.local
#!/bin/bash
if test $USER = root
then
echo "Levantando tunel esv"
vpnc esv
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i eth0 -j ACCEPT
else
echo "Este script debe ser ejecutado como usuario root"
fi

En fin, ¡Espero que les haya sido útil!

Un saludo,

Germán