Hay momentos donde necesitamos tener plena seguridad de que los datos que son transmitidos desde nuestra máquina hacia internet no son leídos por terceros (¡eso sería siempre!), cómo cuando vamos a un café con wireless disponible ó un congreso lleno de ávidos “hackers” todos con sus sniffers llenando sus logs de contraseñas de terceros y luego aparecen los blogs de “hackers éticos” “defaceados” (ñ_ñ). En fin, necesitamos seguridad, y no todo lo que usamos se encuentra bajo SSL, ó no sabes que tiene la opción, por ejemplo, ¡levante la mano quien usa twitter con https!. Hay otras situaciones molestas como cuando un maldito proxy nos filtra contenido, no podemos ver todos los sitios ó usar todos los servicios que necesitamos, o simplemente nos cierran puertos que necesitamos, como el sagrado IRC.

Bien, para todos estos males existen los túneles SSH, quienes realizan una conexión segura, encriptada, y desde un servidor remoto, por lo que nuestro origen queda anónimo. Todo lo que necesitas es una máquina en una red externa (típicamente un servidor) en la que tengamos acceso ssh. Según la necesidad, podemos requerir de 3 diferentes esquemas:

  1. Estás tras un proxy y no te deja salir a todas las redes o te filtra sitios que realmente necesitas. ¡Tú necesitas Dynamic application-level port forwading!
  2. Te cerraron los puertos y necesitas acceder a algún servicio del servidor A con el puerto XX. ¡Tú necesitas Local Port forwarding!
  3. Estás tras un router, con ip privada y necesitas que alguien entre a algún servicio de tu máquina sea HTTP, SSH, FTP, etc. ¡Tú necesitas Reverse Port Forwarding! (también llamado Remote port forwarding)

1. Dynamic application-level port forwarding

El esquema mas sencillo, funciona como un proxy para cualquier aplicación para cualquier servicio, SMTP, HTTP, POP, IMAP, etc. Bajo este esquema, puedes redireccionar todo el tráfico de un puerto local hacia un servidor remoto a través de otro servidor “de redirección” para cualquier tipo de aplicación que trabaje con protocolo Socks, aunque en la mayoría de los casos si no lo soporta puedes forzarlo con una utilidad que veremos mas adelante. En pocas palabras, haces que un servidor B baje por ti el contenido del servidor A y lo reenvíe a tu máquina local.

El escenario es el siguiente, tienes tu maquina “local” restringida, y tienes acceso a “shell.server.tld” y quieres usar la conexión abierta de “shell.server.tld” para que te reenvíe todo hacia “local”, esto lo hacemos mediante:

fulanito@local $ ssh -N -D 8888 shell.server.tld

La opción -N es para que no lanze ningún comando al hacer la conexión, solo establezca el tunel. Puedes añadir -f para que además se vaya a background. Y claro añade las opciones que necesites como -pPuerto -lUser, etc. para realizar la conexión ssh.

Y listo!, ahora vamos al Firefox (¿que?, ¿que no usas firefox? ¿en que mundo vives? osea jelou!) y en Edit->Preferences->Advanced->Network->Settings , seleccionamos “Manual proxy configuration” y en la entrada de text de “Socks Host” metemos 127.0.0.1 puerto 8888, desde luego puedes cambiar el puerto por otro aquí y en el comando ssh. ¡Presto! ahora ve a tu firefox y abre, digamos, http://www.whatismyip.org/, verás como ya estás saliendo desde la ip del servidor “shell.server.tld”

Si estas usando algún programa que no soporte Socks, puedes instalar “tsocks” y configurar en /etc/tsocks.conf la conexión. Por ejemplo hasta el final del archivo yo tengo:


server = 127.0.0.1
server_type = 5
server_port = 8888

Ahora, abre el tunel con el comando antes descrito, y posteriormente corre tu programa anteponiendo “tsocks”, por ejemplo:

fulanito@local $ tsocks opera

