Spiga

Vídeos de WorldSkills 2011

¡Hola!

El Ministerio de Educación ha editado unos vídeos muy chulos en los que se resume la experiencia del equipo español de WorldSkills Londres 2011. En ellos puedes ver imágenes de las ceremonias de inauguración y clausura, entrevistas con los participantes y expertos, secuencias de la competición y la entrega de medallas, etc.

¡Espero que los disfrutes!







¡Un saludo!

Oposiciones de informática: nuevos temarios, nuevas oportunidades

ACTUALIZACIÓN: Los nuevos temarios aprobados en Noviembre han sido derogados por el nuevo ministerio de educación, por lo que se vuelve a los temarios de 1996 (o 1993 en algunas especialidades).

¡¡POR FIN!!

Después de más de 15 años, por fin el Ministerio de educación ha actualizado los temarios de las oposiciones para los profesores de enseñanzas no universitarias. Quizás en algunas especialidades como Historia (hablo desde el desconocimiento, perdonadme si ofendo a alguien por mi atrevimiento) esto no tenga tanta importancia, pero en informática, 15 años son muchos años, y las cosas cambian mucho.

Los nuevos temarios, desde mi punto de vista, sí cubren todos los temas que hoy en día necesita conocer un profesor que vaya a trabajar en la Formación Profesional. Esto, sinceramente, hasta ahora no ocurría en muchas ocasiones... Yo mismo, tras aprobar las oposiciones en 2004, cuando llegué en Septiembre al instituto y mis nuevos compañeros me explicaron lo que tenía que impartir en cada asignatura y cómo se trabajaba en el centro (clases prácticas, poca pizarra y "manos en la masa"), yo me preguntaba "¿por qué c=$!o no me han examinado de esto en las oposiciones?", y luego me tocaba estudiar por mi cuenta, pagándome cursos de mi propio bolsillo en muchas ocasiones, para ponerme al día y poder impartir una formación práctica de calidad.

Si eres informático y te gusta la educación, estos próximos años van a ser una oportunidad muy buena para poder hacerte profe. Por un lado, el hecho de que los temarios hayan cambiado hace que las posibilidades de antiguos opositores y nuevos aspirantes se igualen, ya que todo el mundo tiene que estudiar nuevos temas y preparar nuevas prácticas. Y por otra parte, parece que la forma de acceso a las plazas también va a cambiar para la próxima convocatoria de 2012, de manera que la experiencia previa como docente va a pesar mucho menos en la nota final, y los exámenes van a ser eliminatorios. Por tanto, las próximas convocatorias van a ser una oportunidad de oro para los nuevos opositores.

Para ser profesor de informática tienes 2 opciones:

  • La especialidad de Informática, del cuerpo de profesores de enseñanza secundaria, que te permite trabajar dando clase en los ciclos formativos de FP de grado medio y superior, en secundaria y en bachillerato.
  • La especialidad de Sistemas y Aplicaciones Informáticas, del cuerpo de profesores técnicos de FP, que te permite trabajar dando en clase en los ciclos formativos de FP de grado medio y superior.
Los temarios son algo diferentes, ya que dentro de cada ciclo formativo, las asignaturas que pueden impartir los profesores de secundaria y los técnicos son distintas. Por ello, por ejemplo, los profesores técnicos tienen más temas dedicados al Hardware y los profesores de secundaria más temas dedicados a las Redes y la Seguridad Informática.

Os dejo aquí una versión resumida de los nuevos temarios y os enlazo aquí una versión algo más detallada (secundaria, técnico):

Cuerpo:Secundaria - Especialidad: Informática

1. Representación y comunicación de la información.
2. La unidad central de proceso.
3. Periféricos, soportes y dispositivos de almacenamiento.
4. Sistemas microinformáticos.
5. Sistemas operativos.
6. Implantación de sistemas operativos.
7. Gestión de sistemas operativos.
8. Diseño de bases de datos.
9. Tipos de bases de datos.
10. Bases de datos relacionales.
11. El lenguaje SQL.
12. Sistemas gestores de bases de datos relacionales.
13. Mantenimiento de sistemas gestores de bases de datos relacionales.
14. Programación de bases de datos.
15. Lenguajes de programación.
16. Estructuras de programación.
17. Operaciones con estructuras de almacenamiento.
18. Algoritmos.
19. Análisis y diseño de programas.
20. Programación orientada a objetos.
21. Pruebas y documentación de programas.
22. Plataformas para el desarrollo de aplicaciones.
23. El lenguaje java.
24. El lenguaje C#.
25. El lenguaje XML.
26. Manipulación de documentos XML.
27. Almacenamiento de documentos XML.
28. Entrada/salida de información.
29. Comunicaciones en red.
30. Persistencia de objetos.
31. Creación de interfaces de usuario.
32. HTML y XHTML.
33. Javascript.
34. Arquitecturas de programación Web.
35. El lenguaje PHP.
36. Programación de aplicaciones con acceso a bases de datos.
37. Programación paralela y distribuida.
38. Programación multimedia.
39. Programación de juegos.
40. Programación de dispositivos móviles.
41. La imagen digital como elemento multimedia.
42. El sonido digital como elemento multimedia.
43. Aplicaciones Web.
44. Tipos y arquitecturas de redes.
45. La capa física en arquitecturas de redes.
46. La capa de enlace en arquitecturas de redes.
47. Redes Ethernet.
48. Tecnología inalámbrica en redes de área local y metropolitana.
49. Calidad del servicio y seguridad en despliegues inalámbricos.
50. La capa de red.
51. Encaminamiento estático.
52. Encaminamiento dinámico.
53. Acceso a internet desde LAN.
54. La capa de transporte.
55. Planificación de redes departamentales.
56. Proyectos de diseño, implantación y mantenimiento de redes departamentales.
57. Redes convergentes.
58. Monitorización y gestión de alarmas en redes.
59. Protocolo de configuración dinámica DHCP.
60. Servicios de resolución de nombres DNS.
61. Servicios de compartición de archivos.
62. Protocolo HTTP.
63. Correo y mensajería.
64. Servicios multimedia en red.
65. Protocolo LDAP.
66. Sistemas domóticos/inmóticos.
67. Sistemas de control de accesos y presencia.
68. Seguridad informática.
69. Criptografía simétrica y asimétrica.
70. Análisis informático forense.
71. Seguridad de las comunicaciones en redes departamentales.
72. Cortafuegos.
73. Proxies.
74. Acceso remoto seguro a redes.
75. Sistemas de alta disponibilidad.


