2005

Columnas publicadas en 2005

Herramientas en órden

TitleHerramientas en órden
Publication TypeMagazine Article
Year of Publication2005
AuthorsWolf G
MagazinePC Magazine en español
Date Published09/2005
Type of ArticleColumn
ISSN1665-4897
Keywordscontrol de versiones, editor, evangelizacion, herramientas de programación
Full Text

Como es de esperarse, una de las ramas en que más y mejores programas libres vamos a encontrar es en la de herramientas para la programación. Esto es de esperarse, si recordamos que el Software Libre es creado por entusiastas de la programación. Asomándonos a cómo piensa un típico programador: Si me gusta escribir código, obviamente, lo voy a hacer de la manera en que más natural me sea, en que menos me tenga que esforzar - aún si para eso tengo que trabajar varios meses o años.
El tema que elegí para esta columna es muy amplio, y engloba una muy amplia gama de categorías. Vamos, pues, de lo más básico a lo más sofisticado. Me permito recordarles que, como con casi todos los programas libres, no es indispensable utilizar Linux para emplearlas - Las herramientas libres típicamente funcionan en cualquier sistema
operativo.

Editores

La herramienta básica para todo programador, para todo administrador de sistemas, e incluso de todo usuario entusiasta de un sistema operativo libre es un simple editor de texto. Ahora... ¿Simple? No, un editor de texto puede ser cualquier cosa, menos simple.
Lo primero que todo usuario serio de un sistema tipo Unix debe aprender es el uso del editor vi, o de alguno de sus derivados. En su versión básica, no tiene mayor atractivo - pero siempre está ahí. Es muy simple, muy ágil, y nos puede salvar fácilmente el pellejo.
El editor multiusos por experiencia es Emacs. Tiene más de 25 años de historia a cuestas, y sigue siendo la herramienta favorita para programar de miles de personas. Para ser sólo un editor, Emacs sufre de una benigna pero tremenda obesidad: Desde este programa, y gracias a lo enormemente extensible que es (incluye un intérprete completo de Lisp) es posible programar, depurar, leer correo, manejar depósitos de código, manejar bases de datos, navegar, e incluso jugar.
[IMAGEN: emacs.png]
Gedit es un sencillo pero potente editor, integrado al entorno Gnome, que nos brinda muchas de las bondades de emacs y de vi, pero integrado a un entorno que a muchos resultará más familiar.
[IMAGEN: gedit.png]

Herramientas de modelado

Tan pronto como nos enfrentamos con una tarea que nos tomará más de unos cuantos cientos de líneas de código, nos confrontamos con la innegable necesidad de una herramienta de modelado, donde podamos hacer los diferentes esquemas que representen nuestra aplicación, facilitándonos tanto explicarla a otras personas como encontrar posibles errores de diseño con mucho mayor facilidad. Es, incluso, una muy buena práctica de programación ayudarnos de estas herramientas antes de iniciar siquiera a escribir código.
Probablemente el programa de modelado más común sea Dia, una herramienta Gtk+ que permite la creación de muy diversos tipos de diagrama, como los tradicionales diagramas de flujo, entidad-relación, UML, hasta diagramas eléctricos, de red, y varias categorías más específicas a dominios especializados. Y si bien Dia es únicamente una herramienta de modelado, a través de diversas herramientas como dia2sql o dia2code puede utilizarse como generador de código.
[IMAGEN: dia.png]
ArgoUML es un modelador muy completo y muy bien logrado, capaz de generar y analizar código. Está, sin embargo, completamente enfocado a UML y a Java, por lo cual su utilidad queda limitada a quienes utilicen estas tecnologías.
[IMAGEN: argouml.png]

Generadores de interfaces