Et voilá!. Está de mas decir que puedes abrir mas de una conexión y usar varios navegadores saliendo por diferentes IP’s. Muy útil cuando andas mmm digamos, analizando un sitio de forma anónima ;-).

Local Port forwarding

Ahora sí vamos a forwardear puertos de verdad, El anterior esquema es a nivel aplicación, SSH entiende que debe servir de proxy para lo que le pida la aplicación, si pides la página de google por socks, ssh entiende que tiene que conectarse a google y reenviar el contenido a tu máquina local a través de un tercer servidor, y dinámicamente cambia del servidor de google al de yahoo, o hotmail, o facebook, etc. En este esquema de Local Port forwarding (y también el Remote/reverse port forwading) SSH simplemente reenvía todo lo que mandes a un puerto local hacia un servidor destino a través de un servidor donde tienes shell. Es decir, sólo puedes redirigir el tráfico hacia un sólo servidor. Usemos el vano ejemplo del IRC, no se porque siempre nos bloquean el puerto IRC (6667) así que tenemos el escenario:

Estamos en maquina “local”, tenemos acceso shell a “shell.server.tld” y queremos conectarnos a irc.freenode.net. Lo que tenemos que hacer es lo siguiente:

fulanito@local $ ssh -N -L 3337:irc.freenode.net:6667 shell.server.tld

Y listo, tenemos un tunel desde nuestra máquina en el puerto 3337 a irc.freenode.net:6667 a través de shell.server.tld. Ahora todo lo que nos queda hacer es:

fulanito@local $ irssi -c localhost -p 3337

Y irssi nos mostrará el MOTD (Message Of The Day) de freenode, tal y como si nos estuvieramos conectando directamente desde shell.server.tld.

Y claro, podemos usar el tunel para diversos servicios:

  1. Para conectar a un proxy externo: fulanito@local $ ssh -N -L 1080:proxy.server.com:8080 shell.server.tld
  2. Para conectarse a un servidor POP: fulanito@local $ ssh -N -L 1110:pop.server.com:110 shell.server.tld
  3. Para conectarnos al webserver de una máquina de la chamba: fulanito@casa $ ssh -N -L 8080:maquinadelachamba:80 maquina-con-ip-externa-de-la-chamba.dyndns.com
    Con este ejemplo aprovecho para mencionar un pequeño detalle: cuando especificamos “-L puerto:hostdestino:puerto shell.server.tld”, ponemos a “hostdestino” tal y como “shell.server.tld2 lo vé, es decir, si “shell.server.tld” puede ver a maquinas con ip’s privadas dentro de su red, podremos especificar en -L una ip privada, por ejemplo: “ssh -N -L 8080:192.168.1.100:80 189.10.20.30

Reverse/Remote Port forwarding

Este esquema es quizás el más divertido y confuso de los tres, basicamente es lo mismo que -L pero “en inversa”, expliquemos.

Con -L le dices a ssh que reenvíe el tráfico que vaya a un puerto local hacia uno remoto, con -R le dices a ssh que reenvíe el tráfico que llegué a un puerto remoto hacia uno local. ¿Para que nos sirve algo así?, pongamos dos escenarios:

1. El Soporte Técnico.
Tienes un problema con tu linux/mac os x/unix/whatever, y quieres que un amigo se conecte a tu máquina para ayudarte y estas detrás de un router, con ip privada, y sin privilegios para poder abrir un puerto en el router que redirija el tráfico a tu máquina. Solución, abres un tunel “reverso”:

fulanito@local $ ssh -N -R 2200:localhost:22 shell.server.tld

Lo cual quiere decir: “abre un tunel desde shell.server.tld en el puerto 2200 que reenvíe el tráfico hacia mi máquina (localhost) en el puerto 22”. Y ahora le dices a tu amigo que se conecte a shell.server.tld y desde ahí el tiene que correr:

sutanito@shell $ ssh -p2200 localhost