Cuerpo: profesores técnicos de FP - Especialidad: Sistemas y Aplicaciones Informáticas

1. Representación y comunicación de la información.
2. Cajas y placas base para el ensamblaje de sistemas microinformáticos.
3. Los microprocesadores.
4. La memoria interna.
5. Soportes de almacenamiento.
6. Sistema gráfico.
7. Dispositivos periféricos.
8. Ensamblado y mantenimiento de sistemas microinformáticos.
9. Chequeo y diagnóstico de equipos y componentes.
10. Equipamiento informático específico.
11. Centros de proceso de datos.
12. Hardware específico para soluciones empresariales.
13. Normativa de prevención de riesgos laborales y protección ambiental.
14. Instalación y configuración de sistemas operativos.
15. Administración de sistemas operativos.
16. Mantenimiento del sistema informático.
17. Administración de usuarios y grupos.
18. Aseguramiento de la información.
19. Intérpretes de comandos.
20. Implantación de dominios.
21. Administración de dominios.
22. Sistemas de archivos compartidos.
23. Servicios de directorio.
24. Bases de datos relacionales.
25. El lenguaje SQL.
26. Lenguajes de programación.
27. Estructuras de programación.
28. Algoritmos y estructuras de datos.
29. Programación orientada a objetos.
30. La plataforma y el lenguaje Java.
31. Programación de aplicaciones con acceso a bases de datos.
32. Gestión de documentos XML.
33. HTML y XHTML.
33. Interfaces de usuario.
35. Accesibilidad de los interfaces de usuario.
36. Usabilidad de los interfaces de usuario.
37. Javascript.
38. Creación de componentes visuales.
39. Arquitecturas de programación Web.
40. Manipulación de imágenes.
41. Edición de audio y video.
42. Aplicaciones ofimáticas.
43. Aplicaciones Web.
44. Sistemas de planificación de recursos empresariales (ERP) y de gestión de
relaciones con clientes (CRM).
45. Adaptación y personalización de Sistemas ERP-CRM.
46. Redes de datos.
47. Redes cableadas.
48. Redes inalámbricas.
49. Direccionamiento IP.
50. Aplicaciones y servicios en red.
51. Interconexión de redes privadas y redes públicas.
52. Redes privadas Virtuales.
53. Servicios DHCP Y DNS.
54. Servidores Web.
55. Correo y mensajería.
56. Sistemas domóticos/inmóticos.
57. Sistemas de control de accesos y presencia.
58. Seguridad en sistemas informáticos.
59. Vulnerabilidades en sistemas informáticos.
60. Seguridad en redes informáticas.


¡Un saludo!

Configurar una VPN de acceso remoto con OpenVPN

Hola!

En esta entrada vamos a ver cómo configurar una VPN de acceso remoto utilizando OpenVPN, una solución libre que permite implementar VPNs basadas en SSL/TLS.

El escenario

Supongamos que la siguiente figura representa la red de nuestra organización, en la que tenemos varios servidores internos que no queremos que sean accesibles desde Internet y, por tanto, están protegidos por el cortafuegos de nuestra red local. Sin embargo, uno de nuestros empleados debe conectarse de forma remota y utilizar estos servicios, pero debido a su criticidad no queremos abrir un puerto y que se conecte directamente desde Internet. En este escenario podemos utilizar OpenVPN para configurar de forma sencilla una VPN de acceso remoto, de forma que todo el tráfico entre el cliente y el servidor VPN viaje cifrado a través de Internet.


Manos a la obra

Para este ejemplo, tanto el router que conecta nuestra red local con Internet como el cliente VPN son máquinas Debian, pero la configuración es prácticamente igual con otros SOs.

Tras instalar OpenVPN en ambas máquinas (puede compilarse el código fuente o instalarse el paquete del repositorio), hay que decidir cómo se va a realizar la autenticación de los extremos y el cifrado. La forma más sencilla de configuración es usar una clave compartida (pre-shared key), mientras que el uso de certificados ofrece una solución más robusta. Veamos primero cómo sería la configuración usando la clave compartida. 

Generación del secreto compartido

Lo primero que hay que hacer es generar la clave compartida en el servidor:

# openvpn --genkey --secret secreto.key

Esta orden nos genera la clave que utilizaremos para autenticar a los extremos de la VPN:

#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
aa638955325e31a3e04c1a34a8d48b82
c6eb052373a9b8d09f91356560474bd1
              ...
6480510df1fe5e05493f30a7601ab46b
e995995dd215eada0341156da5bfb993
-----END OpenVPN Static key V1-----

A continuación habrá que pasar este fichero al cliente.

