Cosas varias, tecnología y familia.... y descargos de la pega

Mostrando entradas con la etiqueta redes. Mostrar todas las entradas
Mostrando entradas con la etiqueta redes. Mostrar todas las entradas

viernes, 7 de agosto de 2009

Tech: Quieres ese video de youtube? y en forma manual?? ACTUALIZADO!!!!

Browseando por InterNerd me encontre con un truquito para quedarte con los videos de YouTube que más te gusten, bueno los que menos te gustan también los puedes bajar, pero no creo que quieras.

Existen muchas maneras de obtener esos videos, algunos ocupando programas, otros ocupando páginas como keepvid.com o bajaryoutube.xxx (no me acuerdeo de la extension pero una busqueda en G te puede ayudar.)
Esta manera en particular no ocupa absolutamente nada más que las teclas de tu keyboard y los click de tu mouse.
  1. Ingresa a youtube y busca tu video favorito.
  2. Abre el código fuente: en firefox es "Ctrl-u", en IE no me interesa y en los otros, no tengo idea
  3. Busca (realiza una búsqueda) por "fullscreenUrl =", lo que vas a encontrar es un corcho GIGANTESCO, pero es parte de eso lo que necesitamos
  4. Dentro de ese corcho vas a buscar visualmente la palabra "video_id=" (esta justo detras de un & -andperson-)
  5. Desde allí incluyendo el "video_id=" hasta justo antes del "&rec_categories=" SIN INCLUIR , NI SIQUIERA EL "&" vas a copiar.... Ctrl-C
  6. vas a la barra de direccion y pones http://www.youtube.com/get_video?video_id=..............E%3D y ENTER (lo que está en rojo resaltado es lo que debes reemplazar con lo que copiaste -Ctrl-V) y no olvides la llave "get_video?"
  7. Grabas el video en tu disco y listo.
El video queda con formato flash, para convertirlo puedes ocupar cualquier programa que hay en internet y de esos açhay varios, asi que googlea no ma'

Saludos

ACTUALIZACIÓN: 24/08
Desde hace unas semanas YT cambió completamente los codigos de su site, asi que este método quedó obsoleto, solo queda www.keepvid.com y otros parecidos para bajar los videos.

ZONOMA!

viernes, 31 de julio de 2009

Tech: Traffic Shaping (per host)

Después de mucho auto negarme la necesidad, y decir cosas como "es difícil, tengo que estudiarlo", que a pesar de ser completamente verdad, en mi interior no quería hacerlo ya que es una jugada sucia que como ISP podemos realizar para y en contra de nuestros clientes. Pero naturalmente uno viendo la realidad y examinando feacientemente los hechos, llega a la conclusión de si.... es necesario, asi que me puse a investigar y logramos realizar el tan mal visto traffic shaping y limitación de tráfico al 95% de nuestros usuarios (95% de nuestro trafico internacional)

Nuestra intención principal es hacer limitación por equipo cliente (o rango) y no tanto por tipo de tráfico.
Voy a partir diciendo como traté y no pude, para luego seguir con lo que si funcion:

Para trabajar con traffic shaping y limitación de ancho de banda, escogí usar el encolado HTB que en conjunto con TC (iproute2) son aparentemente la mejor opción par ocupar en Linux, tanto por el rendimiento como por en uso de CPU de la máquina en cuestión.

El TS (traffic shaping) es una forma de limitar la velocidad de transmisión de cierto flujo de datos que se van "introduciendo" dentro de un tubo con un ancho limitado, y que se le puede dar a su ves, calidad de servicio.

No voy a profundizar en los tecnicismos para eso deben leer LARTC y entenderlo.

Como No funcionó:

No funcionó tratando de hacer una cola y clase del tipo 122:2 y 123:2. Esto tratando de hacer una diferenciación por clase de dirección IP y su respectivo host, es decir 122:2 para representar al host 200.112.122.2 y 123:2 para representar al 200.112.123.2. Quería mantener cierto orden en el script. A pesar que los creaba sin problemas, no había forma de hacer que el trafico se diferenciara por alli (que entrara en esas colas).