Y se reenviará la conexión hasta tu máquina, en otras palabras, podrá conectarse a tu máquina desde otra, pero sólo mientras mantienes abierto el tunel. Por default, todos los túneles escuchan sólo a la interfaz loopback, es decir, solo aceptan conexiones desde la misma máquina en donde se está abriendo el tunel, es por ello que tu amigo debe primero entrar a shell.server.tld y luego conectarse a “localhost”. Existe la posibilidad de que tu amigo se conecte directamente a shell.server.tld:2200 desde su máquina, eso lo veremos en el siguiente ejemplo:

2. Publicar un servicio.
Ahora, digamos que estas en un starbucks, o algo así. Y necesitas enseñar lo que tienes en tu webserver local a un cliente, como ya establecimos, no puedes abrirte un puerto para que el cliente mire hasta tu máquina con ip privada. Solución, abres un tunel “reverso”:

fulanito@local $ ssh -N -R 8888:localhost:80 shell.server.tld

Y listo, el túnel leerá la página de tu máquina y la servirá a través de shell.server.tld:8888, entonces le das a tu cliente la dirección http://shell.server.tld:8888/

Pero como decíamos en el anterior ejemplo, los túneles solo atienden a “localhost” por lo que para que tú cliente pueda acceder directo a shell.server.tld:8888, debemos agregar una opción al final del archivo /etc/ssh/sshd_config:

GatewayPorts yes

Y listo ahora los túneles escucharán en cualquier interfaz.

Nota:
Ten en mente siempre, la información viajará encriptada solamente desde tu máquina local hacia el servidor donde estás estableciendo el tunel, de acuerdo a nuestros ejemplos, la información viajará encriptada desde local <=> shell.server.tld, pero desde shell.server.tld <–> irc.freenode.net (u otro destino final) no estará encriptada. En el 99% de los casos esto servirá para mantener tus datos seguros.

Y bien, espero me haya sabido explicar, si creen que algo está demasiado confuso por favor, exprésenlo en un comentario. Si tienen mas ideas de como usar los túneles SSH, ó tienen una anécdota sobre alguna vez que tuvieron que ingeniárselas para resolver un problema usando túneles SSH, por favor, compártanla.

NaCl U 2

Nekrox me hizo recordar aquellos buenos tiempos, cuando los hombres eran hombres y escribían sus propios drivers… err ah no eso era en 1991, bueno 7 años después, aquél 1998 cuando instalé por primera vez mi redhat 5 o 6 no recuerdo, luego Armed Linux, Turbo Linux, Corel Linux, SuSe 6, Debian Potato, Mandrake 7 y finalmente Debian Woody, aquellos tiempos cuando te costaba 1 semana instalar linux, un montón de formateadas, particiones que no te quedaban, borrar “accidentalmente” tus preciados mp3’s, 1 mes de tratar de hechar a andar el video bajándote cuánto X86Config encontrabas en la red desde tu windows y luego pasándolo a tu partición de linux pues aun no tenías el modem funcionando en tu Linux y resultando que al final, aún no había driver pero alguien había encontrado la configuración para el driver de “vesa” que funcionaba con tu vga card, otros 2 meses configurando el sonido insertando módulos a manita con modprobe/insmod y argumentos como irq=0x11 dma=0x01 port=0x13, tratando de encontrar que módulo jalaba con tu tarjeta y si no emulándolo con el genérico “sb” (el famoso soundblaster) y 3 meses de prueba y error compilando módulos para tu kernel para hacer jalar ese maldito winmodem de tu PC, cambiando tu moderno y nuevo modem por el de tu cuate que tenía una máquina vieja con modem HCF (Hardware based) que si jalaba con linux, o pidiéndole lana a tus papás y rogándole a Dios que comprendieran que tu Linux necesitaba un modem serial, ese momento fantástico en el que surgía el moderno y parchado, mejorado y aumentado kernel 2.4 la celebración de todo el mundo linuxero, la nota en toda página y revista de linux, la emoción de cambiar de major release por primera vez en tu vida, los nuevos drivers usb, el nuevo sistema plug & play, todo era nuevo y fascinante, te pasabas 27 horas al día 10 días a la semana 40 días al mes disfrutando de tu sistema operativo, uno “construido” por ti mismo.

