Fuck, I miss sleep.
Author: sergio
Y… me hackearon
Pues… qué puedo decir? Me descuidé, y me descuidé horriblemente.
La historia, horriblemente, es como sigue: hace un mes me ví en la necesidad de configurar un servicio de correo express, por cuestiones profesionales. Y como buen debianero, dije “pues el exim, he escuchado que es muy práctico!” Y entonces hice un sencillo apt-get, configuré algunos parámetros… y listo. No configuré un open relay (digo, tampoco soy un completo idiota) pero sí dejé muchos parámetros de manera insegura. Aún peor, y a diferencia del resto de mis servicios, no lo puse en una jaula, ni le cambié el usuario predeterminado. Total que bueno, hay cosas que uno mismo se busca…
Un par de semanas después, Javier tuvo una plática (de botnets) y lo acompañé. Durante la plática, comencé a recibir un montón de correos de sergiob, informándome que habían nuevos comentarios en el blog. Como esto es tremendamente raro (considerando que nadie *jamás* pone comentarios – vamos, casi nadie lee el blog para empezar) inmediatamente verifiqué… y ciertamente, era puro spam. Cambié la configuración predeterminada del wordpress, de manera que todos los comentarios requirieran aprobación previa, y cerré capítulo. Ni volví a pensar en ello…
…hasta hoy.
Amazon (mi amable proveedor de nubecitas) me mandó mi factura mensual, como todos los meses. Apenas y volteo a ver los correos: las cuentas suelen ser ridículamente bajas. Excepto hoy. Hoy, la cuenta reportada excedía en 10,000% (y no, no exagero) lo que normalmente pago. Lo que es… bueno, es bastante. Mi reacción fue inmediata: verifiqué el reporte de uso de Enero, observé con horror que la cuenta era correcta, bajé los reportes para un análisis posterior, y abrí una terminal para corregir los problemas. Los hallazgos fueron… terribles.
Los atacantes consiguieron acceso a través de una vulnerabilidad de exim (específicamente esta) y tomaron control del sistema. Se acomodaron felices, pusieron su bot, y descargaron… y descargaron…
860 Gigabytes.
El problema ya está controlado, y no hay hueco de exim por donde puedan volverse a colar. Al menos me llevo conmigo dos lecciones: la primera, dolorosa porque la repito (y suelo vivirla), no hagas las cosas mal, ni siquiera por hacerlas rápido. La segunda, y más importante en mi opinión, monitorea, maldita sea!. No porque sea tu servidor personal, y no un equipo de producción, te da derecho a olvidarlo a la buena de Dios. Pero en fin… echando a perder se aprende.
Al menos ya estamos de regreso. A ver que tal sale el servicio de correo de Amazon.
(Con disculpas a los profesionistas del tema, pero “me explotaron una vulnerabilidad” no tiene el mismo sonidito, o sí?)
Messenger 2011, Tweetdeck, y mi CPU: el asesino (no tan) silencioso
Como aquellos que me conocen saben, tengo una cierta costumbre de trabajar de noche. Es fabuloso para mí: nadie me molesta, no molesto a nadie (salvo por el ruido del teclado), avanzo muy rápido, la red está especialmente fluida… todo conspira para que sea mi horario de facto. Evidentemente, como me encanta la música, suelo traer puestos mis audífonos – los muy fantásticos MDR-NC7 de Sony, altamente recomendados por cierto – y evidentemente no escucho absolutamente nada de lo ocurre afuera.
Por ello, no me dí cuenta del problema inmediatamente.
Hoy en la tarde noté que tenía mucho calor. Esto es anormal en mi cuarto: desde que sergiob se mudó a Amazon, no existe un equipo de cómputo con su CPU al 100% todo el tiempo (y por ende, con ventiladores a máximo), lo que reduce muchísimo la temperatura – sin mencionar el gasto de luz eléctrica. Pero recuerdo bien la sensación… total que encontré las mismas condiciones, y me sorprendió mucho. Tenía la televisión prendida, y bueno, no me dí cuenta al inicio que los ventiladores zumbaban al máximo, prácticamente gritando “wey! Pon atención!” Llegó la noche y el calor continuaba. Con los audífonos, el ruido hubiera sido evidente – pero, afortunadamente, Elena marcó por teléfono. Y esto me forzó a quitarme los audífonos, a escuchar el ambiente… y a notar el tremendo ruido que causaba mi compu. Windows no viene con un monitor de recursos incrustable en la barra de tareas – como lo permite GNOME – de manera que no puedo echarle un ojo permanente a los recursos. OK, pero no es culpa de Windows, enteramente.
Un rápido vistazo al administrador de recursos dió con 3 aplicaciones que, alternadamente, se jugaban entre el 25% y el %60 de mi procesador. El primero es iTunes: viejo conocido de los problemas de CPU. El segundo fue Tweetdeck: entendible en que es Beta, aunque… qué demonios tiene que ocupar tanto CPU una estúpida aplicación que en resumen es un RSS reader? Ah, las maravillas de Adobe Air. El tercero, sin embargo, me sorprendió tremendamente: Windows Live Messenger.
Así es. El ubicuo mensajero, que solía ser de los programas menos demandantes (algo que contribuyó tremendamente a su adopción generalizada, por cierto – aquellos usuarios de Yahoo! Messenger o ICQ en los viejos días sabrán a lo que me refiero) – ahora resulta que es un hoyo negro para los recursos de mi sistema. Una ligera investigación reportó que, efectivamente, WLM 11 tiene un grave problema de recursos – relacionado con la “Vista completa”, donde permite recabar información de diferentes redes sociales. Al parecer, esta tarea acosa terriblemente al procesador, causando picos constantes que, a la larga, conllevan un aumento de temperatura, y todos los problemas que esto último ocasiona.
La mejor solución? Cambiar a “Vista compacta”. Por supuesto que se pierde el componente de redes sociales: pero francamente, prefiero enterarme de algo por las alertas del correo de Facebook, a que mi compu se muera prematuramente. El calor es un terrible asesino, como cualquier persona involucrada en soporte técnico puede asegurarles. Terriblemente efectivo, y lamentablemente fácil de evitar – si estamos dispuestos a controlarlo. Es por ello que me encanta mi panel de monitoreo en Debian, es por ello que pagaría buen dinero por un panel similar en Windows. Realmente lo vale.
Un último tip: otro posible problema de WLM 11 son los anuncios. Un anuncio mal programado (y créanme, los hay) puede inducir el mismo comportamiento excesivo de recursos. Así que ya lo saben: poco y bueno con el Messenger.
Poniendo colores de fondo diferentes a diferentes elementos de un ComboBox
Los comboBox son un control que permite seleccionar uno (y solo uno) de una lista de elementos. Algunos lenguajes los nombran dropDownBox, en HTMl es una etiqueta SELECT, etc.
En la familia .NET, no existe forma “sencilla” (objeto.propiedad) de cambiar el color de fondo para diferentes elementos. Pero con un poquito de investigación, descubrí que es posible redefiniendo el método que se encarga de dibujar cada elemento de la lista, en el control. Esto se logra:
1. Modificando la propiedad DrawMode del control, de “Normal” a “OwnerDrawFixed” u “OwnerDrawVariable” (este último es útil si se quiere modificar el tamaño de los elementos, de otra forma Fixed nos funciona perfecto).
2. Agregando un método al evento DrawItem del control.
3. Poniendo en ese método algo como:
private void
{
e.DrawBackground();
Graphics g = e.Graphics;
switch (
{
case 0:
g.FillRectangle(new SolidBrush(Color.LightGreen), e.Bounds);
break;
case 4:
g.FillRectangle(new SolidBrush(Color.LightCoral), e.Bounds);
break;
case 8:
g.FillRectangle(new SolidBrush(Color.LightYellow), e.Bounds);
break;
case 12:
g.FillRectangle(new SolidBrush(Color.LightBlue), e.Bounds);
break;
default:
g.FillRectangle(new SolidBrush(Color.LightGray), e.Bounds);
break;
}
string text = ((ComboBox)sender).Items[e.Index].ToString();
Brush brush = Brushes.Black;
e.Graphics.DrawString(text, ((Control)sender).Font, brush, e.Bounds.X, e.Bounds.Y);
e.DrawFocusRectangle();
}
🙂
Cutler y el mito del “hombre de hierro”
A estas alturas, todos saben acerca de lo que pasó el domingo: Jay Cutler de los Osos de Chicago abandonó el partido en el tercer cuarto del campeonato de conferencia contra los Empacadores de Green Bay, abajo por 14 puntos, y esta salida fue subsecuentemente criticada sin piedad por los medios de comunicación, comentaristas, e incluso propios jugadores (y ex-jugadores) de la NFL.
Mi opinión, en resumen? Cutler no se lo merece. Pero alguien más lo expresa mucho mejor que yo:
http://youcantplayhere.blogspot.com/2011/01/when-lines-get-crossed.html
En esencia… eso del “jugador rudo” que aguanta lesiones y sigue jugando es fabuloso en teoría, pero en la práctica? Puede poner en riesgo tu salud – y en el caso de los jugadores profesionales, su vida, pues es su carrera en juego. *Suena* bonito, pero no es tan sencillo. Y evidentemente, cuando se critica sin saber las condiciones reales (nadie sabía en el momento que Cutler tenía su ligamento MCL roto), simplemente es ignorante…
Acerca de .Net, el manifiesto y los requisitos previos
Pues llevo la mejor parte de la noche (ok, ok, apenas un par de horas, pero es bastante para mí!) lidiando con un problema interesante. Explicaré un poco de los preeliminares, para que todos nos entendamos.
La plataforma de .Net es, para mi gusto, una verdadera maravilla. Si vas a desarrollar para Windows (y no te importa mucho obligar a tus usuarios a que instalen X dependencias que bien pueden ser molestas), te permite utilizar una serie de lenguajes muy parecidos entre sí, sólidos, con una gran base de desarrolladores que pueden ayudarte, código disponible en línea, e incluso bibliotecas listas para ser aprovechadas. Como Java, pues, pero sin la molestia de tener que usar… *eso*. Si tú desarrollaste en Visual Basic, VB.net es prácticamente lo mismo; si trabajaste en Java, C# es un camino bastante directo. Tiene gran versatilidad para desarrollar aplicaciones web, permite redistribución de dependencias (recuerden esto), tiene soporte para actualizaciones automáticas de tu aplicación… bueno, las bondades son demasiadas. En fin, es una plataforma que personalmente, me agrada bastante.
Nosotros, los programadores eventuales (es decir, que en realidad no nos dedicamos a esto para vivir), tenemos muchas malas mañas. Generamos código sucio, no muy organizado ni comentado; nuestra documentación puede catalogarse como garabateadas en servilletas y hojas de papel que acaban tiradas por ahí; y tendemos a vivir en el modo “debug”, nunca preocupándonos por cómo va a quedar la aplicación final cuando el usuario final decida instalarla – digo, podemos dejarlo hasta el final, no? El problema con esto es que cuando llega el famoso final… es una pesadilla.
De entrada, les recomiendo esto: no utilicen acentos para nombrar a su aplicación. No, .Net no truena con eso. Pero si quieren utilizar la funcionalidad de actualizaciones, su servidor web puede darse de topes con ustedes, porque va a buscar archivos y cadenas no fácilmente codificables. Solo… tómenlo como una recomendación amable.
Y por supuesto, el centro del problema: los requisitos previos. .Net corre sobre una máquina virtual (el “Framework”), y mi aplicación en particular utiliza un motor de bases de datos sencillo (SQL Server CE, que es algo así como el primo debilucho de SQL Server Express, que a su vez es el babas a comparación de SQL Server, que a su vez… etc etc), comparable con sqlite. El Framework, para instalarle, utiliza *otro* requisito previo, el Windows Installer (v.3.1 en este caso en particular). Estos requisitos son manejados elegantemente por el instalador generado por .Net: se descargan automáticamente de internet, si el usuario final no los tiene ya instalados. El problema es que, combinados, son alrededor de 100 Mb de descarga: ciertamente no es mucho para un geek, pero un usuario con una conexión de Infinitum a 512 (cuando le va bien) nos va a obligar a visitar a los papás. So… debemos poder incrustarlos con nuestro instalador, cierto?
La respuesta es “sí, pero te va a costar trabajo”. Resulta que estos instaladores (que se pueden bajar bastante fácil de internet) no se ponen en cualquier localidad. Deben ir en el directorio que .Net utiliza para almacenar los instaladores. Suena sencillo… hasta que nos enteramos que cada versión del Framework tiene diferentes localidades (y lo mismo para cada versión del Installer, SQL, etc), y que a su vez, cada versión de la IDE lo pone en directorios ligeramente diferentes. En mi caso?
C:Program Files (x86)Microsoft SDKsWindowsv7.0ABootstrapperPackages
¬¬ Sí te iba a encontrar, no?
Pero gracias a un valiente y hermoso post:
http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/56584721-3064-46c2-81f4-6c29c01e1895/
Tuvo solución el problema. La moraleja, como siempre, es no fiarse de M$.
😀
A veces se me olvida lo lindo que es Visual Studio…
private void algunTextbox_KeyPress(object sender, KeyPressEventArgs e)
{
const char Delete = (char)8;
e.Handled = !Char.IsDigit(e.KeyChar) && e.KeyChar != Delete;
}
🙂
P.D.: Esto sirve para que, con C# (o bien, C sharp), podamos limitar el contenido de un textbox a solo digitos. En esencia, estamos aceptando teclazos si y solo si son digitos (o estamos borrando).
iOS 4.2 está bastante chido…
Pues acabo de actualizar mi iPhone a la versión 4.2 del sistema operativo. He de decir… wow. Apple acaba de hacer que mi teléfono cuente con muchísima mayor funcionalidad. Veámoslo a detalle.
1. Primero que nada, el nuevo AirPrint. Resulta que ahora puedes imprimir a cualquier impresora soportada (que tristemente, no son muchas… pero la mía sí :D) desde el mugroso iPhone. Esto incluye Fotos, Safari, Mail y Notas, así como una cantidad de aplicaciones adicionales. O sea, que la próxima vez que quiera imprimir un correo, solo debo hacer dos clicks… y voilà. Realmente de siglo 21 😀
2. Find My Iphone. Esta es probablemente la característica más payasa. Resulta que este servicio, que anteriormente tenía un costo de $100 USD al año, ahora es gratuito para todos los usuarios de iPhone 4. Y está… impresionante. En esencia es un servicio push que permite posicionar al iPhone en cuestión desde web (o incluso otro dispositivo iP*)… pero eso no es todo. Permite enviarle un mensaje (que se despliega en la pantalla del iPhone), deshabilitarlo (para que no lo puedan utilizar), o incluso, borrarle toda la información que contiene, de manera remota y confiable.
Es decir, que ya no me tienen que presumir nada los que usan su BlackBerry. Este dispositivo también tiene su remoteWipe. 😀
3. Por último, pero no menos importante… el Tethering. O sea, compartir internet. Disponible en el menú “Red” de la sección de configuración, ahora podemos compartir internet con otro dispositivo (ej. Laptop) a través de la conexión 3G del teléfono, sin necesidad del jailbreak. Ya lo probé y funciona de maravilla. Ahora, a ver si Telcel no se mancha y quiere cobrar de más por esta funcionalidad… Pero de momento, es una fantástica adición.
Creo que tiene otro par de mejoras más, pero estas fueron las que me vendieron la actualización. Gracias, Apple!
De verdad que no te entiendo, Axtel
Allá en la fuente, había un chorrito…
Ok, figúrense este problema: su navegación por internet es, a todas luces, buena. La velocidad es decente, o al menos no es notoriamente lenta. Al menos, así parece en el buen puerto 80. SSH tampoco reporta lentitudes. Todo marcha bien. De pronto, se les ocurre hacer una descarga (digamos, para actualizar los paquetes de su *Nix). La velocidad los tira al piso: alrededor de 30 KBps. Caray, hasta Infiernitum da más! OK, esto es probablemente un problema con el servidor de Linux, cierto? Veamos, tengo por aquí un archivito de MegaUpload que puedo probar…
…a unos notables 25 KBps. W. T. F?!
He hecho 4 llamadas al soporte técnico de Axtel (por cierto, ajúa con el acento, chavos!). Las 4 llamadas han resultado en lo mismo: “Sí señor, prometemos resolverlo. [2 días después] A ver señor, pruébelo. [Funciona aparentemente bien]. Gracias por su preferencia. [30 minutos después… cuerno.]” Qué pedo, Axtel? Estamos jugando, o qué demonios? Ah, pero eso sí: cada vez que me piden utilizar un medidor de velocidad en línea, “casualmente” me reporta un ancho de banda normal. Dammit!
Se hacía grandote…
Hace un par de días, estaba yo feliz trabajando en una sesión ssh en la valiente jusanet (a eso de las 3 de la mañana), cuando de repente, mi vi estaba mas menso con mis comandos que de costumbre. Supuse que era la jusanet, y aventé 40 maldiciones en arameo antiguo al cielo (lo cual no suele solucionar nada en la conexión, pero se siente tan bien… ahem, pero me desvío del tema), hasta que volteé a ver mi monitor de uso de red… al pico. Hhmm…. esto se ve raro. Ah, pero está abierto JDownloader! Será? Será?? Ya tengo buena velocidad?
Efectivamente. Mis dulces, adorados y muy extrañados 240 KB/s. Pero… ¿cómo llegaron ahí? ¿Qué agradable duende del ancho de banda me los trajo? (No fue el gnomo, eso es seguro) Será que… nahhh… Axtel tiene problemas de mucho uso???
Se hacía chiquito…
Pues que me pongo a investigar. Hice una ligera “auditoría de seguridad” en las redes de los alrededores; supuse que podría identificar a mis vecinos con Axtel por el nombre de la red, la dirección IP pública, y el tipo de autenticación solicitada por el modem, si existe. Rápidamente encontré 3 aquí cerca (copiones). Estaba apenas apuntando nombres de red, cuando de pronto, oh tristeza… de vuelta a los 25 KBps. No, esto no podía quedar así.
Estaba de mal humor… el sysadmin.
Pues que saco la Alfa. Y que disparo el Beini. Un frontend de kismet a prueba de imbéciles (inserte broma acerca del autor aquí), me permitió en 15 minutos, como dicen los americanos, estar kicking ass and taking names. De redes, evidentemente. Efectivamente: uno de mis vecinos, en su eterna sabiduría, está descargando a lo baboso algún contenido (no, no me interesa investigar *qué* es). Lo estuve monitoreando por casi 2 horas; a punto de quedarme dormido, ví que su tráfico disminuyó. Y, sorpresa, mi monitor de tráfico subió de nuevo.
Un simple problema de recursos, evidentemente.
Pero algo sigue sin cuadrar: mi enlace, para aquellos que no lo conocen, es de 2 Mbps. 2 tristes megas. Y cuando alguien en la zona, con un enlace de 1 Mbps, comienza a descargar, esto me pasa? WTF, Axtel? Digo, somos 3 en una zona de como 16 cuadras (… cuadradas?). En serio, no somos muchos. CUando alguien se acapara tantito ancho de banda, esto pasa? Que servicio tan pinchurriento tienen, que un usuario le puede dar en la madre a todos los demás? Fuck, estoy no es cable! Y además, estamos hablando de 2 Mbps! Imagínense, si así se pone MI red, cómo se pondrá la del pobre tercero, o cuarto, con mi amigo el descargador y yo? Seguro que no pueden abrir ni Google.
No se vale, mis amigos. Cada vez me convenzo más que, para tener un enlace decente en este país, hay que estar dispuesto a pagar muuuucho dinero. Digo, si contrato un T3, seguro que no tengo estos problemas, verdad?
En fin. Mejor me consigo unas latitas y un cablecito…
Migración, v. 2.0: Nos vamos a Amazon!
Estaba yo bien tranquilo el fin de semana, trabajando, como dios Yopas manda… Ok, ok, me estaba rascando la panza, cuando jusafing me comentó que el servicio de EC2 (Elastic Cloud Computing) de Amazon, por alguna extraña razón, estaba siendo gratuito (con sus respectivas limitantes) para clientes nuevos. Interesado, traté de activarlo con mi cuenta existente, pero – oh sorpresa – me comenzaron a cobrar. $1.04 USD después, me desanimé (no queriendo crear otra cuenta en Amazon) y dejé las cosas hasta ahí, en parte porque había mucha chamba que sacar.
Pero hace un par de días se me ocurrió darle otro intento. Y esta vez… voilá! Sin problemas. Así que decidí empacar el itacate de sergiob.org y migrarlo a este nuevo servidor. Debo decir… funciona bastante bien. Al menos tan rápido (en procesamiento) como sergiob 2.0, y ciertamente con mucho mejor enlace de red (digo… mínimo, no? Está en la fucking cloud!) Así que… nos mudamos!
Beneficios inmediatos: mejor conexión de red, disponible en puerto 80 (y el puerto 800 todavía, por cuestiones de compatibilidad), mejor seguridad, menor costo (nulo, de hecho).
Beneficios a futuro: … déjenme pensarlo…
Desventajas: Pues nada, en realidad. Todavía conservo el viejo servidor, y lo tengo ruteado para usos (más) personales.
Algo que me preocupa es la privacidad de mis datos. Pero bueno, sergiob nunca ha tenido información confidencial, y no pienso comenzar ahora. Posiblemente mude este blog a un subdominio dentro de poco, pero no hay nada seguro aún.