Como SI funcionó

Después de mucho intentarlo, decidí hacerlo correlativamente empezando de la cola 1: en adelante (1:1, 1:2, 1:3 etc...) y desde allí... lo demás fue trivial.-

En script cuenta con 3 pasos. La creación de un canal común para un cliente y la creación de 2 subcanales para diferenciación del tráfico interno.

Entonces:
tengo un archivo de la siguiente forma

"nombre_cliente" "ancho de banda_kbps" "ip1" "ip2" "subred1/mask"... etc
Como ejemplo
Carlost 2000 192.168.3.2 192.168.3.4 192.168.4.0/24

Entonces

En forma simplificada, creo una nueva cadena en la cadena POSTROUTING de la tabla MANGLE utilizando iptables, con el nombre de cliente como el nombre de la cadena.
iptables -t mangle -N Carlost
Entonces creo las cadenas iniciales
tc class add dev $iface parent 1: classid :$counter htb rate $BW\kbit
tc class add dev $iface parent 1:$counter classid :$(($counter+1)) htb rate $((9*$BW/10))\kbit ceil $BW\kbit
tc class add dev $iface parent 1:$counter classid :$(($counter+2)) htb rate $((3*$BW/10))\kbit ceil $((6*$BW/10))\kbit

Donde: $iface es la interface desde donde proviene esa red o IP
$counter es un contador simple
$BW es el ancho de banda asociado al cliente
(lo demás) son solo operaciones matemáticas.

Entonces aplico classify para clasificar los paquetes sobre la cadena creada para el cliente.
$ipmangle -A $comment -o $iface -j CLASSIFY --set-class 1:$(($counter+2))
$ipmangle -A $comment -o $iface -p ICMP -j CLASSIFY --set-class 1:$(($counter+1))
$ipmangle -A $comment -o $iface -p tcp -m multiport --sports 80,8080,500,20,21,22,19,443,53,110,7,993,6890:6900 -j CLASSIFY --set-class 1:$(($counter+1))
$ipmangle -A $comment -o $iface -p tcp -m multiport --sports 5900:5906 -j CLASSIFY --set-class 1:$(($counter+1))
$ipmangle -A $comment -o $iface -p udp -m multiport --sports 53,500,161,162,7,6890:6900,5060 -j CLASSIFY --set-class 1:$(($counter+1))
$ipmangle -A $comment -j ACCEPT ### necesario ya que CLASSIFY no es de retorno
Y después iterando sobre las IPs del cliente (y subredes si corresponde) para mandarlo a la cadena asociada a su trafico.

for ip in "${IPs[@]}" ; do
$ipmangle -A POSTROUTING -o $iface -d $ip -j $comment
done

Y eso es todo todito todo...

Cualquier duda solo posteen

PS: Tambien siendo un router sin NAT se puede limitar el ancho de banda de subida muy failmente sin recurrir a otro trucos... solo copien la cola principal en la otra tarjeta y creen la regla general con classify orientado a la tarjeta de salida.

Ciao.

martes, 21 de abril de 2009

Tech: VLAN Bridge Tunneling (VPN) - Linux

Hace poco se me presentó la necesidad de crear una VPN en capa 2 (enlace), es decir una VPN que funcione como bridge, que además pueda pasar jumboframes (VLAN TRUNKING), Es decir una troncal con VLANs.

En un comienzo pensé en hacerlo como un tunnel GRE, sin embargo para que GRE tenga soporte de bridge en linux hay que recompilar un montón de cosas, y estaba buscando simplicidad.

Opté entonces por ocupar el módulo TUN/TAP para el cual TAP funciona como una interface virtual de capa 2, justo lo que andaba buscando.

Aunque quería hacerlo en forma de linea de comando como se hace con los túneles IPIP, GRE y otros, la verdad es que no encontré el como, asi es que ocupé una solución demoníaca externa AKA, un demonio de VPN.