Configuración del servidor

Tras mover el secreto compartido al directorio /etc/openvpn crearemos el archivo /etc/openvpn/servidor.cfg con el siguiente contenido:

dev tun
ifconfig 10.0.0.1 10.0.0.2
secret secreto.key

Las direcciones 10.0.0.1 y 10.0.0.2 de la directiva ifconfig son las que se asignarán a las interfaces virtuales del túnel: 10.0.0.1 para el servidor y 10.0.0.2 para el cliente. Puedes elegir las direcciones que prefieras, pero no deben coincidir con el direccionamiento utilizado en la red local.

A diferencia de otras soluciones más complejas como OpenSwan, basada en IPSec, OpenVPN utiliza un único puerto para todo el tráfico, por lo que la gestión en el cortafuegos es más sencilla. El puerto por defecto es el 1194 UDP (puede cambiarse este puerto con la directiva port nuevo_puerto), por lo que basta con que abrir este puerto para poder establecer la VPN.

Configuración del cliente

Tras copiar a la máquina cliente el secreto compartido y moverlo al directorio /etc/openvpn, crearemos el archivo /etc/openvpn/cliente.cfg con el siguiente contenido:

remote 80.154.67.89
dev tun
ifconfig 10.0.0.2 10.0.0.1
route 192.168.2.0 255.255.255.0 10.0.0.1
secret secreto.key

La dirección 80.154.67.89 de la directiva remote es la IP pública del servidor VPN, necesaria para que el cliente comience el establecimiento de la VPN. La directiva route añadirá a la tabla de encaminamiento del cliente una entrada que permita acceder a los recursos de la red local remota (en el ejemplo 192.168.2.0/24). Con esta configuración, el único tráfico que será cifrado y que se enviará a través del túnel, será el que vaya dirigido a la red local remota, mientras que el resto del tráfico se enviará sin cifrar de forma tradicional.

Establecimiento de la VPN

Para establecer la VPN hay que arrancar OpenVPN en ambos extremos:

# openvpn --config /etc/openvpn/servidor.conf    (En el servidor)
# openvpn --config /etc/openvpn/cliente.conf    (En el cliente)

Una vez establecida la VPN, se habrá creado una interfaz virtual de tipo túnel en ambas máquinas, que simulan un enlace PPP:

# ifconfig
...
tun0      Link encap:UNSPEC  direcciónHW 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 
          Direc. inet:10.0.0.2  P-t-P:10.0.0.1  Másc:255.255.255.255
          ACTIVO PUNTO A PUNTO FUNCIONANDO NOARP MULTICAST
...

Y en la tabla de encaminamiento veremos las nuevas entradas que permiten el tráfico con la máquina 10.0.0.1 (el servidor VPN) y con la red local remota (192.168.2.0):

# route -n
Tabla de rutas IP del núcleo
Destino         Pasarela        Genmask         Indic Métric Ref    Uso Interfaz
10.0.0.1      0.0.0.0         255.255.255.255 UH    0      0        0 tun0
192.168.2.0    10.0.0.1      255.255.255.0   UG    0      0        0 tun0
192.168.1.0     0.0.0.0         255.255.255.0   U     1      0        0 eth1
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth1

A partir de este momento, el cliente ya podría utilizar los recursos de la red local remota de forma segura, ya que todo el tráfico iría cifrado a través del túnel.

Configuración usando certificados

Para este escenario, con un sólo cliente de acceso remoto, la configuración basada en secreto compartido es suficiente, pero siempre es preferible usar certificados en lugar de claves compartidas. En la siguiente guía se detalla la configuración de cliente y servidor para un escenario de VPN de acceso remoto utilizando certificados X.509 y la configuración de una VPN sitio a sitio usando también certificados X.509.


Un saludo!

Educación pública y movilidad social

¡Hola!

Leyendo el artículo Movilidad social y educación pública, de Iñaki Iriarte, me he animado a buscar cifras y estadísticas que muestren la influencia de la educación en la movilidad social.

¿Qué es la movilidad social?

A lo largo de su vida, las personas pueden mejorar sus condiciones de vida o empeorarlas, y si todo el mundo tuviera las mismas posiblidades de subir o bajar, estaríamos en una sociedad en la que de verdad existiría la igualdad de oportunidades.

Una forma de medir la movilidad social es comprobar si los padres ricos tienen hijos ricos y los padres pobres tienen hijos pobres, o si el nivel socieconómico de los padres no influye en el de los hijos. Es decir, ¿pueden hacerse ricos los hijos de padres pobres?

Movilidad social en el mundo

La siguiente gráfica, obtenida del estudio Intergenerational Mobility in Europe and North America de la London School of Economics, muestra una comparativa de la movilidad social en 8 países diferentes:


Como puede observarse, los países nórdicos presentan una mayor movilidad social, mientras Estados Unidos y Reino Unido son los que tienen una tasa inferior. Es decir, que el sueño americano es mucho más posible en Copenhague que en New York, parafraseando a Richard Wilkinson.

Datos muy similares obtienen los investigadores del estudio Mobility in the United States in comparativeperspective,que realiza una comparación del nivel de persistencia de la movilidad social, de forma que:
  • Un nivel de persistencia igual a 1 significa que no importa cuánto te esfuerces en la vida, ya que vas a mantenerte en el nivel socieconómico de tus padres.
  • Un nivel de persistencia igual a 0 representa una sociedad meritocrática, en la que el nivel de tus padres no influye absolutamente y sólo subirás o bajarás en la escala social de acuerdo a tus méritos.