Crear una interfaz de usuario gráfica (GUI) puede ser una tarea terriblemente compleja, y depurarla peor aún. Hay dos maneras de atacar a esta problemática: A través de un generador de interfaces, que limita su rol a definir la interfaz usuario, permitiendo al programador usar las herramientas que más le gusten para la generación del código (en este caso, probablemente un editor como los mencionados hace unos párrafos), o a través de un entorno integrado de desarrollo (IDE). En lo que respecta a generadores de interfaces, desde hace varios años contamos con varias opciones - Menciono sólamente los dos más conocidos.
El proyecto Gnome creó a Glade. Siguiendo la filosofía general de Gnome, Glade es muy peculiar comparándolo con herramientas similares: Está hecho para no estar atado a ningún lenguaje de programación. Glade describe la interfaz que creamos en XML, y -vía libglade, una biblioteca disponible para prácticamente cualquier lenguaje- nos permite llamarla desde nuestro programa. Además de esto, hay varios generadores de código para algunos de dichos lenguajes que nos evitan incluso la tarea manual de escribir el esqueleto de nuestro programa.
[IMAGEN: glade.png]
Qt Designer, de Trolltech, es la contraparte de Glade para el mundo de KDE - Y, nuevamente, nos deja ver claramente la ideología general de su proyecto. Qt Designer nos da mayor integración y mayor funcionalidad que la de Glade, sin embargo -y si bien también utiliza a XML como representación interna- está más enfocado a desarrollo de proyectos en C++.
[IMAGEN: qtdesigner.png]

Control de versiones

Un sistema de control de versiones nos permite dar seguimiento al desarrollo de nuestros proyectos a lo largo del tiempo, registrando las modificaciones que vamos haciendo, y permitiendo que trabajemos el mismo código desde diferentes computadoras, incluso entre diferentes personas, y proveyendo mecanismos para la resolución de conflictos (esto es, saber cómo resolver cuando dos personas modifican la misma sección del mismo archivo). Los sistemas de control de versiones han sido una pieza fundamental para el desarrollo del Software Libre en el mundo, permitiendo que miles de personas a lo largo del mundo compartan su código de manera ágil y sencilla.
La herramienta de este estilo más utilizada es CVS - Con más de quince años de desarrollo, casi todos los proyectos importantes han pasado por un depósito CVS. Y si bien CVS se maneja como las tradicionales herramientas Unix, a través de la línea de comando, hay una gran cantidad de herramientas gráficas o de Web que nos facilitan grandemente su uso.
Una muy buena herramienta para el uso de CVS es lincvs - Ligera, potente y fácil de utilizar, partiendo de una familiar interfaz de navegación de archivos, nos brinda acceso a toda la funcionalidad de CVS sin tener que aprender o interpretar la salida de la interfaz de línea de comando.
[IMAGEN: lincvs.png]
Siendo el control de versiones una tarea naturalmente cliente-servidor, podemos encontrar también interfaces para manejarlo vía Web. Frecuentemente, incluso, los desarrollos de software libre cuentan con estas herramientas con acceso público, para que todo quien esté interesado pueda dar seguimiento a la evolución de su proyecto. Uno de los programas más socorridosque nos permite el uso de CVS via Web es Chora - nos brinda funcionalidad similar (para la consulta, no para la modificación) a la de lincvs, con la posibilidad de utilizarlo desde cualquier punto del mundo.
Ahora, con la edad que tiene, obviamente hay varios puntos en que CVS comienza a mostrar carencias. Si bien nadie cuestionaba la supremacía de CVS hasta hace cinco años, hoy tenemos una gran cantidad de propuestas alternativas que nos traen mayor funcionalidad que CVS. Los principales contendientes son -y, claro está, enfocados a diferentes necesidades- Subversion, GNU Arch, Monotone y Git.
El control de versiones, de hecho, es una herramienta muy poderosa para manejar prácticamente cualquier tipo de información, y no sólo puede ser utilizado como parte de un esfuerzo colaborativo - En mi caso, todos los documentos que escribo desde hace cerca de cinco años son parte de mi árbol CVS personal, y la flexibilidad y robustez que esto me brinda me han salvado el cuello en varias ocasiones.
[IMAGEN: chora.png]
En el mundo del software libre hay, obviamente, muchísimas más opciones de las que aquí alcanzo a mencionar. Hay herramientas más completas, más especializadas, más generales, más verdes o más maduras - Pero a fin de cuentas, todo eso se traduce a una cuestión muy simple: Si nos gusta programar, tenemos todo lo necesario para ser productivos y (¿por qué no?) divertirnos con las herramientas que tenemos a nuestra disposición.

IMAGENES

argouml.png: Editando un diagrama de clases en ArgoUML
chora.png: Chora mostrando las diferencias en un árbol CVS por Web
dia.png: Diferentes tipos de diagramas en Dia
emacs.png: Editando SQL y Perl en Emacs
gedit.png: El entorno de edición en gedit
glade.png: Creando un GUI en Glade
lincvs.png: LinCVS mostrando la diferencia entre dos versiones de un proyecto
qtdesigner.png: Creando un GUI con QT Designer