TUN/TAP es ocupado por varios paquetes de soluciones VPN y muchas otras soluciones de virtualización para crear túneles de capa 2 o 3. Entre los paquetes de VPN, con los que ya había trabajado anteriormente, están OpenVpn y VTUN. Ocupé VTUN que es mucho más fácil de trabajar mas simple y mucho mas liviano, y si fuera necesario también encripta y comprime.

De como se hace... siga leyendo

Bueno lo primero es hacerse del paquete, lo pueden encontrar en vtun homepage y muchas distros los traen en sus repos.-

Después de compilar/instalar ->

Carguen el módulo en el kernel (vean la docu de su distro para dejarlo autoiniciado)

modprobe tun

Revisen vía dmesg o vean si aparece en /dev/net/tun.
Como VTUN trabaja en modo cliente/servidor, deben tener cosas similares en ambas máquinas.

En el server, dejen todo lo que viene por defecto y agreguen el siguiente perfil (bueno sería que borraran los otros)

Tunnel {
passwd tu_password; # Password
type ether; # Ethernet tunnel
device tap0; # Device tap0
proto udp; # UDP protocol
# compress lzo:1; # LZO compression level 1
# encrypt yes; # Encryption
stat yes; # Log connection statistic
keepalive yes; # Keep connection alive

up {
# Connection is Up

# Assign IP address
# ifconfig "%% 10.1.0.1 netmask 255.255.255.0";
ifconfig "%% up"
# No es necesario agregar una IP, ya que se va a agregar a un bridge

# Add route to net 10.2.0.0/24
# route "add -net 10.2.0.0 netmask 255.255.255.0 gw 10.1.0.2";
# No es necesario agregar rutas

# Enable masquerading for net 10.2.0.0.0/24
# firewall "-A FORWARD -s 10.2.0.0/24 -d 0.0.0.0/0 -j MASQUERADE";
# y Absolutamente inecesario un firewall
};

down {
# Connection is Down

# Shutdown tap device.
ifconfig "%% down";

# Disable masquerading for net 10.2.0.0.0/24
# firewall "-D FORWARD -s 10.2.0.0/24 -d 0.0.0.0/0 -j MASQUERADE";
};
}

En el Cliente de modo similar agregamos el siguiente perfil

Tunnel {
passwd tu_passwrd; # Password
type ether; # Ethernet tunnel
device tap0; # Device tap0
proto udp; # UDP protocol
# compress lzo:1; # LZO compression level 1
# encrypt yes; # Encryption
stat yes; # Log connection statistic
keepalive yes; # Keep connection alive

up {
# Connection is Up

# Assign IP address
ifconfig "%% up";

# Add route to net 10.2.0.0/24
# route "add -net 10.2.0.0 netmask 255.255.255.0 gw 10.1.0.2";

# Enable masquerading for net 10.2.0.0.0/24
# firewall "-A FORWARD -s 10.2.0.0/24 -d 0.0.0.0/0 -j MASQUERADE";
};

down {
# Connection is Down

# Shutdown tap device.
ifconfig "%% down";

# Disable masquerading for net 10.2.0.0.0/24
# firewall "-D FORWARD -s 10.2.0.0/24 -d 0.0.0.0/0 -j MASQUERADE";
};
}


Al igual que el anterior, se pueden dar direcciones IP y rutas, pero para nuestro caso no es necesario. Los dejé a la vista, pero comentados

Una ves terminadas las configuraciones se debe levantar el tunnel

En el Server (los [...] son opcionales para especificar cual archivo ocupar)

vtund -s [-f /etc/vtund/vtind.conf]

En el cliente

vtund Tunnel

Una ves conectados asegúrense que las interfaces estén UP

Posteriormente en el Server, creamos el bridge

brctl addbr br0
brctl addif br0 eth1 #La Interfaz VLAN TRUNKING
brctl addif br0 tap0 #La interfaz virtual
ifconfig br0 up #Asegúrate que las otras 2 interfaces esten UP

y en el cliente hacemos lo mismo según corresponda(tap0 puede cambiar a tap1 y eth1 puede no ser tu troncal ;) )