Según el estudio, Estados Unidos es el país con mayor nivel de persistencia, con un 0.45, mientras que Dinamarca, Noruega y Finlandia son los países con menores tasas, con 0.12, 0.17 y 0.18, respectivamente. La media de los países estudiados ronda el 0.25.

Más impactante aún es la conclusión del informe Understanding Mobility in America, en el que se afirma que los hijos de familias con pocos ingresos tienen un 1% de probabilidad de convertirse en ciudadanos con ingresos superiores al resto de la población (en concreto, de alcanzar el top 5% respecto al nivel de ingresos), mientras que los hijos de las familas ricas tienen un 22% de lograr esta misma situación.

Movilidad social en España 

Los únicos datos oficiales que he conseguido localizar han sido los de los estudios de la OCDE (OECD Economic Surveys: Finland 2008, OECD Economic Surveys: United Kingdom 2009), que confirman los datos de los artículos anteriores y sitúan a España en un nivel de persistencia algo superior al 0,3.




 Movilidad social y educación 

Todos los estudios mencionados afirman que la educación es el parámetro más importante a la hora de mejorar la movilidad social. Por ejemplo, en el informe de la London School of Econocmics podemos encontrar las siguientes conclusiones:

"La fortaleza de la relación entre educación e ingresos familiares, especialmente para el acceso a la educación superior, se encuentra en el corazón de los bajos niveles de movilidad social de Gran Bretaña. Si se desea mejorar la movilidad social intergeneracional, estos datos sugieren claramente que desde edades tempranas, incluyendo la edad preescolar, Gran Bretaña necesita adoptar una estrategia para igualar las oportunidades"

"Para mejorar esta situación necesitamos también realizar mejoras en las escuelas de las comunidades más pobres y ofrecer ayudas económicas para impulsar la educación post-obligatoria"

Además, si nos fijamos en los datos de los diferentes informes, podemos observar que los países con mejores tasas de movilidad social son aquellos que cuentan con una educación pública de calidad. Y todo lo contrario ocurre en aquellos países en los que la educación pública queda relegada al papel de servicio social para los más pobres, en los que los niveles de movilidad social son paupérrimos.

¿Repercute en la sociedad la movilidad social?

Los países que tienen una mayor movilidad social y, por tanto, ofrecen una mayor igualdad de oportunidades a sus ciudadanos, tienen una mayor calidad de vida que repercute en una menor tasa de asesinatos, de enfermedades mentales, de obesidad, de encarcelamientos, de embarazos no deseados en adolescentes o de abuso de drogas, entre otros muchos parámetros:




Y tú, ¿en qué tipo de sociedad quieres vivir?

¡Un saludo!

Webinar: smartphones que amenzan tu red

Hola!

La gente de AirTight Networks ha organizado un Webinar gratuito para mostrar cómo proteger la red corporativa de todos los dispositivos inteligentes, (smartphones, tablets...) personales que se llevan los empleados al trabajo. Será el miércoles 2 de Noviembre a las 11:00 AM Pacific Time, que en España son las 20:00. Aquí tienes toda la información y el registro.

La verdad es que leyendo la presentación del evento, me he acordado mucho de la genial charla "Malware en la empresa" que Pedro Sánchez impartió este Febrero en Sevilla durante la Gira Up To Secure. Durante la charla, Pedro nos contó un caso real de un trabajador de un banco muy importante que decidió llevarse su portátil Mac al trabajo y conectarlo a la red corporativa... con unas consecuencias dramáticas.  Os dejo aquí las diapositivas de la ponencia, por si a alguien le interesa echar un vistazo:





iPhone, Droids, Tablets: Smartphones que amenazan tu red


En la cultura BYOD (bring your own device, lleva tu propio dispositivo) en la que vivimos hoy día, hay 3 veces más dispositivos personales en el espacio de tu red que dispositivos corporativos. Para hacer aún peor las cosas, los usuarios autorizados muchas veces solo necesitan sus credenciales para conectar sus dispositivos no autorizados a tu red WPA/802.1x sin tu conocimiento ni autorización, exponiendo al resto de equipos de la red a amenazas de seguridad, malware y fuga de datos.


En este webinar interactivo aprenderás:
  • Las limitaciones de las prácticas comunes de seguridad que suelen aplicarse.
  • Cómo identificar smartphones conectados a tu red
  • Definir una política de acceso y forzar a los smartphones que la cumplan
  • Establecer controles para restringir el acceso de dispositivos personales a la red corporativa.

Un saludo!

Nessus: detectando malas configuraciones

Hola!

Éste es el segundo post de la serie Top 10  de cosas que no conocías sobre Nessus que está publicando David Letterman, de Tenable Security, y que yo iré traduciendo (y resumiendo) por aquí. En el artículo anterior, hay más de una forma de hacer las cosas, estudiamos los beneficios de realizar un análisis con credenciales, y hoy vamos a ver cómo usar Nessus para descubrir malas configuraciones que puedan llevar a comprometer la seguridad de nuestros sistemas.

Nessus detecta malas configuraciones