Desafortunadamente ya no tengo screenshots de aquellos bienaventurados días, el más viejo creo que es este de Junio del 2003, en windows había un tema muuuy lindo llamado Dervish, así que me puse a hacer uno para mi windowmaker que ha sido desde siempre mi window manager favorito, y me quedó así:

Shot wmaker dervish

A veces andaba dark:

¿Quién no se acuerda de dos de los mejores themes GTK de toda la historia “industrial” y “gorilla” de jimmac?:

Mi primera vez con XFCE:

Nunca me gustó del todo GNOME y lo trataba de dejar muy minimalista a la XFCE, que aún estaba verde,

y menos me gustó cuando empezaron a quitar opciones “avanzadas” muchos recordarán las críticas de Linus Torvalds hacia GNOME, y desde entonces, soy XFCE’ero de corazón:

Y ahora la distribución que utilizo es XUbuntu, lo sofisticado de debian, mas la pulida que le dan en canonical, menos toda la basura de ubuntu que le ponen “de más” y un Desktop Environment que no se mete en mi camino, y me permite configurarlo todo a mi gusto.

Y ustedes, ¿Cómo ha sido su camino con Linux?

El MOTOTASK A1200i es un Smartphone que cuenta con el sistema operativo Linux y dos procesadores internos para trabajar paralelamente, siendo que uno de ellos es únicamente para las funciones multimedia. Esto le permite al usuario accionar varios recursos al mismo tiempo. Tú puedes, por ejemplo, bajar E-mails, oír música y acceder a Internet sin perjudicar el desempeño del celular. A1200i, nunca un Smartphone fue tan bonito y nunca un celular fue tan completo.

Screenshot del mototask

Excelente Equipo!

Este ha sido quizás el cambio mas grande en la historia de este blog, nos cambiamos a WordPress :-).

Y la respuesta obligada a la pregunta obligada: ¿Porqué?, pues para no entrar en grandes debates y porque tengo mucho sueño y no quiero explayarme feo… la respuesta es: por mero aburrimiento y también por… sigue leyendo ;-)

Las personas que me conocen saben lo fácil que cambio de opinión, no puedo estar con una sola cosa o situación durante largos periódos de tiempo, tiendo a aburrirme, enfadarme, siempre hago cosas diferentes, las que me va poniendo el destino, como bien dice mi niña: “Ay Marco, tu eres una hoja en el viento”, a mí me gusta decir que “Soy como una pluma en el viento” como en Forrest Gump (Mi película favorita).

Bueno pues ya, esa ha sido la razón, DotClear es un software buenísimo, hace lo que debe hacer y nada mas, es “amistoso” con el diseñador y con el programador, separa muy bien las cosas y lo que me encantó de el, fue su manera de manejar las extensiones, plugins y temas, cualquiera que me pregunte que ¿Blog engine me recomiendas? mi respuesta, por ahora, sigue siendo: dotclear.

¿Y entonces?, bueno todo esto viene siendo un reflejo de como me he sentido últimamente, no sé porqué, no sé que me pase, no sé si es bueno o malo, pero ultimamente quiero que las cosas funcionen, ¡Y ya!, no quiero perder pasar el tiempo configurando cosas, poniendolo super personalizado para verme bien l33t, sólo quiero que funcione, para ejemplificar mas, en un reciente proyecto hecho en java (jsp, servlets, etc) usé como plataforma windows xp + eclipse + java sdk + tomcat, sólo para no preocuparme por nada mas que programar, y sí, también aprender y tener esa experiencia.

Pero este fenómeno no sólo está sucediendo conmigo, a los compañeros y amigos de #unixmexico, por ejemplo, les está pasando algo que hoy ayer en la noche ice9 lo dijo muy bien en una frase:


todos los "gurús" que conozco
que le uían a los asistontos de windows
y a las cosas demasiado sencillas y que no sabes que tanto hacen de fondo
se pasaron a sistemas tipo win2
que solo les falta traer wizard para "how to clean my ass in bath"

