Memoria del Proyecto. Servidor Linux para conexiones seguras de una LAN a Internet. Jose Antonio Escartín Vigo

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Memoria del Proyecto. Servidor Linux para conexiones seguras de una LAN a Internet. Jose Antonio Escartín Vigo"

Transcripción

1 Memoria del Proyecto Servidor Linux para conexiones seguras de una LAN a Internet Jose Antonio Escartín Vigo Junio de 2005

2

3 Introducción En las siguientes líneas trato de describir los motivos que me llevaron a escoger un proyecto de este estilo y de donde surgió la idea de realizar un documento informativo para facilitar la tarea de muchos administradores de sistemas noveles, como yo cuando comencé este proyecto. En esta pequeña introducción también se especifican los objetivos que se pretenden conseguir y para entrar en materia se comenta, muy por encima, la historia de Linux. Motivación Me decidí a realizar este proyecto por la inquetud personal que tenía respecto al sistema operativo Linux. Conozco a mucha gente que lo maneja y que me hablaba muy bien, por pereza y falta de tiempo, nunca me había puesto a experimentar a fondo con él. Si bien es cierto que lo tenía instalado (una versión Mandrake 9.0) lo utilizaba solamente para realizar las prácticas de la universidad y poca cosa más. Siempre me han atraído los sistemas operativos, bastante más que la rama de programación. Una prueba de ello es que cuando llege a la FIB (vine del Ciclo formativo de grado superior: Desarrollo de aplicaciones informaticas; es decir, básicamente programación) me cambié a la rama de sistemas. Actualmente me encuentro cursando el PFC de la Ingeniería técnica en Informática de Sistemas y tengo la intención de solicitar plaza de admisión en la Ingeniería superior de informática, carrera a la que no pude acceder en primera instancia por restricciones legales, al acceder a la universidad por la vía de los ciclos formativos de grado superior. A lo largo de la carrera, he cursado las siguientes asignaturas relacionadas con los sistemas operativos: ISO (Introducción a los sistemas operativos), SO (Sistemas Operativos), ASO (Administración de sistemas operativos), CASO (Conceptos avanzados de sistemas operativos), SSI (Seguridad en sistemas informáticos). Además hace unos años, antes de comenzar la carrera, realizaba trabajos de administrador de sistemas en entornos Windows, para dos institutos (IES Pirámide y IES Sierra de Guara) de mi ciudad natal, Huesca. El PFC: Servidor Linux para conexiones seguras de una LAN a Internet me ha permitido desarrollar amplios conocimientos en el campo de los sistemas operativos, algo que realmente me interesa y supongo que me permitirá encarrilar mi carrera hacia el trabajo que pretendo desarrollar como Administrador de sistemas. Si en vez de elegir uno de los proyectos propuestos desde la universidad, hubiera pensado proponer uno, sin duda habría elegido hacer un proyecto igual al que propuso el profesor Lluís Pérez Vidal del departamente LSI de la UPC. Me siento bastante afortunado de haber realizado un PFC que realmente me interesaba y motivaba.

4 vi Servidor Linux para conexiones seguras de una LAN a Internet Motivación del proyecto Ante el problema de instalar un sistema operativo que controle los servicios de red y además sea estable se nos plantean principalmente dos alternativas, Linux o Windows. Qué ventajas tiene Linux sobre Windows? Es más seguro. Ya que la gran mayoría de los ataques de hackers son dirigidos a servidores Windows al igual que los virus los cuales se enfocan principalmente a servidores con éste sistema operativo. La plataforma Linux es más robusta lo cual hace más difícil que algún intruso pueda violar la seguridad del sistema. Es más rápido. Al tener una plataforma más estable, se favorece la utilización de aplicaciones de todo tipo de aplicaciones. La eficiencia de su código fuente hace que la velocidad de las aplicaciones Linux sean superiores a las que corren sobre Windows. Es más económico. Ya que requiere menor mantenimiento. Los servidores Windows son más costosos debido a que es necesaria una frecuente atención y monitoreo contra ataques de virus, hackers y errores de código. El software Linux así como también un sin número de aplicaciones, son de código abierto y están protegidas por la licencia GPL 1, motivo por el que son distribuidas gratuitamente. No requieren supervisión constante ni pagos de mantenimiento para obtener Service Packs, que no son más que parches de seguridad para aplicaciones mal diseadas. Qué ventajas tiene Windows sobre Linux? Es más fácil. Al ser de mayor facilidad de uso Windows en este momento continúa siendo el sistema operativo más comercial lo cual se refleja en la disponibilidad de aplicaciones, facilidad de mantenimiento así como soporte en el desarrollo de nuevas aplicaciones. Las aplicaciones se desarrollan en menor tiempo. Fruto de la inversión realizada por Microsoft y aunado a una comunidad de programadores cada vez más grande se ha logrado facilitar el desarrollo de aplicaciones y sistemas que corran sobre servidores Windows lo cual se ve reflejado en tiempos de desarrollo menores. De la misma forma, la curva de aprendizaje en el sistema Windows es mucho menor. La alternativa más sencilla y a la vez más ineficiente es elegir un sistema operativo Windows. Lo que se busca es seguridad, integridad de datos y eficiencia del sistema, por tanto nos decantarémos por una distribución GNU/Linux. El proyecto surge ante la necesidad de escoger entre las distribuciones Linux actuales, la más adecuada para instalar un servidor e implementar las aplicaciones necesarias para dar servicios a clientes de sistemas operativos Linux y Windows. Esto es algo no trivial y el proyecto trata de ser una ayuda, apoyo y consulta para facilitar la tarea de una persona que trate de implementar un servidor. 1 GPL: Licencia pública GNU. Según se cita en [Sha01] expecifica explícitamente que el software desarrollado es libre y que nadie puede coartar estas libertados. Se puede revender, incluso obteniendo beneficio; sin embargo, en esa reventa el vendedor debe de proveer el código fuente completo, incluyendo cualquier modificación realizada. El paquete continua bajo GPL y puede ser distribuido de modo libre y revendido de nuevo obteniendo también beneficio. Es de una importancia primordial la cláusula de responsabilidad: los programadores no son responsables de cualquier daño causado por su software.

5 vii Objetivos Este documento está elaborado para describir la implementación de un servidor GNU/Linux, así como especificar y resolver los principales problemas que un administrador se encuentra al poner en funcionamiento un servidor. Se aprenderá a configurar un servidor GNU/Linux describiendo los principales servicios utilizados para compartir archivos, páginas web, correo y otros que veremos más adelante. La herramienta de configuración Webmin, que se detalla en uno de los últimos capítulos es independiente de la distribución GNU/Linux que utilicemos y nos permitirá administrar de forma transparente diferentes distribuciones, con la ventaja que eso supone si alguna vez cambiamos de distribución. Cuadro 1: Objetivos del proyecto Estudiar el entorno de composición de textos L A TEX Analizar e instalar las distribuciones Linux más importantes Estudiar la compilación de kernels Analizar y configurar los servicios para usuarios Linux y Windows Establecer sistemas de protección Realizar pruebas de seguridad del servidor Documentar el proyecto Marco histórico Como se especifica en [BB00], Linux hizo su aparición en 1991 cuando el finlandés Linus Torvalds decidió publicar en Internet su proyecto de carrera, animando a la comunidad internacional de programadores a mejorarlo. Nació como una mejora de Minix, una versión de Unix para ordenadores PC basados en el procesador 8086 de Intel, Linux por su parte utilizaba el procesador 386SX de Intel. Posiblemente una de las explicaciones del éxito de Linux es GNU 1 que junto con la FSF 2 (Free Software Fundation), tratan de promover el desarrollo de programas cuyo código sea público y compartido. Una de las principales aportaciones GNU fue Linux, un sistema operativo de libre distribución. A partir de 1994 emperzaron a aparecer las primeras distribuciones de CD-ROM, junto con el código fuente del sistema operativo, se disponía de diversas utilidades y aplicaciones sin tener que descargarlas. Ese año aparecieron los primeros grupos locales de usuarios de Linux y la primera revista on-line especializada. Al año siguiente se empezó a trabajar en las primeras versiones de Linux para plataforma no Intel y los primeros desarrollos de instaladores parcialmente automáticos. A partir de 1996 Linux comienza a difundirse de forma más general en España, año en el que se inicia el proyecto de documentación de Linux en catellano (LUCAS) y se comienzan a organizar los primeros grupos de usuarios. El futuro es muy prometedor, cada vez es mayor el número de fabricantes de software y hardware que han mostrado un creciente interés. 1 GNU: GNU no es Unix. Definición recursiva que representa el humor informático en su máxima expresión 2 FSF: Fundación para el software libre. Es el principal contribuidor del Proyecto GNU, depende de donaciones privadas y se dedica a preservar, proteger y promover los derechos de los usuarios y su libertad para usar, estudiar, copiar, modificar y redistribuir software. Apoya la libertad de expresión, prensa y asociación en internet, el derecho a usar software criptográfico en comunicaciones privadas y el derecho a escribir software sin los impedimentos del monopolio.

6 viii Servidor Linux para conexiones seguras de una LAN a Internet Requisitos mínimos Linux Probablemente la configuración mínima sobre la que Linux sea capaz de funcionar sea un 386SX con 2 Mb de memoria RAM y una disquetera de 1.44, aunque con estas características simplemente podremos arrancar el sistema y poco más. Una configuración más realista debería incluir 4Mb de Ram si no vamos a utilizar el entorno gráfico, 8Mb en caso contrario y un mínimo de 40MB de espacio en disco, aunque en las distribuciones actuales el espacio debería ser mayor de unos 300Mb. Cantidades ridículas si las comparamos con los dispositivos disponibles actualmente, pero que permiten reutilizar materiales más antiguos de los que se pueda disponer. Frente a estos requerimientos, se encuentran los sistemas Windows, con unos requerimientos 1 desorbitados. Linux soporta cualquier CPU compatible con los procesadores x86 de Intel, pudiéndose encontrar versiones que funcionan con procesadores 680x0 de Motorola utilizados en ordenadores Amiga y Atari. También son compatibles con Linux muchos ordenadores basados en Alpha, ciertas máquinas Sparc, las máquinas basadas en PowerPC como por ejemplo los ordenadores Macintosh de Apple, así como ARM, MIPS y algunos tipos de agendas electrónicas, teléfonos y consolas de juegos. Notas Previas Se van a tomar varias la siguiente notación para el documento: Cuando aparezcan frases que el usuario pueda introducir por teclado se hará notar por el tipo de letra mecanográfica, Verbatim Al hacer referencia a un comando que deba de ser introducido por una cuenta con privilegios de root, irá precedido por el carácter # Al hacer referencia a un comando que puede a ser ejecutado por un usuario cualquiera del sistema, si tiene privilegios para ello, irá precedido por el carácter $ Cuando se muestran códigos el carácter # al inicio de la frase especifica que esa frase concreta es un comentario dentro del código. 1 WindowsXP: Procesador 233Mhz, 64Mb Ram y 1.5 Gb de disco; Windows2003 Server: Procesador 550Mhz, 256Mb Ram y 1.5 Gb de disco

7 Índice general Introducción IV I Tareas previas 1 1. Planificación Fases del proyecto Esquema temporal Selección de Herramientas Selección de Hardware Servidor Clientes Selección de la distribución Distribuciones Linux Pruebas Distribución elegida Selección del Software Planner L A TEX Kile Prosper Programas gráficos II Instalación base Instalación de la distribución Proyecto Debian Unstable Testing Stable Recomendaciones Debian Sarge Debian Woody Actualización de Woody a Sarge Primeros pasos Particionar el disco Gestores de arranque Usuarios Añadir nuevos usuarios al sistemas Añadir grupos al sistema

8 x Servidor Linux para conexiones seguras de una LAN a Internet Bases de datos de usuarios Permisos de archivos Tipos de archivo Modificar los permisos Permisos especiales: SUID, SGID y bit de persistencia Cambiar un archivo de propietario o grupo Instalación de aplicaciones Compilación de paquetes desde archivos fuente Dpkg: Instalador de paquetes precompilados Apt: Gestor de paquetes Debian Alien: Convertir paquetes.rpm a.deb (formato Debian) Encontrar paquetes y sus dependencias Problemas al instalar paquetes Shells Tipos de shell Características de la shell Bash Ejecución de procesos en la shell Bash Variables de entorno Configuración del entorno Redireccionamientos Consolas virtuales Kernel Por qué compilar? Acerca de los módulos Kernel-image Kernel-source Instalar un kernel-source Crear un paquete.deb Compilar Kernel Paquetes necesarios Comprobar el hardware disponible Método de compilación Parchear el kernel Consejos para la configuración del kernel Interfaz gráfico X-Window Configuración X-Windows Arrancar X-Windows Gestores de ventanas Entornos de escritorio Kde Gnome Otros entornos de escritorio Infraestructura de redes Arquitectura de redes (Modelo OSI) Direcciones IP Datagramas Encaminamiento IP (router y gateway) Máscaras de red y notación de barra inclinada Subneting (CIDR) Enmascaramiento IP (NAT, Network Adress Translation) Resolución de direcciones

9 Índice general xi ARP (Adress Resolution Protocol) RARP (Reverse Address Resolution Protocol) Protocolos de red, IP ICMP (Internet Control Message Protocol) OSPF (Open Shortest Path First) Protocolo BGP (Border Gateway Protocol) IGMP (Internet Group Management Protocol) Protocolos de transporte UDP TCP Protocolos de aplicación NFS (Network File System) SNMP (Simple network management protocol) DNS (Domain Name Server) SMTP (Simple Mail Transfer Protocol) TELNET (Remote login) FTP (File Transfer Protocol) HTTP (Hyper Text Transport Protocol) Protocolo TCP/IP Configuración de dispositivos de red Etherconf: Configurador gráfico de red Ifconfig: Configurador de red Route: Tablas de redireccionamiento Netstat: Estado de las conexiones Configuración de interfaces usando DHCP Archivo /etc/network/interfaces Direcciónes IP estáticas Direcciones IP dinámicas Interfaz Wifi Interfaz PPPoE Puertas de enlace Interfaces virtuales Reconfiguración de la red Configuración de red durante el arranque Hotplug Ifplugd Resolvconf: Resolución de nombres Archivos de configuración de Hosts Iwconfig: Configuración wireless Resolución de problemas III Instalación de Servicios Servicios de red Servidor DHCP Asignación de direcciones IP Parámetros configurables Implementaciones Anatomía del protocolo Configuración de un servidor DHCP Configuración de un cliente DHCP Configuración gráfica de DHCP, interfaz Webmin BIND: Servidor de nombres DNS

10 xii Servidor Linux para conexiones seguras de una LAN a Internet Para qué necesitamos un DNS? Servicios que activa un DNS Configuración del servidor Traducción de nombres a direcciones IP Configuración gráfica de DNS BIND, interfaz Webmin Seguridad en DNS NIS: Servicio de información de red Funcionamiento básico Servidores NIS Configuración del servidor NIS maestro Cliente NIS Herramientas básicas Problemas de seguridad NFS: Sistema de archivos Linux en red Cliente NFS Montaje automático de particiones NFS Propiedades de las particiones montadas Servidor de NFS Configuración gráfica de NFS, interfaz Webmin Samba: Servicio de conexiones para sistemas Microsoft Compartición de recursos Qué es Samba? Configuración gráfica de Samba, interfaz SWAT Funcionamiento de CIFS Parámetros globales Impresoras Compartición de directorios Limitar acceso de los usuarios Integración de Samba en un dominio NT Configuración de Samba como controlador de dominio Cliente Samba Configuración gráfica de Samba, interfaz Webmin ProFTPD: Servidor FTP Servidor ProFTP Configuración gráfica de ProFTP, interfaz Webmin Clientes FTP Servicios de usuario Cuotas de usuario Arrancar el sistema de cuotas Asignar cuotas a los usuarios Configuración gráfica de Quote, interfaz Webmin Cups: Servidor de impresión Servidor Cups Servidor Cups para Samba Clientes Linux Clientes Microsoft Solucionar problemas Servidor Web Servidor Apache Apache-SSL: Conexiones seguras Creación de un servidor web seguro Apache 2.x Ataques al servidor Web

11 Índice general xiii Servidor de correo Exim: Correo corporativo Fetchmail: Correo externo Horde: Webmail Protocolo IMAP Filtrado de correo, eliminar virus y Spam con Procmail ClamAV: Antivirus para correo SpamAssassin: Filtro basado en reglas Bogofilter: Filtro bayesiano Jabber: Mensajería instantánea para corporaciones Servidor Jabber Configuración gráfica de Jabber, interfaz Webmin Clientes Jabber Comunicaciones seguras Shell seguro: OpenSSH Cliente OpenSSH Servidor OpenSSH Criptografía y cifrado Tipos de cifrado Estándares generales Aplicaciones de la criptografía Protocolos de cifrado OpenPGP: Aplicación de cifrado Herramientas de seguridad Herramientas básicas Ping Traceroute Whois Dig Finger Firewall o cortafuegos Políticas de seguridad Modos de configuración IPTables Squid: Proxy transparente Bastille Linux: Herramienta de seguridad Ejecución Modos de funcionamiento Copias de seguridad Dispositivos de cinta Mt Dump y Restore Configuración gráfica de backups, interfaz Webmin K3B: Grabación de CDs y DVDs Sistemas de detección de intrusiones Tipos de IDS NIDS (Network Intrusion Detection System) IDS (Detección de actividades anómalas) IPS (Intrusion Prevention System) Ubicación del NIDS El problema de los falsos positivos de NIDS Obtener lo máximo del IDS

12 xiv Servidor Linux para conexiones seguras de una LAN a Internet Configuración apropiada del sistema Ajuste del IDS Herramientas de análisis IDS IDS Snort (NIDS) Características básicas Instalación Modos de ejecución Modos de alerta Optimizar la configuración Clases de reglas Ejecutar como servicio del sistema Configuración gráfica de Snort, interfaz Webmin Personalizar reglas Detección de intrusiones en el host Integridad de archivos: IDS Tripwire ACIDlab: Analizar alertas IDS Logcheck: Analizar logs PortSentry: Detectar escaneos de puertos Detectores de sniffers Neped Sentinel Chkrootkit: Detector de rootkits HoneyPots: Entretener a los atacantes Cómo funcionan? Ventajas y desventajas Utilidades de honeypots Tipos de honeypots Otras características Honeynets: alta interacción Honeyd: baja interacción Redes inalámbricas Estándar (Wifi) Peligros de las LAN inalámbricas El fenómeno del Wardriving Seguridad en redes inalámbricas Clave WEP (Wired Equivalente Privacy) Clave WPA (Wifi Protected Access) Clave WPA2 (Estándar i) Medidas preventivas Servidor Radius: FreeRadius Configurar FreeRadius con EAP-TLS Generar los certificados Comprobar el funcionamiento de FreeRadius Configurar AP (Router 3Com) Clientes Linux: WPA-Supplicant Clientes Windows: WindowsXP + SP Herramientas de seguridad Descubrir redes ilegales e intrusos: Kismet Wireless Desencriptar claves inalámbricas WEP: Airsnort Servicio de administración por Web: WebMin Usuarios de Webmin Secciones Webmin Módulos de Webmin

13 Índice general xv 16.Servicios de monitorización del sistema Monitor del sistema: Top Rendimiento del sistema CPU, dispositivos y particiones de E/S: iostat Memoria: free Memoria virtual: vmstat Disco: df, du Usuarios y sus procesos: w Gestionar procesos Visualizar procesos: ps Enviar signals a procesos: kill Modificar prioridades: nice Terminal de root con prioridad máxima Programación de tareas At Cron Tareas periódicas Anacron IV Valoración final Pruebas del sistema Nessus: Escáner de vulnerabilidades Configurar el programa Ejecución de Nessus Otros interfaces de configuración Nmap: Escáner de red y puertos Características básicas Tipos de escaneado Opciones de descubrimiento Opciones de ajuste de frecuencia de Nmap Otras opciones de Nmap Salida de Nmap Configuración gráfica de Nmap, interfaz Nmapfe Pruebas de carga Estudio Económico Recursos Costes Resumen económico Modificaciones a los costes económicos Conclusiones 311 V Apéndices 315 A. Comandos básicos 317 B. Debian en castellano 319 C. Archivos de configuración 321 D. Por qué Debian no tiene rc.local? 325

14 xvi Servidor Linux para conexiones seguras de una LAN a Internet E. Puertos por defecto 327 F. Manual del editor Vim (Vi mejorado) 329 G. Guía rápida de IPTables 331 Debian Sarge, nueva versión estable 333 Licencia CC - Reconocimiento-CompartirIgual 335 Páginas Web 339 Bibliografía 343

15 Índice de figuras 1.1. Planificación Planner, distribución de recursos Planner, diagrama temporal Editor Kile Prosper, tipos de transparencias IP, rango de direcciones IP, direcciones reservadas IP, cabecera del datagrama UDP, cabecera del datagrama TCP, cabecera del datagrama DHCP, módulo Webmin DNS BIND, módulo Webmin NIS, módulo Webmin NFS, módulo Webmin Samba, interfaz gráfica SWAT Samba, módulo Webmin ProFTPD, módulo Webmin Quota, módulo Webmin Cups, interfaz gráfica de configuración Cups, impresora HP Apache, módulo Webmin Apache, parametros de configuración Apache, módulo HtAccess Webmin Webalizer, módulo Webmin Apache, servidores virtuales Apache, compartición de carpetas Apache, módulos instalados Exim, monitor con la interfaz Webmin Fetchmail, módulo Webmin

16 xviii Servidor Linux para conexiones seguras de una LAN a Internet Procmail, módulo Webmin Procmail, crear acciones de forma gráfica SpamAssassin, módulo Webmin SpamAssassin, opciones de configuración Jabber, módulo Webmin Kopete, cliente de mensajería instantánea Gaim, cliente de mensajería instantánea SSHD, módulo Webmin Backups, módulo Webmin K3B, grabación de CDs y DVDs Snort, módulo Webmin Acidlab, detalle de una alerta de Snort Logcheck, módulo Webmin PortSentry, módulo Webmin Símbolos urbanos de redes wifi WEP-WPA, comparativa WPA/EAP, funcionamiento WPA, autenticación servidor Radius Servidor Radius, sistema de autenticación Servidor Radius, desvío en el router AirSnort, descifrado de claves WEP Webmin, pantalla de configuración Webmin, pantallas de la interfaz Web Nessus, configuración de la aplicación Nessus, vulnerabilidades del sistema D.1. Runlevels, módulo Webmin G.1. Licencia Reconocimiento-CompartirIgual

17 Índice de cuadros 1. Objetivos del proyecto vii 2.1. Distribuciones Linux Lilo, archivo de configuración /etc/passwd, ejemplo /etc/passwd, descripción de campos /etc/shadow, ejemplo /etc/shadow, descripción de campos /etc/group, ejemplo /etc/group, descripción de campos Tipos de archivos Chmod, Opciones básicas Chmod, opciones especiales Makefile, ejemplo Dpkg, opciones /etc/apt/sources.list, ejemplo Apt, opciones Variables habituales del sistema Kernel, paquetes básicos Kernel 2.6, paquetes necesarios Método de compilación del kernel /etc/x11/xf86config-4, ejemplo Modelo de referencia OSI Tipos de redes, n. o de hosts por red Notación de barra inclinada en IPs TCP/IP, ejemplo TCP/IP, esquema de transmisión Netstat, opciones /var/yp/makefile, ejemplo Apache, archivos de configuración SSH cliente, opciones Ping, opciones Dig, opciones IPTables, especificaciones de reglas IPTables, comandos IPTables, ejemplo

18 xx Servidor Linux para conexiones seguras de una LAN a Internet /etc/squid/squid.conf, ejemplo Mt, opciones Dump, opciones Restore, opciones Snort, opciones de alerta Snort, archivos de reglas Snort, opciones de personalización Tripwire, máscaras de propiedad Tripwire, máscaras predefinidas en plantillas Acidlab, variables de configuración PortSentry, opciones Estándares inalámbricos Kismet, configuración Kismet, configuración de la interfaz gráfica Kismet, teclas de la interfaz gráfica Webmin, módulos disponibles Ps, opciones Nmap, tipos de escaneo Nmap, opciones de descubrimiento Nmap, configuraciones de frecuencia Nmap, otras opciones Nmap, codificación de color de la salida Recursos del proyecto Costes del proyecto

19 Parte I Tareas previas

20

21 Capítulo 1 Planificación El número de créditos asignados al proyecto es de 22,5 y decidí que cada crédito me supondría una carga de 20 horas, por lo tanto, la planificación ha sido realizada para un total de 450 horas Fases del proyecto Planificación temporal: 20 horas. Mediante la herramienta de gestión de proyectos Planner, se realiza una división temporal de las actividades a realizar. Trabajo preliminar: 40 horas. Se eligen una serie de herramientas y sistemas sobre los cuales se desarrolla el proyecto. Instalación base y configuración: 80 horas. Implementación y configuración del entorno de trabajo. Configuración de los servicios: 120 horas. Basándose en los servicios típicos que implementan los servidores de red, se instalan una serie de servicios estándar para clientes de sistemas operativos Linux y Windows. Pruebas del sistema y conclusiones: 30 horas. Apoyándose en una serie de pruebas de carga se determina la eficiencia real, de los servicios del servidor. Así mismo se utilizan varias herramientas para determinar la seguridad del servidor y comprobar su resistencia a posibles intrusiones o agresiones externas. Aprendizaje del entorno L A TEX: 20 horas. A través de varios libros, que detallo en la bibliografía, se aprende a utilizar el entorno de composición de textos L A TEX para elaborar la documentación del proyecto. Documentación del proyecto: 140 horas. A lo largo del desarrollo de las fases anteriores se realizan una serie de informes parciales que son la base de la memoria del proyecto Esquema temporal Pese a la planificación inicial, en los siguientes esquemas se detallan la cronología real que se siguió en la elaboración del proyecto. 1 PFC: Proyecto fin de carrera

22 4 Servidor Linux para conexiones seguras de una LAN a Internet Figura 1.1: Planificación (I)

23 Capítulo 1. Planificación 5 Figura 1.2: Planificación (II)

24 6 Servidor Linux para conexiones seguras de una LAN a Internet Figura 1.3: Planificación (III)

25 Capítulo 1. Planificación 7 Figura 1.4: Planificación (IV)

26

27 Capítulo 2 Selección de Herramientas En este capitulo explicaré cuales fueron las diferentes herramientas utilizadas para la elaboración del proyecto. En una primera fase se determina el hardware donde se implementa el servidor y los diferentes clientes utilizados en las pruebas En la segunda fase se elige la distribución utilizada y los motivos que me llevaron a su elección En la tercera fase se detalla qué herramientas de apoyo se usó para desarrollar los trabajos Selección de Hardware Pese a que el director del proyecto me ofreció la utilización de material del departamento LSI de la UPC, por mi comodidad, el material escogido fue de mi propiedad. Comprando una parte de él para desarrollar de forma más eficiente las tareas Servidor Como servidor me decidí por la compra de un ordenador portátil, que permitiera desarrollar un servidor portable con más utilidades habituales en los servidores fijos, además de la ventaja de poder portar el proyecto y trabajar en sitios diferentes. Con este sistema se permite a un grupo corporativo itinerante el desarrollo de sus actividades en posibles reuniones fuera de su propio edificio. La conexión y seguridad del sistema queda garantizada gracias al sistema de validación de clientes. El portátil elegido fue un Acer TravelMate 4002 WLMI con procesador Intel Centrino a 1,6 Ghz. con dos tarjetas de red integradas, una ethernet 10/100Mb y otra wifi g de 54Mb que permite sin problemas establecer dos segmentos diferenciados de red. Uno para los usuarios de oficina, es decir los usuarios fijos, y otro para los clientes wifi, dotando al sistema de mayor seguridad. Se presentaron una serie de problemas directamente derivados de esta elección. El hardware era demasiado nuevo y esto provocó una serie de incompatibilidades que se fueron solucionando con la instalación de drivers y parches que no se encontraban en las instalaciones Linux estándar. El servidor realiza también la gestión de la conexión a internet. Esta conexión es suministrada, cuando se encuentra fijo, por un router 3com conectado al switch de la red y que solo responde a las peticiones del servidor Clientes Como clientes se utilizarán varios PC s de sobremesa, conectados mediante cable RJ45 a un switch. PC AMD-Duron a 1,3 Ghz., también de mi propiedad, donde estará situado el principal cliente Linux y Windows del sistema. En este ordenador se realizarón la mayoria de pruebas de conexión a servicios.

28 10 Servidor Linux para conexiones seguras de una LAN a Internet PC AMD-Athlon a 1,2 Ghz. y PC AMD-Athlon a 2,4 Ghz. con clientes Windows, prestados. Portatil Pentium-IV Mobile, con sistema Linux y Windows, para la pruebas de conexión de clientes inalámbricos. Los clientes se utilizaron simultáneamente para realizar las pruebas de carga una vez terminada la implementación del servidor, para comprobar la efectividad del mismo Selección de la distribución Completada la infraestructura hardware, comencé a leer sobre distribuciones de GNU/Linux, buscando cuales eran las más adecuadas para desplegar servidores. A continuación detallo los tipos de distribuciones valoradas: Mepis y Ubuntu (basadas en Debian) son consideradas las mejores para aquellos usuarios nuevos en Linux que quieren empezar a ser productivos lo antes posible, sin tener que aprender todas sus complejidades, son distribuciones orientadas a usuario de escritorio. En el lado opuesto tenemos a Gentoo, Debian y Slackware que son distribuciones más avanzadas que requieren un completo aprendizaje antes de poder ser usadas eficientemente. A medio camino entre ellas se encuentran Mandrake, Fedora (basada en Red Hat) y SuSE, estas dos últimas son distribuciones comerciales. Knoppix y Mepis-LiveCD (basadas en Debian) son un caso a parte, permiten probar Linux sin tener que hacer nada, ya que funciona directamente del CD, sin ninguna instalación Distribuciones Linux Cuadro 2.1: Distribuciones analizadas SimplyMepis Mepis-LiveCD Ubuntu (Warty Warthog 4.10) Gentoo (FreeBSD) Debian Woody 3.r04 - Sarge 3.1) Debian Sarge 3.1) Slackware 10.1 Mandrake 10.1 Fedora Core 3 (Red Hat) SuSE Knoppix 3.7 Mepis y Mepis-LiveCD Fue lanzada por Warren Woodford en julio de Mepis Linux es una fusión entre Debian Sid y Knoppix, una nueva clase de distribución de Linux que se pueda utilizar como CD en vivo, y como distribución completa con un instalador gráfico a disco duro. De esta manera, usuarios pueden probar el producto simplemente booteando desde el CD de Mepis, e instalándolo luego a disco duro solamente si les gusta. Muchas otras distribuciones copiaron esta idea más adelante, pero fue Mepis quien inició el concepto de un CD vivo más un instalador gráfico completo partiendo de un CD. A que se debe el éxito de Mepis? A diferencia de la mayoría de las distribuciones principales de Linux, Mepis viene con muchos paquetes que no son de uso-libre, pero altamente útiles, preconfigurados todos y

29 Capítulo 2. Selección de Herramientas 11 listos para utilizar. Éstos incluyen el driver de video Nvidia, el plugin Flash de Macromedia, Java, varios codecs de multimedia para manejar archivos populares de audio y video y otros usos. Con Mepis Linux, no hay necesidad de buscar el software para Java y después tener que buscar la documentación para descubrir cómo permitir el uso de Java en sus navegadores. Todo está disponible después de la instalación. Esta idea simple resultó ser enormemente popular, no solamente entre los usuarios nuevos de Linux, sino también entre los más experimentados quienes encontraron muy conveniente el no tener que pasar horas post-instalación configurando y afinando el sistema. Aparte de las aplicaciones estándard de Debian y del software no-libre antes citado Mepis Linux tiene excelente auto-detección del hardware. Ubuntu (Warty Warthog) Ubuntu está basada en Debian, pero el planteamiento está inspirado en los principios de la corriente ubuntu, un movimiento humanista encabezado por el obispo Desmond Tutu, premio Nobel de la Paz en Económicamente el proyecto se sostiene con aportaciones de la empresa Canonical del millonario sudafricano Mark Shuttleworth. El proyecto nació por iniciativa de algunos programadores de los proyectos Debian, Gnome y Arch que se encontraban decepcionados con la manera de operar del proyecto Debian. La versión estable era utilizada sólo por una minoría debido a la poca o nula vigencia que poseía en términos de la tecnología Linux actual. Tras varios meses de trabajo y un breve período de pruebas, la primera versión de Ubuntu (Warty Warthog) fue lanzada en el mes de octubre de Los desarrolladores se esfuerzan en ofrecer una propuesta que corrija la problemática que advirtieron en Debian. Las versiones estables se liberan al menos dos veces al año y se mantienen actualizadas. Contribuye al proyecto Debian de manera continua debido a que ambas distribuciones comparten colaboradores de manera oficial. El administrador de escritorio oficial es Gnome y el navegador oficial es Mozilla Firefox. El sistema incluye funciones avanzadas de seguridad y entre sus políticas se encuentra el no activar procesos latentes por omisión al momento de instalarse. Gentoo (FreeBSD) Gentoo Linux fue creada por Daniel Robbins, un conocido desarrollador de Stampede Linux y FreeBSD. La primera versión estable de Gentoo fu anunciada en Marzo del Gentoo Linux es una distribución basada en código fuente. Mientras que los sistemas de instalación proveen de varios niveles de paquetes pre-compilados, para obtener un sistema Linux básico funcionando, el objetivo de Gentoo es compilar todos los paquetes de código en la máquina del usuario. La principal ventaja de esto es que todo el software se encuentra altamente optimizado para la arquitectura de la computadora. También, actualizar el software instalado a una nueva versión es tan fácil como teclear un comando, y los paquetes, mantenidos en un repositorio central, son actualizados a menudo. En la otra cara de la moneda, instalar Gentoo y convertirla en una distribución completa, con los últimos entornos gráficos, multimedia y de desarrollo es un trabajo largo y tedioso, puede durar varios días incluso en una máquina rápida. Debian (Woody - Sarge) Debian GNU/Linux inició su andadura de la mano de Ian Murdock en Debian es un proyecto totalmente no-comercial; posiblemente el más puro de los ideales que iniciaron el movimiento del software libre. Cientos de desarrolladores voluntarios de todo el mundo contribuyen al proyecto, que es bien dirigido y estricto, asegurando la calidad de la distribución. En cualquier momento del proceso de desarrollo existen tres ramas en el directorio principal: estable, en pruebas e inestable (también conocida como sid, nombre que no varía). Actualmente la rama estable es Woody y la rama en pruebas es Sarge. Cuando aparece una nueva versión de un paquete, se sitúa en la rama inestable para las primeras pruebas, si las pasa, el paquete se mueve a la rama de pruebas, donde se realiza un riguroso proceso que dura muchos meses. Esta rama sólo es declarada estable tras una muy intensa fase de pruebas.

30 12 Servidor Linux para conexiones seguras de una LAN a Internet Como resultado de esto, la distribución es posiblemente la más estable y confiable, aunque no la más actualizada. Mientras que la rama estable es perfecta para servidores con funciones críticas, muchos usuarios prefieren usar las ramas de pruebas o inestable, más actualizadas, en sus ordenadores personales. Debian es también famosa por su reputación de ser difícil de instalar, a menos que el usuario tenga un profundo conocimiento del hardware de la computadora. Compensando este fallo está apt-get el instalador de paquetes Debian. Muchos usuarios de Debian hacen bromas sobre que su instalador es tan malo por que solo lo han de usar una vez, tan pronto como Debian está en funcionamiento, todas las actualizaciones, de cualquier tipo pueden realizarse mediante la herramienta apt-get. Slackware Creada por Patrick Volkerding en 1992, Slackware Linux es la distribución más antigua que sobrevive hoy en día. No ofrece extras vistosos, y se mantiene con un instalador basado en texto, y sin herramientas de configuración gráfica. Mientras otras distribuciones intentan desarrollar intarfaces fáciles de usar para muchas utilidades comunes, Slackware no ofrece nada amistoso, y toda la configuración se realiza mediante los archivos de configuración. Es por esto que Slackware solo se recomienda a aquellos usuarios nuevos que deseen perder el tiempo aprendiendo acerca de Linux.A pesar de todo, Slackware tiene una especie de aura mágica para muchos usuarios. Es extremadamente estable y segura, muy recomendada para servidores. Los administradores con experiencia en Linux encuentran que es una distribución con pocos fallos, ya que usa la mayoría de paquetes en su forma original, sin demasiadas modificaciones propias de la distribución, que son un riesgo potencial de añadir nuevos fallos. Es raro que se produzcan lanzamientos de nuevas versiones (aproximadamente una al año), aunque siempre se pueden encontrar paquetes actualizados para descargar después del lanzamiento oficial. Slackware es una buena distribución para aquellos interesados en profundizar en el conocimiento de las entrañas de Linux. Posiblemente, la mejor característica de esta distribución es que si necesitas ayuda con tu sistema linux, encuentra un usuario de Slackware. Es más probable que resuelva el problema que otro usuario familiarizado con cualquier otra distribución. Mandrake Creada por Gal Duval, Mandrake Linux es una distribución que ha experimentado un enorme aumento de popularidad desde su primera versión de julio de Los desarrolladores partieron de la distribución de Red Hat, cambiaron el entorno de escritorio predeterminado por KDE, y añadieron un instalador fácil de usar rompiendo el mito de que linux es difícil de instalar. Las herramientas de detección de hardware de Mandrake y sus programas para el particionamiento de discos son consideradas por muchos como las mejores de la industria, y muchos usuarios se encontraron usando Mandrake allí donde otras distribuciones no habían conseguido entregar la usabilidad necesaria.desde entonces Mandrake Linux ha madurado y se ha convertido en una distribución popular entre los nuevos usuarios de linux y aquellos hogares que buscan un sistema operativo alternativo. El desarrollo de Mandrake es completamente abierto y transparente, con paquetes nuevos que se añaden al directorio llamado cooker a diario. Cuando una nueva versión entra en fase beta, la primera beta se crea a partir de los paquetes que se encuentran en cooker en ese momento. El proceso de pruebas de la beta solía ser corto e intensivo, pero desde la versin 9.0 ha pasado ha ser más largo y exigente. Las listas de correo sobre la versión beta suelen estar saturadas, pero sigue siendo posible recibir una respuesta rápida sobre cualquier fallo o duda que envíes. Como resultado de este tipo de desarrollo se obtiene una distribución puntera y altamente actualizada. Como contrapartida, los usuarios pueden encontrarse con más fallos que en otras distribuciones. Mucha gente encuentra este pero razonable para sus equipos, ellos obtienen las últimas versiones de software y los cuelgues ocasionales de las aplicaciones es algo con lo que pueden vivir. Tan pronto como el desarrollo se completa el software se pone a la libre disposición de la gente desde réplicas en todo el mundo.

31 Capítulo 2. Selección de Herramientas 13 Fedora (Red Hat) Para muchos el nombre de Red Hat equivale a Linux, ya que probablemente se trata de la compañía de linux más popular del mundo. Fundada en 1995 por Bob Young y Marc Ewing, Red Hat Inc. Sólo ha mostrado beneficios recientemente gracias a otros servicios en lugar de a la distribución en si. Aun así, Red Hat es la primera elección para muchos profesionales y parece que seguirá siendo un peso pesado durante mucho tiempo. Afortunadamente se resistieron a realizar ningún plan de rápida expansión durante el boom de las punto-com durante los años , concentrándose en su negocio principal. Este tipo de gestión prudente si sigue así, es propensa a garantizar estabilidad y dependencia.. Qué hace a Red Hat Linux tan especial? Su curiosa mezcla de conservadurismo y paquetes punteros mezclados con muchas aplicaciones desarrolladas en casa. Los paquetes no son los más actuales, una vez se anuncia una nueva versión beta, las versiones de los paquetes se mantienen, excepto para actualizaciones de seguridad. Como resultado se obtiene una distribución bien probada y estable. El programa de betas y las facilidades para enviar fallos están abiertas al público y hay un gran espíritu en las listas de correo públicas. Red Hat Linux se ha convertido en la distribución linux dominante en servidores en todo el mundo. Otra de las razones del éxito de Red Hat es la gran variedad de servicios populares que ofrece la compañía. Los paquetes de software son fácilmente actualizables usando la Red Hat Network, un repositorio oficial de software e información. Una larga lista de servicios de soporte son accesibles en la compañía y, aunque no siempre baratos, tienes virtualmente asegurado un excelente soporte de personal altamente cualificado. La compañía ha desarrollado incluso un programa de certificación para popularizar su distribución, el RHCE (Certificado de Ingeniería de Red Hat), academias y centros examinadores están disponibles en el casi todas las partes del mundo. Todos estos factores han contribuido a que Red Hat sea una marca reconocida en el mundo de la industria de las TI. SuSE SuSE es otra compañía orientada a los escritorios, aunque tiene variedad de otros productos para empresas. La distribución ha recibido buenas críticas por su instalador y la herramienta de configuración YaST, desarrollada por los desarrolladores de la propia SuSE. La documentación que viene con las versiones comerciales, ha sido repetidas veces evaluada como la más completa, útil y usable con diferencia a la de sus competidores. SuSE Linux 7.3 recibió el premio Producto del año 2001 que entrega el Linux Journal. La distribución tiene un gran porcentaje de mercado en Europa y América del norte, pero no se vende en Asia y otras partes del mundo. El desarrollo de SuSE se realiza completamente a puerta cerrada, y no se lanzan betas públicas para probar. Siguen la política de no permitir descargar el software hasta tiempo después de que salgan a la venta las versiones comerciales. A pesar de todo, SuSE no entrega imágenes ISO de fácil instalación de su distribución, usando el software empaquetado para la gran mayoría de su base de usuarios. Actualmente van por la version 9.3 y no la instale porque la única forma de conseguirla era pagando y uno puntos claves era que todo el software fuera libre y gratuito. SuSE no cumplía esos requisitos. Knoppix Knoppix es una distribución CD vivo de Linux basada en Debian y que utiliza como gestor de escritorio KDE. Está desarrollada por el consultor de GNU/Linux Klaus Knopper. Gnoppix es una variante pero incluye como entorno gráfico Gnome en vez de KDE. A diferencia de la mayoría de las distribuciones Linux, no requiere una instalación en el disco duro; el sistema puede iniciarse desde un simple CD de 700 MB. Además, Knoppix reconoce automáticamente la mayoría del hardware del ordenador cuando se inicia. También puede ser instalado en el disco duro utilizando un script de instalación. Y otra posibilidad de hacerlo más persistente es guardar el directorio home en una unidad removible, como un dispositivo de almacenamiento USB. Se puede usar de distintas formas como:

32 14 Servidor Linux para conexiones seguras de una LAN a Internet Para enseñar y demostrar de manera sencilla el sistema GNU/Linux, especialmente como sistema operativo. Probar rápidamente la compatibilidad de hardware bajo Linux antes de comprarlo o utilizarlo, especialmente para tarjetas de vídeo. Utilizar las herramientas incluidas para restaurar un sistema corrupto o sus datos perdidos. Existen versiones íntegramente en español y catalán Pruebas Los CD s vivos arrancaron bien, sobre todo MEPIS con el que me llevé una grata sorpresa, muy simple y funciona casi todo. La distribución Ubuntu estaba claramente orientada a usuario final y no servidor que era mi objetivo, de todas formas es una buena distribución que permite estar siempre actualizado. Gentoo no la llegé a probar debido a las dificultades de instalación que representa la continua compilación de paquetes, paso esencial en esta distribución. Es muy complicado dejarla a punto. Debian y Slackware eran las distribuciones que más se ajustaron a los propósitos del proyecto; sobre todo Debian que cuenta con un gran grupo de soporte y recursos. Pese a ser las menos actualizadas, eso no presenta ninguna dificultad para poder actuar como un servidor, más bien al contrario, son las distribuciones más estables de todas las evaluadas. Mandrake no presentaba el entorno adecuado y Fedora y SuSE, al ser versiones comerciales, no cubrían los requisitos prefijados Distribución elegida Pese a la dificultad de instalación y configuración me decanté por Sarge del proyecto Debian, debido a su carácter al 100 % libre y la gran cantidad de aplicaciones que adjunta. Otro factor decisivo fue el soporte que tiene dicha distribución, mantenida por multitud de desarrolladores. Pese a ser una versión en pruebas, se encuentra en la última fase. La rama de desarrollo Sarge, lleva abierta desde el 2002 y la liberación de la versión estable se plantea inminente Selección del Software Las herramientas escogidas no lo han sido al azar, son consecuencia directa de la filosofía del proyecto, donde el uso exclusivo de software libre y gratuito era un objetivo prioritario. Paso a detallar el software que utilizo: Planner Programa de gestión de proyectos que permite crear planes para el proyecto y seguir su progreso, pudiendo colocar sellos temporales Lista de características Calendario Costes de proyecto Gestión de tareas

33 Capítulo 2. Selección de Herramientas 15 Gestión de recursos Figura 2.1: Distribución de recursos Diagramas de ghant Figura 2.2: Diagrama temporal de Ghant L A TEX Como se menciona en [CSLSMR + 03] L A TEX es un conjunto de sentencias escritas en un lenguaje de programación llamado TEX. Este no es un lenguaje de programación usual, sino uno orientado a la escritura de textos de excelente calidad. TEX no es un editor de la familia WYSIWYG, término empleado para denominar a los editores que sólo trabajan sobre la pantalla del computador, dando un formato visual al texto, y en los cuales lo que ves es lo que tienes. Muy al contrario, en TEX se escribe el texto acompañado de órdenes que el compilador, posteriormente, interpreta y ejecuta para proporcionar un texto perfectamente compuesto. A estas ventajas hay que añadir otra, es gratuito; Donald E. Knuth el creador de TEX, lo liberó en Octubre de El entorno L A TEX desarrollado por Leslie Lamport, lo creó en 1982, con la intención de simplificar la tarea a aquellos que desean utilizar TEX. Añade a TEX una colección de comandos que simplifican el mecanografiado, permitiendo al usuario concentrarse en la estructura del texto, en vez de en los comandos para dar formato. Tal es la calidad de L A TEX que muchas editoriales permiten a sus autores escribir libros en L A TEX, dándoles un archivo base y unas directrices sobre la elaboración de los textos. Una de las ventajas de LaTeX es que puede ser exportado muy fácilmente a Portable Document Format (PDF) y PostScrip. Utilizaré este entorno de composición de textos para desarrollar la documentación derivada del proyecto.

34 16 Servidor Linux para conexiones seguras de una LAN a Internet Kile Kile es un editor de textos para L A TEX desarrollado por P. Brachet. Tiene una completa interfaz con diversas facilidades que ofrece a un usuario novel un entorno amigable. Sus principales características son las siguientes: Figura 2.3: Imagen del editor Kile Los comandos de L A TEX están disponibles a través de menús, botones y combinaciones de teclas. La ayuda integrada en el programa nos permitirá saber qué macro usar ante una necesidad concreta. Para una edición cómoda de los ficheros de texto, contamos con resaltado de sintaxis, funciones de búsqueda (incremental o no), reemplazo, deshacer,... Los más de 370 símbolos matemáticos posibles son accesibles mediante botones y menús. Corrector ortográfico a través de ispell Asistentes para la creación de distintos tipos de documentos L A TEX(cartas, artículos, etc). Manejo de bibliografías a través de BibTEX. Navegación mediante menús de la estructura de un documento o proyecto. Facilidades para compilar y depurar ficheros L A TEX. Integración con herramientas externas para la visualización e impresión de los documentos editados en distintos formatos: DVI, Postscript o PDF. Interfaz con programas de dibujo como xfig o gnuplot Prosper La herramienta Prosper, desarrollada por F. Goualard y P.M.Neergaard es una clase para L A TEX que permite crear presentaciones electrónicas con una excelente calidad. Con ella se pueden producir documentos en formato PDF para realizar exposiciones con un monitor o con un sistema de proyección de vídeo. También se puede producir documentos PostScript para imprimir la presentación sobre transparencias para exposiciones con retroproyector. Dispone de multitud de estilos de presentación y la posibilidad de conseguir efectos de animación en pantalla haciendo que el contenido de la misma aparezca o desaparezca en distintas etapas (de forma incremental).

35 Capítulo 2. Selección de Herramientas 17 Figura 2.4: Varios estilos de transparencias Programas gráficos Las imágenes y videos que he utilizado en la documentación y en las transparencias se han generado con los siguientes programas: KSnapshot: Para capturar pantallas, es mucho mejor que la típica tecla Impr-pant gracias a sus múltiples opciones, entre las que se encuentran un temporizador y poder elegir que parte de la pantalla se va a capturar; pudiendo seleccionar entre toda la pantalla, la ventana activa o una región concreta. En resumen, una herramienta muy útil para la redacción de tutoriales. The Gimp: Es el programa estrella de GNU para la creación y el retoque fotográfico de imágenes, comparable al famoso programa comercial Adobe Photoshop. Xvidcap y Mencoder: Permite capturar una secuencia de imágenes de una parte de la pantalla, ya sea una ventana o una región. De esta manera, obtendremos una colección de imágenes del área capturada separadas temporalmente un número de fps 1 que se puede especificar. El programa Mencoder forma parte de Mplayer, que es un conjunto de aplicaciones para la grabación y reproducción de vídeos, dvd s y otros. Una vez obtenida la colección de imágenes que conformaran los frames del vídeo se utilizará el programa Mencoder para componerlo. 1 fps: frames por segundo

36

37 Parte II Instalación base

38

39 Capítulo 3 Instalación de la distribución Existen varias formas de realizar la instalación de la distribución: Desde CD-ROM: con las imágenes oficiales Desde disquetes: carga un núcleo y permite hacer una instalación base por internet si la tarjeta de red es soportada. Desde dispositivo USB: crea un mini sistema base Desde el disco duro: a partir de unos ficheros locales. Desde red: Se realiza a través de TFTP desde una máquina a la que se tiene acceso, si la tarjeta de red es soporta. La manera más sencilla, con mucho, de instalar Debian GNU/Linux, es usar un juego oficial de CDs o DVDs de Debian, las imágenes pueden ser descargadas desde el servidor Debian (www.debian.org/distrib/ ) o desde una replica del mismo. Si el sistema no permite arrancar desde el CD, se puede utilizar una estrategia alternativa (disquete o disco duro) para hacer el arranque inicial del instalador del sistema, los ficheros para arrancar mediante otros medios también se encuentran en el CD. Una vez arranque el instalador, se pueden obtener el resto de ficheros desde el CD. Se puede obtener más información respecto a la instalación de Debian en [PRG + 02] y [eidd04] Proyecto Debian El proyecto Debian GNU/Linux posee tres ramas: stable, testing y unstable. En los siguientes apartados se detallan las diferencias entre ellas Unstable Se llama Sid y como su nombre indica es la distribución más inestable porque contiene paquetes muy nuevos. La utilizan los desarrolladores de Debian para depuración. Debian Sid contiene software muy reciente y puede traer problemas de estabilidad graves Testing Actualmente se llama Sarge, posee el software que ya pasó un tiempo de prueba en inestable pero que aún debe pasar una fase de pruebas para consideralo estable, es la utilizada por aquellos que desean disfrutar de las nuevas características de Debian y de las versiones de software más reciente sin esperar a la liberación oficial de una nueva versión. Es el equivalente a la distribución más actual de las demás distribuciones (Mandrake, Fedora, Slackware, etc).

40 22 Servidor Linux para conexiones seguras de una LAN a Internet Stable Actualmente es la versión 3.0, tambień llamada Woody y como su nombre indica es la más estable de las distribuciones Debian, ya que su software contenido ya superó varios meses de pruebas y correcciones. En sistemas de producción, donde no se toleran problemas de estabilidad, se recomienda el uso de Debian Woody Recomendaciones En entornos de prueba y/o desarrollo se recomienda utilizar Debian Woody o Sarge. Para PCs de escritorio se recomienda utilizar Debian Sarge, ya que contiene versiones de software bastante recientes y ya probadas un tiempo en la rama inestable. He elegido Sarge, ya que esta rama de desarrollo lleva abierta desde el 2002 y la liberación de la versión estable se plantea inminente Debian Sarge Este método de instalación se utilizó en el cliente de pruebas. En el servidor se instaló Debian Woody y se realizó una actualización debido a incompatibilidades de Hw. Método de instalación Mediante el siguiente esquema detallo el sistema de instalación. 1. Configurar la BIOS para arrancar desde el DVD 2. Iniciar el instalador boteando desde el DVD 3. Arrancar el instalador con los métodos y parámetros más adecuados al Hw disponible. Presionando Enter se arranca con los parámetros por defecto que incluyen el kernel 2.6 de GNU/Linux. 4. Elegir idioma 5. Seleccionar país 6. Confirmar mapa de teclado 7. Detectar Hw y cargar componentes. 8. Configurar la red 9. Particionar discos. Se puede escoger un particionado automático o si se elige manual, al menos se han de crear 2 particiones, una raíz y otra de intercambio 10. Formar particiones y realizar la instalación base 11. Instalar el núcleo 12. Instalar el gestor de arranque, se instala Grub como predeterminado. Si se disponen de varios sistemas operativos se puede especificar un arranque múltiple 13. Retirar el DVD y reiniciar para continuar la instalación 14. Arrancar y configurar el sistema base 15. Configurar zona horaria

41 Capítulo 3. Instalación de la distribución Configurar usuarios (root y usuarios corrientes) 17. Configurar APT 18. Instalar y configurar paquetes adicionales 19. Configurar correo Si durante la instalación se producen errores o cuelgues se pueden especificar opciones restrictivas al iniciar el instalador. En mi caso, no conseguí que ninguna opción instalara el sistema en el servidor Debian Woody En la instalación se incluyen varias imágenes de núcleos disponibles, la mayoría basados en el kernel : Vanilla: La imagen estándar de Debian Woody, instala el kernel Incluye casi todos los controladores soportados por Linux, compilados como módulos. Compact: Igual que Vanilla, pero eliminando controladores de dispositivo que se usan con menos frecuencia. Idepci: Un núcleo que sólo soporta dispositivos IDE y PCI (y unos pocos ISA). Se debe usar este núcleo si los controladores SCSI producen cuelgues al arrancar, debido a conflictos de hardware o a un compotamiento inadecuado de los controladores o placas de su sistema. Bf2.4: Usa el kernel 2.4 y da soporte a hardware nuevo ausente en las otras imagenes. Soporta más hardware USB, controladoras IDE modernas, y los sistemas de ficheros Ext3 y Reiser. Esta fue una de las partes más desesperantes del proyecto, debido a incompatibilidades de Hw, tuve que instalar un versión diferente de la planificada y al arrancar Debian Woody con cualquiera de los kernels disponibles, no cargaba el driver adecuado para la pantalla TFT. Esto supuso tener que utilizar otra pantalla diferente, conectada a la salida VGA del portatil, para realizar toda la instalación, hasta poder actualizar el kernel a una versión 2.6. El arranque que utilicé fue Bf2.4, para que fuera soportado un mayor número de dispositivos desde el inicio, aunque el problema de la pantalla persistía. Este es un pequeño resumen de los pasos a seguir en la instalación de Debian Woody: 1. Configurar la bios para arrancar desde CD 2. Arrancar el sistema de instalación, boteando desde el CD 3. Seleccionar la imagen de núcleo deseada 4. Configurar teclado 5. Crear y montar particiones para Debian en el disco duro, con un mínimo de dos, una para el sistema base y otra de intercambio 6. Seleccionar qué controladores de periféricos cargar 7. Configurar la interfaz de red 8. Iniciar la instalación y configuración automática del sistema base. 9. Configurar el gestor de arranque, en este caso Lilo. Si se dispone de varios sistemas operativos se puede espedificar arranques multiples 10. Arrancar el sistema recién instalado y hacer las configuraciones finales 11. Instalar taréas y paquetes adicionales, a la elección de cada usuario. Una vez terminada la instalación estándar, es necesario instalar un kernel más avanzado (2.6 o superior) que nos detecte todos los dispositivos de los que dispone nuestro sistema, y si todavía no los soporta, parchearlo con los drivers del fabricante.

42 24 Servidor Linux para conexiones seguras de una LAN a Internet 3.4. Actualización de Woody a Sarge Esto se realiza mediante la herramienta APT y se puede enfocar de dos formas. Si disponemos de los DVD s o CD s de Debian Sarge, añadiéndolos al archivo de fuentes de APT (#apt-cdrom add). Si disponemos de internet, añadiendo la dirección de una réplica de los archivos de Debian Sarge al archivo de fuentes de APT. La forma de hacerlo se detalla en el siguiente capítulo. Una vez tenemos agregadas las fuentes de la nueva distribución en el APT, solamente tenemos que introducir los siguientes comandos: #apt-get update #apt-get upgrade #apt-get dist-upgrade

43 Capítulo 4 Primeros pasos En los apartados que se presentan a continuación establecen varias cosas que hay que tener en cuenta para administrar un servidor Linux Particionar el disco En Linux cada partición se monta en tiempo de arranque. El proceso de montaje hace disponible el contenido de esa partición dentro del sistema. El directorio raíz (/) será la primera partición. Las particiones, cuando se montan, aparecen como un árbol de directorios unificado en vez de unidades separadas, el software de instalación no diferencia una partición de otra. Sólo hay que preocuparse de en que directorio esta cada archivo. Como consecuencia de ello, el proceso de instalación distribuye automáticamente sus archivos por todas las particiones montadas, así que las particiones montadas representan diferentes partes del árbol de directorios donde se sitúan normalmente los archivos. Debido a que estamos configurando un servidor, debemos conocer que directorios es necesario tener en particiones separadas: /usr, donde se sitúan todos los archivos de programa. /home, donde están los directorios de todos los usuarios. Esto es útil por si los usuarios consumen el disco entero y dejan a otras aplicaciones críticas sin espacio (tales como los archivos log). /var, el destino final de los archivos log. Debido a que estos pueden verse afectados por usuarios exteriores (por ejemplo personas que visiten una página web), es importante situarlos en otra partición para que nadie pueda realizar un ataque de Denegación de servicio (DoS) generando tantas entradas que se llene todo el disco. /tmp, donde se sitúan los archivos temporales. Debido a que este directorio está diseñado para que todos los usuarios puedan escribir en él, necesitaremos asegurarnos de que ningún usuario abuse y llene el disco completo. Podemos conseguir esto situándolo en una partición separada. swap. Este es un sistema de archivos no accesible para el usuario. Es donde se almacena el archivo de memoria virtual, tenerlo en otra partición mejora el rendimiento del sistema. Se puede observar por qué es una buena idea crear varias particiones en un disco en lugar de una sola partición grande al estilo de Microsoft. Esto da una idea de por qué un sistema trabaja mejor que el otro.

44 26 Servidor Linux para conexiones seguras de una LAN a Internet 4.2. Gestores de arranque El gestor de arranque indica al ordenador qué sistema operativo o kernel se iniciará y donde se encuentran los archivos necesarios para ejecutarlo. Dependiendo del tipo de distribución escogida se instalará por defecto uno de estos dos gestores de arranque Lilo o Grub. Durante ese proceso se añadirán automáticamente los diferentes sistemas operativos que tengamos instalados en el sistema. Posteriormente los parámetros pueden ser configurados desde consola o mediante la herramienta de administración gráfica Webmin. En el servidor he mantenido Lilo, era un gestor que ya conocía y con el que me sentía cómodo. Paso a detallar los dos gestores según se explican en [BB00]. Lilo Si hemos optado por utilizar Lilo, al terminar el proceso de instalación de Linux dispondremos de un archivo de configuración denominado /etc/lilo.conf el cual podremos editar en cualquier momento para ajustar el menú o comportamiento de Lilo a nuestras necesidades. El archivo está dividido en tres secciones, como se puede observar en el cuadro 4.1. La primera sección contiene opciones globales, como son el sistema operativo por defecto o si queremos que aparezca el menú de selección y el tiempo por defecto. En la segunda sección se especifican los parámetros necesarios para arrancar Linux, indicándose en image y initrd el kernel y las opciones de arranque. La última sección especifica la partición desde donde deberá ejecutarse los otros sistemas operativos que tengamos instalados en el ordenador. Si necesitamos realizar alguna modificación simplemente editaremos el archivo /etc/lilo.conf y posteriormente ejecutaremos el comando lilo para activar los cambios. #/sbin/lilo Cuadro 4.1: Archivo de configuracion /etc/lilo.conf # Global prompt timeout=70 default=kernel-2_6 boot=/dev/hda map=/boot/map install=/boot/map install=/boot/boot.b message=/boot/message lba 32 #Linux image=/boot/vmlinuz label=kernel-2_6 read-only root=/dev/hda3 image=/boot/vmlinuz label=kernel-2_4 initrd=/boot/initrd img read-only root=/dev/hda3 #Windows other=/dev/hda1 optional label=windowsxp Grub Es el gestor de arranque por defecto en Debian Sarge. Es un poco más flexible que Lilo, ya que permite interactuar en caso de arranque inválido. Incluye otras funciones como el soporte de múltiples módulos, interfaz gráfico de arranque, línea de comandos, descompresión automática, soporte para LBA y soporte para terminales entre otras muchas opciones.

45 Capítulo 4. Primeros pasos Usuarios Es muy recomendable crearse un usuario de trabajo dentro del sistema, ya que con el usuario root es posible crear, modificar o eliminar cualquier archivo del sistema operativo. Al utilizar este usuario se podría dañar el sistema en caso de cometer algún error. Más adelante se detalla como crear y administrar usuarios con la herramienta grafica Webmin, pero ahora voy a explicar como se haría desde la línea de comandos Añadir nuevos usuarios al sistemas La instrucción necesaria para crear un nuevo usuario es useradd. #useradd josan Este mandato crea una nueva entrada en el archivo /etc/passwd. Este archivo contiene información como el nombre de usuario, contraseña, directorio de trabajo y shell predeterminado. Es necesario crear una carpeta /home/josan que será el directorio del usuario. #mkdir /home/josan Una vez creado el usuario le deberemos asignar una contraseña, para ello utilizaremos la instrucción passwd. Con ella podemos modificar la contraseña de cualquier usuario si hemos iniciado una sesión de root, o nuestra propia contraseña en cualquier otro caso. #passwd josan,... y introducir la nueva contraseña. Si el sistema esta bien administrado, se ha de almacenar información imprescindible de los usuarios, como el n. o de tlf. y el lugar donde encontrar físicamente a ese usuario. Esto es necesario por si se compromete la seguridad del sistema y necesitamos ponernos en contacto con el usuario a través de vías no informáticas. Para cambiar la información de una cuenta se usa el comando chfn. #chfn josan Y para visualizar esa informacion finger. #finger josan Añadir grupos al sistema Para añadir un nuevo grupo al sistema se utiliza el siguiente comando: #groupadd -g [GID] [nombre_grupo],... donde GID es el n. o de grupo que se asignará. Si tenemos usuarios ya creados y deseamos añadirlos o eliminarlos de un grupo utilizaremos: #gpasswd -a [nombre_usuario] [nombre_grupo],... añadir usuario #gpasswd -d [nombre_usuario] [nombre_grupo],... eliminar usuario

46 28 Servidor Linux para conexiones seguras de una LAN a Internet Bases de datos de usuarios Ahora vamos a especificar con más detalle como es almacenada la información de los usuarios dentro del sistema. Esta información es almacenada en tres archivos: /etc/passwd: Información de los usuarios /etc/shadow: Claves encriptadas de los usuarios /etc/group: Grupos del sistema Archivo /etc/passwd Es usado para establecer y configurar las cuentas. Es un archivo de texto plano que puede ser consultado por todos los usuarios del sistema. Y su contenido podría ser algo parecido al siguiente: Cuadro 4.2: Ejemplo de un archivo /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh proxy:x:13:13:proxy:/bin:/bin/sh postgres:x:31:32:postgres:/var/lib/postgres:/bin/sh www-data:x:33:33:www-data:/var/www:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh operator:x:37:37:operator:/var:/bin/sh list:x:38:38:mailing List Manager:/var/list:/bin/sh irc:x:39:39:ircd:/var/run/ircd:/bin/sh gnats:x:41:41:gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh nobody:x:65534:65534:nobody:/nonexistent:/bin/sh josan:x:1000:1000:jose Antonio Escartin Vigo:/home/josan:/bin/bash identd:x:100:65534::/var/run/identd:/bin/false sshd:x:101:65534::/var/run/sshd:/bin/false Cada línea representa un usuario. La información de cada usuario está dividida en seis campos delimitados por el carácter dos puntos (:). La descripción de cada uno de los campos aparece listada en la Tabla 4.3. Cuadro 4.3: Descripción de los campos del archivo /etc/passwd Campo Descripción 1 Nombre de usuario o identificador de inicio de sesión. Tiene que ser único. 2 Contraseña encriptada de usuario. Una x minúscula indica que se usan contraseñas ocultas y que estas estarán en el archivo /etc/shadow 3 Identificador de usuario (UID). Este n. o ha de ser único 4 Identificador de grupo (GID). Aquí solo aparece el grupo principal del usuario, aunque puede pertenecer a más de un grupo 5 Campo de comentarios 6 Directorio /home del usuario. 7 Shell de trabajo del usuario. Habitualmente es la shell bash Un carácter * en la contraseña indica que la cuenta esta deshabilitada temporalmente. Es una buena práctica no sólo añadir el carácter, sino indicar el motivo por el que ha sido deshabilitada. Se pueden añadir nuevas cuentas de usuario editando directamente el archivo /etc/passwd, pero para crear las contraseñas hay que usar la utilidad /usr/bin/passwd ya que esta es cifrada.

47 Capítulo 4. Primeros pasos 29 Archivo /etc/shadow Es el archivo de contraseñas ocultas. Este archivo añade un nivel de seguridad adicional, ya que la encriptación de la clave de usuario solo es visible por el root. Cuando todavía no existían las contraseñas ocultas, la contraseña, aunque cifrada, se almacenaba en el archivo /etc/passwd. Este archivo puede ser leído por cualquier usuario del sistema, pero sólo modificado por el usuario root. Esto representa un problema porque significa que cualquiera puede ver una contraseña cifrada e intentar conseguir una clave que genere ese cifrado. Para combatir esta amenaza potencial, se definió el concepto de contraseñas ocultas. Cuadro 4.4: Ejemplo de un archivo /etc/shadow root:$1$wzpar6nw$rtlx6r4qjzt6kgji8efjl0:12890:0:99999:7::: daemon:*:12890:0:99999:7::: bin:*:12890:0:99999:7::: sys:*:12890:0:99999:7::: sync:*:12890:0:99999:7::: games:*:12890:0:99999:7::: man:*:12890:0:99999:7::: lp:*:12890:0:99999:7::: mail:*:12890:0:99999:7::: news:*:12890:0:99999:7::: uucp:*:12890:0:99999:7::: proxy:*:12890:0:99999:7::: postgres:*:12890:0:99999:7::: www-data:*:12890:0:99999:7::: backup:*:12890:0:99999:7::: operator:*:12890:0:99999:7::: list:*:12890:0:99999:7::: irc:*:12890:0:99999:7::: gnats:*:12890:0:99999:7::: nobody:*:12890:0:99999:7::: josan:$1$tulrdvd7$6kpchl4xyliynjbt4bpxf0:12890:0:99999:7::: identd:!:12890:0:99999:7::: sshd:!:12890:0:99999:7::: messagebus:!:12891:0:99999:7::: hal:!:12891:0:99999:7::: gdm:!:12893:0:99999:7::: saned:!:12905:0:99999:7::: Está formado por entradas de una línea con campos delimitados por el carácter dos puntos (:). Algunos de estos campos contendrán aparentemente números raros, demasiado altos para ser correctos. Estos campos están referidos a la fecha de comienzo de la era de la computación, el 1 de enero de Cuadro 4.5: Descripción de los campos del archivo /etc/shadow Campo Descripción 1 Nombre de la cuenta de usuario 2 Campo de contraseña cifrada 3 Días transcurridos desde el comienzo de la era hasta la fecha en que la contraseña fue cambiada por última vez 4 Número de días tras que deben transcurrir hasta que la contraseña se pueda volver a cambiar 5 Número de días tras los cuales hay que cambiar la contraseña (-1 significa nunca) 6 Días antes de la expiración de la contraseña en que se avisará al usuario al inicio de la sesión 7 Días despues de la expiración de la contraseña en que la cuenta se inhabilita si la contraseña no se ha cambiado correctamente. 8 Días transcurridos desde la era en que la cuenta se inhabilitará (con independecia de cambios de la contraseña) 9 Campo reservado Se utilizará change, la utilidad de cambio de caducidad, para modificar estos valores predeterminados. Para realizar el cifrado de las contraseñas es mejor usar MD5 que el antiguo método DES, ya que el primero permite contraseñas más largas y si esta es buena implica un tiempo mucho mayor para descifrarlas.

48 30 Servidor Linux para conexiones seguras de una LAN a Internet Archivo /etc/group El objetivo de la existencia de un identificador de grupo (GID) es agrupar de forma lógica recursos o archivos para asignarlos a miembros de un grupo determinado. Los archivos de un grupo pueden ser compartidos entre los miembros de ese grupo, protegiéndose contra el acceso de otros usuarios que no deban acceder a esos recursos. Cuadro 4.6: Ejemplo de un archivo /etc/group root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4: tty:x:5: disk:x:6: lp:x:7:lp mail:x:8: news:x:9: uucp:x:10: proxy:x:13: kmem:x:15: dialout:x:20: fax:x:21: voice:x:22: cdrom:x:24:hal floppy:x:25:hal tape:x:26: audio:x:29:josan dip:x:30: postgres:x:32: www-data:x:33: backup:x:34: operator:x:37: list:x:38: irc:x:39: src:x:40:josan gnats:x:41: shadow:x:42: utmp:x:43: video:x:44: staff:x:50: games:x:60: users:x:100: nogroup:x:65534: josan:x:1000: man:*:12: plugdev:*:46: ssh:x:101: crontab:x:102: messagebus:x:103: hal:x:104: lpadmin:x:105: gdm:x:106: camera:x:107: scanner:x:108: saned:x:109: Cada línea del archivo /etc/group indica un grupo. Se puede observar que muchos de los grupos predeterminados corresponden directamente a un servicio específico. Cada cuenta de usuario tiene que pertenecer como mínimo a un grupo. Cuadro 4.7: Descripción de los campos del archivo /etc/group Campo Descripción 1 Nombre de grupo 2 Contraseña de grupo. No suele usarse 3 Número de identificación de grupo 4 Lista de usuarios asociadas a este grupo. Si en el archivo /etc/passwd se ha especificado este grupo, no es necesario que aparezca en la lista. Sólo es para usuarios que su grupo inicial no fuera este

49 Capítulo 4. Primeros pasos Permisos de archivos En Linux hay tres niveles de permisos de archivos y directorios. Estos tres niveles pertenecen a las siguientes categorías: Usuario (el propietario) Grupo Otros Cada nivel o categoría tiene los privilegios asociados de: Lectura Escritura Ejecución Un archivo está identificado por el grupo al que pertenece y su propietario. Cuando realizamos un listado de un archivo, encontramos los siguientes parametros: #ls -l <archivo> - rwx rwx rwx root root 512 Jan 7 10:50 nom_archivo Tipos de archivo El primer carácter identifica el tipo de archivo. Podemos encontrar los siguientes: Cuadro 4.8: Tipos de archivos Carácter Tipo de archivo - Archivo normal (generalmente un archivo binario o de texto ASCII) d Directorio l Enlace simbólico l Dispositivo de carácter l Dispositivo de bloque l Socket (un proceso de escucha de red) p Canalización o pipe con nombre Modificar los permisos Para modificar los permisos de acceso a un archivo se utiliza el comando chmod. Es necesario especificar los tres elementos siguientes: Nivel se va a modificar (propietario, grupo o otros) Permiso se va a modificar (lectura, escritura o ejecución) Archivo o archivos que se van a modificar La tabla 4.9 especifica las opciones del comando chmod. Los permisos pueden ser especificados con letras: #chmod g+w /home/josan/archivo,... da permiso de lectura al grupo #chmod g-w /home/josan/archivo,... quita permiso de lectura al grupo

50 32 Servidor Linux para conexiones seguras de una LAN a Internet Cuadro 4.9: Opciones de chmod Opción Descripción u Propietario g Grupo o Otros a Todos r Lectura x Ejecución w Escritura 0 Sin privilegios 1 Ejecución 2 Escritura 3 Escritura y ejecución 4 Lectura 5 Lectura y ejecución 6 Lectura y escritura 7 Lectura, escritura y ejecución O con números: #chmod 751 /home/josan/archivo Da lectura, escritura y ejecución al propietario; Lectura y ejecución al grupo; Ejecución a otros Permisos especiales: SUID, SGID y bit de persistencia Con un archivo ejecutable, activar el bit SUID de propietario obliga al archivo ejecutable binario a ejecutarse como si lo hubiera lanzado el usuario propietario del archivo y no realmente quien lo lanzó. Normalmente, el usuario root es propietario de los ejecutables binarios con el bit SUID activo, de forma que cualquiera que pueda ejecutar el programa lo ejecuta como usuario root. Cuando un programa es SUID o SGID, una s sustituye a la x que corresponde al bit de ejecución del usuario o grupo. Esto es peligroso pero necesario para algunos programas. Por ejemplo, un usuario normal no puede leer o escribir en el archivo /etc/shadow, para que este usuario normal (sin privilegios) pueda cambiar su contraseña, el ejecutable passwd debe ser SUID del usuario root. El bit SGID funciona del mismo modo para los grupos. Cuadro 4.10: Opciones especiales chmod Opción Descripción s SUID o SGID t Bit de persistencia 0 Sin permisos especiales (predeterminado) 1 Activar el bit de persistencia (t) 2 Activar el bit SGID de grupo (s) 3 Activar el bit SGID de grupo y el de persistencia 4 Activar el bit SUID de propietario 5 Activar el bit SUID de propietario y el de persistencia 6 Activar el bit SUID de propietario y el bit SGID de grupo 7 Activar el bit SUID, el SGID y el de persistencia

51 Capítulo 4. Primeros pasos 33 Cuando los bits SUID o SGID se refieren a directorios, los archivos que se almacenan en estos directorios adoptan el propietario o grupo del directorio, en vez de adoptar el del usuario que creó el archivo. El bit de persistencia, mostrado como t en lugar del bit de ejecución normal para el nivel otros se usa normalmente en directorios tales como /tmp. Este atributo en concreto hace que sólo el propietario del archivo pueda eliminarlo, aunque otros pueden leerlo. Se puede especificar los permisos especiales SUID, SGID y bit de persistencia con la tabla 4.10 La forma de utilizarlo es añadir un número más al chmod: #chmod 2751 /home/josan/archivo Lo comentado anteriormente y el SGID activado Cambiar un archivo de propietario o grupo La utilidad chown modifica el indicador de propietario. #chown josan /tmp/archivo La utilidad chgrp modifica el indicador de grupo. #chgrp proyecto /tmp/archivo 4.5. Instalación de aplicaciones En Debian GNU/Linux tenemos tres aplicaciones para manejar paquetes precompilados dpkg, apt y alien. Cuando disponemos de los archivos fuente de una aplicación y los queremos instalar en nuestro sistema hay que tener varias precauciones. La mejor opción es que el software a utilizar esté incluido en el proyecto Debian, así se eliminará la posibilidad que un usuario malintencionado haya modificado deliberadamente el paquete. Para asegurarnos es preciso leer atentamente la documentación de los paquetes (INSTALL y README) y comprobar a mano los script s de instalación. Si nos vemos en la obligación de instalar un paquete de una fuente no segura, desconocida o sospechosa es una buena conducta de actuación instalar el paquete con un usuario con privilegios restringidos, evitando usar root a menos que sea imprescindible. Si los scripts estuvieran modificados, sin privilegios, no podrían hackear el sistema Compilación de paquetes desde archivos fuente Las aplicaciones suelen venir comprimidas en uno de estos dos formatos.tar.gz.tar.bz2 Lo primero es descomprimir los fichero fuente, para ello debemos disponer de tres aplicaciones: gunzip (.gz), bzip (.bz2) y tar (.tar). Si el archivo es.tar.gz, el comando es el siguiente: $tar zxvf archivo.tar.gz,... para descomprimir archivo.tar.gz $tar jxvf archivo.tar.bz2,... para descomprimir archivo.tar.bz2

52 34 Servidor Linux para conexiones seguras de una LAN a Internet Entramos en el directorio que se haya creado y allí normalmente encontraremos algunos ficheros de documentación especificos de cada paquete y los siguientes ficheros estándar: README INSTALL Es imprescindible leerlos, en ellos se especifica la documentación del paquete. Aquí encontraremos la historia del paquete, la versión actual, los paquetes adicionales que debemos de tener instalados, el método de instalación y la información necesaria para modificar los archivos de configuración. Para realizar la instalación se utiliza el Makefile, un archivo que se pasa al comando make con una serie de parámetros dependiendo de las opciones disponibles. En el próximo párrafo se explica en que consiste exactamente un archivo de este tipo. Makefiles En proyectos extensos, con varios miles de líneas de programación, no resulta muy práctico recompilar cada vez que se desea armar un nuevo ejecutable. Es frecuente por lo tanto dividir el proyecto en varios archivos con código fuente, y recompilar sólo los archivos qué registren cambios. Existe un programa, que dada esta serie de interdependencias es capaz de generar el ejecutable con la mínima cantidad de pasos necesarios. La especificación de las dependencias se da en un archivo llamado Makefile y el programa que interpreta que lo interpreta y genera el ejecutable es Make. Un Makefile es un archivo de configuración donde se indicarán que archivos debe compilar, las dependencias de compilación, y los flags qué se han de pasar al compilador. Pueden llegar a ser archivos grandes y complejos. Trataré de explicar las nociones más básicas de los mismos, para poder leer los que vienen en las instalaciones de las aplicaciones. La sintaxis básica de un archivo Makefile es la siguiente: objetivo: dependencias acciones a ejecutar El objetivo es el archivo que se desea generar. Las dependencias son los archivos de los cuales el objetivo depende. Las acciones son los comandos para generar el objetivo a partir de las dependencias. Para ilustrar esto veamos el siguiente ejemplo: tst: tst.o tstf.o gcc -o tst tst.o tstf.o tst.o: tst.c gcc -c -o tst.o tst.c tstf.o: tstf.c gcc -c -o tstf.o tstf.c El programa make leerá el archivo Makefile, al llegar a la primera línea encuentra que tst depende de tst.o y tstf.o. Si tst no existe o tiene fecha de modificación anterior a la de sus dependencias, deberá ejecutar la acción indicada para generarlo nuevamente. Análogamente, si tst.o no existe o tiene fecha de modificación anterior a la de tst.c, será necesario recompilar nuevamente su código fuente.

53 Capítulo 4. Primeros pasos 35 En este tipo de archivos se suelen definir variables para ser utilizadas en las líneas de acciones. Estas definiciones están al comienzo de los Makefiles y son del tipo: DEPTST=tst.o tstf.o CFLAGS=-c -o Con estas modificaciones el archivo original quedaría de la siguiente forma: DEPTST=tst.o tstf.o CFLAGS=-c -o tst: $(DEPTST) gcc -o tst $(DEPTST) tst.o: tst.c gcc $(CFLAGS) tst.o tst.c tstf.o: tstf.c gcc $(CFLAGS) tstf.o tstf.c Cuadro 4.11: Ejemplo de un archivo Makefile Para abreviar también se pueden utilizar las construcciones especiales $< para referirse a las dependencias y para referirse al objetivo, en el interior de las acciones. Para ejecutar el Makefile: $make,... para ejecutar todos los objetivos. $make <objetivo>,... para ejecutar un objetivo concreto. Los objetivos habituales en los instaladores son: check, install, y clean. Método habitual de instalación La mayoría de los paquetes se instalan de la siguiente forma: $./configure $make $make install Según el archivo INSTALL podremos observar las necesidades concretas del paquete, también es habitual, entre las distintas fases de instalación, las directivas: $make check $make clean Por último decir que dependiendo del tipo de paquete y los lugares del sistema donde deba escribir puede ser necesario instalar el paquete mediante un usuario con más privilegios.

54 36 Servidor Linux para conexiones seguras de una LAN a Internet Dpkg: Instalador de paquetes precompilados Si en vez de paquetes fuentes lo que tenemos es un paquete precompilado o binario utilizaremos el gestor de paquetes dpkg (Debian Package). En la tabla 4.12 se especifican las opciones más comunes. Cuadro 4.12: Opciones del comando dpkg Comando Descripción #dpkg -i <paquete> Instala paquete #dpkg -r <paquete> Elimina paquete #dpkg --purge <paquete> Borra un paquete incluídos los ficheros de configuración #dpkg -f <paquete> Muestra información de la versión del paquete #dpkg -c <paquete> Lista los ficheros contenidos #dpkg --contents <paquete> Lista los ficheros contenidos y sus directorios #dpkg --info <paquete> Información del paquete #dpkg --unpak <paquete> Desempaqueta #dpkg --info <paquete> Información del paquete #dpkg --force-help <paquete> Fuerza opciones #dpkg -L <paquetes> Lista el paquetes si está instalado #dpkg -l Lista paquetes instalados #dpkg-reconfigure --all Reconfigura todos los paquetes #dpkg-reconfigure locales Reconfigura paquetes con la configuración local, por ejemplo coloca paquetes en el idioma del sistema Apt: Gestor de paquetes Debian El programa APT (Advancd Packaging Tool) se encarga de manejar automáticamente las dependencias de la paquetería del sistema. El archivo /etc/apt/sources.list Como parte de su funcionamiento, APT utiliza un archivo que contiene las fuentes en donde se encuentran los paquetes. En el siguiente cuadro podemos observar un archivo estándar del sources.list. Cuadro 4.13: Ejemplo de /etc/apt/sources.list deb cdrom:[debian GNU/Linux testing _Sarge_ - Official Snapshot i386 Binary-2 ( )]/ unstable contrib main main/debian-installer deb cdrom:[debian GNU/Linux testing _Sarge_ - Official Snapshot i386 Binary-1 ( )]/ unstable contrib main main/debian-installer deb cdrom:[debian GNU/Linux 3.0 r4 _Woody_ - Official i386 Binary-2 ( )]/ unstable contrib main non-us/contrib non-us/main non-us/non-free non-free deb cdrom:[debian GNU/Linux 3.0 r4 _Woody_ - Official i386 Binary-1 ( )]/ unstable contrib main non-us/contrib non-us/main non-us/non-free non-free #Sarge (testing) deb testing main contrib non-free deb-src testing main non-free contrib deb testing/non-us main contrib non-free deb-src testing/non-us main contrib non-free deb testing/updates main contrib non-free #Woody (stable) #deb testing main contrib non-free #deb testing/non-us main contrib non-free #deb stable/updates main contrib non-free #Sid (unstable) #deb unstable main contrib non-free #deb unstable/non-us main contrib non-free El archivo puede contener varios tipos de líneas. APT sabe como interpretar líneas del tipo http, ftp y file (archivos locales). Para poder descargar los paquetes a través de internet utilizamos ftp.rediris.es, replica en España de los paquetes Debian.

55 Capítulo 4. Primeros pasos 37 La primera palabra de cada línea indica el tipo de archivo: deb, indica un paquete pre-compilado (binario) deb-scr, indica código original (fuentes) Opciones ATP En el cuadro 4.14 vamos a poder encontrar las opciones mas usuales que se pueden utilizar con el comando APT Cuadro 4.14: Opciones del comando APT Comando Descripción #apt-get install <paquete> Instala paquete # apt-get --reinstall install <paquete> Reinstala paquete o una nueva versión del mismo #apt-get remove <paquete> Desinstala paquete #apt-get --purge remove <paquete> Desinstala paquete y borra sus archivos de configuración #apt-cdrom ident Identifica un CD #apt-cdrom add Añade un CD al /etc/apt/sources.list #apt-get update Actualiza la lista local de paqutes con el archivo /etc/apt/sources.list #apt-get upgrade Actualiza a las ultimas versiones todos los paquetes del sistema #apt-get dist-upgrade Actualiza a la distribución mas reciente #apt-show-versions -u Muestra los paquetes del sistema que pueden ser actualizados #apt-cache search <nombre> Muestra los paquetes relacionados con nombre #apt-cache show <paquete> Muestra información de un paquete específico #apt-cache showpkg <paquete> Muestra mucha más información del paquete #apt-cache depends <paquete> Muestra de qué paquetes depende #apt-file search <archivo> Muestra a qué paquete pertenece el archivo #apt-file list <paquete> Muestra los archivos del paquete #apt-file update Actualiza los paquetes de apt-file (como apt-get update) #apt-get source <paquete> Descarga las fuentes del paquete #apt-get -b source <paquete> Descarga y compila las fuentes del paquete (genera un.deb, que hay que instalarlo con dpkg) #apt-get build-dep <paquete> Descarga y compila las fuentes del paquete y descarga también los paquetes que dependen necesarios para compilarlo. #apt-cache showscr <paquete> Muestra que paquetes son necesarios para compilar el paquete #apt-get -f install Reconfigura los paquetes mal instalados (puede ser necesario combinarlo con #dpkg --configure -a) La opción -u muestra la lista completa de los paquetes que se actualizarán. Si utilizamos la opción apt-cdrom solo tendrá efecto si el CD-ROM esta bien configurado en /etc/fstab.

56 38 Servidor Linux para conexiones seguras de una LAN a Internet Alien: Convertir paquetes.rpm a.deb (formato Debian) Existen muchas distribuciones basadas en Red Hat que utilizan el formato de paquetes.rpm (Red Hat Package Manager), cuando tenemos este tipo de paquetes es posible convertirlos a.deb, formato de Debian y instalable con dpkg. Para ello utilizaremos la herramienta alien que convierte un tipo de paquete en otro. #apt-get install alien $alien paquete.rpm Encontrar paquetes y sus dependencias En algún momento nos podemos encontrar que necesitamos saber de qué paquete proviene un archivo, o lo más frecuente, qué paquete/s tengo que instalar para que me funcione un comando. Disponemos de apt-cache y dpkg para realizar estas tareas. Buscar paquetes padre de comandos instalados Si tenemos un comando instalado y no sabemos de que paquete proviene, se usa dpkg -S. $dpkg -S <nombre_comando> Devuelve una lista de todos los paquetes que durante su instalación crearon un archivo igual a nombre comando. Si sabemos el directorio donde se encuentra podemos refinar la búsqueda. $dpkg -S /usr/bin/nombre_comando Buscar paquetes padre de comandos no instalados En este caso hay que buscar en la página de paquetes Debian, También se puede utilizar el siguiente truco rápido: $links -dump "http://packages.debian.org/cgi-bin/search_contents.pl? case=insensitive&arch=i386&version=testing&word=nombre_comando" Donde arch, version y word se ajustan a las necesidades de nuestra búsqueda concreta. Buscar paquetes si sabemos su nombre parcial En este caso lo mejor es usar una de las opciones de dpkg -l. $dpkg -l "*cadena_caracteres*" Busca todos los paquetes que contienen la cadena cadena caracteres. Buscar paquetes si tenemos una descripción Si no conocemos el comando, pero sabemos su descripción, lo mejor es usar apt-cache search. $apt-cache search <paquete>

57 Capítulo 4. Primeros pasos 39 Buscar dependencias de un paquete Para conocer las dependencias e información de un paquete, podemos usar el apt-cache depends. $apt-cache depends <paquete> La información que se nos mostrará es la siguiente: Depende: Paquetes que son necesarios para que funcione Sugiere: Paquetes recomendables Entra en conflicto: Paquetes incompatibles Reemplaza: Paquetes que quedarán obsoletos Problemas al instalar paquetes Cuando existe un problema de dependencias entre paquetes podemos utilizar los siguientes comandos para reconfigurarlos. #dpkg --configure -a,... Comprueba problemas de configuración. #apt-get -f install,... Reintenta la instalación de paquetes que han dado problemas. Realizando una lectura, completa y a conciencia de las salidas de los comandos anteriores se suele identificar el problema. Se puede probar a repetir varias veces estos dos comandos. Si existe un paquete que ha quedado mal instalado, lo primero que hay que hacer es leer la documentación que trae, para comprobar si tiene alguna incompatibilidad con nuestro sistema. En caso de no encontrar el problema, es recomendable probar a reinstalar el paquete: #apt-get remove <paquete> #apt-get install <paquete> Si esto tampoco funciona, corriendo el consiguiente riesgo, se puede forzar la reescritura de paquete con el comando: #dpkg -i --force-overwrite /var/cache/apt/archives/nombre_paquete... y probar a reconfigurar los paquetes otra vez Estos comandos (dpkg --force-help) son útiles en determinadas ocasiones, pero hay que saber que es lo que se quiere hacer de antemano y asumir las posibles consecuencias. Por último comentar el siguiente comando que también puede ser útil en determinadas ocasiones: # apt-get -s -t <rama_debian> install --reinstall <paquete> Donde -s simula la instalación y -t unstable, stable o testing especifica la distribución Debian utilizada Shells Un shell es un programa, ejecutado por el usuario, que le proporciona a este una interfaz interactiva con el sistema (una línea de comandos) para introducir datos o especificar programas que quiera ejecutar. El shell predeterminado en la mayoría de distribuciones Linux es bash (Bourne Again Shell).

58 40 Servidor Linux para conexiones seguras de una LAN a Internet Tipos de shell Existe varios shells para Linux. Cada una de ellas tiene ciertas características, pero todas están clasificadas en dos ramas: la shell Bourne o la familia de shells C. Shell Bourne La shell Bourne es la más antigua de las shells modernas. La shell bash, suele ser ejecutada por defecto en todas las distribuciones Linux. Algunas shells disponibles para sistemas Linux, que se inscriben en la familia de shells Bourne, incluyen otro sucesor de Bourne, ksh, la shell de Korn (implementada en casi todas las distribuciones como pdksh); ash, una shell parecida a bash pero de menor tamaño, ideal para disquetes de arranque; kiss, otro intérprete sencillo de shell (pero sólo tiene comandos rudimentarios integrados), que es también ideal para discos de arranque o rescate; y zsh, una shell muy parecida a la shell de Korn. La shell C La shell C fue creada en principio para superar las limitaciones de la shell Bourne (como el soporte para cálculos numéricos). Estaba dirigida a usuarios avanzados y a usuarios más familiarizados con la sintaxis de la programación en C. La shell C proporciona una interfaz agradable, pero se considera que es más difícil hacer scripts para ella, especialmente para aquéllos que no estén familiarizados con la sintaxis C. La sintaxis para las variables de entorno varía significativamente, y los scripts escritos para shells de la familia Bourne, normalmente no se pueden ejecutar en una shell C y viceversa. Entre los sucesores de la shell C (csh) tenemos tsch, recomendada por encima de csh para aquellos que quieran usar este tipo de interfaz Características de la shell Bash La shell bash contiene una serie de herramientas que facilitan la tarea del usuario. Estas quedan descritas en los siguientes puntos: Escribiendo cd se va directamente al home del usuario. Si se empieza a escribir una ruta o un nombre de archivo, y esa ruta o ese nombre son únicos entre todas las opciones disponibles, si se pulsa la tecla TAB, el shell rellena el resto de la ruta o nombre. En caso de que no sea único emite un pitido de opción ambigua y si se pulsa por segunda vez la tecla TAB se muestra el rango de opciones disponibles. A menudo, con sólo un carácter más tendremos una selección única otra vez. Se pueden ejecutar varios comandos en la misma línea separándolos por el caracter ; Permite incrustar comandos como parametros de otros comandos, encerrándolos entre comillas invertidas (#kill cat /var/run/named.pid ) Existe un historial de comandos, que queda almacenado en.bash history. Tiene un tamaño prefijado (normalmente 500 lineas) a partir del cual empieza a borrar las líneas antigüas para escribir las nuevas. El comando $history mostrará el contenido de.bash history. Este histórico de comandos facilita la tarea de escribir scripts para la shell. Sencillamente, cortando y pegando en un script los comandos que funcionaron bien. Se puede recuperar un comando ya utilizado pulsando repetidas veces la flecha hacia arriba. Facilita la tarea de cortar y pegar, en entorno X-Windows, funciona entre ventanas de diferentes aplicaciones. También permite seleccionar textos usando el ratón.

59 Capítulo 4. Primeros pasos Ejecución de procesos en la shell Bash Para ejecutar un archivo que se encuentre en el directorio local, siendo que este directorio no se encuentra en el $PATH del sistema se emplea el siguiente método: $./<archivo_ejecutable> Desde una consola también podemos hacer que un proceso se ejecute en segundo plano añadiéndole un & al final, y así seguir trabajando en esa consola: $comando & Variables de entorno Una variable de entorno es una cadena de caracteres con información de las diferentes opciones del sistema asociada a un nombre simbólico que pueda utilizar Linux. Visualizar contenido de variables Podemos visualizar las variables definidas, así como sus valores utilizando los comandos: $printenv $env El comando printenv se diferencia de env por el hecho de que nos permite visualizar el valor de una variable en particular: $printenv <VARIABLE> Variables más comunes La siguiente tabla, obtenida en [BB00] especifica las variables que encontraremos, más habitualmente, en nuestro sistema. Si se utiliza el shell bash, se puede encontrar más información sobre las variables de entorno que existen mediante el comando $man bash. Asignar valores a variables de entorno Para definir una variable de entorno podemos hacerlo desde la línea de comandos, con la desventaja de que el valor sólo será válido en la sesión actual, o modificando los archivos de perfil. La forma de realizar esta asignación desde la línea de comandos dependerá del shell que estemos utilizando. Si utilizamos el shell bash el método es el siguiente: #VARIABLE_DE_ENTORNO=valor #export VARIABLE_DE_ENTORNO En caso de realizarlo mediante los archivos de perfil, en el interior del /etc/profile o el /.profile se coloca la siguiente instrucción: export VARIABLE_DE_ENTORNO=valor

60 42 Servidor Linux para conexiones seguras de una LAN a Internet Variable EDITOR HISTSIZE HOME HOSTNAME HOSTTYPE LANG LOGNAME MAIL OSTYPE PATH SHELL PWD TERM USER PATH PS1 LANG, LANGUAGE LC ALL, LC TYPE Cuadro 4.15: Variables habituales del sistema Descripción Indica el editor por defecto utilizado por el sistema Es el número de comandos que recuerda el shell. Podemos acceder a los comandos utilizando los cursores arriba y abajo Determina el directorio de trabajo del usuario actual Indica el nombre del ordenador o host en el cual estamos trabajando Especifica el tipo o arquitectura del ordenador Esta variable se emplea para indicar el idioma utilizado Nombre del usuario actual Directorio en el cual se almacena el correo entrante Sistema operativo en uso Trayecto o ruta de búsqueda de los archivos ejecutables Nombre del shell actualmente en uso Path de inicio Tipo de terminal utilizado en la sesión de trabajo actual Nombre de usuario Conjunto de directorios donde se buscan los comandos Especifica el aspecto del símbolo de prompt del sistema Especifica el estándar de lenguaje que se utiliza en la máquina Especifica el estándar de lenguaje para las configuraciones locales Eliminar variables de entorno Para eliminar variables desde la línea de comando se ejecutará una instrucción diferente dependiendo del shell sobre el que trabajemos. En el shell bash se realiza de la siguiente forma: #unset VARIABLE_DE_ENTORNO También es posible utilizar el comando env con la -u: #env -u VARIABLE_DE_ENTORNO Hay que tener en cuenta que si la variable se encontraba contenida en uno de los archivos de configuración de perfil, cuando volvamos a cargar el entorno del usuario la variable también se cargará Configuración del entorno Cuando se inicia una sesión de trabajo el intérprete de comandos bash lee y ejecuta de forma automática las órdenes del archivo /etc/profile. A continuación 1 busca los archivos del usuario /.bash profile, /.bash login y /.profile ejecutándolos según el orden indicado. Al finalizar la ejecución del shell se lee y ejecuta el archivo /.bash logout del directorio del usuario. Si queremos que se ejecute algo al comienzo o final de cada sesión, o añadir nuevas variables de sistema, elegiremos el archivo a modificar que más convenga a nuestros objetivos. Resulta de gran utilidad realizar alguna modificación a los comandos típicos para evitar daños no deseados en el sistema o añadir las opciones que mas utilizamos. Un ejemplo de esto sería colocar en el archivo /.profile: alias mv="mv -i" 1 En el caso de ejecutar un shell interactivo que no sea de entrada se lee y ejecuta el archivo /.bashrc ubicado en el directorio del usuario.

61 Capítulo 4. Primeros pasos 43 alias cp="cp -i" alias rm="rm -i" alias dir="ls -alf" Con los tres primeros comandos se redefinirá el comando base, pidiendo confirmación por defecto y con el último se creará un comando nuevo que llamará a ls pero con más opciones Redireccionamientos Para redireccionar a un archivo la salida normal de un script, de forma que más tarde se puedan ver los resultados, se utiliza la redirección (>). $ls -l >listado Si se quiere añadir los resultados de la salida de un comando al final de un archivo, se utiliza la redirección (>>). $ls -l /bin >>listado De forma similar, se pude redireccionar la entrada, para ello se utiliza la redirección(<). $cat < listado Canales estándar En Linux existen una serie de canales estándar que nunca cambian, al menos que los modifiquemos a mano: Dispositivo 0: stdin, o dispositivo de entrada estándar Dispositivo 1: stdout, o dispositivo de salida estándar Dispositivo 2: stderr, o dispositivo de error estándar Dispositivo /dev/null: Todo lo que se redirecciona a este dispositivo se pierde Estos dispositivos estándar también pueden ser redireccionados con: > y <. Esto se puede observar en los siguientes ejemplos: $ls > listado 2>&1,... redirecciona la salida estándar y el error estándar al archivo listado. $ls > listado 2>/dev/null,... redirecciona la salida estándar al archivo listado y descarta errores. $cat < listado 2>&1 listado2,... toma como entrada listado, la salida y el error se redireccionan a listado2. Filtros o pipes Los filtros o pipes son un mecanismo por el cual la salida de un programa se puede enviar como entrada a otro programa. Los programas individuales se pueden encadenar juntos para convertirse en unas herramientas extremadamente potentes. Podemos ver esto con un ejemplo: $env grep "SHELL",... el comando env lista las variables y filtramos la variable SHELL. Los comandos more y less paginan (dividen en páginas) uno o varios ficheros y los muestran en la terminal. De no indicárseles un fichero, paginan la entrada estándar. Se diferencian en las facilidades que

62 44 Servidor Linux para conexiones seguras de una LAN a Internet brindan. Por ejemplo more es más restrictivo en cuanto al movimiento dentro del texto, mientras que less no limita este aspecto pues acepta el empleo de todas las teclas de movimiento tradicionales. Cuando se alcanza el final del último fichero a paginar, more termina automáticamente, no así less. También more muestra sucesivamente el porcentaje del fichero visto hasta el momento. Proveen una serie de comandos para moverse con facilidad dentro del texto paginado: q: permite interrumpir el proceso y salir /p: realiza búsquedas del patrón p dentro del texto. Para repetir la búsqueda del mismo patrón sólo es necesario escribir /. n b: en more permite regresar n páginas (por defecto n es 1). n f: en more se adelantan n páginas y en less, n líneas Consolas virtuales Al ser Linux un sistema multiusuario y multitarea, se pueden ejecutar diversos procesos simultáneamente, en varias consolas virtuales, y estos ser controlados por usuarios diferentes. En cada consola virtual que se utiliza es necesario logearse como usuario del sistema. Para cambiar de consola: En modo texto: ALT-F1... ALT-F6 En modo gráfico: CTRL-ALT-F1... CTRL-ALT-F6 para consolas de texto y CTRL-ALT-F7 para volver al modo gráfico. Esto es muy útil para tener una consola virtual de root con máxima prioridad, si el sistema se ralentiza, podremos observar por qué esta pasando y remediarlo. También podemos finalizar algún proceso o aplicación que haya podido bloquear otra consola, evitando de esta forma tener que reiniciar el sistema.

63 Capítulo 5 Kernel El kernel o núcleo es una de las partes esenciales de un sistema operativo. Proporciona todos los servicios básicos requeridos por otras partes del sistema operativo y aplicaciones. Se encarga de la administración de la memoria, los procesos y los discos. El kernel es independiente de la distribución Linux utilizada, el mismo kernel debería servir para otras distribuciones, usando el mismo ordenador. Las distribuciones Linux vienen con kernels que necesitan ser instalados en una amplia variedad de escenarios de configuraciones de sistemás y hardware, por lo tanto dan soporte a muchos dispositivos y hardware que no necesitamos. Recompilar el kernel es una buena idea y dará como resultado un kernel más pequeño y rápido. El kernel 2.6 es más rápido que los kernels anteriores y tiene soporte para nuevos dispositivos. La actualización del kernel se divide en dos partes: compilación e instalación del nuevo kernel Por qué compilar? Hay diversas razones para recompilar el kernel de Linux. Es útil por qué trabajando con kernels nuevos generalmente se obtiene: 1. Un sistema más rápido, estable y robusto 2. Soporte a elementos de hardware no encontrado en kernels viejos. 3. Soporte a características especiales disponibles pero no habilitadas en kernels viejos. Recompilar el kernel de Linux no es más que personalizar el kernel. Como en cualquier aplicación, la personalización se hace para sacar un mayor provecho de las diferentes características que ofrece el software Acerca de los módulos Varias partes de código del kernel pueden compilarse por separado en forma de módulos, dando flexibilidad al sistema. Los módulos no están enlazados directamente en el kernel, siendo necesario insertarlos en él ya sea durante el proceso de arranque o posteriormente, de tal forma que sólo se usan cuando se necesitan, sin utilizar innecesariamente la memoria Ram del sistema Kernel-image La manera más sencilla de obtener un nuevo kernel es instalar un paquete kernel-image.deb. Una vez instalado sólo es necesario actualizar el gestor de arranques y reiniciar. Son kernels bastante estándar y adaptados a distribuciones Debian. Para hacerlos más utilizables, incluyen soporte para todo tipo de hardware e idiomás imaginados. Este método es rápido y sencillo pero es muy ineficiente, desaprovecha los recursos del sistema.

64 46 Servidor Linux para conexiones seguras de una LAN a Internet 5.4. Kernel-source Es un paquete de código fuente del kernel oficial, adaptado a la distribución Debian. Kernel-source es mucho más versátil que kernel-image, los binarios no suelen contener configurados correctamente todos los dispositivos del sistema Instalar un kernel-source Para saber cual es la version más actual podemos utilizar la siguiente secuencia de comandos: 1. Cargar las fuentes de Apt (/etc/apt/sources.list) con nuestra distribución, como se puede ver en el ejemplo 4.13 del capítulo anterior 2. Actualizar el Apt con las nuevas fuentes, #apt-get update 3. Cargar el paquete links, #apt-get install links 4. Averiguar el nombre del kernel-source más actual, $links -dump "http://packages.debian.org/cgi-bin/search_contents.pl? case=insensitive&arch=i386&version=testing&word=kernel-sourse-2.6" 5. Descargar la nueva versión del kernel-source (se descarga en el directorio /usr/src/), #apt-get install kernel-source Descomprimir el kernel-source, #tar jxvf /usr/src/kernel-source tar.bz2 7. Crear un enlace simbólico, #ln -s kernel-source linux 8. Ejecutar el menu de configuración para el menu texto, #usr/src/linux/make menuconfig,... o para el menu gráfico, #usr/src/linux/make xconfig 9. Elegir las opciones que queramos implementar en el kernel Una vez completadas estas instrucciones podemos elegir entre dos alternativas: o crear un paquete.deb, descrito en el apartado siguiente; o compilar el kernel como si fueran las fuentes oficiales (Apartado 5.5). Esto queda a elección del usuario, pero al haber optado por las herramientas Debian la opción más coherente es crear un paquete Crear un paquete.deb Usaremos la herramienta make-kpkg de Debian para crear el paquete.deb con nuestro kernel. La documentación se puede encontrar en /usr/share/doc/kernel-package/. Para evitar dañar el sistema con posibles errores se utilizará el paquete fakeroot que proporciona un entorno de root falso, donde poder compilar el kernel. En la página del manual se describen las opciones del paquete fakeroot, en el ejemplo se muestra el método más simple: Para crear el kernel-image, hay que introducir los siguientes comandos: $fakeroot make-kpkg clean $fakeroot make-kpkg -version.fecha kernel_image Donde version es el número de la versión del kernel, en la secuencia del usuario y.fecha es la fecha en la que se está compilando el kernel. De esta forma tendremos claramente identificado la versión del kernel y la fecha de la compilación.

65 Capítulo 5. Kernel 47 Para instalar el paquete: #dpkg -i kernel-image-2.6.8_version _i386.deb Una vez terminado solo es necesario actualizar el gestor de arranque con el nuevo kenel y reiniciar (Como se puede observar en el apartado 4.2 del capítulo anterior) Compilar Kernel Las fuentes oficiales del kernel más actual las podemos encontrar en Las descargamos al directorio /usr/src/ y las descomprimimos empleando el método adecuado, según el formato del kernel descargado. Para la seguridad y asegurarnos que no dañamos involuntariamente el sistema se puede creer un usuario capaz de actuar con los archivos fuentes. Para eso se añadirá al grupo src. #gpasswd -a josan src Paquetes necesarios Para poder compilar el kernel necesitamos tener los siguientes paquetes instalados. Paquetes básicos Cuadro 5.1: Paquetes básicos gcc kernel-package libc6-dev tk8.0 libncurses5-dev fakeroot Paquetes kernel 2.6 Antes de realizar el proceso de compilación de un kernel de la serie 2.6 es necesario que actualizemos nuestro sistema con las últimás versiones de los paquetes que se detallan en el cuador 5.2. Si alguno no lo tenemos instalado, es necesario realizar su instalación mediante apt-get. El proceso automatizado que comprueba las versiones se encuentra implementado en el scrip: /usr/src/linux/scripts/ver_linux

66 48 Servidor Linux para conexiones seguras de una LAN a Internet Cuadro 5.2: Paquetes necesarios para compilar kernel 2.6 Paquete Version necesaria Comando comprobar versión Gnu C #gcc --version Gnu make 3.78 #make --version binutils 2.12 #ld -v util-linux 2.10 #fdformat --version module-init-tools #depmod -V e2fsprogs 1.29 #tune2fs jfsutils #fsck.jfs -V reiserfsprogs #reiserfsck -V xfsprogs #xs_db -V pcmcia-cs #cardmgr -V quota 3.09 #quota -V PPP #pppd --version isdn-utils 3.1pre1 #isdnctrl 2>&1 grep version nfs-utils #showmount --version procps #ps --version oprofile #oprofiled --version Comprobar el hardware disponible Para comprobar que todos los dispositivos que tenemos son reconocidos vamos a ejecutar una serie de comandos: #apt-get install hardinfo, instala una serie de utilidades para hw $/bin/lspci,... informa sobre los dispositivos disponibles $cat /proc/cpuinfo,... lista detalles sobre la CPU reconocida En caso de que no reconociera alguno, es necesario estudiar más a fondo el problema concreto. Suele ser necesario descargar los drivers y parchear el kernel para que les de soporte. Normalmente, los fabricantes de software incluyen manuales de instalación que simplifican esta tarea Método de compilación En el cuadro 5.3 se describe el método que utilicé para compilar el kenel del servidor. Es un trabajo laborioso y que requiere bastante práctica, es necesario realizar varias recompilaciones para ajustar las opciones del kernel. Al comenzar el usuario se encuentra abrumado ante tal cantidad de opciones, averiguar las correctas es cuestión de disponer de las especificaciones del hardware y paciencia. El método descrito es una guía estándar para compilar el kernel, la elección de los módulos a colocar en el kernel se deja a elección del usuario, ya que cada hardware tiene sus propias características. Es muy recomendable, para mayor seguridad, compilar en kernel en un entorno simulado, que da acceso a recursos pero no permite modificaciones del sistema. Esto se realiza mediante el paquete fakeroot, como se ha explicado anteriormente (sección 5.4.2). Una vez tenemos descargadas las fuentes en /usr/src/, si queremos comprobar que hace el Makefile lo podemos encontrar en, /usr/src/linux/arch/i386/makefile. El método descrito en este apartado es un resumen del documento Kernel-Build-HOWTO, en el que me basé para realizar la compilación del kernel. Se puede encontrar en la dirección:

67 Capítulo 5. Kernel 49 Cuadro 5.3: Compilación del Kernel Acción Comando Nos situamos en el directorio $cd /usr/src Si existe enlace /usr/src/linux rm linux Descomprimimos el kernel $tar zxvf linux tar.gz Creamos un enlace simbolico a $ln -s linux linux las fuentes del nuevo kernel Entramos en el directorio de las $cd linux fuentes Cambiar a usuario root $su root Salvamos el archivo antiguo de #cp.config config.save configuración del kernel Borramos los mensajes de compilaciones #make mrproper anteriores Entramos en el menú de configuración #make menuconfig (menu texto) o #make xconfig (menu gráfico) Agregamos dependencias #make dep Borramos datos innecesarios #make clean Compilamos el kernel #make bzimage Compilamos los módulos #make modules Instalamos los módulos en el kernel #make modules_install Copiamos a /boot el kernel #cp arch/i386/boot/bzimage /boot/bzimage-version_kernel Borramos el antiguo enlace a #rm /boot/system.map System.map Copiamos el archivo System.map #cp System.map /boot/system.map-version_kernel Creamos el nuevo enlace a System.map #ln -s /boot/system.map-verion_kernel /boot/system.map Configuramos el gestor de arranque #vi /etc/lilo.conf Cargamos el nuevo arranque #/sbin/lilo Marcamos que reinicie con el #/sbin/lilo -R <Nombre_del_arranque_en_lilo> nuevo kernel Parchear el kernel Los parches del kernel son la forma de añadir características especiales al kernel. Antes de lanzar #make menuconfig o #make xconfig, es necesario ejecutar los parches con el siguiente comando: #/usr/src/linux/patch -p1 < [ruta_del_pache]/parche_a_aplicar Con esto conseguiremos aplicar los parches sobre las fuentes del kernel, es preciso asegurarse que los parches coinciden con la versión de nuestro kernel, en caso contrario no funcionarán Consejos para la configuración del kernel Hay que tomarse todo el tiempo necesario con xconfig o menuconfig. Asegúrarse de incluir todo lo imprescindible y quitar todo lo que no (módulos para dispositivos zip, soporte usb, video, tarjeta de sonido, nic, raid, etc...). Se recomienda usar los módulos siempre que sea posible, esto hace al kernel más pequeño y más rápido. Si no se está seguro de que elegir resulta de gran ayuda consultar la documentación.

68

69 Capítulo 6 Interfaz gráfico En los sistemas Linux se tiene una visión diferente del entorno gráfico. La interfaz que se presenta al usuario es independiente del núcleo del sistema operativo. El núcleo de Linux (su kernel) está completamente desacoplado de la interfaz gráfica. Esto permite seleccionar la interfaz con la que nos resulte más cómoda, en lugar de tener que seguir el dictado de alguien o de la potencialmente aleatoria investigación de mercado. Sin embargo, lo más importante de esta decisión es la estabilidad que implica tener este programa independiente del núcleo. Si cae el GUI 1 bajo Windows o MacOS, se tiene que volver a arrancar. Bajo Linux, se pude matar el proceso y reiniciarlo sin afectar al resto de servicios del sistema (tales como servicios de archivos, o de red) X-Window A mediados de 1980 se creó una fundación para entornos de usuario gráfico, indepenediente del sistema operativo llamado X-Windows. Las X simplemente definen el método por el cual se pueden comunicar las aplicaciones con el hardware gráfico. También establece un conjunto de funciones de programación bien definidas que podrán ser llamadas para realizar la manipulación básica de las ventanas. La definición básica de cómo se dibuja una ventana, un botón o un icono no incluye la definición de cómo estos se deberían ver. En realidad X-Windows en su estado natural no tienen apariencia real. El control de la apariencia se delega en otro programa externo llamado gestor de ventanas. Con los entornos de programación y las interfaces de usuario tan poco amigables X-Windows tenía el potencial de convertirse en la interfaz final, pero a cambio contaba con la desventaja de ofrecer un diseño que parecía como hecho a trozos. El protocolo es abierto, lo cual significa que cualquiera puede escribir un cliente X o un servidor X. Una de las mejores características de X-Windows es que permite que las aplicaciones se ejecuten en una máquina, pero se visualicen en otra distinta, suministra protocolos de red para realizar esta función Configuración X-Windows Linux ofrece la funcionalidad de poder ejecutar aplicaciones a través de una red heterogenea, mediante la incorporación de la implementación XFree86 del estándar X11 del sistema X-Window, creado por el MIT Interfaz gráfica de usuario 2 Instituto Tecnológico de Massachusetts

70 52 Servidor Linux para conexiones seguras de una LAN a Internet Históricamente, XFree86 ha sido una de las partes más complejas de Linux en lo referente a instalación y configuración. Ya no es este el caso, en la mayoría de las configuraciones estándar de hardware. Ahora las distribuciones más populares de Linux lo instalan y configuran automáticamente. Además, con XFree86 v4, algunas de las partes más complejas de la configuración son gestionadas automáticamente. Actualmente XFree86, el servidor X que usa Linux normalmente, se encuentra en el estándar X11R6.4, que se ha adaptado a los sistemas basados en Intel. Hay que asegurarse de que se dispone de hardware apropiado para ejecutar XFree86, se debe tener una tarjeta de vídeo que disponga de un chipset soportado y un monitor que permita la frecuencia escogida. Al trabajar directamente con el hardware, si no fuera compatible, se podría dañar físicamente el ordenador. xf86config Es el configurador de X-Windows para Debian. Después de leer los archivos /usr/x11/lib/doc, hay que ejecutar uno de los siguientes comandos: #xf86config,... para modo texto #xf86cfg,... para modo gráfico A continuación, se seleccionan las especificaciones de la tarjeta y el monitor. Esto generará el archivo de configuración /etc/x11/xf86config-4. Para probar la configuración ejecutamos #startx. Si no arranca ha llegado el momento de adentrarse en el archivo XF86Config-4. Archivo /etc/x11/xf86config-4 Si se dispone de hardware poco frecuente, puede que sea necesario configurar manualmente XFree86. No se debe utilizar este archivo copiado y sin revisar, de otro sistema, otro ordenador o el ejemplo que se expone mas adelante. Es necesario inspeccionar el archivo en busca de valores erróneos, arrancar el monitor con frecuencias no soportadas podría dañar el equipo. El archivo de configuración está dispuesto en secciones con el siguiente formato: Section "Nombre de la seccion" Comando1 "Opcion" Comando2 "Opcion" Subsection "Nombre de la subseccion" Comando3 "Opcion" EndSubSection EndSection A continuación paso a detallar cada una de las secciones que contiene el archivo de configuración: Sección Files Está sección define los archivos y directorios importantes para XFree86. Las rutas de acceso a la base de datos de color (RGB), las definiciones de las fuentes y bibliotecas de módulos. Sección Modules Se proporciona soporte para varios servicios mediante módulos de carga dinámica. Esto aumenta mucho la flexibilidad en el modo de suministro de servicios, y en los servicios que los usuarios eligen usar en realidad.

71 Capítulo 6. Interfaz gráfico 53 De este modo, también se proporciona un mecanismo más general para ofrecer servicios, como soporte TrueType, que antes suministraban programas externos. Los módulos pueden cargarse usando el comando Load o usando una SubSection. El uso de una SubSection activa las opciones que se quieren pasar al módulo. Sección InputDevice Es una de las muchas secciones que puede repetirse en el archivo de configuración. Cada dispositivo (ratón, teclado, pantalla táctil,... ) tiene su propia sección InputDevice. Define simplemente un dispositivo de entrada disponible. No implica que este dispositivo de hecho se use. La sección ServerLayout asociará este dispositivo con una presentación en pantalla. Sección Device Esta sección define una tarjeta de vídeo. Como con muchas de las otras secciones, no implica que el dispositivo se esté usando, sólo que está disponible. Al igual que que la mayoría de las secciones, la sección Device usa un comando Identifier para nombrar a este dispositivo. El comando Driver indica a XFree86 qué módulo cargable debe usar para este dispositivo. Los controladores de dispositivos suelen aceptar multitud de opciones. Sección Monitor Esta sección define un monitor que esté disponible para su uso, pero no implica que esté usando en realidad. Tampoco asocia al monitor con una tarjeta de vídeo. Esto se hará en la sección Screen. Cada sección Monitor tiene un comando Identifier para nombrarlo. Todos estos rodeos pueden hacer parecer el sistema confuso, pero hacen que XFree86 sea enormemente flexible. Al definir el monitor independiente de la tarjeta de vídeo, es mucho más fácil definir las configuraciones multipantalla. Sección Screen Esta sección combina un Monitor y un Device, definidos en las secciones anteriores, para crear una pantalla lógica. También define una profundidad de color predeterminada, o el número de bits de color por pixel. Dentro de esta sección se encuentran una o más subsecciones Display. Estas subsecciones definen las combinaciones de profundidad de color/resolución para esta pantalla. También suministran el tamaño de los espacios de visualización o de la pantalla virtual. Después de seleccionar una pantalla usando una presentación o la opción de la línea de comandos --screen, la profundidad de color de ese momento determinará qué visualización se usará. La profundidad de color puede configuarse usando la opción de la línea de comandos --depth, o se usará la profundidad de color predeterminada. Sección ServerLayout Esta sección define una presentación de pantallas y de dispositivos de entrada. Se puden definir una o más pantallas. Si se definen varias pantallas, las opciones indicarán a XFree86 dónde se encuentra físicamente una con relación a la otra. Por ejemplo: Section "ServerLayout" Identifier "Main Layout" Screen "Screen 1" 0 Screen "Screen 2" 1 RighOf "Screen 1" Screen "Screen 3" Relative "Screen 1" EndSection

72 54 Servidor Linux para conexiones seguras de una LAN a Internet Aquí se muestra que Screen 1 está arriba, a la izquierda, Screen 2 se encuentra justo a la derecha de Screen 1, y Screen 3 esta 2048 pixels a la derecha de Screen 1. Esto le permite distribuir sus ventanas en varios monitores y moverse entre ellos con facilidad. Sin embargo, de manera predeterminada, no puede tener ventanas que estén solapadas entre varios monitores. Al usar un nuevo módulo llamado Xinerama, se pueden tratar varios monitores como si fuese un único espacio de trabajo, moviendo las ventanas alrededor de ellos sin fragmentarlas. Xinerama ha de ser soportado por el gestor de ventanas, en mi caso que uso Enlightenment si se puede. Sección ServerFlags Esta sección define varios indicadores de opción de Xfree86. Las configuraciones predeterminadas para estos indicadores son válidas en casi todas las situaciones y necesitarán modificaciones en contadas ocasiones. Si se necesita investigar estas opciones, los comentarios que se encuentran en el archivo de configuración son bastante clarificadores. Ejemplo de un archivo /etc/x11/xf86config-4 Cuadro 6.1: Archivo /etc/x11/xf86config-4 # XF86Config-4 (XFree86 X Window System server configuration file) # # This file was generated by dexconf, the Debian X Configuration tool, using # values from the debconf database. # # Edit this file with caution, and see the XF86Config-4 manual page. # (Type "man XF86Config-4" at the shell prompt.) # # This file is automatically updated on xserver-xfree86 package upgrades *only* # if it has not been modified since the last upgrade of the xserver-xfree86 # package. # # If you have edited this file but would like it to be automatically updated # again, run the following commands as root: # # cp /etc/x11/xf86config-4 /etc/x11/xf86config-4.custom # md5sum /etc/x11/xf86config-4 >/var/lib/xfree86/xf86config-4.md5sum # dpkg-reconfigure xserver-xfree86 Section "Files" FontPath "unix/:7100" # local font server # if the local font server has problems, we can fall back on these FontPath "/usr/lib/x11/fonts/misc" FontPath "/usr/lib/x11/fonts/cyrillic" FontPath "/usr/lib/x11/fonts/100dpi/:unscaled" FontPath "/usr/lib/x11/fonts/75dpi/:unscaled" FontPath "/usr/lib/x11/fonts/type1" FontPath "/usr/lib/x11/fonts/cid" FontPath "/usr/lib/x11/fonts/speedo" FontPath "/usr/lib/x11/fonts/100dpi" FontPath "/usr/lib/x11/fonts/75dpi" EndSection Section "Module" Load "GLcore" Load "bitmap" Load "dbe" Load "ddc" Load "dri" Load "extmod" Load "freetype" Load "glx" Load "int10" Load "record" Load "speedo" Load "type1" Load "vbe" EndSection Section "InputDevice" Identifier "Generic Keyboard" Driver "keyboard" Option "CoreKeyboard" Option "XkbRules" "xfree86" Option "XkbModel" "pc105" Option "XkbLayout" "es" EndSection

73 Capítulo 6. Interfaz gráfico 55 Section "InputDevice" Identifier "Configured Mouse" Driver "mouse" Option "CorePointer" Option "Device" "/dev/psaux" Option "Protocol" "PS/2" Option "Emulate3Buttons" "true" Option "ZAxisMapping" "4 5" EndSection Section "InputDevice" Identifier "Generic Mouse" Driver "mouse" Option "SendCoreEvents" "true" Option "Device" "/dev/input/mice" Option "Protocol" "ImPS/2" Option "Emulate3Buttons" "true" Option "ZAxisMapping" "4 5" EndSection Section "Device" Identifier "Generic Video Card" Driver "vesa" Option "UseFBDev" "true" EndSection Section "Monitor" Identifier "Generic Monitor" HorizSync VertRefresh Option "DPMS" EndSection Section "Screen" Identifier "Default Screen" Device "Generic Video Card" Monitor "Generic Monitor" DefaultDepth 24 SubSection "Display" Depth 1 Modes "1600x1200" "1280x1024" "1280x960" "1152x864" "1024x768" "800x600" "640x480" EndSubSection SubSection "Display" Depth 4 Modes "1600x1200" "1280x1024" "1280x960" "1152x864" "1024x768" "800x600" "640x480" EndSubSection SubSection "Display" Depth 8 Modes "1600x1200" "1280x1024" "1280x960" "1152x864" "1024x768" "800x600" "640x480" EndSubSection SubSection "Display" Depth 15 Modes "1600x1200" "1280x1024" "1280x960" "1152x864" "1024x768" "800x600" "640x480" EndSubSection SubSection "Display" Depth 16 Modes "1600x1200" "1280x1024" "1280x960" "1152x864" "1024x768" "800x600" "640x480" EndSubSection SubSection "Display" Depth 24 Modes "1600x1200" "1280x1024" "1280x960" "1152x864" "1024x768" "800x600" "640x480" EndSubSection EndSection Section "ServerLayout" Identifier "Default Layout" Screen "Default Screen" InputDevice "Generic Keyboard" InputDevice "Configured Mouse" InputDevice "Generic Mouse" EndSection Section "DRI" Mode 0666 EndSection Arrancar X-Windows Para entrar en el entorno X-Windows simplemente es necesario ejecutar: $startx Para poder elegir entre que sistema de ventanas queremos arrancar tenemos que modificar el archivo de configuración de usuario /.xinitrc. $vi ~/.xinitrc,... para editar el archivo. Añadir las siguientes líneas para arrancar KDE: #!/bin/sh startkde

74 56 Servidor Linux para conexiones seguras de una LAN a Internet Añadir las siguientes líneas para arrancar GNOME: #!/bin/sh gnome-session Si el archivo no está vacío, probablemente la última línea sea un comando exec. Es necesario cambiarlo por la opción que hayamos escogido Gestores de ventanas El gestor de ventanas se preocupa de dibujar los bordes, usar el color y hacer que el entorno sea agradable a la vista. Sólo se requiere usar las llamadas estándares al subsistema X-Windows para dibujar sobre la pantalla. El gestor de ventanas no dicta cómo debe utilizar las ventanas la propia aplicación. Esto significa que los programadores de aplicaciones tienen la flexibilidad adecuada para desarrollar la interfaz de usuario más intuitiva para la aplicación en particular. Son programas clientes de las X, forman parte del entorno de escritorio o, en otros casos, se ejecutan independientes de un escritorio. Su propósito principal es controlar la forma en que las ventanas gráficas son posicionadas, redimensionadas o movidas. Controlan las barras de títulos, el comportamiento del foco, los vínculos del botón del ratón y teclas especificadas por el usuario. Los gestores de ventanas generalmente son más pequeños que los escritorios y están más orientados hacia usuarios expertos, que se sienten más a gusto con un interfaz de línea de comandos. Como las X no especifican un gestor de ventanas en particular, a lo largo de los años han aparecido muchos. Algunos de los más populares para Linux son fvwm2, Window Maker, blackbox y AfterStep. Muchos gestores estan basados bien en el Tab Window Manger, un administrador de ventanas muy simple y que consume pocos recursos, o bien en NeXTSTEP, muy completo y altamente configurable. Paso a describir las características de los más extendidos, aunque no todos están aquí, existen muchos otros: twm: Tab Windows Manager, gestor de ventanas minimalista que proporciona el conjunto de utilidades más básico de cualquier otro. fvwm2: F Virtual Windows Manager, un derivado de twm que incorpora un aspecto visual en 3D y tiene menos requisitos de memoria. Es uno de los mas extendidos. AfterSTEP: Emula la interfaz NeXT y está basado en fvwm2. wmaker: WindowMaker, completísimo gestor de ventanas GNU diseado para emular el aspecto del entorno NeXT. blackbox: También inspirado en NeXT. Es un muy ligero y rápido. Enlightenment: Era el gestor predeterminado de GNOME. Es muy grande, pero muy atractivo a la vista. Posiblemente es el más configurable de todos. Sawfish: Enormemente configurable, pero mucho más ligero que Enlightenment es ahora el gestor por defecto en el entorno de escritorio GNOME, pero puede ser usado sin él. Se está convirtiendo rápidamente en uno de los gestores con más aceptación. Kwin: El gestor de ventanas KWin es el gestor por defecto para el entorno KDE. Soporta temas personalizados.

75 Capítulo 6. Interfaz gráfico 57 Estos gestores pueden ejecutarse sin los entornos de escritorio para poder observar sus diferencias, mediante el siguiente comando: $xinit -e <path-gestor-ventanas> Donde <path-gestor-ventanas> es el path del archivo binario del gestor de ventanas. Si no sabemos el path, lo podemos buscar con el comando which. También existe un paquete llamado wmanager que permite seleccionar el gestor de ventanas al arrancar las X Entornos de escritorio A diferencia de los gestores de ventanas, los escritorios incluyen la posibilidad de colocar archivos y directorios directamente sobre el fondo del mismo. Incluyen la capacidad de arrastrar y soltar, esto permite que los iconos que representan archivos sean arrastrados con el ratón y soltados sobre un icono que representa una aplicación. La aplicación se abrirá entonces, utilizando el archivo. Los escritorios también pueden suministrar otras aplicaciones. En general, los escritorios están orientados a los usuarios más novatos (aunque los usuarios avanzados también los encuentran increíblemente útiles). A menudo, un usuario de escritorio puede efectuar todo su trabajo sin invocar nunca a una línea de comandos. Desde la aparición de KDE 3.3, parece haber eclipsado al resto de entornos de escritorio, GNOME incluido. Ello es debido a que han desarrollado un interfaz más versátil y agradable a la vista. Al final, la elección del gestor de ventanas es solo cuestion de gustos. En mi caso, para la elaboración del proyecto he utilizado GNOME como entorno de escritorio y las bibliotecas KDE para ejecutar la aplicación Kile, un editor de textos L A TEX Kde KDE 1 es el entorno de escritorio que actualmente copa el mercado. Es ligeramente diferente de los gestores de ventanas típicos. En lugar de describir cómo se debe ver la interfaz, KDE proporciona un conjunto de bibliotecas que, si se usan, permiten a una aplicación mejorar algunas características especiales que no las ofrecen el resto. Esto incluye cosas como soporte a pinchar y arrastrar, soporte de impresión estandarizado, etc. El punto negativo de este tipo de técnicas de gestión de ventanas es que una vez que una aplicación se diseña para ejecutarse con KDE, requiere KDE para trabajar. Esto es un gran cambio con respecto a los primeros gestores de ventanas donde las aplicaciones eran independientes del gestor. Esta basado en las bibliotecas Qt3. Desde el punto de vista del programador, KDE ofrece unas bibliotecas que son mucho más sencillas de usar que el trabajo directo con la interfaz X. Se ofrece un conjunto de herramientas orientadas a objetos estándar que permite construir otras herramientas, algo que sólo está disponible con X-Windows. 1 K Desktop Environment, entorno de escritorio K.

76 58 Servidor Linux para conexiones seguras de una LAN a Internet Gnome Hasta hace pocos años había algunos problemas con las restricciones de licencias impuestas por los desarrolladores de la biblioteca Qt3, en la que KDE está basado. Estaba prohibido el uso comercial de KDE sin pagar derechos. El proyecto GNOME 1 comenzó debido a esta resticción. Hace un tiempo se revisó la licencia de KDE. La licencia revisada, conocida como QPL, es ahora más abierta y permite su uso comercial. Sin embargo, es distinta la licencia GPL y el estilo de licencias de Berkley usado por la mayoría de los paquetes que usan las distribuciones Linux. Tanto GNOME, como KDE, ofrece un entorno de escritorio completo y un marco de aplicaciones para desarrollo tan bueno como de fácil uso. Lo que hace a GNOME diferente es cómo alcanza sus objetivos. A diferencia de KDE, GNOME no es un gestor de ventanas en si mismo. Necesita apoyarse en un gestor de ventanas externo, que se encuentra en lo más alto de su estructura y muestra la apariencia general del escritorio. El gestor de ventanas por defecto es Sawfish, pero contamos con multitud de opciones disponibles (Vease seccion 6.2 Esta basado en las bibliotecas GTK+2 que permiten el desarrollo del entorno y las características de gestión de sesión, que nosotros como usuarios no vemos. Desde el punto de vista del desarrollador, GNOME es muy interesante. Define sus interfaces con el resto del mundo mediante tecnología CORBA 2. De esta manera, cualquier sistema de desarrollo que pueda comunicarse usando CORBA puede utilizarse para desarrollar aplicaciones compiladas en GNOME Otros entornos de escritorio No solo existen KDE o GNOME, también podemos encontrar estos otros entornos de escritorio: CDE 3 : Desarrollado por algunos fabricantes de Unix, es uno de los más primitivos. A sido portado a Linux, pero no es libre ni gratuito. XFce: Esta basado en las bibliotecas GTK+2, al igual que GNOME, y ofrece una interfaz similar a CDE. Su ventaja es que es sencillo y utiliza pocos recursos, es ideal para maquinas con poca capacidad o aquellos que prefieran ahorrar recursos para sus aplicaciones. Trabaja especialmente bien con programas GNOME, peor también maneja sin dificultad aplicaciones KDE. 1 Entorno de modelo de objeto de red GNU. 2 Common Object Request Broker Architecture, es un estándar que establece una plataforma de desarrollo de sistemas distribuidos facilitando la invocación de métodos remotos bajo un paradigma orientado a objetos. 3 Common Desktop Environment, entorno de escritorio común.

77 Capítulo 7 Infraestructura de redes Para podernos situar en el marco de las configuraciones de redes, primero debemos conocer una serie de conceptos y arquitecturas que se describen en las secciones siguientes del presente capítulo. Esta sección se ha basado en la documentación que se puede obtener en: atm/tcp-ip/index.html 7.1. Arquitectura de redes (Modelo OSI) Antes de conocer realmente los servicios de red y la seguridad en redes, primero se tiene que conocer la arquitectura de redes, cómo son y cómo están diseñadas. Cada diseño de red se divide en siete partes lógicas, cada una de las cuales controla una parte diferente de la tarea de comunicación. Este diseño de siete capas se denomina Modelo de referencia OSI. Dicho modelo fue creado por la Organización internacional de estándares (ISO, International Standard Organization) para proporcionar un modelo lógico para la descripción de comunicaciones de red y ayuda a los suministradores a estandarizar los equipos y el software. La tabla 7.1 muestra la composición del modelo. Cuadro 7.1: Estructura del modelo de referencia OSI N. o de capa OSI Nombre de la capa Protocolos de ejemplo Capa 7 Aplicación DNS, FTP, HTTP, SMTP, Telnet Capa 6 Presentación XDR Capa 5 Sesión Pipes con nombre, RPC Capa 4 Transporte NetBIOS, TCP, UDP Capa 3 Red ARP, IP, IPX, OSPF Capa 2 Enlace de datos Acrcnet, Ethernet, Token Ring Capa 1 Física Coaxial, Fibra óptica, UTP Capa Física Esta capa es el medio físico real que contiene los datos. Los distintos tipos de medios siguen diferentes estándares. Por ejemplo, el cable coaxial, el par trenzado (UTP, Unshielded Twisted Pair) y el cable de fibra óptica sirven para distintos propósitos: el cable coaxial se usa en instalaciones LAN antiguas así como en servicios de Internet a través de redes de TV por cable. UTP se usa normalmente en cableados domésticos, mientras que la fibra óptica se suele usar para conexiones de distancias largas que requieren una capacidad de carga alta.

78 60 Servidor Linux para conexiones seguras de una LAN a Internet Capa de enlade datos Esta capa relaciona los distintos elementos del hardware de interfaz de red en la red. Ayuda a codificar los datos y a colocarlos en el medio físico. También permite que los dispositivos se identifiquen entre sí cuando intentan comunicarse con otro nodo. Un ejemplo de una dirección de la capa de enlace de datos es la dirección MAC de nuestra tarjeta de red. En una red Ethernet, las direcciones MAC son el medio por el que se puede encontrar a nuestro ordenador en la red. Las empresas utilizaban muchos tipos diferentes de estándares de enlace entre 1970 y 1980, la mayoría determinados por su suministrador de hardware. IBM utilizaba Token Ring para sus redes de PC y SNA para la mayor parte de su hardware más grande; DEC utilizaba un estándar diferente y Apple otro. La mayoría de las empresas actuales utilizan Ethernet porque es el más extendido y económico. Capa de red Esta capa es la primera parte que podemos ver cuando interactuamos con sistemas de red TCP/IP. La capa de red permite las comunicaciones entre diferentes redes físicas utilizando una capa de identificación secundaria. En los sistemas de red TCP/IP, se trata de una dirección IP. Esta dirección IP en nuestro ordenador nos ayuda a enrutar los datos de un lugar a otro de la red y sobre Internet. Esta dirección es un número único para identificar nuestro ordenador en una red basada en IP. En algunos casos, este número es único para un ordenador; ninguna otra máquina en Internet puede tener dicha dirección. Es el caso de las direcciones IP normales que se pueden enrutar públicamente. En las LAN internas, las máquinas normalmente utilizan bloques de direcciones IP. Estas se han reservado sólo para su uso interno y no se enrutarán por Internet. Estos números pueden no ser únicos de una red a otra, pero siguen siendo únicos dentro de cada LAN. Aunque dos ordenadores pueden tener la misma dirección IP privada sobre diferentes redes internas, nunca tendrán la misma dirección MAC, ya que es un número de serie asignado por el fabricante. Existen excepciones a esta regla pero, en general, la dirección MAC identificará de forma única dicho ordenador o al menos, la tarjeta de interfaz de red (NIC, Network Interface Card) dentro del ordenador. Capa de transporte Este nivel lleva el paquete de datos desde el punto A hasta el punto B. Es la capa donde residen los protocolos TCP y UDP. El protocolo de control de transmisión (TCP, Transmission Control Protocol) básicamente asegura que los paquetes se envían y se reciben con consistencia en el otro punto. Permite una corrección de errores a nivel de bits, una retransmisión de segmentos perdidos y una reorganización de los paquetes y el tráfico desfragmentado. El protocolo de datagramas de usuario (UDP, User Datagram Protocol) es un esquema más ligero empleado para tráfico multimedia y para transmisiones cortas, como las solicitudes DNS. También efectúa detección de errores, pero no proporciona ninguna facilidad para reorganizar los datos o asegurar la llegada de datos. Esta capa y la capa de red es donde operan la mayoría de los cortafuegos. Capa de sesión La capa de sesión se encuentra implicada principalmente en la configuración de una conexión y en su cierre posterior. También realiza autenticaciones para determinar qué partes pueden participar en una sesión. Se utiliza principalmente en aplicaciones específicas. Capa de presentación Esta capa controla determinadas codificaciones y descodificaciones requeridas para presentar los datos en un formato legible para la parte receptora. Algunas formas de cifrado pueden considerarse como presentación. La distinción entre la capa de aplicación y la de sesión es muy delicada y algunos afirman que la capa de presentación y la de aplicación son básicamente iguales.

79 Capítulo 7. Infraestructura de redes 61 Capa de aplicación Este nivel final es donde el programa de la aplicación obtiene los datos, que pueden ser FTP, HTTP, SMTP, etc. Aquí, algunos programas se encargan de controlar los datos reales dentro del paquete y se ajustan las soluciones profesionales de seguridad, ya que la mayoría de los ataques se producen en esta capa Direcciones IP Cada computador (host) y cada dispositivo de encaminamiento (router) tendrá una dirección única cuya longitud será de 32 bits, que será utilizada en los campos dirección origen y dirección destino de la cabecera IP. Esta dirección consta de un identificador de red y de un identificador de host. La dirección está codificada para permitir una asignación variable de los bits utilizados al especificar la red y el computador. La dirección IP más pequeña es la y la mayor es Existen tres clases de redes que se pueden clasificar teniendo en cuenta la longitud del campo de red y del campo host. La clase a la que pertenece una dirección puede ser determinada por la posición del primer 0 en los cuatro primeros bits. Las direcciones están codificadas para permitir una asignación variable de bits para especificar la red y el host. Clase A: Pocas redes, cada una con muchos ordenadores. 1 bit de selección de clase A, 7 bits de red y 24 bits de host (Por ejemplo ARPANET) Clase B: Un número medio de redes, cada una con un número medio de ordenadores. 2 bits de selección de clase B, 14 bits de red y 16 bits de host. Clase C : Muchas redes, cada una con pocos ordenadores. 3 bits de selección de clase C, 21 bits de red y 8 bits de host (LANs). Clase D: Permite hacer multitransmisión (o multicasting) en la cual el datagrama se dirige a múltiples ordenadores. Podemos enviar un paquete IP a un grupo de máquinas que por ejemplo pueden estar cooperando de alguna manera mediante la utilización de una dirección de grupo Clase E: No se utiliza, queda reservado para otros usos Figura 7.1: Rango de direcciones IP En el siguiente cuadro podemos observar el número de redes y de ordenadores por red en cada una de las tres clases primarias de direcciones IP.

80 62 Servidor Linux para conexiones seguras de una LAN a Internet Cuadro 7.2: N. o de Hosts por red Clase Bits en el prefijo Máximo n. o de redes Bits en el sufijo Máximo n. o de hosts por red A B C Normalmente las direcciones se suelen escribir en notación decimal con puntos (calculando cada ocho bits). Por ejemplo, la dirección 82CE7C0D ( que es de clase B) se escribe como = 8* = = 130 CE = C*16 + E = 12 * = = 206 7C = 7 * 16 + C = = 124 0D = D = 13 Algunas direcciones de red se utilizan como direcciones especiales (Vease figura 7.2): Este host: La dirección significa esta red o este host y únicamente es usada por los ordenadores cuando son arrancados, sin que vuelva a utilizarse posteriormente. De esta forma las máquinas se pueden referir a su propia red sin saber su número, pero la clase s ha de ser conocida para saber cuantos ceros debe incluir. Un host de esta red: Poniendo el campo red todo a ceros (es necesario saber la clase de la red para decidir el número de ceros). Difusión de red local o limitada: La dirección (todos 1s) se usa como dirección para indicar todos los ordenadores de la red indicada y es utilizada para hacer difusión. Difusión de una red distante o dirigida (broadcast): También se puede hacer difusión a una red distante poniendo la dirección de la red y rellenando el campo ordenador con 1s. Retrociclo: Las direcciones 127.xx.yy.zz se reservan para pruebas de realimentación (localhost). Los paquetes que tienen esta dirección no son enviados por la red sino que son procesados localmente y se tratan como si fueran paquetes de entrada (pasan por la tarjeta de red, pero sin salir del host). Esto permite que los paquetes se envíen a la red local sin que el transmisor conozca su número. Esta característica también se usa para la detección de fallos en el software de red. Figura 7.2: Direcciones IP reservadas

81 Capítulo 7. Infraestructura de redes 63 Para estar seguros de que las direcciones Internet son únicas, todas las direcciones de Internet son asignadas por un autoridad central. La IANA (Internet Assigned Number Authority) tiene el control sobre los números asignados. Sin embargo, cuando una organización quiere una dirección debe obtenerla de INTERNIC (Internet Network Information Center). La autoridad central sólo es necesaria para asignar la porción de la dirección correspondiente a la red, cuando una organización ya tiene su prefijo, puede asignar un único sufijo a cada ordenador sin contactar con la autoridad central. Una máquina puede estar conectada a varias redes y tener una dirección IP diferente en cada red. En este caso recibe el nombre de multihomed. Esto se utiliza para aumentar la seguridad, si una red falla el host aún está conectado a internet utilizando la otra red. Por otra parte, también es usado para aumentar el rendimiento de la red, pues permite enviar directamente el tráfico a una red en concreto sin tener que pasar por los dispositivos de encaminamiento. Que la dirección de la red esté guardada en la dirección Internet tiene algunos inconvenientes: Si la dirección IP identifica la red a la que se conecta el ordenador, no al ordenador que tenemos conectado, no es posible asignarle a un ordenador una dirección IP permanente. Por lo tanto, si movemos un ordenador de una red a otra su dirección IP debe cambiar. Este problema se da cuando, por ejemplo, nos llevamos un ordenador portátil de un sitio a otro y queremos conectarlo a la red. Como el número de ordenadores asignados a la clase C (255) puede resultar insuficiente en muchos casos y que la transición a la clase B no es fácil debido a que muchos programas no permiten que una red física tenga múltiples direcciones, no se pueden introducir nuevas direcciones poco a poco y es necesario reconfigurar toda la red para la nueva clase. Como existe la facilidad de que una máquina pueda estar conectada a dos redes y por lo tanto tenga dos direcciones diferentes, el encaminamiento se hace teniendo en cuenta la dirección IP, el comportamiento de los paquetes puede ser totalmente diferente dependiendo de la dirección que estemos utilizando. Esto puede resultar sorprendente para los usuarios. En algunos casos, el conocer una dirección IP puede resultar insuficiente para alcanzar la máquina que utiliza esta dirección. Debido a la configuración de la red y dependiendo de por donde se enruten los paquetes en nuestra red, algunos equipos pueden resultar inalcazables Datagramas Los datos proporcionados por la capa de transporte son divididos en datagramas y transmitidos a través de la capa de red (capa internet), por el protocolo IP. Durante el camino puede ser fragmentado en unidades más pequeñas, si deben atravesar una red o subred cuyo tamaño de paquete sea más pequeño. En la máquina destino, estas unidades son reensambladas para volver a tener el datagrama original que es entregado a la capa de transporte. En la cabecera hay una parte fija de 20 bytes y una parte opcional de longitud variable. En la figura 7.3 se puede observar el formato de la cabecera IP Encaminamiento IP (router y gateway) Cuando un paquete llega a un dispositivo de encaminamiento, se debe determinar cuál es la dirección del siguiente dispositivo de encaminamiento teniendo en cuenta la dirección IP destino que hay almacenada en el campo correspondiente del paquete y de la información que hay almacenada en las tablas de encaminamiento. Hay que tener en cuenta que es necesario realizar una conversión entre la dirección IP y la dirección MAC (cuando el enlace entre los dos dispositivos de encaminamiento sea una LAN) que se efectúa de manera automática mediante el protocolo ARP. Esta tabla puede ser estática o dinámica. En el primer caso puede contener rutas alternativas que serán utilizadas cuando algún dispositivo de encaminamiento no esté disponible. Las tablas dinámicas son más flexibles cuando aparecen errores o congestión en la red. Estas tablas también pueden proporcionar servicios de seguridad y de prioridad, por ejemplo, para asegurarse que a ciertos datos no se les permita pasar por determinadas redes.

82 64 Servidor Linux para conexiones seguras de una LAN a Internet Figura 7.3: Cabecera del datagrama IP Otra técnica de encaminamiento es el encaminamiento en la fuente. En este caso, como ya comentamos anteriormente, el ordenador origen incluye en la cabecera del paquete la dirección de los dispositivos de encaminamiento que debe utilizar el paquete Máscaras de red y notación de barra inclinada El propósito de configurar una máscara es, en primer lugar, decirle al sistema qué bits de la dirección IP corresponden al componente de red y qué bits corresponden al componente host. Basados en estos dos componentes de red, un host puede determinar cuál es su dirección de broadcast o de difusión de red (es decir, la dirección IP que corresponde al envío de un paquete a todas las máquinas de la red local). Normalmente nos referiremos a las redes IP como máscaras de red o con una barra inclinada y un número. Ambas son formas de definir el tamaño de la red. Para entenderlas tenemos que conocer un poco de la estructura de la dirección IP. Una dirección IPv4 estándar esta formada por 32 bits. Normalmente se representa en cuatro secciones, con cuatro octetos de 8 bits cada una. Cada octeto, normalmente se convierte de un conjunto de bits binarios, a un numero decimal para facilitar su lectura. Por tanto, cuando vemos , el ordenador ve lo siguiente: Una máscara de red normalmente es un conjunto de cuatro números que nos indica dónde finalizan los bits de red y donde comienzan los de hosts. Normalmente tiene la siguiente apariencia: Una forma rápida de calcular el tamaño de una red representada por una máscara de red es restar cada octeto de 256 y multiplicar dichos números entre sí. Por ejemplo, la máscara de red de describe una red de 8 IPs porque: ( ) * ( ) * ( ) * ( ) = 8 Una máscara de red de describe una red de 256 IPs ya que: ( ) * ( ) * ( ) * (256-0) = 256

83 Capítulo 7. Infraestructura de redes 65 Y por último, una máscara de red de describe una red de direcciones IP porque: ( ) * ( ) * (256-0) * (256-0) = La notación de barra inclinada es algo más difícil de entender, aunque utiliza el mismo concepto. El número que se encuentra detras de la barra inclinada indica la cantidad de bits que describen la dirección de red (para una explicación con más detalle, véase la sección 7.2.4). Si restamos de 32 dicho número obtenendremos el número de bits que desciben la dirección de host dentro de la red local. Por ejemplo la notación /24 describe una red que empieza en que contiene 256 direcciones IP de tamaño (es decir, el mismo tamaño que el de arriba con una máscara de red de ). Los 32 bits en una dirección IP menos los 24 bits para el prefijo de red deja 8 bits activados (igual a 1) para los hosts de la red local. Un número binario de bits de convertido en decimal es 255. Si las matemáticas binarias nos resultan complicadas, podemos utilizaremos la siguiente tabla para recordarlo. Cuadro 7.3: Notación de barra inclinada en IPs Notación de barra inclinada Tamaño de la red / direcciones IP / direcciones IP /26 64 direcciones IP /27 32 direcciones IP /28 16 direcciones IP /29 8 direcciones IP /30 4 direcciones IP /31 2 direcciones IP /32 1 dirección IP Subneting (CIDR) Incluso si tenemos una clase de direcciones A o B, no es realista configurar la red como un gran grupo de máquinas. Aparte de resultar una pesadilla para administrar, resulta muy difícil encontrar una red capaz de tener tantas máquinas agrupadas juntas. Por ejemplo, Ethernet sólo permite configurar hosts por segmento. Para resolver este problema, estas redes enormes se dividen en subredes más pequeñas. Esto se hace expandiendo el número de bits usados para representar la dirección de red, una técnica conocida como subneting ó CIDR (Classless Inter Domain Routing, enrutamiento interdominio sin clases) debido a que viola la descripción de las redes A, B y C. Un lugar típico para ver esto es en las redes IP privadas. La mayoría de las organizaciones no tienen 16 millones de computadoras, sino que cada división de la organización se convierte en una subred. La mayoría de las veces, la elección razonable es escoger una máscara de 24 bits ( ) para conseguir 254 máquinas por red (recordamos que.0 es la dirección de red y.255 la dirección de broadcast), un nivel bastante razonable de agrupamiento de máquinas. Cuando se utilizan subredes, en las tablas de encaminamiento se agregan entradas de la forma (ésta red, subred, 0) y (ésta red, ésta subred, 0). De esa forma, un dispositivo de encaminamiento de la subred k sabe cómo llegar a todas las subredes y a todos los hosts de la subred k. No necesita saber nada de los hosts de otras subredes. Cada encaminador lo que debe hacer es un AND booleano con la máscara de la subred para eliminar el número de host y buscar la información resultante en sus tablas.

84 66 Servidor Linux para conexiones seguras de una LAN a Internet Enmascaramiento IP (NAT, Network Adress Translation) Un escenario común para los usuarios familiares y de oficinas pequeñas es tener una cuenta de conexión punto a punto para varias computadoras que quieran usarla (con frecuencia, al mismo tiempo). Para hacer esto aún más difícil, sólo tenemos una dirección IP. El enmascaramiento de IP resuelve este problema permitiendo a nuestro sistema Linux hacer dos trucos: actuar como un enrutador y realizar la traslación de direcciones de red, NAT. Nuestra red LAN, usa un rango de direcciones IP privadas, para redes pequeñas, el rango trabaja bien. Lo que queremos es que nuestro servidor enrute los paquetes entre las máquinas de la LAN de forma que cuando vayan a Internet, parezca que los origina él. Cuando vuelve un paquete como respuesta, el servidor sabe que realmente el paquete va destinado a una máquina de la red y se lo envía. No se puede asumir como única forma de funcionamiento el enmascaramiento de IP con un router. Una interfaz de red ppp0 puede ser cualquier tipo de interfaz de red. Por ejemplo, en una configuración de firewall la interfaz de salida puede ser, simplemente, una segunda tarjeta Ethernet que la une a la red corporativa. Configuración de IPTables para NAT Lo primero que necesitamos es asegurarnos de que tenemos cargado el módulo iptables nat en el kernel. Después instalaremos el siguiente paquete: #apt-get install ipmasq Si nuestra red contiene la red y el servidor conectado a un interfaz ppp0 desde el que se recibe el acceso a internet. Para realizar el enmascaramiento IP necesitamos utilizar el firewall IPTables, ejecutamos las siguientes instrucciones #iptables -t nat -F : Configura el comportamiento de iptables, le dice que va a usar nat y quita las politicas actuales para nat (-F) #iptables -t nat -A POSTROUTING -s /24 -d /0 -j MASQUERADE : Añade la regla de enmascaramiento. Todos los paquetes que salgan por enrutados desde la red a Internet se enmascarán #echo 1 > /proc/sys/net/ipv4/ip_forward : Activamos el ip forward El mecanismo de enmascaramiento se ocupa de reescribir el paquete y dejarlo en Internet. Cuando un paquete entra en la interfaz ppp0 desde Internet, Linux comprueba con el mecanismo de enmascaramiento si el paquete está realmente destinado para alguien de dentro de la red. Si es así, el paquete se desenmascara y después se envía al emisor original de la LAN. Proxies: Problemas con el enmascaramiento Desafortunadamente, no todos los protocolos enmascaran bien. FTP es un ejemplo perfecto de esto. Cuando un cliente FTP se conecta a un servidor FTP, empieza conectándose al puerto 21 del servidor. El cliente pasa toda la información de usuario/contraseña a través de este puerto. Sin embargo, cuando el cliente pide al servidor que le envíe un archivo, el servidor inicia una conexión nueva de vuelta al cliente. Si el cliente está enmascarado, entonces la máquina probablemente rechace la conexión porque no tendrá un programa escuchando en ese puerto y la transferencia se interrumpirá. FTP es uno de los muchos protocolos que hacen cosas extrañas. A fin de permitir el enmascaramiento de estos protocolos, debemos colocar un proxy especial. IPTables esta equipado con los proxies más comunes: FTP, IRC y otros. Para usar estos módulos simplemente hay que incluir la sentencia insmod en tiempo de arranque. Por ejemplo, podemos añadir a los scripts de arranque: insmod ip_masq_ftp insmod ip_masq_irc

85 Capítulo 7. Infraestructura de redes 67 También lo podemos hacer con reglas, añadiendo el redireccionamiento de los puertos que utilice el protocolo. Esto se observa en el siguiente ejemplo: Enviamos el tráfico que entra, dirigido por eth0 al puerto 80 (web), a nuestro proxy squid (transparente) por el puerto 3128 de nuestra máquina: #iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port Resolución de direcciones Dos ordenadores de una red física sólo pueden comunicarse si cada uno de ellos conoce la dirección física del otro. Cuando enviamos un paquete IP entre estas dos máquinas sólo indicamos la dirección IP. Por lo tanto es necesario tener un mecanismo que nos proporcione la correspondencia entre la dirección IP y la dirección física. Como la dirección IP es virtual, pues es mantenida por software, ningún elemento hardware entiende la relación: entre el prefijo de la dirección IP y la red, y la relación entre el sufijo de la dirección IP y el host. La traslación entre direcciones IP y direcciones físicas es local a la red. Un ordenador sólo puede obtener la dirección física de otro si ambos se encuentran en la misma red física. Existen tres mecanismos para hacer la traslación: El primero utiliza un tabla en cada máquina para almacenar para cada dirección IP la correspondiente dirección física. Cada entrada de la tabla contiene una dirección IP y una dirección física. Como existe una tabla para cada red física, todos las direcciones IP tienen el mismo prefijo. En el siguiente ejemplo podemos observar la traducción entre dirección IP y dirección física. Dirección IP Dirección Ethernet F:13:26:36:F3:B A4:34:27:AE:B1:10 El segundo realiza la traducción mediante una función matemática. Aunque muchas tecnologías utilizan direcciones físicas estáticas, algunas usan direccionamiento configurable, es decir, el administrador de la red elige tanto la dirección física como la dirección IP. En este caso, los valores pueden ser elegidos para que la traslación sea trivial. El tercero es el más interesante pues usa una computación distribuida en la que los dos ordenadores intercambian mensajes dinámicamente. En este caso, el ordenador que conoce la dirección IP de otro ordenador pero desconoce su dirección física, envía un mensaje a la red con la dirección IP conocida y recibe de la red una respuesta con la dirección física. Existen dos posibles diseños: 1. En el primero hay uno o más servidores que se encargan de enviar las respuestas. La principal ventaja de este diseño es que es centralizado y por lo tanto fácil de configurar, gestionar y controlar. Tiene el inconveniente de que estos servidores pueden ser un cuello de botella en una red grande. 2. En el segundo diseño, se hace un broadcast de la petición (envío a la dirección de difusión de red) y todos los ordenadores participan en la resolución de la dirección, en concreto responde el que tiene la dirección pedida. La principal ventaja de este diseño es que el cálculo es distribuido. Este diseño es el utilizado en el ARP, una de las ventajas de este método sobre tener unos archivos de configuración es su sencillez. El propio protocolo se encarga de construir las tablas en lugar de tener que hacerlo el administrador del sistema.

86 68 Servidor Linux para conexiones seguras de una LAN a Internet ARP (Adress Resolution Protocol) En cada máquina se tiene una tabla que identifica la correspondencia que hay entre la dirección física y la dirección IP del resto de máquinas. Cuando tenemos que enviar un paquete a una dirección IP de la que se desconoce la dirección física entra el funcionamiento el protocolo ARP para actualizar los valores de la tabla. Este protocolo es el encargado de obtener la dirección física de una máquina de la que conoce la dirección IP. Para conseguirlo debe acceder a recursos de bajo nivel. Únicamente hay dos tipos de mensaje que tienen el mismo formato: petición ARP y respuesta ARP. Los mensajes ARP van a ser encapsulados directamente en una trama Ethernet. En el campo tipo de la cabecera de la trama Ethernet es necesario especificar qué contiene un mensaje ARP. El emisor se debe encargar de poner el valor correspodiente y el receptor de mirar el contenido de ese campo. Como Ethernet asigna un único valor para los dos mensajes ARP, el receptor debe examinar el campo operación del mensaje ARP para determinar si es el mensaje recibido es una petición o una respuesta. Es importante destacar, que este protocolo sólo puede ser utilizado en aquellas redes en las cuales es posible hacer un broadcast (difusión de red). Cuando no conocemos la dirección física de la máquina a la que queremos enviar el mensaje es necesario enviar tres mensajes; para que esto no se tenga que repetir para cada paquete que queremos enviar y además se pueda reducir el tráfico, en cada máquina tendremos una pequeña memoria cache en la que guardaremos una tabla con las parejas de direcciones (física, IP). Cuando esta tabla esté llena se irán borrando las más antiguas y las que lleven más tiempo sin ser utilizadas RARP (Reverse Address Resolution Protocol) Cada máquina, además de su dirección física que está en la tarjeta de red, debe tener guardada en algún dispositivo la dirección IP que le corresponde. Pero, cómo una máquina que no disponga de disco duro puede determinar su dirección IP?. El problema es crítico para aquellas estaciones de trabajo que almacenan todos sus ficheros en un servidor remoto ya que ellas deben utilizar los protocolos de transferencia de ficheros de TCP/IP para obtener su imagen de arranque inicial. La idea para encontrar la dirección IP es simple: una máquina que necesita conocer su dirección envía una petición a un servidor que hay en otra máquina y espera hasta que recibe la respuesta. Suponemos que el servidor tiene acceso a un disco que contiene una base de datos de direcciones IP. En la petición, la máquina que necesita conocer su dirección IP únicamente debe identificarse a si misma, y de esta manera el servidor puede buscar su dirección IP y enviarle una respuesta. Tanto la máquina que hace la petición como el servidor que responde usan direcciones físicas durante su breve comunicación. Cómo puede la máquina conocer la dirección del servidor?. Generalmente no la conoce, lo que hace es hacer un broadcast (difusión de red) de su petición a todas las máquina de la red local y esperar que algún servidor responda. De alguna manera lo que hace la máquina es enviar un mensaje diciendo: mi dirección física Ethernet es XX.XX.XX.XX.XX.XX Sabe alguien cual es mi dirección IP? Como podemos ver en esta pregunta, para identificarse, la máquina utiliza su dirección física lo que tiene la ventaja de que siempre está disponible y de que es uniforme para todas las máquinas de una red. En realidad lo que queremos es encontrar la dirección IP de una máquina de la que conocemos su dirección física. El protocolo para conseguir esto es el RARP que es una adaptación del ARP visto anteriormente y que usa el mismo formato de mensaje. Como ocurre con los mensajes ARP, un mensaje RARP es enviado de una máquina a otra encapsulado en la porción de datos de la trama física, por ejemplo en una trama Ethernet.

87 Capítulo 7. Infraestructura de redes Protocolos de red, IP Entre los protocolos que utilizan IP puro, es decir encapsulan sus mensajes sobre el protocolo IP, encontramos los siguientes: ICMP, OSPF, BGP y IGMP ICMP (Internet Control Message Protocol) Permite el intercambio de mensajes de control y de supervisión entre dos ordenadores. Toda anomalía detectada por el protocolo IP provoca el intercambio de mensajes ICMP entre los nodos de la red. Es un protocolo de control que utilizan los dispositivos de encaminamiento para notificar las incidencias que pueden haber en una red IP. Proporciona información de realimentación sobre los problemas. Estos son los problemas que más frecuentemente se encarga de informar: Un datagrama no puede alcanzar su destino El dispositivo de encaminamiento no tiene la capacidad de almacenar temporalmente el datagramapara poderlo reenviar El dispositivo de encaminamiento indica a un ordenador que envíe el tráfico por una ruta más corta (redireccionamiento de rutas). Cada mensaje se encapsula en un paquete IP y luego es enviado de la forma habitual. Al utilizar IP no se garantiza que llegue a su destino. En el siguiente esquema podemos observar los diferentes tipos de mensajes ICMP: ICMP(3): Detectar destinos inalcanzables ICMP(11): Tiempo excedido ICMP(12): Problema de parámetros ICMP(4): Petición de control de flujo ICMP(5): Redireccionando rutas ICMP(0) y ICMP(8): Eco y respuesta a eco (para los pings) ICMP(13) y ICMP(14): Marca de tiempo y la respuesta ICMP(17) y ICMP(18): Petición de máscara de dirección y la respuesta ICMP(15) y ICMP(16): Petición de información y la respuesta ICMP(9) y ICMP(10): Petición de rutas y su publicación OSPF (Open Shortest Path First) El protocolo OSPF (abrir primero la trayectoria más corta) se usa muy frecuentemente como protocolo de encaminamiento interior en redes TCP/IP. Cuando se diseñó se quiso que cumpliera los siguientes requisitos: Ser abierto en el sentido de que no fuera propiedad de una compañía Que permitiera reconocer varias métricas, entre ellas, la distancia física y el retardo Ser dinámico, es decir, que se adaptará rápida y automáticamente a los cambio de la topología Ser capaz de realizar en encaminamiento dependiendo del tipo de servicio Que pudiera equilibrar las cargas dividiendo la misma entre varias líneas Que reconociera sistemas jerárquicos pues un único ordenador no puede conocer la estructura completa de Internet Que implementara un mínimo de seguridad

88 70 Servidor Linux para conexiones seguras de una LAN a Internet El protocolo OSPF reconoce tres tipos de conexiones y redes: Líneas punto a punto entre dos dispositivos de encaminamiento. Redes multiacceso 1 con difusión de red (por ejemplo, la mayoría de redes LAN). Redes multiacceso sin difusión (por ejemplo, la mayoría de redes WAN de conmutación de paquetes). La función del OSPF es encontrar la trayectoria más corta de un dispositivo de encaminamiento a todos los demás. Cada dispositivo de encaminamiento tiene almacenada en una base de datos la topología de la red de la que forma parte Protocolo BGP (Border Gateway Protocol) El protocolo de pasarela frontera se encarga de mover paquetes de una red a otra pero en algunos casos debe preocuparse de otras cuestiones que no tienen porqué estar relacionadas con el objetivo de mover los paquetes de la forma más eficiente posible. Es posible que se deban considerar algunas restricciones relacionadas con cuestiones comerciales o políticas, como por ejemplo: Una empresa no hace de red de tránsito para los mensajes de la competencia. Nuestros mensajes no deben pasar por países enemigos. Los diferentes dispositivos de encaminamiento BGP se comunican entre sí estableciendo conexiones TCP. Es fundamentalmente un protocolo de vector distancia en el que cada dispositivo de encaminamiento mantiene el coste a cada destino y la trayectoria seguida. Estos valores son dados periódicamente a cada uno de los vecinos enviando mensajes. La esencia de BGP es el intercambio de información de encaminamiento entre dispositivos de encaminamiento. La información de encaminamiento actualizada se va propagando a través de un conjunto de redes. Involucra tres procedimientos funcionales, que son: Obtener información del vecino Detectar los vecinos alcanzables Detectar las redes alcanzables IGMP (Internet Group Management Protocol) Es usado, por ejemplo, para informar a los dispositivos de encaminamiento que un miembro del grupo multicast 2 está en la red conectada al nodo. Está información de los miembros del grupo multicast también es transmitida al emisor del multicast utilizando este protocolo Protocolos de transporte Los protocolos de transporte tienen la función de actuar de interficie entre los niveles orientados a la aplicación y los niveles orientados a la red dentro de la jerarquía de protocolos TCP/IP. Se encargan de ocultar a los niveles altos del sistema el tipo de tecnología a la que se estén conectando los ordenadores. En la jerarquía de TCP/IP se definen dos protocolos de transporte: el UDP y el TCP. El UDP es un protocolo no orientado a la conexión mientras que el TCP es orientado a la conexión. 1 Diremos que una red es multiacceso si tiene varios dispositivos de encaminamiento que se pueden comunicar con los demás. 2 Multicast es el envío de la información a múltiples destinos simultáneamente usando la estrategia más eficiente para el envío del mensajes sobre cada enlace de la red únicamente una vez y creando copias cuando los enlaces en los destinos se dividen. En comparación con multicast, los envíos de un punto a otro se le denomina unicast, y el envío a todos los nodos se le denomina broadcast.

89 Capítulo 7. Infraestructura de redes 71 Se definen dos direcciones para relacionar el nivel de transporte con los niveles superior e inferior: La dirección IP es la dirección que identifica un dispositivo dentro de una red. El puerto es un número de 16 bits que se coloca en cada paquete y sirve para identificar la aplicación que requiere la comunicación. La utilidad de los puertos es que permite multiplexar aplicaciones sobre protocolos del nivel de transporte. Es decir, un mismo protocolo de transporte puede llevar información de diferentes aplicaciones y estas son identificadas por el puerto. Para establecer una comunicación entre dos máquinas se ha de utilizar uno de los protocolos de transporte (TCP o UDP) y es necesario conocer tanto el puerto que identifica la aplicación destino como la dirección IP que identifica el terminal o el servidor dentro del conjunto de redes. Los datos que se envían durante la comunicación son empaquetados por los protocolos del nivel de transporte. Los bytes que se transmiten en el TCP reciben el nombre de segmento TCP y los que se transmiten en el UDP el de datagrama UDP. Para establecer una comunicación de utiliza el modelo cliente/servidor. En este caso, el cliente inicia la comunicación y para hacerlo necesita conocer la dirección IP asignada al ordenador servidor y el puerto de la aplicación que identifica la aplicación que se quiere utilizar. El cliente conoce su dirección IP (dirección origen), la dirección del servidor (dirección destino) y el puerto que identifica su aplicación cliente. Para que pueda saber el puerto destino que identifica la aplicación deseada, se utilizan los llamados puertos conocidos que consiste en un número de puerto reservado para identificar una aplicación determinada (Véase apéndice E). El servidor responderá a las peticiones de cualquier cliente. Como el cliente envía en el datagrama UDP y en el segmento TCP tanto el puerto origen como el destino, el servidor conoce el puerto origen una vez ha recibido una petición UDP Este protocolo es no orientado a la conexión, y por lo tanto no proporciona ningún tipo de control de errores ni de flujo, aunque si que utiliza mecanismos de detección de errores. Cuando se detecta un error en un datagrama en lugar de entregarlo a la aplicación se descarta. Este protocolo se ha definido teniendo en cuenta que el protocolo del nivel inferior (el protocolo IP) también es no orientado a la conexión y puede ser interesante tener un protocolo de transporte que explote estas características. Cada datagrama UDP existe independientemente del resto de datagramas UDP. El protocolo UDP es muy sencillo y tiene utilidad para las aplicaciones que requieren pocos retardos o para ser utilizado en sistemas sencillos que no pueden implementar el protocolo TCP. Las características del protocolo UDP son: No garantiza la fiabilidad. No se puede asegurar que un datagrama UDP llegará al destino. No preserva la secuencia de la información que proporciona la aplicación. La información se puede recibir desordenada (como ocurre en IP) y la aplicación debe estar preparada por si se pierden datagramas, llegan con retardo o llegan desordenados. Un datagrama consta de una cabecera y de un cuerpo en el que se encapsulan los datos. La cabecera consta de los siguientes campos: Los campos puerto origen y puerto destino son de 16 bits e identifican las aplicaciones en la máquina origen y en la máquina destino. El campo longitud es de 16 bits e indica en bytes la longitud del datagrama UDP incluyendo la cabecera UDP. En realidad es la longitud del datagrama IP menos el tamaño de la cabecera IP. Como la longitud máxima del datagrama IP es de bytes y la cabecera estándar de IP es de 20 bytes, la longitud máxima de un datagrama UDP es de bytes. El campo suma de comprobación (checksum) es un campo opcional de 16 bits que, a diferencia del campo equivalente de la cabecera IP que solo protegía la cabecera, protege tanto la cabecera como los datos.

90 72 Servidor Linux para conexiones seguras de una LAN a Internet Figura 7.4: Cabecera del datagrama UDP Como el protocolo UDP no está orientado a la conexión y no envía ningún mensaje para confirmar que se han recibido los datagramas, su utilización es adecuada cuando queremos transmitir información en modo multicast (a muchos destinos) o en modo broadcast (a todos los destinos) pues no tiene sentido esperar la confirmación de todos los destinos para continuar con la transmisión. También es importante tener en cuenta que si en una transmisión de este tipo los destinos enviarán confirmación, fácilmente el emisor se vería colapsado, pues por cada paquete que envía recibiría tantas confirmaciones como destinos hayan recibido el paquete. Lo que realmente proporciona UDP respecto a IP es la posibilidad de multiplexación de aplicaciones. La dirección del puerto permite identificar aplicaciones gracias a la dirección del puerto TCP La unidad de datos de este protocolo recibe el nombre de segmento TCP. Como la cabecera debe implementar todos los mecanismos del protocolo su tamaño es bastante grande, como mínimo 20 bytes. Figura 7.5: Cabecera del datagrama TCP A continuación muestro una descripción de cada uno de los campos que forman la cabecera: Puerto origen (16 bits): Es el punto de acceso de la aplicación en el origen. Puerto destino (16 bits): Es el punto de acceso de la aplicación en el destino. Número de secuencia (32 bits): Identifica el primer byte del campo de datos. En este protocolo no se enumeran segmentos sino bytes, por lo que este número indica el primer byte de datos que hay en el segmento. Al principio de la conexión se asigna un número de secuencia inicial (ISN, Initial Sequence Number) y a continuación los bytes son numerados consecutivamente.

91 Capítulo 7. Infraestructura de redes 73 Número de confirmación (ACK) (32 bits): El protocolo TCP utiliza la técnica de piggybacking 1 para reconocer los datos. Cuando el bit ACK está activo, este campo contiene el número de secuencia del primer byte que espera recibir. Es decir, el número ACK=1 indica el último bit reconocido. Longitud de la cabecera (4 bits): Indica el número de palabras de 32 bits que hay en la cabecera. De esta manera el TCP puede saber donde se acaba la cabecera y por lo tanto donde empieza los datos. Normalmente el tamaño de la cabecera es de 20 bytes por lo que en este campo se almacenará el número 5. Si el TCP utiliza todos los campos de opciones la cabecera puede tener una longitud máxima de 60 bytes almacenándose en este campo el valor 15. Reservado (6 bits): Se ha reservado para su uso futuro y se inicializa con ceros. Indicadores o campo de control (6 bits): Cada uno de los bits recibe el nombre de indicador y cuando está a 1 indica una función específica del protocolo. URG: Hay datos urgentes y en el campo puntero urgente se indica el número de datos urgentes que hay en el segmento. ACK: Indica que tiene significado el número que hay almacenado en el campo número de confirmación. PSH: Sirve para invocar la función de carga (push). Como se ha comentado anteriormente con esta función se indica al receptor que debe pasar a la aplicación todos los datos que tenga en la memoria intermedia sin esperar a que sean completados. De esta manera se consigue que los datos no esperen en la memoria receptora hasta completar un segmento de dimensión máxima. No se debe confundir con el indicador URG que sirve para señalar que la aplicación ha determinado una parte del segmento como urgente. RST: Sirve para hacer un reset de la conexión. SYN: Sirve para sincronizar los números de secuencia. FIN: Sirve para indicar que el emisor no tiene más datos para enviar. Ventana (16 bits): Indica cuantos bytes tiene la ventana de transmisión del protocolo de control de flujo utilizando el mecanismo de ventanas deslizantes. A diferencia de lo que ocurre en los protocolos del nivel de enlace, en los que la ventana es constante y se cuentan las tramas, en el TCP la ventana es variable y cuenta bytes. Contiene el número de bytes de datos comenzando con el que se indica en el campo de confirmación y que el que envía está dispuesto a aceptar. Suma de comprobación (16 bits): Este campo se utiliza para detectar errores mediante el complemento a uno de la suma en módulo de todas las palabras de 16 bits que hay en el segmento más una pseudo-cabecera. La pseudo-cabecera incluye los siguientes campos de la cabecera IP: dirección internet origen, dirección internet destino, el protocolo y un campo longitud del segmento. Con la inclusión de esta pseudo-cabecera, TCP se protege a sí mismo de una transmisión errónea de IP. Puntero urgente (16 bits): Cuando el indicador URG está activo, este campo indica cual es el último byte de datos que es urgente. De esta manera el receptor puede saber cuantos datos urgentes llegan. Este campo es utilizado por algunas aplicaciones como telnet, rlogin y ftp. Opciones (variable): Si está presente permite añadir una única opción de entre las siguientes: Tiemstamp: para marcar en que momento se transmitió el segmento y de esta manera monitorizar los retardos que experimentan los segmentos desde el origen hasta el destino. Aumentar el tamaño de la ventana. Indicar el tamaño máximo del segmento que el origen puede enviar. 1 Un paquete puede llevar dentro no sólo los datos que van en dirección A-B, sino también un ACK (acuse de recibo) de otros datos que llegaron anteriormente en dirección B-A. Así se reduce el número total de paquetes requeridos, porque de otra manera el ACK tendría que ocupar un paquete completo. Es una técnica de optimización que se usa cuando hay tráfico de datos en ambos sentidos.

92 74 Servidor Linux para conexiones seguras de una LAN a Internet Como TCP ha sido diseñado para trabajar con IP, algunos parámetros de usuario se pasan a través de TCP a IP para su inclusión en la cabecera IP. Por ejemplo: prioridad (campo de 3 bits), retardo-normal / retardo-bajo, rendimiento-normal / rendimiento-alto, seguridad-normal / seguridad-alta y protección (campo de 11 bits) Protocolos de aplicación Los protocolos de aplicación se pueden dividir en dos grupos según su protocolo de transporte: UDP: NFS, SNMP, DNS TCP: SMTP, TELNET, FTP, HTTP NFS (Network File System) Utiliza el protocolo UDP y está basado en el RPC (Remote Procedure Call de SUN). El núcleo del sistema operativo de la máquina cliente es modificado con un nuevo tipo de sistema de fichero NFS, de manera que cuando un programa intenta abrir, cerrar, leer o escribir en un fichero remoto, el código NFS es llamado en lugar del código normal para acceder a los manejadores de los discos físicos. El código del sistema de ficheros NFS usa el protocolo RPC de SUN para comunicar con el código servidor NFS que se ejecuta en la máquina remota, leyendo o escribiendo bloques de ficheros en él SNMP (Simple network management protocol) Es un protocolo cliente/servidor que normalmente es usado para configurar y monitorizar remotamente los equipos de la red Internet. Este protocolo se basa en el protocolo UDP. En terminología SNMP es descrito como un protocolo manager/agent DNS (Domain Name Server) El servicio de nombres de dominio (DNS) se utiliza para relacionar los nombres de dominio de los nodos con sus direcciones IP. Tal como hemos comentado al explicar el protocolo IP, la asignación de direcciones sigue una estructura jerárquica. Para hacer más sencillo el acceso a los sistemas, cada host puede tener asignados uno o varios nombres de dominio DNS, que son identificadores descriptivos que permiten hacer referencia al equipo y equivalen a su dirección IP. Los nombres DNS también se asignan de forma jerárquica, añadiendo a la derecha del nombre del host una serie de identificadores que corresponden con la organización o empresa a la que pertenece el sistema. Cuando en un comando entramos un nombre de máquina, el sistema siempre convierte ese nombre en una dirección IP antes de establecer la conexión. Desde la máquina que necesita saber la dirección IP, se envía un paquete UDP a un servidor DNS, que busca el nombre y devuelve la dirección IP. Con la dirección IP, el programa establece una conexión TCP con el destino, o le envia paquetes UDP SMTP (Simple Mail Transfer Protocol) Este es el protocolo dedicado a la transmisión de mensajes electrónicos sobre una conexión TCP. El protocolo especifica el formato de los mensajes definiendo la estructura de la información sobre el remitente, el destinatario, datos adicionales y naturalmente el cuerpo de los mensajes. Este protocolo no especifica como los mensajes deben ser editados. Es necesario tener un editor local o un aplicación nativa de correo electrónico. Una vez el mensaje es creado, el SMTP lo acepta y usa el protocolo TCP para enviarlo a un módulo SMTP de otra máquina. El TCP es el encargado de intercomunicar módulos SMTP de las máquina implicadas.

93 Capítulo 7. Infraestructura de redes TELNET (Remote login) Este protocolo permite a los usuarios conectarse a ordenadores remotos y utilizarlos desde el sistema local, mediante la emulación de terminal sobre una conexión TCP. Interconecta el cliente local de una máquina con el servidor con el que se comunica. Los caracteres que se teclean en un cliente local son enviados por la red y procesados en el ordenador remoto, utilizando la información que ese ordenador contiene. El resultado de su ejecución se muestra en la pantalla del ordenador local. Este protocolo fue uno de los primeros que se definió y ha sido diseñado para trabajar con terminales de modo texto. Se implementa en dos módulos. El módulo cliente relaciona el módulo de entrada y salida del terminal para que pueda comunicarse con el terminal local. Convierte las características de los terminales reales con los standards de las redes y viceversa. El módulo servidor interactúa con una aplicación, de manera que los terminales remotos sean vistos por la aplicación como terminal local FTP (File Transfer Protocol) Permite la transferencia de ficheros de texto o binarios desde un ordenador a otro sobre una conexión TCP. FTP implementa un sistema estricto de restricciones basadas en propiedades y permisos sobre los ficheros. Hay un control de acceso de los usuarios, y cuando un usuario quiere realizar la transferencia de un fichero, el FTP establece una conexión TCP para el intercambio de mensajes de control. De esta manera se puede enviar el nombre de usuario, el password, los nombre de los ficheros y las acciones que se quieren realizar. Una vez se ha aceptado la transferencia del fichero, una segunda conexión TCP se establece, del servidor al cliente, para la transferencia de datos. El fichero se transfiere sobre la conexión de datos, sin la utilización de ninguna cabecera o información de control en la capa de aplicación. Cuando se completa la transferencia, la conexión de control es usada para transmitir la señalización de que la transferencia se ha completado y para aceptar nuevos comandos de transferencia HTTP (Hyper Text Transport Protocol) Este es un sencillo protocolo cliente-servidor que articula los intercambios de información entre los clientesweb y los servidores HTTP. Este protocolo fue propuesto atendiendo a las necesidades de un sistema global de distribución de información multimedia como el World Wide Web. Se utiliza para transferir páginas de hipertexto. Está soportado sobre los servicios de conexión TCP/IP. Un proceso servidor espera las solicitudes de conexión de los clientes Web, y una vez se establece la conexión, el protocolo TCP se encarga de mantener la comunicación y garantizar un intercambio de datos libre de errores Protocolo TCP/IP En su época, el protocolo de red TCP/IP era un protocolo oculto utilizado principalmente por instituciones gubernamentales y educativas. De hecho, lo inventó la agencia de investigación militar de los Estados Unidos (DARPA) para proporcionar un sistema de redes sin interrupciones. Su objetivo era crear una red que pudiera soportar múltiples fallos de enlace, en el caso de que se produjese alguna catástrofe, como una guerra nuclear. Las comunicaciones de datos tradicionales siempre se habían basado en una sola conexión directa y si dicha conexión se degradaba o se saboteaba, la comunicación cesaba. TCP/IP ofrecía una forma de empaquetar los datos y dejar que encontraran su propio camino por la red. Así se creó la primera red tolerante al fallo. Sin embargo, la mayoría de las empresas seguían utilizando los protocolos de red proporcionados por los fabricantes de su hardware. Las LAN IBM utilizaban normalmente NetBIOS o SNA; las LAN Novell utilizaban un protocolo denominado IPX/SPX y las LAN Windows utilizaban otro estándar denominado NetBEUI, derivado del NetBIOS de IBM. Aunque TCP/IP se convirtió en algo común a lo largo de 1980, no fue hasta el surgimiento de Internet, a primeros de 1990, cuando empezó a convertirse en el estándar para la comunicación de datos. Por todo lo anteriormente expuesto hizo que cayeran los precios del hardware en sistema de red IP, hecho que facilitó la interconexión entre redes.

94 76 Servidor Linux para conexiones seguras de una LAN a Internet Una red TCP/IP permite que los nodos de comunicación establezcan una conexión y después verifiquen cuándo se inician y se detienen las comunicaciones de datos. Los datos a transmitir se cortan en secciones, denominadas paquetes y se encapsulan en una serie de envolturas, conteniendo cada una información específica para la siguiente capa de red. Cada paquete se graba con un número de secuencia de 32 bits para que, aunque lleguen en el orden erróneo, la transmisión se pueda volver a montar. A medida que el paquete cruza diferentes partes de la red, se abre y se interpreta cada capa y los datos restantes se pasan según dichas instrucciones. Cuando el paquete de datos llega a su destino, se entregan a la aplicación los datos reales, o carga útil. Parece algo confuso, pero mostrando la siguiente analogía se entenderá mejor. Piensa en una carta dentro de un sobre que se envía a una empresa de mensajería para su distribución. La empresa de mensajería utiliza su propio sobre para enrutar el paquete al edificio correcto. Cuando se reciba el paquete en este edificio, se abrirá y se tirará el sobre exterior. Esta carta puede estar destinada a otro buzón de correo interno, por lo que pueden colocarla en un sobre de correo ínter-oficinas y enviarla al sitio apropiado. Por último, la carta llega al receptor, que quita todos los envoltorios y utiliza los datos que están dentro. La tabla 7.4 resume cómo encapsulan datos algunos protocolos de red. Cuadro 7.4: Paquete de datos TCP/IP de ejemplo Protocolo Contenido Capa OSI Ethernet Dirección MAC Enlace de datos IP Dirección IP Red TCP Encabezado TCP Transporte HTTP Encabezado HTTP Aplicación Datos de aplicación Página Web Aplicación Como se puede comprobar, el exterior de nuestro sobre de datos tiene la dirección Ethernet, que identifica el paquete en la red Ethernet. Dentro de esta capa se encuentra la información de la red, denominada dirección IP, y dentro se encuentra la capa de transporte, que establece una conexión y la cierra. A continuación está la capa de aplicación, que es un encabezado HTTP, que indica al explorador Web cómo debe formatear una página. Por último, entra la carga de datos real del paquete (el contenido de una página Web). Todo esto ilustra la naturaleza de múltiples capas de las comunicaciones de red. Existen varias fases durante una comunicación entre dos nodos de red que utilizan TCP/IP. Suponiendo que estamos utilizando direcciones IP y nombres que no son del anfitrión, lo primero que sucede es que la máquina genera una solicitud de Protocolo de resolución de direcciones (ARP, Address Resolution Protocol) para buscar la dirección Ethernet correspondiente a la dirección IP con la que está intentando comunicarse. Ahora que puede comunicarse con la máquina utilizando IP, existe una comunicación de tres vías entre las máquinas que utilizan el protocolo TCP para establecer una sesión. Una máquina que desea enviar datos a otra máquina envía un paquete SYN para sincronizar, o iniciar, la transmisión. El paquete SYN está básicamente diciendo Está preparada para el envío de datos?. La otra máquina, envía un SYN/ACK, que significa De acuerdo, he recibido el paquete SYN y estoy preparada. Por último, la máquina emisora envía un paquete ACK de respuesta diciendo, Bien, inicio el envío de datos. Esta comunicación se denomina Acuerdo de conexión TCP de tres vías. Si una de las tres partes no se produce, la conexión no tiene lugar. Mientras la máquina está enviando sus datos, etiqueta los paquetes de datos con un número de secuencia y reconoce cualquier número de secuencia anterior utilizado por el anfitrión en el otro punto. Cuando se han enviado todos los datos, una parte envía un paquete FIN a la otra parte del enlace. Ésta responde con un FIN/ACK para cerrar esa sesión TCP/IP.

95 Capítulo 7. Infraestructura de redes 77 Cuadro 7.5: Esquema de transmisión TCP/IP 1 SYN: Inicio la conexión (1. a máquina) 2 SYN/ACK: De acuerdo, listo para recibir (2. a máquina) 3 ACK: Transmito (1. a máquina) 4 Transmision: Comunicación entre las dos máquinas 5 FIN: Finalizo conexión (1. a máquina) 6 FIN/ACK: Conexión finalizada (2. a máquina) Debido a la forma en que TCP/IP controla la iniciación y finalización de una sesión, las comunicaciones TCP/IP se dice que tienen un estado. Esto significa que podemos saber qué parte del diálogo se está produciendo sólo con mirar a los paquetes, algo muy importante para los cortafuegos porque la forma más común de bloquear el tráfico saliente con un cortafuegos es no admitir los paquetes SYN del exterior en máquinas internas de la red. Así, las máquinas internas pueden comunicarse fuera de la red e iniciar conexiones con el exterior pero las máquinas externas no pueden iniciar nunca la conexión. En Linux el cortafuegos IPTables integrado en el núcleo, esta disponible en las versiones de kernel 2.4x o superior. Funciona mediante la interacción directa con el núcleo del sistema y nos sirve para hacer el filtrado de paquetes TCP/IP. Generalmente los cortafuegos tienen dos o más interfaces (tarjetas de red). Una interfaz se conecta normalmente a la LAN interna; esta interfaz se denomina interfaz de confianza o privada. La otra interfaz es para la parte pública (WAN) de nuestro cortafuegos. En las redes más pequeñas, la interfaz WAN se conecta a Internet. También puede existir una tercera interfaz denominada DMZ (Desmilitarized Zone), que normalmente es para los servidores que necesitan exponerse más a Internet de forma que los usuarios externos pueden conectarse a ellos, disponen de una IP pública. Todos los paquetes que intentan pasar a través de la máquina, pasan a través de una serie de filtros. Si coinciden con el filtro, se lleva a cabo alguna acción. Ésta puede ser evitar su paso, pasarlo o enmascararlo con una dirección IP privada interna. La mejor práctica para la configuración del cortafuegos es denegarlo todo siempre y permitir, a continuación, el tráfico que necesitamos de una forma selectiva. Los cortafuegos pueden filtrar paquetes en distintos niveles. Pueden mirar una dirección IP y bloquear el tráfico proveniente de determinadas direcciones o redes IP, comprobar el encabezado TCP y determinar su estado y, en niveles superiores, pueden mirar a la aplicación o al número de puerto TCP/UDP. Se pueden configurar para evitar categorías completas de tráfico, como ICMP. Los paquetes externos de tipo ICMP, como los ping, normalmente se rechazan en los cortafuegos porque dichos paquetes se utilizan a menudo en el descubrimiento de redes y denegación de servicio (DoS). No existe ninguna razón para que alguien externo a nuestra empresa pruebe nuestra red con un ping. Si no lo rechazamos expresamente, el cortafuegos va a permitir las réplicas de eco (respuestas de ping).

96

97 Capítulo 8 Configuración de dispositivos de red En Debian el archivo de configuración de los dispositivos de red es: /etc/network/interfaces En su interior encontraremos el modo de funcionamiento de todos los dispositivos de red del sistema. En este capítulo trataremos su configuración mediante una serie de herramientas Etherconf: Configurador gráfico de red Es el configurador gráfico para redes de Debian y se instala con el siguiente comando: #apt-get install etherconf Para configurar las tarjetas de red automáticamente hay que ejecutar el comando: #dpkg-reconfigure etherconf,... que arrancará debconf. Y nos realizará unas preguntas, para configurar nuestro sistema Ifconfig: Configurador de red El programa ifconfig es responsable de configurar las tarjetas de interfaz de red (NIC, Network Interface Card). Todas estas operaciones se realizan a través de la línea de comandos, ya que no tiene interfaz gráfica. Existen varias herramientas que se han escrito para cubrir la falta de interfaz gráfica o de menús del comando ifconfig. Muchas de ellas vienen en las distribuciones de Linux, en Debian la interfaz que podemos utilizar es etherconf. El formato del comando ifconfig es el siguiente: #ifconfig dispositivo direccion opciones Donde dispositivo es el nombre del dispositivo ethernet (por ejemplo, eth0), dirección es la dirección IP que se desea aplicar al dispositivo y opciones es una de las siguientes:

98 80 Servidor Linux para conexiones seguras de una LAN a Internet Opción up down arp -arp mtu valor netmask dirección broadcast dirección pointtopoint dirección Descripción Activa el dispositivo. Esta opción es implícita Desactiva el dispositivo Activa este dispositivo para responder peticiones, por defecto Desactiva este dispositivo para responder a peticiones arp Configura la unidad de transmisión máxima (MTU) del dispositivo a valor. Bajo ethernet, el valor por defecto es 1500 Configura la máscara de red de esta interfaz a dirección. Si no se proporciona un valor, ifconfig calcula la máscara basada en la clase de la dirección IP. Una dirección de clase A tiene una máscara , una de clase B y la clase C Configura la dirección de broadcast de la interfaz de dirección. Si no se proporciona un valor, ifconfig calcula la dirección de broadcasta basada en la clase de la dirección IP de manera parecida a la máscara de red Configura la conexión punto a punto (PPP) donde la dirección remota es dirección Un ejemplo de uso simple podría ser el siguiente: #ifconfig eth ,... Donde el dispositivo eth0 quedará configurado con la dirección IP Como es una dirección de clase C, la máscara será y el broadcast será , asignándolos ifconfig por defecto. Si la dirección IP que configuramos es una dirección de clase A o B dividida en subredes, necesitaremos determinar explícitamente las direcciones de broadcast y de máscara en la línea de comandos: #ifconfig dispositivo ip netmask num_mascara broadcast num_broadcast Se pueden listar todos los dispositivos activos ejecutando: #ifconfig. Con la opción -a: #ifconfig -a,... se mostrarán todos los dispositivos, estén activos o no. En tiempo de ejecución, con el comando ifconfig podemos habilitar y deshabilitar los dispositos de red: #ifconfig dispositivo up,... para activar el dispositivo #ifconfig dispositivo down,... para desactivar el dispositivo Para visualizar los dispositivos del sistema basta con ejecutar: #ifconfig Si estamos en un cliente habrá que especificar toda la ruta: $/sbin/ifconfig A continuación podemos observar la salida del servidor que se utiliza en el proyecto: $/sbin/ifconfig eth0 Link encap:ethernet HWaddr 00:C0:9F:6E:1D:E0 inet addr: Bcast: Mask: UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2506 errors:0 dropped:0 overruns:0 frame:0 TX packets:5953 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes: (2.1 MiB) TX bytes: (690.8 KiB) Interrupt:6 eth1 Link encap:ethernet HWaddr 00:00:00:00:00:00 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:1 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) Interrupt:10 lo Link encap:local Loopback inet addr: Mask: UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets: errors:0 dropped:0 overruns:0 frame:0 TX packets: errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes: (27.8 MiB) TX bytes: (27.8 MiB)

99 Capítulo 8. Configuración de dispositivos de red 81 Se puede observar que dispone de dos tarjetas de red, en este caso eth0 es una tarjeta de red LAN y eth1 una tarjeta de red wifi, en estos momentos deshabilitada. Así mismo, también podemos observar el dispositivo lo, de loopback Route: Tablas de redireccionamiento Si la máquina se conecta a una red con varias subredes, necesitamos un enrutador. Este aparato, que se sitúa entre redes, redirige paquetes a su destino real (normalmente, muchas máquinas no conocen el camino correcto al destino, sólo conocen el propio destino). En el caso donde una máquina ni siquiera tiene una pista sobre dónde enviar el paquete, se usa una ruta por defecto. Este camino apunta a un enrutador, que idealmente sabe a dónde debería ir el paquete o, al menos, sabe otra ruta que puede tomar. Una máquina típica Linux conoce al menos tres rutas: La primera es la ruta de bucle local que simplemente apunta a su dispositivo de loopback. La segunda es la ruta a la LAN, de forma que los paquetes destinados a las máquinas de esa misma red se envían directamente a ellas. La tercera es la ruta por defecto. Esta ruta se usa para paquetes que necesitan abandonar la LAN para comunicarse con otras redes. Si configuramos la red en tiempo de instalación, este valor lo configurará el instalador. Así que no suele ser necesario cambiarlo, lo cual no quiere decir que no se pueda. Suele ser necesario cuando tenemos varias tarjetas instaladas en un mismo equipo, como a menudo pasa en los servidores, enrutadores o cortafuegos. El comando route típico se estructura de la siguiente forma: #route cmd tipo direccion netmask masc gw gatw dev destino Los parametros significan lo siguiente: Parámetro cmd tipo dirección netmask masc gw gatw dev destino Descripción Valor add o del dependiendo de si añadimos o borramos una ruta. Si eliminamos una ruta, sólo necesitamos otro parámetro, dirección Valor -net o -host dependiendo si dirección representa una dirección de red o una dirección de un enrutador La red destino que quiere ofrecer para enrutar Configura la máscara de red de la dirección dirección a masc Configura la la dirección de enrutador para direccion a gatew. Normalmente se usa como ruta por defecto Envía todos los paquetes destinados a dirección a través de la red del dispositivo destino según se configura con ifconfig Podemos ver el uso del comando con los siguientes ejemplos: 1. Configurar una ruta por defecto en mi máquina, la cual tiene un dispositivo Ethernet y un enrutador en : #route add -net default gw dev eth0 2. Configurar un sistema para que todos los paquetes destinados a se envíen a través del primer dispositivo PPP: #route add -host netmask dev ppp0

100 82 Servidor Linux para conexiones seguras de una LAN a Internet 3. Así se borra una ruta destino a : #route del Hay otra cosa a tener en cuenta, si usamos una pasarela (gateway), necesitamos asegurarnos de que existe una ruta a la pasarela antes de referenciarla como otra ruta. Por ejemplo, si la ruta por defecto usa la pasarela de , necesitamos asegurarnos primero de que tenemos una ruta a la red Para visualizar la tabla de enrutamiento utilizaremos: #route Route visualiza los nombres de máquinas a cualquier dirección IP que podría buscar y resolver. Aunque es bueno leerlo, presenta un problema cuando hay dificultades de red y no se consigue llegar a los servidores DNS o NIS. El comando route esperará, tratando de resolver los nombres de máquinas y esperando para ver si los servidores devuelven y los resuelven. Esta espera será de varios minutos hasta que la petición devuelva un timeout. Para evitar que route realice resolución de nombres ejecutaremos: #route -n Este sería un ejemplo de la salida de una máquina con acceso a la LAN y a internet por una pasarela: # route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface * U eth0 default UG eth0 Podemos observar varias columnas como destino, pasarela, máscara (referido como genmask) e iface (interfaz, configurada por la opción dev de route). Las otras entradas de la tabla tienen el significado siguiente: Entrada Flags Metric Ref Use Descripción Un sumario de estado de conexión, donde cada letra tiene un significado: U: la conexión está arriba H: el destino es una máquina G: el destino es la pasarela El coste es una ruta, normalmente medida en saltos (hops). Esto es significativo para los sistemas que tienen varias rutas para llegar al destino, pero se prefiere una ruta sobre el resto. Un camino con métrica baja es el preferido. El kernel de Linux no usa esta información, pero sí lo hacen algunos protocolos de enrutamiento avanzados. El número de referencias de la ruta. Esto no se usa en el kernel de Linux. Está aquí debido a que la propia herramienta route es de plataformas cruzadas. Así se imprime este valor, pues otros sistemas operativos lo usan El número de bucles de cache de rutas utilizados con éxito. Para ver este valor, hay que usar la opción -F cuando invoquemos route

101 Capítulo 8. Configuración de dispositivos de red Netstat: Estado de las conexiones El programa netstat se utiliza para mostrar el estado de todas las conexiones de red de una máquina. La opciones de netstat son combinables, en la siguiente tabla se muestran las más comunes: Cuadro 8.1: Opciones de Netstat Opción Descripción -a Visualiza la información de todas las conexiones activas -i Visualiza las estadísticas de todos los dispositivos de red configurados -c Actualiza la información visualizada cada segundo -r Muestra la tabla de enrutado -n Visualiza las direcciones locales y remotas en formato numérico -t Muestra tan sólo la información de TCP -u Muestra tan sólo la información de UDP -v Visualiza la versión de netstat 8.5. Configuración de interfaces usando DHCP DHCP (Dynamic Host Configuration Protocol), es un protocolo de red empleado para asignar de forma automática una dirección IP a los hosts que se conectan a ella. En redes pequeñas las direcciones IP pueden asignarse de forma manual, equipo por equipo, pero en redes de un cierto tamaño esta tarea puede convertirse en agotadora, no sólo por tener que editar cada uno de los hosts, sino por la dificultad de mantener un registro con las IPs asignadas para evitar duplicados. Para que esto funcione debemos instalar uno de los siguientes paquetes: dhcp3-client (versión 3, Internet Software Consortium) dhcpcd (Yoichi Hariguchi y Sergei Viznyuk) pump (Red Hat) Pump es sencillo y ampliamente utilizado. Para instalarlo: #apt-get install pump Y para utilizarlo, simplemente: #pump -i dispositivo,... como por ejemplo: #pump -i eth0 Dhcp3-client es complejo pero más configurable. Para instalarlo: #apt-get install dhcp3-client Y para utilizarlo ejecutamos: #dhclient3 dispositivo,... como por ejempo: #dhclient3 eth0 Este comando tiene otras opciones que pueden ser consultadas con el manual del sistema: $man dhclient

102 84 Servidor Linux para conexiones seguras de una LAN a Internet 8.6. Archivo /etc/network/interfaces El archivo especifica la configuración de nuestros dispositivos de red y puede ser configurado a mano. Los comandos: #ifdown dispositivo y #ifup dispositivo, utilizan el archivo para habilidar y deshabilitar los dispositivos de red. En las siguientes secciones se especifica la forma de configurar el archivo /etc/network/interfaces. Esta sección esta basada en la configuración de la red de la guía de referencia Debian, para más información consúltela Direcciónes IP estáticas Supongamos que se desea configurar una interfaz ethernet que tiene una dirección IP fija Esta dirección comienza con por lo tanto debe estar en una LAN. Supongamos además que es la dirección de la puerta de enlace de la LAN Internet. Editamos /etc/network/interfaces de modo que incluya un fragmento como el siguiente: iface eth0 inet static address netmask gateway Si tenemos instalado el paquete resolvconf podemos añadir las siguientes líneas para especificar la información relativa al DNS: iface eth0 inet static address netmask gateway dns-search nicedomain.org dns-nameservers Después de que se activa la interfaz, los argumentos de las opciones dns-search y dns-nameservers quedan disponibles para resolvconf para su inclusión en resolv.conf. El argumento nicedomain.org de la opción dns-search corresponde al argumento de la opcin search en resolv.conf. Los argumentos y de la opción dns-nameservers corresponde a los argumentos de las opciones nameserver en resolv.conf. Otras opciones reconocidas en el archivo son dns-domain y dns-sortlist Direcciones IP dinámicas Para configurar una interfaz usando DHCP editamos el /etc/network/interfaces de manera que incluya un fragmento como el siguiente: iface eth0 inet dhcp Para que esto funcione debemos tener instalado un cliente DHCP (Véase sección 8.5).

103 Capítulo 8. Configuración de dispositivos de red Interfaz Wifi El paquete wireless-tools incluye el script /etc/network/if-pre-up.d/wireless-tools que permite configurar hardware Wifi (802.11a/b/g) antes que se active la interfaz. La configuración se realiza usando el programa iwconfig (véase sección 8.10). Para cada parámetro del comando iwconfig podemos incluir una opción en /etc/network/interfaces con un nombre como el del parámetro con el prefijo wireless-. Por ejemplo, para fijar el ESSID de eth1 a miessid y la clave de cifrado en e antes de activar eth1 y usando DHCP, editamos el archivo /etc/network/interfaces de modo que incluya un fragmento como el siguiente : iface eth1 inet dhcp wireless-essid miessid wireless-key e Interfaz PPPoE Muchos Proveedores de Servicios de Internet (ISPs) de banda ancha utilizan PPP para negociar las conexiones incluso cuando las máquinas de los clientes están conectadas mediante ethernet y/o redes ATM. Esto se logra mediante PPP sobre ethernet (PPPoE) que es una técnica para el encapsulamiento del flujo PPP dentro de las tramas ethernet. Supongamos que el ISP se llama mi isp. Primero configuramos PPP y PPPoE para mi isp. La manera más fácil de hacerlo consiste en instalar el paquete pppoeconf y ejecutar pppoeconf desde la consola. A continuación, editamos /etc/network/interfaces de modo que incluya un fragmento como el siguiente: iface eth0 inet ppp provider mi_isp A veces surgen problemas con PPPoE relativos a la Unidad de Transmisin Mxima (Maximum Transmit Unit o MTU) en líneas DSL (Digital Subscriber Line). Hay que acudir al manual en estos casos. Debemos observar que si el módem posee un router, si esto es así el módem/router maneja por sí mismo la conexin PPPoE y aparece del lado de la LAN como una simple puerta de enlace Ethernet a Internet. Así no hay que realizar la configuración. En mi caso, mi proveedor de servicios me ha instalado un módem/router de este estilo y no me es necesario. Me han facilitado un usuario y contraseña que utilizo para validarme en su servidor y recibir el servicio Puertas de enlace Supongamos que eth0 está conectada a internet con un dirección IP configurada con DHCP y eth1 está conectada a la LAN con una dirección IP estática Editamos /etc/network/interfaces de modo que incluya un fragmento similar al siguiente: iface eth0 inet dhcp iface eth1 inet static address netmask Si activamos NAT en esta máquina, mediante una puerta de enlace, podemos compartir la conexión de internet con todas las máquinas de la LAN.

104 86 Servidor Linux para conexiones seguras de una LAN a Internet Interfaces virtuales Usando interfaces virtuales se puede configurar una única tarjeta ethernet para que sea la interfaz de distintas subredes IP. Por ejemplo, supongamos que la máquina se encuentra en una red LAN x/24. Y deseamos conectar la máquina a Internet usando una direccin IP pública proporcionada con DHCP usando su tarjeta ethernet existente. Editamos /etc/network/interfaces de modo que incluya un fragmento similar al siguiente: iface eth0 inet static address netmask network broadcast iface eth0:0 inet dhcp La interfaz eth0:0 es una interfaz virtual. Al activarse también lo hará su padre eth Reconfiguración de la red Aquí es necesario diferenciar entre interfaz física y interfaz lógica. Una interfaz física es lo que hemos estado llamando interfaz o dispositivo de red, lo que hemos designado con eth0, ppp1, etc. Una interfaz lógica es un conjunto de valores que pueden asignarse a los parámetros variables de una interfaz física. Las definiciones iface en /etc/network/interfaces son, en realidad, definiciones de interfaces lógicas no de interfaces físicas. No obstante, supongamos que nuestra máquina es un equipo portátil que transportamos de casa al trabajo. Cuando conectamos la máquina a una red corporativa o a nuestra LAN hogareña, necesitamos configurar eth0 adecuadamente. Vamos a definir, en el archivo /etc/network/interfaces dos interfaces lógicas: hogar y trabajo (en vez de eth0 como hicimos antes) que describen cómo debería configurarse la interfaz para la red hogareña y la del trabajo respectivamente. iface hogar inet static address netmask gateway iface trabajo inet static address netmask gateway De esta forma, la interfaz física eth0 se puede activar en la red hogareña con la configuración apropiada, especificando: #ifup eth0=hogar Para reconfigurar eth0 en la red del trabajo, ejecutamos los comandos: #ifdown eth0 #ifup eth0=trabajo Observamos que con el archivo interfaces escrito así ya no resultará posible activar eth0 haciendo solamente ifup eth0. La razón es que ifup utiliza el nombre de la interfaz física como el nombre de la interfaz lógica eth0 predeterminada y, en realidad, en nuestro ejemplo no hay una interfaz lógica definida.

105 Capítulo 8. Configuración de dispositivos de red 87 Una vez visto como se reconfiguran las interfaces, hay que precisar que la reconfiguración necesita realizarse en el momento apropiado. Actualmente existe una tendencia en GNU y Linux al soporte de hardware y entornos que cambian dinámicamente. El primer soporte se añadió para la inserción en caliente de tarjetas PCMCIA; más recientemente ha sido incorporado el mecanismo hotplug para que muchos más periféricos se puedan enchufar y desenchufar mientras la máquina se encuentra funcionando. Esto incluye el hardware de red. Se puede observar que los servicios que dependen del hardware que se conecta en caliente sólo deben iniciarse después de que el hardware haya sido insertado y deben detenerse cuando se hayan eliminado. Esto significa que dichos servicios deben liberarse del control del sistema init System V y ponerlos, en cambio, bajo el control de ifupdown. Por ejemplo, supongamos que el servicio loquesea controlado por el script de init /etc/init.d/loquesea depende dinámicamente de la interfaz de red reconfigurada eth0. Deberíamos actuar siguiendo este esquema: Primero eliminamos loquesea del control del sistema init. Si está ultilizando el sistema init sysv-rc entonces hacemos lo siguiente: # rm /etc/rc?.d/s??loquesea Luego pongamos loquesea bajo el control de ifupdown añadiendo las opciones up y down en la sección eth0 de /etc/network/interfaces que contiene las llamadas al script init loquesea: iface eth0 inet dhcp up /etc/init.d/loquesea start down /etc/init.d/loquesea stop Configuración de red durante el arranque Al arrancar, el script de init, /etc/rcs.d/s40networking se ejecuta el comando ifup -a. Esto activa todas las interfaces físicas que aparecen en las secciones auto de /etc/network/interfaces. Actualmente, a menudo resulta mejor manejar la configuración de la red usando métodos dinámicos. Una vez configurados los mecanismos para el soporte de hardware que cambia en forma dinámica, resulta más sencillo tratar el hardware estático como si fuera dinámico. El arranque se puede considerar como un simple evento hotplug (Véase sección 8.7.2). No obstante, en casi todos los casos uno desea por lo menos que la interfaz de retorno lo (loopback) se active en el arranque. Por lo tanto, nos aseguramos de que /etc/network/interfaces incluya las siguientes líneas: auto lo iface lo inet loopback Se puede listar los nombres de interfaces físicas adicionales en las secciones auto si desea que también se activen durante el arranque. Nunca debemos de incluir las interfaces PCMCIA en las secciones auto. Para el PCMCIA, cardmgr se inicia durante el arranque después de /etc/rcs.d/s40networking, si descubre algún dispositivo lo instala Hotplug Para el soporte del arranque en caliente instalamos el paquete hotplug: #apt-get install hotplug El hardware de red se puede enchufar en caliente ya sea durante el arranque, tras haber insertado la tarjeta en la máquina (una tarjeta PCMCIA, por ejemplo), o después de que una utilidad como discover se haya ejecutado y cargado los módulos necesarios.

106 88 Servidor Linux para conexiones seguras de una LAN a Internet Cuando el kernel detecta nuevo hardware inicializa el controlador para el hardware y luego ejecuta el programa hotplug para configurarlo. Si más tarde se elimina el hardware, ejecuta nuevamente hotplug con parámetros diferentes. En Debian, cuando se llama a hotplug éste ejecuta los scripts contenidos en /etc/hotplug/ y /etc/hotplug.d/. El hardware de red recién conectado es configurado por el /etc/hotplug/net.agent. Supongamos que la tarjeta de red PCMCIA ha sido conectada lo que implica que la interfaz eth0 esta lista para usar. /etc/hotplug/net.agent hace lo siguiente: #ifup eth0=hotplug Para que una interfaz pueda ser configurada por hotplug debemos añadir la referencia a hotplug en en /etc/network/interfaces. Para que este comando configure eth0, añadimos las siguientes líneas: mapping hotplug script echo Si sólo deseamos que eth0 se active en caliente y no otras interfaces, utilizamos grep en vez de echo como se muestra a continuación: mapping hotplug script grep map eth Ifplugd Ifplugd activa o desactiva una interfaz dependiendo si el hardware subyacente está o no conectado a la red. El programa puede detectar un cable conectado a una interfaz ethernet o un punto de acceso asociado a una interfaz wifi. Cuando ifplugd ve que el estado del enlace ha cambiado ejecuta un script que por defecto ejecuta ifup o ifdown para la interfaz. ifplugd funciona correctamente en combinación con hotplug. Al insertar una tarjeta, lo que significa que la interfaz est lista para usar, /etc/hotplug.d/net/ifplugd.hotplug inicia una instancia de ifplugd para dicha interfaz. Cuando ifplugd detecta que la tarjeta es conectada a una red, ejecuta ifup para esta interfaz Resolvconf: Resolución de nombres El paquete resolvconf proporciona un marco para la administración dinámica de la información relativa a los servidores de nombres disponibles. Soluciona el antiguo problema de mantener las listas dinámicas de los nombres de los servidores para ser usadas por el sistema de resolución y los cachés DNS. Resolvconf es el intermediario entre los programas que controlan las interfaces de red y suministran información de los servidores de nombres, y las aplicaciones que necesitan dicha información. Este comando está diseñado para funcionar sin que sea necesaria ninguna configuración manual. Para la resolución de nombres se utiliza el archivo de configuración: /etc/resolv.conf Si no hemos instalado el paquete resolvconf, podemos editar a mano el fichero /etc/resolv.conf. En él podemos especificar hasta tres servidores de nombres, siendo los dos últimos utilizados en caso de que no se encuentre disponible el primero. La línea domain se emplea para definir el nombre de dominio por defecto que se añadirá a los nombres de host que no contengan dominio. La línea search se emplea para especificar que busque un dominio.

107 Capítulo 8. Configuración de dispositivos de red 89 Esto podría ser un contenido típico: #cat /etc/resolv.conf # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) domain example.com nameserver nameserver nameserver Archivos de configuración de Hosts Existen varios archivos que tienen que ver con los hosts de nuestro sistema: Un sistema Debian a veces necesita identificarse por su nombre. Para este propósito /etc/hostname contiene el nombre de la máquina. Este archivo únicamente deberá contener el nombre de la máquina y no el nombre de dominio completo. El archivo /etc/hosts contiene un conjunto de nombres de hosts con sus correspondientes direcciones IP. En redes pequeñas y sin conexión a Internet este archivo puede utilizarse en lugar de un servidor DNS. En él especificaremos los nombre de todos los equipos conectados a la red y su correspondientes direcciones IP. De esta forma podremos hacer referencia a los mismos sin especificar su dirección. Linux se encargará de buscar esta dirección dentro del archivo /etc/hosts Puede emplearse para proporcionar un conjunto mínimo de nombres de hosts en caso de que el servidor de DNS se encuentre desactivado o durante el proceso de arranque de Linux. El archivo /etc/host.conf dice al sistema cómo resolver los nombres de los hosts. Contiene el orden en el que serán ejecutadas las resoluciones que requiera el host, este archivo normalmente contiene la siguiente línea: order hosts,bind,nis El significado de estos parámetros es que cualquier tipo de resolución de nombres primeramente debe ser ejecutada en el archivo /etc/hosts, posteriormente se debe consultar a Bind y si aún no se ha logrado la resolución, intentar con NIS (Network Information Server), si después de consultar este servicio no es posible la resolución, el Resolver responderá que no fue posible localizar el host. /etc/hosts.allow,... donde se especifican los hosts que tienen acceso al sistema. /etc/hosts.deny,... donde se especifican los hosts a los que se prohíbe el acceso al sistema Iwconfig: Configuración wireless Para poder configura la red inalámbrica necesitamos instalar los siguientes paquetes: #apt-get install wireless-tools wavemon El comando iwconfig tiene las mismas funciones que ifconfig, es decir configurar la red, pero en este caso la red wireless. Ejecutando el comando: #iwconfig, sin parametros observaremos cuales son las interfaces wireless de nuestro sistema.

108 90 Servidor Linux para conexiones seguras de una LAN a Internet Por ejemplo la salida del servidor es la siguiente: # iwconfig lo eth0 no wireless extensions. no wireless extensions. eth1 unassociated ESSID:off/any Mode:Managed Channel=0 Access Point: 00:00:00:00:00:00 Bit Rate=0 kb/s Tx-Power=off RTS thr:off Fragment thr:off Encryption key:off Power Management:off Link Quality:0 Signal level:0 Noise level:0 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0 Las opciones básicas de iwconfig sirven para determinar el nombre del ESSID, y establecer la clave WEP del sistema, tanto en hexadecimal como en ASCII. Veámoslo con unos ejemplos: Asignar el nombre de NodoEjemplo a nuestra red: #iwconfig eth1 essid NodoEjemplo Asignar una clave WEP hexadecimal #iwconfig eth1 key abcd Asignar una clave WEP ASCII, añadiendo al principio s: : #iwconfig eth1 key s:clave-secreta Este comando tiene multitud de opciones que pueden ser consultadas en el manual del sistema: $man 8 iwconfig. Para configuraciones más complejas es mejor que editemos el archivo /etc/network/interfaces como se describe en la sección Si utilizamos claves WPA, será necesario instalar un cliente WPA (para esta configuración diríjase a la sección ). Podemos tener un monitor de la conexión wireless con: $wavemon,... monitor del estilo de top para conexiones wireless. Para más información diríjase al capítulo Redes inalámbricas (cap. 14) Resolución de problemas Si encontramos problemas en la instalación de red podemos ejecutar los siguientes comandos y consultar las salidas: #ifconfig #cat /proc/pci #cat /proc/interrupts #dmesg more

109 Parte III Instalación de Servicios

110

111 Capítulo 9 Servicios de red 9.1. Servidor DHCP El Protocolo de configuración dinámica de servidores (DHCP, Dynamic Host Configuration Protocol), es un protocolo de red en el que un servidor provee los parámetros de configuración a las computadoras que lo requieran, conectadas a la red (máscara, puerta de enlace y otros) y también incluye un mecanismo de asignación de direcciones de IP. Este protocolo apareció como protocolo estándar en octubre de 1993 y existe un proyecto abierto para desarrollar DHCPv6, en redes IPv6. La información de esta sección a sido obtenida de la enciclopedia libre: Asignación de direcciones IP Sin DHCP, cada dirección IP debe configurarse manualmente en cada ordenador y, si el ordenador se mueve a otro lugar en otra parte de la red, se debe de configurar otra dirección IP diferente. El DHCP le permite al administrador supervisar y distribuir de forma centralizada las direcciones IP necesarias y, automáticamente, asignar y enviar una nueva IP si el ordenador es conectado en un lugar diferente de la red. El protocolo DHCP incluye tres métodos de asignación de direcciones IP: Asignación manual: Donde la asignación se basa en una tabla con direcciones MAC (pares de direcciones IP introducidas manualmente por el administrador). Sólo las computadoras con una dirección MAC que figure en dicha tabla recibirán la IP asignada en dicha tabla. Asignación automática: Donde una dirección de IP libre obtenida de un rango determinado por el administrador se le asigna permanentemente a la computadora que la requiere. Asignación dinámica: El único método que permite la reutilización dinámica de las direcciones IP. El administrador de la red determina un rango de direcciones IP y cada computadora conectada a la red está configurada para solicitar su dirección IP al servidor cuando la tarjeta de interfaz de red se inicializa. El procedimiento usa un concepto muy simple en un intervalo de tiempo controlable. Esto facilita la instalación de nuevas máquinas clientes, en la red. El DHCP es una alternativa a otros protocolos de gestión de direcciones IP de red como el BOOTP (Bootstrap Protocol), respento a este, DHCP es un protocolo más avanzado.

112 94 Servidor Linux para conexiones seguras de una LAN a Internet Parámetros configurables Un servidor DHCP puede proveer de una configuración opcional a la computadora cliente. La lista de opciones siguientes son configurables mediante DHCP: Dirección del servidor DNS. Nombre DNS. Puerta de enlace de la dirección IP. Dirección de difusión de red (Broadcast Address). Máscara de subred. Tiempo máximo de espera del ARP (Protocolo de Resolución de Direcciones). MTU (Unidad de Transferencia Máxima) para la interfaz. Servidores NIS (Servicio de Información de Red). Dominios NIS. Servidores NTP (Protocolo de Tiempo de Red). Servidor SMTP. Servidor TFTP. Nombre del servidor WINS Implementaciones Microsoft introdujo DHCP en sus Servidores NT con la versión 3.5 de Windows NT a finales de 1994, a pesar de que la llamaron una nueva función no fue inventada por ellos. El Consejo de Software de Internet (ISC: Internet Software Consortium) publicó distribuciones de DHCP para Unix con la versión 1.0 del ISC DHCP Server el 6 de diciembre de 1997 y una versión (2.0) que se adaptaba mejor el 22 de junio de Se puede encontrar el software en: Otras implementaciones importantes incluyen: Cisco: añadió un servidor DHCP habilitado en Cisco IOS 12.0 en febrero de Sun: añadió el soporte para DHCP, a su sistema operativo Solaris, en julio de Actualmente, la mayoría de los routers incluyen soporte DHCP Anatomía del protocolo DHCP usa los mismos puertos asignados por el IANA (Autoridad de Números Asignados en Internet según siglas en inglés) en BOOTP: 67/udp: Para las computadoras servidor. 68/udp: Para las computadoras cliente. A continuación muestro las actuaciones que puede tener el protocolo: DHCP Discover: La computadora cliente emite peticiones masivamente en la subred local para encontrar un servidor disponible. El router puede ser configurado para redireccionar los paquetes DHCP a un servidor DHCP en una subred diferente. La implementación cliente crea un paquete UDP (Protocolo de Datagramas de Usuario) con destino y requiere también su última dirección IP conocida, aunque esto no es necesario y puede llegar a ser ignorado por el servidor.

113 Capítulo 9. Servicios de red 95 DHCP Offer: El servidor determina la configuración basándose en la dirección del soporte físico de la computadora cliente especificada en el registro CHADDR. El servidor especifica la dirección IP en el registro YIADDR. DHCP Request: El cliente selecciona la configuración de los paquetes recibidos de DHCP Offer. Una vez más, el cliente solicita una dirección IP específica que indicó el servidor. DHCP Acknowledge: El servidor confirma el pedido y lo publica masivamente en la subred. Se espera que el cliente configure su interface de red con las opciones que se le asignaron Configuración de un servidor DHCP El fichero de configuración de un servidor DHCP es /etc/dhcpd.conf. El primer paso es comprobar que nuestro kernel esta configurado para que el sistema se pueda utilizar como servidor DHCP. Para ello ejecutaremos: #ifconfig -a #ifconfig -a eth0 Link encap:ethernet HWaddr 00:C0:9F:6E:1D:E0 inet addr: Bcast: Mask: UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1792 errors:0 dropped:0 overruns:0 frame:0 TX packets:3719 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes: (1.2 MiB) TX bytes: (372.7 KiB) Interrupt:6 Si no encontramos la opción MULTICAST deberemos reconfigurar el kernel para agregarlo. En la mayoría de sistemas no será necesario, funcionará por defecto. Para instalar el servicio DHCP realizamos un apt: #apt-get install dhcp El primer paso al configurar un servidor DHCP es crear el fichero de configuración que almacena la información de red de los clientes. Se pueden declarar opciones globales para todos los clientes, o bien opciones para cada sistema cliente. El fichero de configuración posee dos tipos de información: Parámetros: Establece cómo se realiza una tarea, si debe llevarse a cabo una tarea o las opciones de configuración de red que se enviarán al cliente. Declaraciones: Describen el tipo de red y los clientes, proporcionan direcciones para los clientes o aplican un grupo de parámetros a un grupo de declaraciones. Algunos parámetros deben empezar con la palabra clave option. Los parámetros definen valores no opcionales o que controlan el comportamiento del servidor DHCP. Si cambiamos el fichero de configuración, para aplicar los cambios, reiniciaremos el demonio DHCP: # /etc/init.d/dhcp restart Subredes Debemos incluir una declaración subnet para cada subred de la red. Si no lo hacemos, el servidor DHCP no podrá arrancarse. En el ejemplo siguiente, hay opciones globales para cada cliente DHCP de la subred y un rango de IPs declarado, a los clientes se les asigna una dirección IP dentro de ese rango. subnet netmask { option routers ; option subnet-mask ; option domain-name "example.com"; option domain-name-servers ; option time-offset -5; # Eastern Standard Time } range ;

114 96 Servidor Linux para conexiones seguras de una LAN a Internet Redes compartidas Todas las subredes que comparten la misma red física deben declararse dentro de una declaración shared-network. Los parámetros dentro de shared-network, pero fuera de las declaraciones subnet se consideran parámetros globales. El nombre que le asignemos debe ser el título descriptivo de la red, como, por ejemplo, test-lab para describir todas las subredes en un entorno de laboratorio de tests. shared-network name { option domain-name "test.redhat.com"; option domain-name-servers ns1.redhat.com, ns2.redhat.com; option routers ; more parameters for EXAMPLE shared-network subnet netmask { parameters for subnet range ; } subnet netmask { parameters for subnet range ; } } Grupos La declaración group puede utilizarse para aplicar parámetros globales a un grupo de declaraciones. Podemos agrupar redes compartidas, subredes, hosts u otros grupos. group { option routers ; option subnet-mask ; } option domain-name "example.com"; option domain-name-servers ; option time-offset -5; # Eastern Standard Time host apex { option host-name "apex.example.com"; hardware ethernet 00:A0:78:8E:9E:AA; fixed-address ; } host raleigh { option host-name "raleigh.example.com"; hardware ethernet 00:A1:DD:74:C3:F2; fixed-address ; } Tiempo de lease (asignación de IP) Para configurar un servidor DHCP que realiza un lease de la dirección IP dinámica dentro de una subred, declararemos un tiempo de lease por defecto, un tiempo de lease máximo y los valores de configuración de red para los clientes. Esto se puede ver en el ejemplo siguiente que asigna direcciones a los clientes dentro de un rango: default-lease-time 600; max-lease-time 7200; option subnet-mask ; option broadcast-address ; option routers ; option domain-name-servers , ; option domain-name "example.com"; subnet netmask { range ; } Asignaciones IP por MAC Para asignar una dirección IP a un cliente según la dirección MAC de la tarjeta de interfaz de red, usamos el parámetro hardware ethernet de una declaración host. En el ejemplo siguiente, la declaración host apex especifica que la tarjeta de interfaz de red con la dirección MAC 00:A0:78:8E:9E:AA siempre debe ejecutarse en lease con la dirección IP También hay que tener en cuenta, que podemos usar el parámetro opcional host-name para asignar un nombre host al cliente. host apex { option host-name "apex.example.com"; hardware ethernet 00:A0:78:8E:9E:AA; fixed-address ; }

115 Capítulo 9. Servicios de red 97 Más opciones Para obtener una lista completa de sentencias de opciones e información relacionada, podemos consultar la página del manual de dhcp-options: $man dhcp-options Base de datos lease En el servidor DHCP, el fichero /var/lib/dhcp/dhcpd.leases almacena la base de datos lease del cliente DHCP. Este fichero no debe modificarse manualmente. La información sobre lease de DHCP de cada dirección IP asignada recientemente se almacena de modo automático en la base de datos lease. La información incluye la longitud del lease, al que se ha asignado la dirección IP, las fechas iniciales y finales del lease, y la dirección MAC de la tarjeta de interfaz de red utilizada para recuperar el lease. Todas las horas de la base de datos lease se expresan según GMT, no con la hora local. En el cliente DHCP, el fichero /var/lib/dhcp/dhclient.leases almacena la base de datos lease del servidor DHCP, como en el caso anterior. El contenido de este archivo se puede ver en el ejemplo siguiente: lease { interface "eth0"; fixed-address ; option subnet-mask ; option routers ; option dhcp-lease-time ; option dhcp-message-type 5; option domain-name-servers ; option dhcp-server-identifier ; option domain-name "proyecto"; renew /5/26 09:33:21; rebind /5/29 13:16:07; expire /5/30 10:16:07; } Arranque y parada del servidor Antes de arrancar por primera vez el servidor DHCP, nos aseguraremos de que existe un fichero /var/lib/dhcp/dhcpd.leases para que no falle el arranque. Para interactuar con el servicio DHCP, utilizaremos: #/usr/sbin/dhcpd start,... arrancar el servidor. #/usr/sbin/dhcpd stop,... parar el servidor. Si tenemos más de una interfaz de red conectada al sistema, pero sólo deseamos que el servidor DHCP arranque en una de las interfaces, podemos modificar el script init para arrancar desde ese dispositivo. Para ello, añadimos el nombre de la interfaz o interfaces en el archivo /etc/default/dhcpd: INTERFACES="eth0" o INTERFACES="eth0 wlan0" Esto es útil si disponemos de una máquina firewall con dos tarjetas de red. Se puede configurar una tarjeta de red como cliente DHCP para recuperar una dirección IP en Internet y la otra puede utilizarse como servidor DHCP para la red interna, detrás del firewall. Nuestro sistema será más seguro si especificamos la tarjeta de red conectada a la red interna, ya que los usuarios no pueden conectarse al demonio por Internet. Otras opciones que pueden ser especificadas incluyen: -p <portnum>: Especifica el número de puerto UDP en el que DHCPD deberá escuchar, por defecto es el 67 y el servidor DHCP transmite las respuestas al cliente por el puerto 68. Si especificamos un puerto en este momento y usamos el Agente de Transmisión DHCP, este debe escuchar por el mismo puerto. -f: Ejecuta el demonio como un proceso de en primer plano. -d: Registra el demonio del servidor DCHP en el descriptor de errores estándar. Se suele usar para depurar errores, los mensajes son guardados en el archivo /var/log/messages.

116 98 Servidor Linux para conexiones seguras de una LAN a Internet -cf archivo: Especifica la localización del archivo de configuración, por defecto se encuentra en /etc/dhcpd.conf. -lf archivo: Especifica la localización del archivo de base de datos lease. Si ya existe, es muy importante que el mismo fichero sea usado cada vez que el servidor DHCP se inicia. Por defecto se encuentra en /var/lib/dhcp/dhcpd.leases. -q: No imprime la versión del servidor DHCP cuando se inicia el demonio. Agente de transmisión DHCP Si lo vamos a utilizar, para instalarlo realizaremos el correspondiente apt: #apt-get install dhcp3-relay Nos creará un nuevo archivo de opciones: /etc/default/dhcp3-relay. El agente de transmisión DHCP (dhcp-relay) permite transmitir las peticiones DHCP y BOOTP desde una subred sin un servidor DHCP, dirigidos a uno o más servidores en otras subredes. Cuando un cliente DHCP pide información, el agente de transmisión DHCP reenvía la petición a la lista de servidores DHCP especificada al iniciarlo. Cuando el servidor DHCP devuelve una respuesta, la respuesta puede ser broadcast o unicast, en la red que ha enviado la petición originaria. El agente de transmisión escuchará las peticiones de todas las interfaces a menos que el argumento -i se use para especificar solo una o varias interfaces donde escuchar. Para iniciar el agente de transmisión DHCP, usamos el comando: #dhcrelay <servidor> Donde servidor es el nombre de al menos un servidor DHCP al que se le deben transmitir las peticiones. Dhcp-relay se puede iniciar con las siguientes opciones: Opción Descripción -i Nombres de interfaces de red que deben configurarse. Si no se especifica ninguna interfaz, se configurarán todas y se eliminarán las interfaces sin multidifusión, si se puede. -p Puerto en el que deberá escuchar dhcp-crelay. Transmite peticiones a los servidores en este puerto y respuestas a los clientes en el puerto inmediatamente superior. -d Obliga a dhcp-relay a ejecutarse en primer plano. -q Desactiva la impresión de configuración de red, cuando arranca dhcp-relay Configuración de un cliente DHCP El primer paso al configurar un cliente DHCP es asegurarse de que el kernel reconoce la tarjeta de la interfaz de red. La mayoría de las tarjetas se reconocen durante el proceso de instalación y el sistema es configurado para utilizar el módulo correcto en el kernel. Si instalamos una tarjeta después de la instalación, probablemente tendremos que recompilar el kernel. Para configurar manualmente un cliente DHCP, debemos modificar el archivo /etc/network/interfaces habilitando el uso de la red con los dispositivos adecuados. Para configurar las opciones de red debemos modificar el archivo /etc/network/options. Podemos instalar uno de los siguientes clientes dhcp: #apt-get install pump,... para ejecutar: #pump <dispositivo_red> #apt-get install dhcp-client-udeb,... para ejecutar: #dhclient <dispositivo_red> #apt-get install dhcp3-client,... para ejecutar: #dhclient3 <dispositivo_red>

117 Capítulo 9. Servicios de red Configuración gráfica de DHCP, interfaz Webmin El módulo DHCP para nuestra interfaz web: Webmin, nos facilitará mucho la tarea de administración del servidor. Para ello realizaremos un apt: #apt-get install webmin-dhcpd En las siguientes pantallas podemos observar como realizar todos los pasos detallados en las secciones anteriores, pero esta vez de forma gráfica. Figura 9.1: Módulo Webmin para DHCPD

118 100 Servidor Linux para conexiones seguras de una LAN a Internet Figura 9.2: Módulo DHCPD WEBMIN: Subredes y redes compartidas Figura 9.3: Módulo DHCPD WEBMIN: máquinas y grupos de máquinas

119 Capítulo 9. Servicios de red BIND: Servidor de nombres DNS Los objetivos de un servidor de nombres de dominio son dos: 1. Por una parte, traducir una dirección canónica en una dirección IP. 2. Por otra parte, traducir una dirección IP en una o varias direcciones canónicas, es lo que se conoce como traducción inversa. DNS (Domain Name Service) es un sistema jerárquico con estructura de árbol. El inicio se escribe. y se denomina raíz, al igual que en las estructuras de datos en árbol. Bajo la raíz se hallan los dominios de más alto nivel (TLD, del inglés, Top Level Domain), cuyos ejemplos más representativos son ORG, COM, EDU y NET, si bien hay muchos más (como los dominios de paises,.es,.uk,... ). Del mismo modo que un árbol, tiene una raíz y ramas que de ella crecen. Cuando se busca una máquina, la consulta se ejecuta recursivamente en la jerarquía, empezando por la raíz. Así pues, empezando en. encontramos los sucesivos servidores de nombres para cada nivel en el nombre de dominio por referencia. Por supuesto, nuestro servidor de nombres guardará toda la información obtenida a lo largo del proceso, a fin de no tener que preguntar de nuevo durante un buen rato. En el árbol análogo, cada. en el nombre es un salto a otra rama. Y cada parte entre los. son los nombres de los nodos particulares en el árbol Para qué necesitamos un DNS? El DNS define: Un espacio de nombres jerárquico para los hosts y las direcciones IP. Una tabla de hosts implementada como una base de datos distribuida. Un traductor (resolver) o librería de rutinas que permite realizar consultas a esa base de datos. Enrutamiento mejorado para el correo electrónico. Un mecanismo para encontrar los servicios en una red. Un protocolo para intercambiar información de nombres. Para ser auténticos ciudadanos de Internet, los sitios necesitan el DNS. Mantener un fichero local /etc/hosts con un mapeado de todos los hosts que los usuarios puedan querer contactar no es factible. Cada sitio mantiene una o varias piezas de la base de datos distribuida que posibilita el servicio global del sistema DNS. Su pieza de la base de datos consiste en dos o más ficheros de texto que contienen registros para cada uno de los hosts. Cada registro es una sencilla línea consistente en un nombre (normalmente el nombre de un host), un tipo de registro y diversos valores o datos. Es un sistema cliente/servidor. Los servidores (de nombres) cargan los datos de sus ficheros de DNS en memoria y los usan para responder las consultas tanto de los clientes de la red interna como de los clientes y otros servidores en Internet. Todos nuestros hosts deberían ser clientes del DNS, pero relativamente pocos necesitan ser servidores de DNS. Si nuestra organización es pequeña (unos pocos hosts en una única red), podemos ejecutar un servidor en uno de nuestros equipos o pedirle al ISP (Proveedor de servicios) que nos proporcione el servicio. Un sitio de tamaño medio con diversas subredes debería tener múltiples servidores de DNS para reducir la latencia de las consultas y mejorar la productividad. Un sistema muy grande puede dividir los dominios de DNS en subdominios y usar algunos servidores para cada subdominio.

120 102 Servidor Linux para conexiones seguras de una LAN a Internet Servicios que activa un DNS Servicios de los que se puede disponer con un servidor DNS, son los siguientes: Resolución de nombres a direcciones IP. Resolución inversa (de direcciones IP a nombres). Listas de control de acceso. Servidores secundarios. Transferencia segura de zonas entre servidores primarios y secundarios (y puertos). Localización de servicios. Respuestas parametrizadas en función del origen de la petición (vistas). Uso de la herramienta rndc. Logs a medida Configuración del servidor Un FQDN (Nombre de Dominio Totalmente Cualificado) está formado por un host y un nombre de dominio, incluyendo el de más alto nivel. Por ejemplo, es un FQDN. www es el host, upc es el dominio de segundo nivel y.es es el dominio de de más alto nivel. Un FQDN siempre comienza con el nombre del host y continúa subiendo directo al dominio de más alto nivel. Si necesitamos proveer un servicio de nombres para un dominio, podemos utilizar un servidor de nombres completo: como named, que viene con el paquete bind o bind9. Para nuevas instalaciones se recomienda bind9, ya que soluciona problemas de seguridad que tenían las versiones anteriores. DNS es uno de los puntos más frágiles y puede ser atacado en cualquier momento, borrando nuestras máquinas de la red. Para instalar bind9, se necesitan los siguientes paquetes: bind9 bind9-doc dnsutils Para instalarlos simplemente realizamos un apt: #apt-get install bind9 bind9-doc dnsutils Aunque puede que también queramos instalar estos paquetes de utilidades: bind9-host dns-browse dnscvsutil nslint bind9-doc libbind-dev libnet-dns-perl dhcp-dns

121 Capítulo 9. Servicios de red 103 Los archivos de configuración que intervendrán serán los siguientes: /etc/bind/named.conf : Para definir las zonas DNS básicas. /etc/bind/named.conf.local: Para definir las zonas locales. /etc/bind/named.conf.options: Para configurar opciones. /etc/bind/db.lan: Para añadir los equipos de una LAN. /etc/bind/db : Para añadir el DNS inverso de una LAN. El archivo /etc/bind/named.conf.options también es procesado por resolvconf para producir: /var/run/bind/named.options Este archivo es el mismo que el original, excepto que la especificación forwarders es una lista de los servidores de nombres no locales, actualmente disponibles. Para hacer uso de ello, cambiamos la línea include del /etc/bind/named.conf de modo que incluya: /var/run/bind/named.options Los archivos de base de datos sin una ruta explicita, y que se han definido en cualquiera de los archivos de configuración de named se almacenarán en /var/cache/bind/ Traducción de nombres a direcciones IP El primer paso es editar el fichero /etc/bind/named.conf.options, donde cambiaremos algunos de los valores por defecto y añadiremos todo lo necesario para que nuestro dominio sea accesible desde el exterior. A menos que seamos un proveedor de servicios de internet, se nos habrán proporcionado una o más direcciones IP de servidores de nombres estables, que seguramente querremos usar como redireccionadores (forwarders). Para ello deberemos descomentar el bloque al principio del fichero: // forwarders { // ; // }; Y dejarlo en algo como esto: forwarders { ; ; }; Entre las opciones también se encuentra ocultar la versión de Bind, para una mayor seguridad del sistema: "DNS server"; Configuración gráfica de DNS BIND, interfaz Webmin Para facilitarnos la compleja tarea de configuración de DNS BIND es posible utilizar la herramienta de administración web: Webmin. Para la instalación del módulo correspondiente, utilizamos el siguiente apt: #apt-get install webmin-bind En los apartados siguientes iré comentando las opciones a las que se puede acceder desde el módulo web.

122 104 Servidor Linux para conexiones seguras de una LAN a Internet Pantalla principal Para acceder al servidor BIND, pulsamos sobre la pestaña Servidores y después sobre el icono Servidor de DNS BIND, aparecerá el menú de configuración, como se observa en la figura 9.4. En este menú podemos realizar las siguientes opciones: Configurar el resto de opciones globales del servidor. Crear un servidor DNS primario. Crear un servidor DNS secundario. Crear un servidor DNS de cache. Crear un servidor DNS de reenvío. Figura 9.4: Interfaz gráfica Webmin para el servidor DNS BIND Para que todos los cambios sean tenidos en cuenta, es necesario reiniciar el servidor DNS BIND, se realiza pulsando el botón Aplicar Cambios en la página de configuración principal del servidor DNS. Pasemos a ver cada una de las secciones a las que podemos acceder.

123 Capítulo 9. Servicios de red 105 Opciones generales Como se puede observar en la figura 9.5, desde estas secciones podemos modificar los valores contenidos en el archivo /etc/bind/named.conf. Figura 9.5: Webmin BIND: Opciones generales

124 106 Servidor Linux para conexiones seguras de una LAN a Internet Crear zona maestra En esta sección podemos crear un servidor DNS primario o editar sus parámetros una vez configurado. Figura 9.6: Webmin BIND: Servidor primario Crear zona subordinada En esta sección podemos crear y modificar todos los parámetros de un servidor DNS secundario. Figura 9.7: Webmin BIND: Servidor secundario Los servidores DNS son dos (o más) para evitar que el fallo de uno impida el acceso a los servicios asociados al dominio, esto es, por motivos de redundancia. Si bien es posible utilizar un único servidor DNS no es una práctica recomendable. A pesar del nombre servidor secundario, la información que contienen estos servidores DNS, es el mismo valor que cualquier otro servidor DNS primario, la razón principal por la que se configura un servidor secundario es para ofrecer un nivel de respaldo y reducir la carga de los servidores DNS principales, pero sobre todo para reducir la carga administrativa en el caso de necesitar varios servidores. La única diferencia que existe entre un primario y un secundario en DNS, es que el secundario obtiene su información copiando el Archivo de Zona del primario que se le ha indicado en el archivo de configuración. La actualización de esta copia de Archivo de Zona es conocida como Zone Transfer y ocurre dependiendo de los parámetros que hayan sido definidos.

125 Capítulo 9. Servicios de red 107 Crear zona de sólo cache En esta sección podemos crear y modificar todos los parámetros de un servidor DNS de cache. Figura 9.8: Webmin BIND: Crear zona de sólo cache Este tipo de servidor DNS mantiene copias de las resoluciones ( cache ) que ya han sido buscadas en otros servidores DNS primarios o secundarios, esto no implica que los servidores DNS primarios y secundarios no mantengan copias de sus resoluciones caches, lo único que se evita en este tipo de servidores DNS es mantener Archivos de Zona, toda resolución que realice un servidor cache debe ser consultada con un servidor que primario o secundario. Una de las principales razones por las cuales se configura un servidor cache, es cuando se utiliza una conexión lenta, esto evita la necesidad de requerir resoluciones que ya fueron resueltas en una ocasión, y por lo tanto evitan un cierto nivel de tráfico, aprovechando la información local para buscar resoluciones de nombres. Crear zona de reenvío En esta sección podemos crear y modificar todos los parámetros de un servidor DNS que reenvie las peticiones a otro servidor. Figura 9.9: Webmin BIND: Crear zona de reenvío Si los clientes de la red tienen que poder resolver nombres DNS externos, puede que necesitemos configurar y utilizar servidores de reenvío en los servidores DNS de nuestra red.

126 108 Servidor Linux para conexiones seguras de una LAN a Internet Para utilizar reenviadores que administren el tráfico DNS entre nuestra red e Internet, configuramos el firewall para permitir que sólo un servidor DNS se comunique con Internet. Cuando hayamos configurado los demás servidores DNS de nuestra red para reenviar a ese servidor DNS consultas que no puedan resolver localmente, ese servidor funcionará como nuestro único reenviador Seguridad en DNS Los servidores que controlan y mantienen los nombres de dominio de nuestra red, ofrecen a los atacantes un objetivo tentador. El servicio de denominación de nombres de Internet de Berkley (BIND, Berkley Internet Naming domain), es decir, el servidor DNS primario, ha estado constantemente en la lista de los diez servicios más atacados. DNS es un programa antiguo y su estructura deja brechas potenciales (un binario monolítico en lugar de una arquitectura más modular). Además DNS, frecuentemente se ejecuta como raíz, lo que hace que sea más peligroso. Así mismo, como DNS es difícil de configurar y se conoce poco, se suele configurar y asegurar mal. Las configuraciones de cortafuegos para DNS no se implementan correctamente, permitiendo a casi todos los administradores acceder de dentro a fuera sin filtros. Aunque el web, el correo electrónico y otros servicios tienen más visibilidad y captan más la atención del administrador, las brechas DNS ofrecen la forma más rápida y fácil de dejar a nuestra empresa fuera del mapa de Internet. Incluso aunque tengamos conectividad IP con el mundo, sin un servicio DNS válido para nuestros dominios, nadie podría llegar a nuestro servidor web y no se produciría ningún flujo de correo. De hecho, se ha citado DNS como el punto más débil en toda la infraestructura de Internet y un objetivo potencial para los ataques del terrorismo cibernético. En lugar de introducirse en nuestros servidores o atravesar nuestro cortafuegos, un atacante puede simplemente enviar un DoS (denegación de servicio) contra nuestro servicio DNS, quitando del aire a nuestra empresa de una forma efectiva, o peor aún, utilizando un tipo de ataque denominado veneno de cache DNS, los exploradores web enlazados a nuestro sitio serán redireccionados al sitio que le apetezca al atacante. Se conocen al menos cuatro vulnerabilidades BIND. Todas permiten a un atacante ejecutar cualquier código con los mismos privilegios que el servidor DNS. Como usualmente BIND se ejecuta en una cuenta de root, la este código puede lanzarse con los mismos privilegios. Además, se puede interrumpir la propia operación del servidor BIND, y obtener otro tipo de información, que llevaría a explotar otras vulnerabilidades diferentes en el sistema. Cuáles son los sistemas son afectados? Están afectados todos los servidores de nombres de dominio (DNS), que ejecutan las versiones de BIND y (y todas las anteriores). Las versiones 9.x, ya se encuentran corregidas. Como el funcionamiento normal de la mayoría de los servicios de Internet depende del funcionamiento apropiado de los servidores de DNS, podrían afectar otros servicios si estas vulnerabilidades son explotadas. Como usuario domestico, nos debemos preocupar por este problema? Los usuarios comunes, también estamos afectados por este problema, aunque en forma indirecta. Generalmente contamos con un proveedor de servicios de Internet (ISP), que es el que nos proporciona el servicio DNS. Es el ISP, quien debe proteger sus sistemas. Sin embargo, los usuarios de Linux o con otras variantes de Unix instaladas en sus máquinas, deberían verificar si poseen una version vulnerable de BIND instalada, ya que en ese caso, ellos necesitan desactivar o actualizar este software. Son varios los sistemas operativos Unix/Linux que instalan un servidor DNS por defecto. Así, algunos usuarios podrían estar ejecutando este servicio, sin haberlo configurado explícitamente.

127 Capítulo 9. Servicios de red NIS: Servicio de información de red El servicio de información de red (NIS, Network Informatión Service) hace posible la compartición de archivos críticos a través de una red de área local. Normalmente, archivos tales como /etc/passwd y /etc/group, que idealmente deberían permanecer sin cambios entre todas las máquinas, se comparten mediante NIS. De esta forma, cada máquina de red que tiene su cliente NIS correspondiente puede leer los datos contenidos en esos archivos compartidos y usar las versiones de red de los archivos como extensiones de sus versiones locales. El beneficio principal que se alcanza mediante el uso de NIS es que puede mantener una copia central de los datos, y aunque los datos se actualicen, automáticamente se propagan a todos los usuarios de la red. A los usuarios, NIS da la apariencia de un sistema más uniforme (no importa con qué máquina trabaje, que todas sus herramientas y archivos estarán allí) Funcionamiento básico Es, simplemente, una base de datos que los clientes pueden consultar. Consta de una serie de tablas independientes. Cada tabla se origina como un archivo de texto, como el /etc/passwd, el cual tiene una naturaleza tabular y tiene al menos una columna que es única por cada archivo. NIS accede a esas tabla por nombre y permite búsquedas de dos formas: Listado de la tabla entera Presentación de una entrada específica basada en una búsqueda por una clave dada Una vez establecidas las bases de datos en el servidor, los clientes pueden buscar en el servidor las entradas de la base de datos. Normalmente esto ocurre cuando un cliente se configura para que busque en un mapa NIS cuando no encuentra una entrada en su base de datos local. Una máquina puede tener sólo las entradas que necesite para que el sistema trabaje en modo usuario único (cuando no hay conectividad por red), por ejemplo, el archivo /etc/passwd. Cuando un programa hace una petición de búsqueda de la información de contraseña de un usuario, el cliente comprueba su archivo passwd local y si el usuario no existe allí, entonces el cliente hace la petición a su servidor NIS para buscar la entrada correspondiente en la tabla de contraseñas. Si NIS tiene entrada, la devolverá cliente y al programa que pidió la información. El propio programa no se da cuenta de que se ha usado NIS. Lo mismo es cierto si el mapa NIS devuelve la respuesta de que la entrada de contraseña del usuario no existe. El programa debería recibir la información sin que sepa qué ha ocurrido entre medias. Esto se aplica a todos los archivos que se comparten por NIS. Otros archivos comunes compartidos incluyen a /etc/group y /etc/hosts Servidores NIS NIS puede tener un único servidor autorizado donde permanecen los archivos de datos originales (en esto es similar a DNS). Este servidor autorizado se llama servidor NIS maestro. Si nuestra organización es grande, podemos necesitar distribuir la carga entre más de una máquina. Esto lo podemos hacer configurando uno o más servidores NIS secundarios. Además de ayudar a distribuir la carga, los servidores secundarios también proporcionan un mecanismo de manejo de fallos de servidores, ya que puede continuar contestando peticiones incluso mientras el maestro u otros secundarios están caídos. Los servidores NIS secundarios reciben actualizaciones si el servidor NIS primario se actualiza, así que los maestros y esclavos permanecen sincronizados. El proceso de mantener la sincronización del los secundarios con el primario se llama server push. El NIS maestro, como parte de sus scripts de actualización, también pone una copia de sus archivos de mapas en los secundarios. Una vez recibidos los archivos, los servidores secundarios actualizan también sus bases de datos. El NIS maestro no se considera completamente actualizado hasta que se actualizan todos sus secundarios. Hay que señalar que un servidor puede ser a la misma vez servidor y cliente.

128 110 Servidor Linux para conexiones seguras de una LAN a Internet Los servidores NIS primarios establecen dominios que son similares a los dominios de un PDC (Controlador Primario de Dominio). Una diferencia significativa es que el dominio NIS no requiere que el administrador del servidores NIS permita explícitamente unirse a un cliente. Además, el servidor NIS sólo envía datos, no realiza autenticación. El proceso de autenticación de usuarios se deja a cada máquina individual. Unicamente proporciona una lista de usuarios centralizada, ya que todos los clientes son miembros del mismo dominio administrativo y están gestionados por los mismos administradores de sistemas. Deberemos dar nombre a los dominios NIS, y es una buena práctica (aunque no obligatoria) usar nombres distintos de nuestros nombres de dominios DNS. Nos será mucho más fácil explicar los dominios de nuestra red a otros administradores identificando el dominio NIS al que nos referimos. Es posible facilitar la configuración mediante un módulo para la herramienta de administración web Webmin. Para la instalación se utiliza el siguiente apt: #apt-get install webmin-nis Figura 9.10: Interfaz gráfica Webmin para el servidor NIS Configuración del servidor NIS maestro La primera cosa que hemos de tener presente es que no podemos montar dos servidores NIS diferentes para un mismo dominio de una red. Si ya existe un dominio en nuestra red deberemos configurar un cliente. Cuando NIS se desarrolló, en los años ochenta, se le llamó páginas amarillas (Yelow Pages, YP para abreviar). Cuando Sun Microsystems, los desarrolladores del sistemas operativo SunOS (Solaris), empezaron a vender sus sistemas en el Reino Unido, ocurrió un conflicto: el término páginas amarillas era una marca registrada de British Telecom y para evitar un pleito, Sun renombró el paquete a Servicio de información de red, después otros vendedores de Unix le siguieron. Por eso hoy encontraremos que todas las herramientas NIS vienen con el prefijo yp en lugar de nis. Por alguna razón los nombres de archivo no se cambiaron con el nombre oficial de paquete.

129 Capítulo 9. Servicios de red 111 Para instalar el servidor NIS realizaremos un apt: #apt-get install nis,... la instalación nos pedirá que especifiquemos el nombre de dominio Para obtener más información se instala en el sistema el HowTo de NIS, documento muy clarificador: /usr/share/doc/nis/nis.debian.howto.gz Disponemos de varios archivos de configuración: /etc/yp.conf /etc/nsswitch.conf /etc/ypserv.conf /etc/ypserv.securenets Una vez configurados el archivo: #ypserv start,... arranca el servidor NIS #ypserv stop,... para el servidor NIS Después de la instalación podemos cambiar el nombre del dominio con el comando: #domainname <dominio>,... como por ejemplo: #domainname proyecto.debian.com Naturalmente, a fin de que se establezca cada vez que volvamos a arrancar el sistema, es necesario situar el comando domainname en uno de los archivos de inicio rc#.d (Véase apéndice D). Para elegir el runlevel del archivo donde realizar el cambio de nombre tenemos que tener en cuenta que hay que cambiarlo antes de que se arranquen los servidores NIS. Archivos compartidos en NIS Para compartir los archivos en NIS, necesitamos situarnos en el directorio: /var/yp Allí encontraremos un Makefile. Este archivo lista los archivos que se compartirán mediante NIS, así como algunos parámetros adiciónales sobre cómo compartirlos. Editamos el Makefile y retocamos las opciones como se detalla en esta y posteriores secciones. Sin embargo, que se listen aquí no significa que se compartan automáticamente. Este listado simplemente establece los nombres de archivos que se compartirán una vez compilemos el Makefile. La mayoría de las entradas comienzan con: $(YPWDIR) y $(YPSRCDIR), son variables que se configuran al inicio del Makefile, y señalan la ruta donde encontrar los archivos, el valor por defecto es /etc. Una vez configurado el Makefile, para actualizar los mapas de archivos y configurar el servidor NIS como primario simplemente ejecutamos: #ypinit -m,... la opción -m le dice que un servidor primario Ypinit ejecutará el make, para construir los mapas y ponerlos en los servidores secundarios que se le indiquen en /var/yp/yp-servers.

130 112 Servidor Linux para conexiones seguras de una LAN a Internet En el cuadro 9.1 puede observar un listado típico del archivo /var/yp/makefile. Cuadro 9.1: Listado del archivo NIS /var/yp/makefile # Makefile for the NIS databases # # This Makefile should only be run on the NIS master server of a domain. # All updated maps will be pushed to all NIS slave servers listed in the # /var/yp/ypservers file. Please make sure that the hostnames of all # NIS servers in your domain are listed in /var/yp/ypservers. # # This Makefile can be modified to support more NIS maps if desired.... # If we have only one server, we don t have to push the maps to the # slave servers (NOPUSH=true). If you have slave servers, change this # to "NOPUSH=false" and put all hostnames of your slave servers in the file # /var/yp/ypservers. NOPUSH=true... # We do not put password entries with lower UIDs (the root and system # entries) in the NIS password database, for security. MINUID is the # lowest uid that will be included in the password maps. If you # create shadow maps, the UserID for a shadow entry is taken from # the passwd file. If no entry is found, this shadow entry is # ignored. # MINGID is the lowest gid that will be included in the group maps. MINUID=1000 MINGID= # Should we merge the passwd file with the shadow file? # MERGE_PASSWD=true false MERGE_PASSWD=false # Should we merge the group file with the gshadow file? # MERGE_GROUP=true false MERGE_GROUP=false... # These are the source directories for the NIS files; normally # that is /etc but you may want to move the source for the password # and group files to (for example) /var/yp/ypfiles. The directory # for passwd, group and shadow is defined by YPPWDDIR, the rest is # taken from YPSRCDIR. # YPSRCDIR = /etc YPPWDDIR = /etc YPBINDIR = /usr/lib/yp YPSBINDIR = /usr/sbin YPDIR = /var/yp YPMAPDIR = $(YPDIR)/$(DOMAIN) # These are the files from which the NIS databases are built. You may edit # these to taste in the event that you wish to keep your NIS source files # seperate from your NIS server s actual configurati\ on files. # GROUP = $(YPPWDDIR)/group PASSWD = $(YPPWDDIR)/passwd SHADOW = $(YPPWDDIR)/shadow GSHADOW = $(YPPWDDIR)/gshadow ADJUNCT = $(YPPWDDIR)/passwd.adjunct ALIASES = $(YPSRCDIR)/aliases ETHERS = $(YPSRCDIR)/ethers # ethernet addresses (for rarpd) BOOTPARAMS = $(YPSRCDIR)/bootparams # for booting Sun boxes (bootparamd) HOSTS = $(YPSRCDIR)/hosts NETWORKS = $(YPSRCDIR)/networks PRINTCAP = $(YPSRCDIR)/printcap PROTOCOLS = $(YPSRCDIR)/protocols PUBLICKEYS = $(YPSRCDIR)/publickey RPC = $(YPSRCDIR)/rpc SERVICES = $(YPSRCDIR)/services NETGROUP = $(YPSRCDIR)/netgroup NETID = $(YPSRCDIR)/netid AMD_HOME = $(YPSRCDIR)/amd.home AUTO_MASTER = $(YPSRCDIR)/auto.master AUTO_HOME = $(YPSRCDIR)/auto.home AUTO_LOCAL = $(YPSRCDIR)/auto.local TIMEZONE = $(YPSRCDIR)/timezone LOCALE = $(YPSRCDIR)/locale NETMASKS = $(YPSRCDIR)/netmasks YPSERVERS = $(YPDIR)/ypservers # List of all NIS servers for a domain...

131 Capítulo 9. Servicios de red 113 Configuración de un NIS maestro para poner esclavos Esto requiere dos tareas: Editar el archivo /var/yp/yp-servers para colocar todos los servidores NIS secundarios a los que el servidor maestro deberá mandar sus mapas. Esto se consigue introduciendo, en una línea diferente, los nombres de hosts de cada servidor secundario. Por cada nombre de host que listemos en este archivo tenemos que colocar su entrada correspondiente en el archivo /etc/hosts. Asegurarnos de que el /var/yp/makefile tiene la línea NOPUSH=false Establecer UID y GID mínimos. Obviamente, no queremos compartir la entrada de root mediante NIS, entonces el mínimo debería ser mayor que cero. Estas variables del /var/yp/makefile son: MINUID=<numero> MINGID=<numero> Configuración de un servidor NIS secundario Cuando crece nuestra red, indudablemente encontraremos que necesitamos distribuir la carga de nuestro servicio NIS entre varias máquinas. Esto es soportado a través del uso de servidores NIS secundarios. Los servidores no requieren mantenimiento adicional una vez configurados, debido a que el servidor NIS maestro les envía las actualizaciones si se recontruyen los mapas. Hay que seguir tres pasos para configurar el servidor NIS secundario: Configurar el nombre de dominio (domainname) Configurar el maestro NIS al que se va a unir el esclavo Ejecutar: #ypinit -s <nis_maestro>,... para iniciar el servidor esclavo Autenticar usuarios mediante NIS Como NIS se puede usar con otros sistemas para autenticar usuarios, necesitaremos permitir que las entradas de contraseña encriptadas se compartan. Si usamos contraseñas shadow, NIS automáticamente lo manejará, tomando el campo encriptado del archivo /etc/shadow y mezclándolo con la copia compartida de /etc/passwd en NIS. Ésta opción se encuentra en el archivo /var/yp/makefile. A menos que tengamos una razón específica para no compartir las contraseñas, dejaremos la variable MERGE PASSWD=true. El archivo /etc/group permite tener contraseñas de grupo aplicadas en el sistema. Puesto que necesita ser de lectura para todo el mundo, algunos sistemas ofrecen soporte a archivos shadow de grupos. A menos que dispongamos y usemos, el archivo /etc/gshadow, configuraremos la opción MERGE GROUP=false Cliente NIS El primer paso que deberemos realizar es indicar al cliente NIS, ypbind, cuál es el dominio al que se va a conectar, siendo el comportamiento por defecto de ypbind interrogar al servidor de la red local a la que está conectado. De esta forma, si se trata de un ordenador portátil, el cual deberá conectarse a diferentes redes podemos optar por dejar el archivo /etc/yp.conf vacío sin especificar el dominio a emplear, de esta forma el ypbind realizará la consulta por defecto en la red local en donde se esta conectando. Para lanzar el cliente NIS, ejecutaremos el siguiente comando: #ypbind

132 114 Servidor Linux para conexiones seguras de una LAN a Internet Configuración local de NIS: /etc/yp.conf Si hubiera más de un dominio en la red especificaremos el servidor NIS de la siguiente forma: # yp.conf Configurati\ on file for the ypbind process. You can define # NIS servers manually here if they can t be found by # broadcasting on the local net (which is the default). # # See the manual page of ypbind for the syntax of this file. # # IMPORTANT: For the "ypserver", use IP addresses, or make sure that # the host is in /etc/hosts. This file is only interpreted # once, and if DNS isn t reachable yet the ypserver cannot # be resolved and ypbind won t ever bind to the server. ypserver ypserver.network.com Donde ypserver.network.com es el nombre del servidor NIS al que nos conectaremos. Evidentemente el ordenador debe saber como resolver el nombre del servidor, ya sea utilizando DNS o especificando el nombre e IP en el archivo /etc/hosts. También podemos especificar múltiples dominios en el archivo /etc/yp.conf de la siguiente forma: #yp.conf # domain proyecto server debian domain casa server debian-home Al arrancar el ordenador podemos emplear el comando domainname para especificar el dominio al que nos estamos conectando. De esta forma el cliente NIS selecciónará el servidor adecuado: #domainname proyecto Si no supiéramos el nombre o IP del servidor en un determinado dominio se podría modificar el archivo de configuración de la siguiente forma: #yp.conf # domain proyecto server debian domain casa server debian-home domain trabajo broadcast La opción broadcast indica al cliente NIS que, si nos conectamos al dominio trabajo, debe utilizar el servidor que encuentre en la red local. Seleccionar los archivos de configuración del servidor Una vez establecida la conexión con el servidor NIS, es necesario especificar qué archivos de configuración importaremos. Normalmente los archivos de configuración serán los correspondientes a la configuración de usuarios, grupos y en el caso de redes que no utilicen DNS, el archivo de hosts. Pudiendo importar cualquier archivo de configuración común a todos los ordenadores de la red y que sufra modificaciones periódicas, evitando de esta forma tener que realizar manualmente esta tarea en cada ordenador de la red. Esto se realiza mediante el archivo: /etc/nsswitch,... Name Service Switch El orden correcto de los servicios dependerá del tipo de datos que cada uno de ellos ofrezca, así normalmente se consultará en primer lugar el archivo local y posteriormente el ofrecido por NIS. Como antes he comentado, una de las principales utilidades de NIS es mantener sincronizados en la red los archivos empleados para la administración de usuarios, de tal forma que podamos tener un control total sobre los usuarios que pueden acceder a los diferentes ordenadores de la red sin necesidad de editar manualmente cada uno de los hosts.

133 Capítulo 9. Servicios de red 115 No obstante, con activar este servicio en /etc/nsswitch.conf, no es suficiente, debemos asegurarnos de que el número o ID de los usuarios locales coinciden con el de los contenidos en el servidor. Una vez realizada esta comprobación podremos activar este servicio NIS añadiendo el siguiente código al archivo /etc/nsswitch.conf : passwd: nis files group: nis files El formato del archivo /etc/nsswitch.conf es el siguiente: nombre-archivo: nombre-servicio Donde nombre-archivo es el nombre del archivo que necesita referenciarse y nombre-servicio es el nombre del servicio que se utiliza para encontrar el archivo. Se pueden listar varios servicios, separados por espacios. Estos son los servicios válidos: Servicio files yp nis dns [NOTFOUND=return] nis+ Descripción Usa el archivo de la propia máquina Usa NIS para realizar la búsqueda Usa NIS para realizar la búsqueda (nis es un alias de yp) Usa DNS para realizar la búsqueda (se aplica sólo al archivo hosts) Detiene la búsqueda Usa NIS+ Prueba de configuración del cliente NIS Una vez hayamos configurado los archivos: /etc/yp.conf /etc/nsswitch.conf Y tengamos en funcionamiento el demonio de cliente ypbind, podemos usar el comando ypcat para volcar un archivo de nuestro servidor NIS en pantalla. Para ello, escribimos: #ypcat passwd Vuelca el archivo passwd (mapa del archivo) en pantalla (si es que lo estamos compartiendo por NIS). Si no vemos el archivo, necesitamos hacer una comprobación de las configuraciones del servidor y el cliente cliente, y probar de nuevo Herramientas básicas Para trabajar con NIS disponemos de algunas herramientas que extraen información de la base de datos mediante la línea de comandos: ypcat: Comentada en la sección anterior, vuelca los contenidos de un mapa NIS (archivo NIS). ypwhich: Devuelve el nombre del servidor NIS que responde a las peticiones. También es una buena herramienta de diagnóstico, si NIS parece no funcionar correctamente. ypmatch: Es muy parecido a ypcat. Sin embargo, en lugar de mostrar el mapa entero, le proporcionamos un valor clave y solo aparecerá la entrada correspondiente a esa clave. Esto es útil, por ejemplo, para el passwd: #ypmatch josan passwd

134 116 Servidor Linux para conexiones seguras de una LAN a Internet Problemas de seguridad NIS se considera seguro, desde el punto de vista del servidor, puesto que no modifica los mapas directamente y los archivos pueden ser leídos por todo el mundo. Desde el punto de vista del cliente, la seguridad es bastante pobre. Incluso en una red local, hay que saber que las contraseñas circulan sin encriptar sobre la red. Cualquier máquina puede escuchar los intercambios entre un cliente NIS y el servidor. Por defecto no se utiliza ningún algoritmo de cifrado en estas comunicaciones. Y como no utiliza autenticación a nivel de RPC, cualquier máquina de la red puede enviar una respuesta falsa, y pasar por el servidor de NIS. Para que el ataque tenga éxito, el paquete con la respuesta falsa debe llegar al cliente antes de que responda el servidor. También debe ser capaz de observar la petición y generar la respuesta, para ello es preciso que la máquina que lleva a cabo el ataque esté situada en el camino de comunicación entre servidor y cliente. Se puede crear fácilmente un mapa NIS para sustituir al del servidor. Un intruso podrá acceder al cliente NIS a través de los comandos de acceso remoto, cambiando en el mapa, la dirección de la máquina que lleva a cabo la intrusión, por otra máquina que se encuentre en el archivo /etc/hosts.allow. La solución de estos problemas de seguridad pasa por utilizar autenticación en el protocolo RPC. NIS+ trata de solucionar ese problema, mediante soporte para el cifrado. Elimina la mayor parte de problemas de seguridad que NIS planteaba, puesto que utiliza RPCs seguros, si se configuran de forma adecuada. En estos momentos NIS+ es bastante experimental e inestable, por eso me he centrado en NIS. En NIS también se han buscado algunas soluciones al problema de la seguridad. Solía tener un defecto grave, dejaba su archivo de contrasenãs legible por prácticamente cualquier persona en todo Internet, esto suponía un gran número de posibles intrusos. Si un intruso sabía nuestro dominio NIS y la dirección de nuestro servidor, simplemente tenía que enviar una consulta al mapa passwd y recibir al instante todas las contraseñas encriptadas del sistema. Con un programa rápido para crackear contraseñas, y un buen diccionario, averiguar unas cuantas contraseñas de usuario no tenía ningún problema. De todo esto trata la opción securenets. Simplemente restringe el acceso a su servidor NIS a ciertos nodos, basándose en la dirección IP. La última versión de ypserv implementa esta característica de dos formas. Utilizando un archivo de configuración especial: /etc/ypserv.securenets. Utilizando convenientemente los archivos /etc/hosts.allow y /etc/hosts.deny.

135 Capítulo 9. Servicios de red NFS: Sistema de archivos Linux en red NFS es un protocolo que data de los años 80. En esas fechas los problemas de seguridad eran menores. Todavía podían construirse protocolos basados en la confianza, tanto el servidor como el cliente, confiando en la información que intercambian. Internet convierte este principio en algo absurdo y este es sin duda uno de los mayores problemas de NFS. La segunda versión del protocolo es la primera versión publicada y sigue la siendo la más extendida en nuestros días. Existen implementaciones sobre varias plataformas diferentes y se han descrito pocos problemas de compatibilidad. La tercera versión del protocolo data de 1992 y presenta varias mejoras: Mejora del rendimiento debido a la reescritura del código de red y uso de paquetes de datos mayores. Mejora en la seguridad: Listas de ACL (Listas de control de acceso) que permiten definir acceso a los recursos por UID y archivo a archivo. Implementación de un sistema de autenticación basado en contraseña. Por desgracia, la tercera versión de NFS para Linux, esta todavía en pañales. NFS para GNU/Linux es intrínsecamente inseguro y peligroso si se administra mal. NFS es una interfaz entre el sistema de archivos físico y un sistema remoto. Cuando NFS recibe una petición vía red, opera las modificaciones sobre el sistema local. Dispone de todo lo que podemos esperar de un sistema de archivos tipo Unix: gestión de permisos, propiedades avanzadas, enlaces, tuberías con nombre... Pero como indica su nombre ha sido ideado para ser usado de forma transparente a través de la red. Desde el punto de vista del cliente, se trata de un sistema de archivos clásico, se monta con mount, y se integra en la jerarquía de archivos existente en la máquina. Todas las ordenes de entrada/salida son enviadas al servidor que se encarga de procesarlas, controlar acceso concurrente a archivos, etc Cliente NFS Montaje de las particiónes Para poner en servicio un cliente de NFS, hay que asegurarse de que el kernel de Linux que estamos usando tiene compilado el soporte para NFS. Para montar una partición hay que conocer algunos parámetros: El nombre del servidor. El nombre de la partición a la que se desea acceder. El nombre del directorio donde vamos a montar la partición NFS. La sintaxis del comando mount es la siguiente: #mount -t nfs maquina:particion_a_montar punto_de_montaje Se puede facilitar el montaje de una partición si la incluimos en el /etc/fstab para que se monte al iniciarse el sistema. Podríamos usar algunas opciones de montaje para dotar de mayor seguridad al sistema. La opción -o nosuid quita el bit SUID sobre los ejecutables montados por NFS. Esto puede resultar molesto si estamos montando /usr pero tiene sentido si estamos montando particiones de datos. La opción -o noexec es todavía más radical, ya que imposibilita la ejecución de programas desde la partición montada por NFS. Si tenemos usuarios que escriben scripts esta opción puede ser muy molesta.

136 118 Servidor Linux para conexiones seguras de una LAN a Internet Ejemplos de uso Los ejemplos de uso de una partición NFS son numerosos. Podemos imaginar, entre otros, una partición de lectura/escritura sobre /home. Así cada usuario puede trabajar sobre cualquier máquina de la red encontrando siempre sus archivos personales sin esfuerzo. Es frecuente que se exporten los buzones de correo de los usuarios. Esta es una mala idea, ya que la gestión de concurrencia de NFS no es muy fiable y exportar /var/spool/mail por ejemplo, puede producir pérdidas de mensajes. Podemos también compartir una partición que contenga ejecutables, como /usr/bin para ganar algo de espacio en disco sobre las máquinas locales. Llegando al extremo podríamos tener ordenadores sin disco duro trabajando directamente sobre particiones NFS. Las herramientas del cliente: showmount Estrictamente hablando solo es necesario el programa mount para hacer funcionar un cliente de NFS. Pero las utilidades de cliente son a menudo muy útiles. Showmount en este caso, nos permite ver la lista de particiones NFS montadas por otras máquinas dentro de la red Montaje automático de particiones NFS Utilizaremos a este proposito el /etc/fstab como para cualquier otro sistema de archivos. maquina:partition_distante punto_montaje nfs defaults 0 0 maquina:partition_distante punto_montaje nfs noauto,user 0 0 La primera opción permite montar la partición automáticamente en el arranque. La segunda opción permite que cualquier usuario monte la partición con mount, pero no en el arranque Propiedades de las particiones montadas Los derechos de propiedad (permisos de acceso) Cuando navegamos por una partición montada, podemos constatar una serie de cosas. Lo primero es que los propietarios de los archivos sobre el servidor y sobre la máquina local no concuerdan. Es que Linux no usa los nombres de usuario y grupos sino que utiliza los códigos de usuario y de grupo (UID, GID). Las equivalencias aparecen en /etc/passwd y /etc/groups respectivamente, estos archivos no son compartidos por NFS. Ahora imaginemos lo siguiente: el usuario Paco dispone de una cuenta en el servidor donde tiene asignado el UID 542 y allí tiene algunos archivos de su posesión. Su partición de trabajo es importada sobre otra máquina donde el UID 542 corresponde al usuario Pepe. Esto es un problema porque ahora Pepe puede acceder a los documentos de Paco, pero Paco no puede acceder ni a sus propios documentos. Se trata de uno de los inconvenientes ligado a NFS. Varias soluciones son posibles, siendo la más evidente el uso de servidores NIS para tener un control de usuarios uniforme. Los accesos concurrentes Las diferentes versiones del protocolo NFS dejan en manos del implementador la solución de los problemas derivados de la concurrencia. Uno de los problemas más habituales en una red lenta o subestimada es que las particiones pueden ser desmontadas de forma violenta cuando los tiempos de respuestas son excesivamente lentos. Esto implica problemas de perdida de datos.

137 Capítulo 9. Servicios de red Servidor de NFS Existen dos servidores NFS en Linux, uno funciona como un servidor tradicional y el otro integrado en el kernel. Este último es frecuentemente llamado knfsd, y ofrece mejores resultados en términos de rapidez pero le falta estabilidad. Para realizar la instalación haremos un apt: #apt-get install nfs-kernel-server nfs-user-server El archivo /etc/exports Contiene la lista de las máquinas y de los repertorios que deben ser exportados. Su sintaxis es: # /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(5). /directorio maquina1(option) maquina2(option)... /usr pepe(ro) (rw) La mayoría de implementaciones de NFS no autorizan la exportación de un subdirectorio de un directorio previamente exportado. El servidor de NFS del kernel si que permite esta opción y esto puede favorecer ciertas configuraciones. Entre las opciones más corrientes, podemos citar las opciones de seguridad que veremos más adelante y las opciones de montaje tales como rw o ro que permiten la exportación en modo lectura/escritura o solo lectura respectivamente. Por defecto los directorios son exportados en modo rw (lectura/escritura). Los nombres de las máquinas pueden ser nombres DNS, direcciones IP, clases de direcciones IP o dominios enteros. Si estamos utilizando NIS podemos también precisar el nombre del grupo de NIS. Modificar dinámicamente las particiones exportadas no es posible, el servidor NFS no actualiza los cambios realizados en el archivo /etc/exports. Estos cambios hay que activarlos usando el comando exportfs: #exportfs -r,... vuelve a cargar la configuración de /etc/exports Este comando permite sincronizar la lista de montajes posibles, conservada en /var/lib/nfs/xtab y basada en el archivo /etc/exports. Para anular la exportación de directorios (prohibición de montaje): #exportfs -u <directorio> Este comando nos permite interrumpir momentáneamente la exportación de uno o varios directorios. Este comando no modifica el contenido de /etc/exports y la modificación no es definitiva. Permite prohibir todo nivel de montaje, pero los montajes existentes no son desactivados. Restricción de los permisos de los clientes Cuando el administrador de una máquina monta una partición NFS, dispone de permisos de acceso de escritura, como sobre cualquier otra partición del disco local. Si la red es administrada por varios usuarios root, en máquinas distintas se sugiere el uso de la opción: root squash en el archivo de /etc/exports. Esta opción elimina los privilegios de root sobre la partición montada, lo que asegura la integridad de la misma. En el marco de una exportación de /home impediría que el usuario root de una máquina cualquiera accediera a los directorios personales de todos los miembros de la red NFS. Se puede usar también la opción all squash que otorga a todos los usuarios los privilegios de nobody (usuario anónimo).

138 120 Servidor Linux para conexiones seguras de una LAN a Internet El problema del UID El problema de propiedad de los archivos es particularmente sensible cuando tratamos con particiones de usuarios. Es posible esquivar el problema usando la opción all squash en el montaje. En primer lugar no montamos directamente /home en el conjunto de máquinas cliente, sino que el servidor debe exportarlas una a una sobre cada cliente. Hecho esto, usamos la opción all squash para que todas las modificaciones remotas sean consideradas como realizadas por el usuario nobody. Las opciones anonuid=uid y anongid=gid nos permiten reemplazar nobody por el UID y el GID del usuario en cuestión, para que tenga acceso a su directorio personal. Allí podrá usar los archivos de los que él es dueño sin ningún problema. La autenticación por máquina funciona relativamente bien si los recursos personales son montados desde clientes Windows donde solo hay un usuario. Esto, sin embargo, es problemático en entornos multiusuario (como los entornos NT). Las herramientas del servidor : mountd y nfsd Si estamos usando el NFS incluido en el kernel, el trabajo lo lleva a cabo directamente el modulo nfsd.o de Linux. El programa rpc.nfsd solo sirve para comunicar el portmapper con el kernel. El programa rpc.mountd es el programa responsable de la seguridad de los montajes con NFS. Cuando una máquina cliente solicita la exportación de una partición, mountd verifica si dicha máquina cliente está autorizada Configuración gráfica de NFS, interfaz Webmin Para facilitarnos la tarea de la configuración de archivos, en Debian, disponemos de la herramienta web: Webmin. Esta herramienta nos permitirá una configuración y administración de forma simple y sencilla. Para instalar el módulo NFS de Webmin realizaremos un apt: #apt-get install webmin-exports Figura 9.11: Módulo Webmin para NFS

139 Capítulo 9. Servicios de red Samba: Servicio de conexiones para sistemas Microsoft En esta sección configuraremos el servidor Samba, mostrando sus funcionalidades más habituales. Basado en los articulos sobre Samba publicados en Compartición de recursos El servicio de FTP permite intercambiar archivos en red. Pero presenta serios problemas de integración. Es decir no es transparente al usuario, su uso cambia según trabajemos con los entornos Linux o Windows. NFS, solución limitada a máquinas Linux Entre máquinas Linux, es posible usar el protocolo NFS para compartir archivos. Se trata de una buena solución puesto que permite conservar todas las funcionalidades del sistema de archivos Linux. Pero tiene una serie de inconvenientes: NFS presenta problemas de seguridad No existe una buena implementación libre de NFS para equipos Windows Protocolo CIFS, una posible solución En lugar de usar una solución costosa, en los equipos Windows, es más económico (y lleva menos trabajo) utilizar el protocolo empleado nativamente por las máquinas Windows. El protocolo CIFS (Common Internet FileSystem), tiene implementaciones sobre un gran número de plataformas. Existiendo una implementación libre, llamada SaMBa, que permite utilizarlo sobre servidores Unix/Linux Qué es Samba? Samba es una implementación bajo Unix/Linux de los protocolos CIFS y NetBIOS (antiguamente llamado SMB, de allí el nombre de Samba) Este protocolo permite compartir varios recursos diferentes: El acceso a los directorios compartidos. El acceso a las impresoras compartidas. El paquete Samba incluye utilidades para controlar el acceso de los archivos con la misma soltura que un WindowsNT. Además Samba puede colaborar con un servidor NT existente, o reemplazarlo del todo. Veremos más adelante como configurarlo en detalle, pero es posible: Proteger con una contraseña el acceso a un directorio compartido. Proteger con una contraseña personificada para cada usuario, y dotar de permisos de acceso individualizados. Las herramientas necesarias Los paquetes relacionados con Samba son los siguientes: samba-common: Contiene los elementos que van a permitir el buen funcionamiento de los otros paquetes: Herramientas de conversión de tablas de caracteres Windows. Archivos de configuración. Documentación básica de Samba.

140 122 Servidor Linux para conexiones seguras de una LAN a Internet samba: Contiene todos los programas del servidor, es decir: Aplicaciones que permiten hacer accesible los recursos a los usuarios. Herramientas de configuración. Documentación esencial de Samba. smbclient: Contiene los programas clientes, que permiten acceder a los recursos compartidos. smbfs: Configura el sistema de archivos Samba. samba-doc: Contiene toda la documentación necesaria para configurar en detalle todos las funciones del servidor Samba. swat: Es una aplicación web que permite configurar el servidor Samba fácilmente. Pero para ello nos hará falta: Apache y varios paquetes de dependencias. Estos paquetes se pueden instalar fácilmente con apt: #apt-get install samba samba-doc smbclient smbfs swat Los demonios de Samba Dos demonios se encargan de ofrecer los servicios del conjunto de aplicaciones Samba. El demonio smbd es el demonio que se encarga de la compartición de recursos, pero también del control del acceso a los mismos. Gestiona los permisos de los diferentes clientes una vez que estos han sido identificados. El demonio nmbd se ocupa de publicitar los servicios. Es decir, se encarga de informar a las máquinas presentes en la red sobre cuales son los recursos disponibles. Este demonio maneja también la resolución de nombres de NetBIOS. Para ello, puede comunicarse con un servidor WINS (Windows Internet Naming Service) que se encuentre presente en la red. Existen dos formas para realizar la configuración: Editar directamente los archivos de configuración con un editor de texto. Manejar una herramienta gráfica que generará el mismo resultado. Aquí veremos, el manejo de Swat (Samba Web Administratión Tool), que se trata de una interfaz que se comporta como un servidor Web, conectándose a la máquina por medio de un simple navegador. Es posible leer la documentación, cambiar la configuración y realizar el resto de tareas administrativas después de habernos validado con un usuario y una contraseña. El servidor Swat, por defecto, se ejecuta en el puerto Herramientas del cliente Las herramientas para el cliente bajo Microsoft Windows son aquellas utilizadas habitualmente para trabajar con servidores NT. No hay que cambiar nada en este sentido, el funcionamiento para las máquinas Windows es totalmente transparente. En Linux, contamos con el paquete smbclient para conectarse con los servicios CIFS, sean proporcionados por un servidor Windows o por un servidor Linux que ejecute Samba.

141 Capítulo 9. Servicios de red Configuración gráfica de Samba, interfaz SWAT La herramienta SWAT es el ejemplo de una buena interfaz de administración gráfica. Intenta de forma relativamente transparente proporcionar todas las funcionalidades de la configuración en modo texto. Como la configuración de Samba es sencilla, ha sido posible agrupar todas las posibilidades en un número reducido de opciones, sin sobrecargar la interfaz. Ofrece la posibilidad de generar un archivo /etc/samba/smb.conf de muestra, con el que podremos estudiar la sintaxis del script por si tuviéramos que editarlo a mano en alguna ocasión. Si no lo realiza la instalación en el sistema, para poder ejecutar SWAT hay que modificar el archivo /etc/inetd.conf. Y añadir la siguiente línea: swat stream tcp nowait.400 root /usr/sbin/swat swat Figura 9.12: Interfaz gráfica Swat para Samba Presentación de los archivos en modo texto /etc/smbpasswd: Contiene los passwords de los usuarios de Samba, de forma cifrada. /etc/lmhosts: Es un interfaz entre los nombres de máquinas NetBIOS y las direcciones IP numéricas. Su formato es parecido al de /etc/hosts. /etc/smbusers: Contiene una lista de usuarios del sistema, seguida de una lista de los usuarios Samba que les corresponden. De esta forma es posible crear varios usuarios Samba sin tener que crear para cada uno de ellos un usuario del sistema.

142 124 Servidor Linux para conexiones seguras de una LAN a Internet Los menús de SWAT Paso a detallar cada una de las secciones del archivo /etc/samba/smb.conf. Este archivo es parecido a los archivos.ini, habituales del entorno Windows. HOME: Permite acceder a la versión html de la documentación Samba. Faltan tal vez algunas opciones, en particular la ayuda sobre el propio SWAT deja bastante que desear. Se trata a menudo de una ayuda relativa a las opciones de los archivos en modo texto, más configurables que la herramienta gráfica. De un modo u otro toda esta documentación es en el fondo muy descriptiva. GLOBALS: Contiene variables generales que se aplican al total de los recursos puestos a disposición del servidor Samba. Esta sección contiene también información de identificación del servidor dentro de la red NetBIOS: grupo de trabajo, nombre e identificador. Así mismo, aquí podemos establecer los modos de funcionamiento de Samba. SHARES: Contiene la lista de comparticiones de disco efectuadas por la máquina. Es aconsejable primero crear la partición compartida (o los directorios) y después precisar para cada partición sus propiedades particulares. PRINTERS: Es casi idéntico al anterior, pero permite compartir impresoras en lugar de particiones de disco o directorios. WIZARD: Permite configurar de una forma rápida los archivos de configuración, establecer el modo de funcionamiento del servidor y el servidor WINS de la red. Desdeaquí, también podemos cambiar la configuración para compartir los directorios /home por Samba. STATUS: Muestra el estado actual del servidor, el estado de los demonios Samba, las conexiones activas, los archivos compartidos y los archivos abiertos actualmente. VIEW : Nos permite ver el archivo smb.conf tal cual ha sido redactado por SWAT. Es posible ver también la totalidad de las opciones posibles, incluso las que SWAT no ha cambiado, pero que tienen un valor por defecto. PASSWORD: Permite al usuario cambiar su contraseña. Se trata de un interfaz grafico para el programa smbpasswd. Sirve también al administrador para añadir nuevos usuarios Funcionamiento de CIFS Sobre una misma red, varias máquinas pueden poner recursos a disposición de otras. CIFS dispone de un sistema para anunciar servicios (browsing), que permite saber que recursos compartidos hay disponibles. Cada máquina que desea anunciar sus recursos compartidos a las otras máquinas contacta con una máquina en particular, el Servidor de Anuncios (Master Browser) que se encarga de centralizar estas notificaciones de presencia. Es posible configurar el servidor Samba para que sea el mismo Servidor de Anuncios o dejar esta tarea a una máquina Windows. El acceso a los recursos puede controlarse de dos formas: Escondiendo el recurso, es decir, no anunciándolo a ciertas máquinas de la red. Estableciendo un sistema de validación para restringir el acceso, basado en contraseña. El anuncio de servicios esta limitado al grupo de trabajo. Cada máquina Windows puede ser miembro de un solo grupo, y por tanto, solo puede pertener a un conjunto de máquinas que compartan los mismos recursos. Es posible de este modo separar conjuntos de recursos compartidos, creando distintos grupos de trabajo. Si lo que deseamos es tener máquinas accediendo a los recursos de varios grupos distintos, es necesario pasar por un sistema de autenticación.

143 Capítulo 9. Servicios de red 125 Existen varias formas de autenticación, cada una con sus ventajas e inconvenientes: La autenticación por usuario y contraseña: Se trata del método por defecto. Representa la ventaja de permitir una gestión fina de los permisos. Para cada usuario es posible definir el acceso o no a unos recursos. Este método presenta un inconveniente: cada usuario debe disponer de una cuenta en la máquina Unix, para permitir la autenticación. El control de acceso por comparticiones: Se trata de un método más global: cada recurso compartido es protegido por un password propio. Para ello es necesario que varios usuarios conozcan el mismo password y que recuerden la contraseña adecuada para cada recurso compartido al que accedan. Este método presenta la ventaja de que no son necesarias tantas cuentas de usuario como usuarios haya, sino tantas como recursos se compartan. Autenticación contra otro servidor: Existen también dos métodos indirectos de control de acceso. El método server: Consiste en consultar con otro servidor CIFS, que se encargara de la autenticación. El método domain: Consiste en validarse contra el servidor de dominio NT Parámetros globales Es necesario elegir algunos parámetros de funcionamiento del servidor y para identificarlo y conseguir que se integre en la red. El campo server string: Permite elegir la descripción que acompaña al nombre del servidor en la lista de recursos anunciados. El campo netbios name: Permite definir el nombre de la máquina, no como un nombre de DNS, sino como un nombre de resolución de nombres propio del protocolo NetBIOS. Es importante entender que son dos cosas totalmente diferentes. El campo workgroup: Permite elegir el grupo de trabajo del servidor Samba. El campo interfaces: Permite identificar la o las tarjetas de red que enlazan el servidor con el grupo de trabajo. También disponemos de una serie de parámetros referidos al control de acceso: El campo security: Permite elegir el método de autenticación, podemos elegir uno de los vistos anteriormente. Los menús hosts allow y host deny permiten controlar el acceso a los recursos de ciertas máquinas. Las configuraciones hechas en esta sección se aplican a la totalidad de los recursos compartidos, independientemente de la configuración especifica. Las configuraciones realizadas por Swat se reflejan en el archivo de configuración /etc/smb.conf. Si editamos dicho archivo podremos ver algo de este estilo: [global] workgroup = nombre_del_grupo server string = Servidor Samba security = SHARE log file = /var/log/samba/log.%m max log size = 50

144 126 Servidor Linux para conexiones seguras de una LAN a Internet Impresoras Samba permite compartir fácilmente una impresora conectada físicamente a una máquina Linux, haciendo asi accesible a todas las máquinas conectadas a la red. Una impresora de red que no soporte mecanismos de autenticación puede ser puesta a disposición de los usuarios gracias a un servidor de impresión de Samba, lo que permite controlar el acceso. Esta operación de elegir impresora, se realiza dentro del menu PRINTERS. Este presenta una lista de impresoras existentes. Seleccionando una en la lista desplegable y usando el comando Choose Printer (elegir impresora) accederemos a su configuración. Por defecto Samba extrae la lista de impresoras disponibles de /etc/printcap. Si la máquina dispone de otras impresoras, es posible añadirlas, introduciendo su nombre en el campo Create Printer y confirmando la acción. El camino de acceso (PATH), en una impresora se trata de del camino hacia el directorio utilizado por Samba para conservar la cola de impresión. En general se adopta /var/spool/samba. Autorizar el acceso guest, es permitir a cualquier usuario de una máquina miembro del grupo de trabajo, usar la impresora. Hay que tener mucho cuidado con esto, la integración en un grupo de trabajo no es un método fiable de validación. Cualquier usuario de una máquina Windows puede cambiar su grupo de trabajo tantas veces como desee sin que ningún mecanismo de autenticación se lo impida. De este modo podría introducirse en un grupo con permisos de impresión un usuario al que en principio habíamos dejado fuera. Puede ser necesario usar restricciones por nombre de máquina (archivos host allow y host deny) para una mayor seguridad. El menú browseable indica que este recurso debe ser anunciado por nmbd, y por tanto ser visible para todos los usuarios Compartición de directorios Algunas opciones son idénticas a la compartición de impresoras. Las opciones que permiten limitar el acceso a ciertas máquinas, elegir el camino de acceso al recurso (en este caso, directorio a compartir), y la autorización de un usuario invitado son identicas a las que hemos encontrado en la sección PRINTERS. En el caso de la compartición de espacio en disco es posible tener un mejor control sobre el acceso. Activando la opción read only, autorizar solamente el acceso en modo lectura o definir sobre un mismo directorio varios tipos de permisos. Por ejemplo, se podría ofrecer acceso de solo lectura a la totalidad del grupo y luego afinar un acceso de escritura a ciertos usuarios en concreto. Si la seguridad esta en modo compartido (share), todos los usuarios disponen, previa autenticación, de los derechos correspondientes al directorio que es compartido. El sistema usa un método heuristico para determinar el identificador de un usuario que se conecta, pero este método es facilmente manipulable. Así que más vale usar la autenticación en modo usuario. Este modo permite por ejemplo, compartir las carpetas personales del usuario sin riesgo alguno. Por defecto, Samba no utiliza contraseñas cifradas. Esta elección le permite interoperar con clientes de Windows 3.x y Windows95. Por culpa de esta compatibilidad perdemos seguridad y es necesario tocar el registro del sistema de Windows en máquinas Win98 y posteriores para que todo funcione. Si en la red no hay máquinas windows95 o anteriores, es muy recomendable configurar el servidor de Samba para que use contraseñas cifradas. Esto se hace, añadiendo al archivo smb.conf la siguiente línea: encrypt passwords = Yes,... dentro de [global] Estas contraseñas son almacenadas dentro del archivo /etc/smbpasswd. Las máquinas clientes contactan con el servidor y reciben una clave codificada usando la contraseña cifrada. El resultado es reenviado al servidor, que hace la misma operación. Si los dos resultados son idénticos la autenticación es correcta. Esto impide a un usuario malicioso hacerse con los passwords que atraviesan la red camino al servidor en busca de la autenticación.

145 Capítulo 9. Servicios de red Limitar acceso de los usuarios Para cada recurso es posible restringir el acceso a ciertos usuarios. Esto se realiza en en /etc/smb.conf, para cada una de las líneas de recursos compartidos que deseamos limitar, podemos añadir la línea: valid users = usuario1, usuario2 En ausencia de valid, el recurso es accesible por todos los usuarios del servidor Samba. Si esta línea esta presente el acceso esta reservado únicamente a los usuarios mencionados. La opción read only, permite impedir a los usuarios que escriban en el directorio compartido. Pudiendo también limitar el acceso a unos usuarios concretos. Para ello tenemos dos posibilidades: Autorizar el acceso de escritura y bloquear ciertos usuarios con derecho de solo lectura, colocando su nombre en la sección read list= del recurso compartido. Autorizar el acceso en solo lectura y dar el privilegio de escritura a ciertos usuarios gracias a la sección write list= del recurso compartido Integración de Samba en un dominio NT Los dominios NT son variantes de los grupos de trabajo. Igual que los grupos, permiten anunciar los recursos a diferentes clientes. La principal diferencia se encuentra a nivel de autenticación. Todos los miembros de un dominio utilizan la misma base de datos de usuarios y contraseñas. Cuando un cliente miembro de un dominio intenta acceder a un recurso, envía una petición a todas las máquinas de la red, y se autentica contra la primera que responde. En una red NT, la tarea de responder se lleva a cabo la máquina mas activa que tenga acceso a la base de datos de usuarios. Se trata del Primary Domain Controller (PCD), el controlador del dominio principal. En su ausencia, los servidores secundarios o BCDs pueden tomar el relevo. Una vez la máquina cliente se ha autenticado con un controlador del dominio, el cliente no tiene porque volver a validarse dentro del dominio aunque decida acceder a otro recurso compartido diferente del inicial. El controlador del dominio memoriza las autenticaciones satisfactorias. Es posible configurar un servidor Samba para que se integre dentro de un dominio NT, para ello hay que seguir el siguiente método: Lo primero consiste en declarar Samba como un miembro del grupo de trabajo del servidor NT. Seleccionando en el Swat Security=SERVER, le estamos pidiendo al servidor de Samba que contacte con un servidor NT. El servidor NT, se encuentra indicado en la sección password server = nombre del servidor) para la autenticación. Evidentemente el servidor NT debe estar configurado para responder a las peticiones de autenticación del servidor de Samba. Después hay que crear una cuenta para el servidor: #smbpasswd -j nombre_del_dominio Por último, hay que asegurarse de que cada usuario, que el servidor NT va a autenticar, tiene una cuenta en la máquina NT consiguiendo con esto que los permisos funcionen.

146 128 Servidor Linux para conexiones seguras de una LAN a Internet Configuración de Samba como controlador de dominio Samba es capaz de comportarse como un PDC (Controlador de Dominio Primario). Para configurarlo, hay que realizar varias etapas: 1. Autorizar las peticiones de autenticación de otras máquinas. 2. Configurar la autenticación usuario por usuario. 3. Declararse Master Browser, es decir invertir el mecanismo de elección habitual en las máquinas NT para llevarlas a nuestra máquina Samba. En el archivo /etc/samba/smb.conf, la sección [GLOBAL] debe contener los siguientes elementos: domain logons = yes security = user os level = 34 local master = yes preferred master = yes domain master = yes Si queremos compartir permitiendo la autenticación de usuarios, creamos una compartición ficticia, siguiendo este patron: [netlogon] path = /export/samba/logon public = no writeable = no browsable = no Esta compartición no ofrece el acceso a ningún recurso, sin embargo permite la autenticación de las diferentes máquinas. Autorizar la conexión de las máquinas NT Las máquinas NT intentan conectarse directamente al servidor y no a un recurso en concreto. Es por tanto preciso autorizarlas para ello. Necesitamos que las máquinas (y no los usuarios) dispongan de una cuenta, como no van a conectarse al shell, no es necesario darles un usuario normal, con su directorio. El identificador de una máquina es su nombre NetBIOS, seguido del carácter $. Así por ejemplo la máquina iceberg, tendrá como identificador iceberg$. Hecho lo cual hay que añadir esta cuenta de usuario a la base de datos de los usuarios de Samba, con el comando: #smbpasswd -a -m maquina Cliente Samba Acceder a los recursos compartidos: smbclient Este comando permite acceder, desde un cliente Linux, a los recursos disponibles a través de servidores CIFS, bien se trate de un servidor Samba o de un servidor basado en Windows. La interfaz es parecida a la del ftp, es de este modo posible transferir archivos sin esfuerzo. La sintaxis es: #smbclient //maquina/recurso

147 Capítulo 9. Servicios de red 129 El recurso puede ser: Un directorio. Una impresora. Un disco compartido. El nombre de la máquina es su nombre de NetBIOS, que puede (y suele) ser diferente de su nombre de DNS. La opción -R permite elegir el modo de resolución del nombre de la máquina: -R lmhosts: Permite consultar el archivo /etc/lmhosts, que resuelve nombres de IP contra los nombres de NetBIOS de la máquina. -R wins: Permite lanzar la consulta a un servidor WINS para obtener dicha conversión. Una vez conectado al servicio en cuestión, disponemos de una interfaz de transferencia de archivos idéntica a la del FTP. También podemos acceder a algunas opciones extra, tales como print archivo, para imprimir un archivo local en el servidor. Integrar un recursos compartido en nuestros directorios: smbmount y smbumount El comando smbmount nos permitirá movernos de una manera más cómoda por los recursos compartidos mediante CIFS, se comporta de una forma similar a los montajes mediante NFS. El recurso compartido CIFS se monta en un punto de nuestra jerarquía de directorios y podemos movernos por el usando los comandos Unix habituales. Smbclient se encarga de gestionar las interacciones entre los archivos presentes en el servidor. Para desmontar un recurso compartido usamos el comando smbumount. Guardar datos de un recurso compartido: smbtar El comando smbtar es muy similar al comando tar. Permite realizar copias de seguridad de los archivos del servidor desde la máquina cliente Samba. La sintaxis es la siguiente: #smbtar -s servidor -x recurso -t lugar_de_almacenamiento Es necesario disponer de permisos de lectura del directorio que deseamos almacenar. Es también posible crear copias incrementales con la opción -N fecha, que no almacena nada más que los archivos que han sido modificados a partir de la fecha especificada Configuración gráfica de Samba, interfaz Webmin Para facilitarnos la tarea de la configuración de archivos en Debian, también disponemos de otra herramienta web, esta vez para el entorno Webmin. Esta herramienta nos permitirá una configuración y administración de forma simple y sencilla. Para instalar el módulo Samba de Webmin realizaremos un apt: #apt-get install webmin-samba En la figura 9.13 se puede observar una serie de pantallas de la interfaz.

148 130 Servidor Linux para conexiones seguras de una LAN a Internet Figura 9.13: Módulo Webmin para Samba

149 Capítulo 9. Servicios de red ProFTPD: Servidor FTP El protocolo de transferencia de archivos (FTP, File Transfer Protocol) es empleado en redes IP, como es el caso de Internet, para la transmisión de archivos. Uno de los mejores servidores FTP que podemos encontrar en Linux es ProFTPD. Este servidor soporta la creación de hosts virtuales permitiéndonos disponer, de esta forma, de más de un servidor FTP en una sola máquina. Se diseño como un servidor FTP especialmente orientado a sistemas de tipo Unix, tomando muchas de las ideas y conceptos propios de Apache, como la modularidad. Para instalarlo desde nuestro sistema Debian realizaremos un apt: #apt-get install proftpd La instalación da la opción de colocarlo en el inetd o utilizarlo como un servicio independiente. Una vez instalado en el servidor necesitaremos editar el archivo /etc/inetd.conf o /etc/xinted.conf. Si utilizamos inetd.conf editamos el archivo y añadimos # (comentario) al principio de la línea: ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a y, a cambio, agregamos la siguiente: ftp stream tcp nowait root /usr/sbin/proftpd proftpd Ahora que ya hemos instalado el servidor tendremos que modificar los archivos de configuración Servidor ProFTP La configuración se encuentra almacenada en el archivo: /etc/proftpd.conf. Será necesario editar este archivo y al menos, realizar los siguente cambios: 1. En ServerName, colocamos el nombre de nuestro servidor. 2. En ServerType, colocamos el tipo de servidor (standalone o inetd) en función de lo que hayamos especificado al instalar. 3. Colocamos, después de ServerType, la línea ServerIdent off. De esta forma el servidor no mostrará su versión cuando se establece una conexión. 4. Especificamos el User y el Group, si colocamos nobody nadie podrá acceder al servidor. Si queremos colocar un usuario anónimo, se suele utilizar: user:ftp y group:nogruop. 5. Cambiamos MaxClients por el número máximo de conexiones simultaneas que deseamos permitir. Este valor lo tendremos que determinar en función del número de usuarios del servidor, el ancho de banda disponible y los recursos de la máquina. Podemos especificar múltiples opciones más, que se detallan en el archivo mediante comentarios, o podemos instalar el paquete de documentación y consultarlo allí: #apt-get install proftpd-doc El archivo de configuración /etc/ftpusers contendrá los nombres de los usuarios, a los que se les permitirá el uso del servicio FTP.

150 132 Servidor Linux para conexiones seguras de una LAN a Internet Configuración gráfica de ProFTP, interfaz Webmin Estas misma tareas administrativas se pueden realizar cómodamente con la herramienta web: Webmin. Para instalar el módulo de ProFTPD para webmin: #apt-get install webmin-proftpd Figura 9.14: Módulo Webmin para ProFTPD Desde la ventana de ProFTP accederemos a las opciones de configuración global del servidor y de los diferentes servidores virtuales que tengamos definidos. Algunos de los parámetros más importantes a ajustar son el control de acceso y la autenticación. Cuando configuramos un servidor virtual podemos volver a ajustar algunos de los parámetros establecidos en las opciones globales, como por ejemplo las opciones de autenticación de los usuarios y grupos en el caso de que tengamos que establecer una configuración de seguridad diferente en cada servidor virtual. Desde las opciones de configuración del servidor virtual también podremos establecer el directorio utilizado para guardar los archivos a disposición de los usuarios que se conecten a nuestro servidor de forma anónima Clientes FTP En Internet es posible encontrar diversas aplicaciones que nos permiten trabajar con servidores FTP de una forma fácil y rápida. Desde nuestro entorno Debian se ponen a nuestra disposición: gftp (GNU FTP). Para instalarlo: #apt-get install gftp,... para ejecutarlo: #gftp Es un cliente FTP, muy intuitivo y con entorno gráfico.

151 Capítulo 10 Servicios de usuario Cuotas de usuario Las cuotas permiten especificar límites en dos aspectos del almacenamiento en disco: El numero de inodos que puede poseer un usuario o un grupo El numero de bloques de disco que puede ocupar un usuario o un grupo. La idea que se esconde detrás de las cuotas es que se obliga a los usuarios a mantenerse debajo de su limite de consumo de disco, quitándoles su habilidad de consumir espacio ilimitado en un sistema. Las cuotas se manejan en base al usuario o grupo y al sistema de archivos. Si el usuario espera crear archivos en más de un sistema de archivos, las cuotas deben activarse en cada sistema de archivos por separado. Primero deberemos de asegurarnos que la opción quota está activada dentro de nuestro kernel (opción CONFIG QUOTA=yes). Para habilitar las cuotas, tanto para nuestros usuarios Linux, como los usuarios Windows (Samba) necesitaremos instalar el programa: quote, para el manejo de cuotas. Para ello realizaremos el siguiente apt: #apt-get install quota Arrancar el sistema de cuotas Tenemos que que cambiar nuestro /etc/fstab para indicarle que vamos a utilizar quotas, tenemos que insertar líneas como las siguientes, ajustandolas al perfil de nuesto sistema: /dev/hda6 /usr ext2 defaults,grpquota 1 1 /dev/hda10 /home ext3 defaults,usrquota 1 1 /dev/hda7 /tmp ext2 defaults,usrquota,grpquota 0 2 El parámetro grpquota, habilita las cuotas de grupo en la partición que corresponde a /usr. El parámetro usrquota, habilita las cuotas de usuario en la partición que corresponde a /home. En una misma partición pueden haber cuotas de usuario y grupo, colocando los dos parámetros (en el ejemplo /tmp). Ahora debemos de crear los siguientes archivos, para manejar las cuotas de la partición /home: #touch /home/quota.group #touch /home/quota.user Ambos archivos de registro, deben pertenecer a root y sólo el tendrá permisos de lectura y escritura:

152 134 Servidor Linux para conexiones seguras de una LAN a Internet #chmod 600 /home/quota.user #chmod 600 /home/quota.group Los comandos que se muestran a continuación nos permiten interactuar con el servicio de cuotas: Comando #repquota -a #quotacheck -avug #edquota -g <cuota> #quotaon -vaug #quotaoff -vaug Descripción Produce un resumen de la información de cuota de un sistema de archivos. Para realizar el mantenimiento de las cuotas. Se utiliza para explorar el uso de disco en un sistema de archivos, y actualizar los archivos de registro de cuotas quota.user y quota.gruop, al estado mas reciente. Se recomienda ejecutar quotacheck periódicamente al arrancar el sistema o mediante el anacron cada cierto tiempo (por ejemplo cada semana). Edita la cuota de el grupo. Activa las cuotas. Desactiva las cuotas. Para arrancar el sistema de cuotas deberemos de colocar el servicio en uno de los archivos rc#.d (runlevels, para más información véase el apéndice D). Es preciso arrancar las cuotas siempre después de que los sistemas de archivos incluidos en /etc/fstab hallan sido montados, en caso contrario las cuotas no funcionarán. Para obtener más información podemos consultar el manual: $man quota $man -k quota Asignar cuotas a los usuarios Esta operación se realiza con el comando edquota. Es recomendable ejecutar quotacheck -avug para obtener el uso de los sistemas de archivos lo más actualizado posible antes de editar cuotas. Si ejecutamos el siguiente comando: #edquota -u <user> Se editarán todos los dispositivos que permitan tener cuotas de usuario, especificado en /etc/fstab. Permitiendo modificar las cuotas del user. Los mismo ocurre en los grupos, si ejecutamos el comando: #edquota -g <grupo> Se editarán todos los dispositivos que permitan tener cuotas de grupo, especificado en /etc/fstab. Permitiendo modificar las cuotas del grupo Configuración gráfica de Quote, interfaz Webmin Para facilitarnos la tarea de administración de cuotas, podemos utilizar el módulo Webmin para cuotas. Para instalarlo, realizaremos un sencillo apt: #apt-get install webmin-quota Desde allí podremos realizar, de forma gráfica, los mismos pasos que desde la línea de comandos.

153 Capítulo 10. Servicios de usuario 135 Figura 10.1: Gestión de cuotas de disco, en este caso /tmp

154 136 Servidor Linux para conexiones seguras de una LAN a Internet Cups: Servidor de impresión Como servidor de impresión utilizaré Cups frente a LPD, este último es un sistema bastante engorroso en algunas configuraciones. Como ventajas de Cups respecto a LPD, podemos citar las siguientes: Es más sencillo hacer funcionar impresoras extrañas, es decir que están poco difundidas. Cada usuario puede tener su propia configuración y no es necesario instalar varias impresoras cuando cambiamos los parámetros de una impresora (econofast, presentaciones, color, 600x600,... ). Usa SLP e IPP para descubrimiento/publicación del servicio e impresión, respectivamente. Esto quiere decir que en una red debidamente configurada se puede encontrar las impresoras de todo el mundo que las tiene compartidas, sin problemas. Dispone de una interfaz de configuración por web. Pero no todo son alegrías, también existen una serie de desventajas respecto a lpd: LPD es bastante más sencillo de hacer funcionar, para una máquina aislada con la impresora en local. Si no necesitamos soporte a usuarios Microsoft igual nos estamos complicando la vida con Cups Servidor Cups Para instalar el servidor de impresión y que se pueda compartir por Samba, necesitaremos instalar varios paquete mediante el siguiente apt: #apt-get install cupsys cupsomatic-ppd cupsys-driver-gimpprint samba samba-common Debemos de asegurarnos de tener soporte en el kernel, para puerto paralelo o en mi caso para usb (necesitaremos hotplug). Si lo tenemos activado pero en el kernel lo dejamos como módulo, lo podremos cargar con la herramienta: #modconf, en caso contrario, no tendremos más remedio que recompilar el kernel, con las opciones adecuadas a nuestro sistema de impresión. Configuración del servidor Una vez tengamos instalados los archivos en el sistema vamos a configurar el servicio Cups. Para ello editaremos el archivo: /etc/cups/cupsd.conf Aquí estableceremos el acceso a la interfaz web, que nos permitirá realizar la configuración de una forma mucho más visual y agradable. Para conseguirlo modificaremos las siguientes opciones: ServerName host.dominio.com ServerAdmin HostNameLookups On <Location /> Order Deny,Allow Deny From All Allow From * </Location>

155 Capítulo 10. Servicios de usuario 137 <Location /admin> AuthType Basic AuthClass System Order Deny,Allow Deny From All Allow From * </Location> En la opción de Allow From pondremos la IP, o rango de IP desde las cuales accederemos al servidor Cups. En el ejemplo, se deniega el acceso a todo el mundo y despues se permite a las direcciónes del rango * Como se detalla en los comentarios del archivo, podemos especificar los host y los rangos de IPs, de diversas formas: # All # None # *.domain.com #.domain.com # host.domain.com # nnn.* # nnn.nnn.* # nnn.nnn.nnn.* # nnn.nnn.nnn.nnn # nnn.nnn.nnn.nnn/mm # nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm Cuando hayamos terminado con la configuración, reiniciaremos el servidor Cups: #/etc/init.d/cupsys restart Configuración gráfica vía web Una vez hemos configurado los accesos, probaremos a conectarnos al servicio de administración vía web. Para ello, nos conectaremos al host donde se encuentre el servidor, accediendo por el puerto 631 : si nos encontramos en local. Utilizaremos el navegador que más nos guste y el método de acceso que resulte más adecuado a nuestro sistema. En la figura 10.2 podemos observar la pantalla de presentación. Figura 10.2: Interfaz gráfica de configuración para Cups

156 138 Servidor Linux para conexiones seguras de una LAN a Internet Una vez situados en la web, para configurar la impresora debemos de seguir los siguientes pasos: Seguidamente iremos al menú de Administración y nos autenticaremos como usuario root. Ahora hacemos clic en Añadir impresora. En este menú estableceremos un nombre a la impresora y estableceremos el tipo de conexión. Después sólo queda elegir el fabricante y el modelo adecuados.

157 Capítulo 10. Servicios de usuario 139 Una vez realizado esto tendremos la impresora configurada, desde el menú impresoras podemos imprimir una página de prueba y comprobar que la configuración es correcta. Figura 10.3: Impresora HP815 configurada para usar Cups Servidor Cups para Samba Para configurar Cups rn Samba editaremos el archivo /etc/samba/smb.conf, para añadir lo siguiente: [global] #Nombre del servidor Samba server string = Paquito obey pam restrictions = Yes #Tipo de autenticacion. En este caso la base de datos, tdbsam que viene por defecto passdb backend = tdbsam, guest passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n. syslog = 0 log file = /var/log/samba/log.%m max log size = 1000 printcap name = cups dns proxy = No panic action = /usr/share/samba/panic-action %d printing = cups security = share # Habilitaremos localhost y nuestra subred hosts allow = [HP815] #El nombre tiene que ser el mismo en Cups y Samba comment = HP Deskjet 815 browseable=yes writable=no printable=yes create mode = 0700 Una vez realizada la configuración básica de Samba, deberíamos añadir los usuarios Samba para que se puedan autenticar contra el servidor. Lo realizaremos de la siguiente forma: #smbpasswd usuario,... nos pedirá que le establezcamos una contraseña. Una vez realizado esto, volveremos a la configuración Cups y realizaremos los siguientes cambios: Editaremos el archivo /etc/cups/mime.convs y descomentaremos las línea: application/octet-stream application/vnd.cups-raw Editaremos el archivo /etc/cups/mime.types y descomentaremos la línea: application/octet-stream. Ahora sólo queda reiniciar los servicios Samba y Cups. Después todo debería funcionar. /etc/init.d/samba restart /etc/init.d/cupsys restart

158 140 Servidor Linux para conexiones seguras de una LAN a Internet Clientes Linux La configuración del cliente, es muy similar a la instalación del servidor Cups. Para ello seguiremos una serie de pasos: Agregamos al sistema los paquetes necesarios, con un apt: #apt-get install cupsys cupsomatic-ppd cupsys-driver-gimpprint Si no tenemos Ghostscript en el sistema, también lo añadimos: #apt-get install ghostscript ghostscript-fonts Ahora iniciaremos el servicio Cups: #/etc/init.d/cupsys restart Y entraremos vía web a nuestro host cliente (http://localhost:631 ) para configurar una nueva impresora. La añadiremos de la misma forma que en el servidor. La diferencia está en la conexión, en este caso asignaremos una impresora del tipo Windows Printer vía Samba. Y en el Device URI, colocaremos: Una vez finalizada podemos imprimir una página de prueba, para ver si todo está configurado correctamente Clientes Microsoft Vamos a realizar la instalación, mediante los siguientes pasos: Accedemos a Inicio -> Configuración -> Panel de Control. Seleccionamos Impresoras y faxes -> Agregar nueva impresora. En el asistente, especificamos la impresora como local y seleccionamos Crear un nuevo puerto -> Local Port Establecemos como nombre de puerto: \\host.dominio.com\<nombre_impresora> Por último, seleccionamos el modelo de impresora que vamos a agregar (en mi caso, HP 815). Una vez hecho esto la impresora debería estar configurada y lista para imprimir Solucionar problemas Si lo hemos configurado bien, pero no tenemos ni idea de porque no funciona podemos consultar los logs de Cups (/var/log/cups/error log) y buscar allí el problema. Si queremos aumentar el nivel de debug de los logs, tendremos que cambiar la opción LogLevel del archivo /etc/cups/cupsd.conf, a nivel debug, de esta forma podremos encontrar el fallo. Otra cosa primordial es consultar la documentación Cups, a lo mejor nos encontramos con que el módelo concreto de impresora que tenemos no está soportado.

159 Capítulo 10. Servicios de usuario Servidor Web Un servidor web 1 es un programa que implementa el protocolo HTTP (hypertext transfer protocol). Este protocolo está diseñado para transferir lo que llamamos hipertextos, páginas web o páginas HTML (hypertext markup language): textos complejos con enlaces, figuras, formularios, botones y objetos incrustados como animaciones o reproductores de sonidos. Sin embargo, el hecho de que HTTP y HTML estén íntimamente ligados no debe dar lugar a confundir ambos términos. HTML es un formato de archivo y HTTP es un protocolo. Un servidor web se encarga de mantenerse a la espera de peticiones HTTP llevada a cabo por un cliente HTTP que solemos conocer como navegador. El navegador realiza una petición al servidor y éste le responde con el contenido que el cliente solicita. El cliente es el encargado de interpretar el código HTML, es decir, de mostrar las fuentes, los colores y la disposición de los textos y objetos de la página; el servidor tan sólo se limita a transferir el código de la página sin llevar a cabo ninguna interpretación de la misma. Sobre el servicio web clásico podemos disponer de aplicaciones web. Éstas son fragmentos de código que se ejecutan cuando se realizan ciertas peticiones o respuestas HTTP. Hay que distinguir entre: Aplicaciones en el lado del cliente: El cliente web es el encargado de ejecutarlas en la máquina del usuario. Son las aplicaciones tipo Java o Javascript, el servidor proporciona el código de las aplicaciones al cliente y éste, mediante el navegador, las ejecuta. Es necesario, por tanto, que el cliente disponga de un navegador con capacidad para ejecutar aplicaciones (también llamadas scripts). Normalmente, los navegadores permiten ejecutar aplicaciones escritas en lenguaje javascript y java, aunque pueden añadirse mas lenguajes mediante el uso de plugins. Aplicaciones en el lado del servidor: El servidor web ejecuta la aplicación. Una vez ejecutada, genera cierto código HTML, el servidor toma este código recién creado y lo envía al cliente por medio del protocolo HTTP. Las aplicaciones de servidor suelen ser la opción por la que se opta en la mayoría de las ocasiones para realizar aplicaciones web. La razón es que, al ejecutarse ésta en el servidor y no en la máquina del cliente, éste no necesita ninguna capacidad adicional, como sí ocurre en el caso de querer ejecutar aplicaciones javascript o java. Así pues, cualquier cliente dotado de un navegador web básico puede utilizar Servidor Apache El servidor HTTP Apache es un servidor HTTP de código abierto para plataformas Unix (BSD, GNU/Linux, etc.), Windows y otras, que implementa el protocolo HTTP/1.1 (RFC 2616) y la noción de sitio virtual. Cuando comenzó su desarrollo en 1995 se basó inicialmente en código del popular NCSA HTTPd 1.3, pero más tarde fue reescrito por completo. Su nombre se debe a que originalmente Apache consistía solamente en un conjunto de parches a aplicar al servidor de NCSA. Era, en inglés, a patchy server (un servidor parcheado). El servidor Apache se desarrolla dentro del proyecto HTTP Server (httpd) de la Apache Software Foundation. Apache presenta entre otras características mensajes de error altamente configurables, bases de datos de autenticación y negociado de contenido, pero fue criticado por la falta de una interfaz gráfica que ayude en su configuración (en nuestro caso esto queda resuelto con Webmin). En la actualidad (2005), Apache es el servidor HTTP más usado, siendo el servidor HTTP del 68 % de los sitios web en el mundo y creciendo aún su cuota de mercado. 1 Definición obtenida de Wikipedia, la enciclopedia libre:

160 142 Servidor Linux para conexiones seguras de una LAN a Internet Configuración de Apache Para instalar el servidor web y realizar su configuración de una forma cómoda y sencilla, utilizaremos unos módulos para la herramienta web Webmin. Para instalarlos, realizaremos el siguiente apt: #apt-get install apache apache-doc webmin-apache webmin-htaccess En la figura 10.4 podemos observar la pantalla de presentación del módulo Webmin y los parámetros de configuración que podemos modificar del mismo. Figura 10.4: Interfaz Webmin para Apache Directorios y archivos de configuración En nuestra distribución Debian, los directorios de configuración se encuentran colocados en los siguientes puntos del sistema: ServerRoot: /etc/apache,... directorio base de los archivos de configuración. DocumentRoot: /var/www,... directorio base de las páginas web del servidor. Ejecutables de Apache: /usr/bin El directorio base de los archivos de configuración del servidor web se especifica en el archivo httpd.conf, utilizando la directiva ServerRoot. Cuando el servidor web se inicia mediante los scripts de inicialización, la ruta de acceso a httpd.conf se especifica en la línea de comandos del servidor (httpd) y, desde allí, se especifica el resto de archivos de configuración (con la opción -f ).

161 Capítulo 10. Servicios de usuario 143 Hay cuatro archivos de configuración básicos en el directorio de configuración. Estos archivos, y su contenido habitual se describen en el cuadro Los cambios de configuración de Apache más habituales se realizan en httpd.conf. Archivo httpd.conf srm.conf access.conf mime.types Cuadro 10.1: Archivos de configuración de Apache Contenido Parámetros generales de configuración del servidor. Este archivo tiende ahora a contener toda la configuración, suprimiendo la necesidad de srm.conf y access.conf. Directrices del procesamiento de las peticiones, entre otras: respuestas de error, opciones de indexación del directorio y de procesamiento de scripts. Este archivo define el árbol de documentos (espacio de nombres) visible por todos los usuarios, además de cómo el servidor envía información de ese árbol a clientes remotos. La estructura del árbol de documentos no tiene que coincidir necesariamente con la estructura del directorio de su sistema de archivos local. Por lo general, este archivo no se sigue utilizando. Opciones de cada directorio: entre otras, control de acceso y restricciones de seguridad, este archivo ya no se suele utilizar. Definiciones de tipos de archivo MIME para diferentes extensiones de archivos. Históricamente, los archivos.conf contienen los diferentes tipos de información. Sin embargo, todas las directrices del servidor web se pueden colocar en cualquiera de los tres archivos, y el servidor web las interpretará correctamente. Con el fin de reducir la confusión, Apache se distribuye ahora con todas las opciones en el archivo principal httpd.conf. Si existen los demás archivos.conf, se procesarán en el orden siguiente: http.conf, srm.conf y access.conf. Los archivos de configuración adicionales (especialmente los relacionados con la seguridad) deberán estar presentes en el árbol de documentos real que el servidor procesa. Estos archivos pueden ser modificados desde el módulo Webmin de Apache. Los parámetros a los que se puede acceder los podemos observar en la figura Sintaxis de los archivos de configuración: Los archivos de configuración de Apache contienen una directiva por línea. Se puede usar \ al final de una línea para indicar que una directiva continua en la próxima. No puede haber otros caracteres o espacio en blanco entre el carácter \ y el fin de la línea. En las directivas, dentro de los archivos de configuración, no se hace distinción entre mayúsculas y minúsculas. Las líneas que comiencen con el carácter # serán consideradas comentarios, siendo ignoradas. No se pueden incluir comentarios en una línea, después de una directiva de configuración. Los espacios y líneas en blanco antes de una directiva de configuración se ignoran, de manera que se puede dejar una sangría en las directivas para mayor claridad. Podemos hacer un chequeo de la sintaxis de sus archivos de configuración sin tener que reiniciar el servidor, usando apachectl configtest o la opción -t de la línea de comandos. Directivas relevantes en los archivos de configuración: Las directivas más habituales son las siguientes: <Directory> <DirectoryMatch> <Files> <FilesMatch> <Location> <LocationMatch> <VirtualHost>

162 144 Servidor Linux para conexiones seguras de una LAN a Internet Figura 10.5: Parámetros de configuración de APACHE Las directivas que se pongan en los archivos principales de configuración se aplicarán a todo el servidor. Si queremos cambiar únicamente la configuración de una parte del servidor, podemos cambiar el rango de acción de las directivas poniéndolas dentro de las secciones <Directory>, <DirectoryMatch>, <Files>, <FilesMatch>, <Location>, y <LocationMatch>. Estas secciones limitan el dominio de aplicación de las directivas dentro de ellas, a locales particulares dentro del sistema de archivos o URLs particulares. Estas secciones pueden ser anidadas, para permitir un grado de selección más fino. Apache tiene la capacidad de servir varios sitios web diferentes al mismo tiempo, esto se llama Hospedaje Virtual. El dominio de aplicación de las directivas también puede ser delimitado poniéndolas dentro de <VirtualHost>, de manera que solo tendrán efecto para pedidos de un sitio web en particular.

163 Capítulo 10. Servicios de usuario 145 A pesar de que la mayor parte de las directivas pueden ir dentro de estas secciones, hay algunas directivas que pierden su sentido en algunos contextos. Por ejemplo, las directivas que controlan la creación de procesos solo pueden ir en el contexto del servidor principal. Para descubrir qué directivas pueden estar dentro de qué secciones, revise el contexto de la directiva. Protección implícita de archivos del servidor: Una de las características de Apache que puede causar problemas de seguridad por ser mal interpretada es el acceso implícito. Si no se configura correctamente Apache es posible recorrer todo el sistema de archivos del servidor desde una página web. Para evitarlo hemos de añadir las instrucciones siguientes a la configuración del servidor: <Directory /> Order Deny, Allow Deny from all </Directory> De esta forma evitaremos el acceso implícito al sistema de archivos. Para dar acceso a un conjunto determinado de directorios añadiremos el siguiente código: <Directory /home/*/public_html> Order Deny, Allow Allow from all </Directory> Archivos.htaccess Apache permite una administración descentralizada de la configuración, a través de archivos colocados dentro del árbol de páginas web. Los archivos especiales se llaman normalmente.htaccess, pero se puede especificar cualquier otro nombre en la directiva AccessFileName. Las directivas que se pongan dentro de los archivos.htaccess se aplicarán únicamente al directorio donde esté el archivo, y a todos sus subdirectorios. Siguen las mismas reglas de sintaxis que los archivos principales de configuración. Como los archivos.htaccess se leen cada vez que hay una petición de páginas, los cambios en estos archivos comienzan a actuar inmediatamente. Para ver qué directivas se pueden colocar, podemos consultar el contexto de cada directiva. El administrador del servidor pueden controlar aún más qué directivas son permitidas configurando la directiva AllowOverride en los archivos principales de configuración. Con se puede observar en la figura 10.6, en el módulo Webmin-htaccess, podemos especificar los directorios a los que se va a tener acceso a través de Apache. Figura 10.6: Interfaz Webmin para HtAccess de Apache

164 146 Servidor Linux para conexiones seguras de una LAN a Internet Archivos de log Cualquier persona que pueda escribir en el directorio donde Apache escribe los logs, seguramente podrá también acceder al código de usuario (UID) con el que se ha arrancado el servidor, que normalmente es el usuario root. No debemos permitir que los usuarios puedan escribir en el directorio donde se guardan los logs sin tener presente las posibles consecuencias. Fichero pid: Al arrancar Apache almacena el número del proceso padre del httpd en el archivo logs/httpd.pid. Este nombre de archivo se puede cambiar con la directiva PidFile. El número del proceso es para el uso del administrador, cuando quiera terminar o reiniciar el demonio. Si el proceso muere (o es interrumpido anormalmente), entonces necesitaremos matar los procesos hijos. Log de errores: El servidor registrará los mensajes de error en un archivo de log, que será por defecto logs/error log. El nombre del archivo se puede alterar usando la directiva ErrorLog; se pueden usar diferentes logs de error para diferentes anfitriones virtuales. Log de transferencia: El servidor normalmente registrará cada pedido en un archivo de transferencia que, por defecto, será logs/access log. El nombre del archivo se puede alterar usando la directiva CustomLog; se pueden usar diferentes archivos de transferencia para diferentes anfitriones virtuales. Estadísticas Webalizer Para poder ver las estadísticas de uso del apartado Web de nuestro sistema, podemos instalar el paquete Webalizer, pudiéndose controlar por web mediante un módulo para Webmin. Para realizaremos el siguiente apt: #apt-get install webalizer webmin-webalizer La instalación nos pedirá que indiquemos donde esta situado el archivo de logs de Apache. También es capaz de realizar estadisticas para el proxy Squid y los servidores FTP. El archivo de configuración de Webalizer es: /etc/webalizer.conf Si ejecutamos desde el programa desde la línea de comandos: #webalizer, se generará el reporte de estadísticas, estos reportes quedarán almacenados, en formato html, en el directorio: /var/www/webalizer. Si utilizamos el módulo para Webmin, lo primero que necesitaremos será añadir los archivos de log de Apache, situados en el directorio: /var/log/apache/. En la figura 10.7 se muestran diferentes pantallas del módulo Webmin. Hosts virtuales El término Host Virtual se utiliza para referirse a la práctica de mantener más de un servidor web en una sola máquina, así como para diferenciarlos por el nombre de servidor que presentan. En determinadas circunstancias puede suceder que una empresa que dispone de un servidor quiera tener más de un dominio activo en el servidor, por ejemplo: y El servidor web Apache fue uno de los primeros que incluyó soporte de hosts virtuales basados en IP y basados en nombre. A partir de la versión Apache tiene una nueva funcionalidad en la que si cualquiera de los archivos de configuración es un directorio, Apache entrará en ese directorio y analizará cualquier archivo (y subdirectorio) que se encuentre allí, tratándolos como archivos de configuración. Un posible uso de esta funcionalidad consistiría en añadir servidores virtuales (VirtualHosts), creando pequeños archivos de configuración para cada servidor virtual, y colocándolos en un directorio de configuración. Así, se puede insertar o eliminar servidores virtuales sin tener que editar ningún archivo, sino simplemente quitando o copiando archivos. Esto facilita la automatización de estos procesos.

165 Capítulo 10. Servicios de usuario 147 Figura 10.7: Módulo de Webmin para Webalizer Con el boom de Internet y el consiguiente aumento del número de sitios web, cada vez es más frecuente encontrar una sola máquina actuando como servidor para más de un sitio web. Existen unas cuantas formas de proporcionar más de un sitio web desde una máquina. Una de ellas consiste en ejecutar múltiples copias de un servidor web, una para cada sitio; sin embargo, puede resultar imposible por lo que respecta a los recursos de la máquina. Hay dos métodos para soportar hosts virtuales como un solo servidor. Uno se basa en utilizar múltiples direcciones IP, una para cada sitio web, y otro se basa en soportar múltiples nombres de host en (normalmente) una sola dirección IP. Se denominan, respectivamente, hospedaje virtual basado en IP y basado en nombres. Una variante menor del hospedaje virtual basado en IP es el hospedaje virtual basado en puertos, donde sólo el puerto que forma parte de la dirección diferencia los hosts virtuales. Los procedimientos y los parámetros necesarios para configurar el hospedaje virtual utilizando estos métodos diferentes se tratan en las secciones siguientes. He aquí unas cuantas preguntas que podemos utilizar para seleccionar una de los métodos de hospedaje virtual: Disponemos de más de una dirección IP? Cuantos sitios web pensamos hospedar? Necesitan todos los sitios utilizar el puerto HTTP predeterminado (80)? Se han asignado múltiples nombres a la máquina? Deseamos separar estrictamente los sitios web?

166 148 Servidor Linux para conexiones seguras de una LAN a Internet Para añadir un host virtual en Apache utilizaremos la directiva <VirtualHost>. En el siguiente ejemplo podemos ver cómo se definiría un servidor virtual para el dominio <VirutalHost aucad.com> ServerName DocumentRoot /usr/local/etc/httpd/vhost/aucad ServerAdmin TransferLog /usr/local/etc/httpd/vhosts/aucad/logs/access_log ErrorLog /usr/local/etc/httpd/vhosts/aucad/logs/error_log ScripAlias /cgi-bin/ /usr/local/etc/httpd/cgi-bin/ </VirtualHost> En la figura 10.8, podemos observar la configuración gráfica de Webmin para Servidores virtuales Figura 10.8: Servidores Virtuales en Apache Compartir carpetas en el servidor web Una vez tenemos montado el servidor virtual, en cada servidor podemos colocar las carpetas web que queramos, en la figura 10.9 podemos observar como se configurará. Figura 10.9: Compartición de carpetas en Apache

167 Capítulo 10. Servicios de usuario 149 Arrancar el servidor Apache El proceso httpd, se ejecuta como un demonio en segundo plano para atender las peticiones que se realicen. Es posible que Apache sea invocado por el demonio Internet, inetd o xinetd, cada vez que se realice una conexión al servicio HTTP usando la directiva ServerType, aunque esto no se recomienda. En el caso de que el puerto especificado en el archivo de configuración sea el puerto por defecto, 80 (o cualquiera por debajo de 1024), será necesario tener privilegios de root para poder iniciar Apache. Una vez que el servidor ha arrancado y completado las actividades preeliminares como la apertura de los archivos de registro, ejecutará los procesos hijo que realizan el trabajo de escuchar y responder las peticiones de los clientes. El proceso principal httpd continuará ejecutándose como root, pero los procesos hijo se lanzarán con un usuario con menos privilegios. La primera tarea que realiza httpd cuando es invocado es localizar y leer el archivo de configuración httpd.conf. Es posible especificar la ruta del archivo en el momento de la ejecución la opción -f en la línea de comandos de la forma: #httpd -f /etc/apache/httpd.conf En lugar de ejecutar http directamente, podemos utilizar el script llamando a apachectl que sirve para controlar el proceso demonio con comandos simples como: #apachectl start,... para arrancar el servidor #apachectl stop,... para detener el servidor Si el servidor Apache se ejecuta correctamente volverá a aparecer el símbolo del sistema y si ejecutamos en un navegador: podremos ver la página de prueba ubicada en el directorio especificado en DocumentRoot. Si nos da algún fallo al arrancar normalmente es debido a que ya había otra instancia de Apache corriendo o a que estamos intentado arrancar el servidor por un puerto privilegiado, sin utilizar privilegios de root. Si queremos que Apache arranque automáticamente, lo deberemos colocar en uno de los scripts runlevel (véase apéndice D), de inicio del sistema. Si hemos realizado un apt, ya se habrá colocado allí. Módulos Apache Apache es un servidor modular. Esto implica que en el servidor básico se incluyen únicamente las funcionalidades más básicas. Otras funcionalidades se encuentran disponibles a través de módulos que pueden ser cargados por Apache. Por defecto, durante la compilación se incluye en el servidor un juego de módulos base. Los módulos van por separado y pueden ser incluidos en cualquier momento usando la directiva LoadModule. Las directivas de configuración pueden ser incluidas en forma condicional dependiendo de la presencia de un módulo particular, poniéndolas dentro de un bloque <IfModule>. Para ver qué módulos han sido cargados en el servidor, se puede usar la opción de línea de comandos -l. Para poder realizar las configuración, en conjunto con el resto del sistema, podría ser interesante utilizar alguno de los siguientes módulos Apache: apache-utils libapache-mod-security apache-perl libapache-mod-perl apache-php libapache-mod-php4 libapache-mod-jk libapache-mod-auth-shadow

168 150 Servidor Linux para conexiones seguras de una LAN a Internet libapache-mod-auth-radius libapache-mod-ldap libapache-mod-auth-mysql libapache-mod-acct-mysql libapache-mod-repository... Como se muestra en la figura 10.10, podemos observar que módulos se encuentran instalados en el sistema y habilitar o deshabilitar su uso. Figura 10.10: Módulos instalados en APACHE Apache-SSL: Conexiones seguras Para instalar Apache con SSL, realizaremos el siguiente apt: #apt-get install apache-ssl libapache-mod-ssl libapache-mod-ssl-doc La información de esta sección a sido obtenida de [BN00]. En esta sección nos ocuparemos de otro aspecto de la seguridad: hacer privadas las comunicaciones mantenidas entre los clientes y su servidor web, lo cual se consigue codificando dichas comunicaciones a través del protocolo SSL (Secure Sockets Layer). El hecho de que el protocolo SSL esté disponible para utilizarlo con los servidores web, supone un interesante dilema para los gobiernos que desean controlar los sistemas de codificación con el fin de impedir que caiga en las manos de entidades extranjeras a las que espiar. SSL es un protocolo que fue definido, inicialmente, por Netscape Communications Corporation con el fin de posibilitar que dos máquinas que se comunicasen a través de TCP/IP, codificasen la información que se enviaran la una a la otra. Después de garantizar, de esta manera, la seguridad de una sesión de comunicación, las dos máquinas pueden intercambiar información privada o confidencial sin preocuparse de que alguien pueda escuchar y utilizar la información. La seguridad es una característica fundamental para los servidores web utilizados para el comercio en Internet, esta actividad requiere con frecuencia la transferencia de información personal y confidencial, como números de tarjetas de crédito o códigos de cuentas bancarias.

169 Capítulo 10. Servicios de usuario 151 Sistemas de clave pública-privada Para codificar los paquetes que viajan entre dos máquinas, las máquinas deben entender una codificación de algoritmos común, y deben intercambiar información que permita a una máquina descodificar lo que la otra codifica. Las partes de la información de seguridad utilizadas para codificar y descodificar la información se llaman claves. La codificación se realiza introduciendo una modificación en la información localizada en una ubicación, mediante una clave. Se transmite, entonces, la información a otra ubicación, donde se utiliza una clave para restaurar la información a su forma original (descodificarla). En un sistema sencillo, la clave utilizada para codificar la información es la misma que se utiliza para descodificarla. Es a esto a lo que se llama sistema de clave privada, porque el contenido de la clave se debe mantener en secreto para que la información se mantenga también en secreto. Sin embargo, los sistemas de clave privada presentan un problema porque la clave se debe transmitir, de algún modo, de forma segura a la nueva ubicación. SSL utiliza una forma especial de codificación denominada infraestructura de clave pública (PKI), como parte del sistema global que utiliza para proporcionar sesiones de comunicación segura. En un sistema de claves como éste, se utilizan dos claves para el proceso de codificación y descodificación, y una de ellas (la clave pública) se puede hacer disponible para cualquiera sin que se vea afectada la seguridad de las comunicaciones entre dos máquinas. De esta forma se soluciona el problema de la seguridad de la distribución de claves, inherente a los sistemas de claves. Certificados: Verificación de quién está al otro lado de una sesión segura Otro asunto relacionado con las comunicaciones seguras es si debemos confiar en el servidor web con el que nos estamos comunicando. Aunque un servidor web puede enviar a un cliente una clave para realizar una comunicación segura con el mismo, es posible que el servidor esté hablando con el servidor web erróneo (por ejemplo, el cliente puede proporcionar un número de tarjeta de crédito a un servidor falso ejecutado por estafadores). Cuando se utiliza un sistema de clave pública-privada, también es posible transmitir información adicional, lo que se denomina un certificado, donde se describa al servidor web y a la organización que hay detrás del mismo. Este certificado puede estar firmada electrónicamente por una agencia de confianza. Existen varias agencias que investigan a la organización que esté ejecutando el sitio web y la información recopilada en el certificado y, después, firman el certificado, por un precio. Los navegadores clientes poseen una lista de agencias de confianza que utilizan para verificar que se está comunicando con el servidor con el que el usuario desea (es decir, que el servidor está siendo ejecutado por la organización que el usuario espera). Cuando instalemos un servidor web, debemos crear una pareja de claves públicas-privadas y un certificado para utilizarlos con el servidor. Si deseamos ejecutar un sitio web seguro para uso público, debemos hacer que una de estas agencias de confianza firme el certificado. Utilización del HTTP seguro: HTTPS En las comunicaciones a través de un servidor web seguro, el cliente utiliza un protocolo diferente, denominado HTTPS (o HTTP seguro), en lugar de HTTP. Como se deduce del nombre, es similar al HTTP, pero con seguridad añadida. Para acceder a un servidor web seguro, un usuario debe especificar la URL con el identificador de protocolo HTTPS, como indico a continuación: https://www.example.com/cgi-bin/proceso de tarjetas de credito Uno de los errores más comunes que cometen los nuevos administradores de servidores de web seguros, es no utilizar el tipo de protocolo correcto (https) en las URL que remiten al sitio web seguro. Mientras el puerto predeterminado TCP para el protolo HTTP es el puerto 80, el puerto predeterminado para HTTPS es 443. Cuando un navegador intenta acceder a un servidor seguro en un puerto equivocado, parece que el navegador se boquea y, finalmente, se agota el tiempo de espera. Esto puede desconcertar al usuario final, de modo debemos prestar especial atención a la comprobación de todas las URL que creemos y que estén vinculadas al sitio seguro.

170 152 Servidor Linux para conexiones seguras de una LAN a Internet Creación de un servidor web seguro Debido a las restricciones gubernamentales impuestas en los EEUU a la exportación, la mayoría de las distribuciones no proporcionan directamente la funcionalidad de servidor de web seguro. Linux se distribuye en todo el mundo y el gobierno de EEUU no permite la venta fuera de sus fronteras de determinadas formas de codificación. Lo que significa, desafortunadamente, que hay que ingeniárselas para conseguir, generar e instalar la funcionalidad del servidor web seguro para Apache. Existen dos opción para agregar el protocolo SSL a Apache; la que se describe a continuación, y que se recomienda usar, se denomina mod ssl. Consiste en un conjunto de parches y un módulo especial para utilizarlos con el código fuente de Apache y utiliza una biblioteca de criptografía, llamada OpenSSL, que proporciona las funciones de SSL. OpenSSL se basa en una biblioteca más antigua llamada SSLeay, y mod ssl se basa en el paquete que utilizamos, Apache-SSL. El hecho de que un paquete pueda constituir la base para otro, aunque sea de la competencia, es uno de los mejores valores de la filosofía Open Sopurce (de código fuente abierto). Preparación de los archivos especiales necesarios para la seguridad El servidor necesita varios archivos especiales para operar de modo seguro. Alguno de ellos requieren un procesamiento especial llevado a cabo por una agencia de confianza (una autoridad de certificación) para que el público en general utilice correctamente el sitio web. Los archivos siguientes se utilizan para la seguridad del servidor: Un archivo de claves del servidor: Este archivo contiene una clave pública y una privada, utilizadas por el servidor para codificar y descodificar operaciones. Un archivo de certificado. Este archivo indica que la clave y el sitio web son gestionados por una determinada organización. Si es una agencia de confianza quien firma este certificado, el usuario puede confiar en que es ciertamente esa organización la que ejecuta el sitio web. Una petición de firma del certificado: Este archivo contiene información del certificado, así como información sobre la clave. Se debe enviar a la agencia de confianza (llamada autoridad de certificación) para que sea firmado. Todos estos archivos son creado durante el proceso de instalación de Apache-SSL. Así como los nuevos archivos de configuración que quedarán alojados en: /etc/apache-ssl/. A partir de ahora nuestro httpd.conf, se encontrará situado en: /etc/apache-ssl/httpd.conf Pareja de claves pública-privada: La pareja de claves pública-privada se guarda en el archivo server.key, de manera predeterminada. Este archivo contiene las claves que utiliza el servidor para realizar la codificación. La clave privada de la pareja de claves pública-privada debe ser protegida en todo momento. Por este motivo, durante la creación de la clave, se nos pedirá que introduzcamos una frase de contraseña para codificar el archivo que contiene la clave. Una vez que el archivo esté codificado, se nos pedirá que introduzcamos la frase de contraseña cada vez que el servidor se inicie para que pueda acceder al archivo. Aunque pueda resultar molesto, es muy peligroso dejar sin codificar la clave privada en el disco, sin protegerla con una frase de contraseña. Hay que utilizar la directiva SSLCertificateKeyFile del archivo de configuración httpd.conf del servidor para especificar el archivo de claves que ha de usarse para que las operaciones sean seguras. El certificado del servidor El archivo de certificado del servidor contiene información sobre la organización que ejecuta el sitio web. Éste es transmitido al cliente cuando se establece una sesión segura, y el cliente lo utiliza para verificar

171 Capítulo 10. Servicios de usuario 153 que el sitio es legal. A veces se le llama archivo X.509 porque ése es el nombre del estándar que define el formato utilizado para este archivo. Para que el cliente acepte el certificado, debe ser firmado digitalmente por una CA (Certificate Authority, Autoridad de certificación). Cada uno de los principales navegadores que soportan el protocolo SSL posee una lista de las autoridades de certificación de confianza cuyas firmas acepta. Cuando un navegador se encuentra ante un certificado firmado por una CA que no conoce, suele proporcionar al usuario la información sobre dicha autoridad y el certificado preguntándole si debe continuar. De modo que dependerá del usuario si confía o no en que el sitio al que está conectado sea válido. El archivo de certificados que se ha de utilizar aparece especificado en el archivo de configuración del servidor, mediante la directiva SSLCertificateFile La petición de firma del certificado Si deseamos que los clientes confíen en nuestro sitio, deberemos poseer un certificado firmado por una agencia de confianza que funcione como autoridad de certificación. Para que una autoridad de certificación nos firme el certificado, deberemos de crear un CSR (Certificate Signing Request, Petición de firma del certificado) y envíarla a la autoridad con la documentación y el dinero. Existen varias agencias que actúan como autoridades de certificación, lo que implica verificar la información recopilada en el certificado y firmarlo digitalmente. El precio de este servicio se cobra por el coste derivado de investigar la información que contiene el CSR y por asumir la responsabilidad de la certificación de nuestro sitio web. En la siguiente lista se pueden observar algunas autoridades de certificación: CatCert: CertiSing: Entrust: IKS GmbH : Thawte: VeriSign: Todas estas compañías aceptan las peticiones de firma de certificados generadas por el paquete mod ssl, para su uso con Apache y mod ssl. Cuando creemos nuestro archivo de claves de servidor y el certificado, se creará también la petición de firma del certificado. La información solicitada para esta petición debe coincidir exactamente con el nombre de la compañía, nombre registrado del dominio y otro datos que la autoridad de certificación solicita para que puedan procesar la petición. Además, el archivo se cifra automáticamente en un formato especial. Podemos encontrar información detallada sobre los precios y las instrucciones para la creación de la CSR, así como la documentación solicitada por la autoridad de certificación, en los sitios web de cada compañía. POdemos actuar como nuestra propia autoridad de certificación y firmar nuestro certificado para comprobar nuestro servidor o para ejecutarlo internamente en nuestra organización. A esto se le denomina autocertificación. Los navegadores que se conecten a nuestro servidor no reconocerán nuestra firma, como una de las que las autoridades de certificación contemplan como válidas, pero los usuarios lo pueden aceptar manualmente en los navegadores cuando aparezca el mensaje de error. Para nuestro uso interno, podemos eliminar el mensaje de error que aparece en el cliente, agregando un archivo de autoridad de certificación al navegador del cliente. Cuando hayamos recibido un certificado firmado por una autoridad de certificación real, sustituiremos el certificado autofirmado copiando el nuevo sobre el archivo antiguo, o modificando el valor de la directiva SSLCertificateFile.

172 154 Servidor Linux para conexiones seguras de una LAN a Internet Ejemplo de la creación de certificados para un servidor Deberemos de tener instalado el SSL, ya se habrá instalado con apache-ssl, pero para asegurarnos realizamos el siguiente apt: #apt-get openssl install ssl-cert ca-certificates Esta es la parte fácil, el siguiente paso es crear el conjunto de llaves, y después configurar el httpd.conf para utilizarlo correctamente. Busca dónde está instalado el OpenSSL y nos aseguraremos de que está en el $PATH, después vamos al directorio donde tengamos los archivos de configuración de apache-ssl (/etc/apachessl/conf.d/ ). Si se necesita crear un certificado de prueba, para uso interno, se puede hacer: #openssl genrsa -des3 > httpsd.key #openssl req -new -x509 -key httpsd.key > httpsd.crt Los navegadores se quejarán sobre este certificado, puesto que está creado por la persona que lo firma, y no son fiables. Si quieres generar un certificado, y una petición de certificado para enviar a alguien como CatCert o Verisign, entonces hay que hacer: #openssl genrsa -des3 > httpsd.key #openssl req -new -key httpsd.key > httpsd.csr Ahora, configuraremos Apache para que utilize estos certificados. Se necesitan añadir varias cosas al archivo de configuración de Apache, para conseguir que ejecute las extensiones SSL con nuestros certificados. También será preciso añadir algunas configuraciones globales. Pasemos a ver las modificaciones de la configuración de /etc/apache-ssl/httpd.conf : # Hay que decirle al Apache que escuche en el puerto 443, por defecto solo escucha en el 80 Listen 443 # Si utilizamos mas de un sitio seguro en una IP necesitaremos: NameVirtualHost :443 # Es una buena idea deshabilitar el SSL globalmente y habilitarlo basado en hosts SSLDisable # SSL cache server, sin esto el servidor se caera SSLCacheServerPath /usr/bin/gcache # Puerto en el que se ejecuta el servidor SSLCacheServerPort # timeout del SSL cache, 300 es un buen valor, lo acortaremos para realizar pruebas valuesslsessioncachetimeout 300 Ahora crearemos un host virtual con SSL habilitado: <VirtualHost DocumentRoot /www/secure/ ServerName ServerAdmin ErrorLog logs/https_error.log TransferLog logs/https_access.log # Habilitar SSL para este host virtual SSLEnable # Esto prohibe el acceso excepto cuando se utiliza el SSL. Muy comodo para defenderse contra errores de configuracion que # ponen al descubierto elementos que deberian estar protegidos SSLRequireSSL SSLCertificateFile /usr/conf/httpsd.crt # Si la llave no esta combinada con el certificado, utilizamos esta directiva para apuntar al archivo de la llave. SSLCertificateKeyFile /usr/conf/httpsd.key # Si se requiere que los usuarios tengan un certificado, se necesitaran un monton de certificados raiz, para que se puedan # verificar sus certificados personales SSLCACertificateFile /etc/ssl/ca-cert-bundle.pem SSLVerifyClient none </VirtualHost> Con estas modificaciones ya deberíamos poder acceptar peticiones por el puerto seguro. Para probarlo podemos ejecutar la siguiente línea en un navegador: https://localhost:443

173 Capítulo 10. Servicios de usuario 155 Directrices de seguridad especiales Se añaden las directrices de seguridad para el control de mod ssl a la documentación de Apache que se instala cuando genera el servidor web seguro (podemos estudiarlas en profundidad allí). Sin embargo, merece la pena destacar aquí unas cuantas directrices de seguridad para dar una visión general sobre su utilización. Debemos utilizar la directiva SSLCipherSuite para controlar qué algoritmos se permiten para las sesiones de seguridad. A menos que seamos expertos en seguridad, deberíamos dejar estas configuraciones tal y como se encuentran. Debemos utilizar la directiva SSLSessionCache para indicar si deseamos soportar una cache para comunicar la información entre los procesos que intervengan de la sesión SSL (y, si así fuera, cuál va a ser el nombre del archivo). Debido a que las sesiones seguras requieren un trabajo importante de configuración, y debido a que las peticiones de los clientes pueden ser servidas por múltiples procesos servidores hijos, el uso de una cache de sesión para compartir la información entre los procesos hijo puede acelerar las cosas considerablemente. Debemos utilizar el valor none (ninguna) para desactivar la cache de la sesión o dbm, seguido de la ruta del archivo que se va a utilizar para la cache de sesión. Debemos utilizar las directivas SSLLog y SSLLogLevel para crear registros donde almacenar la información específica de SSL. Finalmente, los certificados SSL y X.509 pueden ser utilizados también por el servidor para la autenticación de los clientes utilizando los certificados: SSLCACertificatePath, SSLCACertificateFile, SSLVerifyClient, SSLVerifyDepth y SSLRequire. Comprobación de la legalidad En su infinita sabiduría, las comisiones del gobierno de los EEUU han creado leyes que convierten en un delito exportar desde este país ciertos programas potentes de codificación. Aparentemente, se ha tomado esta medida para impedir que una herramienta de codificación muy potente caiga en manos de terroristas y gobiernos no simpatizantes. El resultado de esta situación, sin embargo, es que la mayoría de los programas buenos de codificación se desarrollan en otros países y es EEUU el país que los importa, en lugar de ser al contrario. El software de codificación que EEUU importa, ya no puede ser exportado desde EEUU, ni al propio autor original. Hasta hace muy poco tiempo, la compañía RSA Data Security, Inc. poseía una patente norteamericana sobre determinados algoritmos de codificación de claves públicas-privadas utilizados en el protocolo SSL. La patente del algoritmo de RSA expiró en el 2000, de modo que ya no existen restricciones en la mayor parte del código. Sin embargo, si tenemos código específicamente de RSA, todavía nos encontraremos ligados por el contrato de licencia. Si simplemente pensamos utilizar Apache con mod ssl como un servidor web seguro dentro de nuestra organización seguramente no tendremos problemas. Si, por el contrario, pensamos distribuir el servidor web o una máquina que lo contenga al extranjero, es necesario consultar con un abogado para conocer cuales son las leyes de exportación e importación de criptografía en el lugar, debemos asegurarnos de atenernos a ellas. Por suerte, los cambios que se han producido recientemente tanto en el gobierno norteamericano, como en sus leyes, hacen la circulación de la criptografía más fácil. Con el tiempo se verá hacia donde nos lleva esta tendencia.

174 156 Servidor Linux para conexiones seguras de una LAN a Internet Apache 2.x La versión 2.x de Apache incorporará una gran cantidad de mejoras y nuevas opciones entre las que cabe citar las siguientes: Soporte de multi-threads: De esta forma Apache puede ejecutarse utilizando múltiples procesos como sucedía con la versión 1.3.x, con múltiples hebras de un único proceso o en una forma híbrida, proporcionando de esta forma una mejor escalabilidad. Soporte para multiple protocolos: Apache incluye la infraestructura necesaria para servir múltiples protocolos. Nueva API : La versión 2.x incorporá múltiples cambios en la API (Aplication Programming Interface) mejorándola y añadiendo nuevas funciones que permiten incorporar nuevas capacidades a los módulos. Uno de los inconvenientes de estas modificaciones es la incompatibilidad con los módulos existentes para Apache 1.3. Soporte para IPv6 : Apache permite trabajar con el protocolo IPv6. Filtrado: Los módulos de Apache ahora pueden actuar como filtros analizando el contenido que es servido. Errores multilenguaje: Los mensajes de error devueltos al navegador pueden proporcionarse de forma automática en función del idioma del navegador. Configuración simplificada: Algunas directivas confusas han sido simplificadas. También han sufrido mejoras algunos de los módulos que se incluyen por defecto en la instalación básica de Apache. Algunos de estos módulos son: mod_ssl: Este nuevo módulo proporciona una interfaz a los protocolos de encriptación SSL/TLS proporcionados por OpenSSL. mod_dav: Es un módulo nuevo que implementa DAV (Distributed Authoring and Versioning) para HTTP. DAV es una especificación para publicar y mantener el contenido de una web. mod_proxy: Este módulo ha sido completamente reescrito para aprovechar las nuevas características de filtrado e implementar de una forma más eficiente HTTP/1.1 Para instalarlo deberemos ejecutar el siguiente apt: #apt-get install apache2 apache2-doc Ataques al servidor Web Actualmente casi todas las empresas tienen que ejecutar un servidor web, sin embargo, los servidores web se sabe que tienen defectos y brechas de seguridad. La idea intrínseca de un servidor web (un usuario puede extraer archivos del servidor sin ninguna autenticación) establece las brechas de seguridad. Este gran número se debe al aumento creciente de tipos de protocolos y comandos con los que los servidores tienen que tratar. Cuando las páginas web sólo consistían en HTML, era mucho más fácil controlarlo todo. Pero ahora que los servidores tienen que interpretar ASP, PHP y otro tipo de tráfico que contiene código ejecutable. Ahora que las aplicaciones web son cada vez más complejas, con el tiempo estos problemas sólo se incrementarán. Algunos servidores web son más seguros que otros, pero todos tienen sus problemas. Y un servidor web pirateado puede significar más que la vergüenza de una página web deformada si el servidor también tiene acceso a bases de datos y otros sistemas internos, algo bastante común en nuestros días.

175 Capítulo 10. Servicios de usuario Servidor de correo Para montar el servidor de correo, el siguiente conjunto de programas: Exim4: Servidor de correo corporativo (MTA), para uso local. Fetchmail: Servidor de correo externo, para importar cuentas ajenas. Courier-imap: Servidor de IMAP para dar acceso desde internet. Horde: Webmail, para consultar el correo por IMAP desde Internet. Para hacer funcionar Horde, deberemos ejecutar además los siguientes servicios. Apache. PHP. Para autenticar usuarios: LDAP o MySQL. Procmail: Procesador de correo. Es utilizado para filtrar los correos a través de los siguientes programas ClamAv: Antivirus de correo. SpamAssassin: Filtro de Spam, basado en reglas. Bogofilter: Filtro de Spam, basado en el teorema de Bayes. El sistema es un poco complejo pero consigue tener correo interno y externo, centralizado en el servidor corporativo. Además podrá ser consultado desde el exterior mediante el Portal Web Horde, consiguiendo que este libre de virus y Spam. En las siguientes secciones detallo la configuración del sistema. Basado en artículos publicados en Exim: Correo corporativo Para instalar un servidor de correo corporativo, lo primero que necesitaremos es disponer de programa que haga las veces de servidor de correo local (MTA, Mail Transfer Agent), en nuestro caso elegiremos el servidor Exim4. Para instalarlo ejecutamos el siguiente apt: #apt-get install exim4 Durante la configuración especificaremos el uso de un único archivo de configuración global: /etc/exim4/exim4.conf.template Además se nos pedirá que contestemos a una serie de preguntas para configurar el servidor: 1. Tipo de uso que vamos a dar a Exim. Como posteriormente queremos enviar nosotros mismos los s, seleccionaremos la primera opción. 2. Nombre visible de nuestro sistema, es decir, el mail name o nombre de dominio en la dirección de correo. Si no sabemos que contestar, colocamos cualquier cosa, después lo podemos modificar desde el archivo de configuración. 3. Si tenemos otro nombre para el correo entrante, presionamos intro para dejar la opción por defecto. 4. Servidores virtuales de correo, en este caso no lo vamos a utilizar. 5. Hacer de relay para otros dominios, tampoco se aplica en nuestra situación.

176 158 Servidor Linux para conexiones seguras de una LAN a Internet 6. Quien recibirá los mensajes del postmaster o root, es decir, quién recibirá los logs de error. Colocamos un usuario del sistema que habilitemos para esta tarea. 7. Por último preguntará si queremos guardar nuestro archivo de aliases o sobrescribir el ya existente. Por si lo necesitamos más adelante, es mejor guardar la configuración anterior. En el archivo, /etc/exim4/exim4.conf.template, encontramos reunidos todos los parámetros de configuración. Editaremos este archivo, para que reparta el correo local en el formato Maildir, consiguiendo que sea compatible con courier-imap (lo utilizaremos más adelante para el Webmail). La parte que tenemos que cambiar es la que hace referencia al reparto local de los s, por defecto los enviará al archivo: /var/mail/<usuario>, concatenándose uno detras de otro, esto es precisamente lo que queremos evitar. Nos situamos en la sección: 30 exim4-config mail spool. Una vez allí comentaremos la siguiente línea: file = /var/spool/mail/${local_part},... agregándole un # delante. Y a cambio, debajo de esa línea añadiremos lo siguiente: driver = appendfile maildir_format = true directory = /home/${local_part}/maildir create_directory = true group = mail mode = 0600 check_string = "" escape_string = "" prefix = "" suffix = "" Con esas líneas conseguiremos que el reparto se realice en el directorio de correo de cada usuario: /home/<usuario>/<maildir>, siendo usuario cualquier usuario del sistema y Maildir una carpeta que hemos creado para guardar el correo. Podemos colocar la que queramos, en esta carpeta se guardara el correo del usuario en formato maildir. Al reiniciar Exim: /etc/init.d/exim restart,... ya tedremos el correo en formato Maildir. Monitor de Exim, interfaz Webmin Podemos monitorizar el servidor de correo Exim si instalamos el siguiente módulo para Webmin: #apt-get install webmin-exim Como se aprecia en la figura 10.11, podremos visualizar las siguientes informaciones: Los Logs del servidor La cola de correo del servidor Estadistas de mensajes

177 Capítulo 10. Servicios de usuario 159 Figura 10.11: Monitor para Exim a través del módulo para Webmin Fetchmail: Correo externo Fetchmail es un cliente de IMAP y POP que permite a los usuarios descargar automáticamente el correo de cuentas remotas en servidores IMAP y POP y almacenarlos en carpetas de correo locales. Una vez en local, se puede acceder a los correos de una forma más sencilla y utilizando multitud de programas cliente. Como características más habituales podemos citar: Soporte de POP3, APOP, KPOP, IMAP, ETRN y ODMR. Puede reenviar correo utilizando SMTP lo que permite que las reglas de filtrado, reenvío y aliasing funcionen correctamente. Se puede ejecutar en modo daemon para comprobar periódicamente el correo entrante. Puede recuperar correo de múltiples carpetas y reenviarlos, en función de la configuración establecida, a varios usuarios locales. Para instalarlo simplemente ejecutaremos el siguiente apt: #apt-get install fetchmail fetchmail-ssl El archivo de configuración general del sistema se sitúa en /etc/fetchmail y desde aquí se puede redireccionar el correo a cada usuario. Este podría ser un listado típico:

178 160 Servidor Linux para conexiones seguras de una LAN a Internet set logfile "/home/josan/.fetchmail.log" # establecemos el tiempo en segundos entre el que se estar\ a # intentando recuperar el correo de los distintos servidores. set daemon 120 # # Recuperamos el correo de y lo # depositamos en el buzon de correo local de josan. # # poll servidorcorreo.dominio.com #Colocamos el servidor de correo externo proto pop3 #En este caso POP3 user usuario #Usuario del correo externo pass "mi_password" #Password del correo externo to josan #Usuarios local, que recibira el correo Creamos este archivo y lo modificamos con los parámetros de las cuentas POP3 de los usuarios, el bloque cuenta-usuario lo podemos repetir tantas veces como sea necesario. Después sólo tenemos que crear un archivo por usuario para que cuando ese usuario ejecute Fetchmail lea las opciones del archivo de configuración y se descargue el correo. Ese archivo se llamara: /.fetchmailrc Podriamos simplificar la configuración de los archivos de usuario mediante el paquete fetchmailconf. Para instalarlo realizamos el siguiente apt: #apt-get install fetchmailconf Este podría ser el archivo tipico de usuario /.fechmailrc: set postmaster "pepe" set bounc set no spambounce set properties "" # set daemon 90 # Cuentas de correo de ono: y poll pop3.ono.com with proto POP3 user pepe1 there with password ElPasswordDePepe1 is pepe here user pepe2 there with password ElPasswordDePepe2 is pepe here # # Cuentas de correo terra: y poll pop3.terra.es user pepe2 there with password ElPasswordDePepe2 is pepe here user pepe3 there with password ElPasswordDePepe3 is pepe here user pepe4 there with password ElPasswordDePepe4 is pepe here # # Cuentas de correo de Microsoft: ;-) poll microsoft.com with proto POP3 user wgates there with password Hasecorp is pepe here Automatizar la descarga de correo externo Para ejecutar Fetchmail automáticamente tenemos las siguientes opciones: Ponerlo en el cron Ejecutarlo como demonio del sistema. Para ello descomentamos la línea: set daemon, del archivo de configuración. Si lo ejecutamos en modo daemon, le indicaremos cada cuantos segundos se ejecutara Fetchmail. Para lanzar el demonio de forma automática tenemos que ejecutarlo, en alguno de los archivos de perfil, como.profile o.bashrc (incluiremos la instrucción, fetchmail). Si preferimos lanzarlo manualmente, ejecutamos desde la línea de comandos: #fetchmail Si lo queremos ejecutar en el cron, añadiremos al archivo /var/spool/cron/crontabs/<usuario>, en nuestro caso pepe: */3 * * * * /usr/bin/fetchmail -s Esto indicará que se ejecute fetchmail cada tres minutos.

179 Capítulo 10. Servicios de usuario 161 Configuración gráfica de Fetchmail, interfaz Webmin Para simplificar el proceso de configuración podemos utilizar nuestra herramienta de configuración por web: Webmin. Para instalar el módulo realizaremos el siguiente apt: #apt-get install webmin-fetchmail Figura 10.12: Módulo Webmin para Fetchmail Horde: Webmail Un Webmail no es más que una interfaz para leer el correo electrónico del servidor de correo, por medio de una pagina web. Horde es un programa gestor de correo IMAP para ser usado con un navegador y que está disponible para todas las cuentas de correo de los servidores locales. El protocolo IMAP (Internet Message Access Protocol), es un protocolo de red de acceso a mensajes electrónicos almacenados en el servidor. Mediante IMAP se puede tener acceso al correo electrónico desde cualquier equipo que tenga una conexión a Internet. Una vez configurada la cuenta IMAP, podemos especificar las carpetas que deseamos mostrar y las que deseamos ocultar, esta característica lo hace diferente del protocolo POP3. Horde cuenta con las siguientes características: Enviar y Recibir mensajes con múltiples archivos adjuntos. Despliegue en línea de archivos adjuntos de imagenes Interfaz de usuario amigable y atractiva basada en iconos. Soporte para múltiples mensajes, incluyendo Ingles, Español, Francés, Alemán, Húngaro, Italiano, Polaco, Portugués, Noruego, Ruso,... Múltiples carpetas, por defecto cuenta con la opción enviar, la papelera y soporta algunas creadas por los usuarios. Configuración en límite del tamaño para archivos adjuntos en salida. Preferencias de usuarios, incluyendo número de mensajes en pantalla, lenguaje, firma y estilo. Cada usuario tiene su propias libreta de direcciones.

180 162 Servidor Linux para conexiones seguras de una LAN a Internet La ventaja de usar la web es que lo podemos hacer desde cualquier ordenador y siempre tendremos la misma configuración, los mensajes quedan en el servidor organizados en carpetas. En cambio eso no pasa con POP3, ya que nos bajamos los mensajes y los tenemos que organizar en nuestro disco local. Para instalar el Webmail Horde, simplemente deberemos ejecutar el siguiente apt: #apt-get install horde3 Para acceder de forma directa a este gestor de correo, deberemos usar las direcciones: https://dominio.tld:2096/horde/,... puerto seguro Para poder utilizar Horde tenemos dos opciones: Validar los usuario mediante directorio LDAP Utilizar una base de datos de usuarios MySQL Es mejor decantarse por la opción MySQL, ya que Jabber también lo utiliza y nos será útil más funciones. Es decir, para poder utilizar Horde necesitamos tener instalados los: Apache PHP MySQL Si vamos a instalar el Webmeil Horde, podemos obtener toda la información detallada en la siguiente dirección de Internet: HowTo sobre como instalar el servidor IMAP a través de Horde Protocolo IMAP El protocolo IMAP nos servirá para consultar el correo vía web con cualquier navegador, pudiendo realizar las conexiones desde un lugar ajeno a la empresa o mediante un cliente IMAP. La necesidad surge ya que el protocolo POP3 es poco flexible y accediendo desde otros correos nos puede descargarnos los s al host local, si es que así esta configurado en ese cliente, con la consiguiente perdida de los s del usuario que se encontraban almacenados en el servidor. El servidor IMAP, lo que hace es recoger el correo que se encuentra en el $HOME de un usuario y servirlo al cliente IMAP interactivamente. Es decir, los mensajes siempre están en el servidor y sólo bajan al cliente si son seleccionados para lectura en local, y no por Internet. Para utilizarlo, necesitaremos tener el servidor de correo Exim para enviar los correos y también Fetchmail para obtener los correos externos. En este punto supondremos que tenemos instalado y funcionando en el sistema: Exim4 y Fetchmail. En Debian para poder realizar la tarea de servidor IMAP tenemos dos paquetes: Corier-imap y Maildrop. Configuración de Courier-imap Para instalarlo es muy simple: #apt-get install courier-imap courier-imap-ssl Ahora, editaremos el archivo de configuración de courier-imap: /etc/courier/imapd.

181 Capítulo 10. Servicios de usuario 163 Allí cambiaremos la siguiente línea: ADDRESS = 0 por ADDRESS = , localhost Es recomendable, por motivos de seguridad, configurar courier-imap sobre SSL. Si lo hacemos no debemos olvidar configurar la cuenta cliente como SSL. Configuración Maildrop Para que el servidor solo sea accesible desde nuestra máquina. Deberemos instalar un filtro de s, para que nos coloque el correo en nuestra carpeta Maildir, o como la hayamos llamado. Para instalarlo es muy simple: #apt-get install maildrop courier-maildrop Nos permite filtrar los s para así colocarlos en subcarpetas, según el asunto, el remitente, etc. La configuración básica es que nos deje todos los s en el directorio Maildir. Estas opciones son configurables desde el archivo de configuración: /.mailfilter. El contenido del archivo debe de ser el siguiente: DEFAULT="$HOME/Maildir" logfile "$DEFAULT/.maildroplog" Finalmente, creamos la carpeta Maildir, con el comando maildirmake: #maildirmake Maildir Ahora solo falta comprobar su funcionamiento. Cada cierto tiempo el usuario, mediante Fetchmail, descargará el correo en la carpeta. Después sólo es necesario configurar un cliente de correo para que lea del servidor de correo Imap. Por ejemplo, podemos configurar Mutt, que comprende a la perfección el correo en formato Maildir. A la hora de acceder al correo, deberemos colocar como nombre de servidor localhost y como usuario/contraseña, el que tengamos asignado en el sistema Filtrado de correo, eliminar virus y Spam con Procmail Ahora que ya tenemos todas nuestras cuentas de correo centralizadas en nuestra máquina, vamos a procesar el correo. Esta tarea la lleva a cabo Procmail, justo antes de que se deje el correo en el Maildir de cada usuario. Para instalar Procmail, simplemente ejecutaremos el siguiente apt: #apt-get install procmail Procmail es una herramienta muy potente que permite repartir el correo, filtrarlo, organizarlo en carpetas, reenviarlo automáticamente, etc. Nosotros lo utilizaremos para pasar el antivirus ClamAv y los filtros de Spam: SpamAssassin y Bogofilter. Las posibilidades son prácticamente ilimitadas y dependen de nuestra imaginación y de nuestras habilidades, pero básicamente el proceso consiste en dos pasos: Identificar el correo Procesar el correo Para identificar el correo, usaremos las expresiones regulares, de forma que los todos correos que cumplan unas determinadas condiciones, pasarán a realizar el proceso que queramos.

182 164 Servidor Linux para conexiones seguras de una LAN a Internet Redireccionamiento de correo Si queremos redireccionar el correo desde Fetchmail, necesitamos editar o crear el archivo de configuración Fetchmail del usuario: /.fetchmailrc. En el agregaremos las siguientes líneas: $ cat $HOME/.forward procmail Con esto, cada vez que nos llegue un correo (.forward), se ejecutará Procmail de forma automática. Otra opción interesante es procesar directamente un archivo de correo (*.mbox) de forma manual, a él se aplicarán los filtros indicados en el /.procmailrc: $formail -s procmail < INBOX.mbox #!/bin/sh En este caso es recomendable utilizar un script para Procmail, como el siguiente: ORGMAIL=/var/mail/$LOGNAME if cd $HOME && test -s $ORGMAIL && lockfile -r0 -l1024.newmail.lock 2>/dev/null then trap "rm -f.newmail.lock" umask 077 lockfile -l1024 -ml cat $ORGMAIL >>.newmail && cat /dev/null >$ORGMAIL lockfile -mu formail -s procmail <.newmail && rm -f.newmail rm -f.newmail.lock fi exit 0 Configuración de Procmail y reglas de filtrado Los archivos de configuración de Procmail, son los siguientes: /etc/procmailrc: Archivo de configuración del servidor Procmail. /.procmailrc: Archivo de configuración Procmail, por cada usuario. Este sería un archivo /.procmailrc típico: PATH=/usr/bin:/bin:/usr/local/bin:. MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/ :0fw: spamassassin.lock * < spamassassin # Algunas versiones de Spamassassin eliminan la letra "F" # de la cabecera "From" :0 * ^^rom[ ] { LOG="*** Dropped F off From_ header! Fixing up. " :0 fhw sed -e 1s/^/F/ } Opcionalmente podríamos mandar los correos de Virus y Spam a /dev/null, pero los filtros no son infalibles, por lo que por lo menos al principio, es mejor revisarlos antes de borrarlos. Este sería el formato, que habría que añadir al /.procmailrc, para borrar los correos que cumplan una determinada regla: :0 * ^X-Regla: Yes /dev/null

183 Capítulo 10. Servicios de usuario 165 Configuración gráfica de Procmail, interfaz Webmin Para simplificar el proceso de configuración podemos utilizar nuestra herramienta de configuración por web: Webmin. Para instalar el módulo realizaremos el siguiente apt: #apt-get install webmin-procmail Figura 10.13: Módulo Webmin para Procmail Desde este módulo, además de editar manualmente el archivo de configuración /etc/procmail, como podemos observar en la figura 10.14, podemos especificar las acciones que ejecutará el filtro. Figura 10.14: Crear acciones gráficamente en Procmail ClamAV: Antivirus para correo Mediante ClamAv podemos escanear, los mensajes recibidos, es el filtro antivirus que pasaremos a través de Procmail. ClamAv tiene licencia GPL, funciona bastante bien y se actualiza a menudo. Para instalar el programa, simplemente ejecutaremos el siguiente apt: #apt-get install clamav clamav-daemon

184 166 Servidor Linux para conexiones seguras de una LAN a Internet Durante el proceso de instalación clamav-freshclam (el actualizador de bases de datos de virus), preguntará por qué interfaz estamos conectados a Internet y un servidor (se apuntan varios por defecto) desde donde bajarse las actualizaciones. También podemos establecer el modo de ejecución de clamav-freshclam, se recomienda ejecutar como demonio del sistema. El archivo de configuración del demonio ClamAv es: /etc/clamav/clamd.conf En ese archivo podemos encontrar las siguientes opciones: ScanMail, para que escanee correo. ScanArchive, para que escanee archivos. ScanHTML, para que escanee código HTML. Situados en este punto, suponemos que nuestro servidor de correo entrega los correos locales correctamente a Procmail. Este ejecutará las reglas de filtrado de /etc/procmailrc (y después las de: /.procmailrc,... para cada usuario) y lo dejará, típicamente en: /var/mail/<usuario>. Para que Procmail ejecute ClamAv añadiremos al archivo: /etc/procmailrc, las siguientes líneas: SHELL=/bin/sh AV_REPORT= clamdscan --stdout --disable-summary - cut -d: -f 2 VIRUS= if [ "$AV_REPORT"!= " OK" ]; then echo Yes; else echo No;fi :0fw formail -i "X-Virus: $VIRUS" :0fw * ^X-Virus: Yes formail -i "Virus: $AV_REPORT" -i "Subject: MENSAJE CON VIRUS: $AV_REPORT" Vamos a observar cada una de las líneas detenidamente: La línea de SHELL=/bin/sh es necesaria porqué se pueden tener usuarios en /etc/passwd sin shell, en estos casos no se ejecutaría el código entre comillas simples. En AV REPORT se almacena OK, si no tiene virus o el nombre de ese virus en caso contrario. A la variable VIRUS se le asigna Yes si contiene virus y No en caso contrario. En la primera regla de filtrado, añadimos la cabecera X-Virus con Yes o No (así el usuario final lo puede filtrar fácilmente, también nos sirve para saber que el correo ha sido escaneado). En la segunda regla de filtrado, si el correo contiene virus, le agregamos una cabecera llamada Virus que contiene el reporte de ClamAv. Además, modificamos el Subject y en su lugar ponemos el nombre del virus. Como función adicional, en lugar de modificar el Subject lo podríamos eliminar directamente. Para que esta configuración funcione necesitamos tener lanzado el demonio: clamav-daemon. Para probar que el sistema funciona, en la dirección: encontraremos la siguiente línea: Es un test, si nos la mandamos por , ClamAv deberá detectarlo como virus. Una vez configurado este sistema, sólo tendremos que fijarnos que todos los correos nuevos que lleguen a los usuarios contengan la nueva cabecera de X-Virus.

185 Capítulo 10. Servicios de usuario SpamAssassin: Filtro basado en reglas El SpamAssassin es un filtro basado en scripts en Perl que procesan los mensajes y detectan, en base a unas reglas bastantes complejas, si el mensajes es spam. A los correos, les son asignados una serie de puntos, si supera determinado valor (5.0 por defecto) es considerado un spam. La mejor manera de hacerlo funcionar es arrancar el demonio spamd y comunicarse con él a través del spamc, que será ejecutado por Procmail. Para identificar el correo spam, usaremos expresiones regulares, de forma que los todos correos que cumplan unas determinadas condiciones, pasaran a realizar el proceso asignado en Procmail. Para instalarlo nada más fácil que realizar el siguiente apt: #apt-get install spamassassin spamc spampd El paquete spampd, instala el demonio SMTP/LMTP demonio proxy de SpamAssassin. El paquete spamc, instala el cliente para comunicarse con el demonio de SpamAssassin. Para poder usar SpamAssasin como demonio es necesario retocar el archivo: /etc/default/spamassassin y cambiar ENABLED a 1. En el archivo de configuración de procmail, añadiremos la siguiente regla: :0fw spamc -f -s u $LOGNAME Una vez instalados ambos y arrancado el spamd, sólo hay que hacer que el spamc filtre todos los mensajes para detectar spam. El spamd agrega las siguientes cabeceras para indicar los resultados: X-Spam-Prev-Content-Type: text/html; charset="us-ascii" X-Spam-Prev-Content-Transfer-Encoding: 7bit X-Spam-Status: Yes, hits=11.7 required=5.0 tests=no_real_name,msg_id_added_by_mta,invalid_msgid,subj_remove, UPPERCASE_25_50,MAILTO_WITH_SUBJ,MAILTO_TO_REMOVE, MAILTO_WITH_SUBJ_REMOVE,BIG_FONT,MAILTO_LINK, FROM_AND_TO_SAME version=2.30 X-Spam-Flag: YES X-Spam-Level: *********** X-Spam-Checker-Version: SpamAssassin 2.30 (devel $Id: SpamAssassin.pm,v /06/14 23:17:15 hughescr Exp $) Además, agrega la siguiente cabecera al Subject del mensaje: Subject: *****SPAM***** Say Goodbye to YELLOW, STAINED Teeth! Y las siguientes líneas en el texto para describir las reglas aplicadas: SPAM: Start SpamAssassin results SPAM: This mail is probably spam. The original message has been altered SPAM: so you can recognise or block similar unwanted mail in future. SPAM: See for more details. SPAM: SPAM: Content analysis details: (25.5 hits, 5 required) SPAM: NO_REAL_NAME (-1.1 points) From: does not include a real name SPAM: INVALID_DATE_TZ_ABSURD (4.4 points) Invalid Date: header (timezone does not exist) SPAM: FAKED_UNDISC_RECIPS (3.5 points) Faked To "Undisclosed-Recipients" SPAM: PLING (0.1 points) Subject has an exclamation mark SPAM: DOUBLE_CAPSWORD (1.1 points) BODY: A word in all caps repeated on the line SPAM: CLICK_BELOW (1.5 points) BODY: Asks you to click below SPAM: CALL_FREE (0.7 points) BODY: Contains a tollfree number SPAM: NORMAL_HTTP_TO_IP (3.3 points) URI: Uses a dotted-decimal IP address in URL SPAM: REMOVE_PAGE (2.2 points) URI: URL of page called "remove" SPAM: MAILTO_WITH_SUBJ (1.9 points) URI: Includes a link to send a mail with a subject SPAM: CLICK_HERE_LINK (0.8 points) BODY: Tells you to click on a URL SPAM: MAILTO_LINK (0.8 points) BODY: Includes a URL link to send an SPAM: FREQ_SPAM_PHRASE (2.4 points) Contains phrases frequently found in spam SPAM: [score: 14, hits: click here, address,] SPAM: [enter your, list please, please click, this] SPAM: [message, you wish, your , your] SPAM: [name] SPAM: DATE_IN_FUTURE_06_12 (2.4 points) Date: is 6 to 12 hours after Received: date SPAM: FORGED_YAHOO_RCVD (1.5 points) From yahoo.com does not match Received headers SPAM: SPAM: End of SpamAssassin results

186 168 Servidor Linux para conexiones seguras de una LAN a Internet Configuración del Procmail, con SpamAssassin Se pueden aplicar filtros en el Procmail del usuario, en el genérico para todo el sistema (Hay que usar con cuidado esta opción, borrar o modificar un mensaje de terceros sin su aprobación puede ser un delito) o en el propio cliente (MUA) de correo electrónico, que es la opción más recomendable. En este apartado lanzaremos el cliente (spamc) desde: /etc/procmailrc y ejecutarlo de forma global. Editaremos el archivo y añadiremos las siguientes líneas: DROPPRIVS=yes :0fw /usr/bin/spamc -f Después en el /.procmailrc filtramos los spams a una carpeta especial para separarla del correo válido y poder revisar, en busca de falsos positivos: :0: * ^X-Spam-Status: Yes mail/spams Los Spams son enviados al directorio: /mail/spams, pero si nuestras reglas están lo suficientemente probadas y no nos importa perder algún válido, podemos eliminarlos, enviándolos a /dev/null Configuración gráfica de SpamAssassin, interfaz Webmin Para simplificar el proceso de configuración podemos utilizar nuestra herramienta de configuración por web: Webmin. Para instalar el módulo realizaremos el siguiente apt: #apt-get install webmin-spamassassin Figura 10.15: Módulo Webmin para SpamAssassin Como opción adicional se pueden especificar las opciones de configuración de Procmail para que procese el correo con SpamAssassin.

187 Capítulo 10. Servicios de usuario 169 En las siguientes figuras (10.16) podremos observar la multitud de opciones que podemos configurables gráficamente. Figura 10.16: Opciones de configuración SpamAssassin Bogofilter: Filtro bayesiano El problema fundamental con el SpamAssassin es que está basado en el reconocimiento de patrones de texto usando reglas, lo que obliga a estar continuamente actualizando y agregando nuevas reglas para adaptarse a los cambios del spam. Además hay que elaborar reglas para cada lenguaje. Esto produce que el proceso de análisis de cada mensaje sea aún más lento de lo que ya es actualmente, entre otras cosas porque está implementado en Perl y el número de reglas es muy grande. Y no acaba aquí, en problema, lo que es el más grave, puede dar falsos positivos, que son mensajes que no son spams pero son considerados como tal por el filtro. Esto es lo peor que le puede pasar, podemos perder o dejar de leer mensajes importantes. También de vez en cuando, llegan spam que haya pasado el filtro (falso negativo), pero en este caso no pasa nada realmente grave. El SpamAssasin al poco tiempo muestra sus problemas, es muy fácil para los spammers encontrar los trucos para saltarse las reglas de filtrados, ya que son de dominio público y común para todas las instalaciones. La solución pasa por usar métodos que aprendan de los mensajes que recibe el usuario y generan una base de datos propia. Esta base de datos sirve para calcular las probabilidades combinadas de que un mensaje sea o no spam, en función de las palabras que contiene. Este método se denomina bayesiano y

188 170 Servidor Linux para conexiones seguras de una LAN a Internet esta basado en el Teorema de Bayes sobre probabilidad, y se adapta automáticamente al idioma y a los tipos de mensajes que recibe cada usuario. El problema fundamental de ésta aproximación es que hay que entrenar inicialmente al programa con un conjunto relativamente grande de mensajes spams y otros válidos para que arme su base de datos. A partir de allí, el programa puede aplicar los métodos bayesianos y usar esos mismos mensajes, ya clasificados como spam o no, para realimentar la base de datos. Para que el filtro aprenda, por cada mensaje spam en la base de datos, tenemos que proporcionarle al menos tres mensajes buenos. Si no hacemos esto dará muchos falsos positivos. Una implementación mejorada de este método es Bogofilter, el filtro bayesiano que aquí propongo. Configuración de Bogofilter Para instalarlo realizaremos el siguiente apt: #apt-get install bogofilter Bogofilter mantiene un par de bases de datos en el directorio: /.bogofilter: goodlist.db spamlist.db Cada una de ellas mantiene una lista de tokens (palabras) junto con la cantidad de veces que esa palabra ha aparecido en mensajes válidos y mensajes spams. Esos números son usados para calcular la probabilidad de que el mensaje sea un spam. Una vez que se han calculado las probabilidades, se usan aquellas más alejadas de la media para combinarlas usando el Teorema de Bayes de probabilidades combinadas. Si la probabilidad combinada es mayor que 0.9, bogofilter retorna 1, caso contrario retorna 0. La fiabilidad del bogofilter depende exclusivamente de la cantidad de palabras que tenga en su base de datos, mientras más contenga y mayor sea la cantidad de apariciones de cada palabra en un mensaje válido o spam, mejores serán sus resultados. Si sólo le enseñamos cuales son mensajes válidos, no podrá detectar los spams. Al contrario, si sólo le enseñamos spams, considerará a muchos mensajes válidos como spams (falsos positivos... ). O sea, el aprendizaje inicial es importantísimo, y nos ahorrará mucho trabajo de mantenimiento de la base de datos. Para configurarlo realizaremos los siguientes pasos: Entrenarlo con un conjunto grande de mensajes válidos que tengamos almacenados. Entrenarlo con un conjunto grande de spams. Configurar /.procmailrc Seguimiento y mantenimiento los primeros días, para evitar falsos positivos. Si queremos probar otros, el sistema Debian pone a nuestra disposición, más filtros bayesianos como por ejemplo, spamprobe. Entrenarlo con mensajes válidos Este paso es muy importante, caso contrario puede generar falsos positivos. Lo mejor en estos casos es entrenarlo con los mensajes que tengamos almacenados en nuestro cliente de correo. Se aconsejan al menos mensajes. Si tenemos los mensajes almacenados en formato mbox, basta con hacer lo siguiente: #bogofilter -n < archivo_mbox

189 Capítulo 10. Servicios de usuario 171 Si por el contrario lo tenemos en formato Maildir, y debido a que el estándar de éste formato quita las líneas de From de inicio de mensaje, el Bogofilter no es capaz de separar y contar los mensajes, por lo que hay que llamarlo por cada mensaje almacenado. Esto se puede realizar fácilmente con el siguiente script: for f in directorio_maildir/* do bogofilter -n < $f done Si hemos seguido los pasos descritos en este capitulo, no será necesario ya que en la sección hemos realizado un filtro que recomponía esa línea de From. Después de este paso se habrá creado la base de datos: ~/.bogofilter/goodlist.db Entrenarlo con spams El siguiente paso será entrenarlo con spams, en la dirección: gallir/bulma/spams.txt.gz Se puede encontrar una lista de más de 700 mensajes de spams. Para entrenar el filtro con estos mensajes usaremos la instrucción: #zcat spams.txt.gz bogofilter -s Después de este paso se habrá creado la base de datos: ~/.bogofilter/spamlist.db Configuración de Procmail El siguiente paso es configurar Procmail. Para ello modificaremos el archivo de configuración: /.procmailrc de cada usuario, ya que este filtro dependerá de sus s y no tendría sentido aplicarlo a toda la organización (en el /etc/procmailrc). Una vez el mensaje ha sido clasificado como spam, modificaremos la configuración de Procmail para que mueva los mensajes a otro archivo: /mail/spams. Además de ello, realimentaremos la base de datos con cada mensaje que llega, por lo que el sistema irá aprendiendo con el tiempo, en pocas semanas ya no necesita casi mantenimiento. El código que incluiremos en el /.procmailrc es el siguiente: :0HB *? bogofilter { # Es un spam, realimentamos la base de datos de spam :0HBc bogofilter -S } # lo movemos al archivo $HOME/mail/spams :0 mail/spams :0EHBc # Es un mensaje valido, realimentamos la base de datos validos bogofilter -n

190 172 Servidor Linux para conexiones seguras de una LAN a Internet Podemos realizar la actualización automática mediante la opción -u que indica al Bogofilter que actualice directamente la base de datos de acuerdo a la clasificación que se haga del mensaje. Es decir la siguiente regla, insertada en /.procmailrc, ya sería suficiente: :0HB *? bogofilter -u mail/spams Seguimiento y mantenimiento Aunque con el entrenamiento oficial y usando un conjunto de mensajes grande, es suficiente para que el Bogofilter casi no de falsos positivos, los primeros días deberemos de verificar los mensajes, resituando los falsos positivos como mensajes válidos. Para recolocar las modificaciones realizadas, tenemos las versiones incrementales -N y -S. En ambos casos lo que tenemos que hacer es grabar el mensaje en un archivo de texto y ejecutar con la opción que corresponda, -S si es un spam y -N si es un falso positivo. Para marcar como spam un mensaje no detectado: #bogofilter -S < mensaje.txt Para marcar como válido un falso positivo: #bogofilter -N < mensaje.txt,... esta situado en el archivo mbox: /mail/spams Jabber: Mensajería instantánea para corporaciones El protocolo Jabber, será una de las piezas claves del desarrollo y evolución de la futura Internet, como lo son y han sido los protocolos IP, FTP, Telnet, DNS, NNTP, ARP, ICMP,..., pero enfocado a la cada vez más utilizada mensajería instantánea. Jabber a diferencia de otros sistemas de mensajerías instantáneos, es algo más que un sencillo programa para enviar y recibir mensajes de texto entre usuarios a través de Internet, es un protocolo de Internet que aspira a convertirse en parte fundamental de la misma, para lo cual cuenta con una serie de interesantes características: Buena documentación. Basado en estandares abiertos y libres. Utiliza XML. Es multiplataforma. Su código esta liberado a la comunidad. Existen multitud de clientes que lo utilizan Utiliza pasarelas para interactuar con otros servicios (MSN, Yahoo, ICQ, IRC,... ). Es modulable y escalable, lo que permite añadir mejoras fácilmente. Existen disponibles, librerías Jabber en varios lenguajes. Está basado en una arquitectura cliente/servidor.

191 Capítulo 10. Servicios de usuario 173 Esta formado por un servidor y clientes, que son los programas que utilizan los usuarios para enviar y recibir mensajes entre sí. Existen clientes para prácticamente todas las plataformas (incluso varios escritos en Java, con la consiguiente portabilidad). Jabber es ideal para instalarlo en empresas, como complemento a la propia Intranet, puesto que permite la comunicación de los trabajadores de una forma eficiente, rápida y muy económica. De forma que permite, por ejemplo, intercambiar documentos, programas, datos, textos,... de una forma muy sencilla sin tener que utilizar sistemas más complejos como ftp o correo interno, es decir, consiguiendo comunicación instantánea y directa Servidor Jabber Para poder instalar el servidor Jabber necesitamos realizar un apt: #apt-get install jabber Con esto, se guardaran en nuestro sistema todos los archivos básicos. Si observamos los archivos de configuración de usuarios (/etc/passwd) se ha creado un usuario jabber, para manejar el servidor Jabber en el sistema. Además el servicio ha quedado agregado al arranque del sistema, en el inetd. Para arrancar el servidor de jabber, a mano, ejecutaremos: #jabberd Configuración Jabber La configuración se encuentra centralizada en un único archivo: /etc/jabber/jabber.xml Lo primero que tendremos que hacer es especificar en que máquina esta el servidor, el nombre de la misma ha de estar en formato FQDN, para que desde cualquier máquina de nuestra red pueda acceder a los servicios proporcionados por Jabber. Otra opción es poner directamente la dirección IP de la máquina, e incluso para realizar pruebas en la propia máquina podemos poner localhost. Cambiaremos la línea: <host><jabberd:cmdline flag="h">localhost</jabberd:cmdline></host> Por una de las siguientes opciones: <host>localhost</host> <host>fqdn_servidor_jabber<host> <host>ip_servidor_jabber<host> Una vez arrancado el servidor, tendremos que verificar si realmente todo funciona bien, para lo cual utilizaremos algunos de los múltiples clientes existentes para Jabber, (véase sección 10.18). Desde el cliente necesitamos crear un usuario y registrarlo en el servidor local. Podemos añadirle también otras funcionalidades extras: Si queremos que nuestro servidor Jabber soporte conferencia, es decir más de dos usuarios simultaneos, necesitamos jabber-muc (Jabber Multi user chat), para ello realizaremos el siguiente apt: #apt-get install jabber-muc

192 174 Servidor Linux para conexiones seguras de una LAN a Internet Si queremos que nuestro servidor Jabber soporte la busqueda de usuarios, es decir poder buscar en el archivo de usuarios del sistema, necesitamos jabber-jud (Jabber User Directory), para ello realizaremos el siguiente apt: #apt-get install jabber-jud Si queremos que nuestro servidor se comunique con otros protocolos propietarios como (IRC, MSN, Yahoo, ICQ, AIM,... ), tenemos disponibles pasarelas a esos protocolos: #apt-get install jabber-irc #apt-get install jabber-msn #apt-get install jabber-jit #apt-get install jabber-aim : IRC : MSN Messenger : ICQ : AIM messenger #apt-get install jabber-yahoo: Yahoo messenger Pero si aún necesitamos más potencia para nuestro servidor de mensajería instantánea, en la dirección: encontraremos más utilidades. Para conseguir más información sobre las opciones, podemos recurrir al manual: #man jabberd O bien consultar la página oficial: Configuración gráfica de Jabber, interfaz Webmin Podemos hacer más sencilla la configuración de nuestro servidor, si utilizamos nuestra herramienta web: Webmin. Para instalar el módulo de Jabber realizaremos el siguiente apt: #apt-get install webmin-jabber Pomo se puede observar en la figura 10.17, podemos acceder a las opciones generales, como pueden ser quien puede tener acceso al servidor jabber o también nos da acceso al archivo de cofiguración /etc/jabber/jabber.xml Clientes Jabber Para poder interactuar con el servidor Jabber, necesitamos tener instalado un cliente. Existe muchos clientes para jabber, personalmente utilizo kopete basado en el entorno de escritorio KDE. Para instalarlo realizaremos un apt: #apt-get install kopete Desde el cliente nos conectaremos con una cuenta al servidor Jabber local y si no tenemos cuenta, también podemos registrarla. Como podemos observar en la figura 10.18, situando nuestra cuenta podemos interactuar con multitud de servicios de mensajería además de Jabber, es un cliente muy versatil. Existen otros Clientes multiprotocolo, como Gaim (véase figura 10.19), que también funcionan muy bien. Para instalarlo: #apt-get install gaim Al final todo es cuestión de probar y quedarnos con el cliente que más nos guste.

193 Capítulo 10. Servicios de usuario 175 Figura 10.17: Módulo Webmin para Jabber

194 176 Servidor Linux para conexiones seguras de una LAN a Internet Figura 10.18: Cliente de mensajería instantanea Kopete Figura 10.19: Cliente de mensajería instantanea Gaim

195 Capítulo 11 Comunicaciones seguras En el interior y exterior de las redes de nuestro sistema pueden existir múltiples peligros acechandonos detras de cada switch o router, es necesario proteger nuestras conexiones y las de nuestros usuarios para que no sean escuchadas por usuarios no autorizados o si esto no lo podemos asegurar, al menos que les sean incomprensibles Shell seguro: OpenSSH SSH es una herramienta de acceso remoto que nos permite iniciar la sesión en un sistema remoto de una forma segura. El talón de Aquiles de la mayoría de las redes es el hecho de que normalmente las comunicaciones entre sistemas se pasan sobre una red en texto plano. Por lo tanto, podemos fortalecer las máquinas individuales todo lo que deseemos, pero si iniciamos una sesión en ellas remotamente con un programa de terminal inseguro, los ladrones pueden robar nuestras credenciales de registro con un sniffer de red (escucha clandestina de paquetes de red). Después pueden iniciar una sesión sin ningún problema. Una de las herramientas de acceso remoto más populares, Telnet, sufre esta deficiencia. SSH soluciona el problema utilizando tanto la criptografía simétrica como la clave pública para cifrar la sesión desde la primera pulsación de tecla. De este modo, todo el que esté escuchando su conexión obtiene un sonido aleatorio. SSH no sólo proporciona confidencialidad para nuestros datos utilizando el cifrado sino que además proporciona una sólida autenticación, que impide la suplantación de identidad, esto lo hace utilizando certificados digitales para autenticar a los usuarios. No hay que confundir SSH con SSL, es estándar de cifrado Web. Aunque ambos realizan la misma función, SSH funciona con cualquier protocolo, mientras que SSL está diseñado principalmente para las comunicaciones Web. SSH también incluye SCP, un reemplazo seguro para RPC, la herramienta de copia remota, y SFTP un reemplazo seguro para FTP. SSH también puede utilizarse para crear un túnel con otros protocolos entre máquinas, como HTTP y SMTP. Al utilizar esta familia de programas en lugar de sus homólogos más antiguos, nos aseguramos de que no se están leyendo nuestras comunicaciones remotas con los servidores. Eliminar el uso de Telnet y FTP en nuestra red puede ser difícil, pero cuanto más lo hagamos, más seguros estaremos Cliente OpenSSH Para acceder al sistema remoto con SSH, necesitamos un cliente SSH en nuestro lado y tiene que existir un servidor SSH ejecutándose en el lado remoto. Aunque SSH no está tan difundido como Telnet, poco a poco se está haciendo más popular. Cisco está instalando SSH en sus enrutadores, aunque todavía deja activado el servidor Telnet de forma predeterminada, mientras que SSH es opcional. Debemos asegurarnos de estar utilizando una versión 3.6 o más actual; algunas versiones anteriores tenían fallos en su implantación de protocolos criptográficos y son susceptibles de ataques. De hecho,

196 178 Servidor Linux para conexiones seguras de una LAN a Internet es recomendable asegurarse de tener la útima versión disponible, ya que el código se está mejorando constantemente y los algoritmos se están ajustando. SSH tiene un número de usos realmente interesantes distintos a asegurar un inicio de sesión en un sistema remoto. Se puede utilizar para crear un túnel para cualquier servicio a través de un canal cifrado entre servidores. Para instalarlo en nuestro sistema hay que realizar un apt-get: #apt-get install openssh-client-udeb La sintaxis SSH básica para iniciar una sesión remotamente es: $ssh -l login hotname Donde login es su nombre de usuario en el sistema remoto y hotname es el anfitrión al que está intentando conectar con SSH. También se puede utilizar: $ssh Por lo tanto y a modo de ejemplo, para registrarse en el servidor Web denominado web.example.com utilizando el nombre de inicio de sesión de josan, tendríamos que escribir: $ssh También podemos utilizar, $ssh -l josan web.example.com para iniciar la sesión. Si simplemente escribirmos $ssh web.example.com, el servidor supondrá que el nombre del usuario es igual que el del inicio de sesión del sistema. En la tabla 11.1 podemos encontrar el resto de opciones de SSH: Cuadro 11.1: Opciones del cliente SSH Opción Descripción -c protocol Utiliza un protocolo criptográfico específico (tiene que ser soportado por la versión que utilizamos de SSH) -p port# Se conoceta a un número de puerto específico en lugar de la puerto SSH predeterminado (puerto 22) -P port# Usa un puierto específico que no forma parte de la lista estándar de puertos propietarios, lo que normalmente significa un número por encima de Esto puede ser útil si tenemos un cortafuegos que imposibilita las comunicaciones en números de puertos inferiores. -v Muestra la salida larga. Útil para la depuración -q: Informa en modo silencioso, cdontrario del modo largo -C: Utiliza compresión del tráfico cifrado. PUde ser útil para conexiones demasiado lentas, como las telefónicas, pero es mejor tener un procesaro más potente para realizar la compresión o ralentizará mucho el rendimiento. Si queremos personalizar nuestras conexiones, en el directorio /etc/ssh encontraremos los archivos de configuración del servicio SSH. El archivo de configuración del cliente es /etc/ssh/ssh config Servidor OpenSSH Para utilizar SSH debemos tener un cliente SSH ejecutándose en la máquina que deseamos conectar y un servidor SSH en la máquina a la que deseamos conectarnos. Los clientes FTP y Telnet normales no se conectarán a un servidor SSH. El cliente se encuentra integrado en la mayoría de los sistemas operativos Linux actuales, aunque puede que tengamos que seleccionar esta opción al instalar el sistema. El servidor SSH es normalmente opcional. Para determinar si ya está instalado, escribimos $ps y comprobamos si se está ejecutando el proceso sshd. Si no se está ejecutando, tendremos que instalar el servidor para permitir las conexiones de su máquina a través de SSH.

197 Capítulo 11. Comunicaciones seguras 179 Pasemos a describir el proceso de instalación del servidor de SSH. 1. Lo primero es instalar el paquete si no lo tenemos en el sistema: #apt-get install openssh-server-udeb 2. Después hay que revisar los archivos de configuración que se encuentran en el directorio /etc/ssh para asegurarse de que coincide con los parámetros de nuestro sistema. El archivo de configuración para el servidor es /etc/ssh/sshd config. A continuación detallo los campos que hay que revisar dentro de este archivo: Port: Es el puerto que escucha SSH para las conexiones entrantes. Su valor predeterminado es 22. Si lo cambiamos, las personas que intenten conectarse con su sistema tendrán que cambiar manualmente el número de puerto en sus clientes SSH. Protocols: Le indican al servidor los protocolos SSH que debe aceptar. El valor predeterminado es aceptar conexiones de tipo SSH1 y SSH2. Hostkey: Claves para aceptar conexiones de clientes, proporciona la ubicación de las claves utilizadas para generar la autenticación de clientes. Éstas no son las mismas claves que las claves del servidor generadas en la instalación. 3. Antes de poder utilizar un servidor SSH tiene que generar sus distintas claves. Esto proporciona un identificador único para las claves de servidor. Para ello hay que escribir el siguiente comando: #ssh make-host-key 4. Ahora se puede iniciar el servidor SSH en la línea de comandos escribiendo: #sshd & Así se ejecutara el demonio del servidor SSH en segundo plano y escuchará continuamente las conexiones. Si se desea ejecutar sshd automáticamente al inicio (opción muy recomendable), hay que colocar dicha línea al final de un archivo al estilo de rc.local de otras distribuciones (véase apéndice D para componer este tipo de archivos). También es posible facilitar la configuración mediante un módulo para la herramienta de administración web Webmin. Para la instalación se utiliza el siguiente apt: #apt-get install webmin-sshd Puerto de envío con OpenSSH Aunque SSH se diseñó en principio para una interacción de línea de comandos tipo Telnet, también se puede utilizar para configurar un túnel entre dos máquinas para cualquier aplicación. Podemos crear una conexión segura entre dos servidores con la opción de puerto de envío integrada en SSH. Para realizar esta tarea, debemos tener SSH ejecutándose en ambos extremos de la conexión. Con la siguiente declaración emitida en el extremo del cliente podemos realizar cualquier servicio sobre cualquier puerto: #ssh -L local_port:local_host:remote_port remote_hostname -N & Donde debemos reemplazar: local port: Por un número aleatorio, mayor de 1024, elegido para realizar la nueva conexión cifrada local host: Por la máquina local remote port: Por el puerto del servicio con el que deseamos abrir un túnel en el extremo remoto

198 180 Servidor Linux para conexiones seguras de una LAN a Internet Figura 11.1: Interfaz gráfica Webmin para el servidor SSHD remote hostname: Por la dirección IP o nombre del servidor en el otro extremo de la conexión La opción -L le indica a SSH que debe escuchar el local port en local host y enviar cualquier conexión a remote port en remote host. La opción -N le indica a SSH que no intente iniciar la sesión, sólo mantener la conexión abierta para el tráfico enviado. Si se desea que esta configuración del sistema se mantenga en siguientes reinicios de la máquina hay que añadirla a un archivo de rc.local como se especifica en la sección D. Esto podrían ser ejemplos de este tipo de usos: Si se necesita cifrar una conexión de correo electrónico: #ssh -L 5000:localhost: N &,... donde la IP corresponde al servidor de correo de la red Si se necesita crear una conexión web segura con SSH en vez de SSL: #ssh -L 5000:localhost: N &,... utilizando en el navegador localhost:5000 se realizaran envíos a través de túnel seguro con el puerto web(80) en la máquina remota. También podemos tener varios puertos al mismo servidor, como es nuestro caso: #ssh -L 5000:localhost:25 -L 5001:localhost: N &

199 Capítulo 11. Comunicaciones seguras 181 Como se puede observar, SSH funciona extraordinariamente bien para crear una conexión segura entre dos máquinas para casi cualquier protocolo Criptografía y cifrado Hoy en día la solidez del cifrado normalmente se mide por el tamaño de su clave. Independientemente de la solidez del algoritmo, los datos cifrados pueden estar sujetos a ataques por la fuerza en los que se prueban todas las combinaciones posibles de claves. Al final, el cifrado se puede romper. Para la mayoría de los códigos modernos con longitudes decentes, el tiempo para romper la clave a la fuerza se mide en milenios. Sin embargo, un fallo inadvertido en un algoritmo o el avance en la tecnología informática o en los métodos matemáticos pueden reducir este tiempo considerablemente. Normalmente se cree que la longitud de la clave debe ajustarse para mantener seguros los datos durante una cantidad razonable de tiempo. Si el elemento es muy local, como las comunicaciones del campo de batalla o la información diaria sobre las acciones, un código que proteja estos datos durante semanas o meses está bien. Sin embargo, algo como número de tarjeta de crédito o los secretos de seguridad nacional tienen que mantenerse seguros durante un periodo de tiempo más prolongado y de forma eficaz para siempre. Por lo tanto, utilizar algoritmos de cifrado más débiles o longitudes de clave más cortas para algunas cosas está bien, siempre que la utilidad de la información para un intruso expire en un breve periodo de tiempo Tipos de cifrado Criptografía simétrica El primer tipo de cifrado, denominado criptografía simétrica, o cifrado de secreto compartido, se ha estado utilizando desde la época de los antiguos egipcios. Esta forma de cifrado utiliza una clave secreta, denominada secreto compartido, para cifrar los datos en un galimatías inteligible. La persona que se encuentra en el otro extremo necesita la clave compartida para desbloquear los datos (el algoritmo de cifrado). Podemos cambiar la clave y los resultados del cifrado. Se denomina criptografía simétrica porque se utiliza la misma clave para ambos extremos tanto para cifrar como para descifrar los datos. El problema que surge con este método es que tenemos que comunicar la clave secreta de una forma segura al destinatario pretendido. Si nuestro enemigo intercepta la clave, puede leer el mensaje. Se han inventado todo tipo de sistemas para intentar solucionar esta fragilidad básica, pero el hecho sigue existiendo: tendremos que comunicar la clave secreta de alguna forma al destinatario pretendido antes de iniciar una comunicación segura. Criptografía asimétrica Una revolución en el cifrado fue la iniciada cuando Whitfield Diffie, Martin Hellman y Ralph Merkle inventaron la criptografía de calve pública. (En realidad, todavía existe algún debate sobre si el británico James Ellis en realidad inventó esta clave antes y la mantuvo en secreto, pero Diffie, Hellman y Merkle fueron los primeros en publicarla en 1976). Estaban tratando de resolver el antiguo problema del intercambio de clave. Diffie se preguntaba cómo dos individuos que deseaban realizar una transacción financiera por una red electrónica podían hacerlo con seguridad. Llevaba mucho tiempo pensando en ello porque Internet estaba naciendo en aquél momento y el comercio electrónico todavía no existía. Si los gobiernos tenían muchos problemas tratando con el problema del intercambio de clave, cómo podría controlarlo una persona media? Quería llegar a crear un sistema por el que las dos partes pudiesen mantener conversaciones protegidas y realizar transacciones seguras sin tener que intercambiarse una clave cada vez. Sabía que si resolvía el problema del intercambio de claves, sería un gran avance en la criptografía. Diffie se asoció con Martin Hellman y Ralph Merkle. Tardaron algunos años, pero finalmente consiguieron crear un sistema denominado Cifrado de clave pública (PKE, Public Key Encription), también conocido como Criptografía asimetrica. La criptografía asimétrica utiliza un cifrado que divide la clave en dos claves más pequeñas. Una de las claves se hace pública y otra sigue siendo privada. El mensaje lo ciframos con la clave pública del

200 182 Servidor Linux para conexiones seguras de una LAN a Internet destinatario. Éste puede descifrarla a continuación con su propia clave privada. Y lo mismo pueden hacer por nosotros, cifrando un mensaje con nuestra clave pública para poderlo descifrar con nuestra clave privada. La diferencia es que nadie necesita la clave privada de nadie para enviar un mensaje seguro. Utilizamos su clave pública, que no tiene que mantenerse segura (de hecho, se publican en repositorios como si fueran una guía telefónica). Al utilizar la clave pública del destinatario, sabemos que sólo esa persona puede descifrarlo utilizando su propia clave privada. Este sistema permite que dos entidades se comuniquen con seguridad sin ningún intercambio anterior de claves. Normalmente la criptografía asimétrica se implanta mediante el uso de funciones de un sentido. En términos matemáticos, éstas son funciones fáciles de calcular en una dirección pero muy difíciles de calcular a la inversa. De esta forma podemos publicar nuestra clave pública, derivada a partir de nuestra clave privada, una tarea muy difícil de llevar a cabo al revés para determinar la clave privada. Una función común de un sólo sentido utilizada actualmente, es la descomposición en factores de números primos grandes. Es fácil multiplicar dos números primos y obtener un producto. Sin embargo, determinar cuál de las muchas posibilidades son los dos factores de un producto es uno de los problemas matemáticos más complejos (su tiempo de computación es NP-Completo 1 ). Si alguien inventase un método para deducir fácilmente factores de números primos grandes 2 en tiempo de computación lineal o polinómico, daría al traste con el mecanismo de cifrado de claves públicas actual, haciendo que cualquier tipo de comunicación basada en este tipo de algoritmos resultase insegura. Afortunadamente, otras funciones de un solo sentido funcionan bien para este tipo de aplicación, como los cálculos sobre curvas elípticas o el cálculo de logaritmos inversos sobre un campo finito. Poco después del lanzamiento de Diffie, Hellman y Merkle, otro grupo de tres hombres desarrolló una aplicación práctica de la teoría. Su sistema para el cifrado público se denominó RSA, por sus nombres: Ronald Rivest, Adi Shamir y Leonard Adleman. Formaron una empresa que empezó a regular su sistema. La velocidad de adopción era lenta y su empresa estuvo a punto de quebrar, hasta que llegó el momento de aprovechar el emergente campo comercial de Internet con una empresa, entonces pequeña denominada Netscape. El resto es historia y ahora RSA es el algoritmo de cifrado de clave pública más utilizado. Diffie y Hellman finalmente lanzaron una aplicación práctica de su propiedad, pero sólo útil para intercambios de clave, mientras que RSA puede realizar la autenticación y el no reconocimiento. Panorama actual Hoy en día, el cifrado de clave pública se encuentra detrás de cada servidor web que nos ofrece una compra segura. Nuestra transacción se cifra sin tener que dar ni obtener una clave secreta y todo se produce en segundo plano. Como usuarios, lo único que conocemos es ese pequeño símbolo de candado SSL que se muestra en nuestro explorador para sentirnos seguros. No se puede imaginar el efecto que tendría sobre el comercio de Internet si cada vez que deseáramos comprar algo online tuviésemos que pensar en una clave secreta, cifrar el mensaje y comunicar posteriormente de alguna forma dicha clave a la otra parte. Evidentemente, el comercio electrónico no existiría tal y como existe actualmente si no existiese la criptografía de clave pública. Por lo general las aplicaciones, combinan los dos tipos de criptografía. Utilizan primeramente criptografía de clave pública para acordar una clave simétrica aleatoria. Esta clave simétrica es una clave de sesión y sirve para realizar más rápidamente el cifrado y descifrado de la información que se mandan, ya que tiene un coste computacional mucho mas bajo. Existen muchos algoritmos de cifrado, protocolos y aplicaciones diferentes basadas en estos dos tipos principales de cifrado. Las siguientes secciones explican algunos de estos tipos Estándares generales El estándar de cifrado de datos (DES, Data Encryption Standar) es el estándar original que el gobierno de los Estados Unidos empezó a promover para su uso gubernamental y comercial. Pensado originalmente para se prácticamente inquebrantable en los años setenta, el aumento en potencia y el descenso en costo 1 Denominación que se le da en informática teórica a los problemas más dificeles de calcular, que necesitan un tiempo exponencial para su resolución). 2 Esto no es algo descabellado, hace muy pocos años se ha conseguido desarrollar un algoritmo que resuelve el problema de si un n. o tiene factores, en tiempo de computación polinomico.

201 Capítulo 11. Comunicaciones seguras 183 de la informática hicieron que su funcionalidad de clave de 56 bits quedase obsoleta para información muy confidencial. Sin embargo, todavía se sigue utilizando en muchos productos comerciales y se considera aceptable para las aplicaciones de seguridad inferior. También se utiliza en productos que tienen procesadores más lentos, como las tarjetas inteligentes y los dispositivos que no procesan un tamaño de clave más largo. TripleDES También llamado 3DES es la versión DES más moderna y actualizada, su nombre implica lo que hace. Ejecuta DES tres veces en los datos en tres fases: cifrado, descifrado y cifrado de nuevo. En realidad no multiplica por tres la solidez de su código (la primera clave de código se utiliza dos veces para cifrar los resultados del proceso), pero sigue teniendo una longitud de clave efectiva de 168 bits, bastante solidez para la mayoría de usos. RC4, RC5 y RC6 Este algoritmo de cifrado fue desarrollado por Ronald Rivest, uno de los desarrolladores de RSA, la primera aplicación gráfica de criptografía pública. Se han realizado mejoras a lo largo del tiempo para hacerla más sólida y solucionar problemas menores. La versión actual, RC6, permite una clave de bits de tamaño y un tamaño de bloque variable de hasta 128 bits. AES Cuando el gobierno de los Estados Unidos se dio cuenta de que DES terminaría llegando al final de su vida útil, empezó a buscar un sustituto. Hubo muchos competidores, incluyendo RC6, Blowfish del reconocido criptógrafo Bruce Schneier y otros algoritmos meritorios. El concurso se resolvió a favor de AES, basado en un algoritmo denominado Rijindael diseñado por dos criptógrafos belgas. Este hecho es importante porque se utilizó una competición abierta para decidir el estándar. Asimismo, al seleccionar un algoritmo de dos desarrolladores no norteamericanos sin intereses comerciales significativos ayudaba a legitimar esta selección por todo el mundo. AES se está convirtiendo rápidamente en el nuevo estándar del cifrado. Ofrece una clave de hasta 256 bits, algo más que suficiente para el futuro previsible. Normalmente, AES se implanta en modo de 128 o 192 bits Aplicaciones de la criptografía Hash Los hash son funciones especiales de sentido único que proporcionan autenticación y verificación utilizando el cifrado. Una función hash recoge un archivo y lo coloca en una función para que se produzca un archivo de tamaño, en conjunto, mucho más pequeño. Al hacerlo, se produce una huella digital única, lo que nos proporciona una forma segura de saber que el archivo no se ha alterado de ninguna manera. Al utilizar una función hash para un archivo sospechoso y comparar su huella digital con la huella digital correcta, podremos saber si se ha producido algún cambio en el archivo. Es muy poco probable que un archivo con una estructura diferente produzca una huella idéntica. Incluso si cambia uno de los caracteres, se cambia la huella digital significativamente. Las posibilidades de que dos archivos diferentes produzcan el mismo hash son infinitesimales. Normalmente los hash se proporcionan en versiones descargadas de software para asegurarse de que está obteniendo el software real, algo importante, especialmente con el software de libre distribución que se puede descargar desde réplicas de los servidores oficiales. El sitio web oficial normalmente incluye el hash correcto de la última versión. Si ambos no coinciden, sabremos que se han producido cambios, posiblemente sin el permiso o el conocimiento de los desarrolladores del software. El algoritmo hash más conocido se denomina MD5. Cuando se instala el sistema, se pregunta al usuario que algoritmo hash quiere usar para las contraseñas. Es muy recomendable establecer MD5 como predeterminado, ya que actualmente se le considera uno de los mejores algoritmos de hash.

202 184 Servidor Linux para conexiones seguras de una LAN a Internet Certificados digitales Los certificados digitales son las firmas del mundo comercial en Internet. Utilizan una combinación de tipos de cifrado para proporcionar autenticación y comprueban que quien se está conectando es realmente quien dice ser. En resumen, un certificado es una certificación expedida por una autoridad de la que nos fiemos y que permite fiarnos de la veracidad de lo que nos esta contando el titular del certificado. Un certificado contiene la clave pública de la organización cifrada con la clave privada o la clave pública de una autoridad de firmas. El uso de una autoridad de certificados o firmas se considera el método más seguro de los dos. Si podemos descifrar el certificado con su clave publica, podremos suponer razonablemente que el sitio web pertenece a dicha organización. Normalmente, los certificados se unen a un dominio determinado. Pueden ser emitidos por una entidad central, o creados y firmados localmente. Existen varias organizaciones de este tipo, entre ellas VeriSign, la empresa que además se encarga del sistema de nombres de dominio en Internet. Estas organizaciones han sancionado a otras muchas empresas por ofrecer certificados de su parte, sin regulación de ningun tipo. Obtener un certificado de VeriSign o de una de las empresas autorizadas es como si respondieran por nosotros. Generalmente, no emitirán un certificado hasta que verifiquen la información incluida en él, bien por vía telefónica o bien por otro medio de documentación en papel, como un contrato corporativo en el que se pide autenticación en persona. Cuando han certificado que nuestra información es correcta, cogen esta información, incluyendo los URL que vamos a utilizar para el certificado y la firman digitalmente cifrándola con su clave privada. Después, un servidor Web o cualquier programa podrán utilizar este certificado. Las entidades de certificación descentralizan su misión en entidades de certificación locales en las que confian. En Cataluña esta entidad es la Agencia Catalana de certificaciones, CATCERT. En su página web podemos encontrar más información: Cuando los usuarios externos reciben datos, como una página web del servidor, y adjunta un certificado, pueden utilizar la criptografía de clave pública para descifrar el certificado y verificar nuestra identidad. Se utilizan principalmente en los sitios de comercio electrónico, pero también se utilizan en cualquier otra forma de comunicación. Programas como SSH y Nessus pueden utilizar certificados para la autenticación. Las VPN o las redes inalámbricas también pueden utilizar certificados para la autenticación en lugar de contraseñas Protocolos de cifrado Un hecho bien conocido es que el protocolo IP tal y como se diseño originalmente no era muy seguro. La versión 4 de IP (IPv4), utilizado por casi todo el mundo de la comunicación con IP, no proporciona ningún tipo de autenticación ni confidencialidad. Las cargas útiles del paquete se envían al descubierto y los encabezados del paquete se pueden modificar fácilmente ya que no se verifican en el destino. Muchos ataques de Internet se basan en esta inseguridad básica de la infraestructura de Internet. Para proporcionar autenticación y confidencialidad a través del cifrado, se ha desarrollado un nuevo estándar IP denominado IPv6. Además, amplía el espacio de dirección IP utilizando una dirección de 128 bits en lugar de 32 bits y mejora además otros elementos. La implantación completa del estándar IPv6 requiere actualizaciones de hardware a amplia escala, por lo que el despliegue de IPv6 esta siendo bastante lento. Mientras no se acabe de implantar existen una serie de protocolos que nos permiten tener una cierta seguridad. IPsec Para solventar los problemas de IPv4 se desarrollo una implantación de seguridad para IP, denominada IPsec, que no requería cambios importantes en el esquema del direccionamiento. Los suministradores de hardware se aferraron a ello, convirtiéndose IPsec poco a poco en un estándar de hecho para crear VPNs en Internet. No es un algoritmo de cifrado específico, sino una estructura para cifrar y verificar paquetes dentro del protocolo IP. Puede utilizar diversos algoritmos y puede implantarse total o parcialmente. Para codificar el contenido del paquete se utiliza una combinación de clave pública y privada y además los hash añaden

203 Capítulo 11. Comunicaciones seguras 185 también autenticación. Esta función se denomina encabezado de autenticación (AH, Autentication Header). Con AH, un hash se crea a partir del encabezado IP y éste pasa adelante. Cuando el paquete llega a su destino, se crea un nuevo hash a partir de cada encabezado. Si no es comparable al enviado, sabrá que el encabezado se ha alterado de alguna manera durante el tránsito, lo que nos proporciona un alto nivel de garantía de que el paquete proviene de donde dice. Podemos elegir descifrar la carga útil pero no ejecutar un AH ya que puede ralentizar el procesamiento. AH también puede estropearse en algunos entornos con NAT o cortafuegos. Existen otros dos modos de operación diferentes en los que podemos ejecutar IPsec: en modo túnel o en modo transporte. En modo túnel, todo el paquete (encabezados incluidos) se encapsula y se cifra, se coloca en otro paquete y se remite al procesador VPN central. Los extremos finales descifran los paquetes y después los envían al IP correcto. Una de las ventajas de utilizar este método es que los usuarios externos pueden saber incluso cuál es el destino final del paquete cifrado. Otra ventaja es que VPN puede controlarse y administrarse desde pocos puntos centrales. El inconveniente es que requiere un hardware dedicado en ambos extremos para abrir el túnel. En modo de transporte sólo se cifran las cargas útiles del paquete; los encabezados se envían intactos, lo que produce un despliegue más facil y requiere menos infraestructura. Podemos seguir ejecutando AH cuando utilicemos el modo de transporte y verificar la dirección de origen de los paquetes. PPTP: Protocolo de túnel punto a punto El protocolo PPTP (Point-to-Point Tunneling Protocol) es un estándar desarrollado por Microsoft, 3Com y otras grandes empresas que proporcionan cifrado. En PPTP se han descubierto algunos fallos importantes que limitan su aceptación. Cuando Microsoft implemento IPsec en Windows 2000, parecía una admisión tácita que IPsec había ganado como nuevo estándar de cifrado. Sin embargo, PPTP sigue siendo un protocolo útil y económico para configurar VPN entre los PC más antiguos de Windows. L2TP: Protocolo de túnel de dos capas El protocolo L2TP (Layer Two Tunneling Protocol) es otro protocolo desarrollado para la industria y firmado por Microsoft y Cisco. Aunque se utiliza frecuentemente en dispositivos de cifrado basados en hardware, su uso en software es relativamente limitado. SSL: Capa segura de Sockets El protocolo SSL (Secure Socket Layer) se diseñó específicamente para su uso en la Web (ApacheSSL que explico en el proyecto lo contempla), aunque puede utilizarse en cualquier tipo de comunicación TCP. Originalmente lo diseño Netscape para que su explorador ayudase a la simulación de comercio electrónico. SSL proporciona cifrado de datos, autenticación en ambos extremos e integridad de mensajes utilizando certificados. Normalmente, SSL se utiliza cuando se realiza una conexión a un servidor web para que sepa que la información que enviamos se protege a lo largo del trayecto. La mayoría de las personas ni siquiera se dan cuenta de que SSL se está ejecutando en segundo plano. Normalmente sólo autentica un extremo, la parte del servidor, ya que la mayoría de usuarios finales no tienen certificados OpenPGP: Aplicación de cifrado El estandar PGP (Pretty Good Privacy o privacidad bastante buena), en el que esta basado OpenPGP, se creo para proteger la información de los usuarios ante miradas indiscretas. Historia del PGP Phil Zimmerman es un programador muy implicado en los derechos humanos. Le preocupaba que el uso creciente de los ordenadores y de las redes de comunicación facilitase a las agencias de seguridad estatales de regímenes represivos la interceptación y recopilación de información sobre los disidentes. Phil quería escribir algún software que ayudase a dichas personas a mantener su información privada y segura frente

204 186 Servidor Linux para conexiones seguras de una LAN a Internet a los brutales regimenes que los controlaban. Este software podía salvar literalmente la vida de algunas personas. Tampoco creía que su propio gobierno no observara sus datos personales cuando se desplazaban por redes interconectadas. Sabía lo fácil que podía ser para el gobierno crear sistemas para buscar cada línea de los mensajes de correo electrónico para determinadas palabras clave. Deseaba proporcionar a las personas una forma de proteger y garantizar su derecho constitucional a la privacidad. Este software lo denominó Pretty Good Privacy (PGP), algo así como una Privacidad bastante buena, ya que creía que hacía una buena labor a la hora de proteger los datos ante los servicios de inteligencia de los países más pequeños. Sin embargo, la agencia de la información de los Estados Unidos, NSA, no lo veía de esa forma. Zimmerman fue investigado por infringir las leyes federales de exportación de munición por permitir que su software se descargase fuera del país. Originalmente, Phil pretendía buscar una empresa que vendiera su innovación. Sin embargo, cuando el gobierno inició su persecución, distribuyó libremente el software por Internet para que se distribuyese por todas partes. Posteriormente formó una empresa para vender las versiones comerciales del software pero existen implantaciones de libre distribución de PGP por todo Internet. Algunas de éstas son mas populares que otras y algunas son aplicaciones que tienen funciones específicas como el cifrado de mensajes de correo electrónico. Se pueden encontrar una lista de todas estas implementaciones de PGP en GnuPG: GNU Privacy Guard En el servidor he utilizado GnuPG, una de las implementaciones bajo licencia GPL basada en el estandar OpenPGP. La gran ventaja de la versión Gnu a la versión PGP comercial es que se encuentra bajo licencia GPL y por lo tanto podemos utilizarla para cualquier aplicación, comercial o personal, asi como ampliarla o insertarla como queramos. El inconveniente es que se trata de una herramienta de línea de comandos, por lo que no tiene los bonitos complementos que ofrece la versión comercial de PGP. No obstante hay que tener cuidado, GnuPG probablemente no sea la mejor opción para usuarios no técnicos, a no ser que añadamos su propia interfaz (Gnome dispone de una). Para comprobar la versión: $gpg --version Si no lo tenemos instalado, hay que ejecutar algunas sentencias apt: #apt-get instal gnupg,... Programa GnuPG #apt-get instal gpgp,... interfaz Gnome para GnuPG Crear pares de claves Si ya las tiene creadas y quiere importarlas, #gpg --import path/filename. Si tiene separadas la clave pública y privada, el formato de archivo suele ser pubring.pkr y secring.skr Si se han de crear: 1. Escribimos: #gpg --gen-key y seguimos las instrucciones de pantalla 2. GnuPG pide el tamaño de bits de sus claves. El predeterminado es 1.024, que generalmente se considera suficiente para una criptografía sólida de clave pública. Podemos aumentar el tamaño hasta para una seguridad mucho mas fuerte. 3. Generalmente no se desea que las claves expiren, pero si tiene un caso especial en el que sólo utilizará esta clave durante un tiempo limitado, se puede establecer una fecha de finalización. 4. Por último se pide que se introduzca una contraseña que sirva de frase de paso. Atención: Es muy importante conservar copias de seguridad del par de claves en un lugar seguro, en caso de perderlas, los datos cifrados se no se podrían recuperar.

205 Capítulo 11. Comunicaciones seguras 187 $gpg --list-keys,... nos dara la lista de claves instaladas en el sistema. En el home del usuario se crea un directorio oculto.gnupg donde se almacenarán los archivos. Crear un certificado de revocación: Una vez creadas las claves, también podemos crear un certificado de revocación que se utiliza si perdemos nuestras claves o si alguien obtiene acceso a nuestra clave privada. Después podemos utilizar este certificado para revocar nuestra clave de los servidores públicos. Podemos seguir descifrando mensajes recibidos utilizando la clave pública antigua (suponiendo que no la hayamos perdido) pero nadie podrá descifrar ningún mensaje con las claves públicas incorrectas. Para crear un certificado: $gpg --output revoke.asc --gen-revoke user Donde se debe reemplazar user con la frase secreta de dicho usuario, asignada cuando generamos el par de claves. Este certificado hay que eliminarlo del disco y guardarlo en lugar seguro, ya que si alguien se hace con él, también podría hacerse con el certificado de revocación. Publicar la clave pública Se puede colocar la clave pública en un servidor de claves para que cualquiera pueda encontrarla fácilmente y enviar mensajes. Para ello es necesario ejecutar el siguiente comando: $gpg --keyserver server --send-keys user Donde se debe reemplazar server con el nombre de un servidor de claves públicas y user con la dirección de correo electrónico de la clave que desea publicar. Puede utilizar cualquier servidor de claves públicas PGP ya que todos se sincronizan con frecuencia. Existen muchos servidores de claves públicas, como por ejemplo: pgp.mit.edu, certserver.pgp.com y usa.keyserver.net.

206 188 Servidor Linux para conexiones seguras de una LAN a Internet Cifrar archivos con GnuPG Para cifrar un archivo se utiliza el comando: $gpg --output file.gpg --encrypt --recipient file.doc Reemplanzando file.gpg con el nombre de archivo resultante deseado, con la dirección de correo electrónico del usuario al que está realizando el envío y file.doc por el arcivo que se desea cifrar. Tenga en cuenta que tiene que tener la clave pública del destinatario en su repositorio para poder hacerlo. También se puede utilizar GnuPG para cifrar archivos con una criptografía simétrica, que puede utilizar para sus archivos locales que desea proteger o para alguien del que no tiene su clave pública. Para ello, utilice el comando: $gpg --output file.gpg --symmetric file.doc Reemplazado file.gpg con el archivo de salida deseado y file.doc con el nombre del archivo que desea cifrar. Descifrar archivos Para utilizar GnuPG para descifrar archivos recibidos, utilizamos el siguiente comando: $gpg --output file.doc --decrypt file.gpg Reemplazando file.doc con el nombre del archivo resultante deseado y siendo file.gpg el archivo cifrado. Tenemos que tener la clave pública del usuario para el que se ha realizado el cifrado en nuestro repositorio. Un mensaje solicitará la frase de contraseña y, una vez introducida correctamente, GnuPG producirá el archivo descifrado. Firmar archivos Tal y como he mencionado anteriormente, otro uso de GnuPG y PGP es firmar documentos para verificar su integridad, algo que podemos hacer con el siguiente comando: $gpg --output signed.doc --sign unsigned.doc Siendo signed.doc el nombre de archivo de salida resultante deseado y unsigned.doc el archivo a firmar. Este comando firma y cifra el documento y después procesa el archivo de salida signed.doc. Cuando se descifra, GnuPG también verificará el documento. Para verificar el archivo se utiliza el comando: $gpg --verify signed.doc Siendo signed.doc el archivo cifrado que desea verificar. También podemos crear firmas separadas del archivo para poder acceder a usuarios sin GnuPG e incluir la firma. Éstos son los comandos para conseguirlo: $gpg --clearsign file.doc Crea un apéndice de texto al archivo con la firma. Si no desea alterar el archivo, puede crear un archivo de firma separado, para dejar almacenada la firma o mandarla por separado, con el comando: $gpg --output sig.doc --detached-sig file.doc

207 Capítulo 11. Comunicaciones seguras 189 Web de modelo de confianza de PGP/GnuPG Tal y como hemos mencionado anteriormente, en lugar de utilizar un sistema de confianza jerárquico como los certificados digitales y su autoridad de certificados central, PGP y GnuPG utilizan una web de modelo de confianza. Al firmar las claves de las personas que conoce, puede verificar que sus claves son de confianza. Y si firman las claves de otras personas que no conoce directamente, se crea una cadena de confianza. El modelo se basa en la idea de que cualquier amigo suyo es un amigo mío. En realidad este modelo no funciona perfectamente; en algún lugar en la parte inferior de la cadena podría haber una manzana podrida, pero la idea que se esconde detrás del sistema es que se propaga orgánicamente y no requiere ninguna estructura. Debido a ello puede desmantelarse o formarse fácilmente a gran escala. La forma de establecer esta web de confianza es firmar las claves de las personas y dejar que ellos firmen la suya propia. Firmar claves y administrar claves de confianza En GnuPG, firmamos y administramos claves de confianza entrando en el modo de edición de la clave con el siguiente comando: gpg --edit-key Donde coincide con la dirección de correo electrónico de la clave que desea firmar o administrar, tiene que ser una de la claves que tenemos en el repositorio. Este comando imprime información básica sobre la clave. Dentro de este modo escriba fpr para imprimir la huella dactilar de la clave. Igual que las personas, la huella dactilar de la clave es un identificador específico para dicha clave. Asegúrese de que se trata de la clave de la persona en concreto comparándola con dicha persona por teléfono o por cualquier otro medio de comunicación. También puede comprobar si alguien más ha firmado esta clave escribiendo check. Este comando imprime una lista de otros firmantes de esta clave y puede ayudarla a decidir la validez de la misma. Cuando se quiere asegurar de que se trata de la clave de una persona en concreto, escriba sign. Este comando firma la clave de dicha persona para que cualquiera que la esté buscando sepa que confía en ella. En este modo también puede editar los niveles de las diferentes claves en su repositorio. Se introduce este modo dentro del modo de edición de la clave escribiendo trust. Así se muestra el siguiente menú: 1=Don t know (No la conozco). 2=I do NOT trust (No confio en ella). 3=I trust marginally (Confio en ella un poco). 4=I trust fully (confio en ella plenamente). d=please show me more information (Mostrar mas detalles). m=back to the main menu (Volver al menu principal). Al escoger uno de los elementos, dicha clave se marcará como realizada por nosotros. Ésta es otra forma de poderse comunicar con otros a cerca de los usuarios que tienen su nivel más alto de confianza y cuáles son usuarios en los que confía poco. PGP y GnuPG son extraordinarios para cifrar archivos. Sin embargo, y si desea cifrar todas las comunicaciones entre dos puntos? PGP no es en realidad viable para esta función, esto es realizado por el SSH, explicado en la sección anterior. Existen muchísimas más opciones que se pueden consultar con: $man gpg

208

209 Capítulo 12 Herramientas de seguridad Herramientas básicas Existen varios comandos de sistema operativo que utilizaremos con frecuencia en nuestra labor de asegurar la seguridad. No son programas de seguridad completamente independientes, sino utilidades del sistema operativo que se pueden utilizar para generar información de seguridad Ping Ping (Packet Internet Groper, que se pude traducir como buscador de paquetes en Internet) es una herramienta de diagnóstico TCP/IP. Muchos creen que el ping es como un radar submarino: un ping sale, rebota en un destino y vuelve. Aunque se trate de una buena analogía general, no describe exactamente lo que sucede cuando incluimos un ping en una máquina. Los ping utilizan un protocolo de red denominado ICMP (Internet Control Message Protocol, o Protocolo de mensajes de control de Internet). Estos mensajes se utilizan para enviar información sobre redes. Ping utiliza los tipos de mensaje ICMP 8 y 0, conocidos también como Solicitud de eco y Contestación de eco respectivamente. Cuando utilizamos el comando ping, la máquina envía una solicitud de eco a otra máquina. Si se puede acceder a la máquina que se encuentra en el otro extremo y se ejecuta una pila TCP conforme, responderá con una contestación de eco. Básicamente, las comunicaciones en un ping tienen la siguiente apariencia: El sistema A envía un ping al sistema B: solicitud de eco, Estás ahí? El sistema B recibe la solicitud de eco y envía una contestación de eco: Si, estoy aquí En una sesión ping típica, este proceso se repite varias veces para comprobar si la máquina de destino o la red están bajando paquetes. Tambieén se puede utilizar para determinar la latencia, el tiempo que tardan los paquetes entre dos puntos. También podemos obtener estos otros tipos de mensajes ICMP cuando mandamos un ping. Cada uno tiene us propio significado. Red inalcanzable Anfitrión inalcanzable Con un ping podemos saber algo más sobre un anfitrión que si simplemente está activo o no. La forma en que una máquina responde a un ping, normalmente, identifica el sistema operativo que está ejecutando. También podemos utilizar ping para generar una solicitud de búsqueda DNS, que nos proporciona el nombre del anfitrión de destino (si lo tiene), que a veces puede decirnos si esta máquina es un servidor, un enrutador o quizá una conexión telefónica o conexión de ancho de banda. Podemos mandar un ping a una dirección IP o a un nombre de dominio.

210 192 Servidor Linux para conexiones seguras de una LAN a Internet Cuadro 12.1: Opciones del comando ping Opción Descripción -c count Establece un número de pings deteminado, por defecto es infinito -f Flujo de los ping. Envía tantos paquetes como puede, tan rápido como puede. Útil para comprobar si un anfitrión esta bajando paquetes porque mostrará gráficamente a cuántos ping responde. Hay que tener cuidado con esta opción porque puede producir la caida de la red por DoS (denegación de servicio) -n No ejecuta DNS en la dirección IP. Puede aumentar la velocidad de una respuesta y cancelar los problemas de DNS cuando existen problemas de diagnóstico de la red -s size Envía paquetes de longitud size. Útil para probar cómo manipula los paquetes grandes una máquina o un enrutador. Irregularmente, los paquetes grandes se utilizan en ataques de denegación de servicios para hacer caer una máquina o desbordarla -p pattern Envía un patrón específico en el paquete ICMP de carga útil. También es útil para probar cómo responde una máquina a un estímulo ICMP inusual La tabla 12.1 incluye los modificadores y las opciones adicionales para el comando ping, que pueden resultar útiles. Un ejemplo de este comando podría ser el siguiente: # ping PING ( ): 56 data bytes 64 bytes from : icmp_seq=0 ttl=241 time=66.3 ms 64 bytes from : icmp_seq=1 ttl=241 time=130.4 ms 64 bytes from : icmp_seq=2 ttl=241 time=103.8 ms 64 bytes from : icmp_seq=3 ttl=241 time=62.0 ms 64 bytes from : icmp_seq=4 ttl=241 time=76.8 ms 64 bytes from : icmp_seq=5 ttl=241 time=61.5 ms --- ping statistics packets transmitted, 6 packets received, 0% packet loss round-trip min/avg/max = 61.5/83.4/130.4 ms Traceroute Si no lo tenemos instalado basta con hacer: #apt-get install traceroute Este comando es similar a ping pero proporciona más información sobre el anfitrión remoto. Básicamente, los pings que rastrean rutas (tracerotue) son anfitriones, pero cuando envían fuera el primer paquete, establecen la configuración TTL (tiempo de vida) del paquete en uno. Esta configuración controla la cantidad de puntos de conexión en el ordenador de la red que obtendrá antes de morir por lo que el primer paquete sólo irá al primer enrutador o máquina más allá de la nuestra en Internet y después devolverá un mensaje indicando que el paquete ha expirado. A continuación el siguiente paquete se establece con un TTL de 2, y así sucesivamente hasta llegar a nuestro objetivo, mostrándonos el trazado virtual (la ruta) que siguen los paquetes. Se resuelve el nombre de cada anfitrión encontrado a lo largo del camino para que podamos ver cómo cruza Internet el tráfico. Puede ser muy interesante comprobar cómo un paquete pasa por diferentes paises antes de llegar a su destino una fracción de segundo después y a veces, por caminos impensables y lejanos. Esta herramienta es muy práctica cuando estamos intentando localizar el origen o la ubicación de un intruso que hemos encontrado en nuestro logs o alertas. Podemos rastrear la ruta de la dirección IP y saber varias cosas sobre dicha dirección. La salida puede indicarnos si se trata de un usuario doméstico

211 Capítulo 12. Herramientas de seguridad 193 o de un usuario que se encuentra dentro de una empresa, cuál es su ISP (para poder enviarle una queja sobre el abuso), qué tipo de servicio tiene y lo rápido que es y dónde se encuentra geográficamente (a veces depende de la capacidad de descripción de los puntos intermedios). Para ver como funciona podemos ejecutar el siguiente ejemplo: # traceroute traceroute to ( ), 30 hops max, 38 byte packets 1 ( ) ms ms ms ( ) ms ms ms ( ) ms ms ms 4 tbvia1-tbest1-1.nuria.telefonica-data.net ( ) ms ms ( ) ms ms ms 6 montseny-catnix.catnix.net ( ) ms ms ms 7 upc-anella.cesca.es ( ) ms ms ms 8 * * * Como se puede observar, la lectura de traceroute es mas un arte que una ciencia, pero con el tiempo se aprende a reconocer mejor el significado de las abreviaturas. Traceroute nos ofrece mucha información para el seguimiento de una IP, si es el origen de una intrusión o un ataque. Si identificamos el ISP, con el sitio web de la empresa podemos encontrar un número de telefono o una dirección de correo y quejarnos. Los ISPs habitualmente finalizan su contrato de suministro con el cliente malintencionado. También podemos utilizar el comando whois, para buscar contactos técnicos específicos para la empresa y organización Whois El comando whois es útil para intentar localizar el contacto de alguien que está causando problemas en nuestra red. Este comando consulta los servidores de nombre de dominio principales y devuelve toda la información que tiene el registrador de nombres que le corresponda. Con esto podemos averiguar quién es el propietario de un dominio. Este comando es útil para ataques que provienen tanto de dentro de las redes de empresas como de los ISP. De cualquier modo, podemos averiguar quién es la persona responsable de dicha red y comunicarle nuestro problema. Esta solución no siempre es muy práctica, pero por lo menos podemos probar. Su sintaxis es: $whois domain-name.com,... donde domain-name.com es el nombre del dominio sobre el que estamos buscando información. Podemos observar esto en el siguiente ejemplo: $whois Whois Server version 1.3 Domain names in the.com and.net domains can now be registered with many different competing registrars. Go to for detailed information. Server Name: Registrar: TUCOWS INC. Whois Server: whois.opensrs.net Referral URL: Server Name: Registrar: ENOM, INC. Whois Server: whois.enom.com Referral URL: Server Name: Registrar: ENOM, INC. Whois Server: whois.enom.com Referral URL: Server Name: Registrar: MELBOURNE IT, LTD. D/B/A INTERNET NAMES WORLDWIDE Whois Server: whois.melbourneit.com Referral URL: >>> Last update of whois database: Wed, 25 May :39:49 EDT <<<

212 194 Servidor Linux para conexiones seguras de una LAN a Internet También nos puede pasar lo siguiente: $whois Este TLD no dispone de servidor whois, pero puede acceder a la informacion de whois en https://www.nic.es/ingles/ Con lo que, la única solución es buscar a mano en esa dirección. Solamente los dominios.com,.net y.edu se encuentran incluidos en whois. El comando whois normalmente muestra una lista de direcciones de correo electrónico, direcciones de correo postal y, a veces, números telefónicos. Nos dice cuándo se creó el dominio y si se han hecho cambios recientes en sus listados whois. Tambien muestra a los servidores de nombre de dominio responsables de ese nombre de dominio. Se puede ampliar más esta información con el siguiente comando: dig. Si administra dominios propios, debe asegurarse de que su listado whois está actualizado y es tan genérico como pueda serlo. Al colocar direcciones de correo electrónico y nombre reales en los campos de información, estamos proporcionando información que alguien del exterior puede aprovechar, ya sea para una labor social como para atacar nuestros sistemas. Es mejor utilizar direcciones de correo electrónico genéricas, dejando que los responsables reciban los mensajes enviados a esas direcciones de correo electrónico y evitar proporcionar una información valiosa sobre la estructura de nuestra organización técnica Dig El comando dig consulta en el servidor de nombres determinada información sobre un dominio. Dig es una versión actualizada del comando nslookup, que ha quedado desfasado. Podemos utilizarlo para determinar los nombre de máquinas utilizados en una red, qué direcciones IP se unen a dichas máquinas, cuál es su servidor de correo y otro tipo de información útil. La sintaxis general es: server domain type Donde server es el servidor DNS al que deseamos consultar, domain es el dominio sobre el que estamos preguntando y type es el tipo de información deseada. Como ejemplo podemos poner una dirección que viene en el manual: $dig ; <<>> DiG <<>> ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 3 ;; QUESTION SECTION: ;www.isc.org. IN A ;; ANSWER SECTION: 600 IN A ;; AUTHORITY SECTION: isc.org IN NS ns-ext.isc.org. isc.org IN NS ns-ext.lga1.isc.org. isc.org IN NS ns-ext.nrt1.isc.org. isc.org IN NS ns-ext.sth1.isc.org. ;; ADDITIONAL SECTION: ns-ext.lga1.isc.org IN A ns-ext.nrt1.isc.org IN A ns-ext.sth1.isc.org IN A ;; Query time: 696 msec ;; SERVER: #53( ) ;; WHEN: Wed May 25 21:30: ;; MSG SIZE rcvd: 192 En la tabla 12.2 podemos encontrar las opciones más usuales del comando dig.

213 Capítulo 12. Herramientas de seguridad 195 Opción AXFR A MX CNAME ANY Cuadro 12.2: Opciones del comando dig Descripción Intenta obtener todo el archivo del archivo del dominio o de la zona. Actualmente algunos servidores se han configurado para no admitir transferencias de archivos de zona, por lo que puede que tengamos que preguntar por registros específicos. Devuelve cualquier registro A. Los registros A son nombres de anfitrión individuales sobre la red Devuelve el nombre del anfitrión de correo registrado para dicho dominio. Es útil para contactar con un administrador Devuelve cualquier anfitrión CNAMED, conocidos como alias Devuelve cualquier información que puede generarse en el dominio. Algunas veces funciona cuando falla AXFR Finger Finger es un antiguo comando Unix que ya no se utiliza pero que se sigue ejecutando en muchas máquinas como servicio heredado. Originalmente se diseñó cuando Internet era un lugar cómodo y los usuarios permitían que otras personas al otro lado del mundo conociesen sus datos. La mayoría de los administradores lo eliminan de sus sistemas porque es una fuente de brechas de seguridad, pero todavía existen muchos enrutadores que lo incluyen y algunos Unix lo mantienen por defecto. Además a esto se une que muchos administradores se les olvida desinstalarlo o no saben cómo hacerlo. El comando finger permite consultar, al sistema remoto, acerca de información de sus usuarios. La sintaxis sería la siguiente: $finger También podemos especificar una dirección IP como dominio. El resultado del finger, podría ser usada por una persona malintencionada para conseguir información más relevante mediante ingeniería social. Otro uso de finger es enviar el comando sin un nombre de usuario. Así se genera una lista de todos los usuarios conectados actualmente. Con esto podemos saber quién está conectado y sus nombres reales e incluso podemos saber si están inactivos y durante cuanto tiempo. Por último presenta una lista de las estaciones y de donde provienen (si son locales o remotas), un usuario malicioso puede intentar secuestrar una de esas sesiones inactivas. Los resultados del comando los podemos ver en el siguiente ejemplo: $finger Login Name Tty Idle Login Time Office Office Phone josan Jose Antonio Escartin *:0 May 26 12:18 josan Jose Antonio Escartin pts/1 May 26 12:34 (:0.0) Y después se puede utilizar para para averiguar más sobre un usuario: $finger josan Login: josan Name: Jose Antonio Escartin Vigo Directory: /home/josan Shell: /bin/bash On since Thu May 26 12:18 (CEST) on :0 (messages off) On since Thu May 26 12:34 (CEST) on pts/1 from :0.0 No mail. No Plan. En este caso no hay demasiada información, pero otras veces podemos encontrar su correo electrónico, su plan de trabajo e incluso proyectos en los que este trabajando actualmente. También podemos hacer consultas sobre todos los que esten conectados con la siguiente opción: $finger -l

214 196 Servidor Linux para conexiones seguras de una LAN a Internet Firewall o cortafuegos Forman la primera línea de defensa frente a los intrusos que quieren entrar en nuestra red corporativa. Sin embargo, debido a la complejidad creciente y a la sofisticación de los atacantes, pueden ser unos mecanismos de defensa insuficientes si no se han configurado correctamente. Una línea de configuración errónea puede negar la protección que ofrece un cortafuegos. Un administrador muy ocupado que esté intentando establecer el acceso para los empleados errará normalmente más en la parte de acceso en lugar de realizar ahí un mejor esfuerzo para configurar la seguridad. Se necesita mucha revisión y paciencia a la hora de establecer las reglas. Los cortafuegos, se sitúan en la parte en la parte superior del sistema operativo y por lo tanto, pueden ser vulnerables a todos los ataques normales a nivel de sistema operativo. Muchos cortafuegos utilizan un servidor web como interfaz con otros usuarios y así pueden aprovecharse también de las brechas en las interfaces web. Asegurar estas defensas de primera línea es crítico y debe ser una de nuestras primeras prioridades. Por otra parte un cortafuegos solo nos protege de los ataques exteriores, contra ataques interiores no tiene nada que hacer. Debemos de asegurarnos de que nuestros sistemas están vigilados y no depender del cortafuegos para toda la seguridad de nuestra red Políticas de seguridad En algún momento, preferiblemente antes de instalar el cortafuegos, debemos comentar por escrito su proceso de actuación. Esto nos será muy útil para planificar la instalación y configuración. Este plan documenta los procesos y procedimientos subyacentes para asegurarnos de que obtenemos un beneficio. La instalación de un cortafuegos está muy bien, pero sin instalar los procesos apropiados, puede que no esté ofreciendo a la organización la seguridad prometida. Los siguientes pasos perfilan un proceso para la implantación y funcionamiento de un cortafuegos. Desarrollar una política sobre el uso de la red Trazar un mapa de los servicios internos y externos necesarios Convertir la política sobre uso de la red y los servicios necesarios en reglas para el cortafuegos Implantar y probar la funcionalidad y la seguridad. Después de esto podemos activar el cortafuegos y sentarnos a esperar las quejas. Revisar y probar las reglas del cortafuegos periódicamente. Diseñar y utilizar un proceso como éste nos ayudará a garantizar que obtenemos mucho más de la implantación de nuestro cortafuegos Modos de configuración Existen dos formas de configurar un cortafuegos: Permitir todo y bloquear lo que no deseemos Denegar todo y añadir lo permitido El método habitual, usado por la gran mayoría de administradores es empezar con denegar todo y después añadir lo que deseamos permitir a los usuarios. Automáticamente bloqueamos todo el tráfico, a no ser que se admita en la configuración específicamente. Para la mayoría de los sitios, la solución denegar todo es mucho mas seguro. Sin embargo, sólo porque optemos por esta solución no significa que nuestra red sea totalmente segura. Los ataques pueden provenir a través de cualquier brecha que hayamos creado, como la web y el correo electrónico.

215 Capítulo 12. Herramientas de seguridad IPTables Esta sección describe cómo se configura un cortafuegos con IPTables, que es la utilidad integrada en la mayoría de los sistema Linux 2.4 y posteriores. Esta utilidad nos permite crear un cortafuegos empleando comandos de nuestro sistema operativo. Es una herramienta muy eficaz, pero compleja, y normalmente se recomienda para usuarios que estén familiarizados con los cortafuegos y con el arte de configurarlos. Si es nuestro primer cortafuegos, es mejor utilizar una de las herramientas de configuración automática disponibles para crear la configuración, al menos al principio. Estas herramientas utilizan IPTables para crear un cortafuegos utilizando nuestras entradas. Sin embargo, es recomendable tener un conocimiento básico de lo que está sucediendo bajo cubierta con IPTables antes de empezar a configurar con una de las herramientas gráficas. Instalar IPTables La mayoría de los sistemas Linux con kernel 2.4 o superior tendrán integrado IPTables, por lo que no es necesario instalar ningún programa adicional, el servicio lo proporciona el propio kernel. Para comprobar si lo tenemos instalado hay que ejecutar: $iptables -L,... debería mostrar una lista con el conjunto actual de reglas. Si tenemos problemas lo más probable es que no tengamos habilitado IPTables en el kernel, tenemos que recompilar el kernel. Módulos del kernel para IPTables Para poder usar IPTables es necesario tener instalado en el kernel el netfilter y cargados una serie de módulos, depende para que usemos IPTables necesitaremos más o menos. Las opciones de IPTables se encuentran en: Networking-suport -> Networking-options -> Networkpacket-filtering. 1. Módulos básicos CONFIG NETFILTER CONFIG PACKET CONFIG IP NF CONNTRACK CONFIG IP NF FTP 2. Tabla filter (actúa como filtro) CONFIG IP NF IPTABLES CONFIG IP NF FILTER CONFIG IP NF MATCH LIMIT CONFIG IP NF MATCH MAC CONFIG IP NF MATCH MARK CONFIG IP NF MATCH MULTIPORT CONFIG IP NF MATCH TOS CONFIG IP NF MATCH TCTPMSS CONFIG IP NF MATCH STATE CONFIG IP NF TARGET REJECT

216 198 Servidor Linux para conexiones seguras de una LAN a Internet 3. Tabla Nat (actúa como router) CONFIG IP NF NAT CONFIG IP NF NAT NEEDED CONFIG IP NF NAT FTP CONFIG IP NF TARGET MASQUERADE CONFIG IP NF TARGET REDIRECT 4. Tabla mangle (altera paquetes especiales) CONFIG IP NF MANGLE CONFIG IP NF TARGET TOS CONFIG IP NF TARGET MARK CONFIG IP NF TARGET LOG CONFIG IP NF TARGET TCPMSS 5. Compatibilidad con versiones anteriores Utilizar IPTables CONFIG IP COMPAT IPCHAINS CONFIG IP COMPAT IPFWADM La idea que se esconde detrás de IPTables es crear canales de entradas y procesarlas de acuerdo con un conjunto de reglas (la configuración del cortafuegos) y enviarlas a continuación a canales de salida. En IPTables, estos canales se denominan tablas. Las tablas básicas empleadas en IPTables son: Input: Tráfico que entra en la máquina Forward: Tráfico que pasa por la máquina Prerouting: Enrutamiento previo Postrouting: Enrutamiento posterior Output: Trafico que sale de la máquina El formato que genera una declaración IPTables es: #iptables command rule-specification extensions Donde command, rule-specification y extensions son una o más opciones válidas. La tabla 12.3 incluye un resumen de las especificaciones de reglas y la tabla 12.4 de los comandos IPTables. Existen otros comandos y opciones pero éstos son los más comunes. Para obtener una lista completa de listados, consulte el manual de IPTables escribiendo: $man iptables

217 Capítulo 12. Herramientas de seguridad 199 Cuadro 12.3: Especificaciones de reglas de IPTables Regla Descripción -s address/mask!port Especifica una determindada dirección de red origen a comparar. Para designar un rago de direcciones IP se usa la notación estándar de barra oblicua. También se pude especificar un número de puerto o un rango de números de puerto colocándolos después de un signo de exclamación de apertura -d address/mask!port Especifica una determindada dirección de red destino a comparar. Para designar un rago de direcciones IP se usa la notación estándar de barra oblicua. También se pude especificar un número de puerto o un rango de números de puerto colocándolos después de un signo de exclamación de apertura --sport Puerto de origen --dport Puerto de destino --tcp-flags Flags permitidos y flags activos. Los flags son:syn ACK FIN RST URG PSH ALL NONE (hay que especificarlos separados por comas) -f Especifica paquetes fragmentados -m <modulo> Especifica un módulo de opciones especiales -m multiport Especifica que se usará el módulo de multipuertos -p protocol Especifica un determinado protocolo con el que se compara la regla. Los tipos de protocolo válidos son icmp, tcp, udp o todos (all) -i interface Especifica una interfaz de entrada -o interface Especifica una interfaz de salida -j target Indica lo que se tiene que hacer con el paqute si coincide con las especificaciones. Las opciones válidas para target son: DROP Coloca el paquete sin ninguna acción posterior REJECT Coloca el paquete y devuelve un paquete de error LOG Registra el paquete en un de error MARK Marca el paquete para una acción posterior TOS Cambia el bit TOS (Tipo de servicio) MIRROR Invierte las direcciones de origen y de destino y las envía de nuevo, básicamente rebotándolas de nuevo al origen SNAT NAT estática. Esta opción se utiliza cuando se está realizando una Traducción de dirección de red (NAT, Network Address Translation). Convierte la dirección de origen en otro valor estático DNAT NAT dinámica. Similar a la anterior pero usando un rango dinámico de direcciones IP MASQ Enmascara la IP usando una IP pública REDIRECT Redirecciona el paquete Crear un cortafuegos IPTables La mejor forma de ver como funciona es mediante un ejemplo, que situaremos dentro de un script ejecutable. Se toman las siguientes premisas: Se supone que la LAN local es , que la interfaz eth1 es la conexión LAN local y que la interfaz eth0 es la conexión WAN o Internet. 1. Empieza eliminando cualquier regla existente con el comando Flush: iptables -F FORWARD Así eliminamos cualquier regla para la cadena FORWARD, que es el conducto principal para cualquier paquete que desea pasar por el cortafuegos.

218 200 Servidor Linux para conexiones seguras de una LAN a Internet Cuadro 12.4: Comandos IPTables Comando Descripción -A chain Añade una o más reglas al final de la declaración -I chain rulenum Inserta una cadena en la ubicación rulenum. Es útil cuando deseamos que una regla reemplace a las anteriores -D chain Elimina la cadena indicada -R chain rulenum Reemplaza la regla en la ubicación rulenum con la chain proporcionada -L Lista todas las reglas en la cadena actual -F Purga todas las reglas en la cadena actual, eliminando básicamente la configuración de nuestro cortafuegos. Es recomendable su uso cuando iniciamos una configuración para asegurarnos de que ninguna regla existente entrará en conflicto con una regla nueva -Z chain Pone a cero todas las cuentas de paquetes y bytes en la cadena denominada -N chain Crea una nueva cadena con el nombre de chain -X chain Elimina la cadena especificada. Si no se especifica ninguna cadena, se eliminan todas las cadenas -P chain policy Establece la política para la cadena especificada en policy 2. Eliminamos las otras cadenas: iptables -F INPUT iptables -F OUTPUT Así eliminamos cualquier regla en su máquina local y en su cadena de salida, también podiamos haber usado: iptables -F, afectando a todas las cadenas a la vez. 3. Inserta la declaración denegar todo estándar justo al principio: iptables -P FORWARD DROP iptables -A INPUT -i eth0 -j DROP 4. Para aceptar paquetes fragmentados en IPTables, es necesario que se escriba lo siguiente explícitamente: iptables -A FORWARD -f -j ACCEPT 5. Existen dos tipos de ataques comunes que debemos bloquear en seguida. Uno es el conocido como spooofing, que se produce cuando alguien falsifica los encabezados de los paquetes IP para que parezcan paquetes externos que tienen direcciones internas. Así, alguien puede enrutar hacia nuestra LAN incluso aunque tengamos idrecciones IP privadas. El otro tipo de ataque se lleva a cabo enviando una gran cantidad de paquetes a las direcciones LAN para sobrecargar la red. Este tipo de ataque se denomina ataque smurf, ataca sobre el protocolo de transmisión de archivos. Podemos bloquear este tipo de ataques con dos sencillas declaraciones. iptables -A FORWARD -s /24 -i eth0 -j DROP iptables -A FORWARD -p icmp -i eth0 -d /24 -j DROP La primera declaración rechaza cualquier paquete que provenga de la interfaz eth0 de Internet con la dirección interna /24. Por definición, ningún paquete debería provenir de una interfaz de no confianza con una dirección de fuente privada e interna. La segunda declaración retira cualquier paquete del protocolo ICMP que provenga de la dirección exterior a la interior. También se podrían evitar las respuestas a pings externos mediante: iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

219 Capítulo 12. Herramientas de seguridad Generalmente aceptaremos el tráfico entrante basado en conexiones iniciadas desde el interior, por ejemplo, alguien que explora una página Web. Siempre que la conexión esté en curso y se haya iniciado internamente, probablemente sea correcta. Sin embargo, podemos limitar el tipo de tráfico permitido. Supongamos que sólo deseamos permitir a los empleados el acceso a la Web y al correo electrónico. Podemos especificar los tipos de tráfico para permitir sólo el que esté en una conexión ya iniciada. Podemos saber si es una conexión existente comprobando si se ha establecido la parte ACK, es decir, si se ha producido la conexión TCP de tres vías. Las siguientes declaraciones permiten el tráfico web basado en este criterio. iptables -A FORWARD -m multiport -p tcp -i eth0 -d /24 --dports www,smtp --tcp-flags SYN,ACK ACK -j ACCEPT iptables -A FORWARD -m multiport -p tcp -i eth0 -d /24 --sports www,smtp --tcp-flags SYN,ACK ACK -j ACCEPT La declaración --dports indica que sólo se permite el correo electrónico y la Web y la declaración de indicadores tcp indica que sólo deseamos paquetes con el campo ACK establecido 7. Para poder aceptar conexiones de entrada desde el exterior sólo en determinados puertos, como un mensaje correo electrónico entrante en nuestro servidor de correo, usamos este tipo de declaración: iptables -A FORWARD -m multiport -p tcp -i eth0 -d /24 --dports smtp --syn -j ACCEPT El indicador de múltiples puertos -m indica a IPTables que vamos a emitir una declaración de coincidencia para los puertos. La declaración -syn le indica que se permiten los paquetes SYN, lo que significa que se deben iniciar las conexiones TCP. Y el indicador --dports permite sólo el tráfico de correo SMTP. 8. Podemos permitir que los usuarios inicien conexiones de salida pero sólo en los protocolos que deseamos que usen. Aquí podemos evitar que los usuarios usen FTP y otros programas no esenciales. Las direcciones que contienen todo ceros son una abreviatura de cualquier dirección. iptables -A FORWARD -m multiport -p tcp -i eth0 -d dports www,smtp --syn -j ACCEPT 9. Necesitaremos permitir determinados paquetes UDP entrantes. UDP se usa para DNS y si lo bloqueamos, los usuarios no podrán resolver direcciones. Como no disponen de un estado como los paquetes TCP, no podemos fiarnos de la revisión de los indicadores SYN o ACK. Deseamos admitir UDP sólo en el puerto 53, por lo que especificaremos: domain (una variable integrada para el puerto 53), como único puerto admisible. Las declaraciones que debemos usar son: iptables -A FORWARD -m multiport -p udp -i eth0 -d /24 --dports domain -j ACCEPT iptables -A FORWARD -m multiport -p udp -i eth0 -s /24 --sports domain -j ACCEPT iptables -A FORWARD -m multiport -p udp -i eth1 -d dports domain -j ACCEPT iptables -A FORWARD -m multiport -p udp -i eth1 -s sports domain -j ACCEPT Las dos primeras declaraciones permiten los datagramas UDP entrantes y las otras dos declaraciones permiten las conexiones salientes.

220 202 Servidor Linux para conexiones seguras de una LAN a Internet 10. También podemos especificarlos para los paquetes ICMP. Lo que pretendemos es permitir todo tipo de ICMP interno hacia el exterior, pero sólo determinados tipos como la contestación de eco hacia el interior, algo que podemos conseguir con las siguientes instrucciones: iptables -A FORWARD -m multiport -p icmp -i eth0 -d /24 --dports 0,3,11 -j ACCEPT iptables -A FORWARD -m multiport -p icmp -i eth1 -d dports 8,3,11 -j ACCEPT Es mas simple si lo controlamos a la entrada, haciendo un DROP de los echos de icmp, así estas dos instrucciones no son necesarias. 11. Por último, vamos a establecer el inicio de sesión para poder ver en los registros lo que se ha rechazado. Es mejor revisar estos registros de vez en cuando, incluso aunque no exista ningún problema, para tener una idea de los tipos de tráfico que se han rechazado. Si observa paquetes rechazados repetidamente de la misma red o dirección, puede que esté siendo atacado. Existe una declaración para registrar cada tipo de tráfico: iptables -A FORWARD -m tcp -p tcp -j LOG iptables -A FORWARD -m udp -p udp -j LOG iptables -A FORWARD -m icmp -p icmp -j LOG Con esto conseguiríamos una protección a nivel de cortafuegos ante los ataques más comunes de internet. El siguiente código es el ejemplo en un script. Cuadro 12.5: Ejemplo de IPTables #! /bin/bash # Punto 1 iptables -F FORWARD # Punto 2 iptables -F INPUT iptables -F OUTPUT # Punto 3 iptables -P FORWARD DROP iptables -A INPUT -i eth0 -j DROP # Punto 4 iptables -A FORWARD -f -j ACCEPT # Punto 5 iptables -A FORWARD -s /24 -i eth0 -j DROP #iptables -A INPUT -p icmp --icmp-type echo-request -j DROP - OMITIDO, para evitar el punto 10 iptables -A INPUT -p icmp --icmp-type echo-request -j DROP # Punto 6 iptables -A FORWARD -m multiport -p tcp -i eth0 -d /24 --dports www,smtp --tcp-flags SYN,ACK ACK -j ACCEPT iptables -A FORWARD -m multiport -p tcp -i eth0 -d /24 --sports www,smtp --tcp-flags SYN,ACK ACK -j ACCEPT # Punto 7 iptables -A FORWARD -m multiport -p tcp -i eth0 -d /24 --dports smtp --syn -j ACCEPT # Punto 8 iptables -A FORWARD -m multiport -p tcp -i eth0 -d dports www,smtp --syn -j ACCEPT # Punto 9 iptables -A FORWARD -m multiport -p udp -i eth0 -d /24 --dports domain -j ACCEPT iptables -A FORWARD -m multiport -p udp -i eth0 -s /24 --sports domain -j ACCEPT iptables -A FORWARD -m multiport -p udp -i eth1 -d dports domain -j ACCEPT iptables -A FORWARD -m multiport -p udp -i eth1 -s sports domain -j ACCEPT # Punto 10 - OMITIDO #iptables -A FORWARD -m multiport -p icmp -i eth0 -d /24 --dports 0,3,11 -j ACCEPT #iptables -A FORWARD -m multiport -p icmp -i eth1 -d dports 8,3,11 -j ACCEPT # Punto 11 iptables -A FORWARD -m tcp -p tcp -j LOG iptables -A FORWARD -m udp -p udp -j LOG iptables -A FORWARD -m icmp -p icmp -j LOG Es necesario darle permisos de ejecución: #chmod 700 nombre_script

221 Capítulo 12. Herramientas de seguridad 203 El resultado de nuestro cortafuegos después de ejecutar el script sería el siguiente: # iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- anywhere anywhere DROP icmp -- anywhere anywhere icmp echo-request Chain FORWARD (policy DROP) target prot opt source destination ACCEPT all -f anywhere anywhere DROP all /24 anywhere ACCEPT tcp -- anywhere /24 multiport dports www,smtp tcp flags:syn,ack/ack ACCEPT tcp -- anywhere /24 multiport sports www,smtp tcp flags:syn,ack/ack ACCEPT tcp -- anywhere /24 multiport dports smtp tcp flags:syn,rst,ack/syn ACCEPT tcp -- anywhere multiport dports www,smtp tcp flags:syn,rst,ack/syn ACCEPT udp -- anywhere /24 multiport dports domain ACCEPT udp /24 anywhere multiport sports domain ACCEPT udp -- anywhere multiport dports domain ACCEPT udp anywhere multiport sports domain LOG tcp -- anywhere anywhere tcp LOG level warning LOG udp -- anywhere anywhere udp LOG level warning LOG icmp -- anywhere anywhere icmp any LOG level warning Chain OUTPUT (policy ACCEPT) target prot opt source destination Enmascarar IP con IPTables Cuando se diseño Internet originalmente, se reservaron varios bloques de direcciones para su uso en redes privadas. Estas direcciones nos se van a enrutar a través de Internet y se pueden utilizar sin preocuparse de que vayan a tener conflictos con otras redes. Los rangos de direcciones privadas son: Al utilizar estas direcciones en nuestra LAN interna y tener una IP externa enrutable en nuestro cortafuegos, estamos protegiendo con efectividad nuestras máquinas internas ante el acceso desde el exterior. Podemos proporcionar esta capa adicional de protección fácilmente con IPTables utilizando el enmascarado IP. El encabezado IP interno se desprende en el cortafuegos y se reemplaza con un encabezado que muestra el cortafuegos como el IP de origen. A continuación se envía el paquete de datos a su destino con una dirección IP de origen de la interfaz pública del cortafuegos. Cuando vuelve de nuevo, el cortafuegos recuerda el IP interno al que se dirige y vuelve a dirigirlo para una entrega interna. Este proceso también se conoce como Traducción de dirección de red (NAT, Network Address Translation). Con las siguientes declaraciones podemos hacerlo en IPTables: iptables -t nat -P POSTROUTING DROP iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE El indicador MASQUERADE se puede abreviar como MASQ. Conclusiones Bueno, ahora ya sabemos cómo crear un cortafuegos básico. Se trata de una configuración bastante sencilla y las posibles variaciones son infinitas. Podemos enviar determinados puertos a servidores internos para que no tengan una dirección IP pública. Podemos colocar otra tarjeta de red en el servidor y convertirla en una interfaz DMZ para servidores con dirección pública. Existen libros completos sobre la configuración avanzada de cortafuegos y muchas listas de correo. Existen otros métodos mas simples y rápidos de crear un cortafuegos, sin introducir comandos y tener que recordar la sintaxis. Muchas herramientas crean las declaraciones del cortafuegos utilizando una interfaz gráfica, es decir, de forma automática. Para simplificar el método utilizare el módulo Firewall para Webmin, basado en IPTables.

222 204 Servidor Linux para conexiones seguras de una LAN a Internet Squid: Proxy transparente Lo primero es tener el IPTables y el squid funcionando. Con las opciones NAT de netfilter en el kernel. Veamos el proceso: Activamos el reenvió de paquetes: echo 1 > /proc/sys/net/ipv4/ip_forward Hacemos que el NAT coja todas las peticiones que vayan a un puerto (por ejemplo el 80) y las redirija al puerto del proxy (por ejemplo 3128): iptables -t nat -A PREROUTING -s $NUESTRA_RED -p tcp --dport 80 -j REDIRECT --to-port 3128 Instalación del proxy squid: #apt-get install squid webmin-squid El fichero de configuración del squid es: /etc/squid/squid.conf. Lo configuramos para permitir el acceso del proxy a nuestra red interna: En #ACCESS CONTROLS: acl redinterna src / En #Only allow cachemgr access from localhost, hay que poner antes de las denegaciones: http_access allow redinterna Y en #HTTPD-ACCELERATOR OPTIONS: httpd_accel_host virtual httpd_accel_uses_host_header on httpd_accel_with_proxy on También podemos configurar el proxy en modo gráfico mediante la herramienta de administración Webmin. Para cargar el modulo realizaremos un apt: #apt-get install webmin-squid Ahora veamos un ejemplo del archivo /etc/squid/squid.conf donde se limita el ancho de banda, para la conexión: Cuadro 12.6: Ejemplo del archivo /etc/squid/squid.conf #Sacado de #Todas las opciones de este archivo se encuentran muy bien documentadas en el #propio squid.conf asi #como en #Los puertos por los que escuchara nuestro Squid. http_port 8080 icp_port 3130 #los cgi-bin no se cachearan. acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY #La memoria que usara Squid. Bueno, Squid usara mucha mas que esa. cache_mem 16 MB #250 significa que Squid usara 250 megabytes de espacio en disco. cache_dir ufs /cache #Lugares en los que iran los archivos de bitacora de Squid. cache_log /var/log/squid/cache.log cache_access_log /var/log/squid/access.log cache_store_log /var/log/squid/store.log cache_swap_log /var/log/squid/swap.log #Cuantas veces rotar los archivos de bitacora antes de borrarlos. #Acuda a la FAQ para m\ as informaci\ on. logfile_rotate 10 redirect_rewrites_host_header off cache_replacement_policy GDSF acl localnet src / acl localhost src / acl Safe_ports port acl CONNECT method CONNECT acl all src /

223 Capítulo 12. Herramientas de seguridad 205 http_access allow localnet http_access allow localhost http_access deny!safe_ports http_access deny CONNECT http_access deny all maximum_object_size 3000 KB store_avg_object_size 50 KB #Configure esto si quiere que su proxy funcione de manera transparente. #Eso significa que por lo general no tendra que configurar todos los #navegadores de sus clientes, aunque tiene algunos inconvenientes. #Si deja esto sin comentar no pasara nada peligroso. httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on #Todos los usuarios de nuestra LAN seran vistos por los servidores web #externos como si usasen Mozilla en Linux. anonymize_headers deny User-Agent fake_user_agent Mozilla/5.0 (X11; U; Linux i686; en-us; rv:0.9.6+) Gecko/ #Para acelerar aun mas nuestra conexion ponemos dos lineas similares a las #de mas abajo. Apuntaran a un servidor proxy [parent] que usara nuestro propio #Squid. No olvide cambiar el servidor por uno mas rapido para usted. #Puede utilizar ping, traceroute y demas herramientas para comprobar la #velocidad. Asegurese de que los puerto http e icp son los correctos. #Descomente las lineas que comienzan por "cache_peer" de ser necesario. #Este es el proxy que va a usar para todas las conexiones... #cache_peer w3cache.icm.edu.pl parent no-digest default #...excepto para las direcciones e IPs que comiencen por "!". #No es buena idea usar un mayor #cache_peer_domain w3cache.icm.edu.pl!.pl!7thguard.net! #Esto resulta util cuando queremos usar el Cache Manager. #Copie cachemgr.cgi al cgi-bin de su servidor web. #Podra acceder a el una vez lo haya hecho introduciendo en un navegador #la direccion cache_mgr cachemgr_passwd secret_password all #Este es el nombre de usuario con el que trabajara nuestro Squid. cache_effective_user squid cache_effective_group squid log_icp_queries off buffered_logs on #####DELAY POOLS #Esta es la parte mas importante para configurar el trafico entrante con #Squid. Para una descripcion detallada acuda al archivo squid.conf o a la #documentacion de #No queremos limitar las descargas en nuestra red local. acl magic_words1 url_regex -i #Queremos limitar la descarga de este tipo de archivos #Ponga todo esto en una unica linea acl magic_words2 url_regex -i ftp.exe.mp3.vqf.tar.gz.gz.rpm.zip.rar.avi.mpeg.mpe.mpg.qt.ram.rm.iso.raw.wav.mov #No bloqueamos.html,.gif,.jpg y archivos similares porque por lo general #no consumen demasiado ancho de banda. #Queremos limitar el ancho de banda durante el dia permitiendo #el ancho de banda completo durante la noche. #Cuidado! con el acl de abajo sus descargas se interrumpiran #a las 23:59. Lea la FAQ si quiere envitarlo. acl day time 09:00-23:59 #Tenemos dos delay_pools diferentes #Acuda a la documentaci\ on de Squid para familiarizarse #con delay_pools y delay_class. delay_pools 2 #Primer delay pool #No queremos retrasar nuestro trafico local #Hay tres cases de pools; aqui solo hablaremos de la segunda. #Primera clase de retraso (1) de segundo tipo (2). delay_class 1 2 #-1/-1 significa que no hay limites. delay_parameters 1-1/-1-1/-1 #magic_words1: que ya hemos puesto antes delay_access 1 allow magic_words1 #Segundo delay pool. #Queremos retrasar la descarga de los archivos mencionados en magic_words2. #Segunda clase de retraso (2) de segundo tipo (2). delay_class 2 2 #Los numeros siguientes son valores en bytes; #Debemos recordar que Squid no tiene en cuenta los bits de inicio/parada #5000/ son valores para la red al completo #5000/ son valores para la IP independiente #una vez los archivos descargados exceden los bytes, #(o el doble o el triple) #las descargas proseguiran a 5000 bytes/s delay_parameters / / #Ya hemos configurado antes el dia de 09:00 a 23:59. delay_access 2 allow day delay_access 2 deny!day delay_access 2 allow magic_words2 #EOF

224 206 Servidor Linux para conexiones seguras de una LAN a Internet Bastille Linux: Herramienta de seguridad Una vez instalado nuestro sistema operativo, necesitamos fortalecerlo para utilizarlo como sistema de seguridad. Este proceso implica cerrar los servicios innecesarios, restringir los permisos y, en general, minimizar las partes de la máquina que están expuestas. Los detalles de este proceso serán diferentes dependiendo del uso pretendido de la máquina. Antes el fortalecimiento solía ser un proceso manual intensivo a medida que se probaban y testeaban las posibles modificaciones. Sin embargo, en Linux, existen herramientas que realizarán automáticamente un fortalecimiento del sistema. Así se puede ahorrar tiempo sin olvidarnos de nada. En este caso utilizaré la herramienta Bastille Linux, disponible en la distribución Debian. A pesar de lo que pueda parecer, no se trata de un sistema operativo independiente, sino de un conjunto de secuencias de comandos que llevan a cabo determinadas configuraciones del sistema basándose en nuestras indicaciones. Simplifica extraordinariamente el proceso de fortalecimiento y lo reduce a responder a algunas preguntas. Si necesitamos más información la podemos obtener en la página web oficial: Ejecución Es muy recomendable instalar esta herramienta, primeramente, en un entorno de pruebas. Este tipo de programas pueden desconectar los servicios necesarios para el funcionamiento de algún servidores, produciendo cortes de servicio o detención del mismo. Cuando haya probado su efecto y verificado su estabilidad, podremos ejecutar la herramienta en nuestro entorno de trabajo. Para instalar hay que ejecutar: #apt-get install bastille Para poder usar la aplicación deben de estar instalados los siguientes paquetes: Perl o superior Perl TK Module o superior Perl Curses Module 1.06 o superior Para ejecutar Bastille linux: #/usr/sbin/bastille,... para el modo gráfico. #/usr/sbin/bastille -c,... para el modo texto (curses). También podemos ejecutar Bastille en lo que se denomina modo no interactivo. Este modo ejecuta Bastille automáticamente, sin hacer preguntas, desde un archivo de configuración preasignado. cada vez que ejecutamos Bastille, se crea un archivo de configuración. A continuación podemos utilizarlo para ejecutar Bastille en otras máquinas en modo no interactivo. Esta técnica es útil para cerrar rápidamente múltiples máquinas. Cuando disponga del archivo de configuración con los elementos deseados, simplemente cargue Bastille en las máquinas adicionales y copie el archivo de configuración en dichas máquinas (o deje que accedan al archivo por la red). Para ejecutarlo escribimos: #bastille non-interactive config-file Donde config-file es el nombre y la ubicación del archivo de configuración que deseamos utilizar.

225 Capítulo 12. Herramientas de seguridad Modos de funcionamiento Normalmente ejecutaremos Bastille en modo interactivo. En este modo responderemos a una serie de preguntas sobre cómo vamos a utilizar la máquina. Basándose en las respuestas, Bastille desconecta los servicios innecesarios o restringe los privilegios de los usuarios y servicios. Nos pregunta cosas como Desea utilizar esta máquina como acceso a máquinas Windows?. Si respondemos negativamente, desconecta el servidor Samba, que permite a nuestra máquina interactuar con las máquinas Windows. Samba podría introducir algunas brechas de seguridad potenciales en nuestro sistema, por lo que es recomendable desconectarlo si no lo necesitamos. Si tenemos que ejecutar algunos servidores (por ejemplo, SSH), intentará establecerlos con privilegios limitados o utilizando un chrooted jail, es decir, si un servidor tiene que ejecutarse con acceso a la raíz del sistema, tiene una capacidad limitada de afectar a otras partes del sistema, lo que suaviza los efectos de cualquier ataque con éxito sobre dicho servicio. A cada pregunta le acompaña una pequeña explicación de porqué esa configuración es importante, así podemos decidir si es apropiada para nuestra instalación. También existe un botón de detalle con información adicional. Bastille adopta la solución de intentar educar al administrador mientras está cerrando el sistema. Cuanta más información tenga, mejor armado estará para los deberes de seguridad de su red. Si no está seguro, puede saltarse una pregunta y volver a ella más adelante. No hay que preocuparse, se ofrece una oportunidad final para terminar todas las configuraciones. También puede ejecutar Bastille posteriormente después de investigar sobre la respuesta y cambiar la configuración. Otra ventaja es que Bastille nos ofrece una lista de cosas para hacer al final de la sesión de fortalecimiento para cualquier elemento del que Bastille no se haya ocupado Copias de seguridad Para realizar las copias de seguridad necesarias en nuestro servidor y dependiendo de las necesitades de nuestra empresa, necesitamos disponer de una medio seguro donde poder almacenarlas. Para ello, podemos aplicar una las siguientes soluciones: Almacenar las copias en el propio disco físico del servidor (no se recomienda). Utilizar cintas de backup. Utilizar DVDs de backups. Si realizamos las copias en el propio disco o en cintas de backup, el proceso puede ser automatizado mediante el cron del sistema Dispositivos de cinta Las unidades de cinta SCSI, usan el siguiente esquema de nombres: /dev/stx : Dispositivo de cinta SCSI de rebobinado automático; x es el número de la unidad de cinta. Las unidades de cinta se numeran por su orden en la controladora SCSI. /dev/nstx : Dispositivo de cinta SCSI sin rebobinado automático; x es el número de la unidad de cinta. Las unidades de cinta se numeran por su orden en la controladora SCSI. Probablemente tendremos en nuestro sistema un dispositivo de enlace simbólico a la cinta: /dev/tape.

226 208 Servidor Linux para conexiones seguras de una LAN a Internet Mt El programa mt proporciona controles simples para la unidad de cinta, como el rebobinado, expulsión o la búsqueda de un archivo. En el contexto de las copias de seguridad, mt es muy útil como mecanismo de rebobinado y búsqueda. Todas las acciones de mt se especifican en la línea de comandos. El cuadro 12.7 muestra los parámetros del comando. Cuadro 12.7: Opciones del comando mt, para manipular cintas de backup Parámetros Descripción -f <dispositivo> Especifica el dispositivo de cinta. fsf <cuenta> Avanza un número (cuenta) de archivos. La cinta se coloca en el primer bloque del archivo siguiente; por ejemplo, fsf 1 debería dejar la cabeza preparada para leer el segundo archivo de la cinta. asf <cuenta> Posiciona la cinta al comienzo del archivo indicado por cuenta. El posicionamiento se hace primero con un rebobinado de la cinta y después se avanza cuenta archivos. rewind Rebobina la cinta. erase Borra la cinta. status Da el estado de la cinta. offline Deja la cinta inactiva y, si es aplicable, la descarga. load Carga la cinta (aplicable a cambiadores de cinta). lock Bloquea la puerta de la unidad (sólo aplicable a ciertas unidades de cinta). unlock Desbloquea la puerta de la unidad (sólo aplicable a ciertas unidades de cinta). Podemos ver los siguientes ejemplos: #mt -f /ver/nst0 rewind,... Para rebobinar la cinta en /dev/nst0. #mt -f /dev/nst0 asf 2,... Mueve la cabeza lectora, para leer el tercer archivo de la cinta Dump y Restore Las herramientas que utilizaremos serán dos: dump restore Para instalarlas ejecutaremos un apt: #apt-get install dump La herramienta dump trabaja haciendo una copia de un sistema de archivos entero. La herramienta restore puede tomar esa copia y restaurarla. Para soportar backups incrementales, dump usa el concepto de niveles de dump. Un nivel de dump de 0 significa una copia de seguridad completa. Cualquier nivel de dump superior a 0 es un incremento relativo a la última vez que se realizó un dump con un nivel de dump menor. Por poner un ejemplo, si consideramos que tenemos tres dump: el primero de nivel 0, el segundo de nivel 1 y el tercero también de nivel 1. El primer dump es una copia completa. El segundo dump contiene todos los cambios hechos desde el primer dump. El tercer dump tiene todos los cambios desde el primer dump. La utilidad dump almacena toda la información sobre sus operaciones en el archivo /etc/dumpdates. Este archivo lista cada copia de seguridad de un sistema de archivos, cuándo se hizo y de qué nivel. Dada esta información, podemos determinar que copia debemos restaurar.

227 Capítulo 12. Herramientas de seguridad 209 En el cuadro 12.8 se muestran los parámetros más usuales del comando dump: Cuadro 12.8: Parámetros del comando dump Parámetro Descripción -n El nivel de dump, donde n es un número entre 0 y 9. -b <tam_bloque> Configura el tamaño del bloque de dump a tam bloque, el cual se mide en kilobytes. Si hacemos copias de archivos muy grandes, al usar un tamaño de bloque mayor aumentará el rendimiento. -B <cuenta> Especifica el número (cuenta) de registros por cinta. Si hay más datos sobre los que hacer dump, que espacio de cinta, dump muestra un símbolo del sistema pidiendo que se inserte una cinta nueva. -f <archivo> Especifica una localización (archivo) para el archivo dump resultado. Podemos hacer el archivo dump como un archivo normal que reside en otro sistema de archivos, o podemos escribirlo en un dispositivo de cinta. -u Actualiza el archivo /etc/dumpdates después de un dump con éxito. -d <densidad> La densidad de una cinta en bits por pulgada. -s <tam> El tamaño (tam) de la cinta en pies. Para colocar el backup sobre una cinta, comprimiendolo, podemos hacer lo siguiente: #dump -O -f - /dev/hda1 gzip --fast -c > /dev/st0 Hay que tener cuidado con dump, se considera peligroso hacer dump de sistema de archivos que estén en uso. Para asegurarse de que no estan en uso, hay que desmontar el sistema de archivos primero. Desafortunadamente, muy poca gente se puede permitir el lujo de desmontar un sistema el tiempo necesario para hacer una copia de seguridad. Lo mejor es realizar la poca atractiva tarea de verificar las copias de seguridad sobre una base normal. La verificación se hace comprobando que el programa restore puede leer completamente la copia y extraer los archivos de ella. Es tedioso y nada divertido, pero muchos administradores de sistemas perdieron su trabajo después de copias de seguridad erróneas (y no queremos ser uno de ellos). Durante mis estudios en la FIB (Facultad de Informática de Barcelona) coincidí con varios profesores que eran, al mismo tiempo, muy buenos administradores de sistemas. Y uno de ellos, Alex Ramirez, nos dijo la siguiente frase, La primera tarea de un administrador de sistemas es hacer copias de seguridad, nadie quiere hacerlas y por eso nos pagan a nosotros para que las hagamos. Las copias de seguridad, sólo se hechan de menos cuando nadie las ha hecho. Uso de dump para hacer backup de un sistema entero La utilidad dump trabaja haciendo un archivo de un sistema de archivos. Si el sistema entero contiene varios sistemas de archivos, necesitaremos ejecutar dump por cada sistema de archivos. Puesto que dump crea su salida como un gran archivo independiente, podemos almacenar varios dumps en una sola cinta mediante el uso de un dispositivo de cinta sin rebobinado automático, otra solución factible es el uso de DVDs grabables. Primero tenemos que decidir sobre qué sistemas de archivos vamos a hacer la copia, está información está en el archivo /etc/fstab. Si por ejemplo queremos hacer un backup de: /dev/hda1, /dev/hda3, /dev/hda5 y /dev/hda6. Y grabarlo en /dev/nst0, comprimiendo los archivos dump, debemos ejecutar los siguientes comandos: #mt -f /dev/nst0 rewind #dump -Ouf - /dev/hda1 gzip --fast -c > /dev/st0 #dump -Ouf - /dev/hda3 gzip --fast -c > /dev/st0 #dump -Ouf - /dev/hda5 gzip --fast -c > /dev/st0 #dump -Ouf - /dev/hda6 gzip --fast -c > /dev/st0 #mt -f /dev/nst0 rewind #mt -f /dev/nst0 eject

228 210 Servidor Linux para conexiones seguras de una LAN a Internet Uso de restore El programa restore lee los archivos dump y extrae archivos y directorios individuales de ellos. Aunque restore es una herramienta de línea de comandos, ofrece un modo interactivo muy intuitivo que le mueve a través de la estructura de directorios de la cinta. El cuadro 12.9 muestra las opciones de línea de comandos de la utilidad restore. Cuadro 12.9: Opciones del comando RESTORE Opción Descripción -i Activa el modo interactivo de restore. La utilidad leerá el contenido del directorio de la cinta y nos dará una interfaz parecida a la shell en la cual nos podemos mover entre los directorios y señalar los archivos que queramos, restore irá al dump y los restaurará. Este modo es útil para recuperar archivos individuales, especialmente si no estámos seguro en qué directorio están. -r Reconstruye un sistema de archivos. en el caso de que pierda todo un sistema de archivos (por ejemplo, por un fallo de disco), puede recrear un sistema de archivos vacío y restaurar todos los archivos y directorios del archivo dump. -b tam_bloque Configura el tamaño del bloque de dump a tam bloque kilobytes. Si no proporciona esta información, restore se la pedirá. -f nom_archivo Lee un dump del archivo nom archivo. -T directorio Especifica el espacio de trabajo temporal (directorio) para el restore. Por defecto es /tmp. -v La opción verbal; muestra cada paso del restore. -y En el caso de un error, reintenta automáticamente en lugar de preguntar al usuario si quiere probar de nuevo. Un restore típico podría ser el siguiente: #restore -ivf /dev/st0 Donde tenemos el archivo dump en /dev/st0, visualizaremos cada paso que tome restore y entraremos en una sesión interactiva donde decidiremos qué archivos se restauran. Y para un restore completo desde la cinta /dev/st0, si perdemos el sistema de la unidad SCSI /dev/sda1 que contiene /home, sustituimos la unidad y lo recrear ayudandonos con mke2fs. #mke2fs /dev/sda1 #mount /dev/sda1 /home #cd /home #restore -rf /dev/st Configuración gráfica de backups, interfaz Webmin Para realizar de una forma mucho más simple las copias de seguridad, podemos utilizar la herramienta de configuración por web: Webmin. Para instalar el módulo de copias de seguridad ejecutaremos un apt: #apt-get install webmin-fsdump Este módulo permite hacer backups de: Sistemas EXT2 Sistemas EXT3 Archivos TAR

229 Capítulo 12. Herramientas de seguridad 211 Figura 12.1: Módulo Webmin para realizar Backups del sistema K3B: Grabación de CDs y DVDs Si queremos guardar las copias en CDs o DVDs, nos resultará muy útil una interfaz gráfica simple e intuitiva, como la que nos ofrece el programa K3B basado en el entorno KDE. Lo podemos instalar con un apt: #apt-get install k3b Y para ejecutarlo introduciremos el comando: #k3b Figura 12.2: Programa K3B para grabar CDs y DVDs

230

231 Capítulo 13 Sistemas de detección de intrusiones Los Sistemas de detección de intrusiones (IDS, Intrusion Detection System) son básicamente sniffers modificados que pueden ver todo el tráfico de la red e intentan detectar un tráfico potencialmente dañino, alertándonos de ello cuando aparezca. La forma principal de conseguirlo es examinando el tráfico de entrada e intentándolo comparar con una base de datos de actividades dañinas conocidas denominadas firmas. Esta utilización de las firmas es muy similar a la forma en que funcionan los programas antivirus. La mayoría de los tipos de ataques tienen una apariencia muy distintiva a nivel TCP/IP. Un IDS puede definir ataques basándose en las direcciones IP, los números de puertos, el contenido y cualquier número de criterios. Existe otra forma de realizar una detección de intrusión en el nivel del sistema comprobando la integridad de los archivos clave y asegurándose de que no se ha realizado ningún cambio en dichos archivos. También existen otras tecnologías emergentes que combinan el concepto de detección de intrusión y cortafuegos o realizan una acción posterior más allá de la pura detección. Esta sección esta basada en el libro [How05] Tipos de IDS Existen tres tipos diferenciados de IDS: NIDS: IDS de red, basado en firmas IDS basado en actividad anómala IPS: IDS que responde a las alertas con acciones automáticas En las siguientes secciones se explican en detalle NIDS (Network Intrusion Detection System) Un sistema detección de intrusión de red (NIDS, Network Intrusion Detection System) puede protegernos contra los ataques que entran a través del cortafuegos hasta la LAN Interna. Los cortafuegos pueden estar mal configurados, permitiendo la introducción de tráfico no deseado en nuestra red. Incluso cuando funcionan correctamente, los cortafuegos normalmente dejan pasar algún tráfico de aplicación que puede ser peligroso. Lo que llega a los puertos del cortafuegos, y está permitido por las reglas, se envía a los servidores internos provocando un tráfico potencialmente dañino. Un NIDS puede comprobar dicho tráfico y marcar los paquetes sospechosos. Configurado correctamente puede hacer una doble comprobación de las reglas de nuestro cortafuegos y proporcionarnos una protección adicional para los servidores de aplicación. Aunque es útil para protegernos contra ataques externos, una de las ventajas principales de un NIDS es cazar los ataques y la actividad sospechosa de orígenes internos. El cortafuegos nos protegerá de muchos ataques externos, sin embargo, cuando el atacante se encuentra en la red local puede hacer muy poco.

232 214 Servidor Linux para conexiones seguras de una LAN a Internet Sólo puede ver el tráfico que lo atraviesa desde el exterior y son ciegos respecto a la actividad de la LAN. Podemos pensar en los NIDS y en los cortafuegos como dispositivos de seguridad complementarios, el cerrojo de la puerta principal y el sistema de seguridad de nuestra red. Uno protege nuestro perímetro y el otro nuestro interior. Hay una buena razón para vigilar nuestro tráfico interno de red. Las estadísticas demuestran que un setenta por ciento de los incidentes en crímenes informáticos provienen de un origen interno. Por mucho que nos guste pensar que nuestros compañeros no van a hacer nada para dañarnos, a veces no es el caso, los intrusos internos no siempre son piratas informáticos que trabajan por la noche. Pueden ser desde un administrador de sistemas contrariado, un empleado descuidado o hasta la señora de la limpieza. El simple hecho de descargar un archivo o de abrir un archivo adjunto de un mensaje de correo electrónico puede cargar un troyano que creará toda una brecha en nuestro cortafuegos para todo tipo de fechorías. Con un NIDS, podemos captar este tipo de actividad así como otros problemas en cuanto se producen. Bien ajustado, puede ser el sistema de alarma de nuestra red IDS (Detección de actividades anómalas) En lugar de utilizar firmas estáticas, que sólo pueden captar una actividad dañina cuando se define explícitamente, estos sistemas de nueva generación registran los niveles normales para distintos tipos de actividad en nuestra red. Si observa una súbita oleada de tráfico FTP, nos avisará. El problema con este tipo de sistemas es que son muy propensos a los falsos positivos, éstos se producen cuando se dispara una alerta aunque la actividad que está marcando es normal y permitida en nuestra LAN, por ejemplo una persona que está descargando un archivo particularmente grande activará la alarma. Así mismo se tarda mucho en que un IDS de detección de anomalías desarrolle un modelo preciso de la red. Al principio, el sistema generará tantas alertas que es casi inútil. Adicionalmente, estos tipos de sistemas de detección de intrusión pueden ser engañados por alguien que conozca bien la red. Si los piratas informáticos son suficientemente furtivos y hábiles utilizarán protocolos usados en nuestra LAN y no activarán este tipo de sistemas. Sin embargo, una gran ventaja es que no tiene que actualizar firmas continuamente. A medida que esta tecnología madure y se haga más inteligente, probablemente se convierta en una forma muy popular de detectar intrusiones. Un ejemplo de IDS basado en actividades anómalas y de libre distribución es Spade, un módulo gratuito para el NIDS Snort IPS (Intrusion Prevention System) Un nuevo tipo de NIDS denominado Sistema de prevención de intrusión (IPS, Intrusion Prevention System) se está publicitando como la solución para la seguridad de las empresas. Este tipo de sistemas responderán a las alertas a medida que se generen. Esto puede realizarse trabajando con un cortafuegos o con un enrutador, escribiendo reglas personalizadas en el momento que se detecta el problema, bloqueando e interrogando la actividad de las direcciones IP sospechosas o incluso contraatacando al sistema ofensivo. Aunque esta nueva tecnología se encuentra en una constante evolución, todavía está muy lejos de poder proporcionar el análisis y el juicio de una persona. El hecho es que cualquier sistema que dependa al cien por cien de una máquina y de su software, tarde o temprano podrá ser burlado por algún intruso. Un ejemplo de IPS de libre distribución es Inline Snort de Jed Haile, un módulo gratuito para el NIDS Snort Ubicación del NIDS Para elegir la ubicación del NIDS hay que valorar el grado de interoperabilidad con el resto de nuestras protecciones de red. Existen varias posibilidades y cada una tiene distintas ventajas e inconvenientes.

233 Capítulo 13. Sistemas de detección de intrusiones En la red LAN local, detrás del cortafuegos: Es el lugar más común, ofrece la mejor protección frente a las amenazas externas e internas. Al escuchar el cable local, podemos detectar la actividad interna de otros usuarios (como la actividad entre estaciones de trabajo o el uso ilícito de un programa). También refuerza el cortafuegos, detectando una actividad sospechosa que de alguna manera ha conseguido pasar los filtros del cortafuegos. De hecho, se pude utilizar un IDS para probar un cortafuegos y comprobar lo que permite pasar. Sin embargo, este sistema generará muchas alertas basadas en el tráfico de red de Windows, por lo que debemos estar preparados para realizar muchos ajustes en este área. Así mismo, si nos encontramos en una LAN conmutada, necesitaremos la capacidad de reflejar todos los puertos sobre un puerto monitor para poder permitir al IDS escuchar todo el tráfico LAN. 2. En el segmento DMZ : Podemos colocar un sensor Snort en la DMZ para registrar la actividad que entra en los servidores públicos. Como esos servidores son los más expuestos y normalmente representan recursos valiosos, es buena idea supervisarlos con un IDS. El problema de esta configuración es ordenar todas las alertas. Aunque todas ellas puedan ser alertas válidas, con el nivel de ataque de tráfico general actual en Internet, cualquier IP pública es atacada de forma aleatoria todos los días. Reaccionar ante ello intentando localizar dichas alertas sería excesivo y contraproducente. Por lo tanto, cómo podemos saber qué alertas son sólo gusanos que están atacando a nuestro servidor y qué alertas están realmente avisándonos de un intruso real?. Una forma de hacerlo es reduciendo el número de firmas a un pequeño número que sólo se activen si el host está realmente comprometido, por ejemplo, reglas específicas a las aplicaciones que se están ejecutando en el host, como MySQL.rules, web-iis.rules o reglas relacionadas con la administración de conexiones. 3. Entre el ISP y el cortafuegos: Esta configuración filtrará todo el tráfico entrante y saliente de la LAN y DMZ. Lo bueno es que capturará todos los ataques tanto a los servidores públicos como a la LAN interna. Lo malo es que no podrémos ver ningún tráfico interno y el volumen general de las alertas puede ser bastante alto, debido al tráfico de ataque general subyacente. Igual que en el ejemplo anterior, se puede probar a reducir las alertas y dejar sólo las que realmente van a mostrar algún problema para este segmento. Así mismo, al situarlo entre el sensor ISP y el cortafuegos, puede crear un cuello de botella y un punto de errores para nuestro tráfico de red. Todas las formas puede ser válidas para utilizar un IDS y no hay razón para que no podamos seguir las tres, siempre que tengamos el hardware y el tiempo necesario para hacerlo El problema de los falsos positivos de NIDS Uno de los problemas principales con los sistemas de detección de intrusión es que suelen generar muchos falsos positivos. Un falso positivo se produce cuando el sistema genera una alerta basándose en lo que cree que es una actividad dañina o sospechosa pero en realidad es un tráfico normal en esa LAN. Generalmente, cuando establecemos un NIDS con sus configuraciones predeterminadas, va a buscar todo lo que sea ligeramente inusual. La mayoría de los sistemas de detección de intrusión de red tienen grandes bases de datos predeterminadas con miles de firmas de posibles actividades sospechosas. Los suministradores de IDS no tienen forma de saber la apariencia de nuestro tráfico de red, por lo que lo incluyen todo. Existen otras muchas fuentes de falsos positivos, dependiendo de la configuración de nuestra red y de su nivel de actividad. Un NIDS con una instalación predeterminada puede generar cientos de falsos positivos en un solo día, algo que puede conducir a un sensación de desesperación en el administrador del sistema. La reacción normal, es que las alertas de estos sistemas se ignoran a menudo debido a su falta de eficacia. Sin embargo, con poco esfuerzo y utilizando las técnicas descritas en este capítulo un IDS puede convertirse en una herramienta útil, en lugar de en la versión electrónica de la niña del exorcista. Las causas más comunes de los falsos positivos se describen en los siguientes apartados.

234 216 Servidor Linux para conexiones seguras de una LAN a Internet Actividad del sistema de supervisión de red Muchas empresas utilizan sistemas de supervisión de redes (NMS, Network Monitorig System) como HP OpenView o WhatsUp Gold para tener registros de la actividad de sus sistemas. Estos programas generan mucha actividad de sondeo y descubrimiento en nuestra red. Normalmente utilizan SNMP o algún protocolo similar para obtener el estado, pero pueden también utilizar pings y pruebas más intrusivas. De forma predeterminada, la mayoría de los sistemas de detección considerarán hostil esta actividad, o al menos, sospechosa. Un NMS en una red grande puede generar miles de alertas por hora, si se ha establecido en el IDS marcar este tipo de actividad. Se puede evitar haciendo que nuestro NIDS ignore la actividad desde y hacia la IP del NMS. También podemos eliminar este tipo de alertas de la base de datos de nuestro NIDS, si no consideramos estas alertas importantes. Escaneado de vulnerabilidad y escáneres de puertos de red Si estamos realizando una prueba de vulnerabilidad de red o un escaneado de puertos utilizando programas como Nessus o Nmap, nuestro NIDS se volverá loco cada vez que se ejecuten dichos programas. Estos programas están diseñados para hacer exactamente lo que hacen los piratas informáticos. De hecho, probablemente exista una alerta para la mayoría de los complementos del programa Nessus. Una vez más, podemos deshabilitar el informe de la dirección IP de nuestro servidor Nessus o Nmap dentro del NIDS. Una mejor manera de controlar esta situación es apagar nuestro IDS durante los escaneados programados. Así, la IP del escáner seguirá protegida contra un ataque cuando no esté escaneando y nuestra base de datos de alertas no se cargará con datos de nuestra actividad de escaneado. Actividad de usuario La mayoría de los sistemas de detección de intrusión de redes se configuran para marcar diversas actividades de usuario peligrosas, como compartir archivos punto a punto, mensajería instantánea, etc. Sin embargo, si permitimos este tipo de actividad, bien por política formal o simplemente sin imponer las políticas existentes, se mostrarán como alertas en nuestro registros. Éste sería un buen momento para imponer o crear políticas contra su utilización ya que podemos demostrar cuánto ancho de banda y tiempo consumen, sin mencionar las implicaciones de seguridad. Aunque si pretendemos seguir permitiendo esta actividad, deberíamos comentar estas reglas para no rellenar los registros con alertas innecesarias. Comportamientos parecidos a los troyanos o gusanos Normalmente, virus, gusanos y troyanos viven para la red. Intentan ejecutar diversas actividades por la red, incluyendo la infección de nuevas máquinas y el envío en masa de mensajes de correo electrónico. Estas actividades las puede detectar un NIDS, sin embargo, estas firmas también pueden ser activadas por una actividad normal de nuestra red. Podríamos desactivar las alertas que reconocen esta actividad, aunque exista un tráfico potencialmente dañino, para evitar vernos agobiados por los falsos positivos. Cadenas largas de autenticación básica Este tipo de alerta busca las cadenas de registro web largas, algunos ataques utilizan este método para conseguir un desbordamiento de memoria y obtener acceso al sistema. Sin embargo, hoy en día, muchas webs llenan este campo de información. Aunque, si desactivamos la regla para evitar falsos positivos, puede viajar código dañino por nuestra red y pasar inadvertido para el NIDS. Actividad de autenticación de base de datos Algunos sistemas de detección de intrusión de red buscan actividades administrativas sobre bases de datos. La teoría es que el uso de bases de datos no debería de tener demasiada actividad administrativa en curso y ello podría ser señal de que alguien están intentando sabotearla. Sin embargo, muchas bases

235 Capítulo 13. Sistemas de detección de intrusiones 217 de datos tienen trabajos en proceso y mucha actividad administrativa incluso si no se están consultando. Esta actividad, aunque legítima, generará muchas de estas alertas. Si nuestras bases de datos están en constante desarrollo, probablemente deberemos desactivar dichas alertas, al menos hasta que se estabilicen y tengan un uso normal Obtener lo máximo del IDS Para darnos cuenta del verdadero potencial de un sistema de detección de intrusión necesitaremos seguir unas pautas antes y después de la instalación Configuración apropiada del sistema Si simplemente instalamos un IDS y lo activamos con una configuración predeterminada, rápidamente nos inundarán miles de alertas de falsos positivos. Podemos ajustarlo después de estar activo, pero nos ahorraremos mucho tiempo y esfuerzo configurándolo cuidadosamente de antemano. No debemos conformarnos con las configuraciones por defecto, hay que ajustarlas al perfil de nuestra LAN. La mayoría de los sistemas de detección agrupan las alertas en categorías. Es preciso examinar cada grupo para comprobar si es relevante en nuestra red. Si hay un grupo de firmas basadas en Unix pero no tenemos ningún sistema Unix, podemos desactivar con seguridad esas alertas. Algunos tienen alertas que buscan la utilización de mensajería instantánea o la utilización de software punto a punto. Si ya tenemos sistemas que filtran estas actividades o las permitimos en nuestro sistema, es mejor desactivar esas alarmas. Tenemos que repasar los grupos de alertas con detalle. Por ejemplo, desearemos utilizar la mayoría de las alertas basadas en Windows, pero existirán algunas irrelevantes para nuestra red o que causen falsos positivos, esas las podemos desactivar. También podemos excluir algunos hosts del examen. Si efectuamos desde una máquina constantes sondeos SNMP por nuestra red o frecuentemente estamos iniciando sesión como administrador remoto, generaremos alertas que no merece la pena proteger. Aunque reduzcamos el nivel de protección proporcionado y podamos dejar sin protección alguna máquina crítica, podemos hacer el IDS más efectivo y merecerá la pena asumir ese riesgo. Tardar algunas horas en configurar nuestro sistema antes de activarlo puede ahorrarnos mucho tiempo y frustración en el futuro. Si vamos a ejecutar un IDS es mejor que nos tomemos el tiempo necesario para hacerlo funcionar correctamente Ajuste del IDS Cuando ya se está ejecutando, incluso el IDS más meticulosamente configurado empezará a generar alertas. Al principio, si nos tomamos el tiempo necesario para analizarlas y empezamos a desactivar las reglas que no nos importen en nuestra red, podremos reducir rápidamente el número de falsos positivos que está produciendo el IDS. También nos proporcionará un conocimiento de cómo está trabajando nuestra red y del tipo de tráfico que se está revisando, algo útil para cualquier administrador de redes. Es preciso reservar un tiempo semanal para modificar las configuraciones IDS. En algunos sistemas es relativamente fácil marcar una alerta como falso positivo mientras que en otros podemos encontrarnos con más dificultades. En general, se tardan algunos meses antes de que un IDS esté ajustado correctamente para enviar alertas útiles sobre una actividad procesable Herramientas de análisis IDS Los sistemas de detección normalmente ofrecen a los administradores varios métodos de notificación de una alerta. En su nivel más básico, las alertas pueden simplemente enviarse a un archivo de registro para una revisión posterior, algo que no es muy recomendable ya que requiere que el administrador revise los registros. Si no se supervisan diariamente, pueden pasar días o semanas antes de descubrir los intentos de intrusión.

236 218 Servidor Linux para conexiones seguras de una LAN a Internet La otra alternativa es enviar un mensaje de correo electrónico o una página, a la persona apropiada siempre que se genere una alerta. Sin embargo, incluso en un sistema bien ajustado, puede ser molesto recibir correos varias veces al día. Así mismo, las alertas de correo electrónico no estarán en un formato en el que se puedan comparar con alertas pasadas o analizadas de otra forma. La mejor solución para controlar las alertas IDS es insertarlas en una base de datos, para permitir un análisis más profundo. Existe una herramienta de libre distribución para los sistemas de detección de intrusiones denominada Analysis Console for Intrusion Database (ACIDlab, véase sección 13.8) IDS Snort (NIDS) Es una herramienta desarrollada por Martin Roesch, aunque ahora ya cuenta con 30 desarrolladores más en su equipo principal, sin contar con los que escriben reglas y otras partes del software. Existen muchos recursos disponibles para Snort y todos ellos son recursos gratuitos disponibles en Internet. Snort es principalmente un IDS basado en firmas, aunque con la adición del módulo Spade, puede realizar una detección de actividad de anomalías. Existen también otros módulos de complemento como Inline Snort que permite a Snort realizar acciones predeterminadas ante determinadas alertas. Para obtener más información sobre el programa, estos módulos o otros podemos consultar la web: O consultar la información que podemos obtener en nuestro sistema Debian: #apt-get install snort-doc Características básicas Libre distribución: Snort es de libre distribución y portable a casi cualquier sistema operativo Unix/Linux. También existen versiones disponibles para Windows y otros sistemas operativos. Ligero: Debido a que el código se ejecuta de una forma eficiente, no requiere mucho hardware, lo que permite poder analizar tráfico en una red de 100 Mbps a una velocidad cercana al cable, algo bastante increíble si pensamos lo que hace con cada paquete. Snort personaliza reglas: Snort ofrece una forma fácil para ampliar y personalizar el programa escribiendo nuestras propias reglas o firmas. Existe mucha documentación que puede ayudarnos a aprender a hacer reglas (véase sección ), sin mencionar la cantidad de foros sobre el tema Instalación Para instalarlo simplemente realizaremos el apt del paquete: #apt-get install snort Los archivos importantes de snort son los siguientes: /etc/snort/snort.conf : Archivo de configuración por defecto /etc/snort/snort.<host>.conf: Archivo de configuración para el host /etc/snort/snort.<dispositivo>.conf : Archivo de configuración para un dispositivo de red concreto /etc/snort/rules/* : Archivos de reglas

237 Capítulo 13. Sistemas de detección de intrusiones Modos de ejecución Snort se ejecuta desde la línea de comandos, en tres modos diferentes: Sniffer de red Registro de paquetes IDS La mayoría de los usuarios lo ejecutaran en este último modo para obtener las ventajas de IDS, pero también hay usos para los dos primeros modos. Modo de sniffer de paquetes En este modo, Snort actúa como un sniffer, mostrando el contenido sin filtrar en el cable. Evidentemente. Si lo único que necesitamos es un sniffer podríamos utilizar Tcpdump o Ethereal (más completos). Sin embargo, el modo sniffer de paquetes es bueno para asegurarse de que todo funciona correctamente y Snort esta viendo los paquetes. #snort -v En este modo tenemos las siguientes opciones: Opción Descripción -v Imprime en la pantalla los encabezados de los paquetes TCP/IP en Ethernet -d Igual que la opción anterior pero además imprime los datos de la capa de aplicación -e Igual que la opción anterior pero además imprime la capa de enlace de datos Hay que incluir al menos el comando -v para utilizar el modo sniffer de paquetes. Estos serian algunos ejemplos de su uso: #snort -v #snort -vde Pulsamos CTRL+C para salir y veremos un resumen de la sesión de escucha de la red. La siguiente salida, es una conexión a una página web desde el servidor: Running in packet dump mode Initializing Network Interface eth0 --== Initializing Snort ==-- Initializing Output Plugins! Decoding Ethernet on interface eth0 --== Initialization Complete ==--,,_ -*> Snort! <*- o" )~ Version (Build 12) By Martin Roesch & The Snort Team: (C) Copyright Sourcefire Inc., et al. 06/09-13:09: :80 -> :3516 TCP TTL:62 TOS:0x0 ID:47630 IpLen:20 DgmLen:52 DF ***A***F Seq: 0xB744B52F Ack: 0x34B0D324 Win: 0x1974 TcpLen: 32 TCP Options (3) => NOP NOP TS: =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 06/09-13:09: :3516 -> :80 TCP TTL:64 TOS:0x0 ID:24732 IpLen:20 DgmLen:52 DF ***A**** Seq: 0x34B0D324 Ack: 0xB744B530 Win: 0x736 TcpLen: 32 TCP Options (3) => NOP NOP TS: =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 06/09-13:09: :3516 -> :80 TCP TTL:64 TOS:0x0 ID:24734 IpLen:20 DgmLen:52 DF ***A***F Seq: 0x34B0D324 Ack: 0xB744B530 Win: 0x736 TcpLen: 32 TCP Options (3) => NOP NOP TS: =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 06/09-13:09: :80 -> :3516 TCP TTL:253 TOS:0x0 ID:0 IpLen:20 DgmLen:52 DF ***A**** Seq: 0xB744B530 Ack: 0x34B0D325 Win: 0x1974 TcpLen: 32 TCP Options (3) => NOP NOP TS: =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=

238 220 Servidor Linux para conexiones seguras de una LAN a Internet ========================================================================== Snort received 263 packets Analyzed: 263( %) Dropped: 0(0.000%) ========================================================================== Breakdown by protocol: TCP: 247 (93.916%) UDP: 12 (4.563%) ICMP: 0 (0.000%) ARP: 4 (1.521%) EAPOL: 0 (0.000%) IPv6: 0 (0.000%) IPX: 0 (0.000%) OTHER: 0 (0.000%) DISCARD: 0 (0.000%) ========================================================================== Action Stats: ALERTS: 0 LOGGED: 0 PASSED: 0 ========================================================================== Snort exiting Modo de registro de paquetes Este modo es similar al anterior pero nos permite registrar paquetes olfateados al disco para su utilización y análisis futuros. Para ejecutar Snort en el modo de registro de paquetes, simplemente lo ejecutamos con los mismos comandos que en el modo sniffer de paquetes, pero añadiendo un modificador adicional: -l logpath, reemplazando logpath con la ruta de acceso en la que deseamos que Snort registre los paquetes (tiene que ser un directorio). Por ejemplo: #snort -vde -l /var/log/snort Creará archivos de registro en el directorio /var/log/snort. Snort registra paquetes por dirección IP y crea un directorio independiente para cada IP registrada. Si estamos registrando tráfico en una red local grande con muchas direcciones, esto puede escaparse rápidamente a nuestro control. Podemos utilizar otra configuración para indicarle a Snort que registre los paquetes de la LAN en la que se encuentra con el comando: -h homenet, donde homenet es el rango de direcciones IP en la notación de barra inclinada. Esto hace que Snort coloque las direcciones basándose en la dirección IP del paquete externo a la LAN, para poder ver con más facilidad el tráfico ajeno a la red. Si tanto los anfitriones de destino como de origen son locales, Snort los coloca en el directorio con el número de puerto superior, aparentemente para recoger el host de conexión sobre el host servidor. Snort utiliza la dirección de origen como nombre del directorio en el que se colocarán los datos de los paquetes, cuando registramos alertas de intrusión es importante saber con facilidad de dónde está proviniendo el tráfico de alertas marcado. Por lo tanto, el comando para el modo de registro de paquetes será: #snort -vde -l /var/log/snort -h /24 Esta declaración especifica una red interna en el rango comprendido entre y También podemos utilizar la opción: -b para registrar todos los datos en un solo archivo binario, apropiado para su lectura posterior con un sniffer de paquete (como Ethereal o Tcpdump). Si se realiza así el registro, no es necesario especificar la red local al utilizar el modificador -b ya que registrará los archivos secuencialmente en un gran archivo. Este método es mucho más rápido para registrar redes de muchos registros o si Snort funciona en un máquina lenta. También facilita el análisis con herramientas más complejas, algo necesario si vamos a buscar sobre una gran cantidad de datos de red capturados. Modo de detección de intrusión (IDS) Este modo lo utiliza Snort para registrar paquetes sospechosos o que merecen una consideración especial. Sólo necesitamos un modificador adicional a la declaración anterior para que Snort entre en este modo. El modificador: -c configfile, le indica a Snort que utilice un archivo de configuración para dirigir los paquetes que registra. Este archivo determina la configuración de Snort, se incluye un archivo prede-

239 Capítulo 13. Sistemas de detección de intrusiones 221 terminado, pero debemos realizar cambios antes de ejecutarlo, para que refleje nuestro perfil de red. Por lo tanto, si escribimos: #snort -de -l /var/log/snort -h /24 -c /etc/snort/snort.conf Ejecutaremos Snort en modo IDS utilizando el archivo de configuración snort.conf predeterminado. Hay que tener en cuenta que no hemos utilizado el modificador -v para ejecutar Snort en modo IDS. Cuando intentamos comparar todos los paquetes con las firmas, obligar a Snort a escribir también las alertas en la pantalla puede causar que algunos paquetes se omitan, especialmente en redes con mucho tráfico. También podemos omitir el modificador -e si no necesitamos registrar las capas de enlace de datos. Si omitimos el modificador -l, Snort de forma predeterminada utilizará /var/log/snort como su directorio de registro. También podemos utilizar el modificador -b si deseamos registrar un archivo binario para un análisis posterior con un programa independiente. El comando para ejecutar Snort en el modo IDS es: #snort -h /24 -c /etc/snort/snort.conf Modos de alerta Ahora que ya estamos registrando los paquetes de alerta, tendremos que decidir el detalle y el formato de la alerta. El cuadro 13.1 incluye una lista con las opciones que podemos usar desde la línea de comandos, utilizando el modificador -A. Cuadro 13.1: Opciones de alerta del comando Snort Opción Descripción -A full Información completa de la alerta, incluyendo datos de aplicación. Es el modo predeterminado de alerta y se utilizará cuando no especifiquemos nada. -A fast Modo rápido. Registra sólo la información de encabezado del paquete y el tipo de alerta. Es útil para redes muy rápidas pero si se necesita más información forense hay que utilizar el modificador full. -A unsock Reenvía la alerta a un socket -A none Desactiva las alertas. También podemos utilizar las opciones, Syslog, SMB y opciones de salida de bases de datos. Estas opciones no utilizan el modificador -A desde la línea de comandos sino módulos de salida independientes que ofrecen una variedad más amplia de opciones de salida. Éstas deben configurarse en el tiempo de compilación con modificadores añadidos a la declaración de configuración. SMB: Envía las alertas al servicio de menú emergente de Windows. Para esta opción hay que descargar las fuentes y compilarlas con la opción enable-smbalerts. Para ejecutar Snort con esta configuración: #snort -c /etc/snort/snort.conf -M workstations Donde workstations es el nombre del host Windows al que se envían las alertas. Syslog: Envía alertas al servidor Syslog de Unix. Este es un servicio, que captura y guardar archivos de registro, lo que nos ayudará a consolidar registros de red en un lugar único. Este servicio dificulta a un intruso borrar los rastros de la intrusión. Podemos especificar los formatos Syslog dentro del archivo de configuración y enviar ahí las alertas incluyendo el modificador -s. Snort admite directamente cuatro tipos de salida a base de datos: MySQL, PostgreSQL, Oracle y unixodbc. El módulo de salida de base de datos requiere: parámetros y configuraciones, dentro del archivo de configuración y en tiempo de compilación.

240 222 Servidor Linux para conexiones seguras de una LAN a Internet Optimizar la configuración Ahora que ya sabemos cómo funciona Snort y conocemos los comandos básicos, tendrémos que editar el archivo de configuración para convertirlo en un IDS fiable y obtener los resultados deseados. Muchas líneas del archivo contienen información útil para aclarar cada una de las partes de la configuración. Para definir el archivo de configuración seguiremos los siguientes pasos: 1. Establecemos nuestra red local: Tendremos que indicarle a Snort las direcciones de nuestra red local para que pueda interpretar correctamente los ataques provenientes del exterior. Para ello utilizaremos la siguiente declaración: var HOME_NET addresses Donde debemos de reemplazar addresses con el espacio de direcciones de nuestra red local. Si existen múltiples redes, podemos introducirlas todas separándolas por comas. Podemos incluso introducir un nombre de interfaz y utilizar la dirección IP y la máscara de red asignada a dicha interfaz como nuestro HOME NET. El formato para hacerlo es: var HOME_NET $ interfacename Donde debemos reemplazar interfacename con la interfaz de red donde está escuchando Snort. También podemos definir nuestras redes externas con una declaración similar a HOME NET, reemplazándola por EXTERNAL NET. La entrada predeterminada para ambas variables es any. Es recomendable definir la red interna pero dejar la red externa a any. 2. Configuramos los servidores internos: En el archivo de configuración podemos definir nuestros servidores de red, incluyendo web, mail, dns, telnet,... Así, limitaremos los falsos positivos para los servicios en esas máquinas. También podemos especificar los números de puertos para dichos servicios, entonces si nuestros usuarios usan ese puerto, no se registrará ninguna alerta. Todas estas opciones de configuración pueden ayudarnos a reducir el número de falsos positivos que obtenemos y alertarnos sólo con información que tiene valor real. 3. Configuramos los decodificadores y procesadores previos de Snort: Diversos modificadores y configuraciones controlan los decodificadores y procesadores previos de Snort en el archivo de configuración. Estas rutinas se ejecutan en el tráfico antes de pasar por ningún conjunto de reglas, normalmente para formatearlas correctamente o para tratar con un tipo determinado de tráfico que sea más fácil de procesar directamente en lugar de utilizar los conjuntos de reglas. Un ejemplo de este tipo de tráfico serían los paquetes fragmentados-defragmentados. Muchos ataques intentan ocultar su verdadera naturaleza fragmentando los paquetes, en esos casos, esta opción es muy valiosa. Otro decodificador es para los paquetes de escaneado de puertos. Como éstos suelen entrar en grupos y con un gran volumen, es mejor procesarlos directamente en masa en lugar de intentar comparar cada paquete con una firma. Esto hace que el IDS sea más seguro ante una denegación de servicio. Las configuraciones predeterminadas para estos subsistemas son muy generales, a medida que experimentemos con Snort, podremos ajustarlas para obtener un mejor rendimiento y resultados. 4. Configuramos los módulos de salida: Es un paso importante si deseamos utilizar una base de datos para controlar las salidas de Snort. Como ya hemos visto anteriormente, existen varios módulos de salida que podemos utilizar, dependiendo del formato en el que deseemos los datos: Syslog, Database y el nuevo módulo denominado Unified, que es un formato binario genérico para exportar datos a otros programas.

241 Capítulo 13. Sistemas de detección de intrusiones 223 El formato general para configurar los módulos de salida es: output module_name: configuration options Siendo module name bien alert syslog, database o alert unified dependiendo del módulo que carguemos. Las opciones de configuración para cada módulo de salida son las siguientes: Syslog: output alert_syslog: LOG_AUTH LOG_ALERT output alert_syslog: host= hostname:port, LOG_AUTH LOG_ALERT Donde hostaname y port son la dirección IP y el puerto de nuestro servidor Syslog. Database: output database: log, database_type, user= user_name password= password dbname host= database_address Donde debemos reemplazar database type por una base de datos válida, user name por un nombre de usuario válido en la base de datos y password por la contraseña asociada al usuario. La variable dbname identifica el nombre de la base de datos en la que se va a realizar el registro. Por último, database address es la dirección IP del servidor que contiene la base de datos. No se recomienda intentar ejecutar Snort y la base de datos en el mismo servidor, suele provocar una bajada considerable del rendimiento del sistema. Unified: Es un formato binario básico para registrar los datos y usarlos en el futuro. Los dos argumentos adminitidos son filename y limit: output alert_unified: filename snort.alert, limit Personalizamos los conjuntos de reglas: El archivo snort.conf permite añadir o eliminar clases enteras de reglas. En la parte final del archivo podremos ver todos los conjuntos de reglas de alertas. Podemos desactivar toda una categoría de reglas comentando la línea. Por ejemplo, podríamos desactivar todas las reglas icmp-info para reducir los falsos positivos del tráfico ping o todas las reglas NetBIOS si no tenemos máquinas Windows en nuestra red. También podemos encontrar disponibles conjuntos de reglas que se han ajustado para entornos específicos Clases de reglas La forma más fácil de limitar el tráfico de las alertas es desactivar reglas que no se aplican en nuestro sistema, esto lo podemos hacer entrando en la configuración de Snort. El directorio /etc/snort/rules/ contiene muchos archivos con la extensión.rules, cada uno de ellos contiene las reglas agrupadas por categoría. Podemos deshabilitar toda una clase de reglas comentándola en el archivo de configuración o podemos deshabilitar reglas individuales si queremos la protección del resto de reglas de la clase. Para comentar una regla concreta, la buscamos en los archivos.rules apropiados e insertamos un comentario delante de la línea de dicha regla. Hay que tener en cuenta que normalmente es mejor deshabilitar un sola regla que toda la clase, a no ser que ésta no se aplique en nuestra configuración. En el cuadro 13.2 podemos observar una lista con las clases de reglas más habituales en Snort y una pequeña descripción de las mismas.

242 224 Servidor Linux para conexiones seguras de una LAN a Internet Clase de reglas attack-response.rules backdoor.rules bad-traffic.rules chat.rules ddos.rules dns.rules dos.rules experimental.rules exploit.rules finger.rules ftp.rules icmp-info.rules icmp.rules imap.rules info.rules local.rules misc.rules multimedia.rules Cuadro 13.2: Clases de reglas de Snort (I) Descripción Son las alertas para paquetes de respuesta comunes después de que un ataque haya tenido éxito. Raramente se informan como falsos positivos y debemos dejarlas activadas en la mayoría de los casos. Estas reglas son signos comunes de una puerta trasera o de un programa troyano en uso. Raramente son falsos positivos. Estas reglas representan el tráfico de red no estándar que normalmente no debería verse en la mayoría de las redes. Localizan transmisiones estándar para muchos programas conocidos de conversación. Si la conversación se permite implícitamente o explícitamente estas alertas deben estar deshabilitadas. Así mismo, hay que tener en cuenta que estas alertas no son una solución milagrosa para las conversaciones y no detectarán todos los tipos de tráfico de conversaciones. Busca tipos de ataques de denegación de servicio distribuido estándares. En DMZ y WAN, estas alertas no sirven de mucho porque si se ha producido un ataque de este tipo probablemente lo sepamos en seguida. Sin embargo, pueden ser muy útiles dentro de una LAN para comprobar si tenemos una máquina zombi en otra red participando en un ataque de denegación de servicio (DoS) sin saberlo. Buscan algunos abusos estándar contra servidores DNS. Si no estámos ejecutando un servidor DNS propio, podemos desactivarlas. Similar al conjunto de reglas anterior. Están deshabilitadas de forma predeterminada. Generalmente se utilizan sólo para probar nuevas reglas hasta que se desplazan a otra categoría. Estas reglas son para el tráfico de abuso estándar, siempre habilitadas. Estas reglas marcan el tráfico que tiene que ver con los servidores finger. Si no estámos ejecutando ninguno de estos servidores, las podemos deshabilitar. Sin embargo, este tipo de servidores normalmente se ejecutan ocultos al administrador del sistema, por lo que podemos dejarlas habilitadas, ya que no suelen generar falsos positivos. Igual que las reglas anteriores pero buscan abusos de FTP. Una vez más, podemos dejarlas habilitadas aunque no tengamos servidores FTP ya que nos avisarán de cualquier servidor FTP ilegal en el sistema. Estas reglas registran el uso de los mensajes ICMP que cruzan la red, por ejemplo, los ping. A menudo producen falsos positivos, podemos desactivar toda la clase a no ser que deseemos estar pendientes del tráfico ICMP en nuestra red. Otra clase de tráfico ICMP dañino conocido, icmp.rules, captura los escaneados de puertos y similares. Cubre el tráfico ICMP sospechoso o dañino y es poco propenso a generar falsos positivos. Sin embargo, es posible que se activen en una red ocupada ejecutando muchos servicios de diagnóstico. Reglas correspondientes al uso del protocolo de acceso a mensajes desde internet (IMAP, Internet Message Access Protocol). Capturan mensajes de errores diversos: Web, FTP y otros servidores. En este archivo podemos añadir nuestras propias firmas o reglas personalizadas para la red, el archivo está vacío de forma predeterminada. Reglas que no encajan en ninguna de las restantes categorías. Registra el uso de software de vídeo. Si permitimos las aplicaciones de vídeo o utilizamos video-conferencia, debemos deshabilitar estas reglas.

243 Capítulo 13. Sistemas de detección de intrusiones 225 Clase de reglas mysql.rules Netbios.rules nntp.rules oracle.rules other-ids.rules p2p.rules policy.rules pop3.rules porn.rules rpc.rules rservices.rules scan.rules shellcode.rules smtp.rules sql.rules Cuadro 13.3: Clases de reglas de Snort (II) Descripción Vigila el acceso del administrador y otros archivos importantes en una base de datos MySQL. Si no ejecutamos este tipo de base de datos, podemos deshabilitar estas alertas. Así mismo, si nuestra base de datos MySQL está en desarrollo, podrían producirse muchos falsos positivos. Esta clase de reglas nos alerta de diversa actividad NetBIOS en la LAN. Algunas de ellas son exploits evidentes. Sin embargo, otras, como las alertas de sesión NULL, pueden producirse normalmente en una LAN Windows. Tendrémos que jugar con esta sección para deducir cuáles son las reglas apropiadas en nuestra LAN. Reglas relacionadas con el servidor de noticias. Si no ejecutamos noticias de red en los servidores, es mejor deshabilitar estas reglas. Reglas del servidor de base de datos Oracle. Si no tenemos un servidor de este tipo, las deshabilitamos. Estas reglas se relacionan con exploits en los IDS de otros fabricantes. Es muy probable que no tengamos ningún otro NIDS en la LAN, pero si es así hay que dejarlas habilitadas. Reglas que rigen el uso del software para compartir archivos punto a punto. Estas reglas crearán alertas durante el uso normal de este software, si lo permitimos, deberemos deshabilitarlas. Este archivo contiene diversas alertas relacionadas con toda la actividad permitida en la LAN, como Go-to-my-pc y otros programas. Debemos revisarlas y habilitar sólo las que se aplican en nuestras políticas internas. Para servidores de correo, si tenemos un servidor de este tipo, hay que dejarlas habilitadas. Estas reglas son trampas rudimentarias para la exploración web relacionada con la pornografía. No constituyen ni mucho menos un reemplazo para los buenos sistemas de filtrado de contenido. Esta clase controla las alertas de llamadas a procedimientos remotos (RPC). Aunque creamos no ejecutar ninguno de estos servicios, normalmente se activan como parte de otros programas, por lo que es importante tener cuidado con lo sucede en la LAN. RPC puede habilitar la ejecución remota de código y normalmente se utiliza en los troyanos y exploits. Registra el uso de diversos programas de servicios remotos, como rlogin y rsh. Estas reglas en general, son de servicios inseguros, pero si tenemos que utilizarlos, pueden examinarse con este conjunto de reglas. Alertas para utilizar programas de escaneado de puertos. Los escaneados de puertos son una indicación extraordinaria de una actividad ilícita. Si utilizamos escáneres de puertos, podemos desactivar Snort durante su ejecución o deshabilitar esta regla en concreto para la IP donde se encuentra el escáner. Esta clase busca paquetes que contienen código de montaje, comandos de bajo nivel también conocidos como código shell. Estos comandos normalmente forman parte integral de muchos exploits como los desbordamientos de memoria. Capturar al momento un código shell es una buena indicación de que se está produciendo un ataque. Contienen las alertas para el uso del servidor de correo en la LAN. Esta sección necesitará algún ajuste ya que muchas actividades de servidor de correo normales activarán reglas de esta sección. Reglas para diversos programas de base de datos SQL. Si no ejecutamos ninguna base de datos, podemos deshabilitarlas, pero no es mala idea dejarlas por si existen bases de datos SQL ejecutándose sin que lo sepamos.

244 226 Servidor Linux para conexiones seguras de una LAN a Internet Clase de reglas telnet.rules tftp.rules virus.rules web-attacks.rules web-cgi.rules web-client.rules web-coldfusion.rules web-frontpage.rules web-iis.rules web-php.rules X11.rules Cuadro 13.4: Clases de reglas de Snort (III) Descripción Registra el uso de telnet sobre la red. Normalmente telnet se utiliza en enrutadores o en otros dispositivos de línea de comandos, por lo que es recomendable realizar el registro incluso si telnet no está en nuestros servidores. TFTP (FTP trivial) es un servidor FTP alternativo que se ejecuta normalmente en enrutadores. Puede utilizarse para cargar nuevas configuraciones y por consiguiente es mejor que este conjunto de reglas esté habilitado. Contiene las firmas de algunos gusanos y virus conocidos. Esta lista no está completa y no se mantiene con regularidad. No es un reemplazo para el software de escaneado de virus pero puede capturar algunos gusanos que se transmitan por la red. Todas estas clases se refieren a diversos tipos de actividad web sospechosa. Algunas son genéricas, como las clases web-attacks. Otras clases, como web-iis y web-frontpage, son específicas de una determinada plataforma de servidor web. Sin embargo, aunque creamos que no estamos ejecutando un servidor web Microsoft o PHP, es mejor dejarlas habilitadas para descubrir cualquier tipo de esta actividad en nuestra LAN de la que debamos preocu- parnos. Tendremos que ajustar estos conjuntos de reglas, especialmente si los servidores web se encuentra en un desarrollo activo. Registra el uso del entorno gráfico X11 en su red Ejecutar como servicio del sistema Si vamos a ejecutar Snort en un servidor que se va a utilizar las 24 horas del día, siete días a la semana, tendremos que ejecutar Snort inmediatamente al inicio para que, en el caso en el servidor caiga, se pueda volver a cargar Snort y siga protegiendo nuestra LAN. Una forma de conseguirlo es tener una pequeña secuencia de comandos que ejecute Snort con los parámetros de línea de comandos en las rutinas de inicio. Deberemos colocar el comando de arranque de Snort. Como por ejemplo: snort -h /24 -c /etc/snort/snort.conf & El signo de concatenación & indica que se debe ejecutar Snort como un proceso en segundo plano Configuración gráfica de Snort, interfaz Webmin Realizar toda la configuración para Snort desde la línea de comandos puede llegar a ser algo tedioso. Aunque todavía no existe una interfaz gráfica para Snort, existe un módulo para la conocida herramienta de administración web Webmin que nos permite realizar ajustes y configuraciones desde un servidor web. Algunas de las ventajas de este sistema son: Acceso a los archivos de configuración de Snort, basado en un formulario. Niveles de acceso de usuario que permiten configurar diferentes usuarios con diferentes derechos. Capacidad para para habilitar y deshabilitar conjuntos de reglas mediante un simple clic. Indicador de estado para todas las reglas y conjuntos de reglas. Enlaces incrustados a bases de datos externas como archnids, CVE y Bugtraq. Registro de cambios. Diferentes idiomas.

245 Capítulo 13. Sistemas de detección de intrusiones 227 Soporte para ejecutar Snort como servicio utilizando archivos rc.d. Administración remota segura a través de SSL (si esta habilitado). El módulo de Snort requiere la versión 0.87 de Webmin o superior. Instalaremos el módulo con apt: #apt-get install webmin-snort Para acceder al sistema, con SSL y si no hemos cambiado el puerto por defecto: https://localhost:10000 Una vez iniciada la sesión en la página de Snort (véase figura 13.1), podremos ver las secciones principales del archivo de configuración, las configuraciones del procesado previo y las opciones de inicio de sesión en la parte superior de la ventana. Haga clic en cualquiera de las opciones de configuración para introducir su información personal para que Webmin realice los cambios apropiados en los archivos de Snort. Figura 13.1: Módulo Webmin de Snort Todos los conjuntos de reglas aparecen en una lista, podemos ver cuáles están habilitados y cuales no. Si queremos visualizar dicho conjunto de reglas o modificar una regla individual, hacemos clic en el texto subrayado de color azul para dirigirnos a la página Edit RuleSet (editar conjunto de reglas). Aquí se encuentran todas las reglas individuales dentro de dicho conjunto. Podemos ejecutar acciones en cada regla como deshabilitarla, habilitarla o eliminarla del conjunto. Si existen referencias a bases de datos externas dentro de la alerta, como los números de Vulnerabilidad o exploit comúnes (VCE, Common Vulnerability or Exploit), podemos hacer clic en un hipervínculo para abrir más detalles sobre lo que hace la alerta. En esta interfaz se puede ajustar el conjunto de alertas más fácilmente. Con el módulo Webmin Snort también podemos configurar usuarios para que puedan acceder a determinadas configuraciones. Esto se realiza mediante el control de usuarios de Webmin, en la sección

246 228 Servidor Linux para conexiones seguras de una LAN a Internet correspondiente de acceso a Snort. Podemos controlar los archivos de configuración a los que pueden acceder o simplemente dejar que visualicen los archivos sin poder editar ninguno de ellos. Como se puede comprobar, el módulo Webmin Snort nos proporciona un control de acceso granular para que podamos delegar las tareas diarias en usuarios con privilegios de administración, a la vez que seguimos conservando el control de la configuración y los cambios Personalizar reglas Aunque los conjuntos de reglas estándar incluidos en Snort proporcionan una protección adecuada contra firmas de ataques conocidas, podemos diseñar algunas reglas personalizadas específicas para que nuestra red obtenga el mejor rendimiento del IDS. Se pueden escribir reglas para: Registra el acceso hacia o desde determinados servidores. Buscar determinados tipos de nombres de archivos específicos en nuestra organización. Vigilar determinados tipos de tráfico que no pertenecen a nuestra propia red. La escritura de reglas de Snort es fácil de aprender y nos permite añadir funcionalidades al programa, sin muchos conocimientos de programación. Como hemos podido comprobar, las reglas de Snort son simplemente declaraciones de texto dentro de un archivo de reglas. Si deseamos que Snort busque un comportamiento único que debería ser sospechoso en nuestra red, podemos codificar rápidamente una regla y probar el resultado. El formato de una regla de Snort es básicamente una sola línea de texto que empieza con una acción (normalmente alert) seguida por diversos argumentos. Se pueden añadir multiples líneas simplemente añadiendo una barra inclinada (/) al final de cada línea. También se puede llamar a otros programas utilizando una declaración de inclusión para obtener una regla más compleja. En su forma básica, una regla de Snort consta de dos partes: Un encabezado de regla Las opciones de la regla Aquí tenemos un ejemplo: alert tcp any any /24 / (content:" A4 6F 2E ";msg:"test Alert";) El encabezado de la alerta es la parte anterior al paréntesis de apertura. Esta declaración contiene la acción (en este caso, alert), el protocolo y las direcciones de puertos de origen y destino. La acción es lo que va a hacer la regla, si esta es verdadera. Las opciones para las acciones son: alert log pass activate Dynamic Alerta del cumplimiento de la regla. Sólo registra el paquete. Ignora el paquete, es la acción predeterminada en paquetes que no coinciden con la regla. Alertar y a continuación activar una regla dinámica. Permanecer inactiva hasta que se active, a partir de entonces actúa como una regla normal registro.

247 Capítulo 13. Sistemas de detección de intrusiones 229 Los protocolos puede ser tcp, udp, icmp o ip, lo que significa cualquier protocolo IP (puede que en un futuro se admitan protocolos no basados en IP, como IPX). Los puertos de origen y destino se explican por sí mismos. La dirección de origen es la primera, listada en la notación de barra inclinada estándar para los rangos IP. También podemos listar múltiples direcciones individuales y redes separándolas con una coma, sin espacios y escribiendo la declaración entre corchetes, por ejemplo: alert tcp any <> [ , , ] 80 / (content:" A4 6F 2E ";msg:"test Alert";) Esta sentencia se centra en el tráfico que proviene de cualquier dirección enlazada para las máquinas , y en el puerto 80. Suponiendo que se tratan de nuestros servidores Web, la sentencia buscaría el tráfico entrante con los datos hexadecimales de la sección de contenido. La segunda parte de una alerta Snort son las opciones de la regla. Aquí es donde podemos especificar más detalles sobre el tipo de tráfico que estamos buscando. Podemos buscar según los campos del encabezado TCP/IP o buscar simplemente la cargar útil del paquete. Después de cada comando debemos incluir comillas y el valor que se está buscando. Podemos añadir múltiples opciones separándolas con un punto y coma. El cuadro 13.5 contiene los comandos de opción válidos en la confección de reglas Detección de intrusiones en el host Hemos tratado con detalle la detección de intrusiones basadas en redes (NIDS). Sin embargo, existen otras formas de encontrar intentos de intrusión. Un método alternativo es buscar signos de intrusión en el propio sistema. Si se ha aprovechado un exploit en una máquina, normalmente se alterarán determinados archivos del sistema. Por ejemplo, puede cambiar el archivo de contraseñas, pueden añadirse usuarios, pueden modificarse archivos de configuración del sistema o se pueden alterar los permisos de algunos archivos. Normalmente, estos archivos de sistema no deberían cambiar mucho. Al buscar modificaciones podemos detectar una intrusión u otra actividad inusual. Este método de detección de intrusión puede ser mucho más preciso, produciendo menos falsos positivos ya que no se activan a no ser que un sistema esté realmente afectado. Algo más complicado es el mantenimiento ya que tenemos que cargar el software en cada sistema que deseamos proteger. Podemos afirmar que merece la pena el tiempo y el esfuerzo empleados para detectar las intrusiones basadas en hosts y en redes con el fin de proteger los sistemas que ejecutan tareas críticas. Los métodos de detección de intrusión basados en hosts tienen las siguientes ventajas: Menos falsos positivos. Se registran actividades en lugar de firmas, no necesitan actualizaciones constantes de firmas. Necesitan menos ajustes. Los métodos de detección de intrusión basados en hosts tienen los siguientes inconvenientes: Hay que cargar y administrar el software en cada host a proteger. La alerta tiene lugar después de que un ataque haya tenido éxito. Muy pocas veces los IDS de host nos proporcionan un aviso previo.

248 230 Servidor Linux para conexiones seguras de una LAN a Internet Opción msg logto ttl tos id ipoption fragbits dsize flags seq ack itype icode icmp id icmp seq content content-list offset depth nocase session rpc resp react referernce sid rev classtype priority uricontent tag ip proto sameip stateless regex byte test distance byte test byte jump Cuadro 13.5: Opciones de personalización en las reglas de Snort Descripción Proporciona la descripción del texto de una alerta. Registra el paquete para un nombre de archivo específico de un usuario en lugar de para el archivo de salida estándar. Prueba el valor del campo TTL del encabezado IP. Prueba el valor del campo TOS del encabezado IP. Prueba el campo ID del fragmento del encabezado IP para un valor específico. Vigila los campos de opción IP buscando códigos específicos. Prueba los bits de fragmentación del encabezado IP. Prueba el tamaño de carga útil del paquete frente a un valor. Prueba los indicadores TCP para determinados valores. Prueba el campo de número de secuencia TCP para un valor específico. Prueba el campo de reconocimiento TCP para un valor específico. Prueba el campo de tipo ICMP frente a un valor específico. Prueba el campo de código ICMP frente a un valor específico. Prueba el campo ICMP ECHO ID frente a un valor específico Prueba el número de secuencia ICMP ECHO frente a un valor específico. Busca un patrón en la carga útil del paquete. Busca un conjunto de patrones en la carga útil del paquete. Modificador para la opción de contenido. Establece la compensación en el intento de coincidencia con el patrón. Modificador para la opción de contenido. Establece la profundidad de búsqueda para un intento de coincidencia con el patrón. Compara la cadena de contenido anterior sin tener en cuenta las mayúsculas y las minúsculas. Descarga la información de la capa de aplicación para una determinada sesión Vigila los servicios RPC en búsqueda de determinadas llamadas de aplicaciones o procedimientos. Respuesta activa (por ejemplo, cerrar todas las conexiones). Respuesta activa. Responde con un conjunto de comportamientos cifrados (por ejemplo, bloquear determinados sitios web). Los ID de referencia de ataques externos. ID de regla Snort. Número de revisión de regla. Identificador de clasificación de regla. Identificador de severidad de regla. Busca un patrón en la parte URI del paquete. Acciones de registro avanzadas para las reglas. Valor de protocolo del encabezado IP. Determina si la IP de origen es igual a la IP de destino. Válido independientemente del estado del flujo. Coincidencia de patrón de caracteres comodín. Evaluación numérica. Obliga a que la coincidencia de patrón relativa omita determinado número de bytes en el paquete. Prueba numérica del patrón. Prueba numérica del patrón y ajuste de compensación

249 Capítulo 13. Sistemas de detección de intrusiones Integridad de archivos: IDS Tripwire Originalmente, Tripwire era de libre distribución. Al final, los creadores fundaron una empresa para venderlo y soportarlo comercialmente. Sin embargo, cogieron el código base original y lo distribuyeron con licencia GPL para que pudiera continuar su desarrollo en la comunidad de la libre distribución. Esta versión libre se ha ido actualizando desde su lanzamiento (versión 2.2.1). Ambas versiones funcionan creando una base de datos de atributos básicos, archivos importantes que deseamos registrar para comprobar los atributos reales, en cualquier momento, frente a los atributos básicos. Con ello determinaremos si ha cambiado algo. Uno de los trucos favoritos de los piratas informáticos, una vez introducidos en un sistema, es reemplazar los archivos binarios clave con versiones de su propia cosecha. Así cuando utilizamos comandos como ls o ps, no vemos sus archivos ilícitos ni la ejecución de determinados procesos. También podemos utilizar Tripwire durante una investigación forense para descubrir dónde ha estado un intruso, es como seguir las huellas digitales de una persona. Para instalar el programa hacemos un apt: #apt-get install tripwire Configurar Tripwire Antes de ejecutar Tripwire hay que establecer la política. El archivo de políticas es muy importante para el funcionamiento de Tripwire: le indica que archivos debe vigilar y a qué nivel de detalle debe introducirse. El archivo principal de políticas es: /etc/tripwire/twpol.txt. Éste no es el propio archivo de políticas, sino una copia de la versión cifrada que el programa utiliza. Para obtener una mejor seguridad, deberíamos hacer una copia y eliminarlo, una vez establecidas y probadas sus políticas. Este archivo contiene en su parte superior algunas variables, un listado de los diversos archivos y directorios que se chequearan, las directivas y las políticas que les aplicaremos. Estas directivas se representan mediante letras de código o nombres de variable, denominadas máscaras de propiedad, y representan las propiedades que está registrando Tripwire. El cuadro 13.6 recoge la lista de los elementos que se pueden registrar para cada archivo y sus letras de código. Cuadro 13.6: Máscaras de propiedad de Tripwire Letras de código a b c d g i l m n p s t u c h m s Atributos registrados Último acceso Bloques asignados Crear/modificar hora Dispositivo ID en el que reside el i-nodo ID de grupo del propietario del archivo Número de i-nodo Si se permite crecer el archivo Modificación de la fecha y hora impresa Número de enlaces al i-nodo Leer/escribir/ejecutar permisos en el archivo Tamaño del archivo Tamaño del tipo ID de usuario del propietario del archivo Código CRC32 Código Haval Código MD5 Código SHA/SHS

250 232 Servidor Linux para conexiones seguras de una LAN a Internet Las políticas de Tripwire operan sobre el concepto de ignorar los indicadores. Podemos configurar Tripwire para que registre o ignore diferentes propiedades de archivo. Para registrar propiedades utilizamos un signo más (+) y para ignorarlas un signo menos (-). El formato para la declaración de un archivo de políticas es el siguiente: file/directory name -> property mask; Por ejemplo, esta línea en el archivo de políticas: /etc/secreto.txt -> +amcpstu; Produciría que Tripwire nos notificase en cualquier momento, cuándo se produjo el último acceso, la fecha de creación o modificación, los permisos, la propiedad o el tamaño del tipo de archivo, cambiado en el archivo /etc/secreto.txt. Existen además diversas máscaras de propiedad predefinidas. En el cuadro 13.7 se incluyen dichas máscaras plantilla y sus efectos. Cuadro 13.7: Máscaras de propiedad de plantillas Máscara de propiedad $Readonly $Dynamic $Growing $Device $IgnoreAll $IgnoreNone Efectos +pinugtsdbmcm-rlassh +pinugtd-srlbamccmsh +pinugtdl-srbamccmsh +pugsdr-intlbamccmsh -pinugtsdrlbamccmsh +pinugtsdrlbamccmsh Estas variables predefinidas encajan en el comportamiento de diferentes conjuntos de archivos. Por ejemplo, podemos utilizar $Readonly para nuestros archivos de configuración clave, ya que sus fechas de acceso estarán continuamente cambiando cuando los programas los utilicen, pero no deseamos que el contenido o el tamaño cambien. Podemos utilizar $Growing para nuestros archivos de registro ya que están constantemente creciendo. El archivo de configuración de políticas también define algunas variables que son combinaciones de las configuraciones predeterminadadas anteriores con algunas adiciones o sustracciones, proporcionándonos un establecimiento rápido para las políticas de diversas clases de archivos. El siguiente código muestra las variables contenidas en el archivo /etc/tripwire/twpol.txt: GLOBAL TWBIN = /usr/sbin; TWETC = /etc/tripwire; TWVAR = /var/lib/tripwire; # # File System Definitions # FS # # First, some variables to make configuration easier # SEC_CRIT = $(IgnoreNone)-SHa ; # Critical files that cannot change SEC_BIN = $(ReadOnly) ; # Binaries that should not change SEC_CONFIG = $(Dynamic) ; # Config files that are changed # infrequently but accessed # often SEC_LOG = $(Growing) ; # Files that grow, but that # should never change ownership SEC_INVARIANT = +tpug ; # Directories that should never # change permission or ownership SIG_LOW = 33 ; # Non-critical files that are of # minimal security impact SIG_MED = 66 ; # Non-critical files that are of # significant security impact SIG_HI = 100 ; # Critical files that are # significant points of # vulnerability...

251 Capítulo 13. Sistemas de detección de intrusiones 233 Debajo de las máscaras de propiedad, se establecen las políticas para los diversos archivos y directorios del sistema. Podemos empezar con el archivo de políticas predeterminado y comprobar su funcionamiento. Hay que tomarse tiempo para examinar a fondo el archivo y comprobar qué archivos se están registrando. Una vez hecho esto, ya estaremos preparados para ejecutar Tripwire. Inicializar la base de datos básica El primer paso en la ejecución de Tripwire es establecer la base de datos básica, creando así la lista inicial de firmas frente a las que se deben utilizar las políticas. Recordemos que debemos ejecutar Tripwire, idealmente, una vez instalado y configurado el sistema; y después cuando sospechemos que no funcionan bien algunos archivos en nuestro sistema. Para establece la base de datos de archivo inicial utilizamos el siguiente comando: #tripwire -m i -v El modificador -m especifica el modo a ejecutar, en este caso i para inicializar. El modificador -v le proporciona una salida por pantalla para que podamos ver lo que está sucediendo. Tripwire audita todos los archivos especificados en nuestro archivo de politicas, crea la datos en /var/lib/tripwire/ <hotsname>.twd y lo cifra utilizando la frase de contraseña de site, especificada anteriormente. Para que Tripwire sea realmente seguro, debemos hacer una copia de su base de datos básica en algún medio seguro (disquete, CD o cinta). Si lo guardamos localmente siempre existe la posibilidad de que se pueda alterar el archivo, aunque Tripwire tiene algunas protecciones contra este tipo de acciones. Comprobar la integridad del archivo Es el modo principal de ejecución en Tripwire una vez se haya configurado. Compara los atributos actuales de los archivos especificados con los de la base de datos de Tripwire. El formato es el siguiente: #tripwire -m c file.txt Donde debemos reemplazar file.txt con la ruta de acceso al archivo o a los directorios que deseamos comprobar. Verificará los atributos de dicho archivo, según las especificaciones del archivo de políticas y devolverá un informe con los cambios producidos. Por ejemplo podríamos hacer algo así: # tripwire -m c /bin/* Integrity checking objects specified on command line... Wrote report file: /var/lib/tripwire/report/debian twr Tripwire(R) Integrity Check Report Report generated by: Report created on: Database last updated on: root vie 10 jun :06:13 CEST Never =============================================================================== Report Summary: =============================================================================== Host name: debian Host IP address: Unknown IP Host ID: None Policy file used: /etc/tripwire/tw.pol Configuration file used: /etc/tripwire/tw.cfg Database file used: /var/lib/tripwire/debian.twd Command line used: tripwire -m c /bin/arch /bin/bash /bin/cat /bin/chgrp /bin/chmod /bin/chown /bin/cp /bin/cpio /bin/csh /bin/date /bin/dd /bin/df /bin/dir /bin/dmesg /bin/dnsdomainname /bin/echo /bin/ed /bin/egrep /bin/false /bin/fgconsole /bin/fgrep /bin/fuser /bin/grep /bin/gunzip /bin/gzexe /bin/gzip /bin/hostname /bin/kill /bin/ln /bin/loadkeys /bin/login /bin/ls /bin/lsmod /bin/lsmod.modutils /bin/lspci /bin/mkdir /bin/mknod /bin/mktemp /bin/more /bin/mount /bin/mountpoint /bin/mt /bin/mt-gnu /bin/mv /bin/nano /bin/netstat /bin/pidof /bin/ping /bin/ps /bin/pwd /bin/rbash /bin/readlink /bin/rm /bin/rmdir /bin/run-parts /bin/sed /bin/setpci /bin/setserial /bin/sh /bin/sleep /bin/stty /bin/su /bin/sync /bin/tar /bin/tcsh /bin/tempfile /bin/touch /bin/true /bin/umount /bin/uname /bin/uncompress /bin/vdir /bin/zcat /bin/zcmp /bin/zdiff /bin/zegrep /bin/zfgrep /bin/zforce /bin/zgrep /bin/zless /bin/zmore /bin/znew

252 234 Servidor Linux para conexiones seguras de una LAN a Internet =============================================================================== Rule Summary: =============================================================================== Section: Unix File System Rule Name Severity Level Added Removed Modified Root file-system executables (/bin) Total objects scanned: 82 Total violations found: 0 =============================================================================== Object Summary: =============================================================================== # Section: Unix File System No violations. =============================================================================== Error Report: =============================================================================== No Errors *** End of report *** Tripwire 2.3 Portions copyright 2000 Tripwire, Inc. Tripwire is a registered trademark of Tripwire, Inc. This software comes with ABSOLUTELY NO WARRANTY; for details use --version. This is free software which may be redistributed or modified only under certain conditions; see COPYING for details. All rights reserved. Integrity check complete. Actualizar la base de datos A medida que ajustamos las políticas y realizamos cambios importantes en el sistema, podremos actualizar la base de datos para que refleje con precisión el estado válido de los archivos. Es importante no sólo que se añadan nuevos archivos y directorios a la base de datos sino también que se eliminen los falsos positivos. No se debe actualizar la base de datos si existe alguna posibilidad de que nuestro sistema haya sido comprometido. Así se invalidarán las firmas y nos aseguraremos de que la base de datos Tripwire es útil. Podemos actualizar los directorios seleccionados después de todo, algunos elementos como pueden ser los binarios del sistema, cambiarán en contadas ocasiones. Para actualizar la base de datos de Tripwire, utilizaremos el siguiente comando: #tripwire -m u -r path_reporte_anterior Tendremos que reemplazar path reporte anterior con el nombre y ruta de acceso del archivo de informe más reciente. La ejecución de este comando nos mostrará todos los cambios que se han producido y las reglas que los detectan. Tendremos una X en los cuadros de los archivos en los que Tripwire haya detectado cambios. Si deja ahí la X, Tripwire actualizará la firma para dicho archivo cuando salgamos de éste. Si elimina la X, Tripwire supondrá que la firma original es la correcta y no la actualizará. Al salir, Tripwire ejecutará dichos cambios. También, podemos especificar -c en el comando para salir realizando la vista previa y dejar que Tripwire realice los cambios para los archivos que haya detectado. Actualizar el archivo de políticas Con el tiempo nos daremos cuenta que reglas no están generando alertas válidas y necesitaremos eliminar o cambiar las máscaras de propiedad. Para ello realizaremos los cambios necesarios en el archivo de políticas de Tripwire.

253 Capítulo 13. Sistemas de detección de intrusiones 235 Una vez guardados ejecutaremos el comando siguiente, para que Tripwire actualice el archivo de políticas: #tripwire -m p politica.text Donde debemos reemplazar politica.text con el nuevo archivo de políticas. Tripwire nos pedirá que introduzcamos la contraseña local y de site antes de actualizar la política. Cuando hayamos ajustado suficientemente las políticas de Tripwire, podremos crear una tarea que se ejecute diariamente (o con la frecuencia deseada) para revisar el sistema de archivos en busca de archivos modificados ACIDlab: Analizar alertas IDS La consola de análisis para bases de datos de alarmas de intrusión (ACID, Analysis Console for Intrusion Databases) es un programa diseñado para hacer un mejor uso de los dispositivos de detección de intrusión. Esta es su página oficial: La idea que se esconde detrás de ACID es portar todos los datos de detección de intrusión a una base de datos donde se puedan ordenar y organizar por prioridades. Nos proporciona un panel de control basado en web para visualizar y manipular estos resultados. Utiliza cualquier base de datos SQL y cualquier servidor web, admitiendo múltiples sensores para los datos de entrada. Acepta alertas Snort y archivos de registro ajustados a los registros del sistema. Actualmente, ACID sólo funciona directamente con un IDS, Snort, pero podemos importar registros en la base de datos de ACID desde cualquier dispositivo que produzca una salida en formato tipo archivo de registro utilizando una utilidad denominada Logsnorter, que se encuentra disponible en la web de ACID. Necesitamos cumplir unos requisitos previos para que funcione correctamente: Debemos tener instalados una base de datos, un servidor web y el PHP. Para instalarlo y hacerlo funcionar con Snort, necesitamos comunicar los dos programas a través de una base de datos, por ejemplo MySQL. Instalaremos los siguientes paquetes: #apt-get install acidlab acidlab-doc acidlab-mysql Si queremos enlazar Snort a través de una base de datos MySQL con ACID debemos instalar el paquete: #apt-get install snort-mysql Sustituirá el antiguo Snort por otro que produzca las salidas en una base de datos MySQL. Es muy recomendable instalar ACID en una máquina independiente de Snort. Colocarlos en la misma máquina no sólo es poco recomendable desde el punto de vista de la seguridad sino que además inundará de alertas el sensor Snort hasta hacerlo inservible. El host con ACID debe de ubicarse en un sitio donde no pueda acceder el sensor de Snort. Configuración de ACID Este es el archivo de configuración del sistema ACIDlab: /etc/acidlab/acid_conf.php En la siguiente tabla se puede observar la descripción de las variables contenidas en el archivo:

254 236 Servidor Linux para conexiones seguras de una LAN a Internet Cuadro 13.8: Variables de configuración de ACID Nombre de variable $DBtype $alert_dbname $alert_host $alert_port $alert_user $alert_password $archive_dbname $archive_host $archive_port $archive_user $archive_password $chartlib_path $chart_file_format Descripción Tipo de base de datos ACID que se va a utilizar. El valor predeterminado es mysql, pero también podemos establecer postgresql o mssql. El IDS desde donde se están obteniendo las alarmas para ACID. Actualmente solo adminte Snort (snort log), en el futuro admitirá otros IDS. El host en el que se va a guardar la base de datos de alerta. Puede ser una dirección IP o un nombre de host. Si se está ejecutando en la misma máquina, sería localhost. Para una mejor seguridad y rendimiento, es recomendable ejecutar la base de datos en una máquina distinta a la del servidor web con PHP. Puerto sobre el que se accese a la base de datos. Si es local, sólo debemos introducir para este valor. Nombre de usuario de base de datos que va a utilizar ACID para registrar los datos. Hay que asegurarse de que coincide con el nombre de usuario MySQL creado en la configuración de la base de datos La contraseña para el usuario de la base de datos. Una vez más, hay que asegurarse de que coincide con la contraseña MySQL para dicho usuario. Nombre de la base de datos de Snort. El valor predeterminado es snort archive, a no ser que estemos guardando múltiples bases de datos en esta máquina y deseemos escribir nombres más descriptivos Host donde se va a ubicar la base de datos de archivo. Si está en la misma máquina debe ser localhost. Puerto para iniciar la sesión en el servidor de base de datos. Introducimos si estamos iniciando la sesión localmente. Usuario de base de datos para registrar los datos de archivo. Normalmente es el mismo valor que el de la variable anterior, $alert_user, aunque se pude crear un usuario independiente para registrar los archivos. Contraseña para que el usuario de la base de datos registre los datos de archivo. Como en el caso anterior, el valor suele ser el mismo que el de $alert_password. Ruta de acceso a los módulos de creación de gráficos. Formato de archivo de los gráficos. El formato predeterminado es png. Otros formatos válidos son jpg y gif. Ejecución de ACID Una vez ajustado el archivo de configuración nos debemos conectar a la dirección: Se muestra la página de configuración de ACID. A partir de este momento podremos utilizar la interfaz web para terminar la configuración de ACID. Hacemos clic sobre el boton Create ACID AG para crear una base de datos para los datos Snort. El nombre predeterminado de la base de datos es snort. Una vez hecho esto debemos dirigirnos a: La página principal de ACID y para ver la base de datos de Snort. Una vez hecho esto hemos terminado la configuración de ACID y podemos empezar a utilizarlo para administrar el sistema IDS.

255 Capítulo 13. Sistemas de detección de intrusiones 237 Utilizar ACID para ajustar y administrar nuestro NIDS Antes de que el NIDS sea útil debemos ajustarlo a nuestra red para eliminar alertas de falsos positivos. ACID puede ser una herramienta muy valiosa en esa tarea. Cuando ajustamos por primera vez el NIDS, todas las firmas de alerta se activarán y nuestra base de datos empezará a rellenarse con actividad de las alertas. La mayoría de estas serán falsos positivos, para que los datos de alerta sean importantes en nuestra red, tenemos que empezar a eliminar algunas de estas firmas para reducir la actividad errónea y proporcionar sólo los datos procesables. Cuando tengamos un número suficiente en la base de datos (al menos unas miles de alertas), podemos empezar a analizar datos y asi eliminar los tipos de alertas que no nos proporcionen información. Si pulsamos Unique Alerts (Alertas únicas) se mostrarán las alertas más recientes clasificadas por tipo de alerta. En está página podemos clasificar y ordenar por los siguientes campos: Nombre de la firma (<Signature>). Clasificación de la alerta (<Classification>). Número total de este tipo de alertas en la base de datos (<Total#>). Número de sensores desde donde proviene la alerta (Sensor#). Número de las diferentes direcciones IP de origen asociadas con dicha alerta (<Src. Addr.>). Número de las diferentes direcciones IP de destino asociadas con dicha alerta (<Dest. Addr.>). Hora en la que se ha incluido la alerta (<Firt> y <Last>). Hay que examinar las listas para averiguar si realmente es un problema de seguridad o un falso positivo: Se puede apreciar algún tipo de patrón? Provienen todas las alertas de la misma dirección IP? Se dirigen todas las alertas a la misma dirección IP? Se producen a intervalos regulares o lo hacen de forma aleatoria? Si este análisis no nos conduce a ninguna conclusión, se puede buscar con más detalle haciendo clic en las alertas individuales. Basándose en la IP del emisor, podemos utilizar esta información para determinar si se trata de una dirección que normalmente está accediendo a nuestra red. También podemos mirar más abajo para comprobar la parte útil del paquete (Se ve en hexadecimal y ASCII). Si determinamos que es un ataque al sistema podemos intentar tomar medidas. Normalmente serán gusanos automatizados, ataque que se produce docenas de veces al dia. Aun así es mejor estar pendiente de estas alertas para comprobar si la IP persiste. Al menos, podemos asegurarnos de que la máquina atacada esta protegida contra ese tipo de ataque y enviar una queja al ISP del atacante. También se pueden ejecutar otras acciones contra la dirección IP que aparece como IP de origen, como una persecución legal o una acción civil, si se ha producido con éxito la intrusión. Al menos sabremos exactamente qué tipo de ataques se están produciendo en nuestra red y lo que están intentando hacer, Así, nuestra red estará más protegida y podremos reaccionar si se produce un ataque.

256 238 Servidor Linux para conexiones seguras de una LAN a Internet Figura 13.2: Detalle de una alerta ACID Otras formas de analizar datos de alerta utlizando ACID Ahora que disponemos de nuestra base de datos llena de alertas, podremos buscar las respuestas a algunas preguntas que se nos plantean a continuación. Quién es el objetivo del ataque? Al utilizar ACID, buscamos las direcciones IP más comunes ya que muestran las direcciones IP que supuestamente son las más atacadas y, por consiguiente, habrá máquinas sobre las que debemos centrar nuestros esfuerzos de protección, algo que nos ayudará a diferenciar entre los falsos positivos y los positivos reales. Podremos localizar cualquier máquina que esté generando un gran número de alertas desde una aplicación que se está ejecutando. Un incremento súbito en las alertas hacia una dirección IP determinada puede apuntar que se esta iniciando un ataque sobre dicha máquina. A continuación, podemos ejecutar escáneres de vulnerabilidad, comprobar los niveles de seguridad, restringir direcciones de IP origen en el enrutador, etc. Quién está atacando? Buscamos la dirección de origen IP que aparece con más frecuencia. Para ello nos debemos dirigir a la lista IP de origen; así podremos ver la IP y el nombre de dominio totalmente calificado (FQDN, Fully Qualified Domain Name) que indica de dónde proviene el ataque. La ordenación por el número de alertas permite ver a los peores atacantes, según la generación de alertas. Si las direcciones IP con la mayoría de las alertas están en nuestra red, puede existir un culpable interno o una aplicación que esté activando una alerta. Utilizamos el proceso analizado anteriormente para llegar al detalle de la alerta. Si provienen de direcciones IP externas, tendremos que determinar si se trata de un enlace de tráfico legítimo de nuestra red o son ataques reales. Buscamos en las alertas individuales para comprobar lo que esta pasando. Al hacer clic en la dirección se abre una página con información adicional sobre la dirección y algunas opciones para analizarla con más detalle. Analizando esas salidas podremos encontrar qué organización es propietaria de dichas IP. Y podremos registrar una queja en su centro de operaciones. Así mismo, si comprobamos que determinadas direcciones aparecen una y otra vez, podremos filtrar estas direcciones IP en nuestro cortafuegos.

257 Capítulo 13. Sistemas de detección de intrusiones 239 Cuál es el servicio más atacado? Al buscar los puertos más comunes en los que las alertas se están recibiendo podemos comprobar cuáles son los servicios más atacados. Si comprobamos que hay muchas alertas basadas en web, deberemos de tener más cuidado en el bloqueo de servidores web. Si las alertas muestran mucha actividad NetBIOS de Windows, tendremos que mirar las políticas de contraseñas y permisos de Windows. Así podremos saber cuáles son los servicios en los que debemos centrar primero nuestra atención. Mantener la base de datos ACID A medida que crece nuestra base de datos, tendremos que ejecutar algún tipo de tarea de mantenimiento periódico, para evitar que se haga demasiado grande. Así mismo, nuestras estadísticas y gráficos serán más precisos si archivamos nuestras primeras alertas, que van a contener muchos falsos positivos. Así mismo, la limpieza de nuestra base de datos de vez en cuando agilizará el proceso de consultas. Para archivar las alertas, utilizamos el control de consulta que se encuentra en la parte inferior de la pantalla principal. Podemos crear una consulta para las alertas que se desea archivar, por ejemplo, todas las alertas generadas el último año. Después seleccionamos Archive Alerts (Archivar alertas) como acción para la consulta. Podemos archivar alertas seleccionando por dato, alerta u otros criterios. También podemos elegir simplemente copiar las alerta en un archivo o eliminarlas. Las alertas archivadas se situarán en la propia base de datos, con el nombre establecido en el archivo acid conf.php durante la configuración. Debemos archivar todas las alertas desde los primeros meses de funcionamiento cuando estábamos ajustando el sensor de Snort. A partir de ahora, los datos serán más importantes para los ataques reales frente a los falsos positivos. Es recomendable archivar al menos una vez al año o quizá trimestralmente, dependiendo del volumen de alertas que se estén registrando. Como regla general, no es recomendable tener más de alertas en la base de datos Logcheck: Analizar logs Leer los logs, de nuestro sistemas es una tarea pesada y requiere bastante tiempo. Si tenemos bastante trabajo como administradores de sistemas, es probable que pasemos días o semanas sin mirarlos. Debido a esto, no sabemos qué oscuras criaturas pueden estar penetrando nuestro sistema. Además, cuando leemos logs la proporción de información útil respecto a la inútil es alarmantemente baja... Se hace necesario disponer de una herramienta que analize automáticamente esa información y solo extraiga las partes interesantes de esos logs. Haciéndolos mucho más fáciles de consultar y, sobre todo, leer. Logcheck revisa periódicamente los logs del sistema, analizando y clasificando cada línea y según diferentes niveles de alerta. Reportándolo al administrador del sistema en un formato fácil de leer, descartando las líneas que no tengan relevancia. Normalmente estos datos son enviados por correo. Logcheck chequeará cada línea frente a cuatro niveles de seguridad: Ignorar, actividad inusual, violación de seguridad y ataque. Para instalar el programa necesitaremos hacer un apt: #apt-get install logcheck Logcheck opera encontrando expresiones regulares. Itera sobre cada uno de los archivos de log tres veces (para localizar mensajes inusuales, violaciones de seguridad y alertas de ataque) utilizando egrep para buscar los patrones. Podemos consultar el manual de egrep para poder construir reglas más potentes. Archivos que utiliza Logcheck Al instalar Logcheck nos encontramos en el sistema los siguientes archivos: logcheck.sh: Es el programa que se ejecutará cada vez que sea invocado logcheck. Es un script en shell normal, e incluye la configuración en un formato fácil de comprender.

258 240 Servidor Linux para conexiones seguras de una LAN a Internet logcheck.hacking: Tiene la lista de cadenas con las que una línea será identificada como intento de entrar al sistema o de conseguir información acerca de él, y por tanto serán reportadas como ataques activos, llamando la atención de manera especial al administrador. logcheck.ignore: Tiene la lista de expresiones que son muy comunes y no vale la pena reportarlas al administrador. logcheck.violations: Tiene la lista de expresiones que pueden ser consideradas moderadamente peligrosas, y son etiquetadas como violaciones de seguridad. logcheck.violations.ignore: Permite ser más específico: Si una línea concuerda con una de las expresiones de logcheck.violations pero también concuerda con una de éste archivo, la línea es ignorada. tmp: Es el directorio temporal utilizado por el programa para procesar los datos. Además de estos archivos, logcheck instala el programa logtail en /usr/local/bin. Este programa mantiene la información de qué logs han sido analizados y hasta qué punto, para no perder ni repetir líneas. Logcheck por defecto analizará los archivos /var/log/messages, /var/log/secure y /var/log/maillog. Opciones de logcheck.sh En el archivo logcheck.sh encontraremos las siguientes opciones de configuración: PATH : Indica dónde buscará el sistema los binarios. Debemos recordar que se ejecutara con una llamada desde cron, por lo que no hace daño definirlo, y tal vez limitarlo al mínimo necesario. SYSADMIN : Es la persona que recibirá el reporte por correo. Si no lleva una dirección completa, asume que es una dirección local. LOGTAIL: Indica el path completo para el programa logtail. TMPDIR: Especifica el directorio temporal que usará el programa. Este debe ser un directorio seguro, que no tenga acceso de escritura más que para el usuario que ejecute Logcheck. GREP: Indica el nombre del comando grep a ejecutar. En muchos sistemas Unix hay diferentes grep con diferentes características, sugerimos instalar el egrep de GNU. MAIL: Es el comando empleado para mandar un correo. Típicamente será mail, aunque en algunos sistemas puede ser mailx. HACKING FILE: Es el pathname y nombre completo del archivo logcheck.hacking VIOLATIONS FILE: Es el pathname y nombre del archivo logcheck.violations VIOLATIONS IGNORE FILE: Es el pathname y nombre del archivo logcheck.violations.ignore IGNORE FILE: Es el pathname y nombre completo del archivo logcheck.ignore Ejecución de logcheck.sh Logcheck no es un programa que funcione continuamente, sino que es llamado cada vez que el administrador lo cree adecuado. Como cada reporte será enviado por correo, lo más común es hacerlo cada hora. Para ello es necesario crear una entrada en el crontab de root o de algún usuario que tenga permiso de leer los archivos localizados en /var/log. La línea a ser agregada en el crontab será similar a la siguiente: 0 * * * * /bin/sh /usr/local/etc/logcheck.sh

259 Capítulo 13. Sistemas de detección de intrusiones 241 Con esto, cada hora el administrador recibirá un mensaje similar al siguiente: From Wed Sep 27 21:46: Date: Wed, 27 Sep :00: From: root To: Subject: hostname.dominio.com 09/27/00:19.00 system check Security Violations =-=-=-=-=-=-=-=-=-= Sep 27 18:23:07 hostname PAM_pwdb[14075]: authentication failure; (uid=0) -> root for ssh service Sep 27 18:23:11 hostname PAM_pwdb[14075]: (ssh) session opened for user root by (uid=0) Sep 27 18:23:11 hostname sshd[14075]: log: Password authentication for root accepted. Sep 27 18:23:11 hostname sshd[14075]: log: ROOT LOGIN as root from hostname2.dominio.com Sep 27 18:23:43 hostname PAM_pwdb[14075]: (ssh) session closed for user root Unusual System Events =-=-=-=-=-=-=-=-=-=-= Sep 27 18:02:26 hostname proftpd[13963]: hostname.dominio.com (lab1-15.dominio.com [ ]) - FTP no transfer timeout, disconnected. Sep 27 18:14:40 hostname proftpd[14030]: hostname.dominio.com (lab1-15.dominio.com [ ]) - FTP no transfer timeout, disconnected. Sep 27 18:22:19 hostname proftpd[13875]: hostname.dominio.com (lab2-21.dominio.com [ ]) - FTP no transfer timeout, disconnected. Sep 27 18:23:07 hostname PAM_pwdb[14075]: authentication failure; (uid=0) -> root for ssh service Sep 27 18:23:11 hostname PAM_pwdb[14075]: (ssh) session opened for user root by (uid=0) Sep 27 18:23:11 hostname sshd[14075]: log: ROOT LOGIN as root from dir-03.dominio.com Sep 27 18:00:12 hostname sendmail[13610]: RAB13605: SAA13610: DSN: Host unknown (Name server: mail.internet.com: host not found) En caso de haberse registrado algún evento que concuerde con alguna línea de logcheck.hacking, para que el reporte sea visto más rápidamente por el administrador cambiarán los encabezados, quedando así: From Wed Sep 27 21:52: Date: Wed, 27 Sep :00: From: root To: Subject: hostname.dominio.com 09/27/00:21.00 ACTIVE SYSTEM ATTACK! Active System Attack Alerts =-=-=-=-=-=-=-=-=-=-=-=-=-= Sep 27 20:10:48 hostname portsentry[14722]: attackalert: SYN/Normal scan from host: ejemplo.dominio.com/ to TCP port: 1019 Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Host has been blocked via wrappers with string: "ALL: " Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Host has been blocked via dropped route command: "/sbin/iptables -I input -s j DENY -l" (...) Security Violations =-=-=-=-=-=-=-=-=-= Sep 27 20:09:19 hostname PAM_pwdb[14589]: authentication failure; (uid=0) -> root for ssh service Sep 27 20:09:22 hostname PAM_pwdb[14589]: (ssh) session opened for user root by (uid=0) Sep 27 20:09:22 hostname sshd[14589]: log: Password authentication for root accepted. (...) Unusual System Events =-=-=-=-=-=-=-=-=-=-= Sep 27 20:10:47 hostname sshd[14624]: fatal: Did not receive ident string. Sep 27 20:19:43 hostname PAM_pwdb[14985]: authentication failure; (uid=0) -> llec for ssh service Sep 27 20:09:34 hostname in.telnetd[14610]: connect from (...) Interfaz web para Logchek Podemos manejar graficamente este util programa desde nuestro Webmin. Para instalar: #apt-get install sentry El la figura se puede observar que la configuración de la herramienta se vuelve un juego de niños PortSentry: Detectar escaneos de puertos Cuando un atacante decide probar suerte en nuestro sistema, lo primero que necesita es recopilar cuanta información le sea posible acerca de él. Todo puede serle útil: Sistema operativo, versión, servicios que ofrecemos, versión de los programas que tenemos... Cualquiera de estos datos puede ser suficiente para que su ataque sea exitoso. Basta con que el atacante vea, por ejemplo, que tenemos una versión vieja de un programa, aunque no tenga éste ninguna vulnerabilidad importante, para que se dé cuenta que no somos administradores muy cuidadosos y probablemente tengamos otros servicios descuidados. La manera más común en que un atacante va a intentar obtener información acerca de nosotros es el barrido de puertos: Intentar conectarse a cada uno de los puertos que tiene abiertos nuestro servidor, anotando qué es lo que tiene activo y analizando dicha información. Una de las herramientas más comunes para realizar barridos de puertos es el Nmap (véase sección 17.2).

260 242 Servidor Linux para conexiones seguras de una LAN a Internet Figura 13.3: Módulo Webmin para LogCheck Tras haber hecho esta prueba, el atacante puede intentar entrar a cada uno de los puertos abiertos, revisando si encuentra alguna versión vieja o vulnerable. Detectar un barrido de puertos es muy fácil: Muchas conexiones casi simultáneas a una gran cantidad de puertos originadas desde la misma dirección. Si bien los programas barredores se han vuelto muy sofisticados y cada vez es más difícil detectarlos por diferentes estrategias que emplean (Nmap sabe hacer desde una sencilla conexión TCP hasta un barrido silencioso con SYN, FIN, Xmas, Null, UDP, paquetes fragmentados y barridos paralelos de diferentes tipos), el principio básico es el mismo. Hay un excelente programa dedicado precisamente a encontrar éste patrón y tomar la acción que le indique el administrador del sistema: Portsentry. Para instalar el programa necesitaremos hacer un apt: #apt-get install portsentry Portsentry es un programa muy sencillo. Su misión es sentarse y escuchar en los puertos que le indiquemos que deben permanecer siempre inactivos. En caso de llegar una conexión a uno de ellos puede marcarlo en los logs del sistema, bloquear toda la comunicación con la dirección identificada como agresora, o ejecutar un comando externo. El archivo de configuración de PortSentry es: /etc/portsentry/portsentry.conf El programa tiene varios modos de operación: Modo clásico Modo stealth Modo avanzado

261 Capítulo 13. Sistemas de detección de intrusiones 243 Modo clásico En este modo, le especificamos a Portsentry que escuche determinados puertos TCP y UDP, especificados con las opciones UDP PORTS y TCP PORTS y por los cuales no estamos dando ningún servicio. Por ejemplo, puede que nuestro servidor no esté dando servicio de red SMB (Samba, red tipo Microsoft). Sin embargo, es común que las computadoras windows manden mensajes broadcast buscando a un sistema en específico, con lo que podríamos recibir una gran cantidad de alertas falsas. Vienen varios puertos predefinidos en el archivo de configuración, y es recomendable utilizarlos inicialmente. Modo stealth En este modo Portsentry abre sockets crudos, lo que le permite detectar una mayor cantidad de barridos y ataques: Ataques de conexión normal, SYN/half-open, FIN, NULL y XMAS. Este modo es un tanto experimental, por lo cual no funcionará en todos los sistemas. Modo avanzado Este modo es también considerado hasta cierto punto perteneciente a la categoría stealth. En éste modo, Portsentry no abre ningún puerto, sino que le pide al kernel que le notifique si llega alguna petición a algún puerto menor al especificado en las opciones ADVANCED PORTS TCP y ADVANCED PORTS UDP. Tendremos que excluir algunos puertos que sean particularmente ruidosos (como el comentado en la sección anterior, SMB) y para ello tenemos las opciones ADVANCED EXCLUDE TCP y ADVAN- CED EXCLUDE UDP. El modo avanzado es mucho más sensible que el modo clásico, dado que escucha muchos más puertos, por lo que puede efectivamente causar una negación de servicio si no es configurado con cuidado. Otras opciones de configuración Tras haber especificado los puertos que deseamos escuchar, hay algunos parámetros adicionales que debemos especificar: IGNORE FILE: Es el nombre del archivo que incluye la lista de direcciones en las que confiamos y por tanto no queremos bloquear si intentan acceder a un puerto bloqueado. Por ejemplo, sería muy molesto que quisiéramos ejecutar Nmap contra uno de nuestros servidores para asegurarnos de que no haya servicios abiertos que no requiramos y que nosotros mismos quedáramos bloqueádos. HISTORY FILE: Contiene la lista de direcciones que Portsentry ha detectado intentando acceder a puertos monitoreados. BLOCKED FILE: Es equivalente a HISTORY FILE, pero relevante únicamente a la sesión actual de Portsentry. BLOCK TCP: Especifica qué hacer cuando un barrido de puertos TCP es detectado. Tiene tres posibles valores: 0 (sólo registrar el intento), 1 (bloquear la dirección que intentó acceder a la máquina) y 2 (ejecutar un comando externo especificado en KILL RUN CMD). BLOCK UDP: Es equivalente a BLOCK TCP para barridos de puertos UDP. KILL ROUTE: Guarda el comando utilizado para descartar toda la comunicación con una dirección. En un sistema que incluya un filtro de paquetes (por ejemplo, iptables en Linux o ipf en los *BSD) es muy preferible manejar una regla bloqueando la conexión. KILL HOSTS DENY : Tiene la línea que deberá ser agregada a /etc/hosts.deny para que la dirección atacante sea bloqueada por TCPwrappers. Es conveniente activarlo, pues a diferencia de las reglas manejadas por KILL ROUTE éste archivo sobrevivirá a la baja del sistema. Pero, no hay que confiarse TCPwrappers sólo maneja determinados servicios, y si sólo nos protegemos con él, el sistema podrá seguir proporcionando información importante a nuestro atacante.

262 244 Servidor Linux para conexiones seguras de una LAN a Internet KILL RUN CMD: Puede guardar un comando a ser ejecutado de ser detectada una intrusión. No se recomienda utilizar esta opción, ya que puede fácilmente llevar a una negación de servicio. Hay administradores que sugieren utilizar esta opción para lanzar un contraataque contra el atacante. Nosotros categóricamente les indicamos que esto es una muy mala idea La mejor defensa es tener nuestro sistema seguro, no atacar al enemigo. Al atacar al enemigo, lo más probable es que centre más su atención en nosotros y, con el paso del tiempo, logre penetrar nuestra seguridad. Es mucho mejor aparentar que nada ocurrió o simplemente tirar la conexión que atacarla. SCAN TRIGGER: Indica con cuantos intentos de conexión se deben realizar, para marcarla como un ataque. Probablemente, si a la primera bloqueamos toda comunicación con el presunto atacante, dejaremos fuera a muchos usuarios legítimos que por casualidad hicieron la conexión equivocada. Sin embargo, si ponemos un número muy alto nos exponemos a dar más información de la que hubiéramos querido. Un valor de 1 o 2 es recomendado, aunque los muy paranóicos querrán mantenerlo en 0. Inicialización automática Hay que incluir la ejecución en uno de los archivos que se ejecutan al iniciar la máquina. Las opciones que podemos establecer son las siguientes: Cuadro 13.9: Opciones de PortSentry Opción -tcp -udp -stcp -sudp -atcp -audp Descripción Iniciar en modo clásico, escuchar TCP Iniciar en modo clásico, escuchar UDP Iniciar en modo stealth, escuchar TCP Iniciar en modo stealth, escuchar UDP Iniciar en modo avanzado, escuchar TCP Iniciar en modo avanzado, escuchar UDP Típicamente levantaremos dos copias del programa en el mismo modo general, una escuchando UDP y la otra TCP. Almacenamiento en los logs del sistema El simple hecho de que Portsentry evite ciertos ataques al sistema es de por sí muy bueno y deseable. Sin embargo, para que ésto nos sea realmente útil, tenemos que analizar nuestros logs y llevar registros de quién y cuándo intentó se intentaron escanear nuestros puertos. Además, sólo leyendo los logs sabremos si estamos limitando de más, bloqueando el acceso de máquinas legítimas. Afortunadamente, Portsentry utiliza syslog para reportar toda la información que el administrador debe saber, por lo cual todo lo que necesitamos estará típicamente en el archivo /var/log/messages, o donde se lo hayamos especificado en el syslogd.conf. La detección de un barrido hecho por Nmap en un sistema Linux se ve así: Sep 27 20:10:48 hostname portsentry[14722]: attackalert: SYN/Normal scan from host: ejemplo.dominio.com/ to TCP port: 1019 Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Host has been blocked via wrappers with string: "ALL: " Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Host has been blocked via dropped route using command: "/sbin/iptables -I input -s j DENY -l" Sep 27 20:10:48 hostname portsentry[14722]: attackalert: SYN/Normal scan from host: ejemplo.dominio.com/ to TCP port: 70 Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Host: ejemplo.dominio.com/ is already blocked Ignoring Sep 27 20:10:48 hostname portsentry[14722]: attackalert: SYN/Normal scan from host: ejemplo.dominio.com/ to TCP port: 934 Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Host: ejemplo.dominio.com/ is already blocked Ignoring Sep 27 20:10:48 hostname portsentry[14722]: attackalert: SYN/Normal scan from host: ejemplo.dominio.com/ to TCP port: 267 Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Host: ejemplo.dominio.com/ is already blocked Ignoring Sep 27 20:10:48 hostname portsentry[14722]: attackalert: SYN/Normal scan from host: ejemplo.dominio.com/ to TCP port: 202 Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Host: ejemplo.dominio.com/ is already blocked Ignoring Sep 27 20:10:48 hostname portsentry[14722]: attackalert: SYN/Normal scan from host: ejemplo.dominio.com/ to TCP port: 613 (...)

263 Capítulo 13. Sistemas de detección de intrusiones 245 Readmitiendo hosts marcados como atacantes Cuando configuremos Portsentry es muy común que marquemos direcciones como atacantes por error. Eliminarlos de la lista de bloqueo es afortunadamente muy sencillo. Si asumimos que queremos volver a permitir acceso a la dirección Todo el proceso deberemos realizarlo como root. Nuestro primer paso será editar el archivo /etc/hosts.deny y buscar la dirección que queremos eliminar, en nuestro caso la tercera: # # hosts.deny This file describes the names of the hosts which are # *not* allowed to use the local INET services, as decided # by the /usr/sbin/tcpd server. # # The portmap line is redundant, but it is left to remind you that # the new secure portmap uses hosts.deny and hosts.allow. In particular # you should know that NFS uses portmap! ALL: ALL: ALL: ALL: ALL: Consultamos la tabla de direcciones filtradas por iptables. El comando iptables-save es de gran utilidad para esa tarea, pues muestra las líneas con los comandos que serían necesarios para insertarlas. # /sbin/iptables-save :input ACCEPT :forward ACCEPT :output ACCEPT Saving input. -A input -s / d / j DENY -l -A input -s / d / j DENY -l -A input -s / d / j DENY -l -A input -s / d / j DENY -l -A input -s / d / j DENY -l Una línea es insertada en iptables con -A, y es eliminada con -D, por lo cual basta con que hagamos: #iptables -D input -s / d / j DENY -l Con esto, el host con la dirección ya tendrá de nuevo acceso a nuestro sistema. Interfaz web para Portsentry Podemos manejar graficamente este util programa desde nuestro Webmin. Para instalar: #apt-get install sentry El la figura se puede observar que la configuración de la herramienta se vuelve un juego de niños Detectores de sniffers Un grave problema de nuestra red son las escuchas clandestinas, como podemos estar seguros que no hay nadie escuchando nuestras conexiones? Disponemos de varias herramientas para la detección de tarjetas de red en modo promiscuo (sniffers), aquí mostraremos las siguientes: Neped Sentinel Estas herramientas, utilizan las siguientes técnicas para descubrir sniffers:

264 246 Servidor Linux para conexiones seguras de una LAN a Internet Figura 13.4: Módulo Webmin para Portsentry El test DNS En este método, la herramienta de detección en sí misma está en modo promiscuo. Creamos numerosas conexiones TCP falsas en nuestro segmento de red, esperando un sniffer pobremente escrito para atrapar estas conexiones y resolver la dirección IP de los inexistentes hosts. Algunos sniffers realizan búsquedas inversas DNS en los paquetes que capturan. Cuando se realiza una búsqueda inversa DNS, una utilidad de detección de sniffers huele la petición de las operaciones de búsqueda para ver si el objetivo es aquel que realiza la petición del host inexistente. El Test ICMP Etherping Este método confía en un problema en el núcleo de la máquina receptora. Podemos construir una petición tipo ICMP ECHO con la dirección IP de la máquina sospechosa de hospedar un sniffer. Enviamos un un paquete ICMP ECHO al objetivo con la dirección IP correcta, pero con una dirección de MAC deliberadamente errónea. La mayoría de los sistemas desatenderán este paquete ya que su dirección MAC es incorrecta. Pero en algunos sistemas Linux, NetBSD y NT, puesto que el NIC está en modo promiscuo, el sniffer identificara este paquete de la red como paquete legítimo y responderá por consiguiente. Si el blanco en cuestión responde a nuestra petición, sabremos que está en modo promiscuo. Los sniffers avanzados filtran tales paquetes para que parezca que el NIC no hubiera estado en modo promiscuo. El Test ICMP de latencia Ping de Latencia. En éste método, hacemos ping al blanco y anotamos el Round Trip Time (RTT, retardo de ida y vuelta o tiempo de latencia) Creamos centenares de falsas conexiones TCP en nuestro segmento de red en un período de tiempo muy corto. Esperamos que el sniffer esté procesando estos paquetes a razón de que el tiempo de latencia incremente. Entonces hacemos ping otra vez, y comparamos el RTT esta vez con el de la primera vez. Después de una serie de tests y medias, podemos concluir o no si un sniffer está realmente funcionando en el objetivo.

265 Capítulo 13. Sistemas de detección de intrusiones 247 El test ARP Podemos enviar una petición ARP a nuestro objetivo con toda la información rápida excepto con una dirección hardware de destino errónea. Una máquina que no esté en modo promiscuo nunca verá este paquete, puesto que no era destinado a ellos, por lo tanto no contestará. Si una máquina está en modo promiscuo, la petición ARP sería considerada y el núcleo la procesaría y contestaría. La máquina que contesta está en modo promiscuo Neped NePED es una herramienta imprescindible para cualquier administrador de redes. Al ejecutarlo, el programa nos informará de todos los equipos conectados a nuestra red local con la tarjeta ethernet en modo promiscuo. Lo podemos descargar desde su página web: La forma de uso es muy sencilla: #neped <dispositivo> #neped eth0 Esto sería un ejemplo de su funcionamiento: > My HW Addr: 00:00:F4:C2:0E:2A > My IP Addr: > My NETMASK: > My BROADCAST: > Scanning... *> Host , 00:60:08:64:06:FF **** Promiscuous mode detected!!! > End. La técnica empleada para la detección es sumamente sencilla. Se trata de realizar una simple petición ARP para cada una de las IPs de nuestra red, con la salvedad de que los paquetes no van destinados al broadcast (FF:FF:FF:FF:FF:FF), sino a una dirección arbitraria (cualquiera que no exista). Solo las maquinas con la tarjeta ethernet en modo promiscuo son capaces de ver estos paquetes, y por lo tanto, solo ellas contestarán a nuestras peticiones Sentinel Lo podemos descargar desde su página web: Utiliza los métodos de busqueda de snifers: Test DNS, test ARP, test ICMP Etherping y test ICMP de latencia. La forma de uso es muy sencilla: #sentinel <metodo> [-t <ip>] <opciones> Como método de uso podemos especificar uno o varios de los siguentes: -a: test ARP -d: test DND -i: ICMP test ping de latencia -e: ICMP test etherpingt Las opciones más comunes se detallan a continuación:

266 248 Servidor Linux para conexiones seguras de una LAN a Internet -f <nombre>: Donde nombre representa, un fichero o una IP -c <x.x.x>: Clase C a monitorizar -n <n\ umero de paquetes a enviar> -I <dispositivo> Y estos serían algunos posibles ejemplos de uso de Sentinel: Test ARP en el host #sentinel -a -t Test DNS en el host #sentinel -d -f t Escanear una red de Clase C ( ) usando el test ARP, DNS y test etherping #sentinel -aed -c Chkrootkit: Detector de rootkits Chkrootkit es un shell script que busca en nuestro sistema binarios modificados por RootKits, estos son usados por los piratas informáticos para comprometer sistemas. Para instalarlo solo hay que realizar un apt: #apt-get install chkrootkit Los piratas informaticos, suelen camuflar o sustituir algunos ficheros binarios del sistema por sus propios ficheros, algunos de los ejemplos típicos son: login, su, telnet, netstat, ifconfig, ls, find, du, df, libc, sync, asi como los binarios listados en /etc/inetd.conf. Este programa nos ayuda a verificar que tenemos la versión original de estos ficheros, en la última versión disponible detecta troyanos en los siguientes ficheros: aliens, asp, bindshell, lkm, rexedcs, sniffer, wted, z2, amd, basename, biff, chfn, chsh, cron, date, du, dirname, echo, egrep, env, find, fingerd, gpm, grep, hdparm, su, ifconfig, inetd, inetdconf, identd, killall, login, ls, mail, mingetty, netstat, named, passwd, pidof, pop2, pop3, ps, pstree, rpcinfo, rlogind, rshd, slogin, sendmail, sshd, syslogd, tar, tcpd, top, telnetd, timed, traceroute, write. También es capaz de detectar los siguientes RootKits: Solaris rootkit, FreeBSD rootkit, lrk3, lrk4, lrk5, lrk6, t0rn (and t0rn v8), some lrk variants, Ambient s Rootkit for Linux (ARK), Ramen Worm, rh[67]-shaper, RSHA, Romanian rootkit, RK17, Lion Worm, Adore Worm, LPD Worm, kenny-rk, LKM, ShitC Worm, Omega Worm, Wormkit Worm, dsc-rootkit. Al ser un shell scrip una vez compilados los programas (chkwtmp, chklastlog, chkproc, chkwtmp, ifpromisc) utilizarán el chkrootkit para realizar parte de su trabajo. En el sistema que he utilizado para el proyecto provoca la siguiente salida: # chkrootkit ROOTDIR is / Checking amd... not found Checking basename... not infected Checking biff... not infected Checking chfn... not infected Checking chsh... not infected Checking cron... not infected Checking date... not infected Checking du... not infected Checking dirname... not infected Checking echo... not infected

267 Capítulo 13. Sistemas de detección de intrusiones 249 Checking egrep... not infected Checking env... not infected Checking find... not infected Checking fingerd... not found Checking gpm... not found Checking grep... not infected Checking hdparm... not infected Checking su... not infected Checking ifconfig... not infected Checking inetd... not infected Checking inetdconf... not infected Checking identd... not found Checking init... not infected Checking killall... not infected Checking ldsopreload... not infected Checking login... not infected Checking ls... not infected Checking lsof... not infected Checking mail... not infected Checking mingetty... not found Checking netstat... not infected Checking named... not found Checking passwd... not infected Checking pidof... not infected Checking pop2... not found Checking pop3... not found Checking ps... not infected Checking pstree... not infected Checking rpcinfo... not infected Checking rlogind... not found Checking rshd... not found Checking slogin... not infected Checking sendmail... not infected Checking sshd... not infected Checking syslogd... not infected Checking tar... not infected Checking tcpd... not infected Checking tcpdump... not infected Checking top... not infected Checking telnetd... not found Checking timed... not found Checking traceroute... not infected Checking vdir... not infected Checking w... not infected Checking write... not infected Checking aliens... no suspect files Searching for sniffer s logs, it may take a while... nothing found Searching for HiDrootkit s default dir... nothing found Searching for t0rn s default files and dirs... nothing found Searching for t0rn s v8 defaults... nothing found Searching for Lion Worm default files and dirs... nothing found Searching for RSHA s default files and dir... nothing found Searching for RH-Sharpe s default files... nothing found Searching for Ambient s rootkit (ark) default files and dirs... nothing found Searching for suspicious files and dirs, it may take a while... /usr/lib/mozilla-firefox/.autoreg /usr/lib/kaffe/.system Searching for LPD Worm files and dirs... nothing found Searching for Ramen Worm files and dirs... nothing found Searching for Maniac files and dirs... nothing found Searching for RK17 files and dirs... nothing found Searching for Ducoci rootkit... nothing found Searching for Adore Worm... nothing found Searching for ShitC Worm... nothing found Searching for Omega Worm... nothing found Searching for Sadmind/IIS Worm... nothing found Searching for MonKit... nothing found Searching for Showtee... nothing found Searching for OpticKit... nothing found Searching for T.R.K... nothing found Searching for Mithra... nothing found Searching for OBSD rk v1... nothing found Searching for LOC rootkit... nothing found Searching for Romanian rootkit... nothing found Searching for Suckit rootkit... nothing found Searching for Volc rootkit... nothing found Searching for Gold2 rootkit... nothing found Searching for TC2 Worm default files and dirs... nothing found Searching for Anonoying rootkit default files and dirs... nothing found Searching for ZK rootkit default files and dirs... nothing found Searching for ShKit rootkit default files and dirs... nothing found Searching for AjaKit rootkit default files and dirs... nothing found Searching for zarwt rootkit default files and dirs... nothing found Searching for Madalin rootkit default files... nothing found Searching for anomalies in shell history files... nothing found Checking asp... not infected Checking bindshell... not infected Checking lkm... You have 2 process hidden for readdir command You have 2 process hidden for ps command Warning: Possible LKM Trojan installed Checking rexedcs... not found Checking sniffer... lo: not promisc and no packet sniffer sockets eth0: PACKET SNIFFER(/sbin/dhclient[3930], /usr/sbin/snort[4577]) Checking w not infected Checking wted... nothing deleted Checking scalper... not infected Checking slapper... not infected Checking z2... nothing deleted Vaya!, parece que ha detectado un archivo sospechoso, un posible troyano y que Snort está instalado.

268 250 Servidor Linux para conexiones seguras de una LAN a Internet HoneyPots: Entretener a los atacantes Información obtenida de la web: El papel de la tecnología del sistema de detección de intrusos basado en señuelos (o honeypots ) está evolucionando. Los honeypots, que alguna vez fueron utilizados, principalmente por los investigadores, como una forma de atraer a los intrusos a un sistema de redes para estudiar sus movimientos y comportamiento, están adquiriendo una importancia cada vez mayor en la seguridad empresarial. En efecto, al brindar detección temprana de actividad no autorizada en las redes, los honeypots son ahora más útiles que nunca para los profesionales de la seguridad informática. Aquí se analiza el funcionamiento de los honeypots y su tecnología, que se está convirtiendo en el componente clave del sistema de capas de protección contra intrusos. Los honeypots son una emocionante tecnología nueva, con un enorme potencial para la comunidad informática. Los primeros conceptos fueron introducidos primeramente por varios iconos en la seguridad informática, especialmente por Cliff Stoll en el libro The Cuckoo s Egg y el trabajo de Bill Cheswick An Evening with Berferd. Desde entonces, han estado en una continua evolución, convirtiendose en la poderosa herramienta de seguridad que es hoy en día. En esta sección se detalla exactamente: qué son los honeypots, sus ventajas y desventajas, y su importancia en la seguridad. Los Honeypots (o tarros de miel) Consisten en activar un servidor y llenarlo de archivos tentadores, hacer que sea difícil, pero no imposible penetrarlo y sentarse a esperar que aparezcan los intrusos. Los honeynets (conjuntos de honeypots) dan a los crackers un gran espacio para recorrer. Presentan obstáculos que poseen el nivel de complejidad suficiente para atraerlos, pero sin irse al extremo para no desalentarlos... Juegan con los archivos y conversan animadamente entre ellos sobre todos los fascinantes programas que encuentran, mientras el personal de seguridad observa con deleite cada movimiento que hacen. Francamente, siento una combinación de sentimientos con respecto a espiar a la gente, aunque no sean buenas personas. Dan Adams. Los honeynets son conjuntos de Honeypots, compuestos por servicios reales, así se abarca más información para el estudio. Hacen más fascinante el ataque al intruso, lo cual incrementa el número de ataques. La función principal a parte de la de estudiar las herramientas de ataque, es la de desviar la atención del atacante de la red real del sistema y la de capturar nuevos virus o gusanos para su posterior analisis. Una de las múltiples aplicaciones que tiene es la de poder formar perfiles de atacantes y ataques. Son sistemas que deliberadamente se decide exponerlos a ser atacados o comprometidos. Estos, no solucionan ningún problema de seguridad, son una herramienta que nos sirve para conocer las estrategias que se emplean a la hora de vulnerar un sistema. Son una herramienta muy útil a la hora de conocer de forma precisa los ataques que se realizan contra la plataforma de trabajo que hemos elegido, o bien, las plataformas configuradas de la misma forma, con el claro objetivo de acceder a información sensible. Así mismo nos permiten conocer nuevas vulnerabilidades y riesgos de los distintos sistemas operativos, entornos y programas, los cuales aún no se encuentren debidamente documentados. En general, existen dos tipos de honeypots: Honeypots para la investigación: Gran parte de la atención actual se centra en este tipo. Los honeypots para la investigación, que se utilizan para recolectar información sobre las acciones de los intrusos. El proyecto Honeynet 1, por ejemplo, es una organización para la investigación sobre seguridad voluntaria, sin ánimo de lucro que utiliza los honeypots para recolectar información sobre las amenazas del ciberespacio. Honeypots para la producción: Son los que se utilizan para proteger a las organizaciones. Sin embargo, se les concede cada vez más importancia debido a las herramientas de detección que pueden brindar y por la forma cómo pueden complementar la protección en la red y en los hosts. 1 Proyecto Honeynet en castellano:

269 Capítulo 13. Sistemas de detección de intrusiones Cómo funcionan? Los honeypots también se pueden describir como de alta o baja interacción, distinción que se basa en el nivel de actividad que permiten al atacante. Un sistema de baja interacción ofrece actividad limitada, la mayoría de las veces emula los servicios y sistemas operativos. Las principales ventajas de los honeypots de baja interacción es que son relativamente fáciles de instalar y mantener; también implican un riesgo mínimo porque el atacante nunca tiene acceso a un sistema operativo real para perjudicar a otros sistemas. Honeyd (véase sección ) es un ejemplo de honeypot de baja interacción, cuya función principal es monitorear el espacio de direcciones IP no utilizado. Cuando Honeyd detecta un intento de conectarse a un sistema que no existe, intercepta la conexión, interactúa con el atacante fingiendo ser la víctima para captar y registrar al ataque. Por el contrario, los honeypots de alta interacción utilizan sistemas operativos reales y aplicaciones reales, no emulan nada. Al ofrecerles a los atacantes sistemas reales para que interactúen, se puede aprender mucho sobre su comportamiento. Los honeypots de alta interacción no imaginan como se comportará un atacante y proporcionan un ambiente que rastrea todas las actividades, lo que permite conocer un comportamiento al que de otra manera no tendrían acceso. Los sistemas de alta interacción también son flexibles y los profesionales de la seguridad informática pueden implementarlos en la medida que quieran. Además, este tipo de honeypot proporciona un objetivo más realista, capaz de detectar atacantes de mayor calibre. Pueden ser complejos de instalar, sin embargo, requieren que se implementen tecnologías adicionales para evitar que los atacantes los utilicen para lanzar ataques a otros sistemas Ventajas y desventajas Los honeypots son un concepto increíblemente simple, las cuales ofrecen una fortaleza muy poderosa. Podemos observar sus ventajas en los siguientes puntos: Obtienen un conjunto de datos pequeños, pero de gran importancia: Los Honeypots recolectan pequeñas cantidades de información. En lugar de logear 1 Gb por día, logean sólo 1 Mb de datos por día. En vez de generar alertas por día, pueden generar sólo 10 alertas por día. Recordemos que los honeypots sólo capturan actividad sospechosa ya que cualquier interacción con un honeypot es muy probablemente actividad no autorizada o una actividad maliciosa. Propiamente dicho, los honeypots reducen el ruido recogiendo sólo los datos indispensables y de gran valor, los producidos únicamente por chicos malos. Esto significa que es mucho más fácil (y barato) de analizar los datos que un honeypot recoge. Nuevas herramientas y tácticas: Los honeypots son diseñados para capturar cualquier cosa que interactúa con ellos, incluyendo herramientas o tácticas nunca vistas. Mínimos recursos: Los honeypots requieren mínimos recursos, sólo capturan actividad irregular. Esto significa que un viejo Pentium con 128 mb de RAM puede manejar fácilmente una entera red de clase B entera. Encriptación en IPv6: A diferencia de la mayoría de las tecnologías para la seguridad, como los sistemas IDS, honeypots trabajan bien en entornos encriptados como IPv6. No importa lo que los chicos malos lancen hacia el honeypot, el honeypot lo detectará y lo capturará. Información: Los honeypots pueden recoger información en profundidad como pocos, si es que existen tecnologías que se le parezcan. Simplicidad: Finalmente, los honeypots son conceptualmente simples. No hay por qué desarrollar algoritmos raros, ni complejas tablas que mantener, o firmas que actualizar. Mientras más simple sea la tecnología, menos posibilidades de errores o desconfiguraciones habrá.

270 252 Servidor Linux para conexiones seguras de una LAN a Internet Como en cualquier otra tecnología, los honeypots también tienen su debilidad. Esto es debido a que no reemplaza a la actual tecnología, sino que trabaja con las existentes. Visión Limitada: Los honeypots pueden sólo rastrear y capturar actividad que interactúen directamente con ellos. Los Honeypots no podrán capturar ataques a otros sistemas vecinos, al menos que el atacante o la amenaza interactúe con el honeypot al mismo tiempo. Riesgo: Todas las tecnologías de seguridad tienen un riesgo. Los firewalls tienen el riesgo de que sean penetrados, la encriptación tiene el riesgo de que los algoritmos sean rotos, los sensores IDS tienen el riesgo de que fallen al detectar ataques. Los Honeypots no son diferentes, tienen un riesgo también. Específicamente, los honeypots tienen el riesgo de que sean apoderados y controlados por los chicos malos y que lo utilicen para dañar otros sistemas. El riesgo es variado para los diferentes honeypots. Dependiendo del tipo de honeypots puede haber un riesgo, equivalente a un fallo del sensor IDS, mientras que en otros honeypots puede que haya que enfrentarse a una situación crítica Utilidades de honeypots Cuando son utilizados con propósitos productivos, los honeypots están protegiendo la organización. En este mundo se incluye, prevención, detección y respuesta a un ataque. Cuando son utilizados con propósitos de investigación, los honeypots son utilizados para recolectar información. La importancia de esta información depende según las organizaciones. Algunas organizaciones querrán estudiar la tendencia de las actividades intrusivas, mientras otras estarán interesadas en la predicción y prevención anticipada, o las fuerzas legales. En general, honeypots de baja interacción son utilizados con propósitos productivos, mientras honeypots de alta interacción son utilizados con propósitos de investigación. Sin embargo, los dos tipos de honeypots pueden funcionar para ambos propósitos. Los honeypots pueden ayudar a prevenir ataques en varias formas. El primero es contra ataques automatizados, como los gusanos. Estos ataques son basados en herramientas que aleatoriamente escanean redes enteras buscando sistemas vulnerables. Si un sistema vulnerable es encontrado, estas herramientas automatizadas atacarán y tomarán el sistema (con gusanos que se replican en la víctima). Uno de las métodos para protejer de tales ataques es bajando la velocidad de su escaneo y potencialmente detenerlos. Llamados sticky honeypots (Tarros de miel pegajosos ), estas soluciones monitorean el espacio IP no utilizado. Cuando los sistemas son escaneados, estos honeypots interactúan con él y disminuyen la velocidad del ataque. Hacen esto utilizando una variedad de trucos TCP, como poniendo el Window size a cero o poniendo al atacante en un estado de espera continua. Ésto es excelente para bajar la velocidad o para prevenir la diseminación de gusanos que han penetrado en la red interna. Un ejemplo de un sticky honeypot es: LaBrea Tarpit. Los honeypots pegajosos son más comunes encontrarlos entre soluciones de baja interacción (hasta podría llamársele soluciones no interactivas, ya que reducen tanto la velocidad que hacen gatear al atacante. Los Honeypots pueden también protejer nuestra organización de intrusos humanos. Este concepto se conoce como engaño o disuación. La idea es confundir al atacante, hacerle perder el tiempo y recursos interactuando con honeypots. Mientras tanto, detectaremos la actividad del atacante y tendrémos tiempo para reaccionar y detener el ataque. Hasta se puede dar un paso más allá: si un atacante sabe que nuestra organización está utilizando honeypots pero no sabe cuales son los sistemas honeypots y cuales son sistemas legítimos, quizás tenga miedo de ser capturado por honeypots y decida no atacarlo. Por lo tanto, honeypots disuaden al atacante. Un ejemplo de honeypot diseñado para hacer esto, es el Deception Toolkit, un honeypot de baja interacción. La segunda forma por la cual honeypots pueden ayudar a protejer una organización es por medio de la detección. La detección es crítica, su propósito es la identificación de fallos para para la prevención. No importa cuán segura sea nuestra organización, siempre habrán fallos si los hombres están involucrados en el proceso... Detectando al atacante, podrán rápidamente reaccionar ante ellos, deteniéndolos, o mitigando el daño que hicieron. Tradicionalmente, la detección ha sido extremadamente dificil de hacer. Tecnologías como sensores IDS y sistemas de logueo han sido inefectivos por diversas razones: Generan muchos datos,

271 Capítulo 13. Sistemas de detección de intrusiones 253 grandes porcentajes de falsos positivos, inhabilidad de detectar nuevos ataques, y la inhabilidad de trabajar en forma encriptada o en entornos IPv6. Los Honeypots son excelentes en detección, solventando muchos de los problemas de la detección clásica. Los honeypots reducen los falsos positivos, capturando pequeñas cantidades de datos de gran importancia, capturan ataques desconocidos como nuevos exploits o shellcodes polimórficos, y trabajan en forma encriptada o en entornos IPv6. En general, honeypots de baja interacción son la mejor solución para la detección y tienen un riesgo limitado. La forma tercera y final por la cual honeypots nos pueden ayudar a protejer una organización es en la respuesta. Una vez que una organización detecta un fallo, cómo debe responder? Esto es a menudo uno de los grandes retos a los que nos debemos enfrentar. Hay por lo general poca información acerca de quién es el atacante, cómo ingresó al sistema o cuánto daño hizo. En estas situaciones, la información detallada acerca a las actividades del atacante son cruciales. Hay dos problemas que afectan a la respuesta al incidente: el primero, a menudo los sistemas comprometidos no pueden ser desconectados de la red para ser analizados. Sistemas de producción, como el servidor de correo de una organización, son tan críticos que aunque estén compremetidos los administradores no pueden desconectarlos y hacer un análisis forense como corresponde. Están limitados a analizar el sistema encendido mientras sigue proveyendo sus servicios productivos. Esto merma la habilidad para analizar qué sucedió, cuánto daño hizo el atacante, e incluso si el atacante accedió a otros sistemas de la red. El otro problema es que incluso en el caso de que este desconectado, hay tanta polución de datos que es muy difícil determinar qué es lo que hizo el chico malo. Con polución de datos me refiero que hay tanta actividad (logeo de usuarios, lecturas de cuentas de mail, archivos escritos a bases de datos, etc... ) que puede ser difícil determinar cuál es la actividad normal del día a día y qué es lo que hizo el atacante. Los Honeypots pueden ayudar a solventar ambos problemas. Honeypots son un excelente herramienta de incidencias ya que pueden rápidamente y fácilmente ser sacados de la red para un análisis forense completo, sin el impacto en las operaciones empresariales de todos los días. Recuerden que la única actividad que guardan los honeypots son las relacionadas con el atacante, ya que no las utilizan nadie (son señuelos), excepto los atacantes. La importancia de los honeypots aquí es la rápida entrega de la información, analizada en profundidad, para responder rápida y eficientemente a un incidente. En general, los honeypots de alta interacción son la mejor solución para la respuesta. Para reaccionar ante un intruso, se necesita conocimientos en profundidad sobre qué hicieron, cómo ingresaron, y qué herramientas utilizaron Tipos de honeypots Los honeypots vienen con diversidad de colores y gustos, haciendo difícil su comprensión. Para ayudarnos a entender mejor a los honeypots y a todos los diferentes tipos, dividiremos a dos categorías generales: honeypots de baja interacción y de alta interacción. Estas categorías nos ayudan a entender con qué tipo de honeypots estamos trabajando, sus fortalezas y debilidades. La interacción define el nivel de actividad que un honeypot le permite tener un atacante. Los honeypots de baja interacción tienen una interacción limitada, normalmente trabajan únicamente emulando servicios y sistemas operativos. La actividad del atacante se encuentra limitada al nivel de emulación del honeypot. Por ejemplo, un servicio FTP emulado escuchando en el puerto 21 probablemente estará emulando un login FTP o probablemente suportará algúnos comandos FTP adicionales. Las ventajas de un honeypot de baja interacción es su simplicidad, estos honeypots tienden a ser fáciles de utilizar y mantener con un riesgo mínimo. Por lo general es instalar un software, elegir el sistema operativo y el servicio a emular y monitorear, y dejar que el programa camine por sí solo desde ahí... Este proceso cercano al plug and play hace que la utilización de éstos sea muy fácil. Incluso, los servicios emulados mitigan el riesgo conteniendo la actividad del intruso, que nunca tiene acceso al sistema operativo real donde puede atacar o dañar otros sistemas. Las principales desventajas de los honeypots de baja interacción es que registran únicamente información limitada y son diseñados para capturar actividad prevista, los servicios emulados sólo pueden llegar hasta ahí. También es fácil para un atacante detectar un honeypot de baja interacción, sin importar cuán buena sea la emulación. Un intruso hábil puede, con el debido tiempo, detectar su presencia. Ejemplos de honeypots de baja interacción se incluyen: Specter, Honeyd, y KFSensor. Los honeypots de alta interacción son diferentes, éstos generalmente son soluciones complejas ya que implica la utilización de sistemas operativos y aplicaciones reales. Nada es emulado, le damos a los in-

272 254 Servidor Linux para conexiones seguras de una LAN a Internet trusos algo real. Si queremos un honeypot Linux corriendo un servidor FTP, tendrémos que construir un verdadero sistema Linux y montar un verdadero servidor FTP. Las ventajas de dicha solución son dos: Primero, usted capturarámos grandes cantidades de información dándoles a los intrusos algo sistemas reales con la cual interactuar, podremos aprender la completa extensión de sus actividades, cualquier cosa desde rootkits nuevos hasta sesiones internacionales de IRC. La segunda ventaja es que los honeypots de alta interacción no asumen nada, acerca del posible comportamiento que tendrá el atacante, en lugar de eso proveen un entorno abierto que captura todas las actividades realizadas. Esto permite a las soluciones de alta interacción conocer comportamientos no esperados. Un excelente ejemplo de esto es cómo un honeypot capturó comandos back door codificados en un protocolo IP no estandard (específicamente protocolo IP 11, Network Voice Protocol). No obstante, esto también incrementa el riesgo de los honeypots ya que los atacantes pueden utilizar estos sistemas operativos reales para lanzar ataques a sistemas internos que no forman parte de los honeypots. En consecuencia, se requiere la implementación de una tecnología adicional que prevenga al atacante de dañar otros sistemas que no son honeypots. En general, honeypots de alta interacción pueden hacer todo lo que uno de baja interacción puede hacer y mucho más, pero pueden ser más complejos de utilizar y mantener. Ejemplos de honeypots de alta interacción son Symantec Decoy Server y los Honeynets Otras características Algunos honeypots, como Honeyd, no sólo emulan servicios sino que también emulan el Sistema Operativo. En otras palabras, Honeyd puede aparentar ser un router Cisco, un webserver WinXP o un servidor DNS Linux. Existen varias ventajas al emular diferentes sistemas operativos. Primero, el honeypot puede encajar mejor con la red existente, si el honeypot tiene la misma apariencia y comportamiento que las computadoras productivas. Segundo, se puede apuntar a atacantes específicos proveyéndoles sistemas y servicios sobre los que queremos aprender. Hay dos elementos en sistemas operativos emulados: El primero es el servicio emulado, cuando un atacante se conecta a ese servicio, este se comportá como si fuera legitimo y aparenta tener un sistema operativo determinado. Por ejemplo, si tiene un servicio emulando un webserver y quiere que su honeypot aparente ser un Win2000 servidor, entonces deberá emular el comportamiento de un IIS webserver, y para el caso de un Linux, debería emular el comportamiento de un webserver Apache. La mayoría de los honeypots emulan el SO de esta manera. Algunos honeypots sofisticados llevan la emulación un paso adelante (como lo hace el Honeyd): No sólo emulan en el nivel de servicio, sino que en el nivel del stack del IP. Si alguien realiza active fingerprinting para determinar el SO de su honeypot, muchos honeypots responderán al nivel del IP Stack del SO real en donde esté instalado el honeypot. Honeyd falsea la respuesta, emulando no sólo el servicio sino emulando también el stack del IP, comportándose como si fuera realmente otro sistema operativo. El nivel de emulación y sofisticación depende de la tecnología del honeypot que elijamos. Esto es un resumen de algunos de los HoneyPots que podemos utilizar: 1. De alta interacción: No hay emulación, suministra sistemas operativos y servicios reales. Honeynets Symantec Decoy Server 2. De baja interacción: Emula sistema operativos y servicios. Honeyd Specter KFSensor Deception Toolkit

273 Capítulo 13. Sistemas de detección de intrusiones Honeynets: alta interacción Los Honeynets son un ejemplo ideal de honeypots de alta interacción. Honeynets no son un producto, no son una solución software que se instala en una computadora. En lugar de eso, los Honeynets son una arquitectura, una red entera de máquinas diseñados para ser atacadas. La idea es tener una arquitectura que sea una red altamente controlada, un lugar donde toda actividad sea controlada y capturada. En esta red nosotros ponemos a nuestras victimas en forma intencionada, computadoras reales corriendo aplicaciones reales. Los chicos malos encuentran, atacan, rompen estos sistemas en su propia iniciativa. Cuando hacen esto, ellos no saben que están en un Honeynet. Toda su actividad, desde sesiones encriptadas SSH hasta correos y archivos subidos son capturados sin que lo noten. Esto es realizado introduciento módulos en el kernel de los sistemas víctima que capturan toda las acciones de los atacantes. Al mismo tiempo, el Honeynet controla la actividad del atacante. Los Honeynets hacen esto mediante la utilización de un gateway Honeywall. Este gateway permite el tráfico de entrada a los sistemas víctima, pero controla el tráfico de salida usando tecnologías de prevención contra instrusos. Esto le da al atacante la flexibilidad de interactuar con las sistemas víctimas, pero previene al atacante de dañar otros sistemas que no forman parte del Honeynet Honeyd: baja interacción Honeyd es un honeypot de baja interacción. Desarrollado por Niels Provos, Honeyd es OpenSource y está diseñado para correr principalmente en sistemas Unix/Linux (aunque fue portado a Windows). Honeyd trabaja con el concepto del monitoreo del espacio IP no utilizado. Cuando observa un intento de conexión a un IP no utilizado, intercepta la conexión e interactúa con el atacante, pretendiendo ser la víctima. Por defecto, Honeyd detecta y logea cualquier conexión a puertos UDP o TCP. Como si fuera poco, se pueden configurar los servicios emulados para que monitoreen puertos específicos, como un servidor FTP emulado, monitoreando el puerto TCP 21. Cuando un atacante conecta el servicio emulado, el honeypot no sólo detecta y logea la actividad, sino que captura también toda la actividad del atacante con el servicio emulado. En caso del servidor FTP emulado podemos potencialmente capturar el logins y passwords, los comandos que introduce y quizás también descubrir lo que está buscando o su identidad. Todo depende del nivel de emulación del honeypot. La mayoría de los servicios emulados trabajan de la misma manera. Ellos esperan un tipo específico de comportamiento, y están programados para reaccionar en una forma predeterminada. La limitación está en que si el atacante hace algo que la emulación no tiene previsto, entonces no saben cómo responder. La mayoría de los honeypots de baja interacción, incluyendo Honeyd, simplemente generará un mensaje de error. Podemos ver cuales son los comandos que soporta el servidor FTP emulado de Honeyd viendo el código fuente. En nuestra instalación Debian utilizaremos este paquete honeyd, ya que tiene licencia GPL y es gratuito. Para instalarlo ejecutamos el siguiente apt: #apt-get install honeyd honeyd-common También podemos encontrar un kit de herramientas Honeyd para Linux (Honeyd Linux Toolkit). Mientras los posibles atacantes se entretienen intentando acceder a servicios que no existen, los IDS de nuestro sistema los detectarán y podremos tomar acciones preventivas contra sus IP, como filtrarlas en el firewall. Una de sus grandes características es que podemos asignar a cada una de nuestros dispositivos virtuales el SO que queramos. Esta personalidad también se especifica con un fichero normal de firmas de SO de Nmap, permitiéndonos convertirnos en el SO que queramos. Si ejecutamos la configuración que viene como ejemplo, veremos de lo que es capaz. Después de instalarlo, hay un fichero que se llama config.localhost con un montón de dispositivos configurados. Lo podemos encontrar en: /usr/share/doc/honeyd/examples/config.localhost

274 256 Servidor Linux para conexiones seguras de una LAN a Internet Si observamos la definición del dispositivo de ejemplo, veremos lo siguiente: #cat /usr/share/doc/honeyd/examples/config.localhost more... route entry route link /24... create routerone set routerone personality "Cisco 7206 running IOS 11.1(24)" set routerone default tcp action reset add routerone tcp port 23 "router-telnet.pl"... bind routerone... La explicación a grandes rasgos es que tenemos un dispositivo cuya dirección IP es , que se comportará como un Cisco 7206 ejecutando una IOS 11.1(24), reseteará todas las conexiones TCP menos las que vayan al puerto 23, ya que entonces el script router-telnet.pl (una emulación del demonio telnet) será ejecutado. Ahora ejecutemos Nmap para comprobar el SO que se ejecuta en el dispositivo virtual que acabamos de crear: # nmap (V. 3.10ALPHA4) scan initiated: nmap -v -ss -on nmap4. Warning: OS detection will be MUCH less reliable because we did not find at least Interesting ports on : (The 1604 ports scanned but not shown below are in state: filtered) Port State Service 23/tcp open telnet Remote OS guesses: Cisco 7206 running IOS 11.1(24), Cisco 7206 (IOS 11.1(17) TCP Sequence Prediction: Class=random positive increments Difficulty=26314 (Worthy challenge) IPID Sequence Generation: Incremental # Nmap run completed -- 1 IP address (1 host up) scanned in s Cuando recibimos los paquetes de Nmap, honeyd responde con la personalidad que hemos escogido.

275 Capítulo 14 Redes inalámbricas En el proyecto he habilitado una red wifi, pero hoy los administradores de sistemas y conocen los peligros que esto entraña, seran muy reacios a implantar este tipo de redes, pero es muy probable que las circunstancias lo obliguen a implantar este tipo de tecnología. Aunque no tengamos red inalámbrica, debemos auditar la red frecuentemente y asegurarnos que nadie está ejecutando un punto de acceso ilegal. Hasta hace muy poco los administradores de red sólo tenían que preocuparse de asegurar los bienes de la tecnología de información físicos y fijos, incluyendo los servidores, los enrutadores y los cortafuegos: todo lo que configura sus redes de línea de cable. Sin embargo, con el advenimiento del equipamiento de redes inalámbricas existe todo un espectro nuevo de problemas seguridad que tratar. Esta nueva tecnología ha ayudado a rebajar el coste del despliegue de redes, ha traído acceso a sitios a los que no se podía acceder antes y ha convertido el término informática móvil en una realidad. Ha cambiado drásticamente el perímetro de seguridad de redes de las empresas de todos los tamaños. Tradicionalmente, las redes corporativas se conectaban al mundo exterior en sólo unos pocos lugares. Así, los administradores de redes se podían concentrar en proteger estos puntos de acceso limitados. Podían colocar cortafuegos o otras defensas en esos puntos de contención cruciales. El interior de la red se trataba como de confianza porque no había forma de introducirse que no fuese a través de los puntos protegidos. Ahora con una LAN inalámbrica desplegada, nuestro perímetro de seguridad se convierte literalmente en el aire que nos rodea. Los atacantes sin cables pueden provenir de cualquier dirección. Si tenemos desplegado un acceso sin cables, cualquiera con una tarjeta de unos 50e puede escuchar potencialmente el cable de nuestra red sin poner un pie en nuestro local. Si estamos utilizando la tecnología sin cables para parte de nuestra red, nuestras amenazas de seguridad crecen considerablemente. Antes de asegurar correctamente nuestra red inalámbrica, tenemos que saber cómo funcionan las redes del área local inalámbrica y cuáles son sus puntos débiles. Los fabricantes del equipamiento LAN inalámbrico han reducido tanto los precios que ahora es una alternativa muy viable para las redes domésticas. En lugar de cablear nuestra casa para conectar nuestros PCs a Ethernet, podemos comprar un punto de acceso (AP, Access Point) y un par de tarjetas inalámbricas y utilizar Internet desde cualquier habitación de nuestra casa (o fuera de ella). El amplio despliegue de la tecnología LAN inalámbrica ha llegado definitivamente para quedarse y tarde o temprano tendremos que tratar con ella Estándar (Wifi) El protocolo más popular para la tecnología LAN inalámbrica es actualmente la serie , conocido comúnmente como wifi. Los estándares inalámbricos de son básicamente una extensión del protocolo Ethernet, es la razón por la que funciona también con las redes Ethernet con cables. Utiliza las frecuencias de 2.4 GHz para b y g y 5 GHz para a para señales de transmisión de datos. Estas frecuencias son del espectro de uso general, por lo que no tendremos que pedir ninguna licencia para utilizarlas. El inconveniente es que otros dispositivos pueden utilizar también estas longitudes de onda. Algunos teléfonos inalámbricos y microondas se encuentran en la banda de los 2.4 GHz, por lo que si

276 258 Servidor Linux para conexiones seguras de una LAN a Internet tenemos este tipo de dispositivos u otras redes wifi en nuestro área podemos encontrarnos con algunas interferencias. Esta longitud de onda es perfecta para el corto rango deseado para wifi. Sus parámetros de diseño permiten aproximadamente unos 45,72 metros interiores y unos 244 metros exteriores en condiciones normales. Sin embargo, con una antena de alta potencia y alcance, podemos tener hasta un rango de 32,19 Km., algo atractivo para las comunicaciones de oficina a oficina dentro de una ciudad. El cuadro 14.1 incluye una descripción de los cuatro tipos de estándares inalámbricos que han aparecido. Cuadro 14.1: Estándares de inalámbricos Estándar Descripción a Esta versión del estándar utiliza una logitud de onda de 5 GHz, un espectro menos abarrotado y menos propenso a tener problemas de interferencias. El potencial teórico para esta tecnología es de 54 Mps, una gran cantidad de ancho de banda, pero la mayoría de las aplicaciones en el sector no se acercan a esa cantidad b Utiliza una longitud de onda de 2.4 GHz, como Bluetooth y otros dispositivos. Ofrece hasta 11 Mps de ancho de banda, aunque las aplicaciones prácticas por debajo de las condiciones óptimas trabajan a la mitad de dicha cantidad g Actualmente es el estándar inalámbrico más conocido. Proporciona hasta 54 Mps de ancho de banda, pero en el mismo espectro de 2.4 GHz que 11b. También es compatible hacia atrás con el hardware de 11b i Este nuevo protocolo es básicamente una extensión de b que se adhiere al protocolo de cifrado para ser mucho más seguro. El IEEE acaba de aprobarlo y ya podemos encontrar productos que lo implementan. Una red wifi inalámbrica puede operar en uno de estos dos modos: Modo adhoc: Nos permite conectar directamente dos nodos juntos. Este modo es útil para conectar algunos PCs juntos que necesiten acceso a una LAN o a Internet. Modo de infraestructura: Nos permite establecer una estación base, conocida como punto de acceso (AP, Access Point), y conectarla a nuestra LAN. Todos los nodos sin cables se conectan a la LAN través de este punto. Ésta es la configuración más común en redes corporativas ya que permite al administrador controlar el acceso sin cables a un punto. Cada punto de acceso y tarjeta inalámbricos tiene un número asignado, es el ID del nodo cliente (BSSID, Basic Station System ID). Ésta es la dirección MAC para los clientes inalámbricos que se asocian al nodo servidor. Este nombre no es necesariamente único a dicho punto de acceso. De hecho, la mayoría de los fabricantes asignan un SSID predeterminado a los AP para que puedan utilizarse inmediatamente. El SSID del punto de acceso es necesario para conectarse a la red. Algunas estaciones base tienen una funcionalidad adicional, incluyendo enrutadores y servidores DHCP incorporados. Existen incluso algunas unidades integradas que actúan como puntos de acceso sin cables, cortafuegos y enrutador para usuarios domésticos y de pequeños negocios. Yo dispongo de un router 3Com ADSL 11g de este tipo. Podemos configurar un nodo de red inalámbrica instalando una tarjeta de interfaz de red (NIC, Network Interface Card) en un ordenador. Una NIC inalámbrica puede ser de varios tipos: puede ser una tarjeta que se introduce en la ranura del PC, una tarjeta PCMCIA, un dispositivo USB, etc. Una red inalámbrica en un modo de infraestructura tiene un punto de acceso que actúa como puente entre la LAN de Ethernet con cables y uno o más puntos extremo sin cables. El punto de acceso envía frecuentemente transmisiones de señales luminosas para que cualquier nodo sin cables sepa que está ahí. Las transmisiones de señales luminosas actúan como un faro invitando a cualquier nodo sin cables del área a iniciar la sesión. Estas señales forman parte del problema con wifi. es imposible desactivar completamente dichas señales, lo que dificulta ocultar el hecho de que hay una red inalámbrica. Cualquiera que tenga una tarjeta inalámbrica puede, al menos, ver las señales luminosas si se encuentran dentro de un rango, aunque algunos receptores permiten limitar la cantidad de información que sale de dichas transmisiones. Estas señales contienen información básica sobre el punto de acceso inalámbrico, normalmente incluyendo su SSID. Si la red no está utilizando ningún cifrado ni ninguna otra protección, esto es todo lo que se

277 Capítulo 14. Redes inalámbricas 259 requiere para que un intruso acceda a la red. Sin embargo, incluso en una red inalámbrica cifrada, el SSID normalmente se transmite al descubierto y los paquetes cifrados pueden ser escuchados clandestinamente en el aire y están sujetos a intentos de decodificación Peligros de las LAN inalámbricas Aunque ofrecen la misma flexibilidad y funcionalidad que pueden ofrecer las LAN con cables, también introducen algunos retos y peligros únicos para el administrador de redes preocupado por la seguridad. Éstos son algunos de los que tenemos que tener en cuenta al añadir una LAN inalámbrica a nuestra infraestructura: Escuchas clandestinas: Lo más ácil para un intruso en una red inalámbrica es recopilar paquetes utilizando un sniffer. Poco podemos hacer frente a ello, Los diseñadores de las redes inalámbricas pensaron sobre ello e introdujeron en el diseño un cifrado estándar denominado Privacidad equivalen al cable (WEP, Wired Equivalente Privacy) para que los datos se pudieran cifrar. Lamentablemente, un fallo fundamental en cómo funcionan los algoritmos RC4 en los que esta basado hacen que los datos se puedan descifrar. Por lo tanto, incluso aunque se ejecute WEP, cualquier dato que viaje por una red inalámbrica está potencialmente sujeto a su inspección por personas ajenas a la red. Alguien podría escuchar sobre nuestro enlace sin cables para buscar los registros de inicio de sesión, las contraseñas o cualquier otro dato. Acceder a los PC sin cables: Un enlace inalámbrico proporciona a un atacante potencial un vector en una máquina de nuestra red. Aparte de los puntos de acceso, las máquinas con tarjetas inalámbricas, a veces, se pueden ver desde el exterior. Si utilizan este modo de acceso pueden lanzar ataques contra una máquina que probablemente no está protegida por el cortafuegos y puede que no se bloqueen como las defensas del perímetro o los servidores públicos. Acceder a la LAN : Probablemente éste sea el mayor peligro que presentan las redes inalámbricas. Si los intrusos pueden obtener el acceso a nuestra LAN a través de un punto de acceso inalámbrico, normalmente tienen las llaves de nuestro reino. La mayoría de las LAN ejecutan un servidor DHCP sin restringir, por lo que los intrusos pueden obtener una dirección IP válida y empezar a explorar nuestra red. A continuación pueden ejecutar un escáner de vulnerabilidades (como Nesus) o un escáner de puertos como Nmap (Vease sección 17) para encontrar máquinas de su interés y buscar brechas que puedan aprovechar. Acceso anónimo a Internet: Aunque los intrusos no estén interesados en lo que contienen nuestra LAN, pueden utilizar nuestro ancho de banda para otros usos. Al iniciar la sesión en nuestra red y acceder después a Internet, pueden piratear nuestra red y hacer el daño que quieran sin que podamos seguirles la pista. Cualquier ataque o daño perpetrado desde esta conexión se rastreará hacia nuestra red. Las autoridades pueden llamar a nuestra puerta, no a la suya. Este método de piratería se hará cada vez más comun a medida que los intrusos se den cuenta de lo difícil que es rastrear los ataques que se originan de esta manera. Existen pocas posibilidades de capturar a alguien que proviene de una red inalámbrica a no ser que tenga un equipo de triangulación situado de antemano, algo bastante caro y poco habitual. Las LAN inalámbricas no aseguradas ofrecen a los intrusos el mejor acceso anónimo que existe. Vulnerabilidades específicas de : Además de las inseguridades de las LAN inalámbricas, existen algunos problemas específicos del estándar Algunos de ellos se deben a un mal diseño del fabricante o a las configuraciones predeterminadas, otros problemas se deben al diseño general de estándar. SSID predeterminados: Cada estación base wifi tiene un identificador específico que debemos conocer para entrar en la red. Este identificador proporciona algún nivel de seguridad si se implanta correctamente. Lamentablemente, muchas personas no cambian el SSID predeterminado del fabricante, como linksys, default, etc. Cuando un intruso lo encuentra, puede suponer que el administrador no ha perdido mucho tiempo en configurar y asegurar la red inalámbrica.

278 260 Servidor Linux para conexiones seguras de una LAN a Internet Transmisión de señales luminosas: La transmisión de señales luminosas son un problema inherente a las redes inalámbricas. La estación base debe emitir regularmente su existencia para que los emisores del usuario final puedan encontrar y negociar una sesión y como los dispositivos legítimos del usuario no se han autenticado todavía, esta señal debe transmitirse al descubierto. Cualquiera puede capturar esa señal y, como mínimo saber que tenemos una LAN inalámbrica. Muchos modelos nos permiten desactivar la parte SSID de la transmisión para que, al menos, sea más difícil de captar para las escuchas clandestinas de redes inalámbricas, pero SSID se sigue enviando cuando una estación se conecta, por lo que sigue existiendo una pequeña ventana de vulnerabilidad. Comunicaciones sin cifrar de forma predeterminada: La mayoría de los dispositivos LAN inalámbricos de hoy en día ofrecen la opción de activar el cifrado WEP estándar. El problema es que normalmente se tiene que hacer manualmente. Muchos fabricantes comercializan su equipamiento con esta opción desconectada de forma predeterminada. Muchos administradores tienen prisa por configurar su red inalámbrica y no tienen mucho tiempo para activar esta importante función. Si una persona no técnica configura la red, es muy probable que no se active el cifrado. También existe el problema de la clave compartida por todos nuestros usuarios ya que WEP utiliza una sola clave entre todos ellos, lo que puede llegar a convertirse en una pesadilla si tenemos muchos usuarios conectándose sin cables. Punto débil de WEP: Incluso cuando se utiliza el cifrado incorporado, la señal sigue teniendo el riesgo de ser leída. Existen algunos puntos débiles fundamentales en la implantación del algoritmo RC4 utilizado para el cifrado en WEP que permiten que se descifren una vez interceptada una cantidad de tráfico. Estos puntos débiles tienen que ver con la forma en que se programan las claves. WEP utiliza vectores de inicialización débiles con un porcentaje suficientemente alto como para que finalmente puedan descifrarse. Una vez roto el cifrado, no sólo los atacantes pueden leer todo el tráfico de la red inalámbrica sino que probablemente puedan entrar en la red. Por lo tanto, aunque WEP ofrece una protección básica frente a escuchas clandestinas casuales, cualquier intruso serio tendrá el software como para descifrar potencialmente el cifrado El fenómeno del Wardriving La búsqueda de LANs inalámbricas inseguras se ha convertido en un pasatiempo popular entre los piratas informáticos. Esta práctica se conoce como wardrive o wardriving, funciona de la misma forma que el marcado telefónico en masa o guerra del marcado telefónico, de los primeros piratas informáticos, consiste en seleccionar de forma aleatoria bancos de números de teléfono para encontrar módems activos. En general, los piratas informáticos conducen un automóvil con una tarjeta inalámbrica y algún software buscando una señal de una red. El software puede registrar la ubicación exacta de la red inalámbrica a través del GPS así como otra gran cantidad de información como: si está cifrada o no y que tipos de protecciones se encuentran activas. Los que realizan el wardring pueden explorar Internet o la LAN local sobre el enlace sin cables. No se requiere un alto nivel de conocimientos para hacerlo, por lo que hay intrusos de todos los niveles. Las empresas que utilizan LAN en entornos densos alrededor de sus oficinas o cerca de carreteras principales y autopistas son los entornos más propensos a este tipo de actividad, como oficinas en entornos urbanos y áreas del centro donde hay muchos edificios altos. Las redes inalámbricas que utilizan b tienen una distancia efectiva de un par de cientos de metros. Es fácil crear un puede entre el espacio comprendido entre dos edificios o varias plantas en un edificio alto. En una zona del centro densa, es común encontrar varias LAN inalámbricas sin protección dentro de un edificio. Desde el punto de vista de la seguridad, los edificios altos suelen ser uno de los peores lugares para ejecutar una LAN inalámbrica. el típico edificio de cristal permite que las señales de su LAN viajen a mucha distancia. Si hay otros edificios cerca, es casi seguro que podrán recoger algunas de sus señales. Incluso es peor los edificios altos que se encuentran junto a una zona residencial. Imaginemonos a los adolescentes y otros recién llegados escaneando en busca de las LAN inalámbricas disponibles, desde la comodidad de sus habitaciones en las afueras de una ciudad. Aproximadamente un 60 por ciento de las LAN inalámbricas son completamente inseguras. Los que realizan los paseos de batalla han llegado incluso a anunciar puntos de acceso sin cables en bases de datos

279 Capítulo 14. Redes inalámbricas 261 online con mapas para que cualquiera pueda encontrar una LAN Inalámbrica bierta en cualquier parte. Las catalogan por tipo de equipamiento, cifradas o no cifradas, etc. Si tenemos una LAN inalámbrica en un área metropolitana importante, es probable que esté catalogada en uno de estos sistemas, esperando sólo a que cualquier intruso oportunista de su zona al que le sobre algo de tiempo. Las siguientes son bases de datos online que se pueden consultar para ver si nuestra LAN se encuentra ya catalogada: Existe hasta un catalogo de simbolos estandarizado para identificar redes wifis urbanas: Figura 14.1: Símbolos urbanos de redes wifi

280 262 Servidor Linux para conexiones seguras de una LAN a Internet Es tan grande este fenómeno que hace unos meses en las islas canarias, se organizo el primer campeonato de Wardriving de España (Canarias Wardrive 05), podemos encontrar mas información en esta dirección: Estas son las curiosas bases del concurso: Solo necesitamos explorar nuestra propia ciudad empleando un simple portátil, pda o similar, dotado de una tarjeta wifi. La competición se divide en tres categorías territoriales: Competición de Wardrive en Tenerife Competición de Wardrive en Gran Canaria Competición de Wardrive en toda Canarias En estas competiciones se permite la participación individual o por equipos. Trabajando en equipo se cubre más territorio y se encuentran los focos emisores más rapidamente. Una competición sin carácter regional es la de los MiniGames, se celebrarán en Tenerife. En ellos se plantearan a los competidores retos tales como intentar romper la seguridad de redes. Un sistema homologado de puntuación asignará una cantidad de puntos dependiendo del tipo de red local. La participación en este tipo de competición exige inexorablemente un comportamiento deportivo intachable. Ha más de un administrador de sistemas se le pondrán los pelos de punta al leer esto Seguridad en redes inalámbricas Si tenemos la red inalámbrica sin cifrado, cualquier intruso podrá leer los datos que mandemos o incluso entrar en nuestra red. Es necesario implantar una serie de medidas: cifrado de datos, concienciación del personal, auditorias, etc Clave WEP (Wired Equivalente Privacy) La clave WEP es una clave asimétrica, compartida por todos los usuarios inalámbricos. Está basada en el algoritmo RC4 y tiene un nivel de seguridad débil. Es debido a un fallo del algoritmo, crea una serie de vectores de inicialización débiles que con un trafico de red suficiente, permiten deducir la clave. Fue introducida con el estándar a y actualmente ha quedado superado por WPA. Si en vez de tener una red abierta, al menos, ciframos los datos con clave WEP, los intrusos tendrán que perder tiempo y esfuerzo en obtenerlos. Esto desanimará a intrusos casuales, y hará que los serios tengan que quedarse por nuestra zona varios días, aumentando las posibilidades de que el personal de seguridad o los vigilantes noten su presencia. La clave WEP, no es recomendable, ya que WPA representa una mejor forma de protección. En determinadas situaciones, puede ser suficiente pero esto solo tiene lugar en entornos que no manejan datos sensibles y donde se produzca muy poco trafico de red Clave WPA (Wifi Protected Access) Esta destinada a garantizar la seguridad en las especificaciones IEEE a, b y g, mejorando las claves WEP; En abril de 2003 aparecieron en el mercado los primeros productos que incorporaban tecnología de cifrado WPA. En la figura 14.2 podemos ver una comparativa entre las claves WEP Y WPA.

281 Capítulo 14. Redes inalámbricas 263 Figura 14.2: Comparativa entre WEP y WPA Privacidad e integridad con TKIP TKIP (Temporal Key Integrity Protocol) amplía y mejora a WEP, solucionando sus vulnerabilidades. Amplía la longitud de la clave de 40 a 128 bits y pasa de ser única y estática, a ser generada de forma dinámica, para cada usuario, para cada sesión (teniendo una duración limitada) y para cada paquete enviado. Conceptualmente el vector de inicialización pasa de 24 a 48 bits, minimizando la reutilización de claves. También utiliza claves para tráfico de difusión y multidifusión. Utiliza el algoritmo Michael para garantizar la integridad, generando un bloque de 4 bytes (denominado MIC) a partir de la dirección MAC de origen, de destino y de los datos, añadiendo el MIC calculado a la unidad de datos a enviar. Posteriormente los datos (que incluyen el MIC) se fragmentan y se les asigna un número de secuencia. La mezcla del número de secuencia con la clave temporal genera la clave que se utilizará para el cifrado de cada fragmento. Autenticación mediante 802.1X/EAP El estándar IEEE x define un protocolo para encapsular, protocolos de autenticación sobre protocolos de enlace de datos. IEEE x permite utilizar diversos métodos para autentificar al usuario a través del protocolo de autenticación extensible (EAP). Se concibe como una ampliación de la capa de enlace de datos: Figura 14.3: Funcionamiento WPA/EAP

282 264 Servidor Linux para conexiones seguras de una LAN a Internet IEEE x define 3 entidades: El solicitante (supplicant), reside en la estación inalámbrica El autenticador (authenticator), reside en el AP El servidor de autenticación, reside en un servidor AAA (Authentication, Authorization, & Accounting), como los servidores Radius Utiliza un método de control de acceso basado en el concepto de puerto (PAE, Port Acess Entity). El autenticador crea un puerto lógico por cliente, existiendo dos caminos uno autorizado y otro no. Mientras el cliente no se ha autenticado con éxito únicamente se permite tráfico x/EAP hacia el servidor de autenticación. Figura 14.4: Autenticación mediante un servidor Radius El solicitante cuando pasa a estar activo en el medio, selecciona y se asocia a un AP. El autenticador (situado en el AP) detecta la asociación del cliente y habilita un puerto para ese solicitante, permitiendo únicamente el tráfico x, el resto de tráfico se bloquea. El cliente envía un mensaje EAP Start. El autenticador responde con un mensaje EAP Request Identity para obtener la identidad del cliente, la respuesta del solicitante EAP Response contiene su identificador y es retransmitido por el autenticador hacia el servidor de autenticación. A partir de ese momento el solicitante y el servidor de autenticación se comunicarán directamente, utilizando un cierto algoritmo de autenticación que pueden negociar. Si el servidor de autenticación acepta la autenticación, el autenticador pasa el puerto del cliente a un estado autorizado y el tráfico será permitido. Los métodos de autenticación definidos en WPA son: EAP-TLS, EAP-TTLS y PEAP. Estos métodos se basan en la infraestructura de clave pública (PKI) para autenticar al usuario y al servidor de autenticación, utilizando certificados digitales. La premisa es la existencia de una Autoridad de Certificación (CA) de confianza para la corporación, que emita certificados para los usuarios y el servidor de autenticación. La CA puede ser privada (empresarial) o pública (basada en CAs de Internet como Verisign). EAP-TLS (TRANSPORT LAYER SECURITY) Los usuarios y el servidor de autenticación deben tener un certificado digital. El solicitante, tras la asociación y la creación del puerto de acceso por el autenticador, envía su identificación (nombre de usuario) hacia el autenticador y éste hacia servidor de autenticación. Este último envía su certificado al cliente, al validarlo el cliente responde con su certificado. El servidor de autenticación comprueba si el certificado es válido y corresponde con el nombre de usuario antes enviado, si es así autentica al cliente. Cliente y servidor generan la clave de cifrado para esa sesión, y el servidor de autenticación la envía al punto de acceso, de forma que ya puede comunicarse el cliente de forma segura.

283 Capítulo 14. Redes inalámbricas 265 PEAP y EAP-TTLS EAP-TLS exige que todos los clientes dispongan de un certificado digital lo que puede ser, en muchos casos, un inconveniente técnico y económico. Para evitar esta necesidad aparecen 2 métodos: Protected EAP (PEAP) y EAP-Tunneled TLS (EAP-TTLS), que requieren únicamente del certificado en el servidor de autenticación. La idea subyacente es que si el servidor de autenticación dispone de un certificado digital, el cliente podrá enviarle datos cifrados, creándose un túnel de seguridad por donde el cliente podrá enviar sus datos de autenticación. PEAP fue diseñado por Microsoft, Cisco y RSA. Cuando el cliente ha validado el certificado del servidor de autenticación y creado el túnel, usando TLS se inicia una nueva autenticación donde negocian un método, por ejemplo MS-CHAP v2, tras autentificar el servidor al cliente, ambos generan la clave de sesión. EAP-TTLS fue diseñado por Funk Software. También se basa en crear en primer lugar un túnel TLS pero los mensajes que intercambia son pares valor atributo ( attribute-value pairs -AVPs) muy similares a los que utiliza Radius. TTLS soporta todos los métodos EAP y se abre a nuevos métodos. WPA y seguridad en pequeñas oficinas Los métodos soportados por EAP necesitan de una cierta infraestructura, fundamentalmente de un servidor Radius, lo que puede limitar su implementación en redes pequeñas. Wifi ofrece los beneficios de WPA mediante el uso de una clave pre-compartida (PSK, pre-shared key) o contraseña. Esto posibilita el uso de TKIP, pero configurando manualmente una clave en el cliente wireless y en el punto de acceso. WPA y el uso de AES Las directrices del estándar final IEEE i (denominado RSN: Robust Security Network) marcan como algoritmo de cifrado a AES (Advanced Encryption Standard), basado en el algoritmo Rijndael para proporcionar privacidad y en claves de 128 bits o más. Parece que la implementación más probable es el modo Cipher Block Chaining Counter Mode (CBC-CTR) con Cipher Block Chaining Message Authenticity Check (CBC-MAC), conocido el conjunto como CBC-CCM. AES ya ha sido adoptado como estándar para cifrado en sistemas de computación y comunicaciones. WPA indica el soporte de AES como opcional, existiendo dispositivos que lo implementan. Implementación de WPA Para soportar WPA, en caso de que los productos no estén certificados por su uso, debemos actualizar el firmware de los puntos de acceso y de los adaptadores de red inalámbricos de las estaciones. En las estaciones se deberá actualizar el sistema operativo para soportar x y el método EAP elegido. Por ejemplo, Windows XP soporta WPA mediante una actualización. Según el método EAP elegido habrá que definir la configuración del servidor Radius. También es posible que tengamos que utilizar o implementar los servicios de una Autoridad de certificación. Conclusiones sobre el uso de WPA La seguridad es una cuestión conjunta por lo que las directivas aplicables a los segmentos de redes inalámbricas deben integrarse con el resto de directivas. Por ejemplo, el uso de cortafuegos para conectar la red inalámbrica con la red corporativa, añadiendo capacidades de detección de intrusos e incluso de analizar el tráfico inalámbrico y detectar puntos de acceso no autorizados son mecanismos de seguridad necesarios para garantizar los requerimientos de seguridad. Asimismo, tanto los clientes como servidores deberán de seguir las directivas de seguridad definidas que deben incluir, como mínimo, el uso de antivirus, cortafuegos personales, detección de intrusos, actualización de software, eliminación de servicios innecesarios A la espera de poder implementar el estándar final sobre seguridad en redes inalámbricas (802.11i) la especificación Wifi Protected Access (WPA) ofrece una solución fiable y robusta para garantizar la privacidad, integridad y autenticación. Garantizando, además, la interoperabilidad entre fabricantes y ofreciendo un modo natural de migrar hacia WPA2.

284 266 Servidor Linux para conexiones seguras de una LAN a Internet Clave WPA2 (Estándar i) Aunque hace ya varios años que se desvelaron las vulnerabilidades del protocolo WEP (razón por la que fue sustituido por WPA basado en TKIP), esta tecnología dejó de ser un borrador a finales de junio de 2004, por lo que ya podemos referirnos a ella como un estándar aprobado por el IEEE. Esta nueva especificación utiliza el algoritmo de cifrado AES (Advanced Encryption Standard), un mecanismo extremadamente seguro que mereció en su día la aprobación del NIST (National Institute of Standards and Technology). WPA2 se basa en i y es compatible con WPA. La llegada de i debe ser acogida con entusiasmo debido al elevado nivel de seguridad que ofrece. Aun así, es necesario tener en cuenta que el algoritmo de cifrado AES requiere unas condiciones y una exigencia al hardware bastante alta, lo que significa que algunas interfaces inalámbricas antiguas no serán capaces de satisfacer los requisitos de este estándar. Dentro de algún tiempo WPA2 se convertirá en el estándar de seguridad para las redes inalámbricas Medidas preventivas La implantación de cualquier acceso inalámbrico tiene un riesgo, pero se puede reducir tomando una serie de medidas preventivas. Tratar la red inalámbrica como de no confianza Como no se puede controlar el tráfico entrante por el aire, no se debería tratar de forma distinta a la parte pública del cortafuegos. Si nos lo podemos permitir, es recomendable situar un cortafuegos entre su red inalámbrica y la LAN privada o situarla en una DMZ (Zona desmilitarizada). Después se puede filtrar determinados tipos de paquetes de ataque, limitar los tipos de tráfico y registrar cualquier actividad que provenga de dicha interfaz. Auditar el perímetro inalámbrico regularmente Hay que probar la distancia de la señal, si la red está superpuesta sobre otras redes cercanas. Es necesario realizar una tarea periódica para localizar cualquier punto de acceso no controlado. La tecnología inalámbrica es ahora tan barata que cualquier usuario de nuestro sistema puede comprar, instalar y configurar una tarjeta wifi para algún propósito licito o no, como puede ser una demostración sin cables en una sala de conferencias, abriendo así nuestra red para los ataques inalámbricos. Actualmente podemos encontrar hasta tarjetas de red wifi para USB. Asimismo, no hay que olvidar que muchos PCs nuevos, especialmente portátiles, tienen incorporadas tarjetas wifi y habilitarlas es cosa de niños. Podemos estar funcionando de forma inalámbrica en nuestra red sin darnos cuenta. Una auditoría inalámbrica es la única forma de descubrirlo. Configurar correctamente la red inalámbrica Existen muchas opciones y configuraciones que podemos utilizar para aumentar considerablemente nuestra seguridad y aunque no todos los equipamientos admiten estas opciones, podemos intentarlas. Desactivar la transmisión de SSID: Esta tarea requiere que el usuario conozca el SSID para establecer una sesión con la estación base. Actúa como una contraseña débil. Sin embargo, si una escucha clandestina descifra el cifrado, podrá obtener el SSID fácilmente. Restringir el acceso por la dirección MAC: Así es más difícil para alguien obtener acceso a nuestra red a través de una estación base inalámbrica. En la mayoría de los puntos de acceso, podemos restringir el mismo a determinadas direcciones MAC hardware, un método bastante sólido para la autenticación, ya que sólo las personas con la tarjeta con un número de serie correcto pueden obtener acceso. Sin embargo, puede ser incómodo para un administrador mantener el registro de las tarjetas NIC autorizadas, eso si contar que no permite el acceso instantáneo a un nuevo usuario en nuestra oficina. Así mismo, si el atacante conoce una de las direcciones MAC autorizadas, es posible falsificar esta dirección en su propia tarjeta y hacerse pasar por el propietario.

285 Capítulo 14. Redes inalámbricas 267 Formar al personal Igual que sucede con todo lo referente a la seguridad informática, el elemento humano puede ser el punto más débil o el más fuerte. Hay que asegúrese de que los guardas de seguridad, los recepcionistas y otro tipo de personal sepan buscar un comportamiento sospechoso. Por ejemplo, si ven a alguien sentado en su aparcamiento durante mucho tiempo dentro del coche, posiblemente con una antena extraña en el techo del mismo, es muy probable que se trate de alguien que busca entrar en nuestra red inalámbrica. Asimismo, hay que desarrollar una política a nivel de toda la empresa. Algunas veces una demostración es la mejor forma de mostrar este tipo de peligro. Un personal informado puede ser nuestra mejor defensa Servidor Radius: FreeRadius Lo que vamos a montar es un sistema EAP-TLS (Vease sección ) donde el servidor y los usuarios necesitan tener un certificado digital para comunicarse. Es necesario que el servidor Radius se coloque en la misma máquina donde se encuentra el cortafuegos. Para configurar el sistema hay que seguir el siguiente esquema (Vease figura 14.5): Instalamos FreeRadius: #apt-get install freeradius Configuramos FreeRadius para trabajar con EAP-TLS Generamos los certificados Comprobamos que FreeRadius funciona correctamente Configuramos el AP (Router 3Com) Configuramos los clientes Linux Configuramos los clientes Windows XP (Actualizado a Service Pak 2) La información utilizada se puede encontrar en los siguientes HowTos: HowTo 802.1x: single/8021x-howto/ HowTo EAP-TLS: HowTo Radius en WindowsXP: mode=flat Configurar FreeRadius con EAP-TLS Los archivos de configuración se encuentra en: /etc/freeradius/, los comentarios que llevan integrados en el código ayudan bastante a la configuración y es muy recomendable leerlos. Hay que realizar las siguientes modificaciones: /etc/freeradius/radiusd.conf : Fichero de configuración general de Radius. Aquí definimos los sistemas de autenticación. Hay muchas partes del fichero que no he utilizado. /etc/freeradius/eap.conf : Fichero de configuración del servicio EAP del servidor radius. /etc/freeradius/clients.conf : Aquí se configuran las IPs y las redes de sistemas que pueden ser clientes de radius, en nuestro caso el AP (router 3Com, con IP ) client /32 { secret = clave_secreta shortname = localhost }

286 268 Servidor Linux para conexiones seguras de una LAN a Internet Figura 14.5: Sistema con cortafuegos + servidor Radius /etc/freeradius/users.conf : Añadimos los usuarios a los que les vamos a permitir el acceso a la red josan Auth-Type := Local, User-Password == "atitelovoyadecir" Service-Type = Framed-User, Framed-Protocol = PPP, Framed-IP-Address = , Framed-IP-Netmask = , Framed-Routing = Broadcast-Listen, Framed-Filter-Id = "std.ppp", Framed-MTU = 1500, Framed-Compression = Van-Jacobsen-TCP-IP Si no nos queremos complicar en exceso, para agregar más usuarios, solo hay que cambiar User-Password y la IP.

287 Capítulo 14. Redes inalámbricas Generar los certificados Respecto a la generación de certificados, obviamente la idea es que los emita una entidad certificadora contrastada, pero también nos los podemos hacer nosotros. Para ello utilizaremos OpenSSL, si todavia no lo hemos instalado realizamos el apt: #apt-get install openssl libssl-dev ca-certificates Ahora tenemos dos opciones: Aprendemos a utilizar la infraestructura PKI (bastante complicada por cierto) Utilizamos los scripts de generación de certificados que vienen con FreeRadius y OpenSSL Escogeremos la segunda opción, usando los scripts predefinidos, ya que, con muy pocas modificaciones podemos crear los certificados que nos hacen falta para trabajar de forma segura con nuestro wifi. Aquí nos encontramos con un problema, para generar los certificados necesitamos unos scripts que vienen con el código fuente de freeradius, para obtenerlo: #apt-get source freeradius, nos descargará los fuentes en el directorio actual. En el directorio scripts encontraremos una serie de archivos entre los que se encuentran los siguientes: CA.certs, certs.sh y xpextensions. A estos tendremos que añadir otro archivo de OpenSSL: CA.pl, un script Perl para crear Autoridades de Certificación y cuyo path no suele estar en el $PATH del sistema. Para buscarlo podemos ejecutar: #find / grep CA.pl, y lo copiamos donde los otros archivos. Es preciso verificar las rutas de las ordenes de los scripts ya que puede ser que sino no funcionen bien. En mi caso he tenido que modificar el cert.sh. En el archivo CA.certs, siguiendo el ejemplo que allí aparece, colocaremos nuestros datos en las variables del inicio del fichero. Para generar los certificados lo único que deberemos de hacer es: #apt-get install./certs.sh Lo que se muestra por pantalla será algo parecido a esto: #./certs.sh Generating DH parameters, 512 bit long safe prime, generator 2 This is going to take a long time *++*++*++*++*++* See the certs directory for the certificates. The certs directory should be copied to.../etc/raddb/ All passwords have been set to whatever Ahora tendremos un nuevo directorio llamado./certs y donde se encuentran todos los certificados que nos harán falta para el cliente y el servidor. Es recomendable colocar estos certificados en /etc/freeradius/certs, ya que los archivos de configuración de freeradius apuntan a ese directorio y tendremos menos cosas que modificar.

288 270 Servidor Linux para conexiones seguras de una LAN a Internet Comprobar el funcionamiento de FreeRadius Hay que repasar los archivos: radiusd.conf, eap.conf, clients.conf y users.conf, los ajustaremos para que cojan los certificados que hemos generado. radiusd.conf : Hay que revisar las rutas de los certificados, para que apunten a los directorios donde los hemos colocado. eap.conf : Hay que asegurarse de colocar la contraseña elegida en private key password, si no lo hiciéramos nos pediría la clave al arrancar al demonio y no podría arrancarlo iniciar el sistema. Ahora para ejecutar el servidor: #freeradius -X, y para lanzar el demonio: /etc/init.d/freeradius start Antes de pasar a configurar los usuarios es necesario configurar el AP, que será el cliente de nuestro servicio de Radius. La configuración es realmente muy sencilla, yo lo tengo configurado como un router entre dos redes la de usuarios ( /24) e Internet (en el gráfico la ). Revisamos el client.conf y asignamos a esa IP permisos para hacer peticiones al servidor Radius. Aquí aparece otra contraseña que utilizan el AP y el FreeRadius para cifrar sus comunicaciones. En el AP deberemos colocar la misma clave (lo podemos observar en la figura 14.6) Configurar AP (Router 3Com) El router 3Com que utilizo me permite introducir seguridad basada en WPA con soporte para un servidor Radius, como se puede observar en la figura Hay que introducir la dirección IP de la máquina y el puerto de escucha del servicio Radius. Radius Key es la clave secreta que hemos elegido en /etc/freeradius/client.conf Figura 14.6: Router 3Com con WPA y servidor radius

289 Capítulo 14. Redes inalámbricas Clientes Linux: WPA-Supplicant Debemos asegurarnos que nuestra tarjeta wireless se puede utilizar en WPA con EAP-TLS, si en la documentación no lo encontramos probablemente no será compatible. Si lo soporta, necesitamos saber es como se llama la tarjeta en el sistema (en mi caso eth1): #iwconfig lo no wireless extensions. eth0 eth1 no wireless extensions. IEEE g ESSID:"example" Mode:Managed Frequency:2.442 GHz Access Point: 00:12:17:B8:2E:12 Bit Rate:54 Mb/s Tx-Power:25 dbm RTS thr:2347 B Fragment thr:2346 B Encryption key:41ed-ee53-ee7c-84bf-005d-a8f7-c10f-0ce0-9e7d-a17f-a5fd-2ecd-7ff3-6a4c-4e73-bdc5 Power Management:off Link Quality:95/100 Signal level:-54 dbm Noise level:-256 dbm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:1609 Invalid misc:6740 Missed beacon:0 Para tener acceso mediante los clientes Linux hay que instalar el siguiente programa: #apt-get install wpasupplicant Y crear el archivo de configuración (/etc/wpa supplicant.conf) para pasar el certificado al servidor Radius: network={ ssid="example" proto=wpa key_mgmt=wpa-eap pairwise=tkip group=tkip eap=tls ca_cert="/etc/cert/cert-srv.pem" client_cert="/etc/cert/root.pem" private_key="/etc/cert/root.der" private_key_passwd="password"} Si utilizamos clave WPA sin servidor Radius se nos ofrece la posibilidad de encriptar la clave que se pasara por la red, esto se consigue mediante el comando: #/usr/sbin/wpa_passphrase <ssid> <passphrase> Después solo queda lanzar el cliente: #wpa_supplicant -B -i <ifname> -c <config_file> -D <driver> En mi caso, ifname es eth1, el config file lo creé en /etc/wpa supplicant.conf y el driver ipw, esto variará dependiendo de nuestra configuración de hardware. Si ejecutamos: #wpa_supplicant -h, veremos que soporte y para que driver ha sido compilado. Y para comprobar si funciona correctamente la negociación de los certificados ejecutamos: #wpa_supplicant -dd -i eth1 -c /etc/wpa_supplicant.conf -D ipw

290 272 Servidor Linux para conexiones seguras de una LAN a Internet Clientes Windows: WindowsXP + SP2 Como con los clientes Linux, debemos asegurarnos que nuestra tarjeta wireless se puede utilizar en WPA con EAP-TLS. Para instalar los certificados generados por OpenSSL (root.der y root.p12) es suficiente con hacer doble click sobre ellos. Instalamos el certificado de la entidad emisora: root.der Instalamos el certificado de cliente: root.p12, nos pedira la contraseña del certificado Para comprobar que realmente ha sido instalado, ejecutamos el siguiente comando en la consola: mmc A través del Microsoft Manegement Console (mmc) podemos comprobar el certificado, : Elegimos la opción agregar, certificados. Pulsando sobre él debería de aparecer: En certificados personales, el certificado de cliente En entidades emisoras, el certificado del servidor Ahora falta asociarlos a una conexión, vamos a ver las conexiones de red inalámbricas disponibles. Pulsamos sobre cambiar el orden de las redes preferidas Seleccionamos nuestra red en el listado, podremos observar que tiene el WPA activado Apretamos al boton propiedades En esta ventana, establecemos como autenticación de red WPA y como cifrado de datos TKIP Después cambiamos a la pestaña de autenticación y establecemos como EAP tarjeta inteligente u otro certificado y activamos la opción Autenticar como equipo cuando la información del equipo este disponible Solo queda pulsar sobre propiedades de EAP Solo queda seleccionar las siguientes opciones y aceptar: usar un certificado en este equipo, utilizar selección simple de certificado, validar un certificado de servidor y elegir el certificado cliente que hemos instalado. Ahora, si volvemos a la pantalla principal de selección de redes detectadas y si pulsamos sobre nuestra red podremos observar que aparece al lado del reloj del sistema un icono que nos informa sobre el uso del certificado. Si presionamos sobre este icono aparecerá una ventana emergente que nos avisa de que se está validando el servidor y que presionemos aceptar si el certificado es correcto, una vez presionemos ya no será necesario volver a repetir el proceso y si todo va bien podremos conectarnos de forma segura a nuestra red.

291 Capítulo 14. Redes inalámbricas Herramientas de seguridad Las redes wifi son inseguras por definición, el hecho de comunicarse por un medio de libre acceso como es el aire implica que la transmisión será vulnerable. Si en nuestra red no permitimos estas conexiones o si queremos estar alerta sobre que hacen nuestros clientes wifi (sean clientes autorizados o no), podremos utilizar Kismet Wireless herramienta que detallo a continuación. También comento la herramienta de auditoría AirSnort que trata de descubrir la clave WEP, si la utilizamos para el cifrado de datos Descubrir redes ilegales e intrusos: Kismet Wireless Kismet Wireless es uno de los sniffers inalámbricos principales para Linux, pero existen otros programas como AeroSniff o Prism2Dump. He elegido Kismet debido a su creciente oferta de módulos de soporte. Es una herramienta cliente-servidor como Nessus (Véase apartado 17.1), que proporciona incluso más flexibilidad. Funciona con otros programas y puede diseñarse para recopilar claves de cifrado para los intentos de descifrado por otros programas externos. Podemos incluso ejecutar Kismet en modo IDS para buscar intentos de intrusión que provengan de nuestra red inalámbrica. Instalar Kismet Se puede obtener la versión más actualizada del programa en la dirección: Los pasos a seguir son los siguientes: Instalar el programa: #apt-get install kismet Editar y configurar el archivo: /etc/kismet/kismet.conf, aquí se ha de configurar el inicio de sesión y las preferencias de la interfaz wifi (el cuadro 14.2 recoge los parámetros que se pueden configurar) Editar y configurar el archivo: /etc/kismet/kismet ui.conf, aquí se han de establecer las preferencias de la interfaz gráfica de kismet (el cuadro 14.3 recoge los parámetros que se pueden configurar) Ya esta listo para auditar la red inalámbrica Kismet trabajando como sniffer de red Iniciamos Kismet desde la línea de comandos. Se abre la interfaz principal y inmediatamente informa sobre cualquier red inalámbrica en el área. La interfaz se divide en tres secciones principales: La sección Network List (lista de redes) que se encuentra a la izquierda muestra todas las redes inalámbricas activas que puede ver Kismet y alguna información básica sobre ellas: el SSID de la red (si está disponible), el tipo (punto de acceso frente a nodo), si está cifrada o no utilizando WEP, el canal en el que se está transmitiendo, el número de paquetes interceptados hasta el momento, cualquier indicador sobre los datos y la cantidad de datos que están por la red. La pantalla está codificada con colores, apareciendo en color rojo las redes activas y en negro las que no están activas. El cuadro Info (información) que se encuentra a la derecha de la pantalla muestra las estadísticas globales para esta sesión de captura (incluyendo el número total de redes detectadas, el número total de paquetes, el número de paquetes cifrados, las redes débiles percibidas, los paquetes con un alto nivel de ruido, los paquetes descartados y la media de paquetes por segundo.

292 274 Servidor Linux para conexiones seguras de una LAN a Internet Parámetro Capture source (Origen de captura) Fuzzy encryption (Cifrado confuso) Filtering packet logs (Filtrar registros de paquete) Decrypt WEP keys (Descifrar claves WEP) Using an external IDS (Utilizar un IDS externo) Cuadro 14.2: Archivo de configuración de Kismet Descripción Define las interfaces que va a escuchar Kismet. Normalmente la interfaz inalámbrica principal (wlan0, eth1, etc.) ya debería estar configurada aquí. Si desea añadir interfaces adicionales puede hacerlo en el formato: source=type, interface, name Muestra cualquier paquete que hayamos identificado como sin descifrar para las estaciones que están utilizando métodos de cifrado sin definir o propietarios. Generalmente se deja desconectado a no ser que su tarjeta esté informando sobre redes cifradas como sin descifrar. Limita el paquete que se registra. Utilice la opción noiselog para quitar cualquier paquete que parezca que se va a desglosar o fragmentar por el ruido. En una zona muy ocupada con mucha interferencia o cuando se utiliza una tarjeta que tiene una antena externa, puede mantener el tamaño de su registro reducido. La opción beaconlog quita todos los paquetes de señales luminosas, excepto el primero, de un punto de acceso determinado. La configuración phylog quita cualquier paquete de la capa física que a veces se recogen. También puede utilizar cualquier combinación de estas configuraciones. Descifra los paquetes de datos interceptados al momento. Sin embargo, primero tiene que tener la clave que a veces, se obtiene utilizando AirSnort. Cada punto de acceso necesita una declaración independiente en el formato bssid:key, siendo bssid la dirección MAC del punto de acceso y key la clave para dicho punto de acceso Envía paquetes a un IDS externo para un análisis posterior Configuración Columns (Columnas) Colors (Colores) Cuadro 14.3: Configuración de la la interfaz UI de Kismet Descripción Cambia lo que aparece en las columnas de la interfaz Kismet y su orden. Cambiamos el valor de columns o clientcolumns incluyendo lo que desea ver. Un listado completo de columnas se encuentra disponible en las páginas del manual de Kismet Cambia los colores de cualquiera de los elementos que se muestran. Cambiamos la configuración con color xxx al código de color que deseemos. Tendrémos que jugar con esta configuración un poco hasta obtener los colores correctos. El cuadro Status (Estado) en la parte inferior de la pantalla contiene una vista de desplazamiento con los eventos producidos. Los mensajes se abren cuando aparecen nuevas redes o se producen otros eventos. Como Kismet es una herramienta de línea de comandos, aunque con una GUI, utiliza comandos de teclas para controlar sus funciones. El cuadro 14.4 incluye una lista de las teclas disponibles desde la pantalla principal. Soporte GPS de Kismet Kismet tiene la capacidad de grabar datos GPS si tiene un receptor GPS conectado a la máquina. Necesitamos el software demonio de GPS gpsd para que Kismet pueda leerlo. Lo podemos instalar con el comando: #apt-get install gpsd Para utilizarlo es parecido habilitar el uso de GPS en el archivo de configuración de Kismet. Después Kismet escoge automáticamente las coordenadas de las redes detectadas y las registra. Podemos ir un paso más allá y crear un mapa con estas coordenadas. Kismet incluye un programa

293 Capítulo 14. Redes inalámbricas 275 Tecla a c d e f g h i l m n p r s t u w z Cuadro 14.4: Comandos de tecla Kismet Descripción Muestra estadísticas sobre cuentas de paquetes y asignaciones de canal Abre una ventana emergente para mostrar los clientes en la red seleccionada Le indica al servidor que inicie la extracción de cadenas imprimibles desde el flujo de paquetes y que las muestre Abre una ventana emergenete en servidores Kismet, lo que permite supervisar simultáneamente dos o más servidores Kismet en distintos anfitriones (hay que recordar que se trata de una arquitectura cliente-servidor) Sigue el centro estimado de una red y muestra un compás Agrupa las redes codificadas actualmente Obtiene una lista de todos los comandos posibles Muestra información detallada sobre la red o el grupo actual Muestra los niveles de señal/capacidad/ruido si la tarjeta informa sobre ellos Silencia el sonido y la voz, si están activados (o los activa si están silenciados) Renombra la red o el grupo seleccionado Muestra los tipos de paquetes tal y como se han recibido Muestra un gráfico de barra del porcentaje de los paquetes Ordena la lista de redes de forma diferente Codifica (o descodifica) la red actual Desagrupa la red actual Muestra todas las alertas y avisos previos Amplía el nivel de zoom del panel de presentación de la red a pantalla completa (o vuelve a su tamaño normal si ya estaba en pantalla completa) denominado GPSMPA que traza automáticamente los datos recopilados en mapas en formato.gps El inconveniente es que tiene que proporcionar su propio mapa GPS calibrado. Existe un programa de trazado de mapas de libre distribución para Linux denominado GPSDrive, lo podemos instalar con: #apt-get install gpsdrive. IDS de Kismet También podemos configurar Kismet como un IDS inalámbrico. Kismet interceptará todas las señales entrates y detectará el tráfico inalámbrico que se sabe está asociado con los ataques a redes wifi o actividades inalámbricas sospechosas. Detecta unos 10 tipos diferentes de tráfico, incluyendo sondeos del programa NetStumbler (herramienta para Windows), la actividad de Airjack y otras herramientas de piratería inalámbrica. Y, como es de libre distribución, siempre podemos ampliarlo mediante la escritura de nuestras propias alertas. También podemos canalizar los datos de Kismet a través de un IDS tradicional como Snort (Véase sección 13.5) para obtener un análisis más detallado. La opción IDS se configura en /etc/kismet/kismet.conf y de forma predeterminada está deshabilitada. También puede configurar Kismet para recopilar claves débiles conocidas criptográficamente para un programa como AirSnort, que analiza paquetes inalámbricos e intenta descifrar el cifrado WEP. Pasemos a describir el funcionamiento de este programa Desencriptar claves inalámbricas WEP: Airsnort Si utilizamos criptografía por clave WEP, cosa que no recomiendo, podemos probar si nuestra clave se puede deducir facilmente con esta herramienta. Actualmente la encriptación WPA es más segura y es una mejor solución para servidores. AirSnort se desarrolló como una aplicación práctica para demostrar la debilidad de WEP, el protocolo básico de cifrado inalámbrico. Una nota sobre las debilidades en el algoritmo de programación de claves de

294 276 Servidor Linux para conexiones seguras de una LAN a Internet RC4, escrita por los expertos criptográficos Fluhrer, Martin y Shamir, incluía detalles sobre una teórica debilidad en el algoritmo WEP, describiendo la debilidad de algunos vectores de inicialización. Los paquetes cifrados con estos vectores débiles se podían coleccionar y al final habría suficientes datos para extrapolar la clave secreta compartida, lo que permitiría descifrar fácilmente los paquetes. Poco después, se lanzaron dos herramientas, AirSnort y WEPCrack, que empleaban las debilidades descritas para recuperar claves WEP, descifrándolas con efectividad. Ambas son buenas herramientas, pero AirSnort tiene una funcionalidad adicional como sniffer inalámbrico. AirSnort es ahora un proyecto de libre distribución que se encuentra en SourceForge.net y que se ha extendido y mejorado considerablemente desde su lanzamiento. Usos de AirSnort Por qué utilizar AirSnort en una red inalámbrica? Alguien podría decir que no existe un uso legítimo para el programa y su único propósito es el de ser una herramienta para el asalto de redes. Creo que la única forma de saber lo expuesta que está nuestra red inalámbrica es hacer lo que haría un intruso para comprobar si nuestro cifrado se puede descifrar y la cantidad de tiempo que tardaría en hacerlo. AirSnort lleva a cabo precisamente esta tarea. Al intentar descifrar el cifrado inalámbrico, podemos ver si se puede hacer. Si se está utilizando un WEP estándar, entonces es simplemente cuestión de tiempo. Es una realidad matemática que se puede descifrar en algún punto utilizando esta herramienta. La cuestión es cuanto tardaremos en hacerlo. Si tardamos mucho tiempo, podemos suponer razonablemente que estamos bastante seguros. Si el nivel de tráfico de nuestra LAN es pequeño, puede ser cuestión de días o incluso de semanas, lo que sitúa a nuestra red fuera del reino de lo práctico para la mayoría de los piratas informáticos casuales. Sin embargo, si es una red ocupada, alguien podría recoger los paquetes suficientes para descifra nuestro cifrado en cuestión de horas o en un día. Saber todo esto nos ayuda a proteger mejor nuestra red. Puede justificar incluir más protecciones, como mejores controles físicos o limitar el tráfico en la red. También puede justificar la actualización de nuestro equipamiento inalámbrico, como por ejemplo a un sistema WPA con un servidor Radius, como el que se propone en este proyecto. Una red inalámbrica que utiliza este protocolo puede ser, actualmente (solo actualmente) indescifrable. Podemos descubrir que el nivel de tráfico no hace que sea práctico descifrar el cifrado. De cualquier forma, dormiremos mucho mejor por la noche, si lo sabemos. Ejecutar AirSnort Para instalarlo solo hay que ejecutar la siguiente instrucción: #apt-get install airsnort Tiene tres archivos ejecutables principales: airsnort: Recopila los paquetes desde algún origen, normalmente la tarjeta de red inalámbrica gencases: Ordena los datos capturados en busca de claves débiles decrypt: Realiza los intentos en desconexión de descifrado para los archivos cargados desde otro origen AirSnort acepta archivos de otros sniffers inalámbricos siempre que se guarden en formato PCAP. Con el tiempo, Kismet separará específicamente los paquetes interesantes para AirSnort, ahorrándonos este paso. No es necesario tener toda la colección de datos a la vez. AirSnort puede guardar una sesión y retomarla posteriormente para realizar adiciones, lo que convierte a AirSnort en una herramienta particularmente peligrosa para redes inalámbricas ya que nadie tiene que perder una sesión interrumpida cerca de nuestras instalaciones para recopilar los paquetes suficientes como para entrar en nuestra red. Puede dividir sus actividades de recopilación en incrementos de tiempo más pequeños y menos perceptibles, suponiendo que la red controlada no cambie sus claves con frecuencia. Una vez instalado AirSnort, podemos empezar escribiendo airsnort en la línea de comandos. Como puede verse en la figura 14.7, la interfaz es muy simple: es una sola pantalla que muestra los paquetes

295 Capítulo 14. Redes inalámbricas 277 interesantes y el número total de paquetes cifrados y sin cifrar. La sección superior muestra nuestras configuraciones, como el tipo de tarjeta NIC, etc. A la derecha podemos cambiar algunas configuraciones como breadth (número e intentos que tiene que realizar AirSnort por cada byte de clave) para intentos de descifrado de 40 bits o 128 bits. El valor predeterminado es 3 para cifrados de 40 bits y 2 para cifrados de 128 bits. Si no tenemos muchos datos o tenemos mucha capacidad de procesamiento adicional, podemos intentar aumentar este valor ligeramente, pero no más de 4 ó 5. Figura 14.7: Imagen de AirSnort A continuación, es el momento de sentarnos a recopilar paquetes. No hay que esperar descifrar claves WEP en un momento. Para que AirSnot funcione correctamente, necesita aproximadamente entre y paquetes con claves débiles, es decir, aproximadamente entre 100MB y 500MB de datos. En una red moderadamente ocupada, podemos tardar uno o más días en recopilar esta cantidad de datos. En redes más lentas, podemos tardar más y en redes ocupadas mucho menos. Hay que esperar, al menos, tardar un par de horas, aunque seguramente sea más. Evidentemente, todo se basa en tener un poco de suerte, por lo que los resultados pueden variar entre una hora y nunca. Cuando un desciframiento de la clave WEP tiene éxito, aparece tanto en texto normal como en hexadecimal en la parte izquierda de la pantalla y los extremos de la sesión de captura. Qué pasaría si encontrásemos las claves WEP? Bueno, hay que tranquilizarse, que no nos entre el pánico ya que la mayoría de los intrusos casuales no se molestarán lo más mínimo. Sin embargo deberíamos pensar en tomar medidas para aumentar la seguridad de nuestra red inalámbrica para que sea más difícil recopilar estos datos. Hay que seguir muchos pasos que varían desde reemplazar el equipamiento hasta volver a configurar y cambiar el AP (punto de acceso). Tendremos que tomar decisiones basándonos en la confidencialidad de los datos que tratamos en nuestra red.

296

297 Capítulo 15 Servicio de administración por Web: WebMin Para acceder a la configuración de Webmin, si no hemos cambiado los puertos por defecto: o https si usamos SSL Webmin está dividido en diversos módulos. Cada uno de estos se encarga de la administración de una parte concreta del sistema operativo y de los diferentes servicios que tengamos instalados. Crea una configuración para cada uno de los módulos basándose en la estructura de ficheros y configuración predeterminada para la versión y distribución de Linux seleccionadas. Los módulos incluidos por defecto en Debian nos permiten administrar entre otros servicios Apache, Squid, Bind, Exim, Fetchmail, Samba, MySql, etc. Nota: Un problema que puede producirse en determinadas circunstancias es que una vez finalizada la instalación algunos de los módulos que componen Webmin no funcionen correctamente. Esto suele ser debido a que alguna parte del software se ha instalado en directorios que no son estándar en Linux Usuarios de Webmin El usuario por defecto es el root, una vez que entramos en Webmin podemos crearnos uno o varios usuarios de administración Webmin. En el caso de que se nos olvide la contraseña de acceso y tengamos acceso como root al ordenador, se puede crear una nueva utilizando el comando: /usr/share/webmin/.changepass.pl /etc/webmin usuario nuevo_password En el módulo usuarios de Webmin se encuentran las diferentes opciones disponibles para definir y configurar los usuarios que tendrán acceso a Webmin. Permite al administrador del sistema crear diferentes usuarios para determinadas tareas. Por ejemplo, si el ordenador se utiliza como servidor de correo, podemos crear un usuario que tan sólo tenga acceso al módulo de administración de Exim, o si se emplea como servidor de impresión crearíamos un usuario que pudiera administrar las colas de impresión. De esta forma es posible crear diferentes usuarios en función de los módulos a los que tendrán acceso, delegando fácilmente la administración de determinados servicios del ordenador a diferentes usuarios y siendo posible incluso determinar que aspectos de un determinado servicio podrá administrar Secciones Webmin La sección Webmin nos da acceso a las diferentes opciones de configuración de Webmin, así como a los logs de actuaciones, el índice de servidores Webmin y los usuarios Webmin.

298 280 Servidor Linux para conexiones seguras de una LAN a Internet Desde el módulo de configuración de Webmin podemos cambiar los aspectos más importantes del propio Webmin como instalar nuevos módulos, actualizar Webmin, cambiar el idioma, añadir, eliminar o modificar usuarios de Webmin, cambiar el puerto utilizado, etc. Figura 15.1: Webmin pantalla de configuración Control de acceso a IP Ya que Webmin tienen su propio servidor web (miniserv.pl) desde esta opción podemos seleccionar qué direcciones de red (como ), direcciones de host (como ) o nombres de hosts (linux.upc.es) es posible acceder a Webmin. Es aconsejable limitar el acceso a Webmin al mínimo de ordenadores que sea posible para evitar de esta forma intentos de acceso no autorizados. Puerto y direcciones En esta opción estableceremos el puerto utilizado para acceder a Webmin, por defecto En el caso de que nuestro ordenador tenga asignada más de una dirección IP también podremos establecer qué dirección IP deberá atender el servidor web de Webmin, ya que por defecto el servidor aceptará peticiones realizadas a cualquiera de las direcciones IP asignadas al sistema. Diario Desde aquí configuraremos la forma en que Webmin guardará un registro de las acciones realizadas. De esta forma podremos monitorizar fácilmente las actuaciones realizadas por los diferentes usuarios a los que proporcionemos acceso a Webmin. Webmin nos permite guardar en el historial las acciones realizadas en función del módulo utilizado o del usuario. Se permite programar cuando se limpiará el historial para evitar que el tamaño del mismo crezca en exceso. Servidores Proxy Webmin dispone de diferentes herramientas que necesitan disponer de acceso a Internet para funcionar correctamente, como es el caso de la herramienta de actualización de Webmin. Desde esta opción configuraremos el acceso a Internet de Webmin en el caso de que estemos utilizando un servidor proxy o un cortafuegos para acceder a Internet Interfaz de usuario El interfaz de usuario de Webmin puede ser modificado de diferentes formas para ajustarse a las preferencias de cada uno de los usuarios.

299 Capítulo 15. Servicio de administración por Web: WebMin 281 Desde esta opción se modifican los colores y tipos de letras utilizados para visualizar las páginas de Webmin. Módulos de Webmin Webmin está formado por diversos módulos. cada uno de estos módulos se encargan de realizar una tarea determinada interrelacionada con el servidor web de Webmin (miniserv.pl). Desde esta opción, añadiresmo, actualizaremos o eliminaremos los módulos utilizados por Webmin. Está se encuentra dividida en tres secciones: Instalar módulo Clonar módulo Borrar módulos Instalar módulo La sección Instalar módulo permite instalar un nuevo módulo de Webmin, ya sea desde un archivo que se encuentre en el ordenador o desde un archivo que tenga que descargarse de Internet. Estos módulos Webmin son archivos de extensión.wbm Clonar un módulo Esta opción permite al administrador del sistema duplicar un módulo para permitir a determinados usuarios administrar ciertos servicios. Así, por ejemplo, si tenemos dos configuraciones diferentes de Apache ejecutándose en el ordenador, con esta opción duplicaremos el módulo de administración de Apache para permitir a diferentes usuarios acceder de forma independiente a la versión de Apache que sea necesario. Eliminar módulos Desde esta última sección, seleccionaremos y borraremos aquellos módulos que no nos sean de interés o no se vayan a utilizar. Así, por ejemplo, si no tenemos instalado en nuestro ordenador PostgreSQL podemos eliminar el módulo utilizando para su administración. Sistema operativo Desde esta opción podremos especificar cual es nuestro sistema operativo. Este proceso deberá realizarse si, por ejemplo, hemos actualizado el sistema operativo instalando una versión nueva, la cual modifica la estructura de directorios en los que se guardaba la configuración de los diferentes servicios del sistema. Lenguaje Se emplea para seleccionar el idioma utilizado para visualizar los textos en los módulos. Opciones de página índice En esta opción seleccionaremos el formato de la página inicial de Webmin y de las diferentes páginas índice de cada una de las categorías existentes, indicando el número de iconos a visualizar en cada fila. También podemos indicar si queremos agrupar los módulos en función de la categoría a la cual pertenecen. Mejorar Webmin Desde esta página es posible actualizar Webmin a la última versión disponible de forma automática o desde un archivo que hayamos descargado de Internet. Utiliza un gestor de paquetes para realizar la tarea, en nuestro caso apt.

300 282 Servidor Linux para conexiones seguras de una LAN a Internet Autenticación Webmin proporciona algunas características orientadas a prevenir ataques como puede ser el intentar averiguar la contraseña de administración a base de probar diferentes contraseñas de forma automática hasta encontrar la correcta. En el caso de que nuestro ordenador y Webmin sean accesibles desde Internet es recomendable utilizar las características de autenticación proporcionadas por Webmin para proteger nuestro sistema de posibles ataques. La primera opción que encontramos en la ficha es Tiempo máximo de clave de acceso. Si activamos esta opción, se bloqueará el acceso al ordenador si se producen una serie de fallos en unos segundos determinados, esto indicará que alguien está ejecutando una aplicación automática para descubrir nuestra contraseña. La Autenticación de sesión nos proporciona un método para desconectar un usuario de Webmin si transcurre un determinado tiempo sin que éste realice alguna operación. También podemos especificar si permitimos el acceso a Webmin empleando las cuentas de usuario del sistema en lugar de emplear las cuentas de usuario definidas desde Webmin. Hay que tener mucho cuidado con esta opción, cualquier usuario que tenga acceso al sistema, sea administrador o no, podrá trabajar con Webmin. Reasignando módulos Como ya se ha comentado Webmin agrupa los módulos instalados en diferentes categorías. Estas categorías están definidas en función de la tarea que realiza el módulo. Desde estas opción Webmin nos permite asignar un módulo a una nueva categoría en el caso de que no estemos de acuerdo con la categoría asignada por defecto. Algunos módulos desarrollados antes de que se crearan las categorías en Webmin se asignan por defecto a la categoría Otros. Editar categorías Utilizaremos esta opción para crear nuevas categorías o editar las existentes. Temas de Webmin En estas sección se puede modificar el aspecto y los colores de Webmin, utilizando temas. Los temas de Webmin son muy flexibles, permitiendo al desarrollador modificar prácticamente cualquier aspecto de la apariencia y distribución de los elementos de Webmin. Referenciadores de confianza Al estar basado en archivos web y accederse a él desde un navegador web, uno de los peligros con los que podemos encontrarnos es el hecho de que la información de autenticación se guarda en el navegador y puede ser reenviada de forma automática desde él. Esto puede causar que otro usuario que emplee el mismo navegador tenga acceso a nuestro sistema sin conocer tan si quiera la contraseña o nombre de usuario de Webmin. En esta sección podremos indicar que hosts tienen acceso a Webmin, limitando de esta forma desde qué ordenadores se podrá utilizar. Acceso anónimo a módulo Esta sección permite garantizar acceso a módulos selectos de Webmin y a trayectorias sin necesidad de que los clientes hagan login.

301 Capítulo 15. Servicio de administración por Web: WebMin 283 Bloqueo de archivo Permite bloquear un archivo para que no sea modificado por varios usuarios al mismo tiempo y esto pueda producir incoherencias en el sistema. Encriptación SSL Si tenemos instaladas en nuestro ordenador las librerías OpenSSL y el módulo de Perl Net::SSLeay podremos emplear conexiones encriptadas con SSL para acceder a Webmin. Para acceder a Webmin utilizaremos una conexión segura, de la forma: https:// :10000, ó https://localhost:10000 Así incrementaremos la seguridad de Webmin, ya que la información, como por ejemplo el nombre de usuario y contraseña, se enviará de forma encriptada. Aunque se instala OpenSSL por defecto en la mayoría de distribuciones de Linux actuales, es posible que no tenga instalado Net::SSLeay. Para instalar OpenSSL y Net::SSLeay deberemos instalar los siguientes paquetes: #apt-get install openssl #apt-get install libnet-ssleay-perl Autoridad de certificado Esta opción se emplea para configurar un certificado SSL para el sistema. De esta forma es posible configurar Webmin para que no sea necesario proporcionar un usuario y contraseña para utilizarlo. Los usuarios pueden solicitar un certificado personal en el módulo de usuarios de Webmin y agregarlo al navegador, de esta forma el navegador podrá autenticarse de forma automática y segura. El problema que puede surgir al utilizar este método de autenticación es que cualquier usuario con acceso a un navegador que contenga un certificado válido para acceder a Webmin podrá utilizar las herramientas de administración. Este método también inválida políticas de seguridad como la desconexión del usuario después de un determinado periodo de inactividad, ya que simplemente volviendo a abrir el navegador podríamos acceder Módulos de Webmin Existen diversos módulos, que podemos instalar con apt y que permiten configurar de forma rápida y gráfica muchas partes del sistema. En la tabla 15.1 podemos observar algunos, solo he colocado los módulos más útiles. La mayoría de ellos han sido utilizados durante la elaboración del proyecto. Podemos buscar más módulos Webmin dentro del sistema Debian con apt-cache: #apt-cache search webmin Otra fuente de módulos para Webmin la encontraremos en la página: Aquí hallaremos una gran cantidad de módulos agrupados por categorías. Para instalar los módulos, simplemente realizaremos un apt: #apt-get install <m\ odulo>

302 284 Servidor Linux para conexiones seguras de una LAN a Internet En la siguiente tabla se muestran la mayoria de los módulos disponibles en nuestro sistema Debian: Cuadro 15.1: Módulos Debian para Webmin Tipo de operación Módulo Función Gestión del servidor webmin-virtual-server Administración remota webmin-lilo Gestor de arranque Lilo webmin-grub Gestor de arranque Grub webmin-status Estado del servidor webmin-fsdump Copias de seguridad webmin-inetd Superservidor webmin-filemanager Archivos Gestión de paquetes webmin-software Paquetes instalados webmin-pserver Versiones concurrentes webmin-core Módulos core Gestión de la red webmin-adsl Cliente PPPoE webmin-bandwidth Monitor de red webmin-dhcp DHCP webmin-bind BIND DNS webmin-nis NIS webmin-exports NFS webmin-samba Samba Servicios de red webmin-proftpd ProFTPD webmin-updown FTP webmin-telnet Telnet webmin-ldap-user-simple LDAP usuario webmin-ldap-netgroups LDAP redes webmin-mysql MySql Gestión de usuarios webmin-usermin Usuarios webmin-quota Cuotas de disco webmin-lpadmin Cuotas de impresión Servicios de usuario webmin-apache Apache webmin-webalizer Estadísticas web webmin-exim Correo corporativo Exim webmin-fechmail Correo externo Fechmail webmin-procmail Procesador de correo Procmail webmin-spamassassin Filtro SpamAssassin webmin-jabber Mensajería Jabber Gestión de seguridad webmin-sshd SSH webmin-firewall IPTables webmin-squid Squid webmin-snort IDS Snort webmin-portsentry IDS puertos webmin-logrotate IDS logs

303 Capítulo 15. Servicio de administración por Web: WebMin 285 Una vez instalados todos los módulos necesarios para el proyecto pasemos a ver graficamente las secciones de nuestro servidor. Figura 15.2: Pantallas de la interfaz Webmin (I)

304 286 Servidor Linux para conexiones seguras de una LAN a Internet Figura 15.3: Pantallas de la interfaz Webmin (II)

305 Capítulo 16 Servicios de monitorización del sistema Para tener bajo control el sistema, es muy importante tener información esencial de su rendimiento: procesos en ejecución, cantidad de memoria disponible, n. o de particiones, etc Monitor del sistema: Top Proporciona una visión continuada de la actividad del procesador en tiempo real, muestra las tareas que más uso hacen de la CPU, y tiene una interfaz interactiva para manipular procesos. Las cinco primeras líneas muestran información general del sistema: Las estadísticas del comando uptime Estadísticas sobre los procesos del sistema (número de procesos, procesos durmiendo, procesos ejecutándose, procesos zombies y procesos parados). El estado actual de la CPU (porcentaje en uso por usuarios, por el sistema, por procesos con valor nice positivo, por procesos esperando E/S, tratando interrupciones hardware y software o desocupada). La memoria (memoria total disponible, usada, libre, compartida, usada como buffer de E/S y en caché, cantidad total de buffer o memoria caché de página, en kilobytes, que está en uso activo, cantidad total de buffer páginas de la caché que podrían quedar libres, cantidad total de buffer o páginas de la caché que están libres y disponibles.) El espacio de swap (swap total disponible, usada y libre). El resto es similar al del ps, con los procesos ordenados decrecientemente por el uso de la CPU. La lista es actualizada de forma interactiva, y además se permite realizar una serie de tareas sobre los procesos, como por ejemplo: Cambiar la prioridad de alguno utilizando el comando r. Matar o enviar una señal con el comando k. Ordenarlos según diferentes criterios (por PID con N, uso de CPU con P, tiempo con A, etc.). Con n se cambia el número de procesos que se muestran. Para salir se utiliza la letra q.

306 288 Servidor Linux para conexiones seguras de una LAN a Internet Resulta muy recomendable siempre tener top funcionando en uno de los terminales, para poder ver de forma rápida si hay cargas excesivas en el sistema. En el siguiente ejemplo podemos observar lo que se vería habitualmente: $top top - 15:52:23 up 3:39, 4 users, load average: 0.46, 0.22, 0.29 Tasks: 96 total, 1 running, 95 sleeping, 0 stopped, 0 zombie Cpu(s): 13.9% us, 2.6% sy, 0.0% ni, 83.5% id, 0.0% wa, 0.0% hi, 0.0% si Mem: k total, k used, 20064k free, 63432k buffers Swap: k total, 0k used, k free, k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 4359 root m 39m 5672 S :00.41 XFree josan m 9656 S :06.16 gnome-panel 4501 josan m 7920 S :08.43 wnck-applet 4918 josan m 8624 S :20.18 gnome-terminal josan R :00.16 top 4642 josan m 19m S :53.77 kile 4475 josan S :08.92 metacity 4503 josan S :10.62 multiload-apple 4512 josan S :33.27 clock-applet 1 root S :01.07 init 2 root S :00.00 ksoftirqd/0 3 root S :00.85 events/0 4 root S :00.00 khelper 9 root S :00.00 kthread 18 root S :01.90 kacpid 111 root S :00.04 kblockd/0 125 root S :00.24 khubd 246 root S :00.55 pdflush 247 root S :02.41 pdflush 249 root S :00.00 aio/0 248 root S :00.00 kswapd0 256 root S :00.00 cifsoplockd 257 root S :00.00 jfsio 258 root S :00.00 jfscommit 259 root S :00.00 jfssync 260 root S :00.00 xfslogd/0 261 root S :00.00 xfsdatad/0 262 root S :00.00 xfsbufd 881 root S :00.00 kseriod 1104 root S :00.00 khpsbpkt 1114 root S :00.00 knodemgrd_ root S :00.00 pccardd Rendimiento del sistema Al determinar el rendimiento del sistema se debe: 1. Definir el problema con todo el detalle que sea posible. 2. Determinar la causa o causas del problema. 3. Formular explícitamente los objetivos para mejorar el rendimiento del sistema. 4. Diseñar e implementar las modificaciones al sistema y/o programas de aplicación diseñados para llevar a cabo esos. 5. Monitorizar el sistema para determinar si los cambios realizados han sido efectivos. 6. Ir de nuevo al primer paso y volver a empezar, habrá un nuevo problema a resolver CPU, dispositivos y particiones de E/S: iostat Para instalarlo hay que ejecutar el siguiente comando: # apt-get install sysstat Presenta estadísticas sobre la CPU y los dispositivos y particiones de E/S. Para ejecutarlo: $iostat

307 Capítulo 16. Servicios de monitorización del sistema 289 Y un ejemplo del comando sería: # iostat Linux (debian) 26/05/05 cpu-med: %user %nice %sys %iowait %idle 12,55 0,10 1,85 1,82 83,68 Device: tps Blq_leid/s Blq_escr/s Blq_leid Blq_escr hda 2,12 35,58 14, hdc 0,01 0,08 0, Donde el significado de las columnas es el siguiente: tps: n. o de transferencias por segundo Blq leid/s: n. o de bloques leídos por segundo Blq escr/s: n. o de bloques escritos por segundo Blq leid: n. o total de bloques leídos Blq escr: n. o total de bloques escritos Memoria: free Se utiliza para obtener información sobre el estado de la memoria, (el significado de los campos es mismo que en top). Este podría ser un ejemplo de su uso: # free total used free shared buffers cached Mem: /+ buffers/cache: Swap: Memoria virtual: vmstat Si queremos obtener información sobre la memoria virtual utilizaremos este comando. Esto podría ser una salida típica: # vmstat procs memory swap io system cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa En la siguiente tabla muestro el significado de las columnas: r: número de procesos esperando su tiempo de ejecución. b: número de procesos en espera w: número de procesos en espacio de intercambio us: tiempo de usuario como porcentaje del tiempo total

308 290 Servidor Linux para conexiones seguras de una LAN a Internet sy: tiempo de sistema como porcentaje del tiempo total id: tiempo de inactividad como porcentaje de tiempo total Si ejecutamos con la opción: $vmstat 2, refresca cada segundo Disco: df, du Para poder observar estadísticas del disco utilizaremos estos comandos: df: por cada sistema de ficheros informa de su capacidad, del espacio libre, del espacio usado y del punto de montaje du: cantidad de espacio utilizado por un directorio, y todos los subdirectorios que hayan en él. Esto es la salida de mi sistema para el comando df: # df S.ficheros Bloques de 1K Usado Dispon Uso% Montado en /dev/hda % / tmpfs % /dev/shm /dev/hda % /boot /dev/hda % /tmp /dev/hda % /var /dev/hda % /usr /dev/hda % /home /dev/hda % /mnt/ntfs none % /dev Se puede ver que el disco tiene un grave problema en /usr, ya que está en uso al 100 %. Hay que liberar espacio para que el sistema funcione correctamente. Con el comando #du -sh, se muestra el espacio usado por los archivos y directorios del directorio actual Usuarios y sus procesos: w Sirve para determinar que usuarios están conectados y qué están haciendo. El siguiente ejemplo ilustra el comando: # w 17:07:08 up 4:54, 2 users, load average: 0,31, 0,22, 0,26 USER TTY FROM IDLE JCPU PCPU WHAT josan :0-12:18?xdm? 36: s x-session-manag josan pts/4 :0.0 15: s 0.11s 25.63s gnome-terminal Las columnas que aparecen significan lo siguiente: JCPU: tiempo usado por todos los procesos asociados a ese terminal (incluye los procesos en segundo plano actuales, pero no los pasados) PCPU: tiempo de CPU usado por el proceso actual Gestionar procesos Para poder observar y modificar el funcionamiento de nuestros procesos disponemos de las siguientes herramientas:

309 Capítulo 16. Servicios de monitorización del sistema Visualizar procesos: ps El comando ps, abreviatura de proceso, nos enseña todos los procesos que se están ejecutando en un sistema, algo que puede ser muy útil para determinar si existe algún proceso ejecutándose en segundo plano que no debería estar ejecutándose. En la tabla 16.1 podemos observar una lista de las opciones del comando: Cuadro 16.1: Opciones del comando ps Opción A a u x -u<user> Descripción Muestra los procesos de todos los usuarios Muestra los procesos de los usuarios para todos los procesos con tty (terminal) Muestra el nombre del usuario del proceso Muestra los procesos con control de tty Muestra los procesos del usuario A continuación muestro las opciones mas comunes: $ps $ps aux $ps al $ps -u<user> La información se encuentra subdividida en las siguientes columnas: USER: usuario que lanzó el programa PID: Identificador del proceso PPID: Identificador del proceso padre %CPU: Porcentaje entre el tiempo usado realmente y el tiempo que lleva en ejecución. %MEM: Fracción de memoria consumida (es un porcentaje estimado) SIZE: Tamaño virtual del proceso: código + datos + pila RSS: Memoria real usada STAT: Estado del proceso R: en ejecución S: durmiendo I: esperando T: parado D: esperando una E/S W: no tiene páginas residentes N: prioridad > <: prioridad < 0 Si se observa algún servicio misterioso ejecutándose, hay que investigar un poco más.

310 292 Servidor Linux para conexiones seguras de una LAN a Internet Un ejemplo de esto sería: $ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root ? S 11:50 0:01 init [2] root ? SN 11:50 0:00 [ksoftirqd/0] root ? S< 11:50 0:01 [events/0] root ? S< 11:50 0:00 [khelper] root ? S< 11:50 0:00 [kthread] root ? S< 11:50 0:06 [kacpid] root ? S< 11:50 0:00 [kblockd/0] root ? S 11:50 0:00 [khubd] root ? S< 11:50 0:00 [aio/0] root ? S 11:50 0:02 [kswapd0] root ? S 11:50 0:00 [cifsoplockd] root ? S 11:50 0:00 [jfsio] root ? S 11:50 0:00 [jfscommit] root ? S 11:50 0:00 [jfssync] root ? S< 11:50 0:00 [xfslogd/0] root ? S< 11:50 0:00 [xfsdatad/0] root ? S 11:50 0:00 [xfsbufd] root ? S 11:50 0:00 [shpchpd_event] root ? S 11:50 0:00 [kseriod] root ? S 11:50 0:00 [khpsbpkt] root ? S 11:50 0:00 [knodemgrd_0] root ? S 11:50 0:00 [pccardd] root ? S< 11:50 0:00 [exec-osm/0] root ? S 11:50 0:00 [pktgen/0] root ? S<s 11:50 0:00 udevd root ? S 11:51 0:03 [kjournald] root ? S 11:51 0:00 [kjournald] root ? S 11:51 0:02 [kjournald] root ? Ss 11:51 0:00 dhclient3 -pf /var/run/dhclient.eth0.pid -lf /var/run/dhdaemon root ? Ss 11:51 0:00 /sbin/syslogd root ? Ss 11:51 0:00 /sbin/klogd root ? Ss 11:51 0:00 /usr/sbin/acpid -c /etc/acpi/events -s /var/run/acpid.soroot message ? Ss 11:51 0:00 /usr/bin/dbus-daemon-1 --system hal ? Ss 11:51 0:34 /usr/sbin/hald --drop-privileges root ? Ss 11:51 0:00 /usr/sbin/inetd root ? Ss 11:51 0:00 /sbin/cardmgr root ? SNs 11:51 0:02 /usr/sbin/powernowd -q root ? Ss 11:51 0:00 /usr/sbin/sshd root ? Ss 11:51 0:00 /usr/bin/x11/xfs -daemon root ? S 11:51 0:00 /bin/bash /etc/rc2.d/s20xprint start root ? S 11:51 0:00 /bin/bash /etc/rc2.d/s20xprint start root ? S 11:51 0:00 /usr/bin/xprt -ac -pn -nolisten tcp -audit 4 -fp /usr/x1root josan ? Ss 11:51 0:30 /usr/sbin/famd -T 0 root ? Ss 11:51 0:00 /sbin/rpc.statd root ? Ss 11:51 0:00 /usr/bin/perl /usr/share/webmin/miniserv.pl /etc/webmin/daemon root ? Ss 11:51 0:00 /usr/sbin/cron root ? Ss 11:51 0:00 /usr/bin/gdm root ? S 11:51 0:00 /usr/bin/gdm root tty1 Ss+ 11:51 0:00 /sbin/getty tty1 root tty2 Ss+ 11:51 0:00 /sbin/getty tty2 root tty3 Ss+ 11:51 0:00 /sbin/getty tty3 root tty4 Ss+ 11:51 0:00 /sbin/getty tty4 root tty5 Ss+ 11:51 0:00 /sbin/getty tty5 root tty6 Ss+ 11:51 0:00 /sbin/getty tty6 root ? S< 11:51 41:44 /usr/x11r6/bin/x :0 -audit 0 -auth /var/lib/gdm/:0.xauthjosan josan ? Ss 12:01 0:00 /usr/bin/ssh-agent x-session-manager josan ? S 12:01 0:01 /usr/lib/gconf2/gconfd-2 5 josan ? S 12:01 0:00 /usr/bin/gnome-keyring-daemon josan ? Ss 12:01 0:00 /usr/lib/bonobo-activation/bonobo-activation-server --acjosan josan ? Ss 12:01 0:04 gnome-smproxy --sm-config-prefix /.gnome-smproxy-ghqj5s/josan josan ? Ss 12:01 0:01 gnome-volume-manager --sm-config-prefix /gnome-volume-majosan josan ? S 12:01 0:16 /usr/lib/gnome-panel/wnck-applet --oaf-activate-iid=oafijosan root ? S 14:20 0:03 [pdflush] josan ? Ss 15:07 0:00 kdeinit Running... josan ? S 15:07 0:00 dcopserver [kdeinit] dcopserver --nosid --suicide josan ? S 15:07 0:00 klauncher [kdeinit] klauncher josan ? S 15:07 0:01 kded [kdeinit] kded josan ? S 15:07 0:08 knotify [kdeinit] knotify josan ? S 16:43 0:02 kio_uiserver [kdeinit] kio_uiserver josan ? S 17:33 4:05 /usr/bin/kile josan pts/0 Ss+ 17:33 0:00 /bin/bash josan ? S 19:23 0:00 kio_file [kdeinit] kio_file file /tmp/ksocket-josangrq9wjosan josan ? S 21:03 0:00 gnome-pty-helper josan pts/1 Ss 21:03 0:00 bash josan pts/1 R+ 21:04 0:00 ps aux Enviar signals a procesos: kill En ocasiones es necesario enviar señales a los procesos: pararlos (SIGSTOP -19), eliminarlos, que continúen (SIGCONT -18), etc. kill [-signal] pids: #kill [-signal] pid,... envía una señal al proceso identificado por pid. #kill pid,... se el dice al proceso que termine, de forma controlada, el estado en que termino puede ser capturado. Esta instrucción le envía un SIGTERM (signal 15). La señal SIGKILL (signal 9), no puede ser capturada y fuerza al proceso a finalizar. #kill [-signal] orden,... envía la señal a todos los procesos orden (ejemplo: #killall -9 bash).

311 Capítulo 16. Servicios de monitorización del sistema 293 Hay procesos que no mueren a pesar de recibir la señal KILL: Procesos zombies Procesos que esperan un recurso vía NFS que no está disponible Procesos que esperan una petición de E/S realizada a un dispositivo Modificar prioridades: nice El número nice marca la prioridad del proceso. Linux realiza una planificación por prioridades dinámicas Al lanzar un proceso se le asigna un valor de prioridad (número nice), por defecto la hereda del proceso padre. La prioridad dinámica del proceso se calcula en función del número nice, junto con el consumo de CPU realizado Valores bajos (negativos), implica más prioridad Valores altos (positivos), menos prioridad Rango de prioridad: -20(máxima) a 20 (mínima) Valor especial: -19, sólo se le da la CPU cuando nadie más la quiere Asignar un valor negativo o que disminuya (mejore) la prioridad del proceso sólo puede hacerlo el root, aumentar (disminuir prioridad) también lo puede hacer el usuario que lo ejecuto nice -incremento orden a ejecutar renice nueva prioridad pid Terminal de root con prioridad máxima Para establecer un programa de máxima prioridad solamente es necesario subir la prioridad a uno de nuestros terminales. Para no confundirnos es recomendable utilizar siempre el mismo terminal. El ejemplo se muestra con el terminal 5. Hacemos un ps: #ps -uroot Identificamos el número de proceso (PID) que tiene el tty5 Aumentamos la prioridad de ese terminal: #renice -20 [pid_tty5] Si el sistema se ralentiza pasamos al terminal 5, CTRL+ALT+F5 y desde ahí podemos comprobar que esta pasando y solucionar el problema Programación de tareas Una posibilidad deseable en cualquier sistema operativo es la de poder ejecutar algunos procesos de forma periódica o en un momento determinado del día, la semana o el mes. En Linux hay múltiples y variadas formas tanto para los usuarios como para el sistema de crear tareas a ejecutarse en el futuro o de forma periódica. Las tareas o trabajos no son más que uno o varios comandos que se ejecutan utilizando un shell como intérprete.

312 294 Servidor Linux para conexiones seguras de una LAN a Internet At Para un usuario definir una tarea o trabajo a ejecutarse en un momento determinado puede utilizar el comando at. Este ofrece numerosas posibilidades. Los comandos que componen el trabajo por defecto se toman de la entrada estándar una vez invocado el comando, o de un fichero utilizando la opción -f, el camino a este fichero debe estar especificado a partir del directorio home del usuario. Se pueden utilizar varias colas para colocar las tareas. Estas se nombran con todas las letras del alfabeto y tienen prioridad mayor los trabajos en las colas con letras mayores. Para ver todas las tareas de tipo at se utiliza el comando atq y para cancelar alguna, atrm. La salida estándar y de errores de estas tareas se envía a través del correo local al usuario correspondiente a menos que este las redireccione utilizando los operadores correspondientes. El administrador del sistema puede especificar cuales usuarios pueden o no utilizar at en los ficheros /etc/at.allow y /etc/at.deny. A continuación vemos unos ejemplos del uso de at: $ at 4:45pm # crea una tarea para ejecutarse a las 4:45 PM que imprime at> echo "hora de irse" # mensaje en la salida estndar, se enviar por correo Ctrl-d #sale del modo insertar tareas $at -f save_all.sh 5:00PM tomorrow # ejecutara save_all.sh, 5:00PM $at -q Z -f script.sh 3:00am + 5 days # trabajo en la cola Z y ejecutado 3AM en 5 dias $at -f bin/my_job -m midnight Sep 24 # lanza medianoche, 24 de sep, manda correo #atq :35 b pepe :00 c pepe :00 Z root #at -c 2 # muestra el contenido de tarea 2 También existe el comando batch que es similar a at solo que los trabajos batch se ejecutan cuando la carga del procesador lo permita, o sea tenga un valor inferior a 0.8 por defecto. Este valor puede modificarse cuando se levanta el servicio atd que es el que se encarga de manipular estas tareas Cron Existe otro tipo de tareas que se pueden ejecutar periódicamente conocidas como crons. Para definirlas se emplea un fichero por usuario cuyo formato se explica a continuación. Básicamente para cada tarea periódica se escribe una línea donde se especifican los momentos en que se ejecutará y el comando correspondiente. También se pueden realizar asignaciones a variables de entorno que serán vlidas sólo para los procesos indicados en lo sucesivo mientras no aparezcan nuevas asignaciones. Las fechas se especifican utilizando cinco indicadores separados por espacios: 1. Minutos: Oscila entre 0 y Horas: Oscila entre 0 y Días del mes: Oscila entre 1 y Meses: Oscila entre 1 y 12 (se pueden poner también las tres primeras letras del nombre del mes en inglés) 5. Días de la semana: Oscila entre 0 y 7 (0 y 7 corresponden al domingo, también se pueden usar las tres primeras letras del nombre del día en inglés)

313 Capítulo 16. Servicios de monitorización del sistema 295 Si no se coloca alguno de los cinco indicadores se pone el carácter * en su lugar. Para separar indicadores de un mismo tipo se utiliza la coma; para indicar rangos, el signo - ; y para variar el incremento del rango a n se puede colocar /n después del rango. A continuación muestro ejemplos de este sistema: PATH = /bin:/usr/bin:/sbin/:/usr/sbin:~/programas/bin 10 4 * * 0 backup every_thing 0 5 1,5,10,15,20,25,30 * * backup part_one FILE = ~/docs/partners.txt INFORM = ~/docs/inform.ps 0 7 * 1-6,9-12 mon sendmails TARGET = ~/especial/target.img * sendmother MAILTO = josan /2 4,19 * * echo "cobraste josan?" Los ficheros de tareas periódicas o crons de los usuarios se guardan en el directorio del sistema /var/spool/cron/ cada uno con el login del usuario correspondiente como nombre. Para evitar algunos errores en la sintaxis de estos ficheros no se editan directamente por los usuarios, sino que se utiliza el comando crontab. Este permite editar, listar y borrar los crons. Opciones del crontab: -e: permite editar el fichero de crons. La variable de entorno EDITOR indicará el editor con que se modificará el fichero de crons -l: lista todos los crons del usuario -r: borra todos los crons A continuación, podemos observar algunos ejemplos del uso de crontab: $ export EDITOR=vim; crontab -e # editor por defecto vim $ export VISUAL=kwrite; crontab -e # editor visual kwrite $ crontab -l $ crontab -r El siguiente código presenta el contenido del archivo /etc/crontab de mi servidor: # cat /etc/crontab # /etc/crontab: system-wide crontab # Unlike any other crontab you don t have to run the crontab # command to install the new version when you edit this file. # This file also has a username field, that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron run-parts --report /etc/cron.daily 47 6 * * 7 root test -x /usr/sbin/anacron run-parts --report /etc/cron.weekly * * root test -x /usr/sbin/anacron run-parts --report /etc/cron.monthly El demonio que se encarga de que se ejecuten las instrucciones es crond.

314 296 Servidor Linux para conexiones seguras de una LAN a Internet Tareas periódicas Un sistema Linux trae algunas tareas periódicas definidas por defecto y es posible a su vez crear otras. En este caso se emplea un fichero con formato similar al de los usuarios, que se almacena en /etc/crontab, con la diferencia de que este sí se edita directamente además de que se puede especificar el usuario con cuyos privilegios se ejecuta el proceso. Las tareas del sistema se organizan en cuatro grupos: tareas que se ejecutan cada una hora, tareas diarias, tareas semanales y tareas mensuales. A cada uno de estos grupos le corresponde un directorio: /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/ y /etc/cron.monthly/ respectivamente. En cada directorio se colocan los programas o comandos a ejecutarse periódicamente de acuerdo al período correspondiente. Algunas de las tareas que se hacen de forma periódica por el sistema, son la actualización de las bases de datos sobre las que trabajan los comandos locate y whatis, así como la rotación de las trazas del sistema. Esto puede utilizarse, por ejemplo, para descargar las bases de datos de los antivirus para Windows y que nuestros clientes las obtengan de un directorio local. Al igual que para las tareas que se crean con at, tanto la salida de errores como la estándar de todas las tareas periódicas, se trasmiten al usuario correspondiente utilizando la mensajería local del sistema. Para el caso de las tareas del sistema, se envían al usuario root a menos que se defina lo contrario Anacron Una tarea tipo cron es muy útil pero su ejecución depende de que la máquina se encuentre encendida en el momento exacto para el que se programó. Es por ello que existe otro tipo de tareas periódicas: las anacrons. Estas se ejecutan cada cierto tiempo especificado en días. En caso de que la máquina se apague durante un tiempo mayor que el especificado, entonces una vez encendida y activado el servicio que manipula los trabajos anacron todos aquellos que se encuentren atrasados se ejecutarán tan pronto transcurra la espera especificada. O sea, para cada trabajo anacron se indica un tiempo en días y una espera (delay). Los trabajos anacron se almacenan en el fichero del sistema /etc/anacrontab. Además de indicar el intervalo de días, el delay y el comando se especifica un nombre para el trabajo. Este se emplea para las trazas y para nombrar un fichero que emplea el servicio de anacron para saber cuando fue la última vez que ejecutó este trabajo (timestamp file). Este fichero se almacena en /var/spool/anacron/ y slo contiene una fecha. Si no se encuentra instalado, es necesario hacer un apt: #apt-get install anacron El fichero /etc/anacrontab tiene la forma: SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 1 5 cron.daily run-parts /etc/cron.daily 7 10 cron.weekly run-parts /etc/cron.weekly cron.monthly run-parts /etc/cron.monthly Podría pensarse que puede ocurrir que un mismo programa se ejecute por la vía cron y por la anacron, pero esto no sucede pues existe una tarea cron para cada período que actualiza los ficheros en los cuales se basa el servicio anacron para saber que es lo que debe ejecutar; o sea, cuando el servicio cron logra ejecutar las tareas correspondientes a un período, actualiza el fichero de ese período, y cuando llega anacron (que se demora más) ya no tiene que ejecutar las tareas.

315 Parte IV Valoración final

316

317 Capítulo 17 Pruebas del sistema Nessus: Escáner de vulnerabilidades Nessus es un potente escáner de redes de Software Libre. Consta de dos partes (cliente/servidor) que pueden estar instaladas en las misma máquina por simplicidad. Si el ataque se hace hacia localhost lo que se consigue es auditar nuestra propia máquina. Cuando finaliza el escaneo se generan unos informes que si se sabe aprovechar e interpretar explican que tipo de vulnerabilidades han sido encontradas, cómo explotarlas y cómo evitarlas. La distribución de Nessus consta de cuatro ficheros básicos: las librerías del programa, las librerías NASL (Nessus Attack Scripting Language), el núcleo de la aplicación y sus plugins. Para instalar el programa hay que realizar el apt siguiente: #apt-get install nessus nessusd Y después descargamos de la página de Nessus (http://www.nessus.org/ ) los plugins que creamos necesarios, instalandolos en la carpeta /nessus/plugins. Durante el proceso de instalación se nos realizan una serie de preguntas para generar un certificado SSL para Nessus: Creation of the Nessus SSL Certificate Congratulations. Your server certificate was properly created. /etc/nessus/nessusd.conf updated The following files were created :. Certification authority : Certificate = /var/lib/nessus/ca/cacert.pem Private key = /var/lib/nessus/private/ca/cakey.pem. Nessus Server : Certificate = /var/lib/nessus/ca/servercert.pem Private key = /var/lib/nessus/private/ca/serverkey.pem Donde podemos observar que se ha creado un certificado autofirmado para el servidor Nessus Configurar el programa Vamos a seguir una serie de pasos para configurar el servidor Nessus: El archivo de configuración es: /etc/nessus/nessusd.conf La configuración por defecto es completa y válida, entre otras cosas escanea desde el puerto 0 al Ahí podemos modificar todas las opciones que nos parezcan oportunas.

318 300 Servidor Linux para conexiones seguras de una LAN a Internet Creamos un usuario para lanzar el programa, para ello seguiremos las instrucciones de pantalla, una vez ejecutado el siguiente comando: #nessus-adduser Entre las opciones que se presentan, para validar el usuario se puede elegir entre el sistema de login/password o certificados digitales, es mucho más seguro el sistema de certificados. También podemos especificar unas reglas (rules) concretas para ese usuario. Se puede elegir que el usuario acceda desde una red concreta, o permitir que acceda desde todas las redes. Para esta última configuración es neceario editar el archivo de reglas /etc/nessus/nessusd.rules e introducir la siguiente línea en la parte address/netmask: default accept Podemos observar como queda el archivo así: # # Nessus rules # # Syntax : accept reject address/netmask # Accept to test anything : default accept Registrar la versión de Nessus, para ello hay que entrar en: poner un correo electrónico donde se nos reportará la clave. Una vez recibido el correo basta con insertarlo en la línea de comandos: #nessus-fetch --register <CLAVE> Una vez tengamos el servidor registrado, lo arrancamos en background: #nessusd -D o #nessusd --background Si ejecutamos: # ps aux grep nessus,... podremos observar si se ha cargado bien: root ? Ss 13:22 0:00 nessusd: waiting root pts/3 S+ 13:23 0:00 grep nessus Ejecución de Nessus Para lanzar el cliente en modo gráfico, ejecutaremos el siguiente comando: #nessus También se puede iniciar en modo comando, para el modo comando consultaremos el manual de ayuda: $man nessus Es necesario recordar que si tenemos activo el IDS Snort o cualquier otro NIDS, se va a volver loco al ejecutar Nessus. Es necesario desactivarlo o hacer que el NIDS ignore la IP de Nessus. Para ejecutarlo podemos seleccionar las siguientes opciones: En Nessusd Host, indicaremos los datos añadidos en la creación del usuario (login/password, etc). En la pestaña de plugins (los tipos de ataques), seleccionaremos todos si queremos un escaneo completo. Hay que tener cuidado con Denial of service (DoS) por razones obvias. En credentials, colocaremos la cuenta, contraseña y dominio Samba, si es que lo queremos escanear. En Scan Options, especificaremos los puertos a escanear y la herramienta a utilizar. En target, indicaremos la o las direcciónes IP de las máquinas a escanear.

319 Capítulo 17. Pruebas del sistema 301 En las siguientes pantallas podemos observar cada una de estas secciones: Figura 17.1: Configuración de la aplicación Nessus

320 302 Servidor Linux para conexiones seguras de una LAN a Internet Una vez realizada la comprobación del servidor podemos observar las siguientes vulnerabilidades encontradas: Figura 17.2: Vulnerabilidades encontradas en el sistema Básicamente podemos decir que la seguridad del servidor esta controlada. A esto únicamente habría que añadir alguna actualización de versiones para parchear posibles exploits descubiertos recientemente Otros interfaces de configuración También podemos ejecutar otras interfaces gráficas para Nessus: NPI: Interfaz PHP. Se puede descargar en: NCC: Nessus Command Center. Se puede descargar en:

321 Capítulo 17. Pruebas del sistema Nmap: Escáner de red y puertos La herramienta de exploración de red y escáner de seguridad, Nmap es posiblemente el mejor escaner de puertos existente, permitiendo determinar, de una forma rápida y sencilla, que servidores están activos y qué servicios ofrecen, es decir sus puertos abiertos. Es una de esas herramientas de seguridad imprescindible para cualquier administrador de sistemas, siendo utilizada diariamente en todo el mundo, tanto por piratas informáticos como por administradores de sistemas. Su software se ha utilizado en otros muchos programas y ha sido portado a casi todos los sistemas operativos importantes. Es un requisito previo, realizar un escanéo de vulnerabilidades con Nessus. Existen también disponibles varios complementos, incluyendo analizadores de salidas del programa, como por ejemplo Nlog Características básicas Entre las características del Nmap podemos encontrar: Flexible: Soporta técnicas avanzadas para el mapeado de sistemas y redes que estén detrás de filtros IP, firewalls, routers y otros obstáculos. Estas incluyen mecanismos de escaneado de puertos (tanto TCP, como UDP), detección del sistema operativo, escaneos invisibles, conexiones semiabiertas,... Potente: Se puede utilizar para escanear redes de ordenadores con cientos de máquinas. Portable: Existen versiones para la gran mayoría de los sistemas operativos modernos, entre ellos: Linux, Open/Free/Net BSD, Solaris, IRIX, Mac OS X, HP-UX, Sun OS, Windows (fase beta),... Fácil: Aunque existen una gran cantidad de opciones disponibles, se puede realizar un sencillo escaneado de puertos con: #nmap -O -ss <maquina> Libre: El objetivo del proyecto Nmap es proveer a los administradores, auditores e intrusos de una potente herramienta de seguridad con la que explorar las redes. Nmap se distribuye con licencia GPL por lo que su código fuente está disponible para su descarga. Buena Documentación: Se ha realizado un gran esfuerzo en mantener actualizados y traducidos tanto las páginas man, como los tutoriales y el resto de documentación relacionada con Nmap. Soportado: Aunque Nmap viene sin garantía explicita de ningún tipo, se puede escribir al autor o utilizar las diferentes listas de distribución sobre Nmap. Existen varias empresas que incluyen soporte para Nmap entre sus servicios. Premiado: Nmap ha recibido multitud de premios y reconocimientos concedidos por revistas del sector. Popular: Diariamente cientos de personas descargan Nmap, además está incluido de serie en muchos sistemas operativos, como Debian. Esta gran popularidad es la mejor garantía de su calidad, soporte y desarrollo. Tal y como hemos comentado, el uso del Nmap es muy sencillo, por ejemplo, para averiguar los servicios o puertos, accesibles de una determinada máquina, bastará con ejecutar: #nmap <host> -O La salida que obtenermos del servidor que se ha configurado durante el proyecto se puede observar en la siguiente página.

322 304 Servidor Linux para conexiones seguras de una LAN a Internet #nmap O Starting nmap 3.81 ( ) at :27 CEST Interesting ports on : (The 1652 ports scanned but not shown below are in state: closed) PORT STATE SERVICE 9/tcp open discard 13/tcp open daytime 22/tcp open ssh 37/tcp open time 80/tcp open http 111/tcp open rpcbind 113/tcp open auth 515/tcp open printer 631/tcp open ipp 721/tcp open unknown 10000/tcp open snet-sensor-mgmt Device type: general purpose Running: Linux 2.4.X 2.5.X 2.6.X OS details: Linux or Gentoo 1.2 Linux rc1-rc7), Linux Uptime days (since Sat Jun 11 12:52: ) Nmap finished: 1 IP address (1 host up) scanned in seconds Depués de descubrir los servicios que ofrece la máquina, con un simple telnet hemos obtenido el sistema operativo instalado en la máquina y la versión de ssh, si se conoce alguna vulnerabilidad de esa versión podría ser atacada: telnet <host> <puerto> # telnet Trying Connected to Escape character is ^]. SSH-2.0-OpenSSH_3.8.1p1 Debian-8.sarge.4 Protocol mismatch. Connection closed by foreign host. Existen muchas más opciones y alternativas, por lo que es más que recomendable acceder a la documentación incluida con Nmap, así como a la página man del mismo. #nmap --help #man nmap #lynx nmap\manpage-es.html Estos escaneos de máquinas y redes, suelen dejar huellas de su ejecución en los registros logs de las máquinas escaneadas (por ejemplo, en /var/log/messages), por lo que es interesante el utilizar alguno de los modos de escaneos invisibles que se pueden ejecutar con Nmap, tales como -sf,-sx,-sn Stealth FIN, Xmas, or Null scan,... de forma que se evitar finalizar la negociación TCP, evitando al mismo tiempo el comentado registro en los ficheros logs. Fyodor, el desarrollador de esta herramienta, tiene un gran sentido de humor, tal y como lo demuestra al implementar la opción -os, que muestra la salida del Nmap en un formato que les encantará a los Script-kiddies, la podemos observar en el siguiente ejemplo: #nmap -os $tart ng nmap V. 2.54B3T431 ( ) nt3r3sting portz 0n debian.example.org ( ): (The 1545 Portz scanned but not sh0wn bel0w ar3 In $tate: clos3d) POrt Stat3 S3rv1Ce 22/tcp OpeN $$H 25/Tcp 0pEn smtp 80/tcp 0p3n http 139/tcP op3n N3Tb1Oz-Ssn 143/tCP 0pen imap2 515/tcp f!lt3red print3r 3128/tcp Op3n squ d-http 3306/tCp Op3n my$ql 6000/tcp 0p3n x11 Nmap run c0mpl3ted -- 1!P addr3sz (1 host up) scanned!n 3 $econds

323 Capítulo 17. Pruebas del sistema Tipos de escaneado Existen muchos tipos de escaneado que se pueden ejecutar con Nmap. El cuadro 17.1 incluye una lista de los que probablemente usaremos con más frecuencia. Cuadro 17.1: Tipos de escaneo en Nmap Tipo de escanéo Descripción SYN: -ss Escaneado predeterminado, no completa la comunicación TCP. TCP Connect: -st Parecido a SYN, completando la comunicación TCP. Es un método ruidoso y carga en exceso las máquinas examinadas. Ping Sweep: -sp Un simple ping a todas las direcciones, comprueba las direcciones IP activas. Escaneado UDP: -su Comprueba los puertos UDP para localizar los que escuchan. Escaneado FIN: -sf Escaneado sigiloso, como SYN pero enviando en su lugar un paquete TCP FIN. La mayoría de los hosts devolveran un RST. Escaneado NULL: -sn Escaneado sigiloso, establece los indicadores de encabezados a nulos. No es un paquete válido y algunos hosts no sabran que hacer con él. Escaneado XMAS: -sx Similar a NULL pero todos los indicadores del encabezado TCP se activan. Los Windows, por su estructura, no responderán. Escaneado Bounce: Usa un agujero en el protocolo FTP, para rebotar paquetes fuera de un -n FTP_HOST servidor FTP y hacia una red interna que normalmente no sería accesible. Escaneado RPC: -sr Busca máquinas que respondan a los servicios RPC. Escaneado Windows: Se basa en una anomalía en las respuestas a los paquetes ACK en algún -sw sistema operativo para mostrar los puertos que se suponen van a filtrarse. Escaneado Idle: Escaneado sigiloso por el que los paquetes rebotan hacia un host externo. -SI zombie_host_probe_port Opciones de descubrimiento También podemos ajustar la forma en que Nmap descubre la red y determina que hosts están activos. El cuadro 17.2 incluye diversas opciones: Opción TCP + ICMP: -PB TCP Ping: -PT ICMP Ping: -PE Dont s Ping: -P0 Cuadro 17.2: Opciones de descubrimiento en Nmap Descripción Utiliza paquetes ICMP y TCP para determinar el estado de un anfitrión. Es la forma más fiable y precisa, ya que usa los dos métodos. Usa solo el método TCP. Si estamos intentando ser sigilosos esta es la mejor opción. No es una buena opción si el objetivo se encuentra detrás de un cortafuegos, la mayoría de los paquetes serán eliminados. Nmap no intentará conocer primero qué hosts se encuentran activos en la red, en su lugar enviará sus paquetes a todas las IP en el rango especificado, incluso aunque no haya una máquina detrás. Puede ser la única forma de examinar una red bien protegida y que no responde a ICMP Opciones de ajuste de frecuencia de Nmap Nmap nos ofrece la opción de agilizar o ralentizar la frecuencia con la que envía sus paquetes de escáner. Si estámos preocupado por la cantidad de tráfico de red (o estámos intentando ser sigilosos), podemos ralentizar el nivel. Sólo hay que tener en cuenta que cuanto más lejos los enviamos, más tiempo tardará el escaneado, algo que puede aumentar exponencialmente el tiempo de escaneado en redes grandes. Por otro lado, si tenemos prisa y no nos preocupa el tráfico de red adicional, podemos aumentar el nivel. Podemos ver los distintos niveles de frecuencia en el cuadro 17.3.

324 306 Servidor Linux para conexiones seguras de una LAN a Internet Cuadro 17.3: Configuraciones de frecuencia en Nmap Frecuencia Parámetro Frecuencia de paquete Comentarios Paranoid -F 0 Una vez cada 5 minutos No utilizar esta opción en escaneados de varios hosts, ya que el escaneado nunca terminará. Sneaky -F 1 Una vez cada 15 segundos Polite -F 2 Una vez cada 4 segundos Normal -F 3 Tan rápida como permita el SO Configuración predeterminada. Agressive -F 4 Igual que Normal pero la frecuencia del paquete se recorta a 5 minutos por host y 1,25 segundos por paquete de sondeo Insane -F 5 0,75 segundos por host y 0,3 segunos por paquete de sondeo Este método no funciona bien a no ser que estemos en una red muy rápida y usemos un computador realmente rápido, e incluso así podríamos perder datos Otras opciones de Nmap El cuadro 17.4 recoge una lista de otras opciones para Nmap que controlan cosas como la resolución DNS, la identificación de SO y otras opciones. Existen más opciones para ajustar nuestros escaneados disponibles utilizando la interfaz de línea de comandos. Si queremos más detalles podemos recurrir al manual de Nmap. Opción Don t Resolve: -n Fast Scan: -F Port Range: -p port_range Use Decoy: -D decoy_address1, decoy_address2,... Fragmentation: -f Get Indentd Info: -I Resolve All: -R SO Identification -o Send on Device: -e interface_name Cuadro 17.4: Opciones deversas de Nmap descripción Agiliza el escaneado, pero podemos perder hosts, sobre todo en redes con DHCP. Escanea los puertos especificados, generalmente los puertos conocidos por debajo de De forma predeterminada Nmap examina los puertos disponibles, con esta opción solo examina ese rango. Se introducen IPs señuelo en el trafico mandado a la máquina que se esta examinando, así le resulta más dificil saber que máquina le esta escaneando. Opción sigilosa, que fragmenta los paquetes de escaneado a mediada que sale. Los paquetes son montados en la máquina atacada y algunas veces pueden burlar los cortafuegos e IDS. El servicio Identd que se ejecuta en algunas máquinas puede proporcionar información adicional sobre el host consultado. Esta opción intenta resolver las direcciones en el rango, incluso aunque no estén respondiendo. Analiza la huella digital de las respuestas para determinar el SO Obliga a los paquetes de escaneado a salir de una interfaz específica.

325 Capítulo 17. Pruebas del sistema Salida de Nmap Nmap produce un informe que muestra cada dirección IP encontrada, los puertos descubiertos escuchando dicha IP y el nombre conocido del servicio (si lo tiene). También muestra si el puerto se ha abierto, filtrado o cerrado. Sin embargo, sólo porque Nmap obtenga una respuesta sobre el puerto 80 e imprima http, no significa que un servidor Web se está ejecutando en el host, aunque es algo bastante probable. Siempre se puede verificar cualquier puerto sospechoso abierto consultando con dicha dirección IP sobre el número de puerto especificado y observando la respuesta obtenida. Si existe un servidor Web ejecutándose ahí, normalmente podremos obtener una respuesta mediante la introduccion del comando GET/HTTP. Así se devolverá la página inicial de índice como HTML (no como una bonita página Web), pero podremos verificar si un servidor se está ejecutando. Con otros servicios como FTP o SMTP podemos llevar a cabo tareas similares. Nmap también codifica con colores los puertos encontrados, según la siguiente tabla: Color Rojo Azul Negrita Negro Cuadro 17.5: Codificación de color de la salida de Nmap Descripción Este número de puerto está asignado a un servicio que ofrece alguna forma directa de inicio de sesión en la máquina, como Telnet o FTP. Estos son los más atractivos para los intrusos. Este número de puerto representa un servicio de correo como SMTP o POP. Estos son servicios que pueden proporcionar alguna información sobre la máquina o el sistema operativo. Cualquier otro servicio o puerto identificado. Como podemos comprobar en el cuadro 17.5, la salida nos permite examinar un informe y determinar rápidamente si hay más servicios o puertos con los que tenemos que tener cuidado, lo que no significa que deberíamos ignorar cualquier número inusual que no esté resaltado o en negrita. Los troyanos y el software de conversación se muestran normalmente como servicios desconocidos, pero podemos buscar un puerto misterioso en una lista de puertos malignos conocidos para determinar rápidamente si el puerto abierto es algo de lo que tenemos que preocuparnos. Si no lo podemos encontrar en dicha lista, tendremos que cuestionarnos cuál será ese servicio extraño que se está ejecutando en la máquina y que no utiliza un número de puerto conocido. Podemos guardar los registros Nmap como números de formato, incluyendo el texto simple o legible por la máquina, e importarlos en otro programa. Sin embargo, si dichas opciones no fuesen suficientes, Nlog (sin licencia GPL) o alguna herramienta parecida puede ayudarnos a interpretar la salida Nmap. Su ejecución sobre redes muy grandes puede servirnos de salvavidas ya que el examen cuidadoso de cientos de páginas de salidas Nmap nos puede volver locos rápidamente Configuración gráfica de Nmap, interfaz Nmapfe Incluido con Nmap se encuentra nmapfe que es un interfaz gráfica, que permite ejecutar Nmap usando el ratón. También indicar que existen otras interfaces gráficas para facilitar aún más el uso de esta potente aplicación (KNmap, KNmapFE, QNMap, Kmap, Web-NMap, vnmap,... ) Para instalarla realizaremos un apt: #apt-get install nmapfe Y para ejecutarla: #nmapfe o xnmap Nmap es una herramienta ideal para Verificar/auditar el Firewall, tal como dice uno de los banner de su página oficial, Audite la seguridad de sus Redes antes que los chicos malos lo hagan (Audit your network security before the bad guys do). La página oficial de Nmap es:

326 308 Servidor Linux para conexiones seguras de una LAN a Internet Pruebas de carga Aunqué en un principio pense en realizar una serie de pruebas de carga con diferentes clientes, para determinar el grado de sostenibilidad del sistema, no va a hacer falta. Carece de sentido probar algo que no va a aportar ningún dato nuevo, sino la confirmación de algo que temia desde un principio. Tales eran mis dudas que lo llege a comentar con el director del proyecto. Durante la elaboración del proyecto, en todas y cada una de las secciones, en la información que he consultado, se advertía de que el uso de servicios de gran consumo de recursos en la misma máquina provocarían la ralentización del sistema hasta niveles inaceptables. Un ejemplo de esto sería el IDS Snort, trabajando junto a la base de datos MySQL o el el servidor Syslog. Puesto que el servidor que utilizo es un ordenador portatil con procesador Intel Centrino a 1,6 Ghz. con 512 Mb de RAM, en vez de un supercomputador con con varios procesadores, no es necesario realizar estas pruebas para confirmar lo evidente. Considero que mi capacidad de optimización del sistema, probablemente, sea menor que la de muchas de esas personas que describen como suicidio, respecto a rendimiento y seguridad, centralizar los servicios de una corporación en una única máquina. Las razones que me llevan a esta decisión son varias: He asumido desde un principio, que el sistema no es capaz de ejecutar y soportar el uso simultaneo de los demonios de los servicios implementados. Esto se puede observar, por ejemplo, cuando arranco el servidor y Tripwire deja el sistema colapsado, al actualizar las sus bases de datos de archivos (Incluso con una prioridad nice baja (+10). Por el tamaño de la empresa que vaya a implementar el proyecto: Para empresas pequeñas carece de sentido tener todos los tipos de servidores disponibles, ya que la mayoría no se utilizarán. Para empresas grandes que necesiten todos los tipos de servidores, se disponen de presupuestos adecuados para distribuir los servicios entre varias máquinas. La limitación no esta en el coste de las máquinas sino en el personal que necesitan para configurarlas y administrarlas, además del coste que supone, el espacio físico que ocupan (en cuartos climatizados), medidas de físicas de seguridad, etc. Por motivos de eficiencia no se debe centralizar los servicios: La máquina funcionaría al 100 % de su capacidad, obteniendose de ella un 10 % del rendimiento teórico. Si se produjerá una caida fortuita de la máquina, como un fallo eléctrico o mecánico, todos los servicios de la red caerían con ella. Por motivos de seguridad no se debe centralizar los servicios: Si un servicio tiene un exploit y un intruso obtiene el control de la máquina, obtiene a la misma vez el control de todos los servicios de esa máquina. Los ataques dirigidos sobre una sola máquina son más eficientes que sobre varias. Por todo ello, no creo necesario realizar pruebas de carga para determinar que no es una buena elección situar todos los servicios en una única máquina. Y que se debería de buscar una solución para descentralizar el sistema.

327 Capítulo 18 Estudio Económico Mediante los siguientes esquemas se determinará el coste del proyecto de haber sido encargado por una empresa Recursos En el siguiente cuadro se detallan los recursos que fueron necesarios para la elaboración del proyecto con una baremación aproximada de sus costes. Cuadro 18.1: Recursos asignados al proyecto Nombre Nombre corto Grupo Tipo Coste Jose Antonio Escartín Vigo Jefe de proyecto Personal Obra 40 e/h Jose Antonio Escartín Vigo Analista Personal Obra 30 e/h Jose Antonio Escartín Vigo Administrador de sistemas Personal Obra 25 e/h Jose Antonio Escartín Vigo Documentalista Personal Obra 15 e/h Servidor Portatil Infraestructura Material 1150 e Cliente Duron Linux/Windows Infraestructura Material 600 e Cliente de alquiler 1 Windows1 Infraestructura Material 100 e Cliente de alquiler 2 Windows2 Infraestructura Material 100 e Portatil de alquiler ClienteWifi Infraestructura Material 150 e Impresora HP Deskjet 815 HP815 Infraestructura Material 240 e Router, Swich y cables Redes Infraestructura Material 300 e Material de oficina Oficina Infraestructura Material 300 e Local, luz e internet Mantenimiento Gastos Material 1500 e Desplazamientos Desplanzamientos Gastos Material 100 e Manual de administración Linux Linux1 Libros Material 48 e Linux a fondo Linux2 Libros Material 30 e Todo Linux Linux3 Libros Material 68 e Sw libre: Herramientas de seguridad Seguridad Libros Material 42 e El libro de L A TEX L A TEX Libros Material 38 e Resto de libros e información proveniente de bibliotecas e Internet Información Libros Material e

328 310 Servidor Linux para conexiones seguras de una LAN a Internet Costes En la siguiente tabla, se puede encontrar una valoración aproximada de los costes totales del proyecto, basada en los sueldos/hora asignados a cada cargo del personal. Cuadro 18.2: Costes del proyecto Nombre Nombre corto Tareas asignadas N. o de horas Coste Jose Antonio Jefe de proyecto Establecer la planificación y fijar 20 h. 800e Escartín Vigo objetivos Jose Antonio Analista Seleccionar herramientas y analizar 50 h e Escartín Vigo el grado de cumplimiento de los objetivos Jose Antonio Administrador Instalar sistema, configurar servicios 220 h e Escartín Vigo de sistemas y realizar las pruebas Jose Antonio Documentalista Generar informes y documentar 160 h e Escartín Vigo el proyecto Material Varios 4.766e TOTAL: e Resumen económico El coste del proyecto esta muy por encima de lo esperado, con un valor aproximado de e. Parece claro, que el factor que influye de una forma determinante es la mano de obra necesaria, estableciendo el valor del material en solamente un tercio del total, por dos tercios la mano de obra. Manejando estas cantidades, un proyecto de este estilo solo está al alcance de empresas donde se vaya a utilizar este documento de manera intensiva, haciendo inviable un estudio de este tipo en pymes Modificaciones a los costes económicos Debido a la falta de experiencia en sistemas Linux y en la creación de manuales, esta planificación económica se debería ver incrementada de la siguiente forma: Hasta las 350 horas en Administración de sistemas: Para la asimilación de los entornos, la configuración de los servicios y las pruebas necesarias. Hasta las 400 horas en Documentación: Debido al cambio de orientación del proyecto, hacia la elaboración de un Manual de instalación de servidores en Linux. Esto supodría un aumento, de valor respecto al proyecto original, de unos 7.000e, subiendo el precio total aproximado a los e. Este aumento en el número de horas en ningún caso a derivado en un retraso en los plazos de entrega, ya que estos han sido respetados con riguridad. Y atienden a un mejor aprovechamiento y usabilidad de los contenidos del proyecto. Se podría decir que respecto a los objetivos iniciales, de instalar un servidor, elaborando un Manual de instalación para servidores Linux se ha conseguido que el uso del proyecto pueda llegar a más ámbitos y convertirlo en útil para muchas personas.

329 Capítulo 19 Conclusiones La conclusión principal es que los objetivos marcados inicialmente fueron erróneos: No es viable un servidor centralizado: El poco coste del material, para una empresa, no compensa las desventajas. La descentralización se apoya en: Modularidad, seguridad y redimiento. No es viable un servidor portatil corporativo e itinerante: Sólo puede ser utilizado para servicios concretos. Las redes inalámbricas producen graves problemas de seguridad intrinsecos e inevitables. Las conexiones itinerantes a Internet, ofrecidas por los ISP, todavía estan en pañales. La conexión es un problema, desde los siguientes puntos de vista: 1. Se necesita un punto de acceso (AP) que acompañe al servidor, como podría ser un router. 2. La conexión EAP-TLS a través de certificados digitales no es muy flexible a la incorporación de nuevos usuarios, que por ejemplo podrían ser los empleados de otra oficina, en otra ciudad. Este problema lo podríamos solventar agregando a nuestro sistema un programa de validación de conexión en nuestro sistema por web, como NoCat, donde los usuarios wifi acceden al servidor mediante usuario y contraseña. El aumento de las horas dedicadas, que no los plazos de entrega, fue debida a que el proyecto evoluciono hacia la elaboración de un: Manual de instalación para servidores Linux, que abarca desde la elección de la distribución, pasando por la instalación del sistema y finalmente la configuración de la gran mayoría de servicios disponibles para entornos corporativos. Este cambio de orientación, fue decidio a la mitad del proyecto, de nada servía documentar la instalación de un servidor Linux, si el proceso no podía ser reproduccido, a menos que se dispusiera de la misma máquina y la misma infraestructura. El proyecto se ha adaptado a un entorno más general, basado en la distribución Debian Sarge, para que los conociemientos adquiridos, puedan ser aprovechados por un número mayor de usuarios de escritorio y administradores de sistemas. A modo de resumen me quedaré con la siguiente frase que lei mientras me documentaba y que esta en concordancia con el espíritu de este proyecto: En Internet sólo el paranoico sobrevive. Puede ser un lugar muy sucio, lleno de virus, gusanos, troyanos, spammers y abogados de litigios de patentes; lo último que alguien querría es ponerse en línea sin protección alguna.

330 312 Servidor Linux para conexiones seguras de una LAN a Internet Es decir, el uso de: Conexiones seguras como: SSH (telnet), SSL (web), PGP (cifrado de datos), EAP-TSL (wifi),... Firewalls, es decir sistemas de barrera contra ataques exteriores y fugas de información. IDS, sistemas de detección de intrusos: NIDS como Snort, IDS como Tripwire para garantizar la integridad en archivos, Honeypots como Honeyd para entretener los ataques de los intrusos, detectores de escaners de puertos, de sniffers y de rootkits,... Monitorización del sistema: Top, Kismet Wireless, AirSonrt,... Chequeos del sistema: Escaneo de vulnerabilidades con Nessus, escaneo de puertos y servicios en red con Nmap, escaneo de logs con Logcheck, No garantiza la seguridad. Si un intruso quiere entrar, y tiene los conocimientos y/o herramientas suficientes, entrará. Las herramientas aquí propuestas son de carácter preventivo, disuasorio y forense. De esta forma es mucho más facil que el intruso se desespere y se vaya a hacer lo que quiere hacer, a otro sitio. Los sistemas de este estilo, no son la panacea, exigen la dedicación de mucho tiempo y una administración rigurosa. Es decir, exigen de mucho tiempo y mucho dinero para que resulten efectivos. No todas las empresas se podrán permitir este tipo de gastos. Hay que analizar hasta donde conviene proteger y aplicar una solución, que no será estandar, sino adaptada al perfil de nuestra organización o empresa. A nivel personal a sido un proyecto muy gratificante y muy desesperante al mismo tiempo, esto a sido debido a varios motivos: El primero y principal, el proyecto lo plantee demasiado ambicioso. Partía con mucha voluntad, ganas e interes; pero con una gran falta de conocimientos de base, esto muy pronto se hizo patente. La planificación fue bastante imprecisa: Debido a mi falta de experiencia y conocimientos, los plazos se han aumentado muchisimo, llegando suplir esta falta de previsión con unas 300 horas extras respecto a la planificación inicial. A pocos días de la entrega final, se lanzo la versión estable del proyecto Debian Sarge. Esto derivo en dos consecuencias importantes: 1. La primera positiva: La elección de Debian Sarge fue muy acertada, si hubiera elegido Debian Woody, habría terminado un proyecto que desde el principio sería obsoleto. Por contra, ahora está totalmente actualizado y será válido por un largo periodo de tiempo. 2. En contra: La mayor parte del documento está escrito pensado que la versión estable se lanzaría en un futuro inmediato. Este futuro se ha adelantado un mes, la solución a pasado por agregar un anexo (véase anexo G) donde se explica que ha pasado y que implicaciones tiene esto en el documento. El proyecto lo podría clasificar de interés personal, ya que mi pasión de siempre, han sido los sistemas operativos. Por razones diversas no me había adentrado en el mundo de Linux, más que a un nivel muy superficial. Este proyecto me ha permitido profundizar e investigar sobre el mundo de la seguridad informática, sobre todo en entornos Linux y es muy probable que en el futuro, mi perfil profesional se ubique en este sector. Con el proyecto finalizo la Ingeniería técnica en Informática de Sistemas, y me servido para afianzarme en la idea de terminar mis estudios en la Ingeniera superior. Gracias a los conocimientos adquiridos, el proyecto de la superior me resultará mucho más facil de afrontar y probablemente también este enfocado hacia alguna parte concreta de la seguridad informática, sector que actualmetne está teniendo un gran auge.

331 Capítulo 19. Conclusiones 313 Los conocimientos adquiridos en el entorno de composición de textos L A TEX me permitirán, a partir de ahora, realizar documentación mucho más profesional. El descubrimiento del mundo del software libre, me ha abierto el horizonte, las licencias GPL permiten observar que hay futuro más haya de las empresas y los entornos propietarios. Cada uno tiene su sector de mercado y deben cooperar en vez de enfrentarse, asumiendo el papel que han elegido. Después de la elaboración de este proyecto, yo me he situado claramente en el sector GPL. Por todo ello, lo considero una experiencia muy positiva y seguramente orientará mi futuro profesional al sector de la seguridad informática. Una objetivo que me gustaría conseguir, si es posible (es decir, si la universidad y mi director de proyecto están de acuerdo), es poner a disposición de la comunidad de usuarios Linux este documento. De está forma mi trabajo podrá ser aprovechado por un mayor número de personas, ya que este no es el típico proyecto con una utilidad muy limitada, sino que tiene un uso mucho más amplio y puede llegar a ser útil a mucha gente.

332

333 Parte V Apéndices

334

335 Apéndice A Comandos básicos Para más información sobre los comandos podemos ejecutar: $man <comando> Comandos de sistema Comando man ls rm cp mv ln -s <fichero> <enlace> pwd cd <directorio> cd.. chown, chgrp y chmod touch <fichero> find y locate grep find / grep cadena df du -sh cat, more y less <comando> more y <comando> less vim y emacs nedit, kedit y kwrite split which Descripción Páginas del manual Listar (múltiples opciones) Borrar Copiar Mover o renombrar Enlace debil a fichero Directorio actual Entra en directorio Sale del directorio actual Sobre atributos de ficheros Crear ficheros vacíos Buscar ficheros Buscar texto en ficheros (muy potente) Busca un fichero que contenga esa cadena por el sistema Ver espacio libre en disco Ver espacio usado en el directorio actual Lista ficheros Salida de comando filtrada por páginas Editores de texto, modo texto Editores de texto, modo gráfico Partir ficheros Devuelve el Path de un ejecutable, que se encuentre en la variable $PATH Entorno gráfico X-Windows Comando startx startx -- :2, :3, etc. xf86config xf86cfg CTRL+ALT+BACKSPACE Descripción Iniciar sesion X Abrir nuevas sesiones Configurar X, modo texto Configurar X, modo gráfico Salir de las X

336 318 Servidor Linux para conexiones seguras de una LAN a Internet Comandos para comunicaciones y redes Comando who finger mail write wall mesg talk baner cal clear date passwd Descripción Lista los usuarios conectados Información sobre los usuarios Sencillo programa de correo Manda un mensaje a la pantalla de un usuario Manda un mensaje a todos los usuarios Activa/Desactiva la recepción de mensajes write y wall Establece una conversación con otro usuario Saca un letrero en pantalla con el texto que se le pase al comando Saca un calendario en pantalla Limpia la pantalla Saca fecha y hora actuales Cambia contraseña de un usuario Comprimir y descomprimir Comando tar zxvf tar jxvf tar cxvf <archivo>.tar.gz <archivo> gzip -d tar gzip Descripción Descomprimir un.tar.gz Descomprimir un.tar.bz2 Comprimir un archivo o directorio Descomprimir un.gz Empaquetar sin comprimir (múltiples opciones) Comprimir ficheros (despues de empaquetar) Montaje de unidades Comando mount -t msdos /dev/floppy /mnt mount -t iso9660 /dev/cdrom /mnt mount -t <tipo> /dev/<dispositivo> <punto_de_montaje> umount <punto_de_montaje> Descripción Montar diskette Montar cdrom Montar un dispositivo Desmontar unidad Uso del sistema Comando ps ps -u<usuario> lspci lsmod modconf uname -a ldconfig -p ldd <ruta>/<programa> shutdown -r 0 shutdown -h 0 shutdown <opcion> <n_segundos> logout su <usuario> fdisk /mbr Descripción Procesos en ejecución del teminal Procesos en ejecución del usuario Dispositivos PCI del sistema Módulos cargados en el kernel Cargar módulos en el kernel Información del sistema Librerías instaladas Librerías que usa el programa Reinizializa el sistema (#reboot) Apaga el sistema (#halt) Realiza ópcion despues de n segundos segundos Cierra la sesión del usuario Cambia sesión a otro usuario (switch user) Borra el gestor de arranque del disco (arranques del sistema)

337 Apéndice B Debian en castellano Para tener las aplicaciones en nuestro idioma lo primero que necesitamos es instalar los siguientes paquetes: #apt-get install user-euro-es language-env euro-support Una vez hayamos realizado el apt-get, para ver los locales (idiomas locales) que tiene el usuario que se encuentra actualmente conectado, hay que ejecutar el siguiente comando: $locale Si además queremos saber que traducciones locales tenemos disponibles en el sistema, ejecutaremos la siguiente instrucción: $locale -a Si el idioma castellano, no se encuentra disponible entre las locales del sistema las podemos incluir en el archivo de configuración de locales, /etc/locale.gen. Para ello añadiremos al final de ese archivo las siguientes líneas: ISO es_es ISO Una vez añadidas al archivo necesitamos que las ejecute y reconfigure nuestro sistema, mediante el comando: #/usr/sbin/locale-gen Además en unos de los ficheros que carga las variables de usuario añadiremos las siguientes variables de entorno. Por ejemplo en el archivo /.bash profile: export LANG=es_ES.ISO export La próxima vez que hagamos login con el usuario cargará el nuevo perfil. Podemos comprobamos que los locales son los correctos, con el mismo comando que antes: $locale

338 320 Servidor Linux para conexiones seguras de una LAN a Internet Una vez tengamos disponible el idioma castellano, podemos habilitar también el soporte para el euro en la consola. Pasa eso tenemos que añadir las siguientes líneas al fichero /etc/console-tools/config, fichero de configuración de la consola: SCREEN_FONT=lat0-sun16 APP_CHARSET_MAP=iso15 APP_CHARSET_MAP_vc2=iso15 APP_CHARSET_MAP_vc3=iso15 Si además también queremos colocar las páginas de manuales en castellano hay que instalar los siguientes paquetes: #apt-get install user-es manpages-es manpages-es-extra Solo queda castellanizar las aplicaciones del sistema, si es que tienen los archivos del idioma. Hay que ejecutar el siguiente comando, seleccionando las opciones que nos interesen: #dpkg-reconfigure locales, Este documento esta basado en la documentación disponible en Debian, se puede consultar mediante: $man castellanizar

339 Apéndice C Archivos de configuración Archivo /etc/lilo /etc/inetd.conf /etc/xinetd.conf /etc/init.d/* /etc/rc#.d /etc/passwd /etc/group /etc/skel/* /etc/fstab /etc/x11/xf86config-4 /.xinitrc /.vimrc /etc/profile /.profile /.bash profile /.bash login /.bash logout /.bashrc /etc/ssh/ssh config /etc/ssh/sshd config /.gnupg/ /etc/at.allow /etc/at.deny /etc/crontab /var/spool/cron/crontabs/<usuario> /etc/anacrontab /etc/locale.gen /etc/console-tools/config /etc/webmin/miniserv.conf /etc/squid/squid.conf /etc/squid/* Descripción Configuración del gestor de arranque Lilo Superservidor de Internet y envoltorio de demonios TCP/IP Configuración del superservidor, mediante entorno gráfico Scrips de inicio del sistema que ejecutara initd Scripts runlevels que ejecuta init al arrancar el equipo Usuarios del sistema Contraseñas encriptadas de los usuarios del sistema El contenido de este directorio se copiará al home de cada usuario nuevo del sistema Montaje de particiones en el sistema Configuracion de las X-Windows Archivo de arranque de usuario para las X-Windows Archivo de configuración del Vim Preferencias de todos los usuarios del sistema Preferencias del usuario Preferencias del shell bash Configuración de inicio del shell bash Configuración de finalización del shell bash Si se ejecuta un shell interactivo bash sin entrada por consola Configuración del cliente para las conexiones seguras SSH Configuración del servidor de conexiones seguras SSH Directorio que contiene los archivos de usuario de GnuPG Usuarios a los que les esta permitido programar tareas at Usuarios a los que les esta denegado programar tareas at Taréas programadas del sistema Tareas programadas por cada usuario Tareas programadas que se pueden ejecutar con retraso Archivo de locales Archivo de configuración de la consola Archivo de configuración de Webmin Configuración del proxy Squid Archivos de configuración del Proxy Squid

340 322 Servidor Linux para conexiones seguras de una LAN a Internet Archivo /etc/kismet/kismet ui.conf /etc/kismet/kismet.conf /etc/freeradius/radiusd.conf /etc/freeradius/eap.conf /etc/freeradius/clients.conf /etc/freeradius/users.conf /etc/modules.conf /etc/modules /etc/network/interfaces /etc/network/options /etc/host.conf /etc/hostname /etc/hosts /etc/hosts.allow /etc/hosts.deny /etc/hotplug/* /etc/hotplug.d/* /etc/cvs-cron.conf /etc/cvs-pserver.conf /etc/dhcpd.conf /etc/default/dhcpd /var/lib/dhcp/dhcpd.leases /var/lib/dhcp/dhclient.leases /etc/default/dhcp3-relay /etc/dhpc3/dhclient.conf /etc/dhcp3/dhcpd.conf /etc/snort/snort.conf /etc/snort/rules/*.rules /etc/tripwire/twpol.txt /etc/acidlab/acid conf.php /etc/portsentry/portsentry.conf /var/log/* /etc/nessus/nessusd.conf /etc/proftpd.conf /etc/ftpusers /etc/ypserv.conf /etc/ypserv.securenets /var/yp/makefile /var/yp/yp-servers /etc/yp.conf /etc/nsswitch /etc/resolv.conf /etc/bind/db.lan /etc/bind/db /etc/bind/named.conf /etc/bind/named.conf.local /etc/bind/named.conf.options /etc/samba/smb.conf /etc/smbpasswd /etc/smbusers /etc/lmhosts Descripción Configuración de la interfaz del sniffer wifi Kismet Configuración del sniffer wifi Kismet Opciones de FreeRadius Opciones para EAP en FreeRadius IPs clientes de FreeRadius Usuarios clientes de FreeRadius Módulos que se cargarán al inicio Configuración de los módulos Configuración de interfaces de red Configuración de las opciones de red Dice al sistema cómo resolver los nombres de los hosts Nombre.dominio del host local Nombre y dirección IP de hosts del sistema Hosts a los que se le permite el acceso al sistema Hosts a los que se le deniega el acceso al sistema Scrips de configuración de dispositivos hotplug (inst. dinámica) Archivos de agentes de dispositivos Sistema de versiones concurrentes (cvs) Opciones del servidor de versiones (cvs) Archivo de configuración estandar DHCPD Opciones del DHCPD Base de datos lease para el servidor DHCPD Base de datos lease para el cliente DHCP Archivo de configuración DHCP-relay DHCP del cliente dhcp3 DHCP del servidor dhcp3 Archivo de configuración de Snort Archivos de reglas para Snort Archivo de políticas Archivo de configuración de ACID Archivo de configuración de PortSentry Registro de logs del sistema Archivo de configuración de Nessus Configuración del servidor ProFTPD Usuarios del sistema que tienen permitido el acceso FTP Configuración del servidor NIS Configura las IP que tienen permiso para usar el servidor NIS Configuración opciones servidor NIS y archivos a exportar Listado de los servidores NIS secundarios de nuestro sistema Configuración del cliente NIS Archivos a importar del servidor NIS Contiene el nombre y la dirección IP de los servidores DNS Añadir para los equipos de una LAN Añadir para el DNS inverso de una LAN Configuración del servidor DNS BIND Define zonas locales en el servidor DNS BIND Define las opciones del servidor DNS BIND Configuración del servidor Samba Contiene los passwords de los usuarios Samba Contiene una lista de los usuarios del sistema y su correspondencia con su usuario Samba Interfaz entre los nombres de maquinas NetBIOS y las direcciones IP numericas

341 Apéndice C. Archivos de configuración 323 Archivo /etc/printcap /var/spool/samba /var/spool/mail /etc/dumpdates /<particion>/quota.group /<particion>/quota.user /etc/exports /etc/jabber/jabber.xml /etc/printcap /etc/cups/cupsd.conf /var/run/cups/printcap /var/spool/cups /etc/apache/httpd.conf /etc/apache/modules.conf /etc/apache/access.conf /etc/apache/srm.conf /etc/apache/mime.types /etc/apache/conf.d/ /etc/apache-ssl/* /var/log/apache/* /etc/webalizer.conf /var/www/webalizer /etc/exim4/exim4.conf.template /var/mail/<usuario> /etc/mailname /etc/aliases /etc/ -addresses /etc/fetchmailrc /.fetchmailrc /etc/courier/imapd /etc/courier/imapd.cnf /etc/courier/imapd-ssl /.mailfilter /etc/procmailrc /.procmailrc /etc/clamav/clamd.conf /etc/default/spamassassin /etc/default/spampd Descripción Impresoras del sistema Cola de impresión, por defecto, en Samba Correo de los usuarios Información de las copias de seguridad realizadas Archivos de configuración de quotas de grupo Archivos de configuración de quotas de usuario Archivo de configuración de NFS Archivo de configuración del servidor Jabber Archivo de configuración de impresoras LPD Configuración del servidor Cups Archivo de configuración de impresoras Cups Directorio donde se almacenan los archivos que se van a imprimir Archivos de configuración de Apache Directorio de configuración de los módulos Apache Los mismos archivos de configuración, para Apache-SSL Directorio donde se almacenan los logs, generados por Apache Archivo de configuración de Webalizer Reportes de estadisticas web Archivo de configuración de Exim4 Archivo de correo de los usuarios del sistema Direcciones de correo locales Alias de nombres de usuario Direccion de correo del servidor Archivo de configuración del servidor Fetchmail Archivo de configuración de usuario Fetchmail Archivo de configuración de courier-imap Opciones de courier-imap Opciones de courier-imap-ssl Configuración de usuario Maildrop Archivo de configuración del servidor Procmail Archivo de configuración de usuario Procmail Archivo de configuración de ClamAV Configuración del SpamAssassin Configuración del demonio de SpamAssassin

342

343 Apéndice D Por qué Debian no tiene rc.local? A diferencia de otras distribuciones Linux, parece que Debian no usa rc.local (el archivo de configuración local) para el proceso de inicialización. Entonces, qué facilidades suministra Debian para esta tarea? Runlevels Tradicionalmente en los sistemas UNIX/LINUX, cuando se inicia la máquina, el proceso init (que es ejecutado por el kernel cuando termina su arranque) ejecuta una serie de scripts de inicio, los cuales suelen encargarse de setear valores de configuración y ejecutar diversos programas. Dicho proceso de arranque se separa en runlevels, que son simplemente números que identifican cada etapa, y en general van del 0 al 6, los números del 7 al 9 también están definidos pero no se suelen usar. Hay una excepción, el runlevel s, que es el single user mode, y se suele usar para tareas especiales de rescate y/o mantenimiento inesperado. Hoy en día, las distribuciones manejan cada una sus scripts de arranque de forma particular, y muchas veces se manejan de forma alternativa sin tener runlevels claramente definidos como hasta hace unos años. En algunas, se pueden encontrar los directorios /etc/rc#.d/, donde # representa al número de runlevel; en otras están todos los scripts contenidos en /etc/rc.d o en /etc/init.d. Lo mas aconsejable en cada caso es consultar la documentación de cada distribución. Podemos cofigurar gráficamente los scrips de RunLevel con la herramienta: #ksysv Insertar un script en el arranque Supongamos que un sistema necesita ejecutar el script exemple al inicializar, o al entrar en un runlevel en particular. Entonces el administrador del sistema debería: Colocar el script exemple en el directorio /etc/init.d/ Ejecutar la orden update-rc.d con los argumentos apropiados para preparar enlaces entre los directorios rc?.d (especificados desde la línea de comandos) y /etc/init.d/exemple. Aquí,? es un número que corresponde a un runlevel estilo System V La orden update-rc.d 1 creará enlaces entre ficheros en los directorios rc?.d y el script en /etc/init.d/. Cada enlace comenzará con una S o una K, seguida de un número, seguido por el nombre del script. Los scripts que comiencen con S en /etc/rcn.d/ serán ejecutados al entrar al runlevel N. Los que lo hagan con con una K serán ejecutados al dejar el runlevel N. 1 Para tener disponible el comando update-rc.d hay que realizar un apt: #apt-get install rcconf

344 326 Servidor Linux para conexiones seguras de una LAN a Internet Uno podría, por ejemplo, obligar al script exemple a ejecutarse en el arranque, poniéndolo en /etc/init.d/ e instalando los enlaces con #update-rc.d exemple defaults 19. El argumento defaults se refiere a los runlevels predeterminados, que son los que van del 2 al 5. El argumento 19 se asegura de que exemple sea llamado antes que cualquier otro script que contenga el número 20 o un número mayor. Si necesitamos administra este tipo de archivos de runlevel podemos instalar con apt, el siguiente paquete: #apt-get install rcconf Para ejecutarlo intruduciremos el comando: #rcconf Mostrará un menú gráfico desde donde podremos habilitar o deshabilitar servicios en la carga inicial del sistema. Insertar un script, mediante el asistente gráfico Se pueden agregar scrips de forma gráfica, mediante nuestra herramienta de configuración web: Webmail. En la figura D.1 podemos observar el método para agregar un scrip nuevo. Figura D.1: Interfaz gráfica Webmin para agregar Runlevels

I Tareas previas 1. 1. Planificación 3 1.1. Fases del proyecto... 3 1.2. Esquema temporal... 3

I Tareas previas 1. 1. Planificación 3 1.1. Fases del proyecto... 3 1.2. Esquema temporal... 3 Índice general Introducción IV I Tareas previas 1 1. Planificación 3 1.1. Fases del proyecto........................................ 3 1.2. Esquema temporal........................................ 3 2.

Más detalles

6 INSTALA, ADMINISTRA, SECURIZA Y VIRTUALIZA ENTORNOS LINUX RA-MA

6 INSTALA, ADMINISTRA, SECURIZA Y VIRTUALIZA ENTORNOS LINUX RA-MA ÍNDICE PRÓLOGO...13 CAPÍTULO 1. LINUX: UNA VISIÓN GENERAL...15 1.1 QUÉ APORTA ESTE LIBRO SOBRE LINUX...16 1.2 CÓMO COMIENZA LINUX...17 1.3 SISTEMA OPERATIVO LINUX...17 1.4 GNU LINUX, LINUX GNU O LINUX...18

Más detalles

MÁSTER ONLINE EN ADMINISTRACIÓN LINUX

MÁSTER ONLINE EN ADMINISTRACIÓN LINUX MÁSTER ONLINE EN ADMINISTRACIÓN LINUX Módulo 1 Hardware & Arquitectura de sistemas - 20 horas Este módulo permite conocer y configurar los elementos básicos del hardware del sistema, como también otros

Más detalles

Módulos: Módulo 1. Hardware & Arquitectura de sistemas - 20 Horas

Módulos: Módulo 1. Hardware & Arquitectura de sistemas - 20 Horas Módulos: Módulo 1 Hardware & Arquitectura de sistemas - 20 Horas Este módulo permite conocer y configurar los elementos básicos del hardware del sistema, como también otros componentes adicionales como

Más detalles

Software Libre. José Antonio Martínez Torres. 26 de abril de 2008

Software Libre. José Antonio Martínez Torres. 26 de abril de 2008 26 de abril de 2008 Software privativo Software gratuito Software abierto Software libre Software privativo (propietario, comercial) Alto costo. En un CD ó DVD entregan los ejecutables. Soporte técnico,

Más detalles

INTRODUCCIÓN...15 TEORÍA...17

INTRODUCCIÓN...15 TEORÍA...17 ÍNDICE INTRODUCCIÓN...15 TEORÍA...17 CAPÍTULO 1. ASPECTOS BÁSICOS...19 1.1 TAREAS DEL ADMINISTRADOR...19 1.2 HARDWARE DEL SERVIDOR...21 1.2.1 CPD...21 1.2.2 Sistema de rack...23 1.2.3 Servidores...24 1.2.4

Más detalles

LINUX. GNU/Linux. Cuatro características muy peculiares lo diferencian del resto de los sistemas que podemos encontrar en el mercado:

LINUX. GNU/Linux. Cuatro características muy peculiares lo diferencian del resto de los sistemas que podemos encontrar en el mercado: LINUX GNU/Linux GNU/Linux es un sistema operativo de libre distribución, basado en el kernel Linux creado por Linus Torvalds y los desarrolladores del grupo GNU (Fundación para el software libre encabezada

Más detalles

EXPERTO EN ADMINISTRACIÓN Y SEGURIDAD DE REDES INFORMÁTICAS

EXPERTO EN ADMINISTRACIÓN Y SEGURIDAD DE REDES INFORMÁTICAS Instituto de Formación Profesional CBTech Estudie desde su hogar y obtenga un certificado universitario Formación a distancia de EXPERTO EN ADMINISTRACIÓN Y SEGURIDAD DE REDES INFORMÁTICAS 1 Temario del

Más detalles

! " # $!% & % '" ()!*++,

!  # $!% & % ' ()!*++, !" # $!%&%'" ()!*++, Qué es Linux? Antecedentes. Licencia. Características. Entorno de Trabajo. Estructura General. Sistema de Ficheros. Tipos. Path. Permisos de Acceso. Distribuciones Comerciales. Elementos

Más detalles

Diplomado. Redes y Conectividad de Computadores. Modulo I: Fedora Linux ( 90 Hrs.)

Diplomado. Redes y Conectividad de Computadores. Modulo I: Fedora Linux ( 90 Hrs.) Diplomado Redes y Conectividad de Computadores Modulo I: Fedora Linux ( 90 Hrs.) Curso 1: Fedora Linux Básico 1. Introducción 1.1. Unix / Linux 1.2. Características Principales 1.3. Historia 1.4. Conceptos

Más detalles

Sistema Operativo Linux

Sistema Operativo Linux Fundación Colegio Aplicación Toico Palo Gordo. Municipio Cárdenas. Cátedra: Informática Objetivo N. 2 (SISTEMA OPERATIVO LINUX) Segundo Año. Secciones: A y B. Prof. Dayana Meléndez Sistema Operativo Linux

Más detalles

UNIVERSIDAD NACIONAL SAN ANTONIO ABAD DEL CUSCO CARRERA PROFESIONAL DE INGENIERIA ELECTRONICA LINUX AVID ROMAN GONZALEZ

UNIVERSIDAD NACIONAL SAN ANTONIO ABAD DEL CUSCO CARRERA PROFESIONAL DE INGENIERIA ELECTRONICA LINUX AVID ROMAN GONZALEZ UNIVERSIDAD NACIONAL SAN ANTONIO ABAD DEL CUSCO CARRERA PROFESIONAL DE INGENIERIA ELECTRONICA LINUX AVID ROMAN GONZALEZ Introducción Linux es clónico de UNIX El sistema en si refleja esta compleja herencia

Más detalles

LA ARQUITECTURA TCP/IP

LA ARQUITECTURA TCP/IP LA ARQUITECTURA TCP/IP Hemos visto ya como el Modelo de Referencia de Interconexión de Sistemas Abiertos, OSI-RM (Open System Interconection- Reference Model) proporcionó a los fabricantes un conjunto

Más detalles

Software libre. El software libre provee la libertad de: Documentación (guías, wikis, faqs, etc.). Programa ejecutable. Código fuente del programa.

Software libre. El software libre provee la libertad de: Documentación (guías, wikis, faqs, etc.). Programa ejecutable. Código fuente del programa. GNU / Linux Software libre Es una forma ética de entender el software (en su desarrollo, comercialización, distribución y uso). Con el software libre se distribuye: Documentación (guías, wikis, faqs, etc.).

Más detalles

Tema 1: Introducción. Generador del proyecto GNU, Richard Stallman es principalmente conocido por el establecimiento de un.

Tema 1: Introducción. Generador del proyecto GNU, Richard Stallman es principalmente conocido por el establecimiento de un. Tema 1: Introducción Objetivos: Conocimiento de la historia y filosofía de GNU/LINUX para que el estudiante entienda cual es el propósito de la utilización de un sistema operativo libre de licenciamiento.

Más detalles

DIPLOMADO LINUX ENTERPRISE SERVER: SERVIDORES Y SEGURIDAD

DIPLOMADO LINUX ENTERPRISE SERVER: SERVIDORES Y SEGURIDAD DIPLOMADO LINUX ENTERPRISE SERVER: SERVIDORES Y SEGURIDAD TABLA DE CONTENIDO INTRODUCCION... 3 ESTRUCTURA DEL DIPLOMADO... 4 TEMA 1: INSTALACION, ADMINISTRACION, SOPORTE... 4 Instalación de Linux... 4

Más detalles

Software Libre. Guillermo Valdés Lozano. 28 de noviembre de 2007

Software Libre. Guillermo Valdés Lozano. 28 de noviembre de 2007 28 de noviembre de 2007 Documento protegido por GFDL Copyright (c) 2008. e-mail: guillermo(en)movimientolibre.com http://www.movimientolibre.com/ Se otorga permiso para copiar, distribuir y/o modificar

Más detalles

Software Libre / Código Abierto Programa de contenidos

Software Libre / Código Abierto Programa de contenidos Software Libre / Código Abierto Programa de contenidos Resumen Se presenta a continuación la organización de un curso de cincuenta horas cuyo fin es dar a conocer la base ideológica que sostiene a los

Más detalles

Nivel Básico/Intermedio/Avanzado. Instalar y Configurar Servidores GNU/Linux. Administrar Servidores GNU/Linux. Proteger ante ataques a Servidores.

Nivel Básico/Intermedio/Avanzado. Instalar y Configurar Servidores GNU/Linux. Administrar Servidores GNU/Linux. Proteger ante ataques a Servidores. GNU/Linux CentOS Nivel Básico/Intermedio/Avanzado Instalar y Configurar Servidores GNU/Linux. Administrar Servidores GNU/Linux. Proteger ante ataques a Servidores. Optimizar Servidores GNU/Linux y virtualizar

Más detalles

Firewall Firestarter. Establece perímetros confiables.

Firewall Firestarter. Establece perímetros confiables. Firewall Firestarter Qué es un Firewall? Un muro de fuego (firewall en inglés) es una parte de un sistema o una red que está diseñada para bloquear el acceso no autorizado, permitiendo al mismo tiempo

Más detalles

Novell Open Workgroup Suite

Novell Open Workgroup Suite Novell Open Workgroup Suite Edición para pequeñas empresas Guía de inicio rápido Septiembre de 2007 v1.5 Página 1 Introducción Esta guíadescribe cómo instalar el software Novell Open Workgroup Suite en

Más detalles

LINUX. NIVEL COMPLETO

LINUX. NIVEL COMPLETO LINUX. NIVEL COMPLETO DESCRIPCIÓN Como cualquier sistema operativo actual, Linux Ubuntu aporta una experiencia grata y sencilla en su utilización, pero al mismo tiempo es un software de gran complejidad

Más detalles

CURSO ADMINISTRADOR GNU/LINUX CON DEBIAN CANAIMA

CURSO ADMINISTRADOR GNU/LINUX CON DEBIAN CANAIMA CURSO ADMINISTRADOR GNU/LINUX CON DEBIAN CANAIMA Objeto del curso: Formar en el área de Administrador a participantes de diferentes Entes de la Administración Pública Nacional. Objetivos generales y específicos

Más detalles

ebox: Servidor de dominio Windows libre y gratuito

ebox: Servidor de dominio Windows libre y gratuito ebox: Servidor de dominio Windows libre y gratuito Guía de instalación y configuración Manuel Morán Vaquero mmv@edu.xunta.es Febrero 2010 Esta guía está basada en la versión 1.2 de ebox Índice 1 Introducción

Más detalles

INSTALACION VIRTUALIZADA DE UBUNTU SERVER CON SERVICIOS LAMP Y OPENSSH SOBRE VIRTUAL BOX. Nicolás Botero Botero Juan Manuel Velásquez Isaza

INSTALACION VIRTUALIZADA DE UBUNTU SERVER CON SERVICIOS LAMP Y OPENSSH SOBRE VIRTUAL BOX. Nicolás Botero Botero Juan Manuel Velásquez Isaza INSTALACION VIRTUALIZADA DE UBUNTU SERVER CON SERVICIOS LAMP Y OPENSSH SOBRE VIRTUAL BOX Nicolás Botero Botero Juan Manuel Velásquez Isaza Universidad Tecnológica de Pereira Facultad de Ingenierías Ingeniería

Más detalles

ANEXO A: Guía de instalación de Debian GNU/Linux 4.0.

ANEXO A: Guía de instalación de Debian GNU/Linux 4.0. Técnico en Repatación de PC y Redes (intensivo) ANEXO A: Guía de instalación de Debian GNU/Linux 4.0. Introducción. La presente guía indica el paso a paso para instalar la version 4.0 de Debian GNU/Linux

Más detalles

SERVIDOR PROXY CACHÉ. Servicios que ofrece:

SERVIDOR PROXY CACHÉ. Servicios que ofrece: SERVIDOR PROXY CACHÉ Servicios que ofrece: 1. Filtrado de contenidos web. 2. Proxy caché. 3. Cortafuegos. 4. Antivirus 5. Servidor DHCP. 6. Balanceo de carga. 7. Servidor Web para Intranets. 8. Administración

Más detalles

Introducción. Qué es Cliente delgado. Funcionamiento básico. Cliente delgado en Linux

Introducción. Qué es Cliente delgado. Funcionamiento básico. Cliente delgado en Linux Índice de contenido Introducción...2 Qué es Cliente delgado...2 Funcionamiento básico...2 Cliente delgado en Linux...2 Proyectos de Cliente delgado en Linux...3 Detalles del funcionamiento...3 Funcionamiento

Más detalles

La inscripción sólo se realiza rellenando en Internet la ficha de inscripción:

La inscripción sólo se realiza rellenando en Internet la ficha de inscripción: Nombre: Certified IT Professional: Administración de Sistemas Operativos Nº horas: 280 Nº alum.: 16 Inicio: 19/01/2015 Fin: 21/05/2015 Horario: 9-13h Lugar: ZARAGOZA La inscripción sólo se realiza rellenando

Más detalles

Práctica de Seguridad en Redes

Práctica de Seguridad en Redes Práctica de Seguridad en Redes Juan Boubeta Puig y Antonio García Domínguez Seguridad y Competencias Profesionales Departamento de Ingenieria Informatica Universidad de Cadiz Curso 2012-2013 1. Descripción

Más detalles

CONFIGURACIÓN DEL ADAPTADOR DE RED EN LINUX

CONFIGURACIÓN DEL ADAPTADOR DE RED EN LINUX CONFIGURACIÓN DEL ADAPTADOR DE RED EN LINUX 16/09/2005 Índice de Contenidos 1 INTRODUCCIÓN... 1-1 2 DISTRIBUCIONES LINUX... 2-1 3 CONFIGURACIÓN DE RED EN LINUX... 3-1 3.1 FEDORA CORE 3... 3-1 3.1.1 Configuración

Más detalles

Unidad 3: El sistema operativo. Trabajo con conexión.

Unidad 3: El sistema operativo. Trabajo con conexión. Unidad 3: El sistema operativo. Trabajo con conexión. 1.- Red de ordenadores Vamos a describir que es una red informática o red de ordenadores. Una red informática es un sistema de interconexión entre

Más detalles

TEMA 3: INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS.

TEMA 3: INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS. TEMA 3: INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS. 1. DEFINICIÓN DE SISTEMA OPERATIVO.... 2 2. FUNCIONES DE LOS SISTEMAS OPERATIVOS.... 2 3. CLASIFICACIÓN DE LOS SISTEMAS OPERATIVOS.... 4 4. MODOS DE EXPLOTACIÓN

Más detalles

ÍNDICE INTRODUCCIÓN...19 CAPÍTULO 1. QUÉ ES GNU/LINUX...23

ÍNDICE INTRODUCCIÓN...19 CAPÍTULO 1. QUÉ ES GNU/LINUX...23 ÍNDICE INTRODUCCIÓN...19 CAPÍTULO 1. QUÉ ES GNU/LINUX...23 1.1 CONCEPTOS BÁSICOS...25 1.1.1 PROGRAMAS Y PROCESOS...25 1.1.2 SISTEMA OPERATIVO...26 1.1.3 DESARROLLO DE PROGRAMAS...29 1.1.4 LICENCIAS DE

Más detalles

Smoothwall y Servicios de Internet. Marzo, 2006.

Smoothwall y Servicios de Internet. Marzo, 2006. Smoothwall y Servicios de Internet Marzo, 2006. Historia Richard Morrell y Lawrence Manning crean la distribución Smoothwall en verano de 2000 desde cero (LFS). Basado originalmente en un núcleo GNU/Linux

Más detalles

CURSO SUPERIOR ADMINISTRACIÓN DE SISTEMAS LINUX NIVEL JUNIOR (LPIC 1) LPI 101 y LPI 102

CURSO SUPERIOR ADMINISTRACIÓN DE SISTEMAS LINUX NIVEL JUNIOR (LPIC 1) LPI 101 y LPI 102 S CURSO SUPERIOR ADMINISTRACIÓN DE SISTEMAS LINUX NIVEL JUNIOR (LPIC 1) LPI 101 y LPI 102 Linux es uno de los paradigmas más prominentes del software libre y del desarrollo del código abierto, cuyo código

Más detalles

Intrusion Detection/Prevention Systems SNORT.

Intrusion Detection/Prevention Systems SNORT. Intrusion Detection/Prevention Systems SNORT. Miguel Angel Rodriguez Yamid Armando Pantoja Juan Carlos Pantoja Universidad de Nariño Facultad de Ingeniería Programa Ingeniería de Sistemas 11 de diciembre

Más detalles

Agente local Aranda GNU/Linux. [Manual Instalación] Todos los derechos reservados Aranda Software www.arandasoft.com [1]

Agente local Aranda GNU/Linux. [Manual Instalación] Todos los derechos reservados Aranda Software www.arandasoft.com [1] Todos los derechos reservados Aranda Software www.arandasoft.com [1] Introducción El Agente Aranda para sistemas Linux se encarga de recolectar la siguiente información en cada una de las estaciones de

Más detalles

Thinclients Terminales ligeros con CentOS 5 y Thinstation

Thinclients Terminales ligeros con CentOS 5 y Thinstation Thinclients Terminales ligeros con CentOS 5 y Thinstation Manuel Morán Vaquero mmv@edu.xunta.es Febrero 2010 Índice 1 Introducción Licencia y disclaimer Ventajas y desventajas de los terminales ligeros

Más detalles

UNIDAD DIDACTICA 14 REQUISITOS PREVIOS PARA CONFIGURAR LINUX UBUNTU SERVER COMO CONTROLADOR DE DOMINIO

UNIDAD DIDACTICA 14 REQUISITOS PREVIOS PARA CONFIGURAR LINUX UBUNTU SERVER COMO CONTROLADOR DE DOMINIO UNIDAD DIDACTICA 14 REQUISITOS PREVIOS PARA CONFIGURAR LINUX UBUNTU SERVER COMO CONTROLADOR DE DOMINIO Eduard Lara 1 1. COMPROBACIONES PREVIAS ANTES DE INSTALAR EL CONTROLADOR Antes de hacer que Linux

Más detalles

MANUAL DE INSTALACIÓN Y CONFIGURACIÓN PROFESSIONAL WINDOWS XP. Carlos Anchante Soporte y Mantenimiento PROGRAMA HUASCARAN

MANUAL DE INSTALACIÓN Y CONFIGURACIÓN PROFESSIONAL WINDOWS XP. Carlos Anchante Soporte y Mantenimiento PROGRAMA HUASCARAN WINDOWS XP PROFESSIONAL MANUAL DE INSTALACIÓN Y CONFIGURACIÓN Carlos Anchante Soporte y Mantenimiento PROGRAMA HUASCARAN 1 2 Para utilizar Windows XP Professional, es necesario: PC con 300 MHz o superior

Más detalles

Administración avanzada de GNU/Linux

Administración avanzada de GNU/Linux Administración avanzada de GNU/Linux XP07/M2103/02279 FUOC XP07/M2103/02279 Administración avanzada de GNU/Linux Ingeniero superior y doctor en Informática por la UAB. Profesor de los Estudios de Informática,

Más detalles

Curso Linux - Entrenamiento para Linux Professional Institute, Nivel 1. Exámen a Optar LPI-101 LPI-102

Curso Linux - Entrenamiento para Linux Professional Institute, Nivel 1. Exámen a Optar LPI-101 LPI-102 Temario Curso Linux - Entrenamiento para Linux Professional Institute, Nivel 1 Curso Linux - Entrenamiento para Linux Professional Institute, Nivel 1 Exámen a Optar LPI-101 LPI-102 El curso a impartirse

Más detalles

IES Abyla. Departamento de Informática. Sistemas Operativos

IES Abyla. Departamento de Informática. Sistemas Operativos Sistemas Operativos Definición y funciones básicas El Sistema Operativo es el software que permite y simplifica el uso del ordenador (hardware). Sus funciones principales son: Arrancar el ordenador y controlar

Más detalles

Se espera que resurjan las pésimas ventas de periféricos. Y por último encontramos al verdadero beneficiado, el

Se espera que resurjan las pésimas ventas de periféricos. Y por último encontramos al verdadero beneficiado, el Windows XP Professional proporciona herramientas de productividad avanzadas que su organización necesita y le ofrece el poder de administrar, implementar y soportar su ambiente de computación de una manera

Más detalles

MÓDULO: SERVICIOS E RED. Nombre: Curso: 2º SMR (9-6-2011) [Examen Final Junio]

MÓDULO: SERVICIOS E RED. Nombre: Curso: 2º SMR (9-6-2011) [Examen Final Junio] MÓDULO: SERVICIOS E RED Nombre: Curso: 2º SMR (9-6-2011) [Examen Final Junio] PARTE 1: Responde las siguientes preguntas tipo TEST. Solo hay una respuesta correcta. Dos respuestas incorrectas anulan una

Más detalles

REDES DE COMPUTADORES Laboratorio

REDES DE COMPUTADORES Laboratorio 1nsloo.cl REDES DE COMPUTADORES Laboratorio Práctica 1: Emulación de redes con NetGUI. 1. OBJETIVOS. El objetivo de esta práctica es aprender a utilizar la herramienta de emulación de redes Netkit / NetGUI,

Más detalles

Temario curso online de ingeniería de comunicación de datos y redes

Temario curso online de ingeniería de comunicación de datos y redes Temario curso online de ingeniería de comunicación de datos y redes 1 Comunicación 1.1 Orígenes 1.2 Red de computadoras 1.3 Clasificación de las redes 1.4 Ventajas de las redes 1.5 Objetivos de las redes

Más detalles

CURSO TALLER DE ADMINISTRACION DE SERVIDORES LINUX NUMERO DE HORAS: 40 A 50 HORAS DURACION: 2 HORAS DIARIAS 1 SOLO HORARIO(1 MES)

CURSO TALLER DE ADMINISTRACION DE SERVIDORES LINUX NUMERO DE HORAS: 40 A 50 HORAS DURACION: 2 HORAS DIARIAS 1 SOLO HORARIO(1 MES) CURSO TALLER DE ADMINISTRACION DE SERVIDORES LINUX NUMERO DE HORAS: 40 A 50 HORAS DURACION: 2 HORAS DIARIAS 1 SOLO HORARIO(1 MES) TEMARIO DEL CURSO PARA LINUX ASPECTOS GENERALES Qué es el Software libre

Más detalles

Administración de GNU/Linux

Administración de GNU/Linux Administración de GNU/Linux Curso de Utilización y Administración avanzada de sistemas GNU/Linux y aplicaciones de Software Libre para estudiantes universitarios Pablo Cabezas Mateos Índice Qué debe conocer

Más detalles

LPIC-2. Guía de Estudio-Exámenes 201 y 202

LPIC-2. Guía de Estudio-Exámenes 201 y 202 LPIC-2. Guía de Estudio-Exámenes 201 y 202 Agradecimientos Sobre el autor Índice Introducción Introducción Qué es Linux? Por qué obtener una certificación LPI? Cómo obtener un certificado del LPI Quién

Más detalles

Estrella: es el más usual. Todos los elementos se conectan a un elemento central (Hub o Switch) que distribuye la información.

Estrella: es el más usual. Todos los elementos se conectan a un elemento central (Hub o Switch) que distribuye la información. REDES INFORMÁTICAS Una red informática es un conjunto de ordenadores y otros dispositivos electrónicos conectados entre sí cuya finalidad es compartir recursos e información. 1. Tipos de redes - según

Más detalles

PROGRAMA UNIX MODALIDAD ONLINE

PROGRAMA UNIX MODALIDAD ONLINE PROGRAMA UNIX MODALIDAD ONLINE UNIX: Estudia las características de este sistema operativo. Estudia cómo explorar el sistema de archivos, personalizar el escritorio a gusto del usuario, herramientas de

Más detalles

Capítulo 4.- Recomendaciones para un Servidor web y de bases de datos seguro.

Capítulo 4.- Recomendaciones para un Servidor web y de bases de datos seguro. Capítulo 4.- Recomendaciones para un Servidor web y de bases de datos seguro. Este capítulo explica las características que un servidor web y de bases de datos seguro debe tener. Esto es esencial para

Más detalles

J o r n a d a s d e S L d e l a U A M. Reemplaza tus herramientas propietarias por libres

J o r n a d a s d e S L d e l a U A M. Reemplaza tus herramientas propietarias por libres J o r n a d a s d e S L d e l a U A M Reemplaza tus herramientas propietarias por libres F i n a l i d a d d e l a c h a r l a Mostrar que es viable el uso exclusivo de software libre Existe la impresión

Más detalles

FP Gestión, Formación Profesional para el Empleo. Linux OpenSuse 10.2

FP Gestión, Formación Profesional para el Empleo. Linux OpenSuse 10.2 Linux OpenSuse 10.2 Descripción: El curso se divide en tres partes o niveles: básico, avanzado y experto. En la primera parte, el alumno aprende a manejar los dos entornos de usuario más conocidos de Linux

Más detalles

IS23 Mantenimiento de Instalaciones Informáticas Práctica 7. Análisis de redes

IS23 Mantenimiento de Instalaciones Informáticas Práctica 7. Análisis de redes IS23 Mantenimiento de Instalaciones Informáticas Práctica 7. Análisis de redes 1 Objetivos Ingeniería Técnica Informática de Sistemas Curso 2003/2004 En la presente sesión se pretende familiarizar al alumno

Más detalles

abacformacio@abacformacio.com 1

abacformacio@abacformacio.com 1 Curso: Unix Unix Estudia las características de este sistema operativo. Estudia cómo explorar el sistema de archivos, personalizar el escritorio a gusto del usuario, herramientas de Internet, como un navegador

Más detalles

INDICE I. Parte: Conceptos sobre TCP/IP 1. Introducción a TCP/IP 2. Arquitectura TCP/IP 3. La Capa de Acceso a la Red

INDICE I. Parte: Conceptos sobre TCP/IP 1. Introducción a TCP/IP 2. Arquitectura TCP/IP 3. La Capa de Acceso a la Red INDICE Introducción XV I. Parte: Conceptos sobre TCP/IP 1. Introducción a TCP/IP 3 Breve historia de TCP/IP 4 La necesidad de normas abiertas 6 El proceso de normalización de Internet 9 Borradores de Internet

Más detalles

Linux, Solaris, http://www.ossec.net monitorear y controlar sus sistemas. Se mezcla

Linux, Solaris, http://www.ossec.net monitorear y controlar sus sistemas. Se mezcla Marco Teórico SIM/SIEM: Security Information and Event Management. Un Administrador de eventos de seguridad (SEM) (siglas SIEM y SIM) es una herramienta informática utilizada en la empresa de redes de

Más detalles

Fases de Instalación de un Sistema Operativo

Fases de Instalación de un Sistema Operativo Fases de Instalación de un Sistema Operativo 1. Preparar el equipo para arrancar desde CD/DVD. 2. Preparación del Disco Duro: 3. Ejecutar el programa de instalación 4. Proporcionar el nombre y contraseña

Más detalles

INTRODUCCIÓN...15 EL PROYECTO UBUNTU...29 2.1 QUÉ ES UBUNTU...29 2.2 VERSIONES DE UBUNTU...31

INTRODUCCIÓN...15 EL PROYECTO UBUNTU...29 2.1 QUÉ ES UBUNTU...29 2.2 VERSIONES DE UBUNTU...31 ÍNDICE INTRODUCCIÓN...15 BIENVENIDOS A LINUX...19 1.1 LOS ORÍGENES...19 1.2 GNU/LINUX VS. WINDOWS: VENTAJAS DE USAR GNU/LINUX...23 1.2.1 Menos cuelgues y desastres...23 1.2.2 Mayor seguridad...24 1.2.3

Más detalles

FACULTAD DE CIENCIAS EXACTAS Y NATURALES Y AGRIMENSURA. Tema: LinEx

FACULTAD DE CIENCIAS EXACTAS Y NATURALES Y AGRIMENSURA. Tema: LinEx FACULTAD DE CIENCIAS EXACTAS Y NATURALES Y AGRIMENSURA Cátedra: Sistemas Operativos Tema: LinEx Universidad Nacional del Nordeste - Año 2003 - Alumna: Rodriguez Gomez,, Gisela L.U: : 32395 Trabajo final

Más detalles

Bienvenida. Fiery Network Controller para la DocuColor 250/240

Bienvenida. Fiery Network Controller para la DocuColor 250/240 Fiery Network Controller para la DocuColor 250/240 Bienvenida En este documento, las referencias a la DocuColor 242/252/260 deben ser a la DocuColor 240/250. 2007 Electronics for Imaging, Inc. La información

Más detalles

Adopción de Ubuntu en una dependencia gubernamental, caso del Instituto

Adopción de Ubuntu en una dependencia gubernamental, caso del Instituto Adopción de Ubuntu en una dependencia gubernamental, caso del Mtro. Alejandro Escalante Enrique Martínez Fredy Alvarado Abril 2008 Introducción a Ubuntu Existen mas de 1000 diferentes versiones de distribuciones

Más detalles

FORMACIÓN Equipos de interconexión y servicios de red

FORMACIÓN Equipos de interconexión y servicios de red FORMACIÓN Equipos de interconexión y servicios de red En un mercado laboral en constante evolución, la formación continua de los profesionales debe ser una de sus prioridades. En Galejobs somos conscientes

Más detalles

MENU MULTIINICIO WINDOWS XP

MENU MULTIINICIO WINDOWS XP MENU MULTIINICIO WINDOWS XP Windows XP, al igual que otras versiones de Windows, puede presentar determinados problemas en el arranque. Las opciones que Windows XP permite para arrancar un PC después de

Más detalles

LPIC-1 Guía de estudio Exámenes 101-102

LPIC-1 Guía de estudio Exámenes 101-102 LPIC-1 Guía de estudio Exámenes 101-102 Agradecimientos Sobre el autor Introducción Qué es Linux? Por qué obtener una certificación Linux? Cómo obtener un certificado del LPI Por qué debería comprar este

Más detalles

Índice general. Índice general

Índice general. Índice general Índice general Índice general 5 Capítulo 1: Presentación de Windows Server 2008... 19 LAS NOVEDADES EN WINDOWS SERVER 2008... 21 LAS EDICIONES DE WINDOWS SERVER 2008... 25 Edición Standard... 26 Edición

Más detalles

PROYECTO. Solución Empresarial Ingeniería y Desarrollo de Software www.solucionempresarial.com.ar - info@solucionempresarial.com.

PROYECTO. Solución Empresarial Ingeniería y Desarrollo de Software www.solucionempresarial.com.ar - info@solucionempresarial.com. PROYECTO 1 ÍNDICE 1. Presentación 2. Que es LDAP 3. Ventajas 4. Funcionamientos 5. Paquetes Adicionales 6. Requisitos 7. Objetivos 8. Presupuesto 7. Presupuesto 2 Presentación Se quiere implementar un

Más detalles

Instalación de RedHat GNU/Linux Advanced Server 2.1

Instalación de RedHat GNU/Linux Advanced Server 2.1 Instalación de RedHat GNU/Linux Advanced Server 2.1 PROYECTO Documentación DESCRIPCIÓN Este documento describe cómo instalar RedHat GNU/Linux Advanced Server 2.1 en los servidores RACK AUTOR IgnacioBarrancos

Más detalles

2.2. Principales características de los sistemas operativos. UNIDAD 2

2.2. Principales características de los sistemas operativos. UNIDAD 2 2.2. Principales características de los sistemas operativos. UNIDAD 2 Mac OS X es un sistema operativo desarrollado y comercializado por Apple Inc. Ha sido incluido en su gama de computadoras Macintosh

Más detalles

El Sistema Operativo Linux

El Sistema Operativo Linux Introducción El Sistema Operativo Linux La mayor parte de los ordenadores que existen en la actualidad están diseñados de forma que puedan ejecutar diversas tareas o programas. Es evidente, que si cada

Más detalles

Instalación de Debian Etch. Pablo Sanz Mercado.

Instalación de Debian Etch. Pablo Sanz Mercado. Instalación de Debian Etch. Pablo Sanz Mercado. 1 Debian es una de las distribuciones Linux más conocidas, siendo la distribución probablemente más querida y más odiada. Por qué odiada y querida? Hay que

Más detalles

INTRODUCCIÓN AL WEB. Pag. 1 de 10

INTRODUCCIÓN AL WEB. Pag. 1 de 10 INTRODUCCIÓN AL WEB La World Wide Web o simplemente WWW o Web es uno de los métodos más importantes de comunicación que existe en Internet. Consiste en un sistema de información basado en Hipertexto (texto

Más detalles

Programas de Administración de red

Programas de Administración de red 1 Programas de Administración de red Introducción El propósito de las siguientes prácticas es el de familiarizar al alumno con los distintos programas que se utilizan para chequear y comprobar el estado

Más detalles

Administración de Redes

Administración de Redes Administración de Redes Profesor Eduardo Blanco Departamento de Computación y T. I. USB Láminas: Prof. Carlos Figueira Objetivos Desarrollar bases para administrar, configurar y actualizar plataformas

Más detalles

CAPÍTULO 4 ANÁLISIS DE IMPLEMENTACIONES

CAPÍTULO 4 ANÁLISIS DE IMPLEMENTACIONES CAPÍTULO 4 ANÁLISIS DE IMPLEMENTACIONES En el anterior capítulo se realizaron implementaciones en una red de datos para los protocolos de autenticación Kerberos, Radius y LDAP bajo las plataformas Windows

Más detalles

Índice. agradecimientos...19

Índice. agradecimientos...19 Índice agradecimientos...19 CAPÍTULO 1. CARACTERIZACIÓN DE SISTEMAS OPERATIVOS...21 1.1 El sistema informático...22 1.1.1 Clasificación de los sistemas informáticos...24 1.2 El sistema operativo... 26

Más detalles

Guía de Instalación Rápida

Guía de Instalación Rápida Guía de Instalación Rápida 1. Resumen de la instalación Gracias por elegir BitDefender Business Solutions para proteger su negocio. Este documento le permite empezar rápidamente con la instalación de BitDefender

Más detalles

Informática y Programación Escuela de Ingenierías Industriales y Civiles Grado en Ingeniería en Ingeniería Química Curso 2010/2011

Informática y Programación Escuela de Ingenierías Industriales y Civiles Grado en Ingeniería en Ingeniería Química Curso 2010/2011 Módulo 1. Fundamentos de Computadores Informática y Programación Escuela de Ingenierías Industriales y Civiles Grado en Ingeniería en Ingeniería Química Curso 2010/2011 1 CONTENIDO Tema 1. Introducción

Más detalles

c) Porqué comprar software comercial si puede conseguir mejor software gratis?

c) Porqué comprar software comercial si puede conseguir mejor software gratis? Indice. Resumen Ejecutivo..2 Indice...3 Introducción4 Cuerpo.5 Conclusión...9 Bibliografía y Referencias.10 Resumen Ejecutivo Este informe lo único que busca es persuadir al lector (cualquiera que este

Más detalles

Tema I. Sistemas operativos

Tema I. Sistemas operativos Pag 1 Tema I. Sistemas operativos Un sistema operativo es un programa (software) encargado de poner en funcionamiento el ordenador, puesto que gestiona los procesos básicos del sistema. Así mismo se encarga

Más detalles

INFORME DE ACCESO REMOTO SEGURO CON PROTECCIÓN WAF WEB APPLICATION FIREWALL. Universidad de Alcalá Departamento de Ciencias de la Computación

INFORME DE ACCESO REMOTO SEGURO CON PROTECCIÓN WAF WEB APPLICATION FIREWALL. Universidad de Alcalá Departamento de Ciencias de la Computación LABORATORIO INFORME DE ACCESO REMOTO SEGURO CON PROTECCIÓN WAF WEB APPLICATION FIREWALL SonicWALL SRA 4200 Universidad de Alcalá Departamento de Ciencias de la Computación SonicWALL SRA 4200 SonicWALL

Más detalles

Acronis Backup & Recovery 10 Server para Linux. Update 5. Guía de instalación

Acronis Backup & Recovery 10 Server para Linux. Update 5. Guía de instalación Acronis Backup & Recovery 10 Server para Linux Update 5 Guía de instalación Contenido 1 Antes de la instalación...3 1.1 Componentes de Acronis Backup & Recovery 10... 3 1.1.1 Agente para Linux... 3 1.1.2

Más detalles

Luis Caballero Cruz. Ingeniería Técnica Informática de Sistemas. Universidad de Sevilla

Luis Caballero Cruz. Ingeniería Técnica Informática de Sistemas. Universidad de Sevilla Luis Caballero Cruz Ingeniería Técnica Informática de Sistemas Universidad de Sevilla 5.1- RED LOCAL PARA PANDORA FMS: En este capítulo estudiaremos el aspecto de la instalación y requisitos de nuestra

Más detalles

Curso de Administración de Servidores GNU/Linux

Curso de Administración de Servidores GNU/Linux Curso de Administración de Servidores GNU/Linux Centro de Formación Permanente Universidad de Sevilla Jorge Juan . Abril, 2014 Usted es libre de copiar, distribuir y comunicar públicamente

Más detalles

INSTITUTO TECNOLÓGICO DE LAS AMÉRICA ITLA

INSTITUTO TECNOLÓGICO DE LAS AMÉRICA ITLA INSTITUTO TECNOLÓGICO DE LAS AMÉRICA ITLA How to de como habilitar el servicio de SSH en slackware. Carlos Juan Shephard G 2013-610 Sistema Operativo III Instructor: José Doñe OpenSSH es una versión LIBRE

Más detalles

Índice de contenido. Página 1 de 14

Índice de contenido. Página 1 de 14 Índice de contenido CURSO DE PREPARACIÓN PARA EL EXAMEN DE LPI 101...3 CURSO DE PREPARACIÓN PARA EL EXAMEN DE LPI 102...5 CERTIFICACIÓN LINUX NIVEL JUNIOR LPCI (1)...7 CURSO DE PREPARACIÓN PARA EL EXAMEN

Más detalles

U.D.1. INSTALACIÓN DE SISTEMAS OPERATIVOS LIBRES E PROPIETARIOS

U.D.1. INSTALACIÓN DE SISTEMAS OPERATIVOS LIBRES E PROPIETARIOS U.D.1. INSTALACIÓN DE SISTEMAS OPERATIVOS LIBRES E PROPIETARIOS Objetivos Analizar la compatibilidad hardware del sistema informático. Reconocer los tipos de instalación: típica, personalizada... y las

Más detalles

Introducción. Objetivo. Implementar un detector de malware con software libre empleando el protocolo Netflow.

Introducción. Objetivo. Implementar un detector de malware con software libre empleando el protocolo Netflow. 1 Objetivo. Implementar un detector de malware con software libre empleando el protocolo Netflow. Descripción del problema. Generalmente las herramientas de seguridad como los antivirus, firewalls, IDS

Más detalles

Redes de área local Aplicaciones y Servicios Linux Servidores de impresión

Redes de área local Aplicaciones y Servicios Linux Servidores de impresión MINISTERIO DE EDUCACIÓN Y CIENCIA SECRETARÍA GENERAL DE EDUCACIÓN Y FORMACIÓN PROFESIONAL DIRECCIÓN GENERAL DE EDUCACIÓN, FORMACIÓN PROFESIONAL E INNOVACIÓN EDUCATIVA CENTRO NACIONAL DE INFORMACIÓN Y COMUNICACIÓN

Más detalles

Introducción a Windows 2000 Server

Introducción a Windows 2000 Server Introducción a Windows 2000 Server Contenido Descripción general 1 Administración de los recursos utilizando el servicio de Directorio Activo 2 Administración de una red 3 Mejora del soporte de red y comunicaciones

Más detalles

Experto en Servidores Linux: Apache

Experto en Servidores Linux: Apache Titulación certificada por EUROINNOVA BUSINESS SCHOOL Experto en Servidores Linux: Apache Experto en Servidores Linux: Apache Duración: 200 horas Precio: 180 * Modalidad: Online * Materiales didácticos,

Más detalles

Unidad 0. Preparación del material. Implantación y administración remota y centralizada de Sistemas Operativos. Manuel Morán Vaquero

Unidad 0. Preparación del material. Implantación y administración remota y centralizada de Sistemas Operativos. Manuel Morán Vaquero Unidad 0 Preparación del material Implantación y administración remota y centralizada de Sistemas Operativos Manuel Morán Vaquero mmv@edu.xunta.es http://www.immv.es Contenidos 1 Introducción 2 Máquina

Más detalles

PRACTICA DE REDES Punto de acceso Dlink

PRACTICA DE REDES Punto de acceso Dlink PRACTICA DE REDES Punto de acceso Dlink En esta práctica vamos a tratar varias funciones de conectividad de diferentes dispositivos inalámbricos, un punto de acceso (AP) y un pc con conexión inalámbrica.

Más detalles

Ing. Angélica Acosta. / Mayo, 2011. Linux Small Business Server

Ing. Angélica Acosta. / Mayo, 2011. Linux Small Business Server Linux Small Business Server ZENTYAL El Servidor Integral para PyMEs El decreto 3390 obliga al gobierno venezolano a utilizar software libre representando un cambio radical en la administración pública

Más detalles

Ayuda de Active System Console

Ayuda de Active System Console Ayuda de Active System Console Introducción... 1 Instalación... 2 Visualización de la información del sistema... 4 Umbrales de monitoreo del sistema... 5 Configuración de notificaciones por correo electrónico...

Más detalles

Administracion de red y servicios en GNU/Linux para tecnicos Codigo: ARSLT

Administracion de red y servicios en GNU/Linux para tecnicos Codigo: ARSLT Administracion de red y servicios en GNU/Linux para tecnicos Codigo: ARSLT Objetivo del curso Proporcionar al participante conocimientos técnicos necesarios para la utilización del sistema Operativo GNU/Linux,

Más detalles