Cuando yo trabajaba de administrador de sistemas [cuenta David Letterman], una de las tareas más difíciles era mantener las mismas configuraciones en todos los sistemas (o grupos de sistemas similares). Los sistemas cambiaban, se aplicaban actualizaciones, la gente hacía cambios a las 3:00 de la madrugada para corregir un problema de emergencia... todo ello contribuyendo a que las configuraciones se escaparan de las políticas en las que yo había trabajado tan duro para crearlas e implementarlas. Afortunadamente, Nessus permite auditar de forma consistente las configuraciones de tus equipos:
  • Ejecutar órdenes de shell Linux/Unix: dentro de la configuración de una política de auditoría, puedes especificar el comando a ejecutar, y comprobar los resultados deseados. Esto significa que puedes crear un script  para, por ejemplo, comprobar si las claves SSH tienen configuradas una contraseña.
  • Mirar dentro de los ficheros de configuración: Nessus permite buscar un fichero de configuración (o cualquier fichero en texto plano) de un equipo, localizar ciertos parámetros y realizar un test. Por ejemplo, si quieres estar seguro de que las configuraciones de tus servidores SSH no permiten que el usuario root haga un login, podríamos comprobarlo así:

system:"Linux"
type :FILE_CONTENT_CHECK
description:"2.3 Configure SSH - Checking if PermitRootLogin is set to no and not commented for server."
info:"ref. https://community.cisecurity.org/download/?redir=/linux/CIS_RHEL_5.0-5.1_Benchmark_v1.1.2.pdf Ch. 2, pp 24-25."
file:"/etc/ssh/sshd_config"
regex:"^[\\s\\t]*PermitRootLogin[\\s\\t]"
expect:"^[\\s\\t]*PermitRootLogin[\\s\\t]+no[\\s\\t]*$"


  • Inventario de software: se puede usar Nessus para identificar el software instalado. Por ejemplo, si queremos comprobar si nos hemos dejado instalado un compilador en nuestro servidor, podemos realizar lo siguiente:


type :RPM_CHECK
description:"SN.10 Remove All Compilers and Assemblers - gcc"
info :"ref. https://community.cisecurity.org/download/?redir=/linux/CIS_RHEL_5.0-5.1_Benchmark_v1.1.2.pdf App. A, page 119."
rpm :"gcc-0.0.0-0"
operator:"lt"


Y aquí tenéis el vídeo de la sesión:





Un saludo!

iptables, un tutorial sencillo

Hola!

Baśandome en la documentación de Juan Céspedes, profesor del GSYC de la Universidad Rey Juan Carlos, y en los libros Linux Network Administrator's Guide (Tony Bautts, Terry Dawson & Gregor N. Purdy) y Linux Cookbook (Carla Schroder), he escrito un artículo en el que se presenta iptables, se describe su estructura, se realiza un resumen de la sintaxis básica para la creación de reglas de filtrado de paquetes y se ofrece un script para un ejemplo completo. Espero que os sirva de ayuda.

Un cortafuegos (firewall) es un dispositivo hardware o software que tiene como objetivo proteger una red de otras redes a las que está conectado. El cortafuegos se configura con una serie de reglas que determinan el tráfico que puede pasar de una red a otra y el tráfico que debe ser bloqueado.
Para comprender el funcionamiento de un cortafuegos, podemos pensar en cómo desempeñan su trabajo los guardias de seguridad de una discoteca. Los dueños del local establecen los criterios que debe cumplir un potencial cliente para poder pasar a la sala y, cada vez que alguien llega a la puerta, el portero lo evalúa:
  • si cumple los criterios → pasa
  • si no los cumple  → no pasa
En la siguiente figura se representa el esquema de una red de ordenadores que utiliza un cortafuegos para proteger la red local de la red externa:

Figura 1. Esquema de una red que utiliza un Cortafuegos. (Fuente: Wikipedia)

Se pueden construir cortafuegos más sofisticados, como veremos a lo largo del artículo, que incluyen equipos separados del resto de la red local (Zona Desmilitarizada) para aumentar aún más la seguridad. De hecho, en las grandes corporaciones, es posible encontrar instalaciones con más de un cortafuegos, que separan los equipos de diferentes áreas de la empresa.
 
Linux como cortafuegos
El núcleo de las máquinas GNU/Linux incorpora el framework Netfilter, que permite interceptar y manipular paquetes de red. Además, en el espacio de usuario, el administrador puede usar iptables para establecer las reglas del firewall.

iptables
iptables se usa para crear, mantener y revisar las tablas de filtrado de paquetes en el kernel de Linux, y se estructura de la siguiente manera:
 
- Existen diferentes tablas (tables) dentro de las cuales puede haber varias cadenas (chains). 
- Cada cadena consiste en una lista de reglas con las que se comparan los paquetes que pasan por el cortafuegos. Las reglas especifican qué se hace con los paquetes que se ajustan a ellas (target).
Para cada paquete que recibe el cortafuegos, se examina la primera regla de la cadena correspondiente. Si el paquete no se ajusta a esa regla, se continúa examinando la siguiente hasta que se ajusta  con alguna. En ese momento se ejecuta el target:
  • DROP: el paquete se descarta, no puede pasar 
  • ACCEPT: el paquete continúa su camino normal
Si se llega al final de una cadena predefinida se ejecuta un target por defecto, llamado chain policy. El chain policy establece, por tanto, la política por defecto de nuestro cortafuegos.

Tablas
Como decíamos, en iptables existen varias tablas, que tienen diferentes objetivos:
- La tabla filter es la tabla por defecto, y se utiliza para especificar filtros de paquetes. Contiene 3 chains predefinidas:
  • INPUT: Se consulta para los paquetes que van dirigidos al propio cortafuegos
  • FORWARD: La atraviesan los paquetes enrutados a través de esta máquina, es decir, aquellos paquetes en los que el origen y el destino son equipos de redes diferentes.
  • OUTPUT: Para paquetes generados localmente
