Documentos de Académico
Documentos de Profesional
Documentos de Cultura
i
r
e
w
a
l
l
s
G
u
a
r
d
d
o
g
A
n
a
l
i
z
a
d
o
r
e
s
d
e
R
e
g
i
s
t
r
o
s
S
h
o
r
e
w
a
l
l
B
r
i
d
g
e
w
a
l
l
D
o
m
t
i
c
a
P
e
r
l
A
u
t
o
p
s
y
V
i
g
i
l
a
n
c
i
a
K
D
M
/
G
D
M
Domtica
Controla tu casa con
un Jabberbot Perl p42
Ruby Rails
Una infraestructura web
diferente p32
NMERO 3 P.V.P 4,95
PHP
Ejecucin desde la
linea de comandos
CCCP
Autores al Gulag
con Paul C. Brown
KRecipe
La cocina KDE
de cada da
CSI del CPUp55
Anlisis de equipos comprometidos
con Autopsy
WWW. L I N U X - MA G A Z I N E . C O M. E S
KDM/GDM
Configuracin del
arranque X
L
I
N
U
X
M
A
G
A
Z
I
N
E
N
M
E
R
O
0
3
Edicin en
Castellano
FIREWALLS
Seguridad para todo el mundo
Configuracin sencilla con Guarddog p11
Implementa un cortafuegos puente p14
Registros con Logfile p18
Shorewall
Configura iptables de
sin complicaciones p22
Linux va a CeBIT
Muestre sus productos y servicios en la seccin
especial dedicada a Linux en CeBIT 2005:
Por cuarto ao consecutivo, un gran nmero de
compaas y proyectos de cdigo abierto van a
presentar sus soluciones de software, productos
y servicios en LinuxPark.
En CeBIT 2005, LinuxPark ser de nuevo el punto
de visita obligatoria para lo directivos TI, espe-
cialmente aquellos provenientes de las PYMEs y
de la administracin pblica. Slo hay un sitio en
CeBIT con toda la informacin sobre las tecnolo-
gas de cdigo abierto ms novedosas y como
explotarlas de manera efectiva: LinuxPark.
Su empresa tambin puede beneficiarse enor-
memente de esta plataforma, ideal para la pro-
mocin de sus soluciones de cdigo abierto.
La solucin perfecta para su presencia
ferial:
Comunquese directamente con una gran
variedad de clientes potenciales
Annciese en un campaa promocional ante-
rior a la feria de gran envergadura
Realice su propia presentacin en el
LinuxForum
Aprenda de ponentes de primera categora
Consolide sus relaciones con la comunidad
Linux internacional
Benefciese del contacto con socios y patroci-
nadores de reconocido prestigio en el sector
A su disposicin: paquetes feriales todo inclui-
do desde 4 m
2
Consiga ms informacin en
+49 (0) 26 02 16 01374
profair@abresch.de
Patrocinado por:
Presentado por:
EDITORIAL Escritorios
3 www.linuxmagazine.com.es Nmero 03
T
odo el
mundo
piensa
que est a
salvo. Nadie
piensa que le
puede tocar a
l/ella. Los
accidentes de
coche ocurren a los dems, los dems
contraen enfermedades incurables, a los
dems se les ven introducirse virus en
sus sistemas. La desgracia tiene un
curioso efecto distanciador.
Pero que nadie se crea invulnerable,
todo lo contrario: como la seccin de
invulnerabilidades demuestra mes a
mes, los fallos de seguridad que per-
miten ejecutar cdigo aleatorio abun-
dan en el sistema operativo Linux. Es
cierto, no ms que en otros sistemas,
pero, como me recuerda a cada oportu-
nidad mi esposa cada vez que hablamos
de cambiarnos de casa: No vayamos a
compararnos con lo que no queremos
ser. Y, s, es una gran ventaja que haya
tanta gente auditando y probando el soft-
ware de manera abierta y se publiquen
los resultados para que nos curemos en
salud. Defender la proteccin a travs de
la ocultacin es como defender aquello
de, bueno, s, las alas del avin estn
pegadas con chicle pero no se caern
si no se lo decimos a nadie.
Sin embargo, el peligro existe en el
mbito de la informtica y no slo viene
bajo la forma de virus, troyanos y
jaquens aburridos, de los que buena
cuenta damos en este nmero y, por
tanto, sobre los que no me voy a expla-
yar. Hablo de otro peligro, mucho ms
insidioso contra el cual no te puedes pro-
teger configurando un firewall, deshabi-
litando servicios o blindando el sistema.
Y no importar el sistema que utilices, ya
sea Linux, Windows, Mac o BSD, siem-
pre estars a la merced de uno de sus
ataques, los cuales vienen sin avisar y
sin motivo aparente.
Hablo de los abogados.
El ataque te puede venir en la forma
de carta de SCO reclamndote el pago de
un impuesto revolucionario que a santo
de qu, o te puede llegar como aviso de
citacin a juicio por no pagar una factura
de un servicio telefnico que por
supuesto no has contratado ni mucho
menos utilizado. A m me lleg una de
dichas cartas hace un par de das.
69,72 euros es el motivo de que me
quieren arrastrar a juicio los ilustres
seores letrados. Esta gente son los encar-
gados de perseguir a toda esa panda de
sinvergenzas internautas que rehsa
pagar servicios de ADSL que no funcio-
nan, facturas emitidas despus de bajas o
misteriosos cobros por servicios no con-
tratados, el cual, como digo, es mi caso.
Su cliente, WANADOO S.L., asegura
que servidor contrat un servicio de tele-
fona llamado rimbombantemente
Premier Plus. Ahora bien, servidor no
es ningn lince legal, pero creo que sin
contrato firmado no hay tu ta Y esto lo
confirm mi abogado, que s lo es. (He de
decir que mi abogado es de los buenos. Es
un encanto, lo puedes sacar de la jaula y
todo y no se pleitea con nadie a no ser
que le caiga realmente mal).
Ni que decir tiene que ni servidor
jams ha contratado, suscrito, solicitado,
ni mucho menos disfrutado de este
excelso servicio. Pero eso da igual. Un
da vas caminando por la calle, te cae
una maceta en la cabeza y te quedas en
el sitio; o administras un sistema para
una importante firma y un estpido
script-kiddie logra cargarse todo la base
de datos de clientes y proveedores, junto
con el fichero donde guardabas tus par-
tidas de Quake; o un da ests sentado en
tu casa y, mira por donde, te meten un
pleito Y plas! Te has convertido en
una estadstica. De humano te has trans-
formado en una cifra en las listas de la
DGT o de las crecientes casos de abusos
por parte de operadores de telefona.
Si no pago 69,72 euros antes del da 11
del corriente (enero), me arrastrarn a
juicio, me demostrarn culpable, pedirn
La Amenaza Fantasma
Nos sentimos orgullosos de nues-
tros orgenes como publicacin, que
se remonta a los primero das de la
revolucin Linux. Nuestra revista
hermana, la publicacin alemana
Linux Magazin, fundada en 1994,
fue la primera revista dedicada a
Linux en Europa. Desde aquellas
tempranas fechas hasta hoy, nues-
tra red y experiencia han crecido y
se han expandido a la par que la
comunidad Linux a lo ancho y largo
del mundo. Como lector de Linux
Magazine, te unes a una red de
informacin dedicada a la distribu-
cin del conocimiento y experiencia
tcnica. No nos limitamos a infor-
mar sobre el movimiento Linux y de
Software Libre, sino que somos
parte integral de l.
Estimado Lector de Linux Magazine
Paul C. Brown
Director
la pena capital para mi y mis allegados y,
de paso, escupirn sobre mi tumba. Lo
peor de todo es que para mandarles un
burofax jurando que no he sido yo,
Correos me cobra 20 euros, perder una
maana de trabajo para ir a juicio puede
costar unos 50 euros, aparcar en el cen-
tro 4 euros. La minuta del abogado me
puede salir por 300 euros. Que el juez
me de la razn, no tiene precio, pero
para todo lo dems, Mastercard.
La solucin fcil: pagar los 69,72 euros
y olvidarse. Pero, haciendo esto no dejo
abiertas la puertas a ms chantajes por
parte de las operadoras y sus canes
legales?
As que ya sabis: una vez instalado
vuestro firewall, deshabilitado servicios
innecesarios y blindado vuestro sistema
siguiendo los buenos consejos de Linux
Magazine cuidado con los abogados!
4 Nmero 03 www.linuxmagazine.com.es
NOTICIAS
Inseguridades ....................................................................................6
Negocios ................................................................................................8
Correo ......................................................................................................9
PORTADA
Especial Cortafuegos ..................................................................10
Guarddog .............................................................................................11
KDE ofrece una aplicacin que simplifica en gran medida la
configuracin de un cortafuegos.
Bridgewall ...........................................................................................14
Los cortafuegos pueden implementar como routers, pero
tambin pueden filtrar a nivel de puente.
Logfile ....................................................................................................18
Analizar los datos de ataques puede ser tan importante
como evitarlos.
Shorewall ............................................................................................22
Shorewall Simplifica la configuracin de iptables del kernel.
DESARROLLO
La librera SDL (III).........................................................................27
Abordamos el control del protagonista y de los enemigos en
nuestro juego.
Ruby Rails ...........................................................................................32
Una infraestructura para aplicaciones web diferente
Interfaces ............................................................................................37
Integramos la librera menu.h en una clase que simplifica la
creacin de interfaces con el usuario.
Jabberbot ............................................................................................42
Controla las luces de tu casa a distancia con perl y un jabberbot.
PHP en Lnea ....................................................................................46
PHP no slo sirve para programar aplicacionesc web. Vemos
como escribir programas para la lnea de comandos.
Python y la RAE ..............................................................................49
Creamos un diccionario de interfaz minimal que consulta
palabras en la web de la RAE.
18 Shorewall
Cuando los usuarios piensan en su estacin de trabajo en
casa olvidan normalmente la seguridad. Pero el peligro
acecha, esperando
golpear a los despre-
venidos. Shorewall
ayuda a los usuarios
habituales de Linux a
mantener a los intru-
sos fuera.
14 Bridgewall
Normalmente los cortafuegos se implementan como routers,
pero no tiene por qu ser as. Los filtros a nivel del bridge
tienen una serie
de ventajas que
puede aadirlas
a su red en una
etapa ms tarda
sin necesidad de
cambiar la con-
figuracin de los
componentes de
red.
11 Guarddog
El programa KDE Guarddog promete una configuracin fcil
del cortafuegos de Linux con tan solo unos cuantos clics.
Guarddog ayuda a
los usuarios inex-
pertos a proteger
sus mquinas, e
incluso redes com-
pletas, contra los
atacantes.
Contenido LI NUX MAGAZI NE
5 www.linuxmagazine.com.es Nmero 03
SYSADMI N
La Columna de Charly ...............................................................54
Los mejores trucos y consejos del SysAdmin.
Autopsy ................................................................................................55
En esta segunda parte dedicada al anlisis forense, estudia-
mos un ordenador comprometido con Autopsy.
Suspend ...............................................................................................59
La hibernacin de un ordenador consiste en volcar la RAM a
swap y despus recuperarla. Analizamos el software para
hacerlo.
LI NUX USER
KHotkeys ............................................................................................64
Implementar gestos de ratn y teclas personalizadas bajo
KDE es fcil con KHotkeys.
DeskTOPia: Krecipe .....................................................................67
Un recetario digital para el escritorio KDE.
Configuracin: KDM/GDM .....................................................73
Aprendemos como configurar el arranque grfico de Linux.
Curso de Programacin: XUL (III) .......................................76
Un lenguaje sencillo para programar interfaces web.
Educacin: WIMS (III) ..................................................................81
Un ejemplo prctico de clases con WIMS.
Comandos: su y sudo..................................................................84
Ser root es imprescindible... de vez en cuando. su y sudo
ayudan a no abusar.
Tipografa con LaTeX (III)..........................................................87
Documentos de aspecto profesional con LaTeX.
COMUNI DAD
Humor ...................................................................................................92
Proyectos ............................................................................................95
Eventos .................................................................................................97
Contacto ..............................................................................................97
Prximo Nmero ..........................................................................98
59 Suspend
Casi todas las placas bases tienen la caracterstica de control
de energa, diseada para apagar el ordenador y ponerlo en
modo suspendido. En
la vida real, esta ca-
racterstica no siem-
pre funciona. Linux
tiene varias alternati-
vas para tratar de
solucionar el proble-
ma.
32 Ruby Rails
La mayora de las bibliotecas web hacen que el 90 por ciento
del trabajo sea fcil y el resto imposible. Rails, un infraestruc-
tura de cdi-
go abierto
programado
en Ruby, es
lo bastante
flexible como
para tener
xito con ese
10 por ciento
restante.
LI NUX MAGAZI NE Contenido
64 KHotkeys
Los gestos con el ratn y los atajos con el teclado aaden
velocidad y simplicidad a las operaciones con el PC. Los
gestos de ratn solan
ser coto privado de los
usuarios de Opera y
de Mozilla, pero
KHotKeys las ofrece
ahora a Konqueror
para usuarios de KDE
3.2 o superior. Incluso
podemos lanzar pro-
gramas no-KDE con
KHotKeys.
usuarios de Ruby 1.6.x debern ac-
tualizar sus versiones. I
-Referencia Mandrake:
MDKSA-2004:128
IKernel
El kernel Linux se encarga de llevar a
cabo las funciones bsicas del sistema
operativo.
Se ha descubierto un fallo de ausencia
de serializacin en unix_dgram_recvmsg
que afecta a kernels anteriores al 2.4.28.
Un usuario local podra potencialmente
aprovecharse de una condicin de carre-
ra para hacerse con privilegios de root.
Se pueden consultar ms detalles sobre
estos problemas en la base de datos del
proyecto de Vulnerabilidades y
Exposiciones Comunes (Common
Vulnerabilities and Exposures o CVE -
http://cve.mitre.org). Vase CAN-2004-
1068.
Paul Starzetz de iSEC descubri varios
fallos en el cargador binario ELF, fallos
que afectan a kernels anteriores a 2.4.28.
Un usuario local podra utilizar estos fa-
llos para conseguir acceso de lectura a
binarios slo ejecutables o posiblemente
conseguir privilegios (CAN-2004-1070,
CAN-2004-1071, CAN-2004-1072 y CAN-
2004-1073).
Se descubri un fallo en la configu-
racin de lmites TSS que afecta a los
kernels para las arquitecturas AMD
AMD64 e Intel EM64T anteriores a
2.4.23. Un usuario local podra provocar
una ataque de denegacin de servicio o
cuelgue del sistema o, posiblemente,
conseguir privilegios (CAN-2004-0812).
Se ha descubierto un fallo de desbor-
damiento de entero en la funcin
ubsec_keysetup en el driver Broadcom
5820 cryptonet. En los sistemas que utili-
cen este driver, un usuario local podra
provocar un ataque de denegacin de
servicio (o cuelgue del sistema) o utilizar
el fallo para adquirir privilegios (CAN-
2004-0619).
Stefan Esser descubri varios fallos,
incluyendo desbordamientos de bfers
en el driver smbfs en kernels anteriores a
2.4.28. Un usuario local podra provocar
un ataque de denegacin de servicio
(cuelgue) o utilizar el fallo para escalar
privilegios. Para poder explotar este
fallo, el atacante necesitara tener el con-
trol de un servidor Samba (CAN-2004-
0883 y CAN-2004-0949).
SGI descubri un error en el cargador
elf que afecta a los kernels anteriores a
2.4.25 que podra activarse con un bina-
rio malformado. En arquitecturas dife-
rentes a x86, un usuario local podra
crear un binario malicioso que provocara
un ataque de denegacin de servicio o
cuelgue (CAN-2004-0136).
Conectiva descubri fallos en drivers
USB que afectaban los kernels anteriores
a 2.4.27 que utilizaban las funciones
copy_to_user en estructuras no inicia-
lizadas. Estos fallos podran permitir a
usuarios leer pequeas cantidades de la
memoria del kernel (CAN-2004-0685). I
-Referencia Red Hat: RHSA 2004:549-10
-Referencia Suse: SUSE-SA:2004:042
IPlugin Java de Sun
La seguridad en los entornos del plugin
Java de Sun y Blackdown Java puede ser
sobresedo para conseguir el acceso a
paquetes arbitrarios, lo que permitira
que applets sin confianza llevaran a cabo
acciones sin restricciones en sistema
husped.
El proyecto de Vulnerabilidades y
Exposiciones Comunes (Common
Vulnerabilities and Exposures o CVE -
http://cve.mitre.org) ha asignado el
nombre CAN-2004-1012 y CAN-2004-
1029 a este problema.
Tanto Sun como Blackdown proporcio-
nan implementaciones del Kit de
Desarrollo Java (JDK) y el entorno de eje-
cucin Java (JRE). Ambas implementa-
ciones contienen un plugin Java que per-
mite la ejecucin de applets Java en un
entorno restringido en navegadores web.
Todos los plugins Java estn sujetos a
una vulnerabilidad que permite el acceso
no restringido a paquetes Java.
Un atacante remoto podra embeber
un applet Java malicioso en una pgina
web y engaar a un vctima para que la
visualizase. Este applet podra sobreseer
las restricciones de seguridad y ejecutar
cualquier comando o acceder a cualquier
fichero con los permisos del usuario
visualizando la pgina web.
Inseguridades
6 Nmero 03 www.linuxmagazine.com.es
NOTICIAS Inseguridades
ICyrus-imapd
El servidor Cyrus IMAP es un servidor de
correo electrnico eficiente y altamente
escalable. Se han descubierto mltiples
vulnerabilidades en los analizadores de
argumentos de los comandos partial y
fetch del servidor. El proyecto de
Vulnerabilidades y Exposiciones
Comunes (Common Vulnerabilities and
Exposures o CVE - http://cve.mitre.org)
ha asignado el nombre CAN-2004-1012 y
CAN-2004-1013 a este problema.
Tambin existen problemas de desbor-
damiento de bfers en el cdigo imap
magic plus que son vulnerables de ser
explotados (CAN-2004-1011 y CAN-2004-
1015).
Un atacante podra explotar estas vul-
nerabilidades para ejecutar cdigo arbi-
trario con los permisos del usuario que
ejecuta el servidor Cyrus IMAP. No
existe ninguna solucin por el momento
para este problema. Todos los usuarios
de Cyrus IMAP debern actualizar sus
servidores a la ltima versin. I
-Referencia Debian:
DSA-597-1 cyrus-imapd
-Referencia Gentoo:
GLSA 200411-34 /cyrus-imapd
-Referencia Suse: SUSE-SA:2004:043
IRuby
Ruby es un lenguaje de scripts interpreta-
do para la creacin de programas orien-
tados a objetos de manera fcil y rpida.
El mdulo CGI de Ruby puede ser utiliza-
do para crear aplicaciones web.
Los desarrolladores de Ruby encon-
traron y arreglaron un fallo del mdulo
CGI que permita su activacin remota.
Esta vulnerabilidad poda, en teora,
provocar un bucle infinito. Una atacante
remoto podra activar la vulnerabilidad a
travs de una aplicacin web Ruby
expuesta y provocar que el servidor uti-
lizara recursos de CPU innecesarios, lo
que podra causar un ataque por dene-
gacin de servicio. Mitre ha asignado el
nombre CAN-2004-0983 a este problema.
No existe solucin para este problema
en el mdulo CGI de Ruby. Todos los
La solucin inmediata es deshabilitar
los applets Java en los navegadores web.
Todos los usuarios de Sun JDK debern
actualizar sus versiones. I
-Referencia Gentoo:
GLSA 200411-38/Java
IBNC
BNC es un proxy de devolucin de
sesiones IRB. Leon Juranic descubri
que BNC no siempre protege a los bfers
de la sobreescritura. Esto poda ser
explotado por un servidor malicioso IRC
para desbordar un bfer de tamao limi-
tado y ejecutar cdigo arbitrario en el
host cliente. El proyecto de
Vulnerabilidades y Exposiciones
Comunes (Common Vulnerabilities and
Exposures o CVE - http://cve.mitre.org)
ha asignado el nombre CAN-2004-1052 a
este problema. I
-Referencia Debian: DSA-595-1 bnc
-Referencia Gentoo: GLSA 200411-24/
BNC.
Iez-ipupdate
ez-ipupdate es una utilidad para actua-
lizar informacin de nombres de hosts
para un gran nmero de servicios de
DNS dinmicos. Ulf Harnhammar, del
Proyecto de Auditoras de Seguridad de
Debian, descubri una vulnerabilidad de
formato de cadena en ez-ipupdate. A
este problema se la ha asignado el Mitre
CVE CAN-2004-0980. I
-Referencia Debian: DSA-592-1 ez-ipu
date
-Referencia Gentoo: GLSA 200411-20/
ez-ipupdate
ISamba
Samba es una implementacin SMB/CIFS
abierto y libre que permite una
interoperabilidad sin fisuras de servicios
de ficheros e impresin con clientes SMB/
CIFS. Se han identificado varias vulnera-
bilidades en Samba recientemente.
Existe un problema con el demonio del
servicio de comparticin de ficheros de
Samba, el que permite a un usuario
remoto hacer que el servicio consuma
mucha potencia de computacin, lo que
podra conllevar potencialmente un
cuelgue al consultar nombres de ficheros
con comodines especiales.
Este ataque puede tener xito si el
demonio Samba est en ejecucin y un
usuario remoto tiene acceso a una com-
particin (aunque slo sea en modo lec-
tura). A este problema se la ha asignado
el Mitre CVE CAN-2004-0930.
Stefan Esser descubri un problema en
el manejo de cadenas Unicode en el
manejo de ficheros Samba que podra
conllevar un desbordamiento de pila
remoto y podra permitir a usuarios
remotos inyectar cdigo en el proceso
smbd. A este problema se le ha asignado
el Mitre CVE CAN-2004-0882.
Los paquetes actualizados no son vul-
nerables a estos problemas. Se recomien-
da que todos los usuarios de Samba se
actualicen a la ltima versin. I
-Referencia Gentoo: GLSA 200411-21/
samba
-Referencia Mandrake:
MDKSA-2004:136
-Referencia Red Hat: RHSA-2004:632-17
-Referencia Suse: SUSE-SA:2004:040.
Isudo
sudo es un programa que aporta privile-
gios de superusuario limitados a usua-
rios especficos. Liam Helmer not que
sudo no limpia el entorno lo suficiente.
Algunas funciones de bash y la variable
CDPATH se siguen pasando al programa
en ejecucin como usuario privilegiado.
Este hecho deja el sistema vulnerable
a la posibilidad de que un atacante
pueda encontrar una manera de sobre-
cargar las rutinas del sistema. A este
problema se le ha asignado el Mitre CVE
CAN-2004-1051.
Estas vulnerabilidades slo pueden ser
explotadas por usuarios a quienes se les
haya otorgado privilegios de super-
usuario limitados. Se recomienda actua-
lizar los paquetes sudo instalados. I
-Referencia Debian: DSA-596-2 sudo
-Referencia Mandrake:
MDKSA-2004:133
7 www.linuxmagazine.com.es Nmero 03
Inseguridades NOTICIAS
Distribuidor Fuente Seguridad Comentario
Debian Info: http://www.debian.org/security/ Los avisos de seguridad actuales se in-
Lista:http://www.debian.org/debian-security-announce/ cluyen en la pgina de inicio. Los avisos
Referencia: DSA-1) se proveen como pginas HTML con
enlaces a los parches. Los avisos tambin
incluyen una referencia a la lista de
correo.
Gentoo Info: http://www.gentoo.org/security/en/index.xml Los avisos de seguridad actuales para
Foro: http://forums.gentoo.org/ la lista Gentoo en el sitio web de
Lista: http://www.gentoo.org/main/en/lists.xml seguridad de Gentoo enlazan desde la
Referencia: GLSA: 1) pgina principal. Los avisos se presentan
en HTML con cdigos para fusionar las
versiones corregidas.
Mandrake Info: http://www.mandrakesecure.net Mandrakesoft posee su propios sitio web
Lista: http://www.mandrakesecure.net/en/mlist.php que versa sobre temas relacionadas con
Referencia: MDKSA: 1) la seguridad. Entre otras cosas,incluye
de avisos seguridad y referencias a las
listas de correo. Los avisos son pginas
HTML, pero no contienen enlaces a los
parches.
Red Hat Info: http://www.redhat.com/errata/ Red Hat archiva los fallos de seguridad
Lista: http://www.redhat.com/mailman/listinfo/ bajo lo que denominan erratas. A
Referencia: RHSA- 1) continuacin los problemas para cada
versin de Red Hat se agrupan. Los avisos
de seguridad se proveen como una
pgina HTML con enlaces a los parches.
Slackware Info: http://www.slackware.com/security La pgina de inicio contiene enlaces al
Lista: http://www.slackware.com/lists/(slackware-security) archivo de seguridad de la lista de correo.
Referencia: [slackware-security] 1) No existe informacin adicional sobre
seguridad en Slackware.
Suse Info: http://www.suse.de/en/private/support/ Ya no existe un enlace a la pgina de
security/index.html seguridad tras un remodelado en el sitio
Parches: http://www.suse.de/en/private/ web de SuSE. Existe informacin en la
download/updates Lista: suse-security-announce lista de correos y los avisos. Los parches de
Referencia: SUSE-SA 1) seguridad para versiones individuales de
SuSE Linux se muestran de color rojo en el
sitio de actualizaciones generales.
Contiene una corta descripcin de la
vulnerabilidad que el parche soluciona.
1) Todos los distribuidores muestran correos de seguridad en el campo Subject.
Polticas de seguridad de la Distribuciones Mayoritarias
Negocios
8 Nmero 03 www.linuxmagazine.com.es
NOTICIAS Negocios
IIBMDona Patentes
IBM es ao s y ao tambin la compaa
que ms patentes registra a nivel mundial.
El ao 2004 no fue una excepcin: el Gran
Azul registr 3.248 patentes, 1.314 ms
que los de cualquier otra empresa.
Afortunadamente, IBM tambin tiene
un compromiso contrado con la comu-
nidad del software libre y, en virtud de
ello, el 11 de enero de este ao, publi-
caron una nota de prensa declarando
que donaban 500 de estos patentes a los
desarrolladores del cdigo abierto, para
ser utilizados en cualquier proyecto que
se conforme a la definicin de software
de fuente abierta acuada por la Open
Source Initiative (OSI).
Algunos de los patentes cedidos van
desde lo peregrino (US6199070 Uso de
bases de datos para registros de progra-
mas) hasta lo ininteligible (US5634006
Sistema y mtodo para asegurar QOS en
una red token ring utilizando un regu-
lador de acceso en cada nodo para la
asignacin del tamao de marco para
aplicaciones de transmisin virtuales
basadas en informacin negociada y
prioridad en la red)
Qu sera mucho mejor que IBM
donara TODOS sus patentes o que directa-
mente abandonara su poltica de registro
masivo de patentes? Hombre, eso sera lo
ideal en un mundo ideal, donde nadie
ms intentara acaparar lo que IBM no re-
gistra. Mientras tanto, 500 patentes dona-
dos pues es un comienzo. I
http://www-1.ibm.com/press/ Press
ServletForm.wss?TemplateName=ShowPre
ssReleaseTemplate&SelectString=t1.docu-
nid=7473.
IEl FUD No es
Necesariamente Malo...
Especialmente si no significa Fear,
Uncertainty and Doubt (Miedo,
Incertidumbre y Duda), sino Fedora
Users and Developers (Usuarios y
Desarrolladores de Fedora), la aso-
ciacin de los cuales va a
celebrar su primera
conferencia
internacional
el 18 de
febrero del
2005 en la
Massachusetts
Institute of
Technology, justo
despus de la
LinuxWorld Conference and Expo.
Una de las razones por las que Red
Hat, la empresa detrs de la iniciativa,
desea promocionar este evento, es por
que, sin ser un absoluto fracaso, las
aportaciones de la comunidad del cdigo
abierto a Fedora ha sido menor del
esperado. Greg Dekoenigsberg, director
de relaciones con la comunidad de Red
Hat, dice que se debe a que
Simplemente no haba mucho que
pudieran hacer ya que Red Hat no
poda hacer mucho ms que aceptar
informes de errores. (Esta vez) quere-
mos asegurarnos de que tenemos los sis-
temas y procesos que permita a la gente
contribuir.
Aparte de la conferencia, Red Hat ha
tomado los pasos necesarios para hacer
que la contribucin por parte de los
usuarios sea una realidad. Por un lado
ha abierto el CVS para que los usuarios
puedan acceder a software en fase de
desarrollo. En breve, los desarrolladores
externos tambin podrn aprobar con-
tribuciones al rbol de desarrollo.
Asimismo, la empresa ha empezado un
proyecto llamado Fedora Extras, que
permite a terceros mantener paquetes
que se hallan fuera de la responsabilidad
directa de Fedora. Y, por ltimo, ofrecen
servidores accesibles pblicamente que
permiten automatizar el proceso de
construccin de software Fedora y los
extras mencionados. Estos servidores
permitirn evaluar posibles conflictos
entre componentes. I
http://fedora.redhat.com/ http://
fedoraproject.org/wiki/FUDCon1.
Mandrake estuvo a punto de ser
financieramente guillotinado en el 2002
cuando se declar en bancarrota ante un
tribunal de cuentas. Pero hete que
nuevos vientos soplan para la empresa
gala y ya se encuentra casi recuperada de
un fatdica gestin por parte de una
plantilla de directivos de categora
mundial con experiencia (uno ya se
puede imaginar el dao que hace un
individuo con semejante ttulo a una
compaa, no querremos ni pensar en
toda una plantilla).
Afortunadamente los directivos
fueron sumariamente despedidos cuan-
do fue obvio que sus ambiciosos planes
lo nico que producan eran enormes
gastos.
En la actualidad, Mandrake ha vuelto
a sus orgenes y concentra sus esfuerzos
en la produccin de buenos productos de
cdigo abierto. A la lnea de SOs de con-
sumo, y sus ya reputadas distros para
fines especficos (p.e.: Multi Network
Firewall), se suma ahora un tndem de
distros diseado para asaltar la Bastilla
de los escritorios corporativos. El do de
productos se denominan Corporate
Desktop y Corporate Server respectiva-
mente.
El doblete est diseado para que
ambas partes se integren perfectamente
la una con la otra. Por un lado,
Corporate Desktop viene con el software
necesario para disponer de un escritorio
Linux y ser productivo en el rea de la
ofimtica en poco tiempo. Corporate
Server, por otro lado, trae todos los servi-
dores necesarios para soportar la carga
de un red empresarial. Las dos distribu-
ciones vienen con una serie de los ya
habituales asistentes Mandrake para la
configuracin por separado de cada una,
pero tambin vienen con otra serie de
asistentes para integrar los clientes con
los servidores y viceversa.
El software de escritorio cuesta 99
euros y el servidor 329 euros. Ambos
vienen con soporte tcnico y con asis-
tentes (como no) para actualizaciones. I
http://www.mandrakesoft.com/
products.
IMandrake para la Empresa
9 www.linuxmagazine.com.es Nmero 03
Buzn del Lector CORREO
Correo del Lector
Acceso de Escritura
IDe Vuelta al Cole, Paul
Hace unos das que cay en mis manos
el nmero 1 de vuestra revista y tras leer-
lo por completo decid comprar el
nmero 2 y realizar la suscripcin de
prueba para los 3 siguientes nmeros. La
revista me parece bien elaborada en
cuanto a contenidos, algo pobre en cuan-
to a diseo grfico aunque aceptable si
lo comparamos con el resto de revistas
de similar temtica pero sobre todo me
pareci muy decepcionante en lo refe-
rente a ortografa, gramtica y expresin.
A lo largo de las pginas de ambos
nmeros hay tildes que no estn puestas,
errores gramaticales, frases que no lle-
gan a trmino, confusiones entre a ver
y haber, errores de guionado y lo que
me ha impulsado a escribir este correo:
el ttulo del artculo de la pgina 83 del
segundo nmero que dice Bienvenidos
a la Aula Virtual. El ttulo es digno de
ser usado como comentario de texto en
un aula presencial de un curso no supe-
rior a quinto de primaria, pero su autor
ha necesitado largos aos de estudio,
una amplia experiencia laboral y, segura-
mente, el paso por la universidad para
cometer semejante tropela lingstica.
Yo comprendo que los costes de pro-
duccin de una revista y los escasos
mrgenes comerciales (?) que deja, no
permiten mantener en plantilla a un
corector de estilo, pero incorrecciones
como la de ese ttulo ni siquiera
traspasan por la ventana de los correc-
tores ortogrficos de procesadores de
El mes pasado, compr en la calle el
nmero 1 de la revista Linux magazine.
Me gustara beneficiarme de la oferta de
tres primeros nmeros de prueba al pre-
cio de 5 euros pero solamente haciendo
el pago contra reembolso. Me gustara
saber lo antes posible si puedo hacerlo
de esta forma.
Gracias,
Un saludo.
Lucas Jimnez
ISubscripcin
Para los que han expresado preocu-
pacin sobre la seguridad del sistema,
informaros que el formulario donde se
consignan los datos en la web est prote-
gido contra abusos y los detalles que via-
jan por correo hasta nuestro buzn de
suscripciones se encriptan con una clave
PGP de 1024 bits, por tanto, al menos
hasta que se popularicen los orde-
nadores cunticos, podemos decir que
vuestros datos estn seguros. I
Por tanto, descartando al redactor
como autor del fallo a quien hay que
culpar? Pues al director, a servidor, al
que suscribe. S, fui yo! Paul C. Brown!
Lo admito! En un arrebato de megalo-
mana, decid modificar el ttulo original
de Juan Rafael (muy largo para mi
gusto) por otro con ms gancho y, a la
postre, un fallo gramatical horroroso.
Espero que tanto los lectores como el
autor sepan disculparme y prometo pen-
srmelo dos veces antes de meterle
mano a otro titular sin consultarlo
primero. I
Puedes enviar tus
comentarios y sugerencias a
correo@linuxmagazine.com.es
texto, por lo que tampoco debieran pasar
de largo a los ojos del maquetista, el edi-
tor o incluso el director editorial (y no
digamos del autor). Pero eso s, jams
debiera ser el lector quien tenga que
padecer tales incorrecciones.
En definitiva, la tcnica no est reida,
ni debe estarlo nunca, con la lingistica
y la mejor forma de expresar y transmitir
el conocimiento tcnico es hacerlo con
correccin y rigor lingstico.
Muchas gracias por leer mi correo y
espero que la revista eleve el listn de la
calidad de las publicaciones tcnicas.
Un saludo.
Fernando Bueno
LM Tienes toda la razn.
Lamentablemente (y sirva de excusa) en
estos momentos contamos con un
equipo de esqueleto de correctores (una
sola persona) que ha de corregir las cien
pginas de la revista en un tiempo
rcord, mientras compagina sus tareas
con otros menesteres.
En cuanto al garrafal titular que men-
cionas, he de decir en defensa del autor,
Juan Rafael Fernndez, que Juan Rafael
no comete errores. Es un profesor de
largo historial y ahora coordina cursos
de Guadalinex para profesores de centros
educativos para la Junta de Andaluca.
Es escrupuloso tanto en lo que se refiere
al contenido tcnico de sus artculos,
como en lo que se refiere a su ortografa
y gramtica.
LM Lamentamos informaros a todos
los que nos habis preguntado lo mismo
que de momento Linux Magazine no
puede servir suscripciones contrareembol-
so, ni prevemos hacerlo en el futuro. Sin
embargo, existe una solucin: la transfe-
rencia bancaria. Para todos aquellos que
desean realizar un pago controlado,
podis mandarnos un correo a subs@li-
nuxmagazine.com.es y os facilitaremos
los detalles para realizar la transaccin.
10 Nmero 03 www.linuxmagazine.com.es
seguridad. El cortafuegos tradicional
es una especie de router que reside
en la Capa 3 del modelo de referen-
cia OSI. La Capa 3 es la capa de la
pila que escucha al Protocolo de
Internet, lee direcciones IP y toma
decisiones sobre donde dirigir los
datagramas IP. Un cortafuegos adems
inspecciona las cabeceras de la Capa 4
(TCP o UDP) para identificar servicios y
evaluar flags.
Pero los productos de cortafuegos
modernos pueden operar en otros niveles
de la pila de protocolos (Figura 1). Esta
metodologa multinivel puede extenderse
de modo descendente a la Capa 2, donde
encontrar el llamado bridgewall. Mien-
tras que un bridge (o switch)
simplemente evaluar la direccin MAC,
el bridgewall inspeccionar los paquetes
de la Capa 2 hasta la Capa 4. El bridge-
wall es un filtrador de paquetes hecho y
derecho, tan flexible como un switch.
Un gateway a nivel de aplicacin pro-
porciona una capa adicional de
seguridad al ms alto nivel. El gateway
captura la conexin TCP actuando como
un proxy entre el cliente y el servidor.
Esto permite al cortafuegos antes de
finalizar mirar el protocolo de aplicacin
y detectar los paquetes ilegales que
incumplan las reglas del protocolo
basadas en RFC.
Por
supuesto que la mayora de las variantes
de cortafuegos son productos caros para
grandes redes y configuraciones comple-
jas. Nosotros estamos ms interesados en
lo que podemos hacer slo con Linux y
con un software de cortafuegos fcil de
encontrar.
Como veremos en el tema de portada
de este mes, Linux tiene una buena
coleccin de cortafuegos, incluyendo
algunas utilidades poderosas que simpli-
fican el proceso de configuracin de
modo que no hace falta ser un experto
para manejar uno.
En nuestro artculo sobre Guarddog
vamos a mostrar como usar este programa
KDE para realizar configuraciones de
cortafuegos IPTables o IPChains. En nues-
tro siguiente artculo, sobre Bridgewall,
hablamos de los instrumentos para confi-
gurar un cortafuegos a nivel de la Capa 2.
Un problema en el manejo de cortafue-
gos es la cantidad de datos que maneja y
que se acumulan en los registros del soft-
ware de proteccin. En nuestro tercer
artculo se habla de herramientas para el
manejo y anlisis de los registros de los
cortafuegos. Y nuestra ltima historia
describe Shorewall, otra utilidad que no
es un cortafuegos propiamente hablando,
sino un instrumento para simplificar la
configuracin de un cortafuegos. I
S
u ordenador le permite ver el
mundo, pero usted no quiere que el
mundo le vea. Los intrusos son
cada vez ms sofisticados y cabe esperar
a que alguno se de cuenta tarde o tem-
prano de que su equipo est sin
proteccin. Si se conecta a Internet, nece-
sita estar detrs de algn tipo de
cortafuegos.
Hay cortafuegos de muchos tamaos,
formas, precios y diseos. Es Bastante
interesante notar que, lo que se sola lla-
mar cortafuegos, ahora tan solo es uno
ms de la gran gama de productos de
Los cortafuegos son cada vez ms complejos. Por suerte, las herramientas para su
manejo son cada vez ms simples y ms accesibles para los usuarios normales.
POR JOE CASAD Y ACHIMLEITNER
Introduccin
PORTADA
Cortafuegos para el da a da
No Slo para Expertos
Guarddog.........................................11
a utilidad de KDE Guarddog proporciona un
interfaz intuitivo para la configuracin de
cortafuegos en Linux.
Brigdewall ......................................14
Un cortafuegos a nivel de bridge puede pro-
porcionar una solucin simple con un
mnimo de reconfiguracin.
Analizadores Registros ...........18
Herramientas para analizar los ficheros de
log y que nos ayudan a entender el estado
de la red.
Shorewall .......................................22
Shorewall es un conjunto de ficheros para la
configuracin de cortafuegos basados en fil-
tros de red.
EN PORTADA
Figura 1: Los cortafuegos modernos puede actuar como bridges (izquierda), routers (centro) o gateways
a nivel de aplicacin (derecha).
11 www.linuxmagazine.com.es Nmero 03
Guarddog est diseado para usuarios
domsticos o de redes privadas. Aunque
distribuciones como Red Hat, Mandrake
y Suse tienen herramientas simples
basadas en GUI para los cortafuegos,
carecen de la posibilidad de manejar sis-
temas distribuidos. Los usuarios ms
exigentes que requieran una configu-
racin ms detallada, probablemente
preferirn usar Guarddog.
Agujeros de Seguridad
Los usuarios inexpertos tienen que ser
muy cuidadosos cuando configuren un
cortafuegos con Guarddog. La facilidad
que supone escoger una opcin y hacer
clicen ella de la GUI a menudo lleva a
los usuarios a abrir ms puertos de los
necesarios. Por otro lado, es bastante
fcil reforzar una mquina hasta tal
punto que algunos servicios dejen de
funcionar.
Tambin hay que tener en cuenta que
Guarddog es una aplicacin KDE y no
debera ejecutarse en un servidor en el
sentido tradicional de la palabra. Si tiene
un servidor dedicado en su LAN, lo pro-
pio es crear una configuracin con
L
as herramientas IPChains (Linux
2.2) e IPTables (Linux 2.4) confi-
guran el cortafuegos de Linux,
pero estas herramientas de lnea de
comandos pueden ser algo crpticas
para los recin llegados a Linux. Simon
Edwards desarroll Guarddog [1] para
simplificar la tarea de configurar el
cortafuegos. Guarddog es una utilidad
basada en GUI para manejar los corta-
fuegos. La utilidad Guarddog viene con
licencia GPL y funciona tanto en KDE 2
como KDE 3.
Los usuarios se pueden descargar la
versin estable 2.2.0 desde [2]. Adems
de los fuentes, el sitio tiene tambin
disponible los binarios ya listos para ser
ejecutados para Mandrake, Red Hat y
Debian. Si desea probar las ltimas ca-
ractersticas, pruebe la versin 2.3.2
desde [2]. Pero antes de hacerlo, com-
pruebe los pros y los contras en el
cuadro Para los Valientes.
El programa KDE Guarddog promete
una configuracin fcil del cortafue-
gos de Linux con tan solo unos
cuantos clics. Guarddog ayuda a los
usuarios inexpertos a proteger sus
mquinas, e incluso redes completas,
contra los atacantes.
POR HOLGER JUNGE
PORTADA Guarddog
Configuraciones de cortafuegos con Guarddog
Cuidado con el Perro!
La versin de desarrollo actual de Guarddog es la 2.3.2. Hay varias reticencias para usar esta ver-
sin en entornos productivos. Por un lado, el usuario valiente puede encontrar algunas
caractersticas nuevas. La versin 2.3.2 soporta reas de puertos para los protocolos definidos por
el usuario. Los desarrolladores han modificado tambin la versin para soportar Linux 2.6 y han
aadido algunos protocolos nuevos a la lista, como RSync, Distcc, GKRellm, Bittorrent, PGP Key
Server, Jabber sobre SSL y el protocolo Microsoft Media Server.
Para los Valientes
12 Nmero 03 www.linuxmagazine.com.es
Guarddog
PORTADA
Guarddog en un ordenador distinto y
luego copiar el script resultante al servi-
dor.
Como Guarddog est basado en
IPChains o en IPTables, los usuarios
deben asegurarse que los mdulos nece-
sarios del kernel estn disponibles en el
servidor. La mayora de las distribu-
ciones se hacen cargo de esto
automticamente. Si su distribucin no
lo hace, necesitar recompilar el kernel
para que incluya IPTables o IPChains.
Guarddog usa comandos filtros orien-
tados al protocolo. Los usuarios no
necesitan especificar los nmeros de
puertos, lo que ayuda a evitar errores de
configuracin.
Asimismo Guarddog soporta grupos
de mquinas o zonas y permite a los
usuarios la opcin de establecer zonas
desmilitarizadas (DMZ).
La GUI
Se debe ejecutar Guarddog con los privi-
legios de root para permitir al programa
aplicar las reglas del cortafuegos. La
Figura 1 muestra Guarddog justo
despus de haber sido ejecutado.
Desafortunadamente, la GUI de Guard-
dog no es muy intuitiva. La GUI de
Guarddog tiene cuatro solapas. La
primera de estas solapas, la solapa
Zones, permite a los usuarios agrupar
las mquinas en zonas.
Zone Properties acepta direcciones IP
o rangos de direcciones para la zona.
Hay dos zonas preconfiguradas lla-
madas Internet y Local que el usuario no
puede borrar. La zona Internet automti-
camente incluye cualquier direccin IP
(Asegrese que se aplican los cambios
pulsando Apply). Si se pulsa de nuevo la
caja de verificacin la marca se trans-
forma en una X para indicar que el
cortafuegos denegar de forma explcita
las conexiones que usen este protocolo.
Una caja de verificacin vaca indica
que el cortafuegos ignorar cualquier
peticin al puerto.
Los protocolos HTTP, FTP (en la cate-
gora File Transfer) y los protocolos de
correo SMTP y POP3 son otros protoco-
los que se usan habitualmente.
Registro de Protocolos
La solapa Logging (vase la Figura 3)
proporciona opciones detalladas para el
que no est incluida en cualquier otra
zona. Local incluye las direcciones de la
tarjeta de red local. Una mquina indi-
vidual estar bien con tan solo estas dos
zonas.
Se puede usar la solapa Protocol
(Figura 2) para permitir o denegar proto-
colos especficos. La estructura en rbol
del lado derecho de la ventana organiza
los protocolos por categoras. Normal-
mente el servicio DNS es el primero que
se necesita habilitar. La entrada DNS
est ubicada en la categora Network.
Haciendo clic en la caja de verificacin
de DNS Domain Name Server se coloca
una marca de verificacin que indica
que el servicio est permitido.
Figura 3: Los administradores pueden usar la solapa Logging para especificar que clase de registro debe
proporcionar el cortafuegos.
Figura 1: El GUI de Guarddog despus de ser ejecutado con dos zonas de red
preconfiguradas: Internet y Local.
Figura 2: La solapa Protocol permite especificar el protocolo permitido o dene-
gado por el cortafuegos. No hay que preocuparse por los nmeros de puerto.
13 www.linuxmagazine.com.es Nmero 03
opciones del cortafuegos para reflejar
sus necesidades. Si algo va mal, no se
preocupe: siempre se puede pulsar en
Restore to factory defaults para restau-
rar las opciones por defecto de
Guarddog. Las opciones por defecto
para Local Dynamic Port Range estn
bien en la mayora de los casos. Especi-
fica que rango de puertos puede usar
Linux para las conexiones salientes.
Si echa en falta algn protocolo en la
solapa Protocol, puede pulsar New Proto-
col e introducir el nombre del protocolo,
establecer si el protocolo es TCP o UDP
y especificar los nmeros de puertos que
usa.
Guarddog tiene una opcin til para
importar y exportar los scripts de corta-
fuegos creados con la herramienta.
Guarddog puede exportar la configu-
racin actual a un script de la shell
sencillo y almacenarlo en
/etc/rc.firewall. Como los servidores nor-
malmente no ejecutan KDE, los
administradores pueden simplemente
pulsar el botn Export para exportar un
script, copiar este script al servidor y
ejecutarlo en l.
Puerta de Enlace al Mundo
Desde luego, los cortafuegos de Linux
no se usan tpicamente para los sistemas
aislados, sino que se usan como parte de
la estructura de seguridad de una red
completa. En este caso, la mquina
Linux acta como una puerta de enlace
y tiene dos tarjetas de red, una de cara a
Internet y otra de cara a la red interna
(vase la Figura 5). Es bastante simple
configurar Guarddog para este esce-
nario, sin embargo se necesita un
sistema con la versin 2.4 del kernel.
Adems de configurar IP masquerading
antes de instalar el cortafuegos. Guard-
dog no puede ayudarle en este paso,
pero s la herramienta Guidedog en [4].
El primer paso es crear una zona
Guarddog nueva para la red local. Para
hacerlo, pulse New Zone en la solapa
Zone. Se puede llamar a la zona LAN,
por ejemplo. Despus plsese New
Address para establecer la direccin IP,
tal como 192.168.1.0/24. Ahora plsese
en Internet y Local en Connection para
asegurar que la LAN est conectada a
Internet y al ordenador local.
Seleccione Internet en la solapa Proto-
col y marque las cajas para los
protocolos requeridos en la columna de
la LAN. Finalmente, pulse Apply para
almacenar la configuracin en
/etc/rc.firewall y lance el cortafuegos. I
PORTADA Guarddog
registro de Guarddog en syslog. El re-
gistro proporciona a los usuarios una
herramienta para detectar escaneos de
puertos. Los usuarios de Guarddog
pueden establecer la tasa de registro
para restringir el nmero de entradas en
los registros del cortafuegos. Un lmite
para el nmero mximo de entradas
ayudar a evitar un ataque potencial por
denegacin de servicios, que a veces es
causado por una tormenta de paquetes
IP que llenan el syslog y sobrecarga el
disco duro.
Si necesita detalles de todos los
paquetes IP y TCP entrantes, puede
seleccionarse la opcin para registrar
todos los paquetes y los nmeros de
secuencia TCP en la base de la ventana.
La solapa Advanced (vase la Figura
4) permite a los administradores experi-
mentados ajustar con precisin las
[1] Guarddog:http://www.simonzone.com/
software/guarddog
[2] Descarga: http://www.simonzone.com/
software/guarddog/#download
[3] Manual online: http://www.simonzone.
com/software/guarddog/#manual
[4] Guidedog: http://www.simonzone.com/
software/guidedog/
INFO
Holger Junge trabaja para Lifemedien,
donde se encarga de los servidores de
dominio, de los servidores Web, el servi-
dor de base de datos MySQL y el
servidor de base de datos Oracle.
E
L
A
U
T
O
R
Figura 4: Guarddog soporta configuraciones del cortafuegos detalladas. Por ejemplo, los usuarios
pueden definir protocolos y exportar e importar scripts.
Figura 5: El ordenador cortafuegos de Linux acta como puerta de enlace para la red interna.
14 Nmero 03 www.linuxmagazine.com.es
Normalmente los cortafuegos se implementan como routers, pero no tiene por qu ser as. Los filtros a nivel del bridge
tienen una serie de ventajas que puede aadirlas a su red en una etapa ms tarda sin necesidad de cambiar la configu-
racin de los componentes de red.
POR RALF SPENNEBERG
L
inux se ha ganado una buena repu-
tacin como plataforma para
implementar un cortafuegos. El
kernel posee un poderoso filtro de
paquetes basado en Netfilter/IPTables.
En un escenario clsico de cortafuegos,
Netfilter est en el router, donde divide
la red en dos o ms subredes. Pero el
aadir un cortafuegos a una red ya
instalada puede suponer cambiar la
infraestructura de la misma. Este
transparente como cortafuegos de la red.
Por supuesto, el puente evala los
paquetes de los protocolos de las capas
superiores (direcciones IP, puertos TCP)
en su rol de cortafuegos. Pero los hosts
de la red no notarn nada, a menos que
intenten enviar paquetes ilegales.
Configuracin del Kernel
Lennert Buytenhek y Bart de
Schuymer desarrollaron un parche que
Bridgewall
PORTADA
esfuerzo supone cambiar las direcciones
IP y modificar los controles de accesos a
los servicios internos.
Es bastante sencillo aadir un bridge.
Los bridges actan en la capa 2 del
Modelo de Referencia OSI y normal-
mente inspeccionan las direcciones
MAC en vez de las direcciones IP (vase
el cuadro titulado Construyendo
Puentes). Linux realiza esta tarea de
forma inteligente efectuando un filtrado
Implementando un cortafuegos a nivel de bridge
Puente Levadizo
15 www.linuxmagazine.com.es Nmero 03
PORTADA Bridgewall
este paquete por defecto. El paquete con-
tiene el comando brctl, cuyo uso est
reservado al usuario root. El comando
brctl addbr br0 crea un bridge llamado
br0. El comando ip link show br0 con-
firma la existencia del bridge. Como el
bridge tiene un nombre, se pueden eje-
cutar mltiples bridges virtuales en una
misma mquina Linux.
A continuacin el bridge necesita
saber qu tarjetas Ethernet (NICs) tiene
que controlar. El comando brctl permite
asignar las NICs al bridge:
brctl addif br0 eth0
brctl addif br0 eth1
Las tarjetas de red no deben estar con-
figuradas en este punto; es decir, no
deben estar UP o tener una direccin IP.
La idea es habilitar las tarjetas despus
de habrselas asignado al bridge:
ip link set eth0 up
ip link set eth1 up
ip link set br0 up
El bridge ya est listo para entrar en
accin, como el comando ip link show
muestra (Figura 3). El bridge redirige
los paquetes y mantiene su propia
cach ARP; usa la cach para registrar
las entradas mostrando qu direccin
MAC tiene asignada cada interfaz
(vase el cuadro Construyendo
Puentes).
Bloqueando el Puente
Como cualquier otro cortafuegos, el
bridge tiene un conjunto de reglas que
describen qu paquetes debe permitir y
cuales debe denegar. Hay tres comandos
para crear dichas reglas:
iptables
ebtables
arptables
Todos los paquetes que el puente
redirige pasan por el filtro de red FORD-
WARD. Hay algunas cosas a destacar
cuando se usan las bien conocidas ipta-
bles en un bridge. Si una regla especifica
que los paquetes pueden pasar por el
bridge en una nica direccin, es impor-
tante usar -m physdev (vase la Tabla 1).
Esto permite a la poltica identificar el
puerto del bridge por el cual el paquete
llega o comprobar si incluso debe ser
manipulado por el bridge.
El siguiente ejemplo est diseado
para permitir conexiones SSH a la direc-
cin IP 192.168.0.16 (puerto TCP 22) en
una nica direccin. El servidor SSH est
accesible por eth1. Las conexiones slo
pueden establecerse por clientes conec-
tados por eth0. Se necesitan dos
comandos iptables para definir dicha
poltica:
iptables -A FORWARD -m physdev
--physdev-in eth0 U
--physdev-out eth1
--dport 22 -d 192.168.0.16 U
-m state
--state NEW -j ACCEPT
iptables -A FORWARD -m physdev
--physdev-is-bridged -m state
--state ESTABLISHED,RELATED U
-j ACCEPT
aade la funcionalidad de cortafuegos
a nivel de bridge al kernel 2.4 de
Linux. El kernel 2.6 lleva el parche
instalado por defecto y los admi-
nistradores simplemente tienen que
configurar el kernel correctamente
(vanse las Figuras 1 y 2).
Todas las opciones del bridge en el
grupo netfilter son importantes, por
ejemplo, ARPtables soporta
IP_NF_ARPTABLES, IP_NF_ARPFILTER y
IP_NF_ARP_MANGLE. Estas funciones
pueden implementarse como mdulos o
bien ir incluidas dentro del kernel. El
soporte de Physdev match tambin es
importante: IP_NF_MATCH_PHYSDEV.
Esta opcin es necesaria en el kernel 2.6
o posteriores para comprobar el interfaz
fsico cuando filtre paquetes en el
bridge.
Una vez que se haya compilado e
instalado el nuevo kernel de forma
satisfactoria, tan solo sern necesarias
algunas herramientas de usuario.
Aunque la mayora de las distribu-
ciones traen el programa iptables,
habr que instalar arptables y ebtables.
Si se est ejecutando el kernel 2.6 o
uno anterior, tambin habr que insta-
lar una versin ms reciente del
comando iptables.
El paquete bridge-utils [2] es necesario
para configurar el bridge. Las distribu-
ciones modernas normalmente instalan
Opcin Significado
--physdev-in Nombre Especifica el puerto por el que el paquete tiene que llegar al bridge para que se le aplique esta
regla.
--physdev-out Nombre Especifica el puerto por el que el paquete tiene que salir del bridge para que se le aplique esta regla.
--physdev-is-in El paquete viene desde un interfaz conectado al bridge.
--physdev-is-out El paquete saldr del ordenador va un interfaz conectado al bridge.
--physdev-is-bridged El paquete viaja a travs del bridge.
Tabla 1: Physdev Match
Figura 1: Para permitir el modo bridge con el kernel 2.6, los administradores
necesitan seleccionar 802.1d Ethernet Bridging en Networking Support.
Figura 2: La opcin Bridged IP/ARP packets filtering en la configuracin de fil-
trado de red del kernel debe estar habilitada.
16 Nmero 03 www.linuxmagazine.com.es
perteneciente a esta conexin
pasar por el bridge.
Coleccin de
Direcciones
Los cortafuegos a nivel de
bridge se utilizan muy a
menudo para aadir seguri-
dad a las redes, eliminando la
necesidad de cambiar la
infraestructura de la red y las
direcciones IP. Un punto posi-
ble de insercin es justo
delante del router que el administrador
no pueda cambiar o que no posea fun-
cionalidades de cortafuegos. Pero lo
mejor que hacen los cortafuegos a nivel
de brigde es subdividir redes que ante-
riormente estaban contiguas.
En este caso, las direcciones IP en
cada lado del bridge no pueden ser de
rangos especficos ya que han sido asig-
nadas de forma arbitraria. El comando
ipset proporciona a los administradores
un medio para subdividir la red: ipset
crea un conjunto de direcciones del que
los administradores pueden coleccionar
direcciones IP arbitrarias. Las siguientes
lneas crean un conjunto de direcciones
llamado left y aade tres direcciones IP
al conjunto:
ipset -F; ipset -X; ipset -N U
left iphash
El primer comando se encarga del
establecimiento de las conexiones, que
est restringido en la direccin deseada.
El segundo permite a cualquier paquete
Bridgewall
PORTADA
Figura 3: El bridge virtual est ejecutndose. La salida de ip
link showmuestra los datos del bridge seguidos de la etiqueta
:4 bro:.
El trmino bridge se refiere a una categora
de dispositivos que manejan directamente el
reenvo de paquetes de red en la capa 2 del
modelo OSI. (Los dispositivos conocidos
como switch son un tipo de bridge). Para
reenviar paquetes de la capa 2, el bridge
tiene que obtener las direcciones MAC de la
red local y recordar que interfaces y puertos
pertenecen a qu ordenador. Cuando el
bridge recibe un paquete con un destino
cuya direccin MAC es conocida, simple-
mente lo reenva al interfaz correcto y de
este modo evita el trfico innecesario. Si el
bridge no conoce la direccin MAC del des-
tino, tendr que reenviarlo por todos los
interfaces.
El comando brctl showmacs bro lista todas
las direcciones MAC conocidas de un bridge.
El comando proporciona una tabla de
entradas. La primera columna contiene el
nmero de puerto para la entrega de paque-
tes del ordenador y la segunda columna
tiene la direccin MAC. Le siguen ms colum-
nas con informacin de
configuracin.
Olvido de Tablas
Para estar al corriente, el bridge
elimina las entradas de direc-
ciones MAC antiguas de su base
de datos de reenvios. Los admin-
istradores pueden especificar
cunto tiempo debe manten-
erse una direccin MAC no
usada en la base de datos antes
de deshacerse de ella. El
comando para esto es brctl
setageingtime brosegundos.
El esfuerzo computacional
interno sera excesiva e innece-
sariamente alto, si el bridge
olvidara las direcciones MAC no usadas
inmediatamente. En vez de ello, el bridge eti-
queta primero las entradas no usadas como
invlidas y luego las elimina a intervalos
regulares (conocidos como intervalos de
recoleccin de basura). Se puede establecer
dicho intervalo introduciendo el comando:
brctl setgcint bro segundos. Por defecto es 0
segundos.
El protocolo Spanning Tree
Los switches modernos usan el protocolo
spanning tree para proporcionar una
configuracin avanzada. Si dos o ms
switches conectan dos subredes, descubren
todas las rutas posibles de una red a otra.
Despus de elegir un switch como raz , el
switch raz define caminos activos e inac-
tivos a travs de la red y propaga esta
informacin a todos los switches que haya
en la red.
Los switches bloquean los caminos y los
interfaces inactivos, impidiendo el duplicado
de paquetes (paquetes que vayan por dos
caminos) que puedan llegar a la red destino
(vase la Figura 4). Si un switch falla, el resto
de los switches descubren de nuevo qu
caminos estn an disponibles y evitan el
paso por el switch cado.
Linux soporta el protocolo spanning tree, sin
embargo, los administradores necesitan
introducir el comando brctl stp bro on para
activarlo. Los bridges pueden asignarse con
una prioridad de 0 a 65535: brctl set-
bridgeprio bro prioridad. El bridge con la
prioridad ms baja asume la funcin de raz.
Test de Funcin
Los bridges comprueban si los otros bridges
estn funcionando enviando un mensaje
hello a intervalos regulares. Los adminis-
tradores pueden establecer el intervalo de
intercambios de mensajes hello intro-
duciendo brctl sethello bro segundos. El
comando brctl setmaxage bro segundos
especifica cunto tiempo el otro bridge debe
esperar si no recibe un mensaje hello.
Pasado este intervalo, el bridge asume que el
otro est fuera de servicio.
Cuando un bridge est conec-
tado a una red, debe esperar un
perodo de tiempo antes de
empezar a reenviar paquetes.
Tiene que usar este perodo
para comprobar si la red usa el
protocolo STP. El siguiente
comando establece el retraso
inicial: brctl setfd brosegundos.
STP debe estar desactivado en
un bridge de filtrado: brctl stp
bro off. El cortafuegos tiene
que confiar en sus propias
reglas y debe evitar ser desha-
bilitado por un ataque STP.
Construyendo Puentes
Figura 4: Los bridges 1 y 2 conectan las redes A y B. El bridge con la prioridad ms
baja usa STP para definir caminos vlidos para los paquetes enviados desde A a B.
17 www.linuxmagazine.com.es Nmero 03
PORTADA Bridgewall
--destination-mac U
fe:fd:0:0:0:1 -j DROP
Esta sintaxis elimina todas los paquetes
respuestas ARP enviados al ordenador
con la direccin MAC fe:fd:0:0:0:1 que
no son originados desde el ordenador
con la IP 192.168.0.15. El paquete de
respuesta ARP le dice a una entidad
solicitante la direccin MAC asociada
con la direccin IP especificada. Aqu el
ordenador con la direccin MAC
fe:fd:0:0:0:1, que est en la red al otro
lado del bridge, slo consigue ver la
direccin MAC del ordenador con la
direccin IP 192.168.0.15.
EBtables
El comando ebtables es mucho ms
potente que el ARPtables. El comando
ebtables soporta NAT para las direc-
ciones MAC del bridge. El bridge incluso
puede impedir a los atacantes averiguar
la direccin MAC de un ordenador
conectado a otro puerto. El bridge enva
su propia direccin MAC en respuesta a
solicitudes ARP y proporciona MAC-
NAT para todos los paquetes IP. El
primer comando en el Listado 1 le dice
al bridge que responda con su propia
direccin MAC (0:ff:90:2b:a6:16) a
cualquier solicitud ARP que quiera saber
la direccin MAC para la IP
192.168.0.16.
La direccin IP del ordenador que se
desea esconder detrs del bridge nece-
sita seguir: --arp-ip-dst. --arpreply-mac es
la direccin MAC del bridge. Para los
paquetes IP de MAC-NAT, adicional-
mente se necesitan las lneas 2 y 3 del
Listado 1. En nuestro ejemplo
192.168.0.16 es la direccin IP del orde-
nador que se esconder detrs del
bridge, y su direccin MAC es
fe:fd:0:0:0:1.
La excelente documentacin en la
pgina Web de EBtables en [3] propor-
ciona ms informacin sobre las
capacidades del comando ebtables.
En las Profundidades de la
Red
Un cortafuegos a nivel de bridge pro-
porciona a los administradores una
nueva clase de filtrado de paquetes que
permite mayor control sobre la capa 2.
Lo realmente prctico de los cortafue-
gos de tipo bridge es que pueden
aadirse de forma transparente a una
red existente. El bridge simplemente
reemplaza a un hub, switch o cable
cruzado en una red. Si se necesita blo-
quear unos cuantos ordenadores con
apariencia sospechosa detrs de un
cortafuegos, se puede hacer sin tener
que reconfigurar la red entera simple-
mente aadiendo un cortafuegos a nivel
de bridge. I
ipset -A left 192.168.0.5
ipset -A left 192.168.0.17
ipset -A left 192.168.0.18
El nuevo conjunto puede utilizarse por
las reglas IPtables. Con la opcin -m set
se maneja esto. -set Nombre especifica el
conjunto:
iptables -A FORWARD -m physdev
--physdev-in eth0 U
--physdev-out eth1
--dport 22 -m set U
--set left -m state
--state NEW -j ACCEPT
Adems de los paquetes IP, los paquetes
ARP son tambin objetivo de las reglas
del cortafuegos. Muchos ataques a
travs de redes internas estn basados
en la manipulacin de peticiones y
respuestas ARP.
ARPtables
El comando arptables filtra paquetes
ARP. Fuera de las operaciones del
bridge, el comando slo tiene sentido en
las cadenas INPUT y OUTPUT, ya que
los routers no redirigen los paquetes
ARP. Pero en un bridge, ARPtables
puede filtrar paquetes en la cadena FOR-
WARD. La sintaxis del comando es
similar a iptables. ARPtables usa los
objetivos ACCEPT y DROP, la opcin
REJECT no tiene sentido aqu.
arptables -A FORWARD -s ! U
192.168.0.15
[1] IPtables: http://www.iptables.org
[2] Linux bridge: http://bridge.sf.net
[3] EBtables: http://ebtables.sf.net
INFO
Figura 5: La pgina de Sourceforge para EBtables proporciona documentacin y ejemplos del mundo real.
01 01 ebtables -t nat -A
PREROUTING -p ARP --arp-ip-dst
-j arpreply
02 --arpreply-mac
0:ff:90:2b:a6:16
03 02 ebtables -t nat -A
PREROUTING -p IPv4 -d
0:ff:90:2b:a6:16 --ip-dst
04 192.168.0.16 -j dnat
--to-dst fe:fd:0:0:0:1
--dnat-target ACCEPT
05 03 ebtables -t nat -A
POSTROUTING
06 -p IPv4 -s
fe:fd:0:0:0:1 -j snat --to-src
0:ff:90:2b:a6:16
07 --snat-target ACCEPT
Listado 1: MAC-NAT
18 Nmero 03 www.linuxmagazine.com.es
El cortafuegos Netfilter crea ficheros
de registros muy detallados que real-
mente nadie quiere inspeccionar a
mano. Las herramientas de anlisis
de ficheros de registros como IPtables
Log Analyzer, Wallfire Wflogs y
FWlogwatch ayudan a los admi-
nistradores a seguir la pista de
acontecimientos y de filtros para
mensajes importantes.
POR RALF SPENNEBERG
E
n un entorno protegido por un
cortafuegos, el administrador debe
seguir la pista de los acontecimien-
tos mediante el registro de tantas
transacciones como sean posibles. Al
mismo tiempo, los administradores
quieren evitar inspeccionar ficheros de
registros de cientos de megabytes
porque slo estn interesados en
algunos en concreto.
Asistentes para los Ficheros
de Registros
Las herramientas de anlisis de proto-
colo proporcionan una solucin a este
dilema. Los usuarios de Linux tienen
varias opciones a la hora de elegir un
programa de anlisis de cortafuegos. En
datos Ulog son raras. Ulogd-php [5] es
uno de los primeros. Al contrario que los
otros sistemas de registros, Ulogd puede
registrar los eventos que causaron una
alerta en el cortafuegos en su base de
datos.
IPtables Log Analyzer
IPtables Log Analyzer presta servicio a
los registros de IPtables para Linux 2.4 o
2.6 en formato de pginas HTML (Ver
Figura 1). La herramienta incluye tres
componentes. El sistema de entrada de
la base de datos almacena los eventos
en una base de datos MySQL; los admi-
nistradores pueden usar el interfaz web
para acceder a la base de datos. El sis-
tema de entrada de la base de datos, la
Analizadores de Registros de Cortafuegos
PORTADA
este artculo, veremos tres alternativas:
IPtables Log Analyzer [1], WFlogs del
proyecto Wallfire [2] y FWlogwatch [3].
Los tres programas soportan una amplia
gama de protocolos y muestran los
resultados como pginas HTML muy
bien formateadas; WFlogs y FWlog-
watch adems tienen modos en tiempo
real. IPtables Log Analyzer es la nica
herramienta que utiliza bases de datos
para el almacenamiento de mensajes.
IPtables Log Analyzer se basa en un
sistema de entrada especial. Ulogd de
Harald Weltes [4] maneja esto de forma
nativa, sustituyendo el sistema de syslog
que trae por defecto. Desafortunada-
mente, las herramientas de anlisis
gratuitas que soportan las bases de
Herramientas de Anlisis para Ficheros de Registros de Cortafuegos
Anlisis Final
19 www.linuxmagazine.com.es Nmero 03
PORTADA Analizadores de Registros de Cortafuegos
parmetros de la base de datos y la con-
figuracin del servidor web (usuario,
password, URL). El ltimo paso es insta-
lar y activar el sistema de entrada de la
base de datos. Ser necesario de nuevo
modificar las credenciales de los usua-
rios de la base de datos.
IPtables Log Analyzer tiene tres va-
riantes del sistema de entrada de la base
de datos denominadas feed_db.pl,
feed_db-shore-wall.pl y feed_db-
suse.php. Para lanzar el sistema de
entrada automticamente, el admi-
nistrador necesita mover el script de
arranque, scripts/iptablelog, a /etc/init.d
y crear los enlaces en rc.
WFlogs
WFlogs es la herramienta de anlisis
que pertenece al proyecto Wallfire [2],
aunque puede usarse independiente-
mente. El mdulo del programa analiza
y procesa Netfilter, Ipchains, IPfilter,
Cisco PIX, Cisco IOS y ficheros de re-
gistro Snort, mostrando los resultados
como texto, HTML, XML o en tiempo
real. WFlogs no tiene soporte de base de
datos, pero puede convertir formatos de
ficheros de registros entre Netfilter,
IPchains e IPfilter.
Instalar WFlogs en Debian es muy
fcil. Debian Sid incluye WFlogs y los
paquetes para Woody estn disponibles
en [8]. Los usuarios de otras distribu-
ciones pueden compilar WFlogs desde el
cdigo fuente. Wflogs tambin necesita
la biblioteca WFnetobjs, otro compo-
nente de Wallfire [2]. La librera
alternativa DNS, adns [9], tambin se
recomienda para la resolucin de nom-
bres de forma asncrona DNS.
Para compilar Wflogs, se siguen los
pasos tpicos ./configure; make; make
install; se necesitar especificar el direc-
torio de WFnetobjs en los pasos de
configuracin.
De Netfilter a HTML
WFlogs puede procesar los registros del
cortafuegos de forma online u offline.
Los siguientes comandos crean una
vista en formato HTML de un fichero de
registro de Netfilter (Figura 2):
wflogs -i netfilter -o htmlU
netfilter.log > logs.html
En el modo tiempo real, WFlogs analiza
las nuevas entradas del fichero de re-
gistros y muestra por pantalla estas
entradas. Los administradores pueden
usar la shell para modificar interactiva-
mente el comportamiento de WFlogs.
Los siguientes comandos le dicen a
base de datos y el interfaz web pueden
ejecutarse todos en la misma mquina o
en mquinas distintas. Por otro lado, la
base de datos puede almacenar ficheros
de registros de varios cortafuegos.
Despus de decidir la arquitectura,
el administrador necesita crear una
base de datos MySQl denominada ipta-
bles, permitir a los usuarios el acceso
a iptables_admin e iptables_user y
generar tablas en la base de datos (Lis-
tado 1). Tambin es necesario definir
las reglas de IPtables. Dos cadenas
definidas por el usuario es la mejor
forma (Listado 2).
Creando Cadenas
En vez de -j ACCEPT, IPtables ahora
usar -j LOG_ACCEPT. Estas modifica-
ciones no son necesarias para Shorewall
[6] o Suse Firewall en CD [7]. Sin
embargo Suse dice que no dar soporte
a su producto de cortafuegos en el
futuro, que es otra razn para que los
administradores escojan herramientas y
actualizaciones del mundo de cdigo
abierto.
El siguiente paso es instalar el interfaz
web. Para hacer esto, el administrador
necesita mover el directorio web al
directorio raz del servidor web y modi-
ficar config.php para reflejar los
Figura 1: IPtables Log Analyzer da al administrador una clara visin de los ficheros de registros del corta-
fuegos.
01 # mysql -u root -p
02 mysql> create database
03 iptables;
04 mysql> grant
05 create,select,insert
on
06 iptables.* to
07
iptables_admin@localhost
08 identified by
'g3h31m';
09 mysql> grant create,select on
10 iptables.* to
11
iptables_user@localhost
12 identified by
'auchgeheim';
13 mysql> quit
14 # cat sql/db.sql | mysql -u
15 iptables_admin -p
iptables
Listado 1: Base de Datos
MySQL
20 Nmero 03 www.linuxmagazine.com.es
enviando mensajes de correo o
automticamente modificando las reglas
del cortafuegos.
Los administradores pueden usar el
servidor web integrado para supervisar
el estado de FWlogwatch desde un nave-
gador web.
FWlogwatch soporta IPchains
(opcin i), Netfilter (n), Ipfilter (f),
IPFW (b), Cisco IOS (c), Cisco PIX (p),
Netscreen (e), Windows XP (w), Elsa
Lancom (l) y formatos Snort (s). La
instalacin es tan fcil como lanzar los
procesos make && make
install && make install-con-
fig. Boris Wesslowski tiene
los paquetes para Red Hat y
Debian en la pgina princi-
pal del sitio web de
Fwlogwatch.
Los administradores
pueden configurar el com-
portamiento de FWlogwatch
usando el archivo de confi-
guracin, que viene
sumamente comentado.
Tambin pueden configurar
FWlogwatch mediante la
lnea de comandos. En las
pginas de ayuda (comando
man) vienen explicadas las
opciones. Por ejemplo, el
siguiente comando ejecuta
FWlogwatch en modo
resumen:
fwlogwatch -b -Pn -U U
'Spenneberg.Com'-p -n -N -o U
output.html -t -w U
/var/log/messages
La opcin -Pn habilita el analizador de
Netfilter. -U permite al usuario especi-
ficar una cabecera para el resumen. La
opcin -o especifica el fichero de salida; -
w estipula la salida HTML. -n y -N
permite la resolucin de nombres de
hosts y servicios. El resultado es un
resumen en formato HTML del fichero
de registros del cortafuegos.
Respuesta Rpida
La opcin de ejecucin de FWlogwatch
en modo tiempo real permite a los
administradores reaccionar ante men-
sajes del fichero de registros y a la vez
mostrar el estado actual en la ventana
del navegador. FWlogwatch se ejecuta
en segundo plano como un servicio y
monitoriza el fichero de registros, ana-
lizando de nuevo el archivo de
configuracin si se recibe un SIGHUP.
SIGUSR1 le indica al servicio que vuelva
a abrir el fichero de registros. Esta carac-
terstica es til para ir rotando ficheros
de registros, por ejemplo.
Los administradores pueden especi-
ficar el valor umbral para que
FWlogwatch reaccione a mensajes del
fichero de registros disparando alarmas o
respondiendo con scripts. Hay dos
WFlogs que monitorice inte-
ractivamente un fichero
denominado /var/log/warn
en tiempo real:
wflogs -RI -o humanU
/var/log/warn
La opcin -P le dice a WFlogs
que procese los mensajes
ms antiguos del fichero.
WFlogs no se lanza por men-
sajes que no sean del
cortafuegos.
Filtrado
Las opciones de filtrado
pueden restringir la salida a
mensajes especficos. El fil-
tro siguiente es de la
documentacin de WFlogs;
lista las conexiones Telnet y
SSH denegadas para los lti-
mos tres das de la red
10.0.0.0/8:
wflogs -f '$start_time >= U
this 3 days ago] &&$start_timeU
< [this 2 days ago] && U
$chainlabel =~ /(DROP|REJECT)/U
&& $sipaddr == 10.0.0.0/8 && U
$protocol == tcp && ($dport ==U
ssh || $dport == telnet) && U
($tcpflags & SYN)' -i U
netfilter -o text U
--summary=no
FWlogwatch
Boris Wesslowski desarroll FWlogwatch
para RUS-CERT en la Universidad de
Stuttgart, Alemania. La versin 1.0 [3]
de la herramienta de anlisis ahora ha
sido lanzada bajo licencia GPL.
FWlogwatch tiene tres modos de
operacin: Modo Log Summary, Modo
Interactive Report y Modo Realtime
Response. En el modo Log Summary, el
programa genera texto o pginas HTML
con el resumen del anlisis de los
ficheros de registros del cortafuegos
(Figura 3). En el modo Interactive Report,
FWlogwatch genera automticamente
informes de incidencias que los admi-
nistradores pueden reenviar a quienes
hayan sido afectados por el incidente.
En el modo Realtime, FWlogwatch
responde a ataques ejecutando scripts,
Analizadores de Registros de Cortafuegos
PORTADA
Figura 2: La pgina del Resumen de WFlogs muestra cuantos paquetes han
sido registrados para cada fuente.
01 iptables -N LOG_DROP
02 iptables -A LOG_DROP -j LOG
--
03 log-tcp-options
--log-ipoptions
04 --log-prefix
05 '[IPTABLES DROP] :'
06 iptables -A LOG_DROP -j DROP
07 iptables -N LOG_ACCEPT
08 iptables -A LOG_ACCEPT -j LOG
09 --log-tcp-options
--log-ipoptions
10 --log-prefix
11 '[IPTABLES ACCEPT] : '
12 iptables -A LOG_ACCEPT -j
13 ACCEPT
Listado 2: Analizador de
Registros de IPtables
21 www.linuxmagazine.com.es Nmero 03
PORTADA Analizadores de Registros de Cortafuegos
con el analizador Netfilter. El proceso se
ejecuta bajo la identificacin de usuario
fwloguser.
Si se excede el umbral de cinco cone-
xiones en 600 segundos, Fwlogwatch
realiza una accin configurable. Fwlog-
watch monta un servidor de web en
127.0.0.1:8888, donde un usuario ralf
puede conectarse con la contrasea pass-
word. FWlogwatch utiliza contraseas
encriptadas con DES, que pueden gene-
rarse tecleando htpasswd -nb usuario
contrasea. Cuando el usuario se registra
en esta pgina, aparece lo mostrado en la
Figura 4. Esta pgina conduce a otras
pginas con una amplia gama de
opciones de configuracin de Fwlog-
watch (Figura 5).
Opciones
FWlogwatch tiene una enorme va-
riedad de caractersticas, que van
desde un simple resumen hasta un
modo en tiempo real con respuestas
configurables. Pero las otras herra-
mientas que se comentan en este
artculo merecen tambin una buena
consideracin. Si necesita filtros
potentes, WFlogs puede ser una
buena opcin para su red. El IPta-
bles Log Analyzer es una opcin
interesante para algunas situaciones
por su soporte de base de datos.
El IPtables Log Analyzer da a los
administradores de sistemas la opcin de
utilizacin de sentencias SQL para bus-
car los mensajes del cortafuegos, en vez
de tener que lanzar las bsquedas desde
una interfaz web. I
opciones de configuracin importantes:
recent (-l) define el perodo de tiempo a
monitorizar y alert_threshold (-a) define
el nmero de eventos que en este tiempo
tienen que suceder para lanzar una
respuesta. El Listado 3 muestra su con-
figuracin. Este ejemplo configura
FWlogwatch para el modo en tiempo real
Figura 4: El servidor web integrado en FWlog-
watch permite a los administradores monitorizar
el estado actual del cortafuegos.
Figura 5: Los administradores pueden utilizar un
navegador para configurar FWlogwatch. El Alert
Threshold especifica el nmero de mensajes nece-
sarios para lanzar la respuesta de FWlogwatch.
E
[1] IPtables Log Analyzer: http://www.gege.
org/iptables/
[2] Proyecto Wallfire (WFlogs y WFnetobjs):
http://www.wallfire.org
[3] FWlogwatch: http://fwlogwatch.
inside-security.de
[4] Ulogd: http://gnumonks.org/projects/
ulogd
[5] Ulogd PHP:http://www.inl.fr/download/
ulog-php.html
[6] Cortafuegos Shorewall: http://shorewall.
sourceforge.net
[7] Cortafuegos Suse:http://www.suse.de/
en/ business/products/suse_business/
firewall/
[8] Paquetes WFlogs,Debian Woody: http://
people.debian.org/~kelbert/
[9] GNU adns:http://www.chiark.greenend.
org.uk/~ian/adns/
INFO
Ralf Spenneberg es un freelance de
Unix/Linux, profesor y autor. El ao
pasado vi la luz su primer libro: Sis-
temas de Intrusin y Deteccin para
Servidores Linux. Ralf tambin ha
desarrollado varios trabajos de edu-
cacin.
E
L
A
U
T
O
R
Figura 3: En Modo Resumen, FWlogwatch da a los administradores una vista de la actividad del fichero
de registro del cortafuegos.
01 realtime_response = yes
02 parser = n
03 run_as = fwloguser
04 recent = 600
05 alert_threshold = 5
06 notify = yes
07 notification_script = /usr/
08 sbin/fwlw_notify
09 server_status = yes
10 bind_to = 127.0.0.1
11 listen_port = 8888
12 status_user = ralf
13 status_password =
14 i0QlAmOg4PrAA
15 refresh = 10
Listado 3: Fwlogwatch en
Modo Tiempo Real
22 Nmero 03 www.linuxmagazine.com.es
Cuando los usuarios piensan en su estacin de trabajo
en casa olvidan normalmente la seguridad. Pero el peli-
gro acecha, esperando golpear a los desprevenidos.
Shorewall ayuda a los usuarios habituales de Linux a
mantener a los intrusos fuera.
POR JAMES MOHR
L
a nica forma de que nuestro sis-
tema sea completamente seguro
frente a ataques es no conectarlo
nunca a Internet. Cada vez que abrimos
la puerta para salir tambin la abrimos
para que hackers potenciales entren.
Algunos usuarios tienen la equivocada
creencia de que los intrusos solo atacan
sitios de alto renombre y no estn intere-
sados en estaciones de trabajo
personales. La verdad es que todas las
estaciones de trabajo conectadas a Inter-
net estn en peligro de ser atacadas,
incluso las que se conectan mediante
telfono analgico normal. En muchos
casos estos ataques son aleatorios, de
fuerza bruta, donde el atacante utiliza
una larga lista de conocidos agujeros de
seguridad.
Para frustrar a los atacantes simple-
mente podramos deshabilitar todos los
puertos de entrada, haciendo en esencia
nuestro equipo invisible al mundo. Sin
embargo, cuando necesitamos o simple-
mente queremos proporcionar servicios
desde nuestro ordenador debemos usar
otro tipo de proteccin.
sita ser especficamente configurado en
el modo compatibles con ipchains
para que trabaje con stas.
Podemos descargar la ltima versin
de Shorewall desde la pgina Web de
Shorewall Web [2] bien como cdigo o
como paquete RPM. Debemos saber que
la versin RPM no ha sido comprobada
con cada una de las distribuciones, si
bien s ha sido comprobada con las prin-
cipales como SuSE, Redhat y Mandrake.
Si no estamos seguros debemos compro-
barlo en la pgina de Shorewall.
Para que Shorewall funcione necesita-
mos los paquetes de iptables e iproute/
iproute2. Estos paquetes son propor-
cionados habitualmente por defecto en
la mayora de las distribuciones por lo
que no debera ser un problema. La
razn por la que necesitamos las iptables
es porque Shorewall no es realmente un
cortafuegos en s mismo. Shorewall no
es responsable de comprobar, filtrar y
gestionar paquetes. Shorewall simple-
mente coge sus archivos de
configuracin y usa el comando iptables
para cargarlas en el ncleo.
Shorewall
PORTADA
Incluso el ms pequeo de los nego-
cios necesita la proteccin que
proporciona un cortafuegos. La mayora
de los usuarios no puede permitirse los
miles de dlares que cuesta un cortafue-
gos comercial. Afortunadamente hay
soluciones de cdigo abierto que ofrecen
la proteccin adecuada. Una de esas
soluciones es Shorewall.
Entre Bastidores
Shorewall es el nombre comn del
cortafuegos Shoreline Firewall. Desde
la perspectiva del usuario, Shorewall es
un conjunto de archivos fciles de con-
figurar que se utilizan para configurar
Netfilter [1]. Netfilter es una funcin
del ncleo de Linux 2.4.x y 2.6.x que
permite a los mdulos del ncleo
acceder al conjunto de protocolos de
red en distintos lugares. El mdulo del
ncleo puede hacer casi todos con el
paquete de red, incluyendo simple-
mente dejarlos caer o manipularlo.
Netfilter tambin soporta las antiguas
ipchains, la instalacin empaquetada
de filtro en ncleos 2.2. Netfilter nece-
Configuracin de Netfilter y tablas ip con Shorewall
La Mesa Servida
23 www.linuxmagazine.com.es Nmero 03
PORTADA Shorewall
el paquete. Este concepto es bsicamente
comn en todo software cortafuegos y
puede utilizarse en redes con decenas,
incluso cientos de ordenadores, si bien
es probable que, con muchos orde-
nadores hablando entre ellos, prefiramos
subdividir nuestra red en pequeos seg-
mentos. Cada segmento tambin puede
ser gestionado por su propio cortafuegos
Shorewall.
Algo que debemos saber es que no
necesitamos dedicar un equipo especfi-
camente como cortafuegos. Si bien esto
es una prctica comn y generalmente
una buena idea, los usuarios domsticos
no dispongan del espacio necesario para
usar un equipo especfico para cada fun-
cin. Si nuestra estacin de trabajo se
conecta directamente a Internet
podramos aadir un cortafuegos direc-
tamente a nuestro equipo.
Mi red consiste en un ordenador con
tarjeta DSL que se conecta a Internet,
una mquina con Windows XP y otra
con Linux. Cada una tiene una funcin
especfica y permito diferentes cone-
xiones desde y hasta estas mquinas.
Tan simple como es la configuracin
de mi red, solo tengo que cambiar un par
de archivos de configuracin para usar
Shorewall. Debido a que esta es una con-
figuracin comn y simple, es un buen
punto de partida.
Configuracin Bsica
El archivo principal de configuracin es
/etc/shorewall/shorewall.conf. shore-
wall.conf nos permite configurar todo,
desde el comportamiento al arranque
hasta el comportamiento al apagarlo. Si
bien podemos configurar muchos va-
lores distintos en este archivo an no he
encontrado ninguna razn para cambiar
ninguno de ellos en mi sistema.
Puede que ya estemos familiarizados
con el trmino segmento para denomi-
narporciones especficas de una red.
Shorewall usa el trmino zona. En mi
configuracin tengo cuatro zonas: fw (el
propio cortafuegos y mi estacin de tra-
bajo), net (Internet) y loc (la red local).
Los nombres de las zonas deben ser
cortos (5 caracteres o menos) y pueden
contener letras o nmeros. Debemos
saber que no podemos usar el nombre de
zona especial all. Tampoco nos podemos
referir a una zona distinta a la del corta-
fuegos mediante la variable FW del
archivo shorewall.conf. Este nombre
cambia por defecto a fw.
Aunque no proporcionamos ningn
servicio a ordenadores fuera de nuestra
red local necesitamos la zona Internet.
Recordemos que las reglas iptable se
definen mediante una conexin espec-
fica, o lo que es lo mismo, definida por
dos puntos finales. Uno de los puntos
puede ser nuestra estacin de trabajo,
siendo el otro Internet. Por tanto necesi-
tamos definir una zona especficamente
como Internet.
Debemos saber que estos nombres son
solo un acuerdo. Si bien son los que
Shorewall usa por defecto para estas
zonas, las podemos llamar como que-
ramos mientras que seamos consistentes
Debido a que iptables asume la tarea
de manipular tablas dentro del ncleo,
Shorewall no se necesita ms una vez lo
hemos ejecutado. Incluso podemos ver
que esta ocurriendo echando un vistazo
al propio programa Shorewall. No es
necesario rebuscar a travs de mucho
cdigo. El programa Shorewall (normal-
mente /sbin/shorewall) es un archivo de
comandos.
Para que iptables sepa lo que debe
hacer debemos indicarle al ncleo las
reglas. Las llamadas rulesets se definen
dentro de las iptables y estn compues-
tas de una conexin y una serie de
clasificadores. Esto determina si una
conexin en particular se permite y si y
como debe ser manipulado o redirigido
Figura 1: Una configuracin Shorewall para entornos empresariales. Ntese las distintas zonas de
seguridad.
24 Nmero 03 www.linuxmagazine.com.es
net ppp0 routefilter,norfc1918
loc eth0 detect -
Como podemos observar, la zona Inter-
net est conectada a la interfaz ppp0 y
la zona local est conectada a la inter-
faz eth0. Debido a que tengo tres
zonas, puede que nos preguntemos por
qu no hay ninguna lnea para la zona
del cortafuegos. Bueno, es sencillo, el
cortafuegos se conecta a las otras zonas
a travs de una de las interfaces ya
especificadas. Por tanto quizs sea
mejor pensar en el archivo interface
como el lugar donde se define que
interfaz usa el firewall para hablar con
las otras zonas.
En el caso de la interfaz ppp0 la
columna difusin tiene un guin (-).
Debido a que la conexin PPP no tiene
difusin, podramos haberlo dejado en
blanco. No obstante, como deseaba
especificar algunas opciones adicionales,
necesitaba ocupar el espacio de alguna
manera. Si no hubiera opciones simple-
mente podramos haber dejado los dos
espacios en blanco. No obstante, a m
siempre me gusta incluir un guin en
vez de dejar el espacio libre con el fin de
recordar que falta algo.
La opcin routefilter que hemos
especificado le indica al ncleo que debe
rechazar cualquier paquete de la interfaz
indicado cuya direccin origen haya sido
encaminada fuera con un interfaz dis-
tinta. En este caso, si el interfaz ppp0
recibe un paquete con una direccin
original entrante que normalmente se
habra dirigido fuera desde la interfaz
eth0, esta sera abandonada. Esto es lla-
mado anti-spoofing.
La segunda opcin, norfc1918, indica
al ncleo que no debe enrutar direc-
ciones especificadas como privadas en
RFC 1918. RFC 1918 lista una serie de
rangos de direcciones que pueden ser
usadas por cualquiera y no deben se
enrutadas. Esta opcin asegura que no lo
sern. Los detalles respecto a RFC 1918
pueden ser encontrados en [3].
Aqu hemos tenido un problema.
Queremos que nuestros otros orde-
nadores sean capaces de acceder a
Internet, pero tienen direcciones en el
rango marcado por RFC 1918. Entonces,
cmo pueden acceder a Internet?
Bueno, eso lo veremos en breve.
Podemos configurar Shorewall de
forma que se comporte de determinadas
maneras en base a las zonas ajustando
condiciones especficas para cada zona.
Los ajustes por defecto para cada zona
son iguales (como nos podemos imagi-
nar) y estn en el archivo policy. Los
campos en este archivo son: cliente (la
zona origen), servidor (la zona destino),
poltica (lo que se debe hacer por
defecto) y nivel de registro (cuanta infor-
macin debe ser almacenada).
El listado 3 muestra un archivo de
poltica de ejemplo. Observemos las lti-
mas dos lneas. La primera indica que
cualquier trfico que haya sido compro-
bado y venga desde Internet
simplemente debe ser abandonado
(ignorado). Tenemos cuatro opciones
para la poltica de conexin:
ACCEPT (Aceptar) - Acepta la solicitud
de conexin. DROP (Dejar) - Ignora la
solicitud de conexin. REJECT (Re-
chazar) - Devuelve un error determinado
al equipo solicitante. CONTINUE (Con-
tinuar) - Nos permite tener anfitriones en
mltiples zonas y aplicar reglas de
ambas zonas.
El nivel de registro determina cuanta
informacin se envia al registro del sis-
tema (syslog). Debemos recordar que
todo esto se realiza con los iptables que
existen en el ncleo. Esto significa que
toda la informacin es enviada por la
a los largo de los archivos de configu-
racin.
Los permisos en el directorio
/etc/shorewall est puesto en 700 por
defecto, lo que significa que solo el
propietario (raz) tiene acceso. Incluso el
permiso de lectura puede ser peligroso
puesto que alguien puede ser capaz de
ver un agujero en la seguridad y
explotarlo.
Las zonas estn definidas en el archivo
/etc/shorewall/zones. Cada entrada tiene
tres valores: nombre de la zona (usado
para referirse a sta en los otros
archivos), nombre a mostrar (aparece
cuando shorewall esta cargando las
reglas) y un comentario. El listado 1 nos
muestra el archivo zones bsico.
Definicin de los Caminos de
Comunicacin
Si bien hemos definido las zonas, el
cortafuegos an no sabe como comuni-
carse con cada zona. Esto es debido a
que an no hay asociacin entre los
nombres de las zonas y la propia red.
Esto se hace usando el archivo
/etc/shorewall/interfaces, compuesto de
cuatro columnas: zona, interfaz,
difusin y opciones.
En mi sistema, el archivo interfaces es
parecido al que aparece en el listado 2.
La zona es simplemente el nombre de
la zona cogido del archivo zones. El
interfaz es el nombre de la interfaz de
la red. Por ejemplo, en mi conexin
DSL, que usa el protocolo punto a
punto (PPP), el nombre de la interfaz
es ppp0. El nombre del interfaz para la
tarjeta de red es eth0. Para saber que
interfaces tenemos debemos usar el
comando /sbin/ifconfig. La columna
difusin es la direccin de difusin de
la red anexa a esa interfaz. Como
habrs podido imaginar, la columna
opciones especifica cualquier opcin
que deseemos usar.
En mi sistema aparecen dos entradas
como las siguientes:
Shorewall
PORTADA
01 #ZONE DISPLAY COMMENT
02 net Net the Internet zone
03 loc Local the local network
04 fw FW the firewall
05 #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Listado 1: Archivo de zones de ejemplo
01 #ZONE OPTIONS BROADCAST INTERFACE
02 net ppp0 - routefilter,norfc1918
03 loc eth0 detect -
04 #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Listado 2: Archivo de interfaces de ejemplo
25 www.linuxmagazine.com.es Nmero 03
PORTADA Shorewall
solicitud saliente lo primero que hace el
sistema es comprobar la solicitud con las
conexiones definidas en el archivo de
reglas. Si no se encuentra ninguna usa el
valor por defecto del archivo de poltica.
Las columnas del archivos de reglas son:
accin a ejecutar, la fuente de la solici-
tud, el destino, el protocolo usado, el
puerto de destino, el puerto origen y el
destino original.
Adicionalmente a las acciones del
archivo zona, tenemos un par de
acciones adicionales en el archivo de
reglas. DNAT nos permite hacer traduc-
ciones de direcciones de destino de red
(Destination Network Address Transla-
tion). De esta forma las solicitudes
pueden ser redireccionadas a equipos
distintos e incluso a distintos puertos en
esos equipos. La accin REDIRECT (redi-
reccionar) redireccionar las solicitudes
a puertos especficos en el mismo
equipo. Esto se utiliza normalmente para
redireccionar solicitudes HTTP al proxy
local (por ejemplo, squid).
Para redes ms pequeas que no nece-
sitan proporcionar acceso completo a
Internet he averiguado que la accin
REDIRECT es extremadamente til (posi-
blemente slo permitiendo acceso
HTTP). Hay una entrada que es como
sigue:
REDIRECT loc 3128 tcp www -U
!10.2.38.0/24
En un interfaz de comandos, esta
entrada indica que todas la conexiones
entrantes usando el protocolo TCP y
solicitando servicios www (por ejemplo
HTTP) sern redireccionados al puerto
3128. Este es el puerto en el que el servi-
dor proxy Squid est escuchando.
Mirando en el destino original especi-
ficamos una completa red tipo C
usando la anotacin CIDR: 10.2.38.0/
24. Adems esta entrada est precedida
de una marca de exclamacin. Como en
otros contextos, la marca de excla-
macin se utiliza para negar el acceso.
Por tanto el significado de la lnea
entera en inverso. Lo que significa que
todas las solicitudes excepto aquellas
destinadas a direcciones en la red
10.2.38.0 son redireccionadas a Squid.
Esto tiene sentido porque 10.2.38.0 es
mi red local y cualquier servidor Web
en la red local puede o debe ser accesi-
ble sin necesidad de tener que pasar a
travs de un proxy.
La accin LOG (registro) primero
registrar el paquete y luego continuar
con la siguiente regla de aplicacin. La
accin QUEUE (cola) se utiliza para diri-
gir paquetes a aplicaciones de espacio de
usuario, las cuales se manipulan y se
devuelven a la pila IP.
Una norma a seguir cuando configure-
mos el archivo rules es poner apagar todo
(off>) en principio y luego ir encen-
diendo cosas segn las necesitemos.
Muchas personas lo hacen al revs
empezando con una red abierta y luego
van apagando servicios innecesarios. En
el primer caso, si olvidamos algo lo nico
que ocurre es que no tendremos acceso
segn esperamos (lo que es un simple
inconveniente), pero si esto ocurre en el
segundo caso, olvidar apagar algo puede
significar estar abierto a un ataque.
Cavando ms profundo
El archivo /etc/shorewall/hosts nos per-
mite definir anfitriones especficos.
Habitualmente no hay razones para
aadir nada en el archivo hosts para
redes pequeas. Cuanto ms pequea es
la red es ms posible que todas la
mquinas en una zona estn configu-
radas de la misma forma (o dicho de una
forma ms correcta, que todas las
mquinas de un interfaz concreto tienen
la misma configuracin).
Este puede que no sea el caso y puede
que necesitemos diferentes reglas de
acceso para distintas mquinas de la
misma red. Hace un par de meses mi
hijo comenz a jugar a un juego de rol
en Internet. Esto implica que l necesita
algo ms de un simple acceso HTTP a
Internet, por lo que no pude continuar
simplemente usando la redireccin al
proxy Squid como describimos antes.
Para proporcionar este acceso he
definido un grupo especfico de orde-
nadores como una zona nueva. Primero
he creado una nueva entrada en mi
archivo de zonas para esta nueva zona, la
cual he llamado juego (game). Luego
he creado una entrada en el archivo hosts
que solo contiene el equipo de mi hijo:
game eth0:10.2.38.13.
Pero esto no es todo. Recordemos que mi
red local es 10.2.38.0/24. ste es una de
utilidad de registro del ncleo. Todo lo
que nosotros hacemos es especificar la
prioridad de los mensajes que a registrar.
Debemos repasar la pgina principal del
syslogd para encontrar ms detalles al
respecto.
Las dos ltimas lneas de mi archivo
de poltica tienen este aspecto:
net all DROP info
all all REJECT info
La primera lnea indica que cualquier
trfico que no haya comprobado y
provenga de Internet debe ser abando-
nado (ignorado). No obstante, el resto
del trfico debe ser rechazado. Esto
puede parecer un poco absurdo al princi-
pio, pero tiene sentido cuando
consideramos las diferencias entre aban-
donar y rechazar. Cuando un paquete
viene de Internet con destino a una
direccin especfica o puerto no permi-
tido deseamos ignorarlo. No deseamos
que el remitente sepa lo ocurrido. Esto
puede darle al usuario alguna pista
respecto de cmo evadir la seguridad.
Por otro lado, los paquetes provenientes
de cualquier otro lugar (mi estacin de
trabajo o el equipo local) son rechaza-
dos, dando indicaciones a la aplicacin
cliente de lo ocurrido.
Estamos configurando el compor-
tamiento por defecto en el archivo de la
zona. Esto significa que si no definimos
ninguna conexin adicional ste ser el
comportamiento que aplicar en el
archivo de poltica.
En mi archivo de poltica solo tengo
una entrada para la zona de red. Terica-
mente, esto significa que todos los
paquetes que provengan de Internet
deben ser abandonados. No obstante,
tengo en mi mquina un servidor Web
con mucha informacin de referencia
que deseo acceder desde el trabajo.
Debido a que esta conexin es va Inter-
net, el archivo de reglas no me permitir
acceder a mi servidor.
La respuesta a este problema es el
archivo reglas. El archivo de reglas es el
corazn de la configuracin de Shore-
wall. Aqu definimos una conexin
especfica en trminos de zonas, servi-
cios de red (puertos), segmento de red,
equipos individuales y bsicamente
cualquier combinacin en la que
podamos pensar. Cuando llegue una
las redes privadas listadas en RFC
1918. Incluso si yo quisiese dirigirla a
travs de mi tarjeta DSL, podramos
apostar a que mi ISP no va ha aceptarla.
Entonces, qu podemos hacer?
La solucin es algo llamado enmas-
carar IP (IP masquerading). Como su
nombre implica, una direccin IP es
enmascarada por las otras. En mi caso,
la direccin IP en la tarjeta DSL (la cual
tiene una direccin de Internet vlida) es
enmascarada por la direccin IP en la red
local. Por tanto necesito creer una
entrada en el archivo
/etc/shorewall/masq como la siguiente:
ppp0 10.2.38.0/24
Esta entrada hace que todo el trfico
saliente de la interfaz ppp0 desde la red
clase C 10.2.38.0 debe ser enmascarada.
En este punto ya hemos acabado la
configuracin bsica del enmascarador.
No obstante, lo siguiente es la parte ms
complicada. No fue muy sencillo encon-
trar informacin acerca de cmo ejecutar
este juego a travs de cortafuegos. De
hecho encontr determinada informa-
cin al respecto que sugeran
deshabilitar el cortafuegos si se desea
jugar.
Bien, pues al final consegu que fun-
cionara. Para hacerlo necesit ajustar el
nivel de acceso en el archivo policy para
depurar y vigilar en el archivo de regis-
tros todos los intentos de conexin desde
el equipo de mi hijo con cualquier otra
mquina para entonces comprobar el
DNS para ver si fue una mquina de los
desarrolladores del juego. Entonces
aad un puerto especfico a mi archivo
rules.
Si lo hubiese deseado, tambin podra
haber aadido reglas para el servicio
WWW (puerto 80). No obstante, debido
a que esto es lo nico que mi hijo nece-
sitaba al margen de acceso a la Web, an
continuo usando REDIRECT para el
acceso Web.
Resolucin de problemas y
acceso
Es posible (y probable) que tengamos
problemas la primera vez que configure-
mos Shorewall. Por tanto, rastrear las
causas de un problema nos ser til.
Una tcnica til para depurar proble-
mas es ajustar el nivel de registro en el
archivo policy. Ajustarlo para depurar
nos proporciona mucha ms informa-
cin. Entrar en mucho detalle respecto a
las entradas del registro est ms all del
alcance de este artculo, pero es bastante
fcil entender de que van incluso sin
comprender del todo la terminologa. Por
ejemplo, veamos estos datos:
Nov 1 11:19:32 saturn kernel:U
Shorewall:net2all:DROP:IN=ppp0U
OUT= MAC=
SRC=1.2.3.4 DST=10.2.38.11U
LEN=48 TOS=0x00 PREC=0x00U
TTL=116 ID=47048 DF
PROTO=TCP SPT=1 292 DPT=1080U
WINDOW=64240 RES=0x00 SYN URGP=0
Estos son datos estndar de
/var/log/messages. Al principio tenemos
la fecha, el nombre del equipo y el regis-
tro del sistema (kernel en este caso). A
continuacin encontramos el mensaje
propiamente dicha. Fcilmente podemos
ver que el paquete entraba en mi tarjeta
DSL (ppp0) y que el paquete fue aban-
donado. Tambin podemos observar que
estaba usando la conexin net2all de
Internet a todas las otras zonas.
Si volvemos a repasar lo comentado
respecto al archivo policy veremos que
tenamos una entrada que indicaba que
el comportamiento por defecto deba
ser el abandono de todos los paquetes
que vengan de Internet hacia el resto
de las interfaces. Haba un paquete
intentando acceder el puerto 1080
(DPT). No hay nada ejecutndose en
ese puerto y desde luego no me he
comunicado con nadie que deba usar
ese puerto. Puesto que no hay ningn
servicio estndar asociado a este
puerto no hay razn para que nadie
intente acceder a el desde Internet, por
lo que parece bastante obvio que
alguien intentaba aprovecharse de un
error de Windows.
Si el equipo remoto (o incluso otro
equipo en la misma red) continua inten-
tando acceder a distintos puertos de mi
equipo puede que desee aadirlo a la
lista negra. Esto se hace aadiendo la
direccin del anfitrin o de red en
formato CIDR al archivo /etc/shore-
wall/blacklist. Eso implica que, al
margen de que cualquier otra entrada les
permita el acceso, estos equipos tienen
el acceso especficamente prohibido.
Por defecto, Shorewall usa un sistema
de acceso que normalmente enva un
mensaje a /var/log/messages. Incluso
cuando configur syslogd para enviar
mensajes a otro archivo encontr
molesto hacer que el registro de mi
cortafuegos no se confundiera con otros
mensajes del kernel.
Para resolverlo podemos usar el
soporte ULOG del kernel. Este debe estar
disponible para nuestro kernel, siendo
habitual en la mayora de las distribu-
ciones. No obstante, el paquete ulogd no
est siempre disponible, por lo que es
posible que lo tengamos que descargar
desde [4].
Una vez ulogd esta configurado en
nuestro sistema no usaremos ms los
niveles de acceso del syslogd. En su lugar
usaremos el ULOG. I
26 Nmero 03 www.linuxmagazine.com.es
Shorewall
PORTADA
[1] Netfilter Website: http://www.netfilter.
org
[2] Shorewall Website: http://www.
shorewall.net
[3] Asignacin de Direcciones Privadas de
Internet RFC 1918: http://rfc.net/rfc1918.
html
[4] Ulog: http://www.ulog.ch/english/index.
html
[5] Squid Proxy: http://www.squid-cache.org/
INFO
01 #SOURCE DEST POLICY LOG LEVEL
02 fw net ACCEPT info
03 fw loc ACCEPT info
04 loc net REJECT info
05 loc fw ACCEPT info
06 net all DROP info
07 all all REJECT info
08 # LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Listado 3: Archivo policy de ejmplo
27 www.linuxmagazine.com.es Nmero 03
DESARROLLO SDL
informacin sobre el controlador, sea
del ratn, el teclado o una palanca de
juegos, para permitirnos la suficiente
flexibilidad para crear un buen sistema
de control.
La entrada del teclado es la forma de
entrada ms empleada en este juego, ya
que la mayora de los PCs tiene tenden-
cia a tenerlo! Pero como cada pulsacin
del teclado tiene 2 partes, un evento de
tecla pulsada y un evento de tecla libe-
rada, es necesario escuchar ambos.
Manejar mltiples teclas es muy fcil y
la velocidad de auto repeticin del
teclado no causa problemas adicionales,
ya que solo importa si la tecla ha sido
pulsada o no. Si aparece auto repeticin,
una caracterstica importante es que se
puede almacenar siempre el tiempo en el
E
l mes pasado vimos cmo SDL pro-
porciona toda la entrada a nuestro
juego a travs de un bucle de even-
tos con SDL_PollEvent. Esta funcin
cumplimenta nuestra variable
SDL_Event con informacin til sobre el
evento siguiente. Ahora necesitamos
interpretar estos datos.
Mensaje en una botella
Lo primero que hay que advertir es que
SDL_Event no est implementado como
estructura, sino como una unin, porque
cada elemento es mutuamente exclusivo,
no tiene sentido obtener informacin
sobre el puntero del ratn para un evento
que reporta la pulsacin de una tecla.
Por consiguiente, la lectura de parte de
una estructura que no corresponda con
el tipo de evento producir invariable-
mente datos inutilizables y no el
contenido del ultimo mensaje del ratn,
por ejemplo.
Solamente necesitamos manejar los
eventos en los que tenemos inters; todo
lo dems ser ignorado, SDL no inten-
tar ni supondr qu hacer con el
evento. En nuestro juego la pantalla
siempre se actualiza 60 veces por
segundo, as que no necesitamos mane-
jar el mensaje de SDL_VIDEOEXPOSE,
por ejemplo.
Cada estructura del evento contiene
una mirada de informacin que
pertenece al evento. Por ejemplo,
SDL_MouseButtonEvent indica qu
botn de ratn fue pulsado, la posicin x
e y del puntero del ratn y qu disposi-
tivo del ratn era (para sistemas con dos,
o ms, ratones). Los nombres asociados
a las variables dentro de cada estructura
se pueden encontrar en las pginas de
Diseo de juegos bajo Linux
Todo bajo Control
manual, o en SDL_events.h, que general-
mente habita en /usr/local/include/SDL.
Desde aqu podemos crear mane-
jadores de evento para cada mensaje en
el que estemos interesados. Esto se hace
creando funciones separadas que mane-
jen una clase particular de evento (como
la entrada).
Whisky en la Jarra
El control es probablemente la parte
ms importante de un juego de orde-
nador. Es la interfaz entre el jugador y
el juego. Todos los diseadores de jue-
gos saben esto y pasarn muchas
semanas (incluso meses) retocando el
sistema de control hasta que est per-
fecto. SDL no hace este proceso ms
fcil, sino que proporciona la suficiente
Este mes todo est bajo control. Y Steven Goodwin con-
trola un montn. Veremos cmo el jugador controla el
juego y cmo el juego controla los personajes.
POR STEVEN GOODWIN
28 Nmero 03 www.linuxmagazine.com.es
SDL DESARROLLO
cual la tecla fue presionada utilizando la
funcin SDL_GetTicks.
Con la asignacin de un puntero
SDL_Event (pEevnt), se encuentra la
tecla correcta con la linea:
SDLKey key = pEvent->keyU
.keysym.sym;
Esto puede parecer un poco agotador
para una simple pulsacin de tecla, pero
los otros miembros de estas estructuras
tambin son redundantes (Por ejemplo
pEvent ->key.state incluye la misma
informacin como tipo de evento; pul-
sado o soltado) o intrascendente (el
cdigo de exploracin especfico del
teclado). Prefiero pensar que esto es
minucioso y no prolijo.
El valor sym equivale a una de las
muchas definiciones que indican una
tecla especfica: Por ejemplo SDLK_LEFT
para el cursor izquierdo y SDLK_RIGHT
para el cursor derecho. Las teclas
alfanumricas mapean muy bien el
ASCII, as que comprobar la tecla 0 es
tan simple como debe ser:
if (key == '0') /* ...se podiaU
haber usado SDLK_0 aqu... */
No obstante, recomiendo usar las defini-
ciones de SDL_keysyms.h ya que las
letras activan siempre eventos con sus
homlogas minsculas del ASCII (el
valor de tecla sera igual a a no A) sin
tener en cuenta el bloqueo de mayscu-
las o la tecla maysculas.
if (key == SDLK_a) /* ...Vaya!U
Efectivamente son minsculas...
*/
Usaremos este conocimiento recin
encontrado para almacenar pulsaciones
de tecla de una manera parecida a los
juegos, mediante la creacin de una
matriz especial para indicar que teclas
estn controlando el
personaje. Esto es
diferente de que tecla
ha sido pulsada
porque, cuando dos
teclas son pulsadas,
queremos la pulsada
ms recientemente
para controlar la
direccin. Nuestro
cdigo ser algo as
como el Listado 1.
Escribir el sistema
de control de esta
manera hace que sea ms fcil cambiar
la asignacin de teclas o aadir un con-
trol de palanca de juegos. Advirtase, sin
embargo, que el mensaje de tecla libera-
da se perder si cambia del juego al
depurador. SDL no funciona y no est
habilitado para escuchar mensajes de
tecla liberada (los cuales, ahora van al
depurador). Por tanto cuando retorne al
juego tomar un evento adicional de
tecla pulsada y tecla soltada para
restablecer el sistema Esto es ms noto-
rio si el personaje contina movindose
a pesar de que no se pulsan teclas!
Sin embargo, comprobar todas las
teclas de este modo, puede ser leve-
mente incomodo. La abstraccin de las
teclas de control del juego es una buena
cosa, pero tener que escribir el cdigo
para aceptar el nombre de los jugadores
para la tabla de puntuaciones mximas
cuando el cursor izquierdo ha sido rema-
peado, digamos, a Z. en este caso,
solamente queremos preguntarle a SDL
que tecla concreta se ha pulsado.
Podemos hacer esto con la funcin
Uint8 *keystate = SDL_U
GetKeyState(NULL);
El puntero devuelto es una matriz (que
no est permitido modificar) que repre-
senta cada tecla en el sistema y est
referenciado con las macros SDLK_* que
Figura 1: Nuestro juego hasta ahora.
SDL ha hecho que capturar la pantalla sea un
asunto muy simple que apenas requiere una
funcin, SDL_SaveBMP. Esta es el espejo
exacto de la funcin SDL_LoadBMP que
hemos usado en la primera parte y toma el
puntero de la superficie (que en nuestro
caso es la superficie de pantalla) y un nom-
bre de fichero.
01 if (ev.type == SDL_KEYDOWN &&
02 ev.key.keysym.sym==SDLK_F12)
03 {
04 static int curr_grab = 0;
05 char GrabName[32];
06 sprintf(GrabName,
07 "DugPic%d.bmp", curr_grab);
08 ++curr_grab;
09 SDL_SaveBMP(TheGame.pScreen,
10 GrabName);
11 }
Cuadro 1: Di Patata
Este mes hemos hecho una adicin a la fun-
cin de actualizacin. Es un parmetro para
controlar el tiempo. Generalmente, cada lla-
mada a los comportamientos que la funcin
de Update() realizara un cuadro valido de la
actividad. Sin embargo, en casos extremos,
el juego podra haber tomado dos cuadros
para procesar la ultima imagen. Esto
requerira que la funcin de Update() se lla-
mara dos veces dentro de un solo cuadro
para compensar. Sin embargo, llamar dos
veces a Update() no permite que el compor-
tamiento se optimice con eficacia. As que en
vez de eso lo llamamos una vez y le pedimos
que actualice N cuadros. Los juegos con una
granularidad ms fina pasaran un nmero
de coma flotante (indicando los segundos
transcurridos) a sus funciones de la actua-
lizacin.
Cuadro 2: Acerca del
tiempo
Funcin Notas
Start game Llamada una vez al comienzo del nivel
Reset game Llamado siempre que el nivel consiga reiniciarse, despus de que el jugador muera por ejemplo
Update Mover o animar al objeto
Draw Dibujar este objeto en la pantalla
Destroy Liberar cualquier memoria ocupada al inicio del juego
Tabla 1: Retrollamadas
29 www.linuxmagazine.com.es Nmero 03
DESARROLLO SDL
Al contrario que el control de teclado,
SDL no inicializa la palanca de juegos
automticamente cuando se llama a
SDL_Init. Hay tres pasos adicionales: Ini-
cializar el subsistema de la palanca de
juegos (que no es distinto del subsistema
de vdeo o el temporizador), poner en
marcha los eventos de la palanca de jue-
gos (si no el bucle de eventos no
informar sobre los eventos de la
palanca de juegos) y abrir un puerto de
palanca de juegos para la lectura. Vase
el Listado 3.
Si se tienen que manejar varias palan-
cas de juegos, entonces la funcin
SDL_NumJoysticks informar del
nmero de palancas de juegos conec-
tadas al sistema. El parmetro para la
funcin SDL_JoystickOpen, como se
puede esperar, indica cual de las palan-
cas de juegos hay que abrir.
Una vez que se tiene un puntero
SDL_Joystick se pueden consultar las
capacidades y los parmetros de la
palanca. Esto es importante porque cada
palanca de juegos es distinta: Algunos
tienen controles tipo HAT (conmutador
digital de 8 vas, otros tienen track balls
y otros tienen ms botones de lo que se
pueda imaginar. Las palancas de juegos
para simulacin area suelen incluir
todos los anteriores.
Determinar las capacidades de la
palanca de juegos le permitir saber,
por ejemplo, si el jugador tendr que
reasignar los botones de la palanca de
juegos al teclado. Nosotros solo nece-
sitamos control a izquierda, derecha y
botn de salto, as que cualquier
palanca de juegos disponible debe ser
suficientemente buena para Explorer
Dug.
Refiriendonos de nuevo a la tabla
comentada anteriormente hay tres even-
tos principales en los que estamos
interesados: SDL_JOYAXISMOTION,
SDL_JOYBUTTONDOWN y SDL_JOY-
BUTTONUP. Puesto que solamente hay
una palanca de mando en nuestro juego,
podemos ignorar cualquier elemento de
la estructura del evento y suponer que
cualquier evento de la palanca de juego
debe haber venido de la palanca cero
(porque es la nica que hemos abierto).
Entonces podemos usar
pEvent->jaxis.value (que oscila entre
-32768 y 32767, indicado totalmente a la
izquierda, totalmente a la derecha) para
controlar el juego. Vase el Listado 4.
La banda muerta es un tema intere-
sante. Todas las palancas de juego se
mueven, que yo sepa. Pero las palancas
de juego tambin se mueven cuando
nadie las est tocando. Tiemblan ligera-
mente y por tanto generan eventos de
palanca de juegos espreos en cada
cuadro. Puesto que esto es una carac-
terstica del hardware no podemos evitar
que suceda, pero podemos limitar los
efecto que esto tiene en nuestro juego.
Para hacerlo, crearemos una banda
muerta alrededor de la parte central de la
palanca. Cualquier movimiento que
ocurra en esta rea ser ignorado y
tratado como si la palanca de juegos
enviara 0,0. Fuera de la banda muerta,
se tratar a la palanca normalmente.
Aqu he usado una banda muerta de
8000, que es un nmero razonable para
este tipo de juegos, aunque en un juego
veremos ms tarde. Cualquier valor dis-
tinto de cero en esta matriz significa que
la tecla est actualmente pulsada.
if ( keystate[SDLK_F12] ) U
printf("The F12 key is down.");
Cualquier tecla que se ha mantenido pul-
sada durante dos cuadros consecutivos
ser considerada VERDADERO para
ambos cuadros, porque esta funcin
informa del estado de la tecla y no even-
tos. Normalmente esto no es un
problema, pero si se est usando esta
caracterstica para realizar una captura
de pantalla, obtendr una imagen por
cada cuadro mientras la tecla este pul-
sada. Vase el Cuadro 1 Di Patata,
para ms detalles sobre como realizar
una captura de pantalla.
Tambin se puede determinar que
modificador de teclas estn pulsados
(como maysculas o alt); pero para
esto necesita una funcin diferente.
Vase el Listado 2.
Mi Chica Piruleta
La entrada de la palanca de juegos es muy
fcil de programar bajo SDL, que incluso
permite mltiples palancas de juego sin
ningn esfuerzo extra. En nuestro ejem-
plo, se supondr que hay una palanca de
juegos, pero en un juego ms completo es
deseable dejar al jugador que seleccione
que palanca de juegos utilizar y que per-
sonaje controlar.
01 SDL_Joystick *pJoyStick;
02 SDL_InitSubSystem(SDL_INIT_JOYSTICK);
03 SDL_JoystickEventState(SDL_ENABLE);
04 pJoyStick = SDL_JoystickOpen(0);
Listado 3: Inicializacin de la palanca de juegos
01 if (SDL_GetModState() & KMOD_SHIFT) printf("Una de las teclas de
maysculas se ha presionado.");
02 if (SDL_GetModState() & KMOD_LSHIFT) printf("Se ha presionado la
tecla de maysculas izquierda.");
Listado 2: Modificadores de teclas
01 void exUpdateInterface(const
SDL_Event *pEvent)
02 {
03 if (pEvent->type ==
SDL_KEYDOWN)
04 {
05 SDLKey key = pEvent-
>key.keysym.sym;
06 if (key == SDLK_LEFT)
07 {
08 iMovement[EXI_MOVE_LEFT] =
TRUE;
09 iMovement[EXI_MOVE_RIGHT] =
FALSE;
10 }
11 /* ... etctera ... */
Listado 1: Pulsaciones de
teclas
30 Nmero 03 www.linuxmagazine.com.es
SDL DESARROLLO
profesional, este valor debe ser confi-
gurable.
Jumpin Jack Flash
Como los dispositivos del teclado y el
ratn, las palancas de juegos tambin se
pueden leer sin el bucle de eventos. Para
hacerlo hace falta llamar a la funcin
SDL_JoystickUpdate que lee el hardware,
antes de usar una de las funciones del
listado 5 para consultar los datos.
Ahora hemos recuperado la entrada,
deseamos controlar algo en el juego y
por eso, necesitamos algn objeto del
juego
Gente corriente
cada objeto del juego, ya sea el jugador,
un enemigo, o una puerta de salida,
tiene un nmero de elementos comunes.
Todos tienen una posicin de comienzo,
todos tienen grficos y todos hacen
cosas. Sin embargo, cada objeto en el
juego tendr una posicin de comienzo
distinta, grficos distintos, y todos hacen
cosas distintas. Para implementar un
buen armazn debemos poder identi-
ficar esos elementos y aislarlos con efica-
cia del motor comn del juego.
Datos comunes para todos los objetos:
Posicin de comienzo
Una superficie conteniendo gr-
ficos
Cdigo nico para cada tipo de objeto:
Como inicializar el objeto
Como actualizarlo, p. e. direc-
cin y velocidad de la
trayectoria.
Como dibujar el objeto
Como destruir el objeto
Necesitamos estas distinciones porque,
por ejemplo, aunque podemos describir
cada objeto en trminos de una superfi-
cie, cada objeto en el juego no utilizar
esta superficie de la misma manera.
Algunos objetos consistirn en un
ladrillo (los enemigos), algunos usarn
varios (la puerta de salida) y otros se
desvanecern en algn momento (el
jugador).
Realmente esta lista no est completa
y no dudaremos en introducir nuevas
caractersticas durante el desarrollo del
juego, pero es un buen punto de partida.
El mtodo que he elegido para imple-
mentar estas caractersticas utiliza
retro-llamadas (callback) individuales a
las funciones, donde cada una tiene un
propsito especfico.
Sin embargo, la implementacin
exacta de cmo trabaja esa funcin se
controla por el cdigo que es especfico
para cada tipo de objeto. Cada uno de
esos tipos se denomina comportamiento.
Y cada funcin de retro-llamada mane-
jar como se comporta ese objeto en una
situacin en particular. Nuestro juego
inicial de retro-llamadas se muestran en
la Tabla 1. Esta lista imita nuestro bucle
de juego general realmente bien: Comen-
zamos el juego, procesamos un bucle de
actualizacin del dibujo y entonces sali-
mos. No tenemos ninguna distincin
entre el nivel y el juego, puesto que cada
nivel es un mini-juego en s mismo. La
lista tambin demuestra que tenemos
una jerarqua de dos niveles de datos:
configuracin y estado. Los datos de la
configuracin se crean en el comienzo
del juego e incluyen cosas como la
superficie SDL o su posicin de
comienzo. Por el contrario, los datos del
estado incluyen las cosas que cambian
durante el juego, como la posicin o la
direccin actual.
Esto perfila la informacin que necesi-
tamos para nuestra estructura
EX_OBJECT. Cada objeto del juego uti-
lizar esta estructura genrica,
almacenada como parte de una lista
enlazada, con las funciones de retro-lla-
mada pdicamente ocultas dentro de
otra estructura (EX_OBJ_VTABLE),
como se ve en el Listado 6.
Aqu hemos creado la configuracin
ms usada y las variables de estado den-
tro de la estructura EX_OBJECT y
marcado las otras con punteros nulos.
Ser responsabilidad de cada compor-
tamiento asignar la memoria para estos
01 if (pEvent->type ==
SDL_JOYAXISMOTION)
02 {
03 if (pEvent->jaxis.axis == 0)
/* X-axis; assume
04 stick 0 */
05 {
06 int DeadBand = 8000;
07
TheGame.iface.iMove[EXI_MOVE_L
EFT] = FALSE;
08
TheGame.iface.iMove[EXI_MOVE_R
IGHT] = FALSE;
09 if (pEvent->jaxis.value <
-DeadBand)
10
TheGame.iface.iMove[EXI_MOVE_L
EFT] = TRUE;
11 else if (pEvent->jaxis.value >
DeadBand)
12
TheGame.iface.iMove[EXI_MOVE_R
IGHT] = TRUE;
13 }
14 }
Listado 4: Movimiento de
la palanca de juegos
01 SDL_JoystickGetAxis(SDL_Joystick *joystick, int axis);
02 SDL_JoystickGetHat(SDL_Joystick *joystick, int hat);
03 SDL_JoystickGetBall(SDL_Joystick *joystick, int ball, int
04 *dx, int *dy);
05 SDL_JoystickGetButton(SDL_Joystick *joystick, int
06 button);
Listado 5: Consultado la palanca de juegos
01 typedef struct sOBJECT {
02 /* Setup - los datos no
cambian */
03 int init_x, init_y; /*
Posicin de inicio */
04 SDL_Surface *pGfx; /* apunta a
una superficie existente */
05 void *pBhvSetupData;
06 /* Estado - consigue el
reinicio */
07 int x, y; /* Posicin actual
*/
08 void *pBhvStateData;
09 /* Admin */
10 EX_OBJ_VTABLE VTable;
11 /* Lista de componentes
enlazados */
12 struct sOBJECT *pNext;
13 } EX_OBJECT;
Listado 6: EX_OBJECT
31 www.linuxmagazine.com.es Nmero 03
DESARROLLO SDL
(donde no debera cambia nada). Por lo
tanto tenemos que confiar en el sentido
comn y en los programadores compe-
tentes. Pero hay una caracterstica del
lenguaje que podemos utilizar para cen-
trar el desarrollo.
La Tabla La palabra VTable es la abre-
viatura de virtual table y se ha cogido
prestado de C++. Es una manera de
llamar a funciones especficas en obje-
tos especficos, sin tener que
especificarlos en tiempo de compi-
lacin. Esto permite un cierto nivel de
abstraccin. Cada objeto hace esto
estableciendo los punteros a las fun-
ciones privadas como en el listado 9.
Declaramos cada una de las funciones
(dheStart, dheUpdate y dheDraw) como
estticas para hacer sus nombres invisi-
bles a cualquiera fuera del fichero
actual. Esto asegurara que solo
podemos llamar a estas funciones refe-
renciando a VTable, de este modo:
pObject->VTable.Start(pObject);
Para prevenir referencias a NULL o a
otros punteros de funcin invlidos,
prepararemos un conjunto de retro-lla-
madas predeterminadas bajo demanda.
Cada objeto podr entonces reemplazar
(o sobrecargar) esos punteros de fun-
ciones con los suyos propios.
Este mtodo puede parecer redun-
dante, ya que requiere 2 instancias de
pObject, pero normalmente es ms efi-
ciente que aadir conmutadores de
estado en torno a cada llamada a Start,
Update o Draw. Esto tambin escala bien
si aadimos nuevas funcionalidades a los
objetos a travs de su VTable. Siempre
podremos usar una pequea funcin de
envoltorio para prevenir el error casual
cuando una VTable de un objeto se esta
usando, pero se pasa el puntero de otra.
void exDrawObject(EX_OBJECT U
*pObj)
{
pObj->VTable.U
Draw(pObj);
}
Tu me llevas
Pero porque cada EEH utiliza el mismo
cdigo, no significa que utiliza los mis-
mos datos! Tenemos ya una estructura
para la informacin de la configuracin,
as que si tenemos una manera de cam-
biar estos datos iniciales entonces
podemos introducir mucha variedad en
nuestro juego, basndolo en los datos.
Bien, eso se hace antes los que se dice,
ya que podemos ampliar nuestra
susodicha funcin Bhv_CreateDumbHori-
zontal para incluir un juego de
parmetros, tales como velocidad y
direccin.
A fin de hacer estos parmetro gene-
rales para todos los comportamientos,
los crearemos como cadenas de carac-
teres y dejaremos que el
comportamiento los analice en busca de
algo significativo. De esta manera
podramos tambin leerlos directamente
de un archivo de texto para hacer los
niveles de juego personalizables de una
forma muy simple.
Todas los objetos basados en compor-
tamiento trabajan usando exactamente
los mismos mtodos; aunque algunos
requerirn ms cdigo que otros. El
jugador, por ejemplo, requerir manejar
colisiones con el mundo, manejar las
recolecciones y el contacto con los ene-
migos. Programaremos un manejador el
prximo mes. I
punteros y crear estructuras que el pro-
pio comportamiento pueda comprender.
Tomando el ejemplo de un enemigo que
camina a ciegas de izquierda a derecha
(vase el listado 7). Este estpido ene-
migo horizontal (EEH) inicializar su
estado en cada reset de los datos de con-
figuracin que hemos definido como tal
como se ve en el listado 8.
Como lenguaje, C no facilita ningn
mecanismo para parar su cambio de
informacin de configuracin durante el
ciclo de actualizacin (donde solamente
debera ser cambiado el estado), ni le
previene de datos del estado que cam-
bian durante el ciclo de la creacin
01 typedef struct sDHE_SETUP {
02 int x1,y1,x2,y2; /* grados
para el enemigo */
03 int iInitialDir; /* -1 para
izquierda, +1 para derecha */
04 int iSpeed;
05 } EX_DHE_SETUP;
Listado 8: Enemigo
horizontal mudo
01 BOOL Bhv_CreateDumbHorizontal(EX_OBJECT *pObj)
02 {
03 /* ... otras initializaciones de cosas ... */
04 pObject->VTable.Start = dheStart;
05 pObject->VTable.Update = dheUpdate;
06 pObject->VTable.Draw = dheDraw;
07 /* ... */
08 }
09 static void dheStart(EX_OBJECT *pObj) { /* ... hace cosas ... */ }
10 static void dheUpdate(EX_OBJECT *pObj) { /* ... hace cosas ... */ }
11 static void dheDraw(EX_OBJECT *pObj) { /* ... hace cosas ... */ }
Listado 9: Ajustando punteros
01 typedef struct sDHE_STATE {
02 int iDirection; /* La direccin en que camina, -1 para izquierda, +1
para derecha */
03 int iAnimFrame; /* Marco actual de la animacin, mapeado directamente
a una regin */
04 int iAnimDir; /* La animacin ping-pong entre cuadros
0->1->2->3->2->1->0. ser -1 or +1, dependiendo de la direccin */
05 } EX_DHE_STATE;
Listado 7: Enemigo caminando
E
l desarrollo web a menudo est ca-
racterizado por los hackeos rpidos
y sucios con una pintoresca mezcla
de cdigo y HTML. Sin embargo, hay en
camino un esfuerzo para llevar una
estructura ms formal a la programacin
web. Por ejemplo, Rails [1] usa Ruby
para implementar una clsica
infraestructura Model View Controller
(MVC), algo que en el mundo de
smalltalk se ha usado algunas veces. La
infraestructura MVC abstrae el proce-
samiento de datos del modelo de manejo
de cdigo (controlador) basada en GUI y
de la representacin del cdigo (la vista),
vase la Figura 1.
Esta tcnica de abstraer los datos de
los mtodos del procesamiento de datos
puede aplicarse a cualquier cosa, desde
una tabla de una base de datos a un
modelo de flujo de trabajo para una
empresa de gran tamao. El modelo es
parcial o completamente visualizado en
la vista. Los controladores reaccionan a
la entrada del usuario (entre otras cosas)
para comenzar los cambios de estado
dentro del modelo.
32 Nmero 03 www.linuxmagazine.com.es
Ruby DESARROLLO
Aplicaciones Web con Ruby y Rails
Bien Encaminados.
La mayora de las bibliotecas web hacen que el 90 por ciento del trabajo sea fcil y el resto imposible. Rails, un
infraestructura de cdigo abierto programado en Ruby, es lo bastante flexible como para tener xito con ese 10 por
ciento restante.
POR ARMIN RHRL Y STEFAN SCHMIEDL
33 www.linuxmagazine.com.es Nmero 03
DESARROLLO Ruby
Rails sea realmente til para el desarrollo
de aplicaciones de bases de datos
basadas en web, como el software de
gestin de proyectos Basecamp [2], que
ha sido programado usando Rails (vase
el cuadro entrevista con el desarrollador
de Rails). Cuando se trabaja con Rails,
se nota que el diseo del sistema viene
de un entorno prctico. Rails evita
muchos de los fallos presentes en la
mayora de las estructuras tericas de
trabajo.
Rails est basado en el concepto DRY
(Dont Repeat Yourself: No se repita; en
otras palabras, una vez y solamente
una vez.) Repetir cdigo dentro de un
programa suena a programa mal dise-
ado. Rails tiende a utilizar la reflexin y
mdulos en tiempo de ejecucin para
sustituir los ficheros de configuracin;
esto elimina la necesidad del tpico
maratn de configuracin al estilo XML.
Tambin tiene el efecto de aplicar los
cambios inmediatamente sin tener que
pasar por un proceso de generacin que
consuma mucho tiempo.
Rails tambin ha integrado la fun-
cionalidad de comprobacin general y
unitarias. RubyDoc proporciona la docu-
mentacin. El gran avance es que los tres
componentes de la estructuras de trabajo
MVC fueron escritas en Ruby.
Si los desarrolladores se adhieren a las
convenciones de Rails (mapeado entre
base de datos y estructura de objetos), la
estructura ayudar a lanzar un proyecto
rpidamente. Las funciones para aadir,
modificar y borrar objetos estn
disponibles con unas pocas pulsaciones
de teclado.
Popularizacin de la Base de
Datos de Objetos
Nuestro ejemplo de aplicacin est
basada en el tutorial de la pgina web de
Ruby. Crearemos una simple aplicacin
Esta estructura hace a la lgica de la
aplicacin independiente de la repre-
sentacin externa y de la interfaz del
usuario. Algunos productos de desarrollo
afirman ofrecer MVC, aunque esta afir-
macin resulta ser un poco pretenciosa
cuando se analiza de cerca.
Software en Aplicaciones
Prcticas
Para mantener el modelo, Rails incluye
el Registro Activo (Active Record) que
proporciona el mapeado relacional del
objeto. El modelo Paquete de Accin
(Action Pack) subdivide la peticin web
en controladores y componentes espec-
ficos de la vista. Este diseo hace que
Para los usuarios de Mac OS X (versin 10.3 o posterior), dos vdeos [5]
muestran el proceso de instalacin. Desde luego que tambin hay cosas
interesantes para los usuarios de Linux. Rubygems [6] (versin 0.7 o pos-
terior) una herramienta de gestin de paquetes para Ruby, facilita una
aproximacin sencilla a la instalacin:
gem install rails
Cada vez que una nueva versin de Action Pack o Active Record se pu-
blica, puede actualizarse simplemente tecleando gem update.
Asegrese de que la conexin de la base de datos al back-end est
disponible; puede usar tanto MySQL como PostgreSQL. Los usuarios de
Debian necesitaran cumplir algunos requisitos para la instalacin, ya
que los componentes necesarios estn dispersos a lo largo de un gran
nmero de paquetes (vase tambin [7]):
irb1.8,libbigdecimal-ruby1.8, libdbm-ruby1.8, libdl-ruby1.8, libdrb-
ruby1.8, liberb-ruby1.8, libgdbm-ruby1.8, libiconv-ruby1.8,
libopensslruby1.8, libpty-ruby1.8, libracc-runtime-ruby1.8, libreadline-
ruby1.8, librexml-ruby1.8, libruby1.8,libruby1.8-dbg, libsdbm-ruby1.8,
libsoap-ruby1.8, libstrscanruby1.8, libsyslog-ruby1.8, libtest-unit-
ruby1.8, libwebrick-ruby1.8, libxmlrpc-ruby1.8, libyaml-ruby1.8,
libzlibruby1.8, rdoc1.,ri1.8 ruby1.8,ruby1.8-dev, ruby1.8-elisp, y por
ultimo, ruby1.8-examples.
Configuracin de Apache
Si aun no lo ha hecho, necesitar habilitar el modulo rewrite de
Apache:
# a2enmod
Which module would you like to enable?
Your choices are: ... rewrite ...
Module name? rewrite
Module rewrite installed;
run /etc/init.d/apache2 force-reload to enable.
Para ejecutar aplicaciones en /var/www/myapp necesitar aadir una
entrada al host virtual en su fichero de configuracin de Apache. La
entrada puede ser algo como esto:
01 01 <VirtualHost *:80>
02 ServerName rails
03 DocumentRoot /var/www/railsdemo/public
04 ErrorLog /var/www/railsdemo/log/apache.log
05 <Directory/var/www/railsdemo/public/>
06 Options ExecCGI FollowSymLinks
07 AllowOverride all
08 Order allow,deny
09 Allow from all
10 </Directory>
11 </VirtualHost>
Compruebe el archivo htaccess para la aplicacin web para ms ajustes;
en nuestro ejemplo, ste est en /var/www/railsdemo/public/.htaccess.
Ahora trabajando como root, recargue su configuracin de Apache
como sigue, para aplicar los cambios:
/etc/init.d/apache2 force-reload
Cuadro 1: Instalacin
Aplicacin Java Ruby
GUI Aplicacin Swing TK,QT,Fox
GUI Web JSP,XSLT,XMLC Iowa,Rails
Domino de objetos permanentes y gestin de transacciones Entity EJBs,JDO, generados manual-
mente Kansas
Mecanismo RPC (Llamadas a Procedimientos remotos) Para la comunicacin entre front-end y back-end DAOs
& Session EJBs,Servlets Drb
Infraestructura para comunicacin asncrona EJBs manejado por mensaje DRb/Rinda/Tupleserver
Tabla 1: Java y Ruby
web en la carpeta /var/www/railsdemo.
Rails comenzar por crear una estructura
conteniendo los archivos necesarios:
rails /var/www/railsdemo
Esta orden sobreescribir la aplicacin
Rails que exista en el directorio especi-
ficado, as que procedamos con
cuidado. Necesitamos una base de
datos MySQL para la tabla de ejemplo;
vase el listado 1.
El archivo Yaml config/database.yml
define el acceso a la base de datos; el
archivo serializa los datos en un lenguaje
independiente del formato:
production:
adapter: mysql
database: rails_production
host: localhost
username: root
password:
El acceso a la base de datos de prueba
ser parecida a sta. En la vida real, no
querr ejecutar esto con privilegios de
root que estn sin contrasea.
El guin new_controller crea un nuevo
controlador; su nombre debe aparecer
con letras maysculas. La vista sigue el
nombre del controlador:
./script/new_controller Friends list
display new edit
Evite usar process como nombre de
vista, ya que Rails usa este nombre inter-
namente. El proceso para crear un nuevo
modelo es similar:
./script/new_model U
Person
Normalmente Rails descubre automti-
camente la tabla subyacente de la base
de datos. Si fuera necesario el guin
aceptara un nombre de tabla, despus
del nombre de modelo:
@LI./script/new_model Person
people
Para comprobar la configuracin de
una aplicacin Rails, los desarrolladores
pueden ejecutar rake (el make de Ruby)
en el directorio de la aplicacin. Podrn
ocurrir toda una serie de cuestiones en
funcin de la configuracin de su sistema:
Si mysql.sock no est en la
ubicacin habitual, podr edi-
tar cualquier mysql.rb (en un
directorio tal como
usr/lib/ruby/gems/1.8/gems/act
ive-record-0.9.5/lib/active_recor
d/vendor ) o configurar la va-
riable de entorno
MYSQL_UNIX_PORT.
Los permisos para la base de
datos no estn bien configura-
dos.
El guin espera que
/usr/local/bin/ruby sea la ruta a
Ruby. Si Ruby est ubicado en
otro sitio, puede crear un
enlace simblico o cambiar el
nombre de ruta en el archivo
del guin.
Para completar la aplicacin web, ahora
necesitaremos proporcionar algo de
contenido para app/views/friends/dis-
play.rhtml:
01 <html>
02 <body>
03 <h1>Amigos</h1>
04 <p>Muestra un entrada de
alguien</p>
05 <p>
06 <%= @person.name %><br />
07 <%= @person.street1 %><br />
08 <%= @person.street2 %><br />
09 <%= @person.city %><br />
10 <%= @person.state %><br />
11 <%= @person.zip %><br />
12 </p>
13 </body>
14 </html>
34 Nmero 03 www.linuxmagazine.com.es
Ruby DESARROLLO
Figura 2: El portal de planificacin para empresas Basecamp (http://www.basecamphq.com) utiliza Ruby
Rails como aplicacin web de fondo.
01 CREATE DATABASE
rails_production;
02 USE rails_production;
03
04 CREATE TABLE people (
05 id int(10) unsigned NOT NULL
auto_increment,
06 name varchar(50) NOT NULL
default '',
07 street1 varchar(70) NOT NULL
default '',
08 street2 varchar(70) NOT NULL
default '',
09 city varchar(70) NOT NULL
default '',
10 state char(2) NOT NULL default
'',
11 zip varchar(10) NOT NULL
default '',
12 PRIMARY KEY (id),
13 KEY name (name)
14 ) TYPE=MyISAM
AUTO_INCREMENT=2;
15
16 INSERT INTO people VALUES (1,
'Superman',
17 '123 Somewhere', '',
'Smallville', 'KS', '123456')
Listado 1: SQL para Person
35 www.linuxmagazine.com.es Nmero 03
DESARROLLO Ruby
contiene los mtodos de acceso. La
orden require aade el modelo.
require 'person'
Ahora la aplicacin web puede usar la
clase Active Record para acceder a la
base de datos. Si ahora insertamos el
siguiente cdigo para el mtodo display,
coger la primera entrada de la tabla y lo
escribir en la variable de la instancia
@person para la vista de clase.
def display
@person = Person.find(1)
end
La definicin del modelo de clase en
app/models/person.rb tambin es digno
de examinar.
require 'active_record'
class Person < U
ActiveRecord::Base
end
La clase de base ActiveRecord::Base hace
la mayora del trabajo, ya que define
mtodos simples de acceso a la base de
Esto es parecido a Erb, la variante de
HTML incrustado de Ruby. La pgina
HTML muestra los datos que el
modelo proporciona. El control tiene
que definir y crear el objeto referen-
c i a do @p e r s o n a qu . Es t o
o c ur r e e n el archivo app/con-
trollers/friends_controller.rb, que
<LM>:Por qu desarroll Rails?
<DH>:Yo haba estado programando en
PHP durante unos aos mientras vigilaba
de cerca todos los proyectos de desarrollo
web basados en Java. Yo amaba PHP por su
inmediatez y estaba muy inspirado por los
infraestructura en Java. As que no quera
rendirme rpidamente y y abandonar PHP,
pero ni uno ni otro eran lo que yo buscaba
para lidiar con las dificultades de grandes
sistemas orientados a objeto.
En el momento lgido de mi enojo con PHP
y no mucho despus de mi desilusionante
encuentro con Java (trabaj en con J2EE
durante 6 7 meses), le sobre como Martin
Fowler y los Programadores Pragmticos
trabajando sobre un lenguaje que encajaba
a la perfeccin con mis exigencias. Por
supuesto que ese lenguaje era Ruby, y una
vez que supere los primeros escollos, fue
amor a primera vista.
Poner todas mis inspiraciones de Java en
una infraestructura impulsada por Ruby
result ser un camino muy natural para mi.
Tena que hacerlo de todos modos, con el
propsito de construir Basecamp tan
rpido como lo hice (en dos meses).
<LM>:Cul es la mayor fortaleza de Rails?
<DH>:Sobre todo la inmediatez. Puedes
crear aplicaciones increblemente rpido
sin que por ello acabes con cdigo
enmaraado. Se construye una aplicacin
rpidam, pero te sirve para toda la vida.
Totalmente enfocado a patrones probados,
tales como pruebas y desarrollo dirigidos a
dominios, junto con una divisin MVC que
de verdad ayuda en este caso.
<LM>:Cul es la mayor debilidad de Rails?
<DH>:Puede ser difcil de convencer a los
potenciales clientes (o sus gerentes) que
ellos podran ser productivos en un
lenguaje relativamente desconocido
cuando todos ellos han ledo sobre Java y
C#.
<LM>:Cul es el futuro de Rails?
<DH>:Espero publicar la versin 1.0 en el
ao 2004. Pienso que el 2005 ser El Ao de
Ruby y espero que la publicacin de Rails
ayude a conseguirlo. Pero por otra parte,
tengo unas metas bastante humildes para
el ulterior desarrollo de la infraestructura.
Rails tiene en este momento alrededor de
2.500 lneas de cdigo. Me gustara que no
creciera mucho ms all de eso.
<LM>: Por favor dganos 2 prrafos sobre
Basecamp. Quiz debera mencionar tam-
bin el modelo de negocio.
<DH>:Basecamp es una aplicacin de
gestin de proyectos basado en web,
construida en torno a weblogs, hitos y lis-
tas de quehaceres (TODO en ingls). Es
una aplicacin engaosamente sencilla
que ha tenido un impacto enorme en
todas las personas que gestionan proyec-
tos. Es una aplicacin alojada en un
servidor externo y las empresas pagan
entre 19 y 59 dolares al mes por usarla.
Para el que slo desea probarla, incluso
hay un plan gratuito por el tiempo de
duracin de un solo proyecto.
<LM>:Cul es el futuro de Basecamp?
<DH>:Estamos mejorando la aplicacin
constantemente. Justamente la semana
pasada lanzamos un montn de nuevas
caractersticas para gestionar mejor las
responsabilidades de un proyecto. Adems,
pienso que acabamos de hacernos con un
porcentaje minsculo de un mercado
enorme. La gestin de proyecto est por
todas partes. Adems de las obvias aplica-
ciones en los negocios, estamos viendo que
la gente usa Basecamp para planificar
cualquier cosa, desde bricolaje casero hasta
bodas. Basecamp se ajusta muy bien a un
amplio rango de proyectos debido a su sen-
cillez. Gestionar un proyecto no es un
proyecto en s mismo.
<LM>:Hacia donde piensa que va la pro-
gramacin basada en web?
<DM>:Espero que no hacia la intensa com-
plejidad que J2EE, .NET y otros entornos
torpes que de alguna manera han conven-
cido a la gente que los necesitan. Los
lenguajes dinmicos como Ruby y las
estructuras de trabajo construidas con l,
como Rails, los van a barrer de la escena en
los prximos aos. Clientes y desarrolla-
dores comenzarn a darse cuenta de que la
mayora de los aplicaciones web no necesi-
tan la potencia de fuego de un destructor
Imperial, sino ms bien la flexibilidad de un
Caza rebelde (S, acabo de ver Star Wars en
DVD).
Cuadro 2: Una entrevista con el desarrollador de Rails, David Heinemeier Hansson
01 01 USE rails_production;
02 CREATE TABLE phones (
03 id int(10) unsigned NOT NULL
auto_increment,
04 person_id int(10) unsigned NOT
NULL default '0',
05 phone varchar(15) NOT NULL
default '',
06 PRIMARY KEY (id),
07 KEY people_id (person_id),
08 KEY phone (phone)
09 ) TYPE=MyISAM
AUTO_INCREMENT=3;
10
11 INSERT INTO phones VALUES (1,
1, '1234567890');
12 INSERT INTO phones VALUES (2,
1, '1122334455');
Listado 2: SQL para Nmeros de telfonos
datos. El nombre de la tabla es el plural
del nombre de la clase. Curiosamente, la
forma plural es gramaticalmente correcta
para los nombres irregulares, por ejem-
plo, men para man o people para person.
Vase la documentacin de la clase para
ms detalles sobre las reglas sobre los
nombres y las convenciones [8].
El resultado de este trabajo ahora es
visible bajo http://localhost/rails/friends/
display. Esta URL apunta al controlador
(friends) y a la accin (display).
Tablas Asociadas
Rails tambin tiene una solucin para la
asociacin de tablas. Usaremos dos
tablas con nmeros de telfono (vase el
listado 2).
Rails utiliza un sufijo (_id) para identi-
ficar claves externas, por ejemplo
person_id. Como se menciono anterior-
mente el nombre de la tabla es la forma
plural del nombre del modelo:
./script/new_model Phone
El archivo generado anteriormente, per-
son.rb necesita dos modificaciones:
require 'active_record'
require 'phone'
class Person < U
ActiveRecord::Base
has_many :phones
end
La llamada
has_many :phones
especifica un vinculo
1:n. En otras pala-
bras, una persona
puede tener ms de
un nmero de tel-
fono. Necesitaremos
aadir las siguientes
lneas a display.html
para cambiar el for-
mato de
visualizacin.
<% for phone in U
@person.phones %>
<%= phone.phone
%><br/>
<% end %>
Si un modelo ya
existe, en Rails es
bastante fcil usar tcnicas de estruc-
turacin para definir visualizaciones y
mtodos de manipulacin para los datos.
Los desarrolladores Web pueden ajustar
los mtodos bsicos tanto como lo nece-
siten.
Estructuracin Automtica
El siguiente ejemplo supone un directo-
rio de aplicacin Rails vaco. Primero
crearemos un controlador y un modelo
(./script/new _controller Friend y
./script_new _model Person, vase ms
arriba). Nos aseguraremos de que no
tenemos una accin llamada list. Rails
utilizar la base de datos existente. Sim-
plemente necesitamos modificar el
controlador friends:
scaffold :person
Este aadido crea nuevos mtodos con la
conducta predefinida, como se especifica
en la documentacin en [9]: list, show,
destroy, new, create, edit y update.
Esto facilita la estructuracin con Per-
son, pero an necesitamos los nmeros
de telfono. Si se establecen los indi-
cadores correctos, Rails aade una
referencia a la accin al nombre del
modelo para evitar colisiones de nom-
bres con las acciones de nombres
definidas:
scaffold :person, :suffixU
=> true
scaffold :phone, :suffixU
=> true
Esto nos da las siguientes URLs:
http://rails/friends/list_person http://
rails/friends/list_phone
Como puede ver, hemos creado una
estructura para una aplicacin Web con
un esfuerzo mnimo. La aplicacin alma-
cenar y manipular objetos en una base
de datos relacional. Ruby implementa el
modelo MVC elegantemente e incluso
genera el cdigo bsico asociado con la
estructura de MVC.
Logout
Rails facilita el desarrollo de aplicaciones
bsicas si se siguen las reglas. El sistema
proporciona una introduccin suma-
mente til a la programacin de
aplicaciones web. Si necesita ms ayuda
para empezar con Ruby, revise el Manual
de Ruby. I
36 Nmero 03 www.linuxmagazine.com.es
Ruby DESARROLLO
[1] Ruby on Rails: http://www.rubyonrails.org
[2] Basecamp: http://www.basecamphq.com
[3] Apache Struts: http://struts.apache.org
[4] Struts Action Invocation Framework
(SAIF):http://struts.sourceforge.net/saif/
[5] Videos del tutorial: http://www.
rubyonrails.org/show/HomePage
[6] Rubygems:http://rubygems.rubyforge.
org/wiki/wiki.pl
[7] Rails para Debian: http://www.
rubyonrails.org/show/RailsOnDebian
[8] Rules para nombres plurales: http://api.
rubyonrails.org/classes/ActiveRecord/Base.
html
[9] Metodos de estructuracin: http://api.
rubyonrails.org/classes/ActionController/
Scaffolding/ ClassMethods.html
[10]El weblog del autor de Rails: http://
loudthinking.com
RECURSOS
Figura 1: Esquema Model View Controller (MVC). El flujo de datos no es
idntico para todas las aplicaciones y podra diferir del flujo de datos
mostrado aqu.
Armin Rhrl y Stefan Schmiedl dirigen
una compaa llamada Agile Soft-
wareschmiede Approximity GmbH. Usan
Ruby desde hace cinco aos y todava se
divierten trabajando con Ruby y otras
soluciones de desarrollo y administracin
de proyectos hiperproductivos. Para los
autores es ms importante la productivi-
dad que estar a la ltima.
L
O
S
A
U
T
O
R
E
S
37 www.linuxmagazine.com.es Nmero 03
DESARROLLO Curses