LOL, reí mucho cuando dijo eso, pero lo peor es que ¡es cierto¡, usuarios como split_yo gurú de BSD’s, jmedina experto y fan from hell de slackware, que se pasó casi al mismo tiempo que yo a gentoo, estan ahora usando ubuntu y kubuntu, respectivamente, vamos hasta el dflores usa ubuntu en su G4!, y ahora yo, conseguí una lap, y lo que le pongo es, ni mas ni menos que ¡xubuntu! xD, si yo, amante del CLI (Command Line Interface), amante de compilar programas, de optimizar, de leer manuales enteros para tener las mejores configuraciones para mis programas, ahora me decanto por la autconfiguracion y los asistentes, ¡San TUX, perdóname, porque he pecado! (ja!), y bien, ¡me encanta la idea!, eso de meter el cd de xubuntu y en 30 minutos tener un sistema de desktop listo para usar, con absolutamente todo autoconfigurado y ¡bien configurado! con personalizaciones a clicks de distancia, es sencillamente genial, y mucha gente esta haciendo lo mismo, he visto sobre todo debianitas pasarse a ubuntu (lo predije, muajajaja), ¿Qué está pasando?

En mi muy particular caso mío de mi persona propia personal que es de mí mismo, ahora como profesionista me veo como generador de soluciones, la gente tiene problemas, nosotros damos soluciones, y las soluciones deben ser rápidas, bien hechas, y que hagan lo que tienen que hacer, no más, no menos. Ahora me toca buscar esas soluciones y muchas veces diseñarlas y construirlas yo mismo, y para ello requiero de una plataforma que tan solo que funcione y funcione bien, que no me quite tiempo en configurar algo, que me deje trabajar en lo mío y ya, este sentimiento es el que (creo yo) me ha hecho usar windows :-/, ubuntu, o java, cosas inimaginables en mi persona hasta hace un par de meses :->.

Y en general, creo que se está generando un nuevo tipo de comunidad en el software libre, aun no se consolida y no se aprecia bien como tal, pero ahi está latente, ¿ejemplo?, algun viejo linuxero de mis tiempos había visto algo como ¿guía ubuntu?, miles de “como hacer todo” en una sóla página para una sóla distribución hecha por usuarios de la distribución, eso solo lo había visto en tal vez laespiral, pero no con tanta participación ni tan elaboradamente, otra cosa, Ubuntu y Novell, son los dos principales factores de hoy en día, Novell con sus contribuciones a GNOME, MONO, XGL. Ubuntu haciendo linux para humanos, cada día hay mas usuarios de software libre, y es algo que festejar. ¿Google?, no sé me tiene algo decepcionado, promueve el software libre u opensource, pero todo lo que hace lo hace para windows :-/, apenas sacó picasa para linux, gran cosa… :-P. Bueno, decía, la comunidad está creciendo y creo que aquí está actuando la ley de entropía, no creo que sea estereotipo, al menos no con los “gurús”, pero si hay algo de entropía aquí, al menos, eso he observado. Además cada día nacen mas y mas herramientas que te permiten realizar mas rápido tu trabajo, la gente se está acostumbrando, te piden las cosas cada vez mas rápido y si te dejas, tienes que buscar la manera de cumplir los tiempos, y nuevamente, vas a usar aquello que te permita trabajar sin distracciones.

Así que no queda mas que preguntar, Y usted, ¿que opina?

Chale, ya me explayé feo … pues bien, a pesar de que dotclear tiene todo lo que quiero y puedo hacer con el todo lo que quiero, ya me aburrió y también quiero algo mas fácil de administrar, y que mejor que un proyecto soportado por miles y miles de usuarios, miles de temas, miles de plugins y con lo último de la tecnología en blogs ;-)

Sobre el blog, el script para importar los posts, links, categorías y comentarios lo encuentran en los foros de wordpress.org, esta en un svn no recuerdo la url, hay para importar desde atom, así que mis amigos jawseros, ¿porque siguen sufriendo con bugs interminables? :-P, sobre el tema, es original de: http://cinexl.net/blog, por ahi hay un mod interesante. La imagen es de jimmac, Gnome Developer, no me convence del todo, pero por ahora quedó chido, no dejen de probar el live search del sitio, AJAX es genial!