- La tabla nat se consulta cada vez que se ve un paquete que inicia una nueva conexión, con el objetivo de alterar algún parámetro de esa conexión. Tiene 3 chains predefinidas: 
  • PREROUTING: se consulta con los paquetes que entran en la máquina cortafuegos, tan pronto como llegan, antes de decidir qué hacer con ellos. 
  • OUTPUT: se utiliza para alterar paquetes generados localmente, antes de    enrutarlos. 
  •  POSTROUTING: para alterar los paquetes que están a punto de salir de la máquina.
- La tabla mangle es una tabla especial, destinada a alterar determinados parámetros de los paquetes (TOS, TTL ...), que se utiliza para realizar configuraciones complejas del cortafuegos. Cuenta con 5 chains predefinidas: INPUT, OUTPUT, PREROUNTING, POSTROUTING Y FORWARD.
 
Flujo de los paquetes a través de iptables
En la figura 2 se muestran todos los posibles caminos que un paquete puede seguir al atravesar nuestro cortafuegos.
 
Figura 2. Flujo de paquetes a través de iptables


Veamos el camino que seguiría, por ejemplo, un paquete que se origina en nuestra red local y va destinado a una máquina de Internet (para el esquema básico de la figura 1):
- El paquete entra en el cortafuegos por una interfaz de red, por tanto, primero se comprobarían las reglas de la cadena PREROUTING.
- A continuación se comprobarían las reglas de la cadena FORWARD, ya que el paquete no va destinado a un proceso del cortafuegos, si no que va a atravesarlo, saliendo por la interfaz que lo conecta con la red externa.
- Por último, si el paquete no ha sido filtrado y sigue adelante, antes de salir del cortafuegos por la otra interfaz de red, se comprueban las reglas de la cadena POSTROUTING

Comandos de configuración
 
Vamos a ir explicando, a continuación, los comandos básicos de configuración de iptables. Veremos algún ejemplo sencillo, y terminaremos con un ejemplo completo de configuración de un firewall con DMZ.
 
Listado de reglas
#iptables [-t tabla] [opciones] -L [chain]

Muestra un listado de todas las reglas de una cadena, o de todas ellas. Las opciones disponibles son:
-v: información detallada
-n: salida numérica
-x: valor exacto de cada número
 
Borrado de contadores:
#iptables [-t tabla] -Z [chain]

Borra los contadores de una determinada chain, o de todas ellas. Es habitual colocar este comando al principio de todos los script de configuración, para borrar las reglas que existieran de antemano. Se puede combinar con la opción -L para mostrar la información justo antes de borrarla.
 
Borrado de reglas:
#iptables [-t tabla] -F [chain]

Borra las reglas de una determinada chain o de todas ellas.
 
Creado y borrado de reglas:
#iptables [-t table] -A chain rule-spec
#iptables [-t table] -I chain [rulenum] rule-spec
#iptables [-t table] -R chain rulenum rule-spec
#iptables [-t table] -D chain rule-spec
#iptables [-t table] -D chain rulenum

Las opciones son las siguientes:
-A: añade una regla al final de la lista
-I: inserta una regla al comienzo de la lista o en el punto especificado
-R: reemplaza una regla (especificada por su número de regla) por otra
-D: borra una regla determinada
 
Para especificar una regla podemos usar los siguentes parámetros:
-p [!] protocolo: el protocolo del paquete a comprobar. Puede ser 'tcp', 'udp', 'icmp' o 'all'
-[sd] [!] dirección[/máscara]: dirección ip origen (s) o destino (d) del paquete
-[io] [!] iface: nombre de la interfaz de entrada (i) o de salida (o) del paquete
-j target: especifica el target de dicha regla. Puede ser una acción predefinida (ACCEPT, DROP), una extensión o el nombre de una chain
 
Establecimiento de un política por defecto:
#iptables [-t table] -P chain target

Establece el taget que se ejecutará para los paquetes que no cumplan con ninguna regla de la chain especificada

Un ejemplo sencillo 
Con estos comandos básicos de configuración ya podemos resolver muchos de los problemas con los que se encuentra una empresa al exponer sus sistemas de información a Internet.
Vamos a ver un ejemplo sencillo para entender cómo se deben escribir las reglas en iptables. Observemos la figura 3, que representa una instalación sencilla, con una máquina que actúa como router y cortafuegos conectando dos redes distintas.
 
Figura 3. Un ejemplo sencillo



Supongamos que queremos que sólo la máquina B pueda hablar con C, y además sólo pueda usar el protocolo TCP. Los paquetes que no cumplan estas condiciones serán descartados.
Lo primero que tenemos que decidir es ¿en qué tabla e qué cadena vamos a colocar las reglas? En este caso, queremos realizar filtrado de paquetes, por lo que está claro que trabajaremos con la tabla filter... pero ¿en la cadena INPUT, OUTPUT o FORWARD? Como los paquetes que queremos filtrar son los que van a atravesar el Firewall de una red a otra, trabajaremos con la cadena FORWARD.
Los comandos que deberíamos usar para conseguir estos objetivos son los siguientes:


  1. #iptables -F FORWARD
  2. #iptables -P FORWARD DROP
  3. #iptables -t filter -A FORWARD -p tcp -s 192.168.1.2 -d 192.168.2.1 -j ACCEPT
  4. #iptables -t filter -A FORWARD -p tcp -s 192.168.2.1 -d 192.168.1.2 -j ACCEPT



La línea 1 borra las reglas que pudiera haber en la cadena FORWARD de la tabla filter (que es la tabla por defecto).
La línea 2 establece la política por defecto a DROP (denegar), por lo tanto, los paquetes que no cumplan con las reglas que especifiquemos serán rechazados.
Las líneas 3 y 4 permiten el tráfico entre las máquinas B y C según las reglas especificadas en el enunciado. Veamos con detalle su significado en la figura 4.