AttachmentSize
Texto original enviado para su publicación8.55 KB
200509_pcmag_1.jpg89.99 KB
200509_pcmag_2.jpg118.17 KB

Menos paranoia y más Linux

TitleMenos paranoia y más Linux
Publication TypeMagazine Article
Year of Publication2005
AuthorsWolf G
MagazinePC Magazine en español
Issue NumberAug 2005
Date Published08/2005
Type of ArticleColumn
ISSN1665-4897
Keywordsevangelizacion, firewall, Seguridad
Full Text

Afortunadamente, la época en que era indispensable hacer entender a los usuarios de Internet que hay más peligros acechando a su conexión de los que pueden imaginar ya pasaron - hoy todo mundo se conecta a Internet por lo menos con un granito de cautela y paranoia. La situación actual no es buena aún: Incluso con esta paranoia en su lugar, muchos usuarios no saben qué hacer respecto a los siempre inminentes virus, troyanos, gusanos y atacantes más que entrar en pánico. Claro está, hoy ya no sólo tenemos que defendernos contra atacantes humanos, hay cualquier cantidad de virus, gusanos y troyanos esperando que dejemos la más mínima puerta abierta para adueñarse de nuestro sistema y posiblemente de nuestra información. Por si esto fuera poco, por más cuidadosos que seamos con nuestro sistema, es muy difícil dictaminar qué tan bien hemos hecho nuestra tarea, qué tanto podemos confiar en la seguridad que hemos implementado.
Hay una gran cantidad de herramientas libres que podemos usar mejorar la seguridad de nuestra red, a muy diferentes niveles - Prevención, monitoreo y detección de intrusos. El espacio del que aquí disponemos es demasiado corto para entrar en detalle en cada uno de estos puntos, por lo que en este artículo presentaremos una visión general de cada uno de estos aspectos, y en futuras ediciones entraremos más a detalle en cada uno de ellos.

Prevención

Uno de los puntos en los que con mayor frecuencia encontraremos pequeñas máquinas con Linux en una gran cantidad de redes medianas y grandes es en la entrada, actuando como firewall. Un firewall es una suerte de policía de las comunicaciones, que inspecciona a grandes rasgos cada uno de los paquetes entrantes, descartando todo aquello que no cumpla con los patrones de tráfico que esperamos para nuestra red.
En Linux, un firewall se configura a través de IPtables. Podemos hacerlo a mano a través de una serie de comandos simples pero a veces algo engorrosos, o podemos utilizar asistentes como Firestarter [1], muy simple de utilizar y suficientemente poderoso para configurar una red mediana. Una característica muy atractiva de Firestarter es que, además de ayudarnos a configurar el firewall, puede ayudarnos con el monitoreo de nuestra red en tiempo real.
Para configuraciones más complejas de lo que firestarter sabe manejar, podemos utilizar Shorewall [2], describiendo nuestra red a través de archivos de configuración bastante simples de entender, o directamente aprender la lógic de IPtables. Uno de los mejores documentos para aprender acerca de IPtables es el tutorial creado por Oskar Andreasson [3].
Cabe mencionar que el software que utilizamos para configurar un firewall global para nuestra red es el mismo que el que utilizaremos si queremos configurar un firewall personal, y que viene incluído en todas las distribuciones de Linux.

Monitoreo

Si sentimos que el rendimiento de la red o de nuestra computadora no está en niveles normales, es fundamental que podamos revisar exactamente qué está viajando por la red. El programa más simple y socorrido para este tipo de monitoreo es tcpdump [4], una simple utilería de consola que nos muestra un resumen de la actividad. Sin embargo, para hacer un verdadero diagnóstico, es mucho más cómodo trabajar con un programa como Ethereal [5] - Un analizador de protocolos muy completo y muy simple de utilizar, que nos permite aislar los diversos factores que afectan a nuestra conexión.
El monitoreo no sólo debe realizarse cuando sentimos que algo anda mal - El monitoreo debe ser una actividad constante, para poder encontrar a simple vista patrones de actividad anormal. Una de mis aplicaciones favoritas para este fin es el ya venerable MRTG [6]. Este programa reside en nuestro servidor y es ejecutado automáticamente cada cinco minutos. Depende de cómo lo hayamos configurado, recolectará los datos acerca de la carga de la red, el uso del CPU, memoria, o lo que le indiquemos. Estos datos nos son posteriormente presentados a través de nuestro navegador como una gráfica, guardando el histórico anual. Con esta información, tomada de un par de fuentes diferentes, es muy fácil determinar si el patrón de actividad actual es realmente normal o no.