Ahora que el bridge está UP podemos crear una interfaz vlan/virtual para revisar estado y administrar inline, y listo, hemos teminado nuestro tunnel bridge con soporte VLAN.

Ciao!!!

jueves, 19 de febrero de 2009

Tech: Log blocked IPs by mod recent

Hace un tiempo les mencioné como hacer un bloqueo de puertos utilizando el mod recent de iptables.

Bueno, ahora les digo como pueden hacer un logeo de los mismos… es decir, generar una entrada en el log cada vez que se bloquea una ip.

El truco es muy simple. Veamos primero el original:

iptables -A INPUT-p tcp -i eth0 --dport 22 -m state --state NEW,INVALID -m recent --name ChicoMalo --set
iptables -A INPUT -p tcp -i eth0 --dport 22 -m state --state NEW,INVALID -m recent --seconds 60 --hitcount 4 --name ChicoMalo --update -j DROP

Primero damos vuelta el orden. Ya que es más optimo que se revise al revés, es decir, para el primer paquete pasa de larglo la primera regla y después los segudnos y los bloqueados no llegan a bajar nada.

Y además le agregamos la línea donde nos va a loggear la dirección bloqueada, con un hitcount con 1 menos que el anterior y listo.

Entonces:

iptables -A INPUT -p tcp -i eth0 --dport 22 -m state --state NEW,INVALID -m recent --seconds 60 --hitcount 4 --name ChicoMalo --update -j DROP
iptables –A INPUT –p tcp –I eth0 –dport 22 –m state –state NEW,INVALID –m recent –seconds 60 –hitcount 3 –name ChicoMalo –update –j LOG –log-prefix “BLOQUEADO: ”
iptables -A INPUT-p tcp -i eth0 --dport 22 -m state --state NEW,INVALID -m recent --name ChicoMalo

Eso es todo, aqui tienen sus logs de bloqueo de IPs.

lunes, 13 de octubre de 2008

ZoneMinder en ArchLinux

Como instalar ZoneMinder en ArchLinux.
Para aquellos que no lo saben, ZM es una solución para trabajar con cámaras IP o cámaras corriente a través de dispositivos compatibles con video4linux, siendo esta última la más aplicada y apetecida. Quedando como un servidor web accesible (según tus conocimientos) desde cualquier parte del mundo.Vista Exterior
Funciona con un gran número de camaras IP y webcams, pero la mejor es usarlo con una capturadora múltiple que puedes adquirir (en Chile) a buen precio en "MIRAX".
Esta es una guía para ArchLinux pero puede ser aplicable a otras distro de Linux tambien.
ZoneMinder, como es una mezcla entre servidor de streaming y aplicación capturadora, necesita ciertos requerimientos para PHP de modulos de perl. Además de por OBLIGACIÓN, apache con php y mysql
Primero para archlinux, actualiza la base de datos de los repositorios (todo como root)
# pacman -Sy
Segundo, debe instalar los siguientes paquetes con todas sus dependencias:
# pacman -S perl-dbi perl-dbd-mysql perl-date-manip perl-libwww
Tercero, debes compilar un paquete perl que falta (perl-php-serialization), lo mas fácil es hacerlo via PKGBUILD (solo en archlinux) baja el siguiente archivo y compilalo con makepkg e instalalo
/perl-php-serialization # makepkg
(..... output suppressed...)
/perl-php-serialization # pacman -U perl-php-serializarion-0.29-1-i686.pkg.tar.gz
Cuarto: bajar y compilar zm desde su sitio de descarga.
Cuarto (y medio), llena la base de datos con el shema que tienen en el directorio db.-
# mysql -p mysql <>
El "-p" es por si tu base principal está protegida con password
# mysql zm -p
mysql> grant select,insert,update,delete on zm.* to user_de_la_base@localhost identified by 'pass_de_la_base';
mysql>quit
# mysqladmin reload
Para el configure ocupa la siguiente orden
# ./configure --with-webdir=/home/httpd/zm/ --with-cgidir=/home/httpd/zm/cgi-bin --with-webuser=nobody --with-webgroup=nobody ZM_DB_PASS=pass_de_la_base --prefix=/usr/
Ten cuidado de cambiar los destinos de los directorios según tus necesidades, ademas del password de la base de datos etc.-
# make && make install
Edita el archivo /usr/zm/zm.conf a conveniencia y ra'
Importante para PHP, debes editar el php.ini (usualmente en /etc/php/) y cambiar la siguiente línea
short_open_tag = Off
por
short_open_tag = On
Reinicia apache y browsealo via cualquier browser.-
OJO: Firefox3.* tiene un problema al mantener los sockets abiertos incuso una ves cerrando la ventana de una cámara, y abre otro socket si abres de nuevo esa ventana ocupando recursos, memoria, ancho de banda ETC en forma progresiva, la manera más comoda de solucionar esto por ahora es diciéndole a FF que trabajas sin conección a la red y después lo devuelves.-
Un ejemplo de como trabaja esto en http://carlost.blogdns.com/zm usuario invitado, pass invitado (Si está oscuro, es de noche :) )