Figura 4. ¿Cómo se lee una regla de iptables?

Los aministradores no suelen sentarse delante de la máquina que actúa como cortafuegos y ejecutan los comandos uno a uno. Es más habitual escribir todos los comandos en un script de shell y ejecutar solamente el script. No sólo se hace por comodidad, sino porque esta opción permite incluir comentarios y reutilizar el código:

#!/bin/bash
##Script de iptables – Un ejemplo sencillo

##Borramos las reglas de la chain FORWARD de la tabla filter
iptables -F FORWARD

##Establecemos la política por defecto -> DROP
iptables -P FORWARD DROP

##Aceptamos los paquetes TCP entre B y C
iptables -t filter -A FORWARD -p tcp -s 192.168.1.2
            -d 192.168.2.1 -j ACCEPT
iptables -t filter -A FORWARD -p tcp -s 192.168.2.1
            -d 192.168.1.2 -j ACCEPT


Extensiones de las reglas

Con las opciones vistas hasta el momento podemos controlar los parámetros más básicos de la cabecera IP del paquete. Puede ser necesario un control más estricto, por ello existen una serie de extensiones que permiten utilizar opciones nuevas:
-m extensión: activa una extensión para poder especificar los parámetros del paquete
 
Veamos algunas extensiones de las reglas:
tcp: añade las siguientes opciones
  • --sport [!] port[:port]: especifica el puerto o rango de puertos origen
  • --dport [!] port[:port]: especifica el puerto o rango de puertos destino
  • [!] --syn: la regla concordará sólo con los paquetes cuyo bit SYN=1 y los flags ACK y FIN valgan 0. Los datagramas con estos valores se utilizan para abrir las conexiones TCP
udp: añade las siguientes opciones
  • --sport [!] port[:port]: especifica el puerto o rango de puertos origen
  • --dport [!] port[:port]: especifica el puerto o rango de puertos destino

Ejemplo: supongamos que quieres crear una regla para permitir el paso a las peticiones a un servidor web que tiene la IP 172.16.0.254.
#iptables -A FORWARD -p tcp -d 172.16.0.254 --dport 80 -j ACCEPT

icmp: añade la opción –-icmp-type tipo, que indica qué tipo ICMP debe tener el paquete (echo-request, echo-reply, network-unreachable...)
mac: añade la opción –-mac-source [!] dir_mac, que especifica la dirección MAC que debe tener el paquete


Ejemplo: quieres permitir que se realice ping al cortafuegos desde la máquina del administrador, que tiene IP dinámica y MAC 00:21:00:16:82:9f 
#iptables -A INPUT -p icmp --icmp-type echo-request -m mac --mac-source 00:21:00:16:82:9f -j ACCEPT  
#iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT


 state: Añade la opcion --state valor, que indica el estado en el que debe estar la conexion correspondiente a dicho paquete. Los tipos de estado principales son:
  • NEW: el paquete corresponde a una conexión nueva
  • ESTABLISHED: el paquete está asociado a una conexión ya establecida
  • RELATED: el paquete corresponde a una conexión nueva, pero relacionada con una que ya está establecida (como un canal de datos FTP o un error de ICMP)

Extensiones de target
 
Existen otros target diferentes a DROP y ACCEPT que permiten que nuestro cortafuegos realice otras funciones a parte del filtrado de paquetes:
 
- MASQUERADE: sólo es válida en la chain POSTROUTING. Indica que la dirección origen del paquete (y de todos los de esa conexión) será cambiada por la IP local de esta máquina. Muy útil para IP dinámica (es lo que se conoce como NAT)

Ejemplo:
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
 
- SNAT: sólo es válida en la chain POSTROUTING. Indica que la dirección y puerto origen del paquete (y de todos los de esa conexión) sea modificada según se especifica con la opción –-to-source. El target será SNAT (en lugar de MASQUERADE) cuando tengamos una IP fija.

Ejemplo:
# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 189.29.35.15
 
- DNAT: sólo es válida en las chains PREROUTING y OUTPUT. Cambia la dirección IP destino (y de todos los futuros de esta misma conexión) por el especificado con la opción -–to-destination. Es lo que se conoce como 'abrir el puerto' en el router.
Por ejemplo, si la máquina 192.168.1.2 de nuestra red local aloja un servidor web que queremos que sea accesible desde la red externa:
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:80
 

DMZ, zona desmilitarizada

Observa la figura siguiente, que representa una red en la que tenemos un servidor web público, al que vamos a permitir el acceso desde Internet, y un servidor de BBDD privado, con toda la información de nuestra empresa.
 
Figura 5. Firewall de 2 patas

¿Qué ocurriría si un atacante consigue comprometer la seguridad de nuestro servidor web? A partir de ese momento, el acceso a los recursos de la red local sería inmediato, ya que ambos servidores se encuentran en la misma red.

En estos casos, el uso de una DMZ permite que se puedan dar servicios a la red externa a la vez que se protege la red interna en el caso de que un intruso comprometa la seguridad de los equipos situados en la zona desmilitarizada:

Figura 6. Firewall de 3 patas

Un ejemplo completo
Observemos la figura 7, que representa la configuración de la red de nuestra empresa:
 
 Figura 7. Esquema de la red de nuestra organización