Detección de intrusos

Un firewall es una parte fundamental de toda infraestructura de seguridad - Sin embargo, hay muchas cosas que un firewall es incapaz de hacer. Un firewall tiene que tomar decisiones extremadamente rápidas y basadas en tan poca información como sea posible, para evitar aletargar la red. Su tarea se limita a ver si una conexión es legal o no, pero no entra a revisar el contenido de cada una de estas conexiones - Para eso debemos emplear un sistema de detección de intrusos (IDS, por sus siglas en inglés). En el mundo del Software Libre, Snort [7] es definitivamente el motor de detección más potente y más utilizado.
Snort divide las tareas relativas a su trabajo de modo que -como es la norma en el Software Libre- puedan surgir varios proyectos relacionados, cada uno de ellos enfocándose en la excelencia de sus propias funciones específicas. Snort, además, simplifica la integración de un IDS completo en una red compleja, permitiendo colocar sensores independientes en los distintos puntos administrativos de la red, concentrando los datos en una base de datos central, la cual servirá de fuente de información a las consolas de alerta y de reporte.
Un recurso fundamental que nos proporciona Snort es, además, una muy completa serie de documentos relativos a la implementación de sistemas de detección de intrusos [8], tanto a nivel práctico como teórico, y tanto con Snort como con otros motores.
Una de las consolas de reporte más populares es ACIDlab [9]. Esta aplicación se utiliza via Web, y nos permite un acceso simple y completo a la base de datos que los sensores Snort han llenado. Para cada tipo de ataque reportado, nos da ligas a una explicación completa al respecto, y nos permite incluso ver el detalle -byte por byte- de la conexión que generó esta alerta.
Sguil [10] es otra consola de reporte que se ha ido popularizando por su mucho mayor interactividad que ACID. En vez de correr como un juego de scripts en un servidor Web, Sguil es una aplicación GUI escrita en tcl/tk, y que funciona nativamente en Linux, otros Unixes (*BSD, Solaris), MacOS y Windows. El único pero que podemos ponerle a Sguil es que no está tan maduro, y llega a presentar algunos problemas para correr en ciertos sistemas.

En resumen

En el mundo del Software Libre encontraremos una tremenda cantidad de herramientas que pueden ayudarnos a brindar seguridad a nuestra red, independientemente de qué sistemas estemos ejecutando en esta. Muchos de los programas aquí mencionados son multiplataforma (esto es, corren tanto en Linux y otros sistemas Unix como en Windows o Mac), y sin duda serán una gran ayuda para el mantenimiento de la seguridad de nuestras redes.
------------
LIGAS:
[1] http://www.fs-security.com/
[2] http://www.shorewall.net/
[3] http://www.faqs.org/docs/iptables/
[4] http://www.tcpdump.org/
[5] http://www.ethereal.com/
[6] http://people.ee.ethz.ch/~oetiker/webtools/mrtg/
[7] http://www.snort.org/
[8] http://www.snort.org/docs/
[9] http://acidlab.sourceforge.net/
[10] http://sguil.sourceforge.net/
-------------
IMAGENES:
acid_decode.png: Detalles de una alerta de ACID
acid_main.png: Página principal de ACID
ethereal_follow.png: Ethereal reensambla los paquetes y permite seguir
una conexión TCP completa
ethereal_main.png: Pantalla principal de Ethereal, mostrando los
paquetes capturados
ethereal_graph.png: Gráfica de intercambio de paquetes sobre el tiempo
en Ethereal
firestarter_events.png: Monitoreo en tiempo real de las conexiones
activas con Firestarter
firestarter_main.png: Pangalla principal de Firestarter
firestarter_wizard.png: El asistente de configuración de Firestarter
mrtg_index.png: Página principal de MRTG
mrtg_ppp0.png: Monitoreo histórico de la conexión hacia Internet con
MRTG
sguil_main.png: Pantalla principal de Sguil
tcpdump.png: Corrida de tcpdump

AttachmentSize
Página 1 (scanneada)95.9 KB
Página 2 (scanneada)118.81 KB
Texto original enviado a publicación8.02 KB