ACTUALIZACIÓN: Saque la cámara hace tiempo, así que solo van a ver el software funcionando, pero no la imagen.- :P
También se me olvidó sacar la imagen de muestra del antiguo hosting, y no deje ningún respaldo :(

Actualización 2: Ago 2009: Existe un "PKGBUILD" de Zoneminder completo en la paina de AUR de archlinux en el cual solo aplicas "makepkg" y ya tienes todo para instalar completamente.

jueves, 25 de septiembre de 2008

Serial Console Linux in 1 (or more) steps

(esta está copiada con sus comentarios del ex-blog)

Bueno, una guía super corta de como se activa la puerta serial para consola en linux.

Primero averigua si tienes las puertas seriales activas y reconocidas en el kernel (si no, debes habilitarlas en la BIOS de la máquina)
Para eso puedes ver el dmesg (como root o sudo)

# dmesg | grep ttyS
serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
...

Los valores en negrita son los que te indican que están activos, el famoso UART

Otra forma es con el programa setserial (que es posible que tu distro no lo tenga)

# setserial -g /dev/ttyS[0123]
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3
/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3

En este caso tengo dos seriales: com1 y com2 en ttyS0 y ttyS1 respectivamente.

Bueno... a lo que importa; Edita y agrega la siguiente linea en /etc/inittab

c0:12345:respawn:/sbin/agetty -8 9600 ttyS0 vt100

Puedes cambiar vt100 por vt102 o linux o ANSI (casi no cambia nada). Despues tambien tienes que editar el archivo /etc/securetty y agregar ttyS0 o ttyS1 o los 2, ejecutas el siguiente comando

# init q

Y ya, intenta conectarte con cualquier programa serial (minicom en linux, procom en Win, teraterm win, etc etc) 9600 8n1

Con eso es necesario y suficiente para conectarte en forma serial, si quieres mas opciones sigue leyendo

Para mejorar un poco las prestaciones de esto, puedes hacer que Grub se muestre tambien en el inicio vía puerto Serial

Agrega las siguientes lineas a /boot/grub/menu.lst como sigue, antes de la seccion de titulos (title)

serial --ubit=0 --speed=9600
terminal --timeout=5 serial console

Con esto entregas un mensaje de 5 segundos para presionar cualquier tecla, y dependiendo de donde se presione esta tecla (consola o terminal) es donde se muestra el menu de grub.

Ahora si quieres que se muestren todos los mensajes del inicio del kernel (en ocaciones muy necesario) en tu consola serial, debes agregar otra cosa en el grub, en la seccion del kernel

# (0) Arch Linux
title Arch Linux
root (hd0,0)
kernel /vmlinuz26 root=/dev/sda3 ro vga=794 console=ttyS0,9600
initrd /kernel26.img

Sería bueno tener un menu independiente para tu acceso serial si quieres tener los mensajes del kernel en tu consola serial

Y listo, con eso se termina este tip..


comentarios

  1. Gracias por este pequeño manual lo estoy intentando, y tengo una pregunta.-
    El apartado # (0) Arch Linux
    title Arch Linux
    root (hd0,0)
    kernel /vmlinuz26 root=/dev/sda3 ro vga=794 console=ttyS0,9600
    initrd /kernel26.img

    como se añade al kernel?.-

    muchas gracias y un salduo
    (uso Hardy 8.04 LTS y voy a intentarlo)

    Escrito por Carlos — 28 Oct 2008, 12:50

  2. Eso está en el menu de grub en /boot/grub/menu.lst. Cada "title" es una forma de entrada al menu de inicio del grub (uno para tu linux, uno para tu windows si lo tienes y etc) al agregar "console=ttyS0,9600" en la línea del kernel le dices que su consola principal va a ser ttyS0 (com1) a 9600 bps. y asi entrega todo el despliege de inicio en la consola serial (no va a aparecer en la salida VGA normal)

    Escrito por CarLost — 29 Oct 2008, 17:53

martes, 12 de febrero de 2008

Protegiendo puertos con IPTABLES y mod RECENT con 2 lineas

Este está catalogado como TIP de linux:

Hace mucho tiempo me di cuenta de los muchos atakes que subre el puerto 22 de ssh, y empecé a buscar formas de protegerlo, encontrando unas pocas y muy diversas formas.

Las que incluyen por ejemplo: Levantar el servivio de acuerdo con una cadena específica en la tarjeta de red. Conocido como Port Knocking, esto se logra con un par de programas.. los voy a poner cuando me acuerde de cuales son..

Otra, incluye un simple cambio de puerto... es muy efectivo elimina los atakes a casi 0, en mi caso 0, pero tiene el incoveniente que si es una máquina orientada a dar el servicio de ssh (muy pocos casos) tienes que decirles a todos que puerto ocupar.

La última forma, es quizas una de las más elegantes y de mayor efectividad que he visto.

esta consiste en un módulo relativamente reciente de nf-iptables, el modulo se llama "recent" y puede trabajar de muchas formas.... aqui la más efectiva segun yo!

iptables -A INPUT-p tcp -i eth0 --dport 22 -m state --state NEW,INVALID -m recent --name ChicoMalo --set
iptables -A INPUT -p tcp -i eth0 --dport 22 -m state --state NEW,INVALID -m recent --seconds 60 --hitcount 4 --name ChicoMalo --update -j DROP

explicacion:

La primera línea envía cualquier paquete con flag "new" e "invalid" a una tabla especial llamada "ChicoMalo" y lko deja pasar a la sigiuente linea (recent no es excluyente).

La segunda linea hace el truco: dice literalmente que cualquier paquete con flag "new" o "invalid" será comparada con la lista de las de ChicoMalo, y si encuentra una cuarta coincidencia dentro de los 60 segundos anteriores, simplemente lo bota.

Es decir.... dentro de 60 segundos tu puedes hacer 3 intentos de conecciones nuevas, a la cuarta, te bota

Lo puedes probar con el comando netcat

netcat 22

Lo ejecutas 3 veces y a la cuarta, ya no funca..... esperas un minuto desde la última ves e intentas de nuevo.

Lo entretenido es que puedes protejer cualquier puerto que quieras, y es escalable, por defecto tiene un tamaño de 100 chicos malos (segun recuerdo) que puedes cambiar a voluntad al momento de cargar el módulo.

Como se carga el modulo..... si mantienes los parametros por defecto, se carga al ejecutarlo y ya. De otro modo lee el manual de iptables, alli esta todo....

Otra cosa muy entretenida.... vi por alli que es escalñable en el sentido del tiempo de atake.... es decir con un script más elaborado puedes decirle que cuando alguien se bloqueo en los 60 segundos pase a una lista de 1 hora, si aparece determinadas veces en la de 1 hora, lo botas por el dia, y asi susesivamente!!!!!

Investiga y lee, es lo mejor..... en otras palabaras RTFM

io.

Counter