En el ejemplo supondremos que nuestra máquina GNU/Linux está conectada a un ROUTER que nos proporciona el acceso a Internet por la interfaz eth2. Este router está configurado como monopuesto (no hace NAT y deja pasar todo el tráfico a nuestra máquina Linux).


Las direcciones de la máquina son las siguientes:
  • eth0: 192.168.1.1/24
  • eth1: 192.168.2.1/24
  • eth2: dirección IP obtenida por DHCP (dinámica)

En la DMZ tenemos un servidor WEB y un servidor SSH que queremos sean accesibles desde Internet y la red local. Las direcciones son:

Servidor WEB: 192.168.2.2/24
Servidor FTP: 192.168.2.3/24

Las máquinas de la red local podrán navegar por Internet accediendo a servidores WEB, servidores WEB Seguros, servidores FTP y servidores DNS. El resto de conexiones serán filtradas.

Todas las máquinas de la red local tienen direcciones del rango 192.168.1.0/24.

Supondremos que en el firewall hay instalado un servidor ssh para que el administrador pueda conectarse desde la red local.

Se presenta a continuación un script, con una parte configurable por el usuario, para que pueda ser fácilmente adaptado a otras instalaciones y requisitos:


#!/bin/bash

####################################################################   
#            Ejemplo de configuración de un firewall con DMZ y red local           #
####################################################################

### SECCIÓN CONFIGURABLE POR EL USUARIO ###

# REDLOCAL    Dirección IP de la red local interna
# BCASTLOCAL    Dirección de Broadcast de la red local
# IFAZLOCAL    Nombre del interfaz de red local
# CUALQUIERA    Dirección de red 0.0.0.0
# IFAZEXT        Nombre del interfaz de red externo
# WEB        Dirección IP del servidor WEB
# FTP            Dirección IP del servidor FTP
# REDDMZ        Dirección IP de la red DMZ
# IFAZDMZ        Nombre del interfaz de red de la DMZ
# TCPLOCAL    Lista de puertos TCP que permitimos usar en la red local
# UDPLOCAL    Lista de puertos UDP que permitimos usar en la red local


REDLOCAL = “192.168.1.0/24”
BCASTLOCAL = “192.168.1.255”
IFAZLOCAL = “eth0”

CUALQUIERA = “0/0”
IFAZEXT = “eth2”

WEB = “192.168.2.2”
FTP = “192.168.2.3”
REDDMZ = “192.168.2.0/24”
IFAZDMZ = “eth1”

TCPLOCAL = “www,ftp,ftp-data,https”

UDPLOCAL = “domain”


                ###IMPLEMENTACIÓN###

# Borramos todas las reglas que pudiera haber anteriormente, y los contadores

iptables -F
iptables -t nat -F
iptables -X         #borra las cadenas creadas por el usuario
iptables -Z
# Cambiamos la política por defecto en todas las cadenas de la tabla filter
# Chain Policy -> DROP

iptables -P FORWARD DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP

# Permitimos que se acceda al cortafuegos por ssh

iptables -A INPUT -s $REDLOCAL -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -d $REDLOCAL -p tcp --sport 22 -j ACCEPT

##CONEXIONES TCP

# Permitimos las conexiones establecidas, desde la red externa y desde la DMZ hacia la red local en los puertos permitidos

iptables -A FORWARD -d $REDLOCAL -p tcp  -m state --state ESTABLISHED -m multiport --sports $TCPLOCAL -j ACCEPT

# Permitimos el tráfico desde la red local hacia la red externa y hacia la DMZ en los puertos permitidos

iptables -A FORWARD -s $REDLOCAL -p tcp -m multiport --dports $TCPLOCAL -j ACCEPT

# Permitimos el tráfico desde la red local y desde la red externa al servidor WEB  por el puerto 80

iptables -A FORWARD -d $WEB -p tcp --dport 80 -j ACCEPT

# Permitimos las conexiones establecidas desde el servidor WEB a la red local y a la red externa

iptables -A FORWARD -s $WEB -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

# Permitimos el tráfico desde la red local y desde la red externa al servidor FTP por el puerto 20 y 21

iptables -A FORWARD -d $FTP -p tcp --dport 20:21 -j ACCEPT

# Permitimos las conexiones establecidas desde el servidor FTP a la red local y a la red externa

iptables -A FORWARD -s $FTP -p tcp --sport 20:21 -m state --state ESTABLISHED -j ACCEPT

# Permitimos las conexiones relacionadas desde el servidor FTP a la red local y a la red externa

iptables -A FORWARD -s $WEB -p tcp --sport 20:21 -m state --state RELATED -j ACCEPT

##CONEXIONES UDP

# Permitimos las conexiones establecidas desde la red externa hacia la red local en los puertos permitidos

iptables -A FORWARD -d $REDLOCAL -i $IFAZEXT -p udp  -m state --state     ESTABLISHED -m multiport --sports $UDPLOCAL -j ACCEPT

# Permitimos el tráfico desde la red local hacia la red externa  en los puertos permitidos

iptables -A FORWARD -s $REDLOCAL -o $IFAZEXT -p udp -m multiport --dports     $UDPLOCAL -j ACCEPT


## Hacemos NAT para las máquinas de la red local y para las máquinas de la  DMZ

iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE

# Si la dirección IP Pública fuera estática haríamos SNAT

## Hacemos DNAT para que las peticiones que recibimos de Internet lleguen a los servidores

iptables -t nat -A PREROUTING -i eth2 -p tcp --dport 80 -j DNAT --to-destination $WEB:80

iptables -t nat -A PREROUTING -i eth2 -p tcp –dport 20 -j DNAT --to-destination $FTP:20

 
Un saludo!