En otras cosas, ¿Tienen mucho tiempo y nada que hacer? resuelvan este acertijo, tienes que adivinar la url de la siguiente página, la página actual te da la pista de como encontrar la segunda, el número actual NO tiene nada que ver con el siguiente ;-), suerte!… muuajajajaja

NaCl U 2 …

[UPDATE] El ch4neke, fiel usuario de slackware, ahora esta usando ubuntu, afirma estar enfadado de editar archivos, y ahora esta bajando kubuntu para su distribución de trabajo. xD

¿Eres administrador de sistemas?, ¿Administras un servidor de correo?, ¿Te harta lidiar con el spam?, ¿Tienes ese spammassasin lleno de reglas que ya ni recuerdas y aun así te sigue llegando spam?, ¿Usas Postfix?, ¿Te dejó tu novia?, bueno eso no :-p, pues Postgrey es para ti !

Postgrey es un pequeño script en perl (pequeño de 800 líneas :-/) que te permite implantar listas grises (Greylisting) en tu postfix, ¿Que que es greylisting?:

Greylisting es el método por el cual se deniega el primer envío de un remitente desconocido, mediante un código de error 450 (deferred). Muchos de los virus y spammers no siguen el protocolo SMTP correctamente, con lo que nunca volverán a enviar ese mensaje. Mediante el greylisting podemos evitar que nos lleguen mensajes de virus y proxies abiertos, pero no podemos evitar que nos lleguen de servidores de correo mal configurados que permiten relay, aunque con un poco de suerte en el siguiente reenvío ese servidor ya esté en alguna lista RBL y podremos evitarlo.

¿Y eso de que me sirve? , bien, como todos sabemos los spammers tienen scripts que se conectan a servidores smtp mal configurados, y desde ahi te envian su spam con direcciones falsas tipo hot_jenny_wants_you@xYab34S09.com , y es imposible responderles para mentarselas :-), pues bueno en esto está la ventaja del greylisting, lo que hace es:

  1. Recibe el mail, guarda en una pequeña bd la dirección del remitente, si ésta no existe en la bd de mail’s auténticos prosigue con el paso 2, si está paso 4
  2. inmediatamente lo rechaza con un código de error 450 (delay ó intentar después)
  3. el servidor SMTP remoto entiende el mensaje y vuelve a mandar el mail en el tiempo especificado
  4. postgrey recibe de nuevo el mail se da cuenta que ya habia llegado antes, revisa el delay, agrega el remitente a la bd de cuentas de mail auténticas (si es que aun no está) y lo deja pasar al mta (postfix)
  5. el mail llega a su destino (tu cuenta)

¿Y que ganamos con esto?, la seguridad de que te van a llegar mails sólo de cuentas existentes, adiós spam!, ¿demasiado bueno para ser verdad?, así es :-D, los spammers podrían adaptar su software para engañar al postgrey enviando spam desde cuentas existentes, pero esto te da una enorme ventaja, ya que puedes bloquear facilmente esas cuentas, o rango de ip, o dominios o como se te plazca, que de otra forma no podrías, como bloquear un dominio inexistente de la forma xYab34S09.com, por ejemplo, o un usuario xyasdyigsf2314.yahoo.it que tampoco existe

Lo he probado desde hace 1 mes en dos servidores de mail y hasta ahora 0 spam, lo juro! (si split_yo, por mi madre que si), CERO, altamente recomendado ;-)

Página de PostGrey:
http://isg.ee.ethz.ch/tools/postgrey/
Informacion de postfix acerca de greylisting
http://www.postfix.org/SMTPD_POLICY_README.html
Sobre greylisting
http://greylisting.org/
Guía rápida de Postfix (buenísima)
http://www.servitux.org/view.php/page/postfix

Anterior Utilidad – Las Pequeñas Grandes Utilidades (Woof)