Memoria del Proyecto —– Servidor Linux para conexiones seguras de una LAN a Internet —–

Jose Antonio Escart´ Vigo ın Junio de 2005

Introducci´n o
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 o administradores de sistemas “noveles”, como yo cuando comenc´ este proyecto. e En esta peque˜a introducci´n tambi´n se especifican los objetivos que se pretenden conseguir y para n o e entrar en materia se comenta, muy por encima, la historia de Linux.

Motivaci´n o
Me decid´ a realizar este proyecto por la inquetud personal que ten´ respecto al sistema operativo ı ıa Linux. Conozco a mucha gente que lo maneja y que me hablaba muy bien, por pereza y falta de tiempo, nunca me hab´ puesto a experimentar a fondo con ´l. Si bien es cierto que lo ten´ instalado (una versi´n ıa e ıa o Mandrake 9.0) lo utilizaba solamente para realizar las pr´cticas de la universidad y poca cosa m´s. a a Siempre me han atra´ los sistemas operativos, bastante m´s que la rama de programaci´n. Una ıdo a o 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. a o e Actualmente me encuentro cursando el PFC de la Ingenier´ t´cnica en Inform´tica de Sistemas y ıa e a tengo la intenci´n de solicitar plaza de admisi´n en la Ingenier´ superior de inform´tica, carrera a la que o o ıa a no pude acceder en primera instancia por restricciones legales, al acceder a la universidad por la v´ de ıa 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 o o 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 a a n de sistemas en entornos Windows, para dos institutos (IES Pir´mide y IES Sierra de Guara) de mi ciudad a 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 a sistemas. Si en vez de elegir uno de los proyectos propuestos desde la universidad, hubiera pensado proponer uno, sin duda habr´ elegido hacer un proyecto igual al que propuso el profesor Llu´ P´rez Vidal del ıa ıs e departamente LSI de la UPC. Me siento bastante afortunado de haber realizado un PFC que realmente me interesaba y motivaba.

vi

Servidor Linux para conexiones seguras de una LAN a Internet

Motivaci´n del proyecto o
Ante el problema de instalar un sistema operativo que controle los servicios de red y adem´s sea estable a se nos plantean principalmente dos alternativas, Linux o Windows. ¿Qu´ ventajas tiene Linux sobre Windows? e Es m´s seguro. a Ya que la gran mayor´ de los ataques de hackers son dirigidos a servidores Windows al igual que ıa los virus los cuales se enfocan principalmente a servidores con ´ste sistema operativo. La plataforma e Linux es m´s robusta lo cual hace m´s dif´ que alg´n intruso pueda violar la seguridad del sistema. a a ıcil u Es m´s r´pido. a a Al tener una plataforma m´s estable, se favorece la utilizaci´n de aplicaciones de todo tipo de a o aplicaciones. La eficiencia de su c´digo fuente hace que la velocidad de las aplicaciones Linux sean o superiores a las que corren sobre Windows. Es m´s econ´mico. a o Ya que requiere menor mantenimiento. Los servidores Windows son m´s costosos debido a que es a necesaria una frecuente atenci´n y monitoreo contra ataques de virus, hackers y errores de c´digo. o o El software Linux as´ como tambi´n un sin n´mero de aplicaciones, son de c´digo abierto y est´n ı e u o a protegidas por la licencia GPL1 , 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 o a parches de seguridad para aplicaciones mal diseadas. ¿Qu´ ventajas tiene Windows sobre Linux? e Es m´s f´cil. a a Al ser de mayor facilidad de uso Windows en este momento contin´a siendo el sistema operativo m´s u a 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 o m´s grande se ha logrado facilitar el desarrollo de aplicaciones y sistemas que corran sobre servidores a 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 a a se busca es seguridad, integridad de datos y eficiencia del sistema, por tanto nos decantar´mos por una e distribuci´n GNU/Linux. o El proyecto surge ante la necesidad de escoger entre las distribuciones Linux actuales, la m´s adecuada a 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´ u u ı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 o o GPL y puede ser distribuido de modo libre y revendido de nuevo obteniendo tambi´n beneficio. Es de una importancia e primordial la cl´usula de responsabilidad: los programadores no son responsables de cualquier da˜ o causado por su software. a n

Jose Antonio Escart´ Vigo, Junio 2005. ın

vii

Objetivos
Este documento est´ elaborado para describir la implementaci´n de un servidor GNU/Linux, as´ como a o ı 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 a servicios utilizados para compartir archivos, p´ginas web, correo y otros que veremos m´s adelante. a a La herramienta de configuraci´n Webmin, que se detalla en uno de los ultimos cap´ o ´ ıtulos es independiente de la distribuci´n GNU/Linux que utilicemos y nos permitir´ administrar de forma transparente o a diferentes distribuciones, con la ventaja que eso supone si alguna vez cambiamos de distribuci´n. o

Cuadro 1: Objetivos del proyecto
A Estudiar el entorno de composici´n de textos L TEX o

Analizar e instalar las distribuciones Linux m´s importantes a Estudiar la compilaci´n de kernels o Analizar y configurar los servicios para usuarios Linux y Windows Establecer sistemas de protecci´n o Realizar pruebas de seguridad del servidor Documentar el proyecto

Marco hist´rico o
Como se especifica en [BB00], Linux hizo su aparici´n en 1991 cuando el finland´s Linus Torvalds decio e di´ publicar en Internet su proyecto de carrera, animando a la comunidad internacional de programadores o a mejorarlo. Naci´ como una mejora de Minix, una versi´n de Unix para ordenadores PC basados en el o o procesador 8086 de Intel, Linux por su parte utilizaba el procesador 386SX de Intel. Posiblemente una de las explicaciones del ´xito de Linux es GNU1 que junto con la FSF2 (Free Software e Fundation), tratan de promover el desarrollo de programas cuyo c´digo sea p´blico y compartido. Una de o u las principales aportaciones GNU fue Linux, un sistema operativo de libre distribuci´n. o A partir de 1994 emperzaron a aparecer las primeras distribuciones de CD-ROM, junto con el c´digo o fuente del sistema operativo, se dispon´ de diversas utilidades y aplicaciones sin tener que descargarlas. ıa Ese a˜o aparecieron los primeros grupos locales de usuarios de Linux y la primera revista on-line especian lizada. Al a˜o siguiente se empez´ a trabajar en las primeras versiones de Linux para plataforma no Intel n o y los primeros desarrollos de instaladores parcialmente autom´ticos. A partir de 1996 Linux comienza a a difundirse de forma m´s general en Espa˜a, a˜o en el que se inicia el proyecto de documentaci´n de Linux a n n o 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 u han mostrado un creciente inter´s. e
GNU no es Unix. Definici´n recursiva que representa el humor inform´tico en su m´xima expresi´n o a a o Fundaci´n para el software libre. Es el principal contribuidor del Proyecto GNU, depende de donaciones privadas y o 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 o o a en comunicaciones privadas y el derecho a escribir software sin los impedimentos del monopolio.
2 FSF:
Jose Antonio Escart´ Vigo, Junio 2005. ın

1 GNU:

viii

Servidor Linux para conexiones seguras de una LAN a Internet

Requisitos m´ ınimos Linux
Probablemente la configuraci´n m´ o ı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´ incluir 4Mb de Ram si no vamos a o a ıa a utilizar el entorno gr´fico, 8Mb en caso contrario y un m´ a ınimo de 40MB de espacio en disco, aunque en las distribuciones actuales el espacio deber´ ser mayor de unos 300Mb. Cantidades rid´ ıa ıculas si las comparamos con los dispositivos disponibles actualmente, pero que permiten reutilizar materiales m´s a antiguos de los que se pueda disponer. Frente a estos requerimientos, se encuentran los sistemas Windows, con unos requerimientos1 desorbitados. Linux soporta cualquier CPU compatible con los procesadores x86 de Intel, pudi´ndose encontrar e 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 e a m´quinas basadas en PowerPC como por ejemplo los ordenadores Macintosh de Apple, as´ como ARM, a ı MIPS y algunos tipos de agendas electr´nicas, tel´fonos y consolas de juegos. o e

Notas Previas
Se van a tomar varias la siguiente notaci´n para el documento: o Cuando aparezcan frases que el usuario pueda introducir por teclado se har´ notar por el tipo de a letra mecanogr´fica, Verbatim a Al hacer referencia a un comando que deba de ser introducido por una cuenta con privilegios de root, ir´ precedido por el car´cter “#” a a 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 “$” a a Cuando se muestran c´digos el car´cter “#” al inicio de la frase especifica que esa frase concreta es o a un comentario dentro del c´digo. o

1 WindowsXP: Procesador 233Mhz, 64Mb Ram y 1.5 Gb de disco; Windows2003 Server: Procesador 550Mhz, 256Mb Ram y 1.5 Gb de disco

Jose Antonio Escart´ Vigo, Junio 2005. ın

´ Indice general
Introducci´n o
IV

I

Tareas previas

1
3 3 3 9 9 9 9 10 10 14 14 14 14 15 16 16 17

1. Planificaci´n o 1.1. Fases del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Esquema temporal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Selecci´n de Herramientas o 2.1. Selecci´n de Hardware . . . o 2.1.1. Servidor . . . . . . . 2.1.2. Clientes . . . . . . . 2.2. Selecci´n de la distribuci´n o o 2.2.1. Distribuciones Linux 2.2.2. Pruebas . . . . . . . 2.2.3. Distribuci´n elegida o 2.3. Selecci´n del Software . . . o 2.3.1. Planner . . . . . . . A 2.3.2. L TEX . . . . . . . . 2.3.3. Kile . . . . . . . . . 2.3.4. Prosper . . . . . . . 2.3.5. Programas gr´ficos . a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

II

Instalaci´n base o
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19
21 21 21 21 22 22 22 23 24 25 25 26 27 27 27

3. Instalaci´n de la distribuci´n o o 3.1. Proyecto Debian . . . . . . . . . 3.1.1. Unstable . . . . . . . . . . 3.1.2. Testing . . . . . . . . . . 3.1.3. Stable . . . . . . . . . . . 3.1.4. Recomendaciones . . . . . 3.2. Debian Sarge . . . . . . . . . . . 3.3. Debian Woody . . . . . . . . . . 3.4. Actualizaci´n de Woody a Sarge o

4. Primeros pasos 4.1. Particionar el disco . . . . . . . . . . . . . 4.2. Gestores de arranque . . . . . . . . . . . . 4.3. Usuarios . . . . . . . . . . . . . . . . . . . 4.3.1. A˜adir nuevos usuarios al sistemas n 4.3.2. A˜adir grupos al sistema . . . . . n

x

Servidor Linux para conexiones seguras de una LAN a Internet 4.3.3. Bases de datos de usuarios . . . . . . . . . . . . . . . . 4.4. Permisos de archivos . . . . . . . . . . . . . . . . . . . . . . . . 4.4.1. Tipos de archivo . . . . . . . . . . . . . . . . . . . . . . 4.4.2. Modificar los permisos . . . . . . . . . . . . . . . . . . . 4.4.3. Permisos especiales: SUID, SGID y bit de persistencia . 4.4.4. Cambiar un archivo de propietario o grupo . . . . . . . 4.5. Instalaci´n de aplicaciones . . . . . . . . . . . . . . . . . . . . . o 4.5.1. Compilaci´n de paquetes desde archivos fuente . . . . . o 4.5.2. Dpkg: Instalador de paquetes precompilados . . . . . . . 4.5.3. Apt: Gestor de paquetes Debian . . . . . . . . . . . . . 4.5.4. Alien: Convertir paquetes .rpm a .deb (formato Debian) 4.5.5. Encontrar paquetes y sus dependencias . . . . . . . . . 4.5.6. Problemas al instalar paquetes . . . . . . . . . . . . . . 4.6. Shells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.1. Tipos de shell . . . . . . . . . . . . . . . . . . . . . . . . 4.6.2. Caracter´ ısticas de la shell Bash . . . . . . . . . . . . . . 4.6.3. Ejecuci´n de procesos en la shell Bash . . . . . . . . . . o 4.6.4. Variables de entorno . . . . . . . . . . . . . . . . . . . . 4.6.5. Configuraci´n del entorno . . . . . . . . . . . . . . . . . o 4.6.6. Redireccionamientos . . . . . . . . . . . . . . . . . . . . 4.7. Consolas virtuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 31 31 31 32 33 33 33 36 36 38 38 39 39 40 40 41 41 42 43 44 45 45 45 45 46 46 46 47 47 48 48 49 49 51 51 51 55 56 57 57 58 58 59 59 61 63 63 64 65 66 67

5. Kernel 5.1. ¿Por qu´ compilar? . . . . . . . . . . . . . . . . . e 5.2. Acerca de los m´dulos . . . . . . . . . . . . . . . o 5.3. Kernel-image . . . . . . . . . . . . . . . . . . . . 5.4. Kernel-source . . . . . . . . . . . . . . . . . . . . 5.4.1. Instalar un kernel-source . . . . . . . . . . 5.4.2. Crear un paquete .deb . . . . . . . . . . . 5.5. Compilar Kernel . . . . . . . . . . . . . . . . . . 5.5.1. Paquetes necesarios . . . . . . . . . . . . 5.5.2. Comprobar el hardware disponible . . . . 5.5.3. M´todo de compilaci´n . . . . . . . . . . e o 5.5.4. Parchear el kernel . . . . . . . . . . . . . 5.5.5. Consejos para la configuraci´n del kernel . o 6. Interfaz gr´fico a 6.1. X-Window . . . . . . . . . . . . . . 6.1.1. Configuraci´n X-Windows . o 6.1.2. Arrancar X-Windows . . . 6.2. Gestores de ventanas . . . . . . . . 6.3. Entornos de escritorio . . . . . . . 6.3.1. Kde . . . . . . . . . . . . . 6.3.2. Gnome . . . . . . . . . . . 6.3.3. Otros entornos de escritorio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

7. Infraestructura de redes 7.1. Arquitectura de redes (Modelo OSI) . . . . . . . . . . . . . . . . 7.2. Direcciones IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.1. Datagramas . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.2. Encaminamiento IP (router y gateway) . . . . . . . . . . 7.2.3. M´scaras de red y notaci´n de barra inclinada . . . . . . a o 7.2.4. Subneting (CIDR) . . . . . . . . . . . . . . . . . . . . . . 7.2.5. Enmascaramiento IP (NAT, Network Adress Translation) 7.3. Resoluci´n de direcciones . . . . . . . . . . . . . . . . . . . . . . o
Jose Antonio Escart´ Vigo, Junio 2005. ın

´ Indice general 7.3.1. ARP (Adress Resolution Protocol) . . . . . . . 7.3.2. RARP (Reverse Address Resolution Protocol) . Protocolos de red, IP . . . . . . . . . . . . . . . . . . . 7.4.1. ICMP (Internet Control Message Protocol) . . 7.4.2. OSPF (Open Shortest Path First) . . . . . . . 7.4.3. Protocolo BGP (Border Gateway Protocol) . . 7.4.4. IGMP (Internet Group Management Protocol) Protocolos de transporte . . . . . . . . . . . . . . . . . 7.5.1. UDP . . . . . . . . . . . . . . . . . . . . . . . . 7.5.2. TCP . . . . . . . . . . . . . . . . . . . . . . . . Protocolos de aplicaci´n . . . . . . . . . . . . . . . . . o 7.6.1. NFS (Network File System) . . . . . . . . . . . 7.6.2. SNMP (Simple network management protocol) 7.6.3. DNS (Domain Name Server) . . . . . . . . . . 7.6.4. SMTP (Simple Mail Transfer Protocol) . . . . 7.6.5. TELNET (Remote login) . . . . . . . . . . . . 7.6.6. FTP (File Transfer Protocol) . . . . . . . . . . 7.6.7. HTTP (Hyper Text Transport Protocol) . . . . Protocolo TCP/IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

xi 68 68 69 69 69 70 70 70 71 72 74 74 74 74 74 75 75 75 75 79 79 79 81 83 83 84 84 84 85 85 85 86 86 87 87 88 88 89 89 90

7.4.

7.5.

7.6.

7.7.

8. Configuraci´n de dispositivos de red o 8.1. Etherconf: Configurador gr´fico de red . . . . . . a 8.2. Ifconfig: Configurador de red . . . . . . . . . . . 8.3. Route: Tablas de redireccionamiento . . . . . . . 8.4. Netstat: Estado de las conexiones . . . . . . . . . 8.5. Configuraci´n de interfaces usando DHCP . . . . o 8.6. Archivo /etc/network/interfaces . . . . . . . . . 8.6.1. Direcci´nes IP est´ticas . . . . . . . . . . o a 8.6.2. Direcciones IP din´micas . . . . . . . . . a 8.6.3. Interfaz Wifi . . . . . . . . . . . . . . . . 8.6.4. Interfaz PPPoE . . . . . . . . . . . . . . . 8.6.5. Puertas de enlace . . . . . . . . . . . . . . 8.6.6. Interfaces virtuales . . . . . . . . . . . . . 8.7. Reconfiguraci´n de la red . . . . . . . . . . . . . o 8.7.1. Configuraci´n de red durante el arranque o 8.7.2. Hotplug . . . . . . . . . . . . . . . . . . . 8.7.3. Ifplugd . . . . . . . . . . . . . . . . . . . 8.8. Resolvconf: Resoluci´n de nombres . . . . . . . . o 8.9. Archivos de configuraci´n de Hosts . . . . . . . . o 8.10. Iwconfig: Configuraci´n wireless . . . . . . . . . . o 8.11. Resoluci´n de problemas . . . . . . . . . . . . . . o

III

Instalaci´n de Servicios o
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

91
93 93 93 94 94 94 95 98 99 101

9. Servicios de red 9.1. Servidor DHCP . . . . . . . . . . . . . . . . . . 9.1.1. Asignaci´n de direcciones IP . . . . . . o 9.1.2. Par´metros configurables . . . . . . . . a 9.1.3. Implementaciones . . . . . . . . . . . . 9.1.4. Anatom´ del protocolo . . . . . . . . . ıa 9.1.5. Configuraci´n de un servidor DHCP . . o 9.1.6. Configuraci´n de un cliente DHCP . . . o 9.1.7. Configuraci´n gr´fica de DHCP, interfaz o a 9.2. BIND: Servidor de nombres DNS . . . . . . . .

Jose Antonio Escart´ Vigo, Junio 2005. ın

xii

Servidor Linux para conexiones seguras de una LAN a Internet 9.2.1. ¿Para qu´ necesitamos un DNS? . . . . . . . . . . . . e 9.2.2. Servicios que activa un DNS . . . . . . . . . . . . . . . 9.2.3. Configuraci´n del servidor . . . . . . . . . . . . . . . . o 9.2.4. Traducci´n de nombres a direcciones IP . . . . . . . . o 9.2.5. Configuraci´n gr´fica de DNS BIND, interfaz Webmin o a 9.2.6. Seguridad en DNS . . . . . . . . . . . . . . . . . . . . NIS: Servicio de informaci´n de red . . . . . . . . . . . . . . . o 9.3.1. Funcionamiento b´sico . . . . . . . . . . . . . . . . . . a 9.3.2. Servidores NIS . . . . . . . . . . . . . . . . . . . . . . 9.3.3. Configuraci´n del servidor NIS maestro . . . . . . . . o 9.3.4. Cliente NIS . . . . . . . . . . . . . . . . . . . . . . . . 9.3.5. Herramientas b´sicas . . . . . . . . . . . . . . . . . . . a 9.3.6. Problemas de seguridad . . . . . . . . . . . . . . . . . NFS: Sistema de archivos Linux en red . . . . . . . . . . . . . 9.4.1. Cliente NFS . . . . . . . . . . . . . . . . . . . . . . . . 9.4.2. Montaje autom´tico de particiones NFS . . . . . . . . a 9.4.3. Propiedades de las particiones montadas . . . . . . . . 9.4.4. Servidor de NFS . . . . . . . . . . . . . . . . . . . . . 9.4.5. Configuraci´n gr´fica de NFS, interfaz Webmin . . . . o a Samba: Servicio de conexiones para sistemas Microsoft . . . . 9.5.1. Compartici´n de recursos . . . . . . . . . . . . . . . . o 9.5.2. ¿Qu´ es Samba? . . . . . . . . . . . . . . . . . . . . . e 9.5.3. Configuraci´n gr´fica de Samba, interfaz SWAT . . . . o a 9.5.4. Funcionamiento de CIFS . . . . . . . . . . . . . . . . 9.5.5. Par´metros globales . . . . . . . . . . . . . . . . . . . a 9.5.6. Impresoras . . . . . . . . . . . . . . . . . . . . . . . . 9.5.7. Compartici´n de directorios . . . . . . . . . . . . . . . o 9.5.8. Limitar acceso de los usuarios . . . . . . . . . . . . . . 9.5.9. Integraci´n de Samba en un dominio NT . . . . . . . o 9.5.10. Configuraci´n de Samba como controlador de dominio o 9.5.11. Cliente Samba . . . . . . . . . . . . . . . . . . . . . . 9.5.12. Configuraci´n gr´fica de Samba, interfaz Webmin . . . o a ProFTPD: Servidor FTP . . . . . . . . . . . . . . . . . . . . 9.6.1. Servidor ProFTP . . . . . . . . . . . . . . . . . . . . . 9.6.2. Configuraci´n gr´fica de ProFTP, interfaz Webmin . . o a 9.6.3. Clientes FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 102 102 103 103 108 109 109 109 110 113 115 116 117 117 118 118 119 120 121 121 121 123 124 125 126 126 127 127 128 128 129 131 131 132 132 133 133 133 134 134 136 136 139 140 140 140 141 141 150 152 156 156

9.3.

9.4.

9.5.

9.6.

10.Servicios de usuario 10.1. Cuotas de usuario . . . . . . . . . . . . . . . . . . . . . 10.1.1. Arrancar el sistema de cuotas . . . . . . . . . . . 10.1.2. Asignar cuotas a los usuarios . . . . . . . . . . . 10.1.3. Configuraci´n gr´fica de Quote, interfaz Webmin o a 10.2. Cups: Servidor de impresi´n . . . . . . . . . . . . . . . . o 10.2.1. Servidor Cups . . . . . . . . . . . . . . . . . . . . 10.2.2. Servidor Cups para Samba . . . . . . . . . . . . 10.2.3. Clientes Linux . . . . . . . . . . . . . . . . . . . 10.2.4. Clientes Microsoft . . . . . . . . . . . . . . . . . 10.2.5. Solucionar problemas . . . . . . . . . . . . . . . 10.3. Servidor Web . . . . . . . . . . . . . . . . . . . . . . . . 10.3.1. Servidor Apache . . . . . . . . . . . . . . . . . . 10.3.2. Apache-SSL: Conexiones seguras . . . . . . . . . 10.3.3. Creaci´n de un servidor web seguro . . . . . . . o 10.3.4. Apache 2.x . . . . . . . . . . . . . . . . . . . . . 10.3.5. Ataques al servidor Web . . . . . . . . . . . . . .
Jose Antonio Escart´ Vigo, Junio 2005. ın

´ Indice general 10.4. Servidor de correo . . . . . . . . . . . . . . . . . . . . . . . . . 10.4.1. Exim: Correo corporativo . . . . . . . . . . . . . . . . . 10.4.2. Fetchmail: Correo externo . . . . . . . . . . . . . . . . . 10.4.3. Horde: Webmail . . . . . . . . . . . . . . . . . . . . . . 10.4.4. Protocolo IMAP . . . . . . . . . . . . . . . . . . . . . . 10.4.5. Filtrado de correo, eliminar virus y Spam con Procmail 10.4.6. ClamAV: Antivirus para correo . . . . . . . . . . . . . . 10.4.7. SpamAssassin: Filtro basado en reglas . . . . . . . . . . 10.4.8. Bogofilter: Filtro bayesiano . . . . . . . . . . . . . . . . 10.5. Jabber: Mensajer´ instant´nea para corporaciones . . . . . . . ıa a 10.5.1. Servidor Jabber . . . . . . . . . . . . . . . . . . . . . . . 10.5.2. Configuraci´n gr´fica de Jabber, interfaz Webmin . . . . o a 10.5.3. Clientes Jabber . . . . . . . . . . . . . . . . . . . . . . . 11.Comunicaciones seguras 11.1. Shell seguro: OpenSSH . . . . . . . . . . 11.1.1. Cliente OpenSSH . . . . . . . . . 11.1.2. Servidor OpenSSH . . . . . . . . 11.2. Criptograf´ y cifrado . . . . . . . . . . ıa 11.2.1. Tipos de cifrado . . . . . . . . . 11.2.2. Est´ndares generales . . . . . . . a 11.2.3. Aplicaciones de la criptograf´ . ıa 11.2.4. Protocolos de cifrado . . . . . . . 11.2.5. OpenPGP: Aplicaci´n de cifrado o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

xiii 157 157 159 161 162 163 165 167 169 172 173 174 174 177 177 177 178 181 181 182 183 184 185 191 191 191 192 193 194 195 196 196 196 197 204 206 206 207 207 207 208 208 210 211 213 213 213 214 214 214 215 217

12.Herramientas de seguridad 12.1. Herramientas b´sicas . . . . . . . . . . . . . . . . . . . . . a 12.1.1. Ping . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1.2. Traceroute . . . . . . . . . . . . . . . . . . . . . . 12.1.3. Whois . . . . . . . . . . . . . . . . . . . . . . . . . 12.1.4. Dig . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1.5. Finger . . . . . . . . . . . . . . . . . . . . . . . . . 12.2. Firewall o cortafuegos . . . . . . . . . . . . . . . . . . . . 12.2.1. Pol´ ıticas de seguridad . . . . . . . . . . . . . . . . 12.2.2. Modos de configuraci´n . . . . . . . . . . . . . . . o 12.2.3. IPTables . . . . . . . . . . . . . . . . . . . . . . . . 12.3. Squid: Proxy transparente . . . . . . . . . . . . . . . . . . 12.4. Bastille Linux: Herramienta de seguridad . . . . . . . . . 12.4.1. Ejecuci´n . . . . . . . . . . . . . . . . . . . . . . . o 12.4.2. Modos de funcionamiento . . . . . . . . . . . . . . 12.5. Copias de seguridad . . . . . . . . . . . . . . . . . . . . . 12.5.1. Dispositivos de cinta . . . . . . . . . . . . . . . . . 12.5.2. Mt . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5.3. Dump y Restore . . . . . . . . . . . . . . . . . . . 12.5.4. Configuraci´n gr´fica de backups, interfaz Webmin o a 12.5.5. K3B: Grabaci´n de CDs y DVDs . . . . . . . . . . o 13.Sistemas de detecci´n de intrusiones o 13.1. Tipos de IDS . . . . . . . . . . . . . . . . . . . . . . 13.1.1. NIDS (Network Intrusion Detection System) 13.1.2. IDS (Detecci´n de actividades an´malas) . . o o 13.1.3. IPS (Intrusion Prevention System) . . . . . . 13.2. Ubicaci´n del NIDS . . . . . . . . . . . . . . . . . . o 13.3. El problema de los falsos positivos de NIDS . . . . . 13.4. Obtener lo m´ximo del IDS . . . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . . . .

Jose Antonio Escart´ Vigo, Junio 2005. ın

xiv

Servidor Linux para conexiones seguras de una LAN a Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 217 217 218 218 218 219 221 222 223 226 226 228 229 231 235 239 241 245 247 247 248 250 251 251 252 253 254 255 255 257 257 259 260 262 262 262 266 266 267 267 269 270 270 271 272 273 273 275

13.4.1. Configuraci´n apropiada del sistema . . . . . . . o 13.4.2. Ajuste del IDS . . . . . . . . . . . . . . . . . . . 13.4.3. Herramientas de an´lisis IDS . . . . . . . . . . . a 13.5. IDS Snort (NIDS) . . . . . . . . . . . . . . . . . . . . . 13.5.1. Caracter´ ısticas b´sicas . . . . . . . . . . . . . . . a 13.5.2. Instalaci´n . . . . . . . . . . . . . . . . . . . . . o 13.5.3. Modos de ejecuci´n . . . . . . . . . . . . . . . . . o 13.5.4. Modos de alerta . . . . . . . . . . . . . . . . . . 13.5.5. Optimizar la configuraci´n . . . . . . . . . . . . o 13.5.6. Clases de reglas . . . . . . . . . . . . . . . . . . . 13.5.7. Ejecutar como servicio del sistema . . . . . . . . 13.5.8. Configuraci´n gr´fica de Snort, interfaz Webmin o a 13.5.9. Personalizar reglas . . . . . . . . . . . . . . . . . 13.6. Detecci´n de intrusiones en el host . . . . . . . . . . . . o 13.7. Integridad de archivos: IDS Tripwire . . . . . . . . . . . 13.8. ACIDlab: Analizar alertas IDS . . . . . . . . . . . . . . 13.9. Logcheck: Analizar logs . . . . . . . . . . . . . . . . . . 13.10. ortSentry: Detectar escaneos de puertos . . . . . . . . P 13.11. etectores de sniffers . . . . . . . . . . . . . . . . . . . . D 13.11.1.Neped . . . . . . . . . . . . . . . . . . . . . . . . 13.11.2.Sentinel . . . . . . . . . . . . . . . . . . . . . . . 13.12. hkrootkit: Detector de rootkits . . . . . . . . . . . . . C 13.13. oneyPots: Entretener a los atacantes . . . . . . . . . . H 13.13.1.¿C´mo funcionan? . . . . . . . . . . . . . . . . . o 13.13.2.Ventajas y desventajas . . . . . . . . . . . . . . . 13.13.3.Utilidades de honeypots . . . . . . . . . . . . . . 13.13.4.Tipos de honeypots . . . . . . . . . . . . . . . . 13.13.5.Otras caracter´ ısticas . . . . . . . . . . . . . . . . 13.13.6.Honeynets: alta interacci´n . . . . . . . . . . . . o 13.13.7.Honeyd: baja interacci´n . . . . . . . . . . . . . o

14.Redes inal´mbricas a 14.1. Est´ndar 802.11 (Wifi) . . . . . . . . . . . . . . . . . . . . a 14.2. Peligros de las LAN inal´mbricas . . . . . . . . . . . . . . a 14.3. El fen´meno del “Wardriving” . . . . . . . . . . . . . . . . o 14.4. Seguridad en redes inal´mbricas . . . . . . . . . . . . . . . a 14.4.1. Clave WEP (Wired Equivalente Privacy) . . . . . 14.4.2. Clave WPA (Wifi Protected Access) . . . . . . . . 14.4.3. Clave WPA2 (Est´ndar 802.11i) . . . . . . . . . . a 14.4.4. Medidas preventivas . . . . . . . . . . . . . . . . . 14.5. Servidor Radius: FreeRadius . . . . . . . . . . . . . . . . . 14.5.1. Configurar FreeRadius con EAP-TLS . . . . . . . 14.5.2. Generar los certificados . . . . . . . . . . . . . . . 14.5.3. Comprobar el funcionamiento de FreeRadius . . . 14.5.4. Configurar AP (Router 3Com) . . . . . . . . . . . 14.5.5. Clientes Linux: WPA-Supplicant . . . . . . . . . . 14.5.6. Clientes Windows: WindowsXP + SP2 . . . . . . . 14.6. Herramientas de seguridad . . . . . . . . . . . . . . . . . . 14.6.1. Descubrir redes ilegales e intrusos: Kismet Wireless 14.6.2. Desencriptar claves inal´mbricas WEP: Airsnort . a 15.Servicio de administraci´n por o 15.1. Usuarios de Webmin . . . . . 15.2. Secciones Webmin . . . . . . 15.3. M´dulos de Webmin . . . . . o

Web: WebMin 279 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

Jose Antonio Escart´ Vigo, Junio 2005. ın

´ Indice general 16.Servicios de monitorizaci´n del sistema o 16.1. Monitor del sistema: Top . . . . . . . . . . . . . . . . 16.2. Rendimiento del sistema . . . . . . . . . . . . . . . . . 16.2.1. CPU, dispositivos y particiones de E/S: iostat . 16.2.2. Memoria: free . . . . . . . . . . . . . . . . . . . 16.2.3. Memoria virtual: vmstat . . . . . . . . . . . . . 16.2.4. Disco: df, du . . . . . . . . . . . . . . . . . . . 16.2.5. Usuarios y sus procesos: w . . . . . . . . . . . . 16.3. Gestionar procesos . . . . . . . . . . . . . . . . . . . . 16.3.1. Visualizar procesos: ps . . . . . . . . . . . . . . 16.3.2. Enviar signals a procesos: kill . . . . . . . . . . 16.3.3. Modificar prioridades: nice . . . . . . . . . . . 16.4. Terminal de root con prioridad m´xima . . . . . . . . a 16.5. Programaci´n de tareas . . . . . . . . . . . . . . . . . o 16.5.1. At . . . . . . . . . . . . . . . . . . . . . . . . . 16.5.2. Cron . . . . . . . . . . . . . . . . . . . . . . . . 16.5.3. Tareas peri´dicas . . . . . . . . . . . . . . . . . o 16.5.4. Anacron . . . . . . . . . . . . . . . . . . . . . .

xv 287 287 288 288 289 289 290 290 290 291 292 293 293 293 294 294 296 296

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

IV

Valoraci´n final o
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

297
299 299 299 300 302 303 303 305 305 305 306 307 307 308 309 309 310 310 310 311

17.Pruebas del sistema 17.1. Nessus: Esc´ner de vulnerabilidades . . . . . . . . . . . a 17.1.1. Configurar el programa . . . . . . . . . . . . . . 17.1.2. Ejecuci´n de Nessus . . . . . . . . . . . . . . . . o 17.1.3. Otros interfaces de configuraci´n . . . . . . . . . o 17.2. Nmap: Esc´ner de red y puertos . . . . . . . . . . . . . a 17.2.1. Caracter´ ısticas b´sicas . . . . . . . . . . . . . . . a 17.2.2. Tipos de escaneado . . . . . . . . . . . . . . . . . 17.2.3. Opciones de descubrimiento . . . . . . . . . . . . 17.2.4. Opciones de ajuste de frecuencia de Nmap . . . . 17.2.5. Otras opciones de Nmap . . . . . . . . . . . . . . 17.2.6. Salida de Nmap . . . . . . . . . . . . . . . . . . . 17.2.7. Configuraci´n gr´fica de Nmap, interfaz Nmapfe o a 17.3. Pruebas de carga . . . . . . . . . . . . . . . . . . . . . . 18.Estudio Econ´mico o 18.1. Recursos . . . . . . . . . . 18.2. Costes . . . . . . . . . . . 18.3. Resumen econ´mico . . . o 18.4. Modificaciones a los costes 19.Conclusiones . . . . . . . . . . . . . . . . . . . . . econ´micos o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

V

Ap´ndices e

315
317 319 321 325

A. Comandos b´sicos a B. Debian en castellano C. Archivos de configuraci´n o D. ¿Por qu´ Debian no tiene rc.local ? e
Jose Antonio Escart´ Vigo, Junio 2005. ın

xvi E. Puertos por defecto

Servidor Linux para conexiones seguras de una LAN a Internet 327 329 331 333 335 339 343

F. Manual del editor Vim (Vi mejorado) G. Gu´ r´pida de IPTables ıa a Debian Sarge, nueva versi´n estable o Licencia CC - Reconocimiento-CompartirIgual P´ginas Web a Bibliograf´ ıa

Jose Antonio Escart´ Vigo, Junio 2005. ın

´ Indice de figuras
1.1. Planificaci´n . . o 1.2. . . . . . . . . . . 1.3. . . . . . . . . . . 1.4. . . . . . . . . . . 2.1. 2.2. 2.3. 2.4. 7.1. 7.2. 7.3. 7.4. 7.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 5 6 7 15 15 16 17 61 62 64 72 72 99 100 100 104 105 106 106 107 107 110 120 123 130 132 135 137 139 142 144 145 147 148 148 150 159 161

Planner, distribuci´n de recursos o 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9.1. DHCP, m´dulo Webmin . . . o 9.2. . . . . . . . . . . . . . . . . . 9.3. . . . . . . . . . . . . . . . . . 9.4. DNS BIND, m´dulo Webmin o 9.5. . . . . . . . . . . . . . . . . . 9.6. . . . . . . . . . . . . . . . . . 9.7. . . . . . . . . . . . . . . . . . 9.8. . . . . . . . . . . . . . . . . . 9.9. . . . . . . . . . . . . . . . . . 9.10. NIS, m´dulo Webmin . . . . o 9.11. NFS, m´dulo Webmin . . . . o 9.12. Samba, interfaz gr´fica SWAT a 9.13. Samba, m´dulo Webmin . . . o 9.14. ProFTPD, m´dulo Webmin . o

10.1. Quota, m´dulo Webmin . . . . . . . . o 10.2. Cups, interfaz gr´fica de configuraci´n a o 10.3. Cups, impresora HP815 . . . . . . . . 10.4. Apache, m´dulo Webmin . . . . . . . o 10.5. Apache, parametros de configuraci´n . o 10.6. Apache, m´dulo HtAccess Webmin . . o 10.7. Webalizer, m´dulo Webmin . . . . . . o 10.8. Apache, servidores virtuales . . . . . . 10.9. Apache, compartici´n de carpetas . . . o 10.10. pache, m´dulos instalados . . . . . . A o 10.11. xim, monitor con la interfaz Webmin E 10.12. etchmail, m´dulo Webmin . . . . . . F o

xviii

Servidor Linux para conexiones seguras de una LAN a Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 165 168 169 175 176 176 180 211 211 227 238 242 246 261 263 263 264 268 270 277 280 285 286 301 302 326 338

10.13. rocmail, m´dulo Webmin . . . . . . . . . P o 10.14. rocmail, crear acciones de forma gr´fica P a 10.15. pamAssassin, m´dulo Webmin . . . . . . S o 10.16. pamAssassin, opciones de configuraci´n . S o 10.17. abber, m´dulo Webmin . . . . . . . . . . J o 10.18. opete, cliente de mensajer´ instant´nea K ıa a 10.19. aim, cliente de mensajer´ instant´nea . G ıa a

11.1. SSHD, m´dulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 12.1. Backups, m´dulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 12.2. K3B, grabaci´n de CDs y DVDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 13.1. Snort, m´dulo Webmin . . . . . . . . . o 13.2. Acidlab, detalle de una alerta de Snort 13.3. Logcheck, m´dulo Webmin . . . . . . o 13.4. PortSentry, m´dulo Webmin . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14.1. S´ ımbolos urbanos de redes wifi . . . . . . 14.2. WEP-WPA, comparativa . . . . . . . . . 14.3. WPA/EAP, funcionamiento . . . . . . . . 14.4. WPA, autenticaci´n servidor Radius . . . o 14.5. Servidor Radius, sistema de autenticaci´n o 14.6. Servidor Radius, desv´ en el router . . . ıo 14.7. AirSnort, descifrado de claves WEP . . .

15.1. Webmin, pantalla de configuraci´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 15.2. Webmin, pantallas de la interfaz Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.1. Nessus, configuraci´n de la aplicaci´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o o 17.2. Nessus, vulnerabilidades del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D.1. Runlevels, m´dulo Webmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o G.1. Licencia Reconocimiento-CompartirIgual . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Jose Antonio Escart´ Vigo, Junio 2005. ın

´ Indice de cuadros
1. Objetivos del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii 10 26 28 28 29 29 30 30 31 32 32 35 36 36 37 42 47 48 49 54 59 62 65 76 77 83 112 143 178 192 195 199 200 202 2.1. Distribuciones Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1. Lilo, archivo de configuraci´n . . . . o 4.2. /etc/passwd, ejemplo . . . . . . . . . 4.3. /etc/passwd, descripci´n de campos o 4.4. /etc/shadow, ejemplo . . . . . . . . 4.5. /etc/shadow, descripci´n de campos o 4.6. /etc/group, ejemplo . . . . . . . . . 4.7. /etc/group, descripci´n de campos . o 4.8. Tipos de archivos . . . . . . . . . . . 4.9. Chmod, Opciones b´sicas . . . . . . a 4.10. Chmod, opciones especiales . . . . . 4.11. Makefile, ejemplo . . . . . . . . . . . 4.12. Dpkg, opciones . . . . . . . . . . . . 4.13. /etc/apt/sources.list, ejemplo . . . . 4.14. Apt, opciones . . . . . . . . . . . . . 4.15. Variables habituales del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.1. Kernel, paquetes b´sicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 5.2. Kernel 2.6, paquetes necesarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3. M´todo de compilaci´n del kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e o 6.1. /etc/X11/XF86Config-4, ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1. 7.2. 7.3. 7.4. 7.5. Modelo de referencia OSI . . . . . . Tipos de redes, n.o de hosts por red Notaci´n de barra inclinada en IPs . o TCP/IP, ejemplo . . . . . . . . . . . TCP/IP, esquema de transmisi´n . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8.1. Netstat, opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.1. /var/yp/Makefile, ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1. Apache, archivos de configuraci´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 11.1. SSH cliente, opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1. Ping, opciones . . . . . . . . . . . 12.2. Dig, opciones . . . . . . . . . . . . 12.3. IPTables, especificaciones de reglas 12.4. IPTables, comandos . . . . . . . . 12.5. IPTables, ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

xx 12.6. /etc/squid/squid.conf, ejemplo 12.7. Mt, opciones . . . . . . . . . . 12.8. Dump, opciones . . . . . . . . . 12.9. Restore, opciones . . . . . . . .

Servidor Linux para conexiones seguras de una LAN a Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 208 209 210 221 224 225 226 230 231 232 236 244 258 274 274 275 284 291 305 305 306 306 307 309 310

13.1. Snort, opciones de alerta . . . . . . . . . . . 13.2. Snort, archivos de reglas . . . . . . . . . . . 13.3. . . . . . . . . . . . . . . . . . . . . . . . . . 13.4. . . . . . . . . . . . . . . . . . . . . . . . . . 13.5. Snort, opciones de personalizaci´n . . . . . o 13.6. Tripwire, m´scaras de propiedad . . . . . . a 13.7. Tripwire, m´scaras predefinidas en plantillas a 13.8. Acidlab, variables de configuraci´n . . . . . o 13.9. PortSentry, opciones . . . . . . . . . . . . . 14.1. Est´ndares 802.11 inal´mbricos . . a a 14.2. Kismet, configuraci´n . . . . . . . o 14.3. Kismet, configuraci´n de la interfaz o 14.4. Kismet, teclas de la interfaz gr´fica a . . . . . . . . . . gr´fica a . . . . .

15.1. Webmin, m´dulos disponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 16.1. Ps, opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.1. Nmap, 17.2. Nmap, 17.3. Nmap, 17.4. Nmap, 17.5. Nmap, tipos de escaneo . . . . . . . . . opciones de descubrimiento . . . configuraciones de frecuencia . . otras opciones . . . . . . . . . . codificaci´n de color de la salida o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18.1. Recursos del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18.2. Costes del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Jose Antonio Escart´ Vigo, Junio 2005. ın

Parte I

Tareas previas

Cap´ ıtulo 1

Planificaci´n o
El n´mero de cr´ditos asignados al proyecto es de 22,5 y decid´ que cada cr´dito me supondr´ una u e ı e ıa carga de 20 horas, por lo tanto, la planificaci´n ha sido realizada para un total de 450 horas. o

1.1.

Fases del proyecto

Planificaci´n temporal: 20 horas. Mediante la herramienta de gesti´n de proyectos Planner, se realiza o o una divisi´n temporal de las actividades a realizar. o 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. o o o o Configuraci´n de los servicios: 120 horas. Bas´ndose en los servicios t´ o a ıpicos que implementan los servidores de red, se instalan una serie de servicios est´ndar para clientes de sistemas operativos a Linux y Windows. Pruebas del sistema y conclusiones: 30 horas. Apoy´ndose en una serie de pruebas de carga se detera mina 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.
A Aprendizaje del entorno L TEX: 20 horas. A trav´s de varios libros, que detallo en la bibliograf´ se e ıa, A aprende a utilizar el entorno de composici´n de textos L TEX para elaborar la documentaci´n del o o proyecto.

Documentaci´n del proyecto: 140 horas. A lo largo del desarrollo de las fases anteriores se realizan o una serie de informes parciales que son la base de la memoria del proyecto.

1.2.

Esquema temporal

Pese a la planificaci´n inicial, en los siguientes esquemas se detallan la cronolog´ real que se sigui´ en o ıa o la elaboraci´n del proyecto. o

1 PFC:

Proyecto fin de carrera

4

Servidor Linux para conexiones seguras de una LAN a Internet

Figura 1.1: Planificaci´n (I) o
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 1. Planificaci´n o

5

Figura 1.2: Planificaci´n (II) o
Jose Antonio Escart´ Vigo, Junio 2005. ın

6

Servidor Linux para conexiones seguras de una LAN a Internet

Figura 1.3: Planificaci´n (III) o
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 1. Planificaci´n o

7

Figura 1.4: Planificaci´n (IV) o
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 2

Selecci´n de Herramientas o
En este capitulo explicar´ cuales fueron las diferentes herramientas utilizadas para la elaboraci´n del e o 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 o o En la tercera fase se detalla qu´ herramientas de apoyo se us´ para desarrollar los trabajos. e o

2.1.

Selecci´n de Hardware o

Pese a que el director del proyecto me ofreci´ la utilizaci´n de material del departamento LSI de la o o UPC, por mi comodidad, el material escogido fue de mi propiedad. Comprando una parte de ´l para e desarrollar de forma m´s eficiente las tareas. a

2.1.1.

Servidor

Como servidor me decid´ por la compra de un ordenador port´til, que permitiera desarrollar un servidor ı a portable con m´s utilidades habituales en los servidores fijos, adem´s de la ventaja de poder portar el a a 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 o sistema queda garantizada gracias al sistema de validaci´n de clientes. o El port´til elegido fue un Acer TravelMate 4002 WLMI con procesador Intel Centrino a 1,6 Ghz. a con dos tarjetas de red integradas, una ethernet 10/100Mb y otra wifi 802.11g 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 demao siado nuevo y esto provoc´ una serie de incompatibilidades que se fueron solucionando con la instalaci´n o o de drivers y parches que no se encontraban en las instalaciones Linux est´ndar. a El servidor realiza tambi´n la gesti´n de la conexi´n a internet. Esta conexi´n es suministrada, cuando e o o o se encuentra fijo, por un router 3com conectado al switch de la red y que solo responde a las peticiones del servidor.

2.1.2.

Clientes

Como clientes se utilizar´n varios PC’s de sobremesa, conectados mediante cable RJ45 a un switch. a PC AMD-Duron a 1,3 Ghz., tambi´n de mi propiedad, donde estar´ situado el principal cliente e a Linux y Windows del sistema. En este ordenador se realizar´n la mayoria de pruebas de conexi´n a o o servicios.

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 o inal´mbricos. a

Los clientes se utilizaron simult´neamente para realizar las pruebas de carga una vez terminada la a implementaci´n del servidor, para comprobar la efectividad del mismo. o

2.2.

Selecci´n de la distribuci´n o o

Completada la infraestructura hardware, comenc´ a leer sobre distribuciones de GNU/Linux, buscando e cuales eran las m´s adecuadas para desplegar servidores. a A continuaci´n detallo los tipos de distribuciones valoradas: o 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 a 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 ultimas 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. o

2.2.1.

Distribuciones Linux
Cuadro 2.1: Distribuciones analizadas SimplyMepis 3.3 - Mepis-LiveCD Ubuntu (Warty Warthog 4.10) Gentoo 2004.3 (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 2003. Mepis Linux es una fusi´n entre Debian Sid o y Knoppix, una nueva clase de distribuci´n de Linux que se pueda utilizar como CD en vivo, y como o distribuci´n completa con un instalador gr´fico a disco duro. De esta manera, usuarios pueden probar el o a producto simplemente “booteando” desde el CD de Mepis, e instal´ndolo luego a disco duro solamente a si les gusta. Muchas otras distribuciones copiaron esta idea m´s adelante, pero fue Mepis quien inici´ el a o concepto de un CD vivo m´s un instalador gr´fico completo partiendo de un CD. a a ¿A que se debe el ´xito de Mepis? A diferencia de la mayor´ de las distribuciones principales de Linux, e ıa Mepis viene con muchos paquetes que no son de uso-libre, pero altamente utiles, preconfigurados todos y ´
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 2. Selecci´n de Herramientas o

11

´ listos para utilizar. Estos 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 e o c´mo permitir el uso de Java en sus navegadores. Todo est´ disponible despu´s de la instalaci´n. o a e o Esta idea simple result´ ser enormemente popular, no solamente entre los usuarios nuevos de Linux, o sino tambi´n entre los m´s experimentados quienes encontraron muy conveniente el no tener que pasar e a horas post-instalaci´n configurando y afinando el sistema. Aparte de las aplicaciones est´ndard de Debian o a y del software no-libre antes citado Mepis Linux tiene excelente auto-detecci´n del hardware. o Ubuntu (Warty Warthog) Ubuntu est´ basada en Debian, pero el planteamiento est´ inspirado en los principios de la corriente a a ubuntu, un movimiento humanista encabezado por el obispo Desmond Tutu, premio Nobel de la Paz en 1984. Econ´micamente el proyecto se sostiene con aportaciones de la empresa Canonical del millonario o sudafricano Mark Shuttleworth. El proyecto naci´ por iniciativa de algunos programadores de los proyectos Debian, Gnome y Arch o que se encontraban decepcionados con la manera de operar del proyecto Debian. La versi´n estable era o utilizada s´lo por una minor´ debido a la poca o nula vigencia que pose´ en t´rminos de la tecnolog´ o ıa ıa e ıa Linux actual. Tras varios meses de trabajo y un breve per´ ıodo de pruebas, la primera versi´n de Ubuntu (Warty o Warthog) fue lanzada en el mes de octubre de 2004. Los desarrolladores se esfuerzan en ofrecer una propuesta que corrija la problem´tica que advirtieron a en Debian. Las versiones estables se liberan al menos dos veces al a˜o y se mantienen actualizadas. n 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. o 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 2002. o Gentoo Linux es una distribuci´n basada en c´digo fuente. Mientras que los sistemas de instalaci´n o o o proveen de varios niveles de paquetes pre-compilados, para obtener un sistema Linux b´sico funcionando, a el objetivo de Gentoo es compilar todos los paquetes de c´digo en la m´quina del usuario. La principal o a 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, e o a 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 ultimos entornos gr´ficos, o ´ a multimedia y de desarrollo es un trabajo largo y tedioso, puede durar varios d´ incluso en una m´quina ıas a r´pida. a Debian (Woody - Sarge) Debian GNU/Linux inici´ su andadura de la mano de Ian Murdock en 1993. Debian es un proyecto o totalmente no-comercial; posiblemente el m´s puro de los ideales que iniciaron el movimiento del software a 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 o tres ramas en el directorio principal: “estable”, en “pruebas” e “inestable” (tambi´n conocida como “sid”, e nombre que no var´ Actualmente la rama “estable” es Woody y la rama en “pruebas” es Sarge. ıa). Cuando aparece una nueva versi´n de un paquete, se sit´a en la rama inestable para las primeras o u 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. o
Jose Antonio Escart´ Vigo, Junio 2005. ın

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 o a m´s actualizada. Mientras que la rama estable es perfecta para servidores con funciones cr´ a ıticas, muchos usuarios prefieren usar las ramas de pruebas o inestable, m´s actualizadas, en sus ordenadores personales. a Debian es tambi´n famosa por su reputaci´n de ser dif´ de instalar, a menos que el usuario tenga e o ıcil un profundo conocimiento del hardware de la computadora. Compensando este fallo est´ “apt-get” el a 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 a 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 o a hoy en d´ No ofrece extras vistosos, y se mantiene con un instalador basado en texto, y sin herramientas ıa. de configuraci´n gr´fica. o a Mientras otras distribuciones intentan desarrollar intarfaces f´ciles de usar para muchas utilidades a comunes, Slackware no ofrece nada amistoso, y toda la configuraci´n se realiza mediante los archivos de o configuraci´n. Es por esto que Slackware solo se recomienda a aquellos usuarios nuevos que deseen perder o el tiempo aprendiendo acerca de Linux.A pesar de todo, Slackware tiene una especie de aura m´gica para a 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´ de paquetes o ıa en su forma original, sin demasiadas modificaciones propias de la distribuci´n, que son un riesgo potencial o de a˜adir nuevos fallos. Es raro que se produzcan lanzamientos de nuevas versiones (aproximadamente una n al a˜o), aunque siempre se pueden encontrar paquetes actualizados para descargar despu´s del lanzamiento n e oficial. Slackware es una buena distribuci´n para aquellos interesados en profundizar en el conocimiento o de las entra˜as de Linux. n Posiblemente, la mejor caracter´ ıstica de esta distribuci´n es que si necesitas ayuda con tu sistema o linux, encuentra un usuario de Slackware. Es m´s probable que resuelva el problema que otro usuario a familiarizado con cualquier otra distribuci´n. o Mandrake Creada por Gal Duval, Mandrake Linux es una distribuci´n que ha experimentado un enorme aumento o de popularidad desde su primera versi´n de julio de 1998. Los desarrolladores partieron de la distribuci´n o o de Red Hat, cambiaron el entorno de escritorio predeterminado por KDE, y a˜adieron un instalador f´cil n a de usar rompiendo el mito de que linux es dif´ de instalar. Las herramientas de detecci´n de hardware ıcil o 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´ conseguido entregar la usabilidad necesaria.Desde entonces Mandrake Linux ha madurado y ıan se ha convertido en una distribuci´n popular entre los nuevos usuarios de linux y aquellos hogares que o buscan un sistema operativo alternativo. El desarrollo de Mandrake es completamente abierto y transparente, con paquetes nuevos que se a˜aden n al directorio llamado ”cooker“ a diario. Cuando una nueva versi´n entra en fase beta, la primera beta se o crea a partir de los paquetes que se encuentran en ”cooker“ en ese momento. El proceso de pruebas de la beta sol´ ser corto e intensivo, pero desde la versin 9.0 ha pasado ha ser m´s largo y exigente. Las ıa a listas de correo sobre la versi´n beta suelen estar saturadas, pero sigue siendo posible recibir una respuesta o r´pida sobre cualquier fallo o duda que env´ Como resultado de este tipo de desarrollo se obtiene una a ıes. distribuci´n puntera y altamente actualizada. Como contrapartida, los usuarios pueden encontrarse con o m´s fallos que en otras distribuciones. a Mucha gente encuentra este ’pero’ razonable para sus equipos, ellos obtienen las ultimas 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 o e mundo.
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 2. Selecci´n de Herramientas o Fedora (Red Hat)

13

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

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 n operativo. Probar r´pidamente la compatibilidad de hardware bajo Linux antes de comprarlo o utilizarlo, a 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. n a

2.2.2.

Pruebas

Los CD’s vivos arrancaron bien, sobre todo MEPIS con el que me llev´ una grata sorpresa, muy simple e y funciona casi todo. La distribuci´n Ubuntu estaba claramente orientada a usuario final y no servidor que era mi objetivo, o de todas formas es una buena distribuci´n que permite estar siempre actualizado. o Gentoo no la lleg´ a probar debido a las dificultades de instalaci´n que representa la continua compie o laci´n de paquetes, paso esencial en esta distribuci´n. Es muy complicado dejarla a punto. o o Debian y Slackware eran las distribuciones que m´s se ajustaron a los prop´sitos del proyecto; sobre a o 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 a distribuciones m´s estables de todas las evaluadas. a Mandrake no presentaba el entorno adecuado y Fedora y SuSE, al ser versiones comerciales, no cubr´ ıan los requisitos prefijados.

2.2.3.

Distribuci´n elegida o

Pese a la dificultad de instalaci´n y configuraci´n me decant´ por Sarge del proyecto Debian, debido o o e a su car´cter al 100 % libre y la gran cantidad de aplicaciones que adjunta. Otro factor decisivo fue el a soporte que tiene dicha distribuci´n, mantenida por multitud de desarrolladores. o Pese a ser una versi´n en “pruebas”, se encuentra en la ultima fase. La rama de desarrollo Sarge, lleva o ´ abierta desde el 2002 y la liberaci´n de la versi´n “estable” se plantea inminente. o o

2.3.

Selecci´n del Software o

Las herramientas escogidas no lo han sido al azar, son consecuencia directa de la filosof´ del proyecto, ıa donde el uso exclusivo de software libre y gratuito era un objetivo prioritario. Paso a detallar el software que utilizo:

2.3.1.

Planner

Programa de gesti´n de proyectos que permite crear planes para el proyecto y seguir su progreso, o pudiendo colocar sellos temporales Lista de caracter´ ısticas Calendario Costes de proyecto Gesti´n de tareas o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 2. Selecci´n de Herramientas o Gesti´n de recursos o

15

Figura 2.1: Distribuci´n de recursos o

Diagramas de ghant

Figura 2.2: Diagrama temporal de Ghant

2.3.2.

A L TEX

A Como se menciona en [CSLSMR+ 03] L 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 o o escritura de textos de excelente calidad. TEX no es un editor de la familia WYSIWYG, t´rmino empleado e para denominar a los editores que s´lo trabajan sobre la pantalla del computador, dando un formato o 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 n o texto perfectamente compuesto. A estas ventajas hay que a˜adir otra, es gratuito; Donald E. Knuth el creador de TEX, lo liber´ en n o Octubre de 1.990. A El entorno L TEX desarrollado por Leslie Lamport, lo cre´ en 1982, con la intenci´n de simplificar la o o tarea a aquellos que desean utilizar TEX. A˜ade a TEX una colecci´n de comandos que simplifican el n o mecanografiado, permitiendo al usuario concentrarse en la estructura del texto, en vez de en los comandos A para dar formato. Tal es la calidad de L TEX que muchas editoriales permiten a sus autores escribir libros A en L TEX, d´ndoles un archivo base y unas directrices sobre la elaboraci´n de los textos. a o Una de las ventajas de LaTeX es que puede ser exportado muy f´cilmente a Portable Document Format a (PDF) y PostScrip. Utilizar´ este entorno de composici´n de textos para desarrollar la documentaci´n derivada del proe o o yecto.

Jose Antonio Escart´ Vigo, Junio 2005. ın

16

Servidor Linux para conexiones seguras de una LAN a Internet

2.3.3.

Kile

A Kile es un editor de textos para L TEX desarrollado por P. Brachet. Tiene una completa interfaz con diversas facilidades que ofrece a un usuario novel un entorno amigable.

Figura 2.3: Imagen del editor Kile Sus principales caracter´ ısticas son las siguientes:
A Los comandos de L TEX est´n disponibles a trav´s de men´s, botones y combinaciones de teclas. a e u

La ayuda integrada en el programa nos permitir´ saber qu´ macro usar ante una necesidad concreta. a e Para una edici´n c´moda de los ficheros de texto, contamos con resaltado de sintaxis, funciones de o o b´squeda (incremental o no), reemplazo, deshacer, . . . u Los m´s de 370 s´ a ımbolos matem´ticos posibles son accesibles mediante botones y men´s. a u Corrector ortogr´fico a trav´s de ispell a e
A Asistentes para la creaci´n de distintos tipos de documentos L TEX(cartas, art´ o ıculos, etc).

Manejo de bibliograf´ a trav´s de BibTEX. ıas e Navegaci´n mediante men´s de la estructura de un documento o proyecto. o u
A Facilidades para compilar y depurar ficheros L TEX.

Integraci´n con herramientas externas para la visualizaci´n e impresi´n de los documentos editados o o o en distintos formatos: DVI, Postscript o PDF. Interfaz con programas de dibujo como xfig o gnuplot.

2.3.4.

Prosper

A La herramienta Prosper, desarrollada por F. Goualard y P.M.Neergaard es una clase para L TEX que permite crear presentaciones electr´nicas con una excelente calidad. o Con ella se pueden producir documentos en formato PDF para realizar exposiciones con un monitor o con un sistema de proyecci´n de v´ o ıdeo. Tambi´n se puede producir documentos PostScript para imprimir e la presentaci´n sobre transparencias para exposiciones con retroproyector. o Dispone de multitud de estilos de presentaci´n y la posibilidad de conseguir efectos de animaci´n en o o pantalla haciendo que el contenido de la misma aparezca o desaparezca en distintas etapas (de forma incremental).

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 2. Selecci´n de Herramientas o

17

Figura 2.4: Varios estilos de transparencias

2.3.5.

Programas gr´ficos a

Las im´genes y videos que he utilizado en la documentaci´n y en las transparencias se han generado a o 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 u pantalla se va a capturar; pudiendo seleccionar entre toda la pantalla, la ventana activa o una regi´n o concreta. En resumen, una herramienta muy util para la redacci´n de tutoriales. ´ o The Gimp: Es el programa estrella de GNU para la creaci´n y el retoque fotogr´fico de im´genes, o a a 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 a una ventana o una regi´n. De esta manera, obtendremos una colecci´n de im´genes del ´rea capturada o o a a separadas temporalmente un n´mero de fps1 que se puede especificar. El programa Mencoder forma u parte de Mplayer, que es un conjunto de aplicaciones para la grabaci´n y reproducci´n de v´ o o ıdeos, dvd’s y otros. Una vez obtenida la colecci´n de im´genes que conformaran los frames del v´ o a ıdeo se utilizar´ el programa Mencoder para componerlo. a

1 fps:

frames por segundo
Jose Antonio Escart´ Vigo, Junio 2005. ın

Parte II

Instalaci´n base o

Cap´ ıtulo 3

Instalaci´n de la distribuci´n o o
Existen varias formas de realizar la instalaci´n de la distribuci´n: o o Desde CD-ROM: con las im´genes oficiales a Desde disquetes: carga un n´cleo y permite hacer una instalaci´n base por internet si la tarjeta de u o 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 e a red es soporta. La manera m´s sencilla, con mucho, de instalar Debian GNU/Linux, es usar un juego oficial de CDs o a DVDs de Debian, las im´genes pueden ser descargadas desde el servidor Debian (www.debian.org/distrib/ ) a 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 e de ficheros desde el CD. Se puede obtener m´s informaci´n respecto a la instalaci´n de Debian en [PRG+ 02] y [eidD04]. a o o

3.1.

Proyecto Debian

El proyecto Debian GNU/Linux posee tres ramas: “stable”, “testing” y “unstable”. En los siguientes apartados se detallan las diferencias entre ellas.

3.1.1.

Unstable

Se llama “Sid” y como su nombre indica es la distribuci´n m´s inestable porque contiene paquetes o a muy nuevos. La utilizan los desarrolladores de Debian para depuraci´n. Debian Sid contiene software muy o reciente y puede traer problemas de estabilidad graves.

3.1.2.

Testing

Actualmente se llama “Sarge”, posee el software que ya pas´ un tiempo de prueba en inestable pero o que a´n debe pasar una fase de pruebas para consideralo estable, es la utilizada por aquellos que desean u disfrutar de las nuevas caracter´ ısticas de Debian y de las versiones de software m´s reciente sin esperar a a la liberaci´n oficial de una nueva versi´n. Es el equivalente a la distribuci´n m´s actual de las dem´s o o o a a distribuciones (Mandrake, Fedora, Slackware, etc).

22

Servidor Linux para conexiones seguras de una LAN a Internet

3.1.3.

Stable

Actualmente es la versi´n 3.0, tambie´ llamada “Woody” y como su nombre indica es la m´s estable de o n a las distribuciones Debian, ya que su software contenido ya super´ varios meses de pruebas y correcciones. o En sistemas de producci´n, donde no se toleran problemas de estabilidad, se recomienda el uso de o Debian Woody.

3.1.4.

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 o o estable se plantea inminente.

3.2.

Debian Sarge

Este m´todo de instalaci´n se utiliz´ en el cliente de pruebas. En el servidor se instal´ Debian Woody e o o o y se realiz´ una actualizaci´n debido a incompatibilidades de Hw. o o M´todo de instalaci´n e o Mediante el siguiente esquema detallo el sistema de instalaci´n. o 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Configurar la BIOS para arrancar desde el DVD Iniciar el instalador boteando desde el DVD Arrancar el instalador con los m´todos y par´metros m´s adecuados al Hw disponible. Presionando e a a Enter se arranca con los par´metros por defecto que incluyen el kernel 2.6 de GNU/Linux. a Elegir idioma Seleccionar pa´ ıs Confirmar mapa de teclado Detectar Hw y cargar componentes. Configurar la red Particionar discos. Se puede escoger un particionado autom´tico o si se elige manual, al menos se a han de crear 2 particiones, una ra´ y otra de intercambio ız Formar particiones y realizar la instalaci´n base o Instalar el n´cleo u Instalar el gestor de arranque, se instala Grub como predeterminado. Si se disponen de varios sistemas operativos se puede especificar un arranque m´ltiple u Retirar el DVD y reiniciar para continuar la instalaci´n o Arrancar y configurar el sistema base Configurar zona horaria
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 3. Instalaci´n de la distribuci´n o o 16. 17. 18. 19. Configurar usuarios (root y usuarios corrientes) Configurar APT Instalar y configurar paquetes adicionales Configurar correo

23

Si durante la instalaci´n se producen errores o cuelgues se pueden especificar opciones restrictivas al o iniciar el instalador. En mi caso, no consegu´ que ninguna opci´n instalara el sistema en el servidor. ı o

3.3.

Debian Woody

En la instalaci´n se incluyen varias im´genes de n´cleos disponibles, la mayor´ basados en el kernel 2.2.20: o a u ıa Vanilla: La imagen est´ndar de Debian Woody, instala el kernel 2.2.20. Incluye casi todos los a controladores soportados por Linux, compilados como m´dulos. o 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 u o n´cleo si los controladores SCSI producen cuelgues al arrancar, debido a conflictos de hardware o a u 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 a 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 a que instalar un versi´n diferente de la planificada y al arrancar Debian Woody con cualquiera de los o 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 o poder actualizar el kernel a una versi´n 2.6. o El arranque que utilic´ fue Bf2.4, para que fuera soportado un mayor n´mero de dispositivos desde el e u 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: n o 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Configurar la bios para arrancar desde CD Arrancar el sistema de instalaci´n, boteando desde el CD o Seleccionar la imagen de n´cleo deseada u Configurar teclado 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 Seleccionar qu´ controladores de perif´ricos cargar e e Configurar la interfaz de red Iniciar la instalaci´n y configuraci´n autom´tica del sistema base. o o a Configurar el gestor de arranque, en este caso Lilo. Si se dispone de varios sistemas operativos se puede espedificar arranques multiples Arrancar el sistema reci´n instalado y hacer las configuraciones finales e Instalar tar´as y paquetes adicionales, a la elecci´n de cada usuario. e o

Una vez terminada la instalaci´n est´ndar, es necesario instalar un kernel m´s avanzado (2.6 o superior) o a a que nos detecte todos los dispositivos de los que dispone nuestro sistema, y si todav´ no los soporta, ıa parchearlo con los drivers del fabricante.
Jose Antonio Escart´ Vigo, Junio 2005. ın

24

Servidor Linux para conexiones seguras de una LAN a Internet

3.4.

Actualizaci´n de Woody a Sarge o

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 n e (#apt-cdrom add). Si disponemos de internet, a˜adiendo la direcci´n de una r´plica de los archivos de Debian Sarge al n o e 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 o introducir los siguientes comandos: #apt-get update #apt-get upgrade #apt-get dist-upgrade

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 4

Primeros pasos
En los apartados que se presentan a continuaci´n establecen varias cosas que hay que tener en cuenta o para administrar un servidor Linux.

4.1.

Particionar el disco

En Linux cada partici´n se monta en tiempo de arranque. El proceso de montaje hace disponible el o contenido de esa partici´n dentro del sistema. El directorio ra´ (/) ser´ la primera partici´n. o ız a o Las particiones, cuando se montan, aparecen como un ´rbol de directorios unificado en vez de unidades a separadas, el software de instalaci´n no diferencia una partici´n de otra. S´lo hay que preocuparse de en o o o que directorio esta cada archivo. Como consecuencia de ello, el proceso de instalaci´n distribuye autom´tio a camente 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. a u 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. u /home, donde est´n los directorios de todos los usuarios. Esto es util por si los usuarios consumen a ´ 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 para tici´n para que nadie pueda realizar un ataque de Denegaci´n de servicio (DoS) generando tantas o o 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 u a n todos los usuarios puedan escribir en ´l, necesitaremos asegurarnos de que ning´n usuario abuse y e u llene el disco completo. Podemos conseguir esto situ´ndolo en una partici´n separada. a o 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. o Se puede observar por qu´ es una buena idea crear varias particiones en un disco en lugar de una sola e partici´n grande al estilo de Microsoft. Esto da una idea de por qu´ un sistema trabaja mejor que el otro. o e

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 ene a cuentran los archivos necesarios para ejecutarlo. Dependiendo del tipo de distribuci´n escogida se instalar´ por defecto uno de estos dos gestores de o a arranque Lilo o Grub. Durante ese proceso se a˜adir´n autom´ticamente los diferentes sistemas operativos n a a que tengamos instalados en el sistema. Posteriormente los par´metros pueden ser configurados desde a consola o mediante la herramienta de administraci´n gr´fica Webmin. o a En el servidor he mantenido Lilo, era un gestor que ya conoc´ y con el que me sent´ c´modo. Paso ıa ıa o a detallar los dos gestores seg´n se explican en [BB00]. u Lilo Si hemos optado por utilizar Lilo, al terminar el proceso de instalaci´n de Linux dispondremos de o un archivo de configuraci´n denominado /etc/lilo.conf el cual podremos editar en cualquier momento o para ajustar el men´ o comportamiento de Lilo a nuestras necesidades. u El archivo est´ dividido en tres secciones, como se puede observar en el cuadro 4.1. a La primera secci´n contiene opciones globales, como son el sistema operativo por defecto o si queremos o que aparezca el men´ de selecci´n y el tiempo por defecto. u o En la segunda secci´n se especifican los par´metros necesarios para arrancar Linux, indic´ndose en o a a image y initrd el kernel y las opciones de arranque. La ultima secci´n especifica la partici´n desde donde deber´ ejecutarse los otros sistemas operativos ´ o o a que tengamos instalados en el ordenador. Si necesitamos realizar alguna modificaci´n simplemente editaremos el archivo /etc/lilo.conf y poso teriormente 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-2.6.11-9 label=Kernel-2_6 read-only root=/dev/hda3 image=/boot/vmlinuz-2.4.18-3 label=Kernel-2_4 initrd=/boot/initrd-2.4.18-3.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 a interactuar en caso de arranque inv´lido. a Incluye otras funciones como el soporte de m´ltiples m´dulos, interfaz gr´fico de arranque, l´ u o a ınea de comandos, descompresi´n autom´tica, soporte para LBA y soporte para terminales entre otras muchas o a opciones.
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 4. Primeros pasos

27

4.3.

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´ da˜ar el sistema en caso de cometer alg´n error. ıa n u M´s adelante se detalla como crear y administrar usuarios con la herramienta grafica Webmin, pero a ahora voy a explicar como se har´ desde la l´ ıa ınea de comandos.

4.3.1.

A˜ adir nuevos usuarios al sistemas n

La instrucci´n necesaria para crear un nuevo usuario es useradd. o #useradd josan Este mandato crea una nueva entrada en el archivo /etc/passwd. Este archivo contiene informaci´n o como el nombre de usuario, contrase˜a, directorio de trabajo y shell predeterminado. n Es necesario crear una carpeta /home/josan que ser´ el directorio del usuario. a #mkdir /home/josan Una vez creado el usuario le deberemos asignar una contrase˜a, para ello utilizaremos la instrucci´n n o passwd. Con ella podemos modificar la contrase˜a de cualquier usuario si hemos iniciado una sesi´n de n o root, o nuestra propia contrase˜a en cualquier otro caso. n #passwd josan, . . . y introducir la nueva contrase˜a. n Si el sistema esta bien administrado, se ha de almacenar informaci´n imprescindible de los usuarios, o 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´ e ıas no inform´ticas. a Para cambiar la informaci´n de una cuenta se usa el comando chfn. o #chfn josan Y para visualizar esa informacion finger. #finger josan

4.3.2.

A˜ adir grupos al sistema n

Para a˜adir un nuevo grupo al sistema se utiliza el siguiente comando: n #groupadd -g [GID] [nombre_grupo], . . . donde GID es el n.o de grupo que se asignar´. a Si tenemos usuarios ya creados y deseamos a˜adirlos o eliminarlos de un grupo utilizaremos: n #gpasswd -a [nombre_usuario] [nombre_grupo], . . . a˜adir usuario n #gpasswd -d [nombre_usuario] [nombre_grupo], . . . eliminar usuario

Jose Antonio Escart´ Vigo, Junio 2005. ın

28

Servidor Linux para conexiones seguras de una LAN a Internet

4.3.3.

Bases de datos de usuarios

Ahora vamos a especificar con m´s detalle como es almacenada la informaci´n de los usuarios dentro a o del sistema. Esta informaci´n es almacenada en tres archivos: o /etc/passwd: Informaci´n de los usuarios o /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´ ser algo parecido al siguiente: ıa 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 delimio a tados por el car´cter dos puntos (:). La descripci´n de cada uno de los campos aparece listada en la Tabla a o 4.3. Cuadro 4.3: Descripci´n de los campos del archivo /etc/passwd o Descripci´n o Nombre de usuario o identificador de inicio de sesi´n. Tiene que ser unico. o ´ Contrase˜a encriptada de usuario. Una “x” min´scula indica que se usan contrase˜as ocultas n u n y que estas estar´n en el archivo /etc/shadow a Identificador de usuario (UID). Este n.o ha de ser unico ´ Identificador de grupo (GID). Aqu´ solo aparece el grupo principal del usuario, aunque puede ı pertenecer a m´s de un grupo a Campo de comentarios Directorio /home del usuario. Shell de trabajo del usuario. Habitualmente es la shell bash

Campo 1 2 3 4 5 6 7

Un car´cter “*” en la contrase˜a indica que la cuenta esta deshabilitada temporalmente. Es una buena a n pr´ctica no s´lo a˜adir el car´cter, sino indicar el motivo por el que ha sido deshabilitada. a o n a Se pueden a˜adir nuevas cuentas de usuario editando directamente el archivo /etc/passwd, pero para n crear las contrase˜as hay que usar la utilidad /usr/bin/passwd ya que esta es cifrada. n
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 4. Primeros pasos Archivo /etc/shadow

29

Es el archivo de contrase˜as ocultas. Este archivo a˜ade un nivel de seguridad adicional, ya que la n n encriptaci´n de la clave de usuario solo es visible por el root. o Cuando todav´ no exist´ las contrase˜as ocultas, la contrase˜a, aunque cifrada, se almacenaba en el ıa ıan n n archivo /etc/passwd. Este archivo puede ser le´ por cualquier usuario del sistema, pero s´lo modificado ıdo o por el usuario root. Esto representa un problema porque significa que cualquiera puede ver una contrase˜a n cifrada e intentar conseguir una clave que genere ese cifrado. Para combatir esta amenaza potencial, se defini´ el concepto de contrase˜as ocultas. o n 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´ a ınea con campos delimitados por el car´cter dos puntos (:). Algunos a de estos campos contendr´n aparentemente n´meros raros, demasiado altos para ser correctos. Estos a u campos est´n referidos a la fecha de comienzo “de la era de la computaci´n”, el 1 de enero de 1970. a o Cuadro 4.5: Descripci´n de los campos del archivo /etc/shadow o Descripci´n o Nombre de la cuenta de usuario Campo de contrase˜a cifrada n D´ transcurridos desde el comienzo de la era hasta la fecha en que la contrase˜a fue ıas n cambiada por ultima vez ´ N´mero de d´ tras que deben transcurrir hasta que la contrase˜a se pueda volver a cambiar u ıas n N´mero de d´ tras los cuales hay que cambiar la contrase˜a (-1 significa nunca) u ıas n D´ antes de la expiraci´n de la contrase˜a en que se avisar´ al usuario al inicio de la sesi´n ıas o n a o D´ despues de la expiraci´n de la contrase˜a en que la cuenta se inhabilita si la contrase˜a ıas o n n no se ha cambiado correctamente. D´ transcurridos desde la era en que la cuenta se inhabilitar´ (con independecia de cambios ıas a de la contrase˜a) n Campo reservado

Campo 1 2 3 4 5 6 7 8 9

Se utilizar´ change, la utilidad de cambio de caducidad, para modificar estos valores predeterminados. a Para realizar el cifrado de las contrase˜as es mejor usar MD5 que el antiguo m´todo DES, ya que n e el primero permite contrase˜as m´s largas y si esta es buena implica un tiempo mucho mayor para n a descifrarlas.

Jose Antonio Escart´ Vigo, Junio 2005. ın

30 Archivo /etc/group

Servidor Linux para conexiones seguras de una LAN a Internet

El objetivo de la existencia de un identificador de grupo (GID) es agrupar de forma l´gica recursos o 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 e 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 o Descripci´n o Nombre de grupo Contrase˜a de grupo. No suele usarse n N´mero de identificaci´n de grupo u o 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 o no fuera este

Campo 1 2 3 4

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 4. Primeros pasos

31

4.4.

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´ tiene los privilegios asociados de: ıa Lectura Escritura Ejecuci´n o Un archivo est´ identificado por el grupo al que pertenece y su propietario. Cuando realizamos un a listado de un archivo, encontramos los siguientes parametros: #ls -l <archivo> - rwx rwx rwx root root

512

Jan

7

10:50

nom_archivo

4.4.1.

Tipos de archivo

El primer car´cter identifica el tipo de archivo. Podemos encontrar los siguientes: a Cuadro 4.8: Tipos de archivos Car´cter a d l l l l p Tipo de archivo Archivo normal (generalmente un archivo binario o de texto ASCII) Directorio Enlace simb´lico o Dispositivo de car´cter a Dispositivo de bloque Socket (un proceso de escucha de red) Canalizaci´n o pipe con nombre o

4.4.2.

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) o 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

Jose Antonio Escart´ Vigo, Junio 2005. ın

32

Servidor Linux para conexiones seguras de una LAN a Internet

Cuadro 4.9: Opciones de chmod Opci´n o u g o a r x w 0 1 2 3 4 5 6 7 Descripci´n o Propietario Grupo Otros Todos Lectura Ejecuci´n o Escritura Sin privilegios Ejecuci´n o Escritura Escritura y ejecuci´n o Lectura Lectura y ejecuci´n o Lectura y escritura Lectura, escritura y ejecuci´n o

O con n´meros: u #chmod 751 /home/josan/archivo Da lectura, escritura y ejecuci´n al propietario; Lectura y ejecuci´n al grupo; Ejecuci´n a otros. o o o

4.4.3.

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´. o 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 o 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 n para los grupos. Cuadro 4.10: Opciones especiales chmod Opci´n o s t 0 1 2 3 4 5 6 7 Descripci´n o SUID o SGID Bit de persistencia Sin permisos especiales (predeterminado) Activar el bit de persistencia (t) Activar el bit SGID de grupo (s) Activar el bit SGID de grupo y el de persistencia Activar el bit SUID de propietario Activar el bit SUID de propietario y el de persistencia Activar el bit SUID de propietario y el bit SGID de grupo Activar el bit SUID, el SGID y el de persistencia

Jose Antonio Escart´ Vigo, Junio 2005. ın

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. o El bit de persistencia, mostrado como “t” en lugar del bit de ejecuci´n normal para el nivel “otros” se o usa normalmente en directorios tales como /tmp. Este atributo en concreto hace que s´lo el propietario o 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: n u a #chmod 2751 /home/josan/archivo Lo comentado anteriormente y el SGID activado.

4.4.4.

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 o

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 o 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 o e ı a 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 o mano” los script’s de instalaci´n. o Si nos vemos en la obligaci´n de instalar un paquete de una fuente no segura, desconocida o sospechosa o es una buena conducta de actuaci´n instalar el paquete con un usuario con privilegios restringidos, evitando o usar root a menos que sea imprescindible. Si los scripts estuvieran modificados, sin privilegios, no podr´ ıan hackear el sistema.

4.5.1.

Compilaci´n de paquetes desde archivos fuente o

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

Jose Antonio Escart´ Vigo, Junio 2005. ın

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: o a README INSTALL Es imprescindible leerlos, en ellos se especifica la documentaci´n del paquete. Aqu´ encontraremos la o ı historia del paquete, la versi´n actual, los paquetes adicionales que debemos de tener instalados, el m´todo o e de instalaci´n y la informaci´n necesaria para modificar los archivos de configuraci´n. o o o Para realizar la instalaci´n se utiliza el Makefile, un archivo que se pasa al comando make con una serie o de par´metros dependiendo de las opciones disponibles. En el pr´ximo p´rrafo se explica en que consiste a o a 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 o a 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. o o e 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 o 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 depeno a dencias de compilaci´n, y los flags qu´ se han de pasar al compilador. o e Pueden llegar a ser archivos grandes y complejos. Tratar´ de explicar las nociones m´s b´sicas de los e a a mismos, para poder leer los que vienen en las instalaciones de las aplicaciones. La sintaxis b´sica de un a 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´ a ı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 o a la acci´n indicada para generarlo nuevamente. An´logamente, si tst.o no existe o tiene fecha de modificaci´n o a o anterior a la de tst.c, ser´ necesario recompilar nuevamente su c´digo fuente. a o

Jose Antonio Escart´ Vigo, Junio 2005. ın

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: a DEPTST=tst.o tstf.o CFLAGS=-c -o Con estas modificaciones el archivo original quedar´ de la siguiente forma: ıa Cuadro 4.11: Ejemplo de un archivo Makefile 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 Para abreviar tambi´n se pueden utilizar las construcciones especiales “$<” para referirse a las depene dencias 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 e o La mayor´ de los paquetes se instalan de la siguiente forma: ıa $./configure $make $make install Seg´n el archivo INSTALL podremos observar las necesidades concretas del paquete, tambi´n es hau e bitual, entre las distintas fases de instalaci´n, las directivas: o $make check $make clean Por ultimo 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. a

Jose Antonio Escart´ Vigo, Junio 2005. ın

36

Servidor Linux para conexiones seguras de una LAN a Internet

4.5.2.

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. a Cuadro 4.12: Opciones del comando dpkg Comando Descripci´n o #dpkg -i <paquete> Instala paquete #dpkg -r <paquete> Elimina paquete #dpkg --purge <paquete> Borra un paquete inclu´ ıdos los ficheros de configuraci´n o #dpkg -f <paquete> Muestra informaci´n de la versi´n del paquete o o #dpkg -c <paquete> Lista los ficheros contenidos #dpkg --contents <paquete> Lista los ficheros contenidos y sus directorios #dpkg --info <paquete> Informaci´n del paquete o #dpkg --unpak <paquete> Desempaqueta #dpkg --info <paquete> Informaci´n del paquete o #dpkg --force-help <paquete> Fuerza opciones #dpkg -L <paquetes> Lista el paquetes si est´ instalado a #dpkg -l Lista paquetes instalados #dpkg-reconfigure --all Reconfigura todos los paquetes #dpkg-reconfigure locales Reconfigura paquetes con la configuraci´n local, por ejemplo coloo ca paquetes en el idioma del sistema

4.5.3.

Apt: Gestor de paquetes Debian

El programa APT (Advancd Packaging Tool) se encarga de manejar autom´ticamente las dependencias a de la paqueter´ del sistema. ıa 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. a Cuadro 4.13: Ejemplo de /etc/apt/sources.list
deb deb deb deb cdrom:[Debian cdrom:[Debian cdrom:[Debian cdrom:[Debian GNU/Linux GNU/Linux GNU/Linux GNU/Linux testing _Sarge_ - Official Snapshot i386 Binary-2 (20050225)]/ unstable contrib main main/debian-installer testing _Sarge_ - Official Snapshot i386 Binary-1 (20050225)]/ unstable contrib main main/debian-installer 3.0 r4 _Woody_ - Official i386 Binary-2 (20050102)]/ unstable contrib main non-US/contrib non-US/main non-US/non-free non-free 3.0 r4 _Woody_ - Official i386 Binary-1 (20050102)]/ unstable contrib main non-US/contrib non-US/main non-US/non-free non-free

#Sarge (testing) deb http://ftp.rediris.es/debian testing main contrib non-free deb-src http://ftp.rediris.es/debian/ testing main non-free contrib deb http://ftp.rediris.es/debian-non-US testing/non-US main contrib non-free deb-src http://ftp.rediris.es/debian-non-US testing/non-US main contrib non-free deb http://security.debian.org/ testing/updates main contrib non-free #Woody (stable) #deb http://ftp.rediris.es/debian testing main contrib non-free #deb http://ftp.rediris.es/debian-non-US testing/non-US main contrib non-free #deb http://security.debian.org/ stable/updates main contrib non-free #Sid (unstable) #deb http://ftp.rediris.es/debian unstable main contrib non-free #deb http://ftp.rediris.es/debian-non-US 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 e n los paquetes Debian.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 4. Primeros pasos 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) o Opciones ATP

37

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 o #apt-get install <paquete> Instala paquete # apt-get --reinstall install <paquete> Reinstala paquete o una nueva versi´n del mismo o #apt-get remove <paquete> Desinstala paquete #apt-get --purge remove <paquete> Desinstala paquete y borra sus archivos de configuraci´n o #apt-cdrom ident Identifica un CD #apt-cdrom add A˜ade un CD al /etc/apt/sources.list n #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 o #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´ o ıfico #apt-cache showpkg <paquete> Muestra mucha m´s informaci´n del paquete a o #apt-cache depends <paquete> Muestra de qu´ paquetes depende e #apt-file search <archivo> Muestra a qu´ paquete pertenece el archivo e #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 e 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. o a Si utilizamos la opci´n apt-cdrom solo tendr´ efecto si el CD-ROM esta bien configurado en /etc/fstab. o a

Jose Antonio Escart´ Vigo, Junio 2005. ın

38

Servidor Linux para conexiones seguras de una LAN a Internet

4.5.4.

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

4.5.5.

Encontrar paquetes y sus dependencias

En alg´n momento nos podemos encontrar que necesitamos saber de qu´ paquete proviene un archivo, u e o lo m´s frecuente, qu´ paquete/s tengo que instalar para que me funcione un comando. a e 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 nomo u bre 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, http://packages.debian.org/testing/. a Tambi´n se puede utilizar el siguiente truco r´pido: e a $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. u 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 o Si no conocemos el comando, pero sabemos su descripci´n, lo mejor es usar apt-cache search. o $apt-cache search <paquete>
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 4. Primeros pasos Buscar dependencias de un paquete Para conocer las dependencias e informaci´n de un paquete, podemos usar el apt-cache depends. o $apt-cache depends <paquete> La informaci´n que se nos mostrar´ es la siguiente: o a Depende: Paquetes que son necesarios para que funcione Sugiere: Paquetes recomendables Entra en conflicto: Paquetes incompatibles Reemplaza: Paquetes que quedar´n obsoletos a

39

4.5.6.

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. o #apt-get -f install, . . . Reintenta la instalaci´n de paquetes que han dado problemas. o 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 o 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 utiles en determinadas ocasiones, pero hay que saber que ´ es lo que se quiere hacer de antemano y asumir las posibles consecuencias. Por ultimo comentar el siguiente comando que tambi´n puede ser util en determinadas ocasiones: ´ e ´ # 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. o o

4.6.

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´ de distribuciones Linux es bash (Bourne Again Shell). ıa

Jose Antonio Escart´ Vigo, Junio 2005. ın

40

Servidor Linux para conexiones seguras de una LAN a Internet

4.6.1.

Tipos de shell

Existe varios shells para Linux. Cada una de ellas tiene ciertas caracter´ ısticas, pero todas est´n clasia ficadas 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 a 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 n para disquetes de arranque; kiss, otro int´rprete sencillo de shell (pero s´lo tiene comandos rudimentarios e o integrados), que es tambi´n ideal para discos de arranque o rescate; y zsh, una shell muy parecida a la e 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 a e a sintaxis de la programaci´n en C. La shell C proporciona una interfaz agradable, pero se considera que es o m´s dif´ hacer scripts para ella, especialmente para aqu´llos que no est´n familiarizados con la sintaxis a ıcil e e C. La sintaxis para las variables de entorno var´ significativamente, y los scripts escritos para shells de la ıa 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.

4.6.2.

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 unicos 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 unico emite un pitido de opci´n ambigua y si se pulsa por segunda vez la ´ o tecla TAB se muestra el rango de opciones disponibles. A menudo, con s´lo un car´cter m´s o a a tendremos una selecci´n unica otra vez. o ´ Se pueden ejecutar varios comandos en la misma l´ ınea separ´ndolos por el caracter “;” a Permite incrustar comandos como parametros de otros comandos, encerr´ndolos entre comillas a invertidas (#kill ‘cat /var/run/named.pid‘) Existe un historial de comandos, que queda almacenado en .bash history. Tiene un tama˜o n prefijado (normalmente 500 lineas) a partir del cual empieza a borrar las l´ ıneas antig¨as para u escribir las nuevas. El comando $history mostrar´ el contenido de .bash history. a Este hist´rico de comandos facilita la tarea de escribir scripts para la shell. Sencillamente, cortando o 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. e o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 4. Primeros pasos

41

4.6.3.

Ejecuci´n de procesos en la shell Bash o

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: e $./<archivo_ejecutable> Desde una consola tambi´n podemos hacer que un proceso se ejecute en segundo plano a˜adi´ndole e n e un & al final, y as´ seguir trabajando en esa consola: ı $comando &

4.6.4.

Variables de entorno

Una variable de entorno es una cadena de caracteres con informaci´n de las diferentes opciones del o sistema asociada a un nombre simb´lico que pueda utilizar Linux. o 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 a La siguiente tabla, obtenida en [BB00] especifica las variables que encontraremos, m´s habitualmente, a en nuestro sistema. Si se utiliza el shell bash, se puede encontrar m´s informaci´n sobre las variables de entorno que existen a o 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. o a a o La forma de realizar esta asignaci´n desde la l´ o ınea de comandos depender´ del shell que estemos utia lizando. Si utilizamos el shell bash el m´todo es el siguiente: e #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: o export VARIABLE_DE_ENTORNO=valor

Jose Antonio Escart´ Vigo, Junio 2005. ın

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 o Indica el editor por defecto utilizado por el sistema Es el n´mero de comandos que recuerda el shell. Podemos acceder a los comanu dos 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 u Nombre del shell actualmente en uso Path de inicio Tipo de terminal utilizado en la sesi´n de trabajo actual o 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 a a Especifica el est´ndar de lenguaje para las configuraciones locales a

Eliminar variables de entorno Para eliminar variables desde la l´ ınea de comando se ejecutar´ una instrucci´n diferente dependiendo a o 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: e #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´. o e a

4.6.5.

Configuraci´n del entorno o

Cuando se inicia una sesi´n de trabajo el int´rprete de comandos bash lee y ejecuta de forma autom´tio e a ca las ´rdenes del archivo /etc/profile. A continuaci´n1 busca los archivos del usuario ˜/.bash profile, o o a u o ˜/.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, o n elegiremos el archivo a modificar que m´s convenga a nuestros objetivos. a Resulta de gran utilidad realizar alguna modificaci´n a los comandos t´ o ıpicos para evitar da˜os no n deseados en el sistema o a˜adir las opciones que mas utilizamos. Un ejemplo de esto ser´ colocar en el n ıa 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.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 4. Primeros pasos alias cp="cp -i" alias rm="rm -i" alias dir="ls -alF"

43

Con los tres primeros comandos se redefinir´ el comando base, pidiendo confirmaci´n por defecto y a o con el ultimo se crear´ un comando nuevo que llamar´ a ls pero con m´s opciones. ´ a a a

4.6.6.

Redireccionamientos

Para redireccionar a un archivo la salida normal de un script, de forma que m´s tarde se puedan ver a los resultados, se utiliza la redirecci´n (>). o $ls -l >listado Si se quiere a˜adir los resultados de la salida de un comando al final de un archivo, se utiliza la redin recci´n (>>). o $ls -l /bin >>listado De forma similar, se pude redireccionar la entrada, para ello se utiliza la redirecci´n(<). o $cat < listado

Canales est´ndar a En Linux existen una serie de canales est´ndar que nunca cambian, al menos que los modifiquemos a a mano: Dispositivo 0: stdin, o dispositivo de entrada est´ndar a Dispositivo 1: stdout, o dispositivo de salida est´ndar a Dispositivo 2: stderr, o dispositivo de error est´ndar a 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 a e en los siguientes ejemplos: $ls > listado 2>&1, . . . redirecciona la salida est´ndar y el error est´ndar al archivo listado. a a $ls > listado 2>/dev/null, . . . redirecciona la salida est´ndar al archivo listado y descarta errores. a $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 a terminal. De no indic´rseles un fichero, paginan la entrada est´ndar. Se diferencian en las facilidades que a a
Jose Antonio Escart´ Vigo, Junio 2005. ın

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 a no limita este aspecto pues acepta el empleo de todas las teclas de movimiento tradicionales. Cuando se alcanza el final del ultimo fichero a paginar, more termina autom´ticamente, no as´ less. Tambi´n more ´ a ı e 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 u o u o o es necesario escribir /. n b: en more permite regresar n p´ginas (por defecto n es 1). a n f: en more se adelantan n p´ginas y en less, n l´ a ıneas.

4.7.

Consolas virtuales

Al ser Linux un sistema multiusuario y multitarea, se pueden ejecutar diversos procesos simult´neaa mente, 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 a volver al modo gr´fico. a Esto es muy util para tener una consola virtual de root con m´xima prioridad, si el sistema se ralen´ a tiza, podremos observar por qu´ esta pasando y remediarlo. Tambi´n podemos finalizar alg´n proceso o e e u aplicaci´n que haya podido bloquear otra consola, evitando de esta forma tener que reiniciar el sistema. o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 5

Kernel
El kernel o n´cleo es una de las partes esenciales de un sistema operativo. Proporciona todos los servicios u b´sicos requeridos por otras partes del sistema operativo y aplicaciones. Se encarga de la administraci´n a o de la memoria, los procesos y los discos. El kernel es independiente de la distribuci´n Linux utilizada, el o mismo kernel deber´ servir para otras distribuciones, usando el mismo ordenador. ıa 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 a hardware que no necesitamos. Recompilar el kernel es una buena idea y dar´ como resultado un kernel a 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 a n a a a dispositivos. La actualizaci´n del kernel se divide en dos partes: compilaci´n e instalaci´n del nuevo kernel. o o o

5.1.

¿Por qu´ compilar? e

Hay diversas razones para recompilar el kernel de Linux. Es util por qu´ trabajando con kernels nuevos ´ e generalmente se obtiene: 1. Un sistema m´s r´pido, estable y robusto a a 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, a o la personalizaci´n se hace para sacar un mayor provecho de las diferentes caracter´ o ısticas que ofrece el software.

5.2.

Acerca de los m´dulos o

Varias partes de c´digo del kernel pueden compilarse por separado en forma de m´dulos, dando flexio o bilidad al sistema. Los m´dulos no est´n enlazados directamente en el kernel, siendo necesario insertarlos o a en ´l ya sea durante el proceso de arranque o posteriormente, de tal forma que s´lo se usan cuando se e o necesitan, sin utilizar innecesariamente la memoria Ram del sistema.

5.3.

Kernel-image

La manera m´s sencilla de obtener un nuevo kernel es instalar un paquete kernel-image.deb. Una vez a instalado s´lo es necesario actualizar el gestor de arranques y reiniciar. o Son kernels bastante est´ndar y adaptados a distribuciones Debian. Para hacerlos m´s utilizables, a a incluyen soporte para todo tipo de hardware e idiom´s imaginados. a Este m´todo es r´pido y sencillo pero es muy ineficiente, desaprovecha los recursos del sistema. e a

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 o o mucho m´s vers´til que kernel-image, los binarios no suelen contener configurados correctamente todos a a los dispositivos del sistema.

5.4.1.

Instalar un kernel-source

Para saber cual es la version m´s actual podemos utilizar la siguiente secuencia de comandos: a 1. Cargar las fuentes de Apt (/etc/apt/sources.list) con nuestra distribuci´n, como se puede ver en o 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, a $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/), o #apt-get install kernel-source-2.6.8 6. Descomprimir el kernel-source, #tar jxvf /usr/src/kernel-source-2.6.8.tar.bz2

7. Crear un enlace simb´lico, #ln -s kernel-source-2.6.8 linux o 8. Ejecutar el menu de configuraci´n para el menu texto, #usr/src/linux/make menuconfig, o . . . o para el menu gr´fico, #usr/src/linux/make xconfig a 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 o o a coherente es crear un paquete.

5.4.2.

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 o n posibles errores se utilizar´ el paquete fakeroot que proporciona un entorno de root falso, donde poder a compilar el kernel. En la p´gina del manual se describen las opciones del paquete fakeroot, en el ejemplo a se muestra el m´todo m´s simple: e a 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 u o en la que se est´ compilando el kernel. De esta forma tendremos claramente identificado la versi´n del a o kernel y la fecha de la compilaci´n. o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 5. Kernel Para instalar el paquete: #dpkg -i kernel-image-2.6.8_Version.1.050518_i386.deb

47

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).

5.5.

Compilar Kernel

Las fuentes oficiales del kernel m´s actual las podemos encontrar en http://www.kernel.org. Las desa cargamos al directorio /usr/src/ y las descomprimimos empleando el m´todo adecuado, seg´n el formato e u del kernel descargado. Para la seguridad y asegurarnos que no da˜amos involuntariamente el sistema se puede creer un usuan rio capaz de actuar con los archivos fuentes. Para eso se a˜adir´ al grupo src. n a #gpasswd -a josan src

5.5.1.

Paquetes necesarios

Para poder compilar el kernel necesitamos tener los siguientes paquetes instalados. Paquetes b´sicos a Cuadro 5.1: Paquetes b´sicos a 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 actualizeo mos nuestro sistema con las ultim´s versiones de los paquetes que se detallan en el cuador 5.2. ´ a Si alguno no lo tenemos instalado, es necesario realizar su instalaci´n mediante apt-get. El proceso o automatizado que comprueba las versiones se encuentra implementado en el scrip: /usr/src/linux/scripts/ver_linux

Jose Antonio Escart´ Vigo, Junio 2005. ın

48

Servidor Linux para conexiones seguras de una LAN a Internet

Cuadro 5.2: Paquetes necesarios para compilar kernel 2.6 Paquete Gnu C Gnu make binutils util-linux module-init-tools e2fsprogs jfsutils reiserfsprogs xfsprogs pcmcia-cs quota PPP isdn-utils nfs-utils procps oprofile Version necesaria 2.95.3 3.78 2.12 2.10 0.9.10 1.29 1.1.3 3.6.3 2.1.0 3.1.21 3.09 2.4.0 3.1pre1 1.0.5 3.1.13 0.5.3 Comando comprobar versi´n o #gcc --version #make --version #ld -v #fdformat --version #depmod -V #tune2fs #fsck.jfs -V #reiserfsck -V #xs_db -V #cardmgr -V #quota -V #pppd --version #isdnctrl 2>&1|grep version #showmount --version #ps --version #oprofiled --version

5.5.2.

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 a 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. o

5.5.3.

M´todo de compilaci´n e o

En el cuadro 5.3 se describe el m´todo que utilic´ para compilar el kenel del servidor. Es un trabajo e e laborioso y que requiere bastante pr´ctica, es necesario realizar varias recompilaciones para ajustar las a 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. o El m´todo descrito es una gu´ est´ndar para compilar el kernel, la elecci´n de los m´dulos a colocar e ıa a o o en el kernel se deja a elecci´n del usuario, ya que cada hardware tiene sus propias caracter´ o ı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 o 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 e me bas´ para realizar la compilaci´n del kernel. Se puede encontrar en la direcci´n: e o o http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 5. Kernel

49

Acci´n o Nos situamos en el directorio Si existe enlace /usr/src/linux Descomprimimos el kernel Creamos un enlace simbolico a las fuentes del nuevo kernel Entramos en el directorio de las fuentes Cambiar a usuario root Salvamos el archivo antiguo de configuraci´n del kernel o Borramos los mensajes de compilaciones anteriores Entramos en el men´ de configuu raci´n o Agregamos dependencias Borramos datos innecesarios Compilamos el kernel Compilamos los m´dulos o Instalamos los m´dulos en el kero nel Copiamos a /boot el kernel Borramos el antiguo enlace a System.map Copiamos el archivo System.map Creamos el nuevo enlace a System.map Configuramos el gestor de arranque Cargamos el nuevo arranque Marcamos que reinicie con el nuevo kernel

Cuadro 5.3: Compilaci´n del Kernel o Comando $cd /usr/src rm linux $tar zxvf linux-2.6.11.tar.gz $ln -s linux-2.6.11 linux $cd linux $su root #cp .config config.save #make mrproper #make menuconfig (menu texto) o #make xconfig (menu gr´fico) a #make #make #make #make #make dep clean bzImage modules modules_install

#cp arch/i386/boot/bzImage /boot/bzImage-VERSION_KERNEL #rm /boot/System.map #cp System.map /boot/System.map-VERSION_KERNEL #ln -s /boot/System.map-VERION_KERNEL /boot/System.map #vi /etc/lilo.conf #/sbin/lilo #/sbin/lilo -R <Nombre_del_arranque_en_lilo>

5.5.4.

Parchear el kernel

Los parches del kernel son la forma de a˜adir caracter´ n ı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. o a

5.5.5.

Consejos para la configuraci´n del kernel o

Hay que tomarse todo el tiempo necesario con xconfig o menuconfig. Aseg´rarse de incluir todo lo u imprescindible y quitar todo lo que no (m´dulos para dispositivos zip, soporte usb, video, tarjeta de o sonido, nic, raid, etc...). Se recomienda usar los m´dulos siempre que sea posible, esto hace al kernel m´s o a peque˜o y m´s r´pido. Si no se est´ seguro de que elegir resulta de gran ayuda consultar la documentaci´n. n a a a o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 6

Interfaz gr´fico a
En los sistemas Linux se tiene una visi´n diferente del entorno gr´fico. La interfaz que se presenta al o a usuario es independiente del n´cleo del sistema operativo. u El n´cleo de Linux (su kernel) est´ completamente desacoplado de la interfaz gr´fica. Esto permite u a a seleccionar la interfaz con la que nos resulte m´s c´moda, en lugar de tener que seguir el dictado de alguien a o o de la potencialmente aleatoria “investigaci´n de mercado”. o Sin embargo, lo m´s importante de esta decisi´n es la estabilidad que implica tener este programa a o independiente del n´cleo. Si cae el GUI1 bajo Windows o MacOS, se tiene que volver a arrancar. Bajo u Linux, se pude matar el proceso y reiniciarlo sin afectar al resto de servicios del sistema (tales como servicios de archivos, o de red).

6.1.

X-Window

A mediados de 1980 se cre´ una fundaci´n para entornos de usuario gr´fico, indepenediente del sistema o o a operativo llamado X-Windows. Las “X” simplemente definen el m´todo por el cual se pueden comunicar e las aplicaciones con el hardware gr´fico. Tambi´n establece un conjunto de funciones de programaci´n a e o bien definidas que podr´n ser llamadas para realizar la manipulaci´n b´sica de las ventanas. a o a La definici´n b´sica de c´mo se dibuja una ventana, un bot´n o un icono no incluye la definici´n de o a o o o c´mo estos se deber´ ver. En realidad X-Windows en su estado natural no tienen apariencia real. El o ıan 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´ el o ıa potencial de convertirse en la interfaz final, pero a cambio contaba con la desventaja de ofrecer un dise˜o n que parec´ como hecho “a trozos”. ıa 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. a o

6.1.1.

Configuraci´n X-Windows o

Linux ofrece la funcionalidad de poder ejecutar aplicaciones a trav´s de una red heterogenea, mediante e la incorporaci´n de la implementaci´n XFree86 del est´ndar X11 del sistema X-Window, creado por el o o a MIT2 . .

1 Interfaz

2 Instituto

gr´fica de usuario a Tecnol´gico de Massachusetts o

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 o a o y configuraci´n. Ya no es este el caso, en la mayor´ de las configuraciones est´ndar de hardware. Ahora las o ıa a distribuciones m´s populares de Linux lo instalan y configuran autom´ticamente. Adem´s, con XFree86 v4, a a a algunas de las partes m´s complejas de la configuraci´n son gestionadas autom´ticamente. a o a Actualmente XFree86, el servidor X que usa Linux normalmente, se encuentra en el est´ndar X11R6.4, a 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´ da˜ar f´ ıa n ısicamente el ordenador. xf86Config Es el configurador de X-Windows para Debian. Despu´s de leer los archivos /usr/X11/lib/doc, hay que e ejecutar uno de los siguientes comandos: #xf86config, . . . para modo texto #xf86cfg, . . . para modo gr´fico a A continuaci´n, se seleccionan las especificaciones de la tarjeta y el monitor. Esto generar´ el archivo o a de configuraci´n /etc/X11/XF86Config-4. o Para probar la configuraci´n ejecutamos #startx. o 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 o el monitor con frecuencias no soportadas podr´ da˜ar el equipo. ıa n El archivo de configuraci´n est´ dispuesto en secciones con el siguiente formato: o a 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: o o Secci´n Files o Est´ secci´n define los archivos y directorios importantes para XFree86. Las rutas de acceso a la base a o de datos de color (RGB), las definiciones de las fuentes y bibliotecas de m´dulos. o Secci´n Modules o Se proporciona soporte para varios servicios mediante m´dulos de carga din´mica. Esto aumenta mucho o a la flexibilidad en el modo de suministro de servicios, y en los servicios que los usuarios eligen usar en realidad.
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 6. Interfaz gr´fico a

53

De este modo, tambi´n se proporciona un mecanismo m´s general para ofrecer servicios, como soporte e a TrueType, que antes suministraban programas externos. Los m´dulos pueden cargarse usando el comando Load o usando una SubSection. El uso de una o SubSection activa las opciones que se quieren pasar al m´dulo. o Secci´n InputDevice o Es una de las muchas secciones que puede repetirse en el archivo de configuraci´n. Cada dispositio vo (rat´n, teclado, pantalla t´ctil, . . . ) tiene su propia secci´n InputDevice. o a o 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. o a o Secci´n Device o Esta secci´n define una tarjeta de v´ o ı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´ de las secciones, la e o a ıa secci´n Device usa un comando Identifier para nombrar a este dispositivo. o El comando Driver indica a XFree86 qu´ m´dulo cargable debe usar para este dispositivo. e o Los controladores de dispositivos suelen aceptar multitud de opciones. Secci´n Monitor o Esta secci´n define un monitor que est´ disponible para su uso, pero no implica que est´ usando en o e e realidad. Tampoco asocia al monitor con una tarjeta de v´ ıdeo. Esto se har´ en la secci´n Screen. Cada a o secci´n Monitor tiene un comando Identifier para nombrarlo. o 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 a a configuraciones multipantalla. Secci´n Screen o Esta secci´n combina un Monitor y un Device, definidos en las secciones anteriores, para crear una o pantalla l´gica. Tambi´n define una profundidad de color predeterminada, o el n´mero de bits de color o e u por pixel. Dentro de esta secci´n se encuentran una o m´s subsecciones Display. Estas subsecciones definen las o a combinaciones de profundidad de color/resoluci´n para esta pantalla. Tambi´n suministran el tama˜o de o e n los espacios de visualizaci´n o de la pantalla virtual. Despu´s de seleccionar una pantalla usando una o e presentaci´n o la opci´n de la l´ o o ı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 a e o a o l´ ınea de comandos --depth, o se usar´ la profundidad de color predeterminada. a Secci´n ServerLayout o Esta secci´n define una presentaci´n de pantallas y de dispositivos de entrada. Se puden definir una o o o m´s pantallas. Si se definen varias pantallas, las opciones indicar´n a XFree86 d´nde se encuentra a a o f´ ısicamente una con relaci´n a la otra. Por ejemplo: o Section "ServerLayout" Identifier Screen Screen Screen EndSection

"Main Layout" "Screen 1" 0 "Screen 2" 1 RighOf "Screen 1" "Screen 3" Relative "Screen 1" 2048 0

Jose Antonio Escart´ Vigo, Junio 2005. ın

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 ı a 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. e Al usar un nuevo m´dulo llamado Xinerama, se pueden tratar varios monitores como si fuese un o unico 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 o Esta secci´n define varios indicadores de opci´n de Xfree86. Las configuraciones predeterminadas pao o ra estos indicadores son v´lidas en casi todas las situaciones y necesitar´n modificaciones en contadas a a ocasiones. Si se necesita investigar estas opciones, los comentarios que se encuentran en el archivo de configuraci´n son bastante clarificadores. o

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 Driver Option Option Option Option EndSection

"Generic Keyboard" "keyboard" "CoreKeyboard" "XkbRules" "xfree86" "XkbModel" "pc105" "XkbLayout" "es"

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 6. Interfaz gr´fico a

55

Section "InputDevice" Identifier Driver Option Option Option Option Option EndSection Section "InputDevice" Identifier Driver Option Option Option Option Option EndSection Section "Device" Identifier Driver Option EndSection Section "Monitor" Identifier HorizSync VertRefresh Option EndSection

"Configured Mouse" "mouse" "CorePointer" "Device" "Protocol" "Emulate3Buttons" "ZAxisMapping"

"/dev/psaux" "PS/2" "true" "4 5"

"Generic Mouse" "mouse" "SendCoreEvents" "Device" "Protocol" "Emulate3Buttons" "ZAxisMapping"

"true" "/dev/input/mice" "ImPS/2" "true" "4 5"

"Generic Video Card" "vesa" "UseFBDev"

"true"

"Generic Monitor" 28-50 43-75 "DPMS"

Section "Screen" Identifier "Default Screen" Device "Generic Video Card" Monitor "Generic Monitor" DefaultDepth 24 SubSection "Display" Depth 1 Modes "1600x1200" "1280x1024" EndSubSection SubSection "Display" Depth 4 Modes "1600x1200" "1280x1024" EndSubSection SubSection "Display" Depth 8 Modes "1600x1200" "1280x1024" EndSubSection SubSection "Display" Depth 15 Modes "1600x1200" "1280x1024" EndSubSection SubSection "Display" Depth 16 Modes "1600x1200" "1280x1024" EndSubSection SubSection "Display" Depth 24 Modes "1600x1200" "1280x1024" EndSubSection EndSection Section "ServerLayout" Identifier "Default Layout" Screen "Default Screen" InputDevice "Generic Keyboard" InputDevice "Configured Mouse" InputDevice "Generic Mouse" EndSection Section "DRI" Mode EndSection

"1280x960" "1152x864" "1024x768" "800x600" "640x480"

"1280x960" "1152x864" "1024x768" "800x600" "640x480"

"1280x960" "1152x864" "1024x768" "800x600" "640x480"

"1280x960" "1152x864" "1024x768" "800x600" "640x480"

"1280x960" "1152x864" "1024x768" "800x600" "640x480"

"1280x960" "1152x864" "1024x768" "800x600" "640x480"

0666

6.1.2.

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. o $vi ~/.xinitrc, . . . para editar el archivo. A˜adir las siguientes l´ n ıneas para arrancar KDE: #!/bin/sh startkde
Jose Antonio Escart´ Vigo, Junio 2005. ın

56

Servidor Linux para conexiones seguras de una LAN a Internet A˜adir las siguientes l´ n ıneas para arrancar GNOME: #!/bin/sh gnome-session

Si el archivo no est´ vac´ probablemente la ultima l´ a ıo, ´ ınea sea un comando exec. Es necesario cambiarlo por la opci´n que hayamos escogido. o

6.2.

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 o a sobre la pantalla. El gestor de ventanas no dicta c´mo debe utilizar las ventanas la propia aplicaci´n. Esto o o 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. a o 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 o a 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. o o Los gestores de ventanas generalmente son m´s peque˜os que los escritorios y est´n m´s orientados a n a a hacia usuarios expertos, que se sienten m´s a gusto con un interfaz de l´ a ınea de comandos. Como las “X” no especifican un gestor de ventanas en particular, a lo largo de los a˜os han aparecido n muchos. Algunos de los m´s populares para Linux son fvwm2, Window Maker, blackbox y AfterStep. Mua chos 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 a a ı, otros: twm: Tab Windows Manager, gestor de ventanas minimalista que proporciona el conjunto de utilidades m´s b´sico de cualquier otro. a a 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. a 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. e a Enlightenment: Era el gestor predeterminado de GNOME. Es muy grande, pero muy atractivo a la vista. Posiblemente es el m´s configurable de todos. a Sawfish: Enormemente configurable, pero mucho m´s ligero que Enlightenment es ahora el gestor a por defecto en el entorno de escritorio GNOME, pero puede ser usado sin ´l. Se est´ convirtiendo e a r´pidamente en uno de los gestores con m´s aceptaci´n. a a o Kwin: El gestor de ventanas KWin es el gestor por defecto para el entorno KDE. Soporta temas personalizados.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 6. Interfaz gr´fico a

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 e las “X”.

6.3.

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 o que representa una aplicaci´n. La aplicaci´n se abrir´ entonces, utilizando el archivo. Los escritorios o o a tambi´n pueden suministrar otras aplicaciones. e En general, los escritorios est´n orientados a los usuarios m´s novatos (aunque los usuarios avanzados a a tambi´n los encuentran incre´ e ıblemente utiles). 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 o incluido. Ello es debido a que han desarrollado un interfaz m´s vers´til y agradable a la vista. a a Al final, la elecci´n del gestor de ventanas es solo cuestion de gustos. En mi caso, para la elaboraci´n o o del proyecto he utilizado GNOME como entorno de escritorio y las bibliotecas KDE para ejecutar la A aplicaci´n Kile, un editor de textos L TEX. o

6.3.1.

Kde

KDE1 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 o conjunto de bibliotecas que, si se usan, permiten a una aplicaci´n mejorar algunas caracter´ o ısticas especiales que no las ofrecen el resto. Esto incluye cosas como soporte a pinchar y arrastrar, soporte de impresi´n o estandarizado, etc. El punto negativo de este tipo de t´cnicas de gesti´n de ventanas es que una vez que una aplicaci´n e o o se dise˜a para ejecutarse con KDE, requiere KDE para trabajar. Esto es un gran cambio con respecto a n 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 a de herramientas orientadas a objetos est´ndar que permite construir otras herramientas, algo que s´lo a o est´ disponible con X-Windows. a

1K

Desktop Environment, entorno de escritorio K.
Jose Antonio Escart´ Vigo, Junio 2005. ın

58

Servidor Linux para conexiones seguras de una LAN a Internet

6.3.2.

Gnome

Hasta hace pocos a˜os hab´ algunos problemas con las restricciones de licencias impuestas por los n ıa desarrolladores de la biblioteca Qt3, en la que KDE est´ basado. Estaba prohibido el uso comercial de a KDE sin pagar derechos. El proyecto GNOME1 comenz´ debido a esta resticci´n. o o Hace un tiempo se revis´ la licencia de KDE. La licencia revisada, conocida como QPL, es ahora m´s o a abierta y permite su uso comercial. Sin embargo, es distinta la licencia GPL y el estilo de licencias de Berkley usado por la mayor´ de los paquetes que usan las distribuciones Linux. ıa 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 o 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 gea neral 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, o o GNOME es muy interesante. Define sus interfaces con el resto del mundo mediante tecnolog´ CORBA2 . ıa De esta manera, cualquier sistema de desarrollo que pueda comunicarse usando CORBA puede utilizarse para desarrollar aplicaciones compiladas en GNOME.

6.3.3.

Otros entornos de escritorio

No solo existen KDE o GNOME, tambi´n podemos encontrar estos otros entornos de escritorio: e CDE3 : Desarrollado por algunos fabricantes de Unix, es uno de los m´s primitivos. A sido portado a 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. e

de modelo de objeto de red GNU. Object Request Broker Architecture, es un est´ndar que establece una plataforma de desarrollo de sistemas a distribuidos facilitando la invocaci´n de m´todos remotos bajo un paradigma orientado a objetos. o e 3 Common Desktop Environment, entorno de escritorio com´ n. u
2 Common
Jose Antonio Escart´ Vigo, Junio 2005. ın

1 Entorno

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: o o http://eia.udg.es/ ˜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. o o a n Cada dise˜o de red se divide en siete partes l´gicas, cada una de las cuales controla una parte diferente n o de la tarea de comunicaci´n. Este dise˜o de siete capas se denomina Modelo de referencia OSI. Dicho o n modelo fue creado por la Organizaci´n internacional de est´ndares (ISO, International Standard Organio a zation) para proporcionar un modelo l´gico para la descripci´n de comunicaciones de red y ayuda a los o o suministradores a estandarizar los equipos y el software. La tabla 7.1 muestra la composici´n del modelo. o Cuadro 7.1: Estructura del modelo de referencia OSI N.o de capa OSI Capa 7 Capa 6 Capa 5 Capa 4 Capa 3 Capa 2 Capa 1 Nombre de la capa Aplicaci´n o Presentaci´n o Sesi´n o Transporte Red Enlace de datos F´ ısica Protocolos de ejemplo DNS, FTP, HTTP, SMTP, Telnet XDR Pipes con nombre, RPC NetBIOS, TCP, UDP ARP, IP, IPX, OSPF Acrcnet, Ethernet, Token Ring Coaxial, Fibra ´ptica, UTP o

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 a o ´ptica sirven para distintos prop´sitos: el cable coaxial se usa en instalaciones LAN antiguas as´ como en o ı servicios de Internet a trav´s de redes de TV por cable. UTP se usa normalmente en cableados dom´sticos, e e mientras que la fibra ´ptica se suele usar para conexiones de distancias largas que requieren una capacidad o de carga alta.

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 e s´ cuando intentan comunicarse con otro nodo. Un ejemplo de una direcci´n de la capa de enlace de datos ı o es la direcci´n MAC de nuestra tarjeta de red. En una red Ethernet, las direcciones MAC son el medio por o 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´ determinados por su suministrador de hardware. a ıa IBM utilizaba Token Ring para sus redes de PC y SNA para la mayor parte de su hardware m´s grande; a DEC utilizaba un est´ndar diferente y Apple otro. La mayor´ de las empresas actuales utilizan Ethernet a ıa porque es el m´s extendido y econ´mico. a o

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 o secundaria. En los sistemas de red TCP/IP, se trata de una direcci´n IP. Esta direcci´n IP en nuestro o o ordenador nos ayuda a enrutar los datos de un lugar a otro de la red y sobre Internet. Esta direcci´n o es un n´mero unico para identificar nuestro ordenador en una red basada en IP. En algunos casos, este u ´ n´mero es unico para un ordenador; ninguna otra m´quina en Internet puede tener dicha direcci´n. Es u ´ a o el caso de las direcciones IP normales que se pueden enrutar p´blicamente. En las LAN internas, las u m´quinas normalmente utilizan bloques de direcciones IP. Estas se han reservado s´lo para su uso interno a o y no se enrutar´n por Internet. Estos n´meros pueden no ser unicos de una red a otra, pero siguen siendo a u ´ unicos dentro de cada LAN. Aunque dos ordenadores pueden tener la misma direcci´n IP privada sobre ´ o diferentes redes internas, nunca tendr´n la misma direcci´n MAC, ya que es un n´mero de serie asignado a o u por el fabricante. Existen excepciones a esta regla pero, en general, la direcci´n MAC identificar´ de forma o a unica 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 o a los paquetes se env´ y se reciben con consistencia en el otro punto. Permite una correcci´n de errores a ıan o nivel de bits, una retransmisi´n de segmentos perdidos y una reorganizaci´n de los paquetes y el tr´fico o o a desfragmentado. El protocolo de datagramas de usuario (UDP, User Datagram Protocol) es un esquema m´s ligero a empleado para tr´fico multimedia y para transmisiones cortas, como las solicitudes DNS. Tambi´n efect´a a e u detecci´n de errores, pero no proporciona ninguna facilidad para reorganizar los datos o asegurar la llegada o de datos. Esta capa y la capa de red es donde operan la mayor´ de los cortafuegos. ıa

Capa de sesi´n o
La capa de sesi´n se encuentra implicada principalmente en la configuraci´n de una conexi´n y en o o o su cierre posterior. Tambi´n realiza autenticaciones para determinar qu´ partes pueden participar en una e e sesi´n. Se utiliza principalmente en aplicaciones espec´ o ıficas.

Capa de presentaci´n o
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 o o o o la capa de presentaci´n y la de aplicaci´n son b´sicamente iguales. o o a
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 7. Infraestructura de redes

61

Capa de aplicaci´n o
Este nivel final es donde el programa de la aplicaci´n obtiene los datos, que pueden ser FTP, HTTP, o 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´ de los ataques se producen en esta ıa capa.

7.2.

Direcciones IP

Cada computador (host) y cada dispositivo de encaminamiento (router) tendr´ una direcci´n unica a o ´ cuya longitud ser´ de 32 bits, que ser´ utilizada en los campos direcci´n origen y direcci´n destino de a a o o la cabecera IP. Esta direcci´n consta de un identificador de red y de un identificador de host. La direco ci´n est´ codificada para permitir una asignaci´n variable de los bits utilizados al especificar la red y el o a o computador. La direcci´n IP m´s peque˜a es la 0.0.0.0 y la mayor es 255.255.255.255. o a n 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 o o 0 en los cuatro primeros bits. Las direcciones est´n codificadas para permitir una asignaci´n variable de a o 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 o 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 u u selecci´n de clase B, 14 bits de red y 16 bits de host. o Clase C : Muchas redes, cada una con pocos ordenadores. 3 bits de selecci´n de clase C, 21 bits de o 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 o u ordenadores. Podemos enviar un paquete IP a un grupo de m´quinas que por ejemplo pueden estar a cooperando de alguna manera mediante la utilizaci´n de una direcci´n de grupo o o 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 u las tres clases primarias de direcciones IP.

Jose Antonio Escart´ Vigo, Junio 2005. ın

62

Servidor Linux para conexiones seguras de una LAN a Internet

Cuadro 7.2: N.o de Hosts por red Clase A B C Bits en el prefijo 7 14 21 M´ximo n.o de redes a 128 16384 2097152 Bits en el sufijo 24 16 8 M´ximo n.o de a hosts por red 16777216 65536 256

Normalmente las direcciones se suelen escribir en notaci´n decimal con puntos (calculando cada ocho o bits). Por ejemplo, la direcci´n 82CE7C0D (1000 0010 1100 1110 0111 1100 0000 1101 que es de clase B) o se escribe como 130.206.124.13. 82 CE 7C 0D = = = = 8*16 + 2 = 128 + 2 = 130 C*16 + E = 12 * 16 + 14 = 192 + 14 = 206 7 * 16 + C = 112 + 12 = 124 D = 13

Algunas direcciones de red se utilizan como direcciones especiales (Vease figura 7.2): Este host: La direcci´n 0.0.0.0 significa esta red o este host y unicamente es usada por los ordenadores o ´ cuando son arrancados, sin que vuelva a utilizarse posteriormente. De esta forma las m´quinas se a pueden referir a su propia red sin saber su n´mero, pero la clase s ha de ser conocida para saber u 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). u Difusi´n de red local o limitada: La direcci´n 255.255.255.255 (todos 1s) se usa como direcci´n para o o o indicar todos los ordenadores de la red indicada y es utilizada para hacer difusi´n. o Difusi´n de una red distante o dirigida (broadcast): Tambi´n se puede hacer difusi´n a una red o e o distante poniendo la direcci´n de la red y rellenando el campo ordenador con 1s. o Retrociclo: Las direcciones 127.xx.yy.zz se reservan para pruebas de realimentaci´n (localhost). Los o paquetes que tienen esta direcci´n no son enviados por la red sino que son procesados localmente y o 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´ a la red local sin que el transmisor conozca su n´mero. Esta ıen u caracter´ ıstica tambi´n se usa para la detecci´n de fallos en el software de red. e o

Figura 7.2: Direcciones IP reservadas

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 7. Infraestructura de redes

63

Para estar seguros de que las direcciones Internet son unicas, 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 u o o de INTERNIC (Internet Network Information Center). La autoridad central s´lo es necesaria para asignar o la porci´n de la direcci´n correspondiente a la red, cuando una organizaci´n ya tiene su prefijo, puede o o o asignar un unico 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 a o 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 u a e el rendimiento de la red, pues permite enviar directamente el tr´fico a una red en concreto sin tener que a pasar por los dispositivos de encaminamiento. Que la direcci´n de la red est´ guardada en la direcci´n Internet tiene algunos inconvenientes: o e o Si la direcci´n IP identifica la red a la que se conecta el ordenador, no al ordenador que tenemos o conectado, no es posible asignarle a un ordenador una direcci´n IP permanente. Por lo tanto, si o movemos un ordenador de una red a otra su direcci´n IP debe cambiar. Este problema se da cuando, o por ejemplo, nos llevamos un ordenador port´til de un sitio a otro y queremos conectarlo a la red. a Como el n´mero de ordenadores asignados a la clase C (255) puede resultar insuficiente en muchos u casos y que la transici´n a la clase B no es f´cil debido a que muchos programas no permiten que o a una red f´ ısica tenga m´ltiples direcciones, no se pueden introducir nuevas direcciones poco a poco y u 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 a tenga dos direcciones diferentes, el encaminamiento se hace teniendo en cuenta la direcci´n IP, el o comportamiento de los paquetes puede ser totalmente diferente dependiendo de la direcci´n que o 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 o a que utiliza esta direcci´n. Debido a la configuraci´n de la red y dependiendo de por donde se enruten o o los paquetes en nuestra red, algunos equipos pueden resultar inalcazables.

7.2.1.

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 e unidades m´s peque˜as, si deben atravesar una red o subred cuyo tama˜o de paquete sea m´s peque˜o. a n n a n En la m´quina destino, estas unidades son reensambladas para volver a tener el datagrama original que a 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.

7.2.2.

Encaminamiento IP (router y gateway)

Cuando un paquete llega a un dispositivo de encaminamiento, se debe determinar cu´l es la direcci´n a o del siguiente dispositivo de encaminamiento teniendo en cuenta la direcci´n IP destino que hay almaceo nada en el campo correspondiente del paquete y de la informaci´n que hay almacenada en las tablas de o encaminamiento. Hay que tener en cuenta que es necesario realizar una conversi´n entre la direcci´n IP o o y la direcci´n MAC (cuando el enlace entre los dos dispositivos de encaminamiento sea una LAN) que se o efect´a de manera autom´tica mediante el protocolo ARP. u a Esta tabla puede ser est´tica o din´mica. En el primer caso puede contener rutas alternativas que a a ser´n utilizadas cuando alg´n dispositivo de encaminamiento no est´ disponible. Las tablas din´micas son a u e a m´s flexibles cuando aparecen errores o congesti´n en la red. Estas tablas tambi´n pueden proporcionar a o e servicios de seguridad y de prioridad, por ejemplo, para asegurarse que a ciertos datos no se les permita pasar por determinadas redes.
Jose Antonio Escart´ Vigo, Junio 2005. ın

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 e anteriormente, el ordenador origen incluye en la cabecera del paquete la direcci´n de los dispositivos de o encaminamiento que debe utilizar el paquete.

7.2.3.

M´scaras de red y notaci´n de barra inclinada a o

El prop´sito de configurar una m´scara es, en primer lugar, decirle al sistema qu´ bits de la direcci´n o a e o IP corresponden al componente de red y qu´ bits corresponden al componente host. Basados en estos dos e componentes de red, un host puede determinar cu´l es su direcci´n de broadcast o de difusi´n de red (es a o o decir, la direcci´n IP que corresponde al env´ de un paquete a todas las m´quinas de la red local). o ıo a Normalmente nos referiremos a las redes IP como m´scaras de red o con una barra inclinada y un a n´mero. Ambas son formas de definir el tama˜o de la red. Para entenderlas tenemos que conocer un poco u n de la estructura de la direcci´n IP. Una direcci´n IPv4 est´ndar esta formada por 32 bits. Normalmente o o a 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 192.168.1.1, el ordenador ve lo siguiente: 11000000 10101000 00000001 00000001 Una m´scara de red normalmente es un conjunto de cuatro n´meros que nos indica d´nde finalizan los a u o bits de red y donde comienzan los de hosts. Normalmente tiene la siguiente apariencia: 255.255.255.0 Una forma r´pida de calcular el tama˜o de una red representada por una m´scara de red es restar cada a n a octeto de 256 y multiplicar dichos n´meros entre s´ Por ejemplo, la m´scara de red de 255.255.255.248 u ı. a describe una red de 8 IPs porque: (256-255) * (256-255) * (256-255) * (256-248) = 8 Una m´scara de red de 255.255.255.0 describe una red de 256 IPs ya que: a (256-255) * (256-255) * (256-255) * (256-0) = 256

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 7. Infraestructura de redes

65

Y por ultimo, una m´scara de red de 255.255.0.0 describe una red de 65.536 direcciones IP porque: ´ a (256-255) * (256-255) * (256-0) * (256-0) = 65.536 La notaci´n de barra inclinada es algo m´s dif´ de entender, aunque utiliza el mismo concepto. El o a ıcil n´mero que se encuentra detras de la barra inclinada indica la cantidad de bits que describen la direcci´n u o 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 o a e o u obtenendremos el n´mero de bits que desciben la direcci´n de host dentro de la red local. Por ejemplo la u o notaci´n 192.168.0.0/24 describe una red que empieza en 192.168.0.0 que contiene 256 direcciones IP de o tama˜o (es decir, el mismo tama˜o que el de arriba con una m´scara de red de 255.255.255.0). n n a Los 32 bits en una direcci´n IP menos los 24 bits para el prefijo de red deja 8 bits activados (igual a 1) o para los hosts de la red local. Un n´mero binario de bits de 11111111 convertido en decimal es 255. Si las u matem´ticas binarias nos resultan complicadas, podemos utilizaremos la siguiente tabla para recordarlo. a Cuadro 7.3: Notaci´n de barra inclinada en IPs o Notaci´n de barra inclinada o /24 /25 /26 /27 /28 /29 /30 /31 /32 Tama˜ o de la red n 256 direcciones IP 128 direcciones IP 64 direcciones IP 32 direcciones IP 16 direcciones IP 8 direcciones IP 4 direcciones IP 2 direcciones IP 1 direcci´n IP o

7.2.4.

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´ encontrar una red a ıcil capaz de tener tantas m´quinas agrupadas juntas. Por ejemplo, Ethernet s´lo permite configurar 1.024 a o hosts por segmento. Para resolver este problema, estas redes enormes se dividen en subredes m´s peque˜as. Esto se hace a n expandiendo el n´mero de bits usados para representar la direcci´n de red, una t´cnica conocida como u o e subneting ´ CIDR (Classless Inter Domain Routing, enrutamiento interdominio sin clases) debido a que o viola la descripci´n de las redes A, B y C. o Un lugar t´ ıpico para ver esto es en las redes IP privadas. La mayor´ de las organizaciones no tienen 16 ıa millones de computadoras, sino que cada divisi´n de la organizaci´n se convierte en una subred. La mayor´ o o ıa de las veces, la elecci´n razonable es escoger una m´scara de 24 bits (255.255.255.0) para conseguir 254 o a m´quinas por red (recordamos que .0 es la direcci´n de red y .255 la direcci´n de broadcast), un nivel a o o bastante razonable de agrupamiento de m´quinas. a Cuando se utilizan subredes, en las tablas de encaminamiento se agregan entradas de la forma (´sta e red, subred, 0) y (´sta red, ´sta subred, 0). De esa forma, un dispositivo de encaminamiento de la subred e e k sabe c´mo llegar a todas las subredes y a todos los hosts de la subred k. No necesita saber nada de los o hosts de otras subredes. Cada encaminador lo que debe hacer es un AND booleano con la m´scara de la a subred para eliminar el n´mero de host y buscar la informaci´n resultante en sus tablas. u o

Jose Antonio Escart´ Vigo, Junio 2005. ın

66

Servidor Linux para conexiones seguras de una LAN a Internet

7.2.5.

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 u n o punto a punto para varias computadoras que quieran usarla (con frecuencia, al mismo tiempo). Para hacer esto a´n m´s dif´ s´lo tenemos una direcci´n IP. u a ıcil, o o 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. o Nuestra red LAN, usa un rango de direcciones IP privadas, para redes peque˜as, el rango 192.168 n trabaja bien. Lo que queremos es que nuestro servidor enrute los paquetes entre las m´quinas de la LAN de forma a que cuando vayan a Internet, parezca que los origina ´l. Cuando vuelve un paquete como respuesta, el e servidor sabe que realmente el paquete va destinado a una m´quina de la red y se lo env´ a ıa. No se puede asumir como unica 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 o 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 o Lo primero que necesitamos es asegurarnos de que tenemos cargado el m´dulo iptables nat en el kernel. o Despu´s instalaremos el siguiente paquete: e #apt-get install ipmasq Si nuestra red contiene la red 192.168.1.0 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 192.168.0.0/24 -d 0.0.0.0/0 -j MASQUERADE : A˜ade la regla de enmascaramiento. Todos los paquetes que salgan por enrutados desde la red a n Internet se enmascar´n a #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 a ı, y despu´s se env´ al emisor original de la LAN. e ıa 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 a cliente pasa toda la informaci´n de usuario/contrase˜a a trav´s de este puerto. Sin embargo, cuando el o n e cliente pide al servidor que le env´ un archivo, el servidor inicia una conexi´n nueva de vuelta al cliente. Si ıe o el cliente est´ enmascarado, entonces la m´quina probablemente rechace la conexi´n porque no tendr´ un a a o a programa escuchando en ese puerto y la transferencia se interrumpir´. a FTP es uno de los muchos protocolos que hacen cosas extra˜as. A fin de permitir el enmascaramiento de n estos protocolos, debemos colocar un proxy especial. IPTables esta equipado con los proxies m´s comunes: a FTP, IRC y otros. Para usar estos m´dulos simplemente hay que incluir la sentencia insmod en tiempo o de arranque. Por ejemplo, podemos a˜adir a los scripts de arranque: n insmod ip_masq_ftp insmod ip_masq_irc
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 7. Infraestructura de redes

67

Tambi´n lo podemos hacer con reglas, a˜adiendo el redireccionamiento de los puertos que utilice el e n 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) a por el puerto 3128 de nuestra m´quina: a #iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

7.3.

Resoluci´n de direcciones o

Dos ordenadores de una red f´ ısica s´lo pueden comunicarse si cada uno de ellos conoce la direcci´n o o f´ ısica del otro. Cuando enviamos un paquete IP entre estas dos m´quinas s´lo indicamos la direcci´n IP. a o o Por lo tanto es necesario tener un mecanismo que nos proporcione la correspondencia entre la direcci´n o IP y la direcci´n f´ o ısica. Como la direcci´n IP es virtual, pues es mantenida por software, ning´n elemento hardware entiende o u 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 o o o o host. La traslaci´n entre direcciones IP y direcciones f´ o ısicas es local a la red. Un ordenador s´lo puede obo tener la direcci´n f´ o ısica de otro si ambos se encuentran en la misma red f´ ısica. Existen tres mecanismos para hacer la traslaci´n: o El primero utiliza un tabla en cada m´quina para almacenar para cada direcci´n IP la correspona o diente direcci´n f´ o ısica. Cada entrada de la tabla contiene una direcci´n IP y una direcci´n f´ o o ı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´ o o o ısica. Direcci´n IP o 130.206.124.13 130.203.124.31 Direcci´n Ethernet o 0F:13:26:36:F3:B4 A4:34:27:AE:B1:10

El segundo realiza la traducci´n mediante una funci´n matem´tica. Aunque muchas tecnolog´ o o a ıas utilizan direcciones f´ ısicas est´ticas, algunas usan direccionamiento configurable, es decir, el admia nistrador de la red elige tanto la direcci´n f´ o ısica como la direcci´n IP. En este caso, los valores pueden o ser elegidos para que la traslaci´n sea trivial. o El tercero es el m´s interesante pues usa una computaci´n distribuida en la que los dos ordenadores a o intercambian mensajes din´micamente. En este caso, el ordenador que conoce la direcci´n IP de otro a o ordenador pero desconoce su direcci´n f´ o ısica, env´ un mensaje a la red con la direcci´n IP conocida ıa o y recibe de la red una respuesta con la direcci´n f´ o ısica. Existen dos posibles dise˜os: n 1. En el primero hay uno o m´s servidores que se encargan de enviar las respuestas. La principal a ventaja de este dise˜o es que es centralizado y por lo tanto f´cil de configurar, gestionar y n a controlar. Tiene el inconveniente de que estos servidores pueden ser un cuello de botella en una red grande. En el segundo dise˜o, se hace un broadcast de la petici´n (env´ a la direcci´n de difusi´n de red) n o ıo o o y todos los ordenadores participan en la resoluci´n de la direcci´n, en concreto responde el que o o tiene la direcci´n pedida. La principal ventaja de este dise˜o es que el c´lculo es distribuido. o n a Este dise˜o es el utilizado en el ARP, una de las ventajas de este m´todo sobre tener unos n e archivos de configuraci´n es su sencillez. El propio protocolo se encarga de construir las tablas o en lugar de tener que hacerlo el administrador del sistema.

2.

Jose Antonio Escart´ Vigo, Junio 2005. ın

68

Servidor Linux para conexiones seguras de una LAN a Internet

7.3.1.

ARP (Adress Resolution Protocol)

En cada m´quina se tiene una tabla que identifica la correspondencia que hay entre la direcci´n f´ a o ısica y la direcci´n IP del resto de m´quinas. Cuando tenemos que enviar un paquete a una direcci´n IP de la o a o que se desconoce la direcci´n f´ o ı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´ o ısica de una m´quina de la que conoce a la direcci´n IP. Para conseguirlo debe acceder a recursos de bajo nivel. o ´ Unicamente hay dos tipos de mensaje que tienen el mismo formato: petici´n ARP y respuesta ARP. o 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 e debe encargar de poner el valor correspodiente y el receptor de mirar el contenido de ese campo. Como Ethernet asigna un unico valor para los dos mensajes ARP, el receptor debe examinar el campo operaci´n ´ o del mensaje ARP para determinar si es el mensaje recibido es una petici´n o una respuesta. Es importante o destacar, que este protocolo s´lo puede ser utilizado en aquellas redes en las cuales es posible hacer un o broadcast (difusi´n de red). o Cuando no conocemos la direcci´n f´ o ısica de la m´quina a la que queremos enviar el mensaje es necesario a 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 a a a n guardaremos una tabla con las parejas de direcciones (f´ ısica, IP). Cuando esta tabla est´ llena se ir´n e a borrando las m´s antiguas y las que lleven m´s tiempo sin ser utilizadas. a a

7.3.2.

RARP (Reverse Address Resolution Protocol)

Cada m´quina, adem´s de su direcci´n f´ a a o ısica que est´ en la tarjeta de red, debe tener guardada en a alg´n dispositivo la direcci´n IP que le corresponde. u o Pero, ¿c´mo una m´quina que no disponga de disco duro puede determinar su direcci´n IP?. El o a o 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´ o a o ıa una petici´n a un servidor que hay en otra m´quina y espera hasta que recibe la respuesta. Suponemos o a que el servidor tiene acceso a un disco que contiene una base de datos de direcciones IP. En la petici´n, la o m´quina que necesita conocer su direcci´n IP unicamente debe identificarse a si misma, y de esta manera a o ´ el servidor puede buscar su direcci´n IP y enviarle una respuesta. Tanto la m´quina que hace la petici´n o a o como el servidor que responde usan direcciones f´ ısicas durante su breve comunicaci´n. o ¿C´mo puede la m´quina conocer la direcci´n del servidor?. Generalmente no la conoce, lo que hace o a o es hacer un broadcast (difusi´n de red) de su petici´n a todas las m´quina de la red local y esperar que o o a alg´n servidor responda. De alguna manera lo que hace la m´quina es enviar un mensaje diciendo: u a “ mi direcci´n f´ o ısica Ethernet es XX.XX.XX.XX.XX.XX Sabe alguien cual es mi direcci´n IP?” o Como podemos ver en esta pregunta, para identificarse, la m´quina utiliza su direcci´n f´ a o ısica lo que tiene la ventaja de que siempre est´ disponible y de que es uniforme para todas las m´quinas de una red. a a En realidad lo que queremos es encontrar la direcci´n IP de una m´quina de la que conocemos su o a direcci´n f´ o ısica. El protocolo para conseguir esto es el RARP que es una adaptaci´n del ARP visto o 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´ a o ısica, por ejemplo en una trama Ethernet.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 7. Infraestructura de redes

69

7.4.

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.

7.4.1.

ICMP (Internet Control Message Protocol)

Permite el intercambio de mensajes de control y de supervisi´n entre dos ordenadores. Toda anomal´ o ı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. o o Estos son los problemas que m´s frecuentemente se encarga de informar: a 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´ el tr´fico por una ruta m´s corta ıe a a (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 a • ICMP(4): Petici´n de control de flujo o • 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 o a o • ICMP(15) y ICMP(16): Petici´n de informaci´n y la respuesta o o • ICMP(9) y ICMP(10): Petici´n de rutas y su publicaci´n o o

7.4.2.

OSPF (Open Shortest Path First)

El protocolo OSPF (abrir primero la trayectoria m´s corta) se usa muy frecuentemente como protocolo a de encaminamiento interior en redes TCP/IP. Cuando se dise˜´ se quiso que cumpliera los siguientes no requisitos: Ser abierto en el sentido de que no fuera propiedad de una compa˜´ nıa Que permitiera reconocer varias m´tricas, entre ellas, la distancia f´ e ısica y el retardo Ser din´mico, es decir, que se adaptar´ r´pida y autom´ticamente a los cambio de la topolog´ a a a a ı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 unico ordenador no puede conocer la estructura coma ´ pleta de Internet Que implementara un m´ ınimo de seguridad

Jose Antonio Escart´ Vigo, Junio 2005. ın

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 multiacceso1 con difusi´n de red (por ejemplo, la mayor´ de redes LAN). o ıa Redes multiacceso sin difusi´n (por ejemplo, la mayor´ de redes WAN de conmutaci´n de paquetes). o ıa o

La funci´n del OSPF es encontrar la trayectoria m´s corta de un dispositivo de encaminamiento a o a todos los dem´s. Cada dispositivo de encaminamiento tiene almacenada en una base de datos la topolog´ a ıa de la red de la que forma parte.

7.4.3.

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 e los paquetes de la forma m´s eficiente posible. Es posible que se deban considerar algunas restricciones a 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.” a “Nuestros mensajes no deben pasar por pa´ enemigos.” ıses 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 o a cada uno de los vecinos enviando mensajes. La esencia de BGP es el intercambio de informaci´n de o encaminamiento entre dispositivos de encaminamiento. La informaci´n de encaminamiento actualizada se o va propagando a trav´s de un conjunto de redes. e Involucra tres procedimientos funcionales, que son: Obtener informaci´n del vecino o Detectar los vecinos alcanzables Detectar las redes alcanzables

7.4.4.

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 a a o e es transmitida al emisor del multicast utilizando este protocolo.

7.5.

Protocolos de transporte

Los protocolos de transporte tienen la funci´n de actuar de interficie entre los niveles orientados a la o aplicaci´n y los niveles orientados a la red dentro de la jerarqu´ de protocolos TCP/IP. Se encargan de o ıa ocultar a los niveles altos del sistema el tipo de tecnolog´ a la que se est´n conectando los ordenadores. ıa e En la jerarqu´ de TCP/IP se definen dos protocolos de transporte: el UDP y el TCP. El UDP es un ıa protocolo no orientado a la conexi´n mientras que el TCP es orientado a la conexi´n. o o

1 Diremos que una red es multiacceso si tiene varios dispositivos de encaminamiento que se pueden comunicar con los dem´s. a 2 Multicast es el env´ de la informaci´n a m´ ltiples destinos simult´neamente usando la estrategia m´s eficiente para el ıo o u a a env´ del mensajes sobre cada enlace de la red unicamente una vez y creando copias cuando los enlaces en los destinos se ıo ´ dividen. En comparaci´n con multicast, los env´ de un punto a otro se le denomina unicast, y el env´ a todos los nodos o ıos ıo se le denomina broadcast.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 7. Infraestructura de redes 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. o o

71

El puerto es un n´mero de 16 bits que se coloca en cada paquete y sirve para identificar la aplicaci´n u o que requiere la comunicaci´n. La utilidad de los puertos es que permite multiplexar aplicaciones o 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. o Para establecer una comunicaci´n entre dos m´quinas se ha de utilizar uno de los protocolos de transo a porte (TCP o UDP) y es necesario conocer tanto el puerto que identifica la aplicaci´n destino como la o direcci´n IP que identifica el terminal o el servidor dentro del conjunto de redes. o Los datos que se env´ durante la comunicaci´n son empaquetados por los protocolos del nivel de ıan o 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 o la comunicaci´n y para hacerlo necesita conocer la direcci´n IP asignada al ordenador servidor y el puerto o o de la aplicaci´n que identifica la aplicaci´n que se quiere utilizar. o o El cliente conoce su direcci´n IP (direcci´n origen), la direcci´n del servidor (direcci´n destino) y el o o o o puerto que identifica su aplicaci´n cliente. Para que pueda saber el puerto destino que identifica la aplio caci´n deseada, se utilizan los llamados puertos conocidos que consiste en un n´mero de puerto reservado o u para identificar una aplicaci´n determinada (V´ase ap´ndice E). o e e El servidor responder´ a las peticiones de cualquier cliente. Como el cliente env´ en el datagrama a ıa 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. o

7.5.1.

UDP

Este protocolo es “no orientado a la conexi´n”, y por lo tanto no proporciona ning´n tipo de control o u de errores ni de flujo, aunque si que utiliza mecanismos de detecci´n de errores. Cuando se detecta un o error en un datagrama en lugar de entregarlo a la aplicaci´n se descarta. o 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 e o 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. a No preserva la secuencia de la informaci´n que proporciona la aplicaci´n. La informaci´n se puede o o o recibir desordenada (como ocurre en IP) y la aplicaci´n debe estar preparada por si se pierden o 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 a origen y en la m´quina destino. a 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. n Como la longitud m´xima del datagrama IP es de 65.535 bytes y la cabecera est´ndar de IP es de a a 20 bytes, la longitud m´xima de un datagrama UDP es de 65.515 bytes. a El campo suma de comprobaci´n (checksum) es un campo opcional de 16 bits que, a diferencia del o campo equivalente de la cabecera IP que solo proteg´ la cabecera, protege tanto la cabecera como ıa los datos.
Jose Antonio Escart´ Vigo, Junio 2005. ın

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´ ning´n mensaje para confirmar a o ıa u que se han recibido los datagramas, su utilizaci´n es adecuada cuando queremos transmitir informaci´n o o 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 o o e tener en cuenta que si en una transmisi´n de este tipo los destinos enviar´n confirmaci´n, f´cilmente el o a o a emisor se ver´ colapsado, pues por cada paquete que env´ recibir´ tantas confirmaciones como destinos ıa ıa ıa hayan recibido el paquete. Lo que realmente proporciona UDP respecto a IP es la posibilidad de multiplexaci´n de aplicaciones. o La direcci´n del puerto permite identificar aplicaciones gracias a la direcci´n del puerto. o o

7.5.2.

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´ n ı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: o o Puerto origen (16 bits): Es el punto de acceso de la aplicaci´n en el origen. o Puerto destino (16 bits): Es el punto de acceso de la aplicaci´n en el destino. o N´mero de secuencia (32 bits): Identifica el primer byte del campo de datos. En este protocolo no u se enumeran segmentos sino bytes, por lo que este n´mero indica el primer byte de datos que hay u en el segmento. Al principio de la conexi´n se asigna un n´mero de secuencia inicial (ISN, Initial o u Sequence Number) y a continuaci´n los bytes son numerados consecutivamente. o

Jose Antonio Escart´ Vigo, Junio 2005. ın

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 u o e reconocer los datos. Cuando el bit ACK est´ activo, este campo contiene el n´mero de secuencia del a u primer byte que espera recibir. Es decir, el n´mero ACK=1 indica el ultimo bit reconocido. u ´ Longitud de la cabecera (4 bits): Indica el n´mero de palabras de 32 bits que hay en la cabecera. De u 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 a n´mero 5. Si el TCP utiliza todos los campos de opciones la cabecera puede tener una longitud u m´xima de 60 bytes almacen´ndose en este campo el valor 15. a a 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´ a o ıfica del protocolo. • URG: Hay datos urgentes y en el campo “puntero urgente” se indica el n´mero de datos urgentes u que hay en el segmento. • ACK: Indica que tiene significado el n´mero que hay almacenado en el campo “n´mero de u u confirmaci´n”. o • PSH: Sirve para invocar la funci´n de carga (push). Como se ha comentado anteriormente con o esta funci´n se indica al receptor que debe pasar a la aplicaci´n todos los datos que tenga o o 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 o m´xima. No se debe confundir con el indicador URG que sirve para se˜alar que la aplicaci´n a n o ha determinado una parte del segmento como urgente. • RST: Sirve para hacer un reset de la conexi´n. o • SYN: Sirve para sincronizar los n´meros de secuencia. u • FIN: Sirve para indicar que el emisor no tiene m´s datos para enviar. a Ventana (16 bits): Indica cuantos bytes tiene la ventana de transmisi´n del protocolo de control de o 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 u en el campo de confirmaci´n y que el que env´ est´ dispuesto a aceptar. o ıa a Suma de comprobaci´n (16 bits): Este campo se utiliza para detectar errores mediante el compleo mento a uno de la suma en m´dulo 216-1 de todas las palabras de 16 bits que hay en el segmento m´s o a una pseudo-cabecera. La pseudo-cabecera incluye los siguientes campos de la cabecera IP: direcci´n o internet origen, direcci´n internet destino, el protocolo y un campo longitud del segmento. Con la o inclusi´n de esta pseudo-cabecera, TCP se protege a s´ mismo de una transmisi´n err´nea de IP. o ı o o Puntero urgente (16 bits): Cuando el indicador URG est´ activo, este campo indica cual es el ultimo a ´ 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 unica opci´n de entre las siguientes: a n ´ o • Tiemstamp: para marcar en que momento se transmiti´ el segmento y de esta manera monitoo rizar los retardos que experimentan los segmentos desde el origen hasta el destino. • Aumentar el tama˜o de la ventana. n • Indicar el tama˜o m´ximo del segmento que el origen puede enviar. n a
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 o o e otros datos que llegaron anteriormente en direcci´n B-A. As´ se reduce el n´ mero total de paquetes requeridos, porque de o ı u otra manera el ACK tendr´ que ocupar un paquete completo. Es una t´cnica de optimizaci´n que se usa cuando hay tr´fico ıa e o a de datos en ambos sentidos.

Jose Antonio Escart´ Vigo, Junio 2005. ın

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 n a trav´s de TCP a IP para su inclusi´n en la cabecera IP. Por ejemplo: prioridad (campo de 3 e o bits), retardo-normal / retardo-bajo, rendimiento-normal / rendimiento-alto, seguridad-normal / seguridad-alta y protecci´n (campo de 11 bits). o

7.6.

Protocolos de aplicaci´n o

Los protocolos de aplicaci´n se pueden dividir en dos grupos seg´n su protocolo de transporte: o u UDP : NFS, SNMP, DNS TCP : SMTP, TELNET, FTP, HTTP

7.6.1.

NFS (Network File System)

Utiliza el protocolo UDP y est´ basado en el RPC (Remote Procedure Call de SUN). El n´cleo del a u sistema operativo de la m´quina cliente es modificado con un nuevo tipo de sistema de fichero NFS, de a manera que cuando un programa intenta abrir, cerrar, leer o escribir en un fichero remoto, el c´digo NFS o es llamado en lugar del c´digo “normal” para acceder a los manejadores de los discos f´ o ısicos. El c´digo del o sistema de ficheros NFS usa el protocolo RPC de SUN para comunicar con el c´digo servidor NFS que se o ejecuta en la m´quina remota, leyendo o escribiendo bloques de ficheros en ´l. a e

7.6.2.

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´ SNMP es ıa descrito como un protocolo manager/agent.

7.6.3.

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 o direcciones sigue una estructura jer´rquica. Para hacer m´s sencillo el acceso a los sistemas, cada host a a 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 o e forma jer´rquica, a˜adiendo a la derecha del nombre del host una serie de identificadores que corresponden a n con la organizaci´n o empresa a la que pertenece el sistema. o Cuando en un comando entramos un nombre de m´quina, el sistema siempre convierte ese nombre en a una direcci´n IP antes de establecer la conexi´n. Desde la m´quina que necesita saber la direcci´n IP, o o a o se env´ un paquete UDP a un servidor DNS, que busca el nombre y devuelve la direcci´n IP. Con la ıa o direcci´n IP, el programa establece una conexi´n TCP con el destino, o le envia paquetes UDP. o o

7.6.4.

SMTP (Simple Mail Transfer Protocol)

Este es el protocolo dedicado a la transmisi´n de mensajes electr´nicos sobre una conexi´n TCP. o o o El protocolo especifica el formato de los mensajes definiendo la estructura de la informaci´n sobre el o 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 o de correo electr´nico. Una vez el mensaje es creado, el SMTP lo acepta y usa el protocolo TCP para o enviarlo a un m´dulo SMTP de otra m´quina. El TCP es el encargado de intercomunicar m´dulos SMTP o a o de las m´quina implicadas. a
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 7. Infraestructura de redes

75

7.6.5.

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 o o m´quina con el servidor con el que se comunica. Los caracteres que se teclean en un cliente local son a enviados por la red y procesados en el ordenador remoto, utilizando la informaci´n que ese ordenador o contiene. El resultado de su ejecuci´n se muestra en la pantalla del ordenador local. Este protocolo fue o uno de los primeros que se defini´ y ha sido dise˜ado para trabajar con terminales de modo texto. Se o n implementa en dos m´dulos. El m´dulo cliente relaciona el m´dulo de entrada y salida del terminal para o o o 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 o u o terminales remotos sean vistos por la aplicaci´n como terminal local. o

7.6.6.

FTP (File Transfer Protocol)

Permite la transferencia de ficheros de texto o binarios desde un ordenador a otro sobre una conexi´n o 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 o 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 o establece, del servidor al cliente, para la transferencia de datos. El fichero se transfiere sobre la conexi´n o de datos, sin la utilizaci´n de ninguna cabecera o informaci´n de control en la capa de aplicaci´n. Cuando o o o se completa la transferencia, la conexi´n de control es usada para transmitir la se˜alizaci´n de que la o n o transferencia se ha completado y para aceptar nuevos comandos de transferencia.

7.6.7.

HTTP (Hyper Text Transport Protocol)

Este es un sencillo protocolo cliente-servidor que articula los intercambios de informaci´n entre los o 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 o o transferir p´ginas de hipertexto. Est´ soportado sobre los servicios de conexi´n TCP/IP. Un proceso a a o servidor espera las solicitudes de conexi´n de los clientes Web, y una vez se establece la conexi´n, el o o protocolo TCP se encarga de mantener la comunicaci´n y garantizar un intercambio de datos libre de o errores.

7.7.

Protocolo TCP/IP

En su ´poca, el protocolo de red TCP/IP era un protocolo oculto utilizado principalmente por inse tituciones gubernamentales y educativas. De hecho, lo invent´ la agencia de investigaci´n militar de los o o 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, u a como una guerra nuclear. Las comunicaciones de datos tradicionales siempre se hab´ basado en una sola ıan conexi´n directa y si dicha conexi´n se degradaba o se saboteaba, la comunicaci´n cesaba. TCP/IP ofrec´ o o o ıa una forma de empaquetar los datos y dejar que “encontraran” su propio camino por la red. As´ se cre´ la ı o primera red tolerante al fallo. Sin embargo, la mayor´ de las empresas segu´ utilizando los protocolos de red proporcionados por ıa ıan 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 a NetBEUI, derivado del NetBIOS de IBM. Aunque TCP/IP se convirti´ en algo com´n a lo largo de 1980, o u no fue hasta el surgimiento de Internet, a primeros de 1990, cuando empez´ a convertirse en el est´ndar o a para la comunicaci´n de datos. Por todo lo anteriormente expuesto hizo que cayeran los precios del hardo ware en sistema de red IP, hecho que facilit´ la interconexi´n entre redes. o o

Jose Antonio Escart´ Vigo, Junio 2005. ın

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 o o e cu´ndo se inician y se detienen las comunicaciones de datos. Los datos a transmitir se cortan en secciones, a denominadas paquetes y se encapsulan en una serie de “envolturas”, conteniendo cada una informaci´n o espec´ ıfica para la siguiente capa de red. Cada paquete se graba con un n´mero de secuencia de 32 bits u para que, aunque lleguen en el orden err´neo, la transmisi´n se pueda volver a montar. A medida que el o o 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 u o datos reales, o carga util. ´ Parece algo confuso, pero mostrando la siguiente analog´ se entender´ mejor. Piensa en una carta ıa a dentro de un sobre que se env´ a una empresa de mensajer´ para su distribuci´n. La empresa de menıa ıa o sajer´ utiliza su propio sobre para enrutar el paquete al edificio correcto. Cuando se reciba el paquete en ıa este edificio, se abrir´ y se tirar´ el sobre exterior. Esta carta puede estar destinada a otro buz´n de correo a a o interno, por lo que pueden colocarla en un sobre de correo ´ ınter-oficinas y enviarla al sitio apropiado. Por ultimo, la carta llega al receptor, que quita todos los envoltorios y utiliza los datos que est´n dentro. La ´ a tabla 7.4 resume c´mo encapsulan datos algunos protocolos de red. o Cuadro 7.4: Paquete de datos TCP/IP de ejemplo Protocolo Ethernet IP TCP HTTP Datos de aplicaci´n o Contenido Direcci´n MAC o Direcci´n IP o Encabezado TCP Encabezado HTTP P´gina Web a Capa OSI Enlace de datos Red Transporte Aplicaci´n o Aplicaci´n o

Como se puede comprobar, el exterior de nuestro “sobre” de datos tiene la direcci´n Ethernet, que o identifica el paquete en la red Ethernet. Dentro de esta capa se encuentra la informaci´n de la red, o denominada direcci´n IP, y dentro se encuentra la capa de transporte, que establece una conexi´n y la o o cierra. A continuaci´n est´ la capa de aplicaci´n, que es un encabezado HTTP, que indica al explorador o a o Web c´mo debe formatear una p´gina. Por ultimo, entra la carga de datos real del paquete (el contenido o a ´ de una p´gina Web). Todo esto ilustra la naturaleza de m´ltiples capas de las comunicaciones de red. a u Existen varias fases durante una comunicaci´n entre dos nodos de red que utilizan TCP/IP. Suponiendo o que estamos utilizando direcciones IP y nombres que no son del anfitri´n, lo primero que sucede es que o la m´quina genera una solicitud de Protocolo de resoluci´n de direcciones (ARP, Address Resolution a o Protocol) para buscar la direcci´n Ethernet correspondiente a la direcci´n IP con la que est´ intentando o o a comunicarse. Ahora que puede comunicarse con la m´quina utilizando IP, existe una comunicaci´n de tres a o v´ entre las m´quinas que utilizan el protocolo TCP para establecer una sesi´n. ıas a o Una m´quina que desea enviar datos a otra m´quina env´ un paquete SYN para sincronizar, o iniciar, a a ıa la transmisi´n. El paquete SYN est´ b´sicamente diciendo “¿Est´ preparada para el env´ de datos?”. o a a a ıo La otra m´quina, env´ un SYN/ACK, que significa “De acuerdo, he recibido el paquete SYN y estoy a ıa preparada”. Por ultimo, la m´quina emisora env´ un paquete ACK de respuesta diciendo, “Bien, inicio el ´ a ıa env´ de datos”. Esta comunicaci´n se denomina Acuerdo de conexi´n TCP de tres v´ Si una de las tres ıo o o ıas. partes no se produce, la conexi´n no tiene lugar. Mientras la m´quina est´ enviando sus datos, etiqueta o a a los paquetes de datos con un n´mero de secuencia y reconoce cualquier n´mero de secuencia anterior u u utilizado por el anfitri´n en el otro punto. Cuando se han enviado todos los datos, una parte env´ un o ıa ´ paquete FIN a la otra parte del enlace. Esta responde con un FIN/ACK para cerrar esa sesi´n TCP/IP. o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 7. Infraestructura de redes

77

Cuadro 7.5: Esquema de transmisi´n TCP/IP o 1 2 3 4 5 6 SYN: Inicio la conexi´n (1.a m´quina) o a SYN/ACK: De acuerdo, listo para recibir (2.a m´quina) a ACK: Transmito (1.a m´quina) a Transmision: Comunicaci´n entre las dos m´quinas o a FIN: Finalizo conexi´n (1.a m´quina) o a FIN/ACK: Conexi´n finalizada (2.a m´quina) o a

Debido a la forma en que TCP/IP controla la iniciaci´n y finalizaci´n de una sesi´n, las comunicao o o ciones TCP/IP se dice que tienen un estado. Esto significa que podemos saber qu´ parte del di´logo se e a est´ produciendo s´lo con mirar a los paquetes, algo muy importante para los cortafuegos porque la forma a o m´s com´n de bloquear el tr´fico saliente con un cortafuegos es no admitir los paquetes SYN del exterior a u a en m´quinas internas de la red. As´ las m´quinas internas pueden comunicarse fuera de la red e iniciar a ı, a conexiones con el exterior pero las m´quinas externas no pueden iniciar nunca la conexi´n. a o En Linux el cortafuegos IPTables integrado en el n´cleo, esta disponible en las versiones de kernel 2.4x u o superior. Funciona mediante la interacci´n directa con el n´cleo del sistema y nos sirve para hacer el o u filtrado de paquetes TCP/IP. Generalmente los cortafuegos tienen dos o m´s interfaces (tarjetas de red). Una interfaz se conecta a 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 u a n conecta a Internet. Tambi´n puede existir una tercera interfaz denominada DMZ (Desmilitarized Zone), e que normalmente es para los servidores que necesitan exponerse m´s a Internet de forma que los usuarios a externos pueden conectarse a ellos, disponen de una IP p´blica. Todos los paquetes que intentan pasar a u 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 e a e acci´n. Esta puede ser evitar su paso, pasarlo o enmascararlo con una direcci´n IP privada interna. La o ´ o mejor pr´ctica para la configuraci´n del cortafuegos es denegarlo todo siempre y permitir, a continuaci´n, a o o el tr´fico que necesitamos de una forma selectiva. a Los cortafuegos pueden filtrar paquetes en distintos niveles. Pueden mirar una direcci´n IP y bloquear o el tr´fico proveniente de determinadas direcciones o redes IP, comprobar el encabezado TCP y determinar a su estado y, en niveles superiores, pueden mirar a la aplicaci´n o al n´mero de puerto TCP/UDP. Se o u pueden configurar para evitar categor´ completas de tr´fico, como ICMP. Los paquetes externos de tipo ıas a 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 o o 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). e

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 8

Configuraci´n de dispositivos de red o
En Debian el archivo de configuraci´n de los dispositivos de red es: o /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. o

8.1.

Etherconf: Configurador gr´fico de red a

Es el configurador gr´fico para redes de Debian y se instala con el siguiente comando: a #apt-get install etherconf Para configurar las tarjetas de red autom´ticamente hay que ejecutar el comando: a #dpkg-reconfigure etherconf, . . . que arrancar´ debconf. a Y nos realizar´ unas preguntas, para configurar nuestro sistema. a

8.2.

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´ e ınea de comandos, ya que no tiene interfaz gr´fica. a Existen varias herramientas que se han escrito para cubrir la falta de interfaz gr´fica o de men´s del a u 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 o o IP que se desea aplicar al dispositivo y opciones es una de las siguientes:

80

Servidor Linux para conexiones seguras de una LAN a Internet

Opci´n o up down arp -arp mtu valor netmask direcci´n o

broadcast direcci´n o

pointtopoint direcci´n o

Descripci´n o Activa el dispositivo. Esta opci´n es impl´ o ı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. o a Bajo ethernet, el valor por defecto es 1500 Configura la m´scara de red de esta interfaz a direcci´n. Si no se propora o ciona un valor, ifconfig calcula la m´scara basada en la clase de la direcci´n a o IP. Una direcci´n de clase A tiene una m´scara 255.0.0.0, una de clase B o a 255.255.0.0 y la clase C 255.255.255.0 Configura la direcci´n de broadcast de la interfaz de direcci´n. Si no se o o proporciona un valor, ifconfig calcula la direcci´n de broadcasta basada o en la clase de la direcci´n IP de manera parecida a la m´scara de red o a Configura la conexi´n punto a punto (PPP) donde la direcci´n remota es o o direcci´n o

Un ejemplo de uso simple podr´ ser el siguiente: #ifconfig eth0 192.168.0.3, . . . Donde el dispoıa sitivo eth0 quedar´ configurado con la direcci´n IP 192.168.0.3. Como es una direcci´n de clase C, la a o o m´scara ser´ 255.255.255.0 y el broadcast ser´ 192.168.0.255, asign´ndolos ifconfig por defecto. a a a a Si la direcci´n IP que configuramos es una direcci´n de clase A o B dividida en subredes, necesitaremos o o determinar expl´ ıcitamente las direcciones de broadcast y de m´scara en la l´ a ı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. o a e En tiempo de ejecuci´n, con el comando ifconfig podemos habilitar y deshabilitar los dispositos de red: o #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: a $/sbin/ifconfig A continuaci´n podemos observar la salida del servidor que se utiliza en el proyecto: o
$/sbin/ifconfig eth0 Link encap:Ethernet HWaddr 00:C0:9F:6E:1D:E0 inet addr:192.168.0.11 Bcast:192.168.0.255 Mask:255.255.255.0 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:2280653 (2.1 MiB) TX bytes:707464 (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 Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:139967 errors:0 dropped:0 overruns:0 frame:0 TX packets:139967 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:29170217 (27.8 MiB) TX bytes:29170217 (27.8 MiB)

lo

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 8. Configuraci´n de dispositivos de red o

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 ı e dispositivo lo, de loopback.

8.3.

Route: Tablas de redireccionamiento

Si la m´quina se conecta a una red con varias subredes, necesitamos un enrutador. Este aparato, que a se sit´a entre redes, redirige paquetes a su destino real (normalmente, muchas m´quinas no conocen el u a camino correcto al destino, s´lo conocen el propio destino). o En el caso donde una m´quina ni siquiera tiene una pista sobre d´nde enviar el paquete, se usa una a o ruta por defecto. Este camino apunta a un enrutador, que idealmente sabe a d´nde deber´ ir el paquete o ıa o, al menos, sabe otra ruta que puede tomar. Una m´quina t´ a ı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 a red se env´ directamente a ellas. ıan 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 o a ı 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 a cmd tipo direcci´n o netmask masc gw gatw dev destino Descripci´n o Valor add o del dependiendo de si a˜adimos o borramos una ruta. Si eliminamos n una ruta, s´lo necesitamos otro par´metro, direcci´n o a o Valor -net o -host dependiendo si direcci´n representa una direcci´n de red o una o o direcci´n de un enrutador o La red destino que quiere ofrecer para enrutar Configura la m´scara de red de la direcci´n direcci´n a masc a o o Configura la la direcci´n de enrutador para direccion a gatew. Normalmente se usa o como ruta por defecto Env´ todos los paquetes destinados a direcci´n a trav´s de la red del dispositivo ıa o e destino seg´n se configura con ifconfig u

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 a en 192.168.0.1: #route add -net default gw 192.168.0.1 dev eth0 2. Configurar un sistema para que todos los paquetes destinados a 192.168.0.3 se env´ a trav´s del ıen e primer dispositivo PPP: #route add -host 192.168.0.3 netmask 255.255.255.0 dev ppp0
Jose Antonio Escart´ Vigo, Junio 2005. ın

82

Servidor Linux para conexiones seguras de una LAN a Internet

3. As´ se borra una ruta destino a 192.168.0.3: ı #route del 192.168.0.3 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 192.168.1.1, necesitamos asegurarnos primero de que tenemos una ruta a la red 192.168.1.0 Para visualizar la tabla de enrutamiento utilizaremos: #route Route visualiza los nombres de m´quinas a cualquier direcci´n IP que podr´ buscar y resolver. Aunque a o ıa 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 a a ver si los servidores devuelven y los resuelven. Esta espera ser´ de varios minutos hasta que la petici´n a o devuelva un timeout. Para evitar que route realice resoluci´n de nombres ejecutaremos: #route -n o Este ser´ un ejemplo de la salida de una m´quina con acceso a la LAN y a internet por una pasarela: ıa a # route Kernel IP routing table Destination Gateway 192.168.0.0 * default .

Genmask 255.255.255.0 0.0.0.0

Flags Metric Ref U 0 0 UG 0 0

Use Iface 0 eth0 0 eth0

Podemos observar varias columnas como destino, pasarela, m´scara (referido como genmask) e iface a (interfaz, configurada por la opci´n dev de route). Las otras entradas de la tabla tienen el significado o siguiente: Entrada Flags Descripci´n o Un sumario de estado de conexi´n, donde cada letra tiene un significado: o U: la conexi´n est´ arriba o a H: el destino es una m´quina a 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 e esta informaci´n, pero s´ lo hacen algunos protocolos de enrutamiento avanzados. o ı El n´mero de referencias de la ruta. Esto no se usa en el kernel de Linux. Est´ aqu´ debido u a ı 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 u e usar la opci´n -F cuando invoquemos route o

Metric

Ref

Use

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 8. Configuraci´n de dispositivos de red o

83

8.4.

Netstat: Estado de las conexiones

El programa netstat se utiliza para mostrar el estado de todas las conexiones de red de una m´quina. a La opciones de netstat son combinables, en la siguiente tabla se muestran las m´s comunes: a Cuadro 8.1: Opciones de Netstat Opci´n o -a -i -c -r -n -t -u -v Descripci´n o Visualiza la informaci´n de todas las conexiones activas o Visualiza las estad´ ısticas de todos los dispositivos de red configurados Actualiza la informaci´n visualizada cada segundo o Muestra la tabla de enrutado Visualiza las direcciones locales y remotas en formato num´rico e Muestra tan s´lo la informaci´n de TCP o o Muestra tan s´lo la informaci´n de UDP o o Visualiza la versi´n de netstat o

8.5.

Configuraci´n de interfaces usando DHCP o

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. a o En redes peque˜as las direcciones IP pueden asignarse de forma manual, equipo por equipo, pero en n redes de un cierto tama˜o esta tarea puede convertirse en agotadora, no s´lo por tener que editar cada n o 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) o 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: a #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

Jose Antonio Escart´ Vigo, Junio 2005. ın

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. o 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´ de referencia Debian, para m´s o o ıa a informaci´n cons´ltela. o u

8.6.1.

Direcci´nes IP est´ticas o a

Supongamos que se desea configurar una interfaz ethernet que tiene una direcci´n IP fija 192.168.0.123. o Esta direcci´n comienza con 192.168.0 por lo tanto debe estar en una LAN. Supongamos adem´s que o a 192.168.0.1 es la direcci´n de la puerta de enlace de la LAN Internet. Editamos /etc/network/interfaces o de modo que incluya un fragmento como el siguiente: iface eth0 inet address netmask gateway static 192.168.0.123 255.255.255.0 192.168.0.1

Si tenemos instalado el paquete resolvconf podemos a˜adir las siguientes l´ n ıneas para especificar la informaci´n relativa al DNS: o iface eth0 inet static address 192.168.0.123 netmask 255.255.255.0 gateway 192.168.0.1 dns-search nicedomain.org dns-nameservers 195.238.2.21 195.238.2.22 Despu´s de que se activa la interfaz, los argumentos de las opciones dns-search y dns-nameservers e quedan disponibles para resolvconf para su inclusi´n en resolv.conf. o El argumento nicedomain.org de la opci´n dns-search corresponde al argumento de la opcin search en o resolv.conf. Los argumentos 195.238.2.21 y 195.238.2.22 de la opci´n dns-nameservers corresponde a los arguo mentos de las opciones nameserver en resolv.conf. Otras opciones reconocidas en el archivo son dns-domain y dns-sortlist.

8.6.2.

Direcciones IP din´micas a

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). e o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 8. Configuraci´n de dispositivos de red o

85

8.6.3.

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 o programa iwconfig (v´ase secci´n 8.10). e o Para cada par´metro del comando iwconfig podemos incluir una opci´n en /etc/network/interfaces a o con un nombre como el del par´metro con el prefijo “wireless-”. Por ejemplo, para fijar el ESSID de eth1 a a miessid y la clave de cifrado en 123456789e 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 123456789e

8.6.4.

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. a a Esto se logra mediante PPP sobre ethernet (PPPoE) que es una t´cnica para el encapsulamiento del flujo e 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 a a continuaci´n, editamos /etc/network/interfaces de modo que incluya un fragmento como el siguiente: o 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 o ı o ı 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 ı o m´dem/router de este estilo y no me es necesario. Me han facilitado un usuario y contrase˜a que utilizo o n para validarme en su servidor y recibir el servicio.

8.6.5.

Puertas de enlace

Supongamos que eth0 est´ conectada a internet con un direcci´n IP configurada con DHCP y eth1 a o est´ conectada a la LAN con una direcci´n IP est´tica 192.168.1.1. Editamos /etc/network/interfaces de a o a modo que incluya un fragmento similar al siguiente: iface eth0 inet dhcp iface eth1 inet static address 192.168.1.1 netmask 255.255.255.0

Si activamos NAT en esta m´quina, mediante una puerta de enlace, podemos compartir la conexi´n a o de internet con todas las m´quinas de la LAN. a
Jose Antonio Escart´ Vigo, Junio 2005. ın

86

Servidor Linux para conexiones seguras de una LAN a Internet

8.6.6.

Interfaces virtuales

Usando interfaces virtuales se puede configurar una unica tarjeta ethernet para que sea la inter´ faz de distintas subredes IP. Por ejemplo, supongamos que la m´quina se encuentra en una red LAN a 192.168.0.x/24. Y deseamos conectar la m´quina a Internet usando una direccin IP p´blica proporcionada a u 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 192.168.0.1 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 iface eth0:0 inet dhcp La interfaz eth0:0 es una interfaz virtual. Al activarse tambi´n lo har´ su padre eth0. e a

8.7.

Reconfiguraci´n de la red o

Aqu´ es necesario diferenciar entre interfaz f´ ı ısica y interfaz l´gica. o 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 o a interfaz f´ ısica. Las definiciones iface en /etc/network/interfaces son, en realidad, definiciones de interfaces l´gicas no o de interfaces f´ ısicas. No obstante, supongamos que nuestra m´quina es un equipo port´til que transportamos de casa al a a trabajo. Cuando conectamos la m´quina a una red corporativa o a nuestra LAN hogare˜a, necesitamos a n 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´ configurarse la o o ıa interfaz para la red hogare˜a y la del trabajo respectivamente. n iface hogar inet static address 192.168.0.123 netmask 255.255.255.0 gateway 192.168.0.1 iface trabajo inet static address 81.201.3.123 netmask 255.255.0.0 gateway 81.201.1.1 De esta forma, la interfaz f´ ısica eth0 se puede activar en la red hogare˜a con la configuraci´n apropiada, n o 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 ı a solamente ifup eth0. La raz´n es que ifup utiliza el nombre de la interfaz f´ o ısica como el nombre de la interfaz l´gica eth0 predeterminada y, en realidad, en nuestro ejemplo no hay una interfaz l´gica definida. o o
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 8. Configuraci´n de dispositivos de red o

87

Una vez visto como se reconfiguran las interfaces, hay que precisar que la reconfiguraci´n necesita o 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 a n o o a recientemente ha sido incorporado el mecanismo hotplug para que muchos m´s perif´ricos se puedan a e enchufar y desenchufar mientras la m´quina se encuentra funcionando. Esto incluye el hardware de red. a Se puede observar que los servicios que dependen del hardware que se conecta en caliente s´lo deben o iniciarse despu´s de que el hardware haya sido insertado y deben detenerse cuando se hayan eliminado. e 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´ a ıamos actuar siguiendo este esquema: Primero eliminamos ‘loquesea’ del control del sistema init. Si est´ ultilizando el sistema init sysv-rc a 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 n secci´n eth0 de /etc/network/interfaces que contiene las llamadas al script init loquesea: o iface eth0 inet dhcp up /etc/init.d/loquesea start down /etc/init.d/loquesea stop

8.7.1.

Configuraci´n de red durante el arranque o

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. o e a Una vez configurados los mecanismos para el soporte de hardware que cambia en forma din´mica, resulta a m´s sencillo tratar el hardware est´tico como si fuera din´mico. El arranque se puede considerar como un a a a simple evento hotplug (V´ase secci´n 8.7.2). e o 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 e 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 e alg´n dispositivo lo instala. u

8.7.2.

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 a e se haya ejecutado y cargado los m´dulos necesarios. o
Jose Antonio Escart´ Vigo, Junio 2005. ın

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 a con par´metros diferentes. En Debian, cuando se llama a hotplug ´ste ejecuta los scripts contenidos en a e /etc/hotplug/ y /etc/hotplug.d/. El hardware de red reci´n conectado es configurado por el /etc/hotplug/net.agent. Supongamos que e 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 n /etc/network/interfaces. Para que este comando configure eth0, a˜adimos las siguientes l´ n ı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 o como se muestra a continuaci´n: o mapping hotplug script grep map eth0

8.7.3.

Ifplugd

Ifplugd activa o desactiva una interfaz dependiendo si el hardware subyacente est´ o no conectado a la a 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 o 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.

8.8.

Resolvconf: Resoluci´n de nombres o

El paquete resolvconf proporciona un marco para la administraci´n din´mica de la informaci´n relativa o a o a los servidores de nombres disponibles. Soluciona el antiguo problema de mantener las listas din´micas a de los nombres de los servidores para ser usadas por el sistema de resoluci´n y los cach´s DNS. Resolvconf o e es el intermediario entre los programas que controlan las interfaces de red y suministran informaci´n de o los servidores de nombres, y las aplicaciones que necesitan dicha informaci´n. Este comando est´ dise˜ado o a n para funcionar sin que sea necesaria ninguna configuraci´n manual. o Para la resoluci´n de nombres se utiliza el archivo de configuraci´n: o o /etc/resolv.conf Si no hemos instalado el paquete resolvconf, podemos editar a mano el fichero /etc/resolv.conf. En ´l e podemos especificar hasta tres servidores de nombres, siendo los dos ultimos 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 n a nombres de host que no contengan dominio. La l´ ınea search se emplea para especificar que busque un dominio.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 8. Configuraci´n de dispositivos de red o Esto podr´ ser un contenido t´ ıa ıpico: #cat /etc/resolv.conf # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) domain example.com nameserver 192.168.0.1 nameserver 194.224.52.4 nameserver 194.224.52.6

89

8.9.

Archivos de configuraci´n de Hosts o

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 o contiene el nombre de la m´quina. Este archivo unicamente deber´ contener el nombre de la m´quina a ´ a a 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 n o DNS. En ´l especificaremos los nombre de todos los equipos conectados a la red y su correspondientes e direcciones IP. De esta forma podremos hacer referencia a los mismos sin especificar su direcci´n. o Linux se encargar´ de buscar esta direcci´n dentro del archivo /etc/hosts a o 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 o en el que ser´n ejecutadas las resoluciones que requiera el host, este archivo normalmente contiene a 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 a o ser ejecutada en el archivo /etc/hosts, posteriormente se debe consultar a Bind y si a´n no se ha u logrado la resoluci´n, intentar con NIS (Network Information Server), si despu´s de consultar este o e servicio no es posible la resoluci´n, el Resolver responder´ que no fue posible localizar el host. o a /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´ el acceso al sistema ıbe

8.10.

Iwconfig: Configuraci´n wireless o

Para poder configura la red inal´mbrica necesitamos instalar los siguientes paquetes: a #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.

Jose Antonio Escart´ Vigo, Junio 2005. ın

90

Servidor Linux para conexiones seguras de una LAN a Internet Por ejemplo la salida del servidor es la siguiente:

# iwconfig lo eth0 eth1 no wireless extensions. no wireless extensions. 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 a WEP del sistema, tanto en hexadecimal como en ASCII. Ve´moslo con unos ejemplos: a Asignar el nombre de “NodoEjemplo” a nuestra red: #iwconfig eth1 essid NodoEjemplo Asignar una clave WEP hexadecimal #iwconfig eth1 key 1234123412341234abcd Asignar una clave WEP ASCII, a˜adiendo al principio “s:”: n #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 a describe en la secci´n 8.6.3. Si utilizamos claves WPA, ser´ necesario instalar un cliente WPA (para esta o a configuraci´n dir´ o ıjase a la secci´n 14.5.5). o Podemos tener un monitor de la conexi´n wireless con: o $wavemon, . . . monitor del estilo de top para conexiones wireless. Para m´s informaci´n dir´ a o ıjase al cap´ ıtulo Redes inal´mbricas (cap. 14). a

8.11.

Resoluci´n de problemas o

Si encontramos problemas en la instalaci´n de red podemos ejecutar los siguientes comandos y consultar o las salidas: #ifconfig #cat /proc/pci #cat /proc/interrupts #dmesg | more

Jose Antonio Escart´ Vigo, Junio 2005. ın

Parte III

Instalaci´n de Servicios o

Cap´ ıtulo 9

Servicios de red
9.1. Servidor DHCP

El Protocolo de configuraci´n din´mica de servidores (DHCP, Dynamic Host Configuration Protocol), o a es un protocolo de red en el que un servidor provee los par´metros de configuraci´n a las computadoras a o que lo requieran, conectadas a la red (m´scara, puerta de enlace y otros) y tambi´n incluye un mecanismo a e de asignaci´n de direcciones de IP. o Este protocolo apareci´ como protocolo est´ndar en octubre de 1993 y existe un proyecto abierto para o a desarrollar DHCPv6, en redes IPv6. La informaci´n de esta secci´n a sido obtenida de la enciclopedia libre: http://es.wikipedia.org o o

9.1.1.

Asignaci´n de direcciones IP o

Sin DHCP, cada direcci´n IP debe configurarse manualmente en cada ordenador y, si el ordenador se o mueve a otro lugar en otra parte de la red, se debe de configurar otra direcci´n IP diferente. El DHCP o 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. a El protocolo DHCP incluye tres m´todos de asignaci´n de direcciones IP: e o Asignaci´n manual : Donde la asignaci´n se basa en una tabla con direcciones MAC (pares de o o direcciones IP introducidas manualmente por el administrador). S´lo las computadoras con una o direcci´n MAC que figure en dicha tabla recibir´n la IP asignada en dicha tabla. o a Asignaci´n autom´tica: Donde una direcci´n de IP libre obtenida de un rango determinado por el o a o administrador se le asigna permanentemente a la computadora que la requiere. Asignaci´n din´mica: El unico m´todo que permite la reutilizaci´n din´mica de las direcciones IP. o a ´ e o a 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 a o 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. o a El DHCP es una alternativa a otros protocolos de gesti´n de direcciones IP de red como el BOOTP o (Bootstrap Protocol), respento a este, DHCP es un protocolo m´s avanzado. a

94

Servidor Linux para conexiones seguras de una LAN a Internet

9.1.2.

Par´metros configurables a

Un servidor DHCP puede proveer de una configuraci´n opcional a la computadora cliente. o La lista de opciones siguientes son configurables mediante DHCP: Direcci´n del servidor DNS. o Nombre DNS. Puerta de enlace de la direcci´n IP. o Direcci´n de difusi´n de red (Broadcast Address). o o M´scara de subred. a Tiempo m´ximo de espera del ARP (Protocolo de Resoluci´n de Direcciones). a o MTU (Unidad de Transferencia M´xima) para la interfaz. a Servidores NIS (Servicio de Informaci´n de Red). o Dominios NIS. Servidores NTP (Protocolo de Tiempo de Red). Servidor SMTP. Servidor TFTP. Nombre del servidor WINS.

9.1.3.

Implementaciones

Microsoft introdujo DHCP en sus Servidores NT con la versi´n 3.5 de Windows NT a finales de 1994, o a pesar de que la llamaron una nueva funci´n no fue inventada por ellos. o El Consejo de Software de Internet (ISC: Internet Software Consortium) public´ distribuciones de o 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 o o se adaptaba mejor el 22 de junio de 1999. Se puede encontrar el software en: http://www.isc.org/sw/dhcp/. Otras implementaciones importantes incluyen: Cisco: a˜adi´ un servidor DHCP habilitado en Cisco IOS 12.0 en febrero de 1999. n o Sun: a˜adi´ el soporte para DHCP, a su sistema operativo Solaris, en julio de 2001. n o Actualmente, la mayor´ de los routers incluyen soporte DHCP. ıa

9.1.4.

Anatom´ del protocolo ıa

DHCP usa los mismos puertos asignados por el IANA (Autoridad de N´meros Asignados en Internet u seg´n siglas en ingl´s) en BOOTP: u e 67/udp: Para las computadoras servidor. 68/udp: Para las computadoras cliente. A continuaci´n muestro las actuaciones que puede tener el protocolo: o 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 o (Protocolo de Datagramas de Usuario) con destino 255.255.255.255 y requiere tambi´n su ultima e ´ direcci´n IP conocida, aunque esto no es necesario y puede llegar a ser ignorado por el servidor. o
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 9. Servicios de red

95

DHCP Offer : El servidor determina la configuraci´n bas´ndose en la direcci´n del soporte f´ o a o ısico de la computadora cliente especificada en el registro CHADDR. El servidor especifica la direcci´n IP o en el registro YIADDR. DHCP Request: El cliente selecciona la configuraci´n de los paquetes recibidos de DHCP Offer. Una o vez m´s, el cliente solicita una direcci´n IP espec´ a o ıfica que indic´ el servidor. o 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.

9.1.5.

Configuraci´n de un servidor DHCP o

El fichero de configuraci´n de un servidor DHCP es /etc/dhcpd.conf. o 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:192.168.0.10 Bcast:192.168.0.255 Mask:255.255.255.0 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:1272847 (1.2 MiB) TX bytes:381723 (372.7 KiB) Interrupt:6

Si no encontramos la opci´n MULTICAST deberemos reconfigurar el kernel para agregarlo. En la o mayor´ de sistemas no ser´ necesario, funcionar´ por defecto. ıa a a 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 o informaci´n de red de los clientes. Se pueden declarar opciones globales para todos los clientes, o bien o opciones para cada sistema cliente. El fichero de configuraci´n posee dos tipos de informaci´n: o o Par´metros: Establece c´mo se realiza una tarea, si debe llevarse a cabo una tarea o las opciones de a o configuraci´n de red que se enviar´n al cliente. o a 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. a Algunos par´metros deben empezar con la palabra clave option. Los par´metros definen valores no a a opcionales o que controlan el comportamiento del servidor DHCP. Si cambiamos el fichero de configuraci´n, para aplicar los cambios, reiniciaremos el demonio DHCP: o # /etc/init.d/dhcp restart Subredes Debemos incluir una declaraci´n subnet para cada subred de la red. Si no lo hacemos, el servidor o DHCP no podr´ arrancarse. En el ejemplo siguiente, hay opciones globales para cada cliente DHCP de la a subred y un rango de IPs declarado, a los clientes se les asigna una direcci´n IP dentro de ese rango. o
subnet 192.168.1.0 netmask 255.255.255.0 { option routers 192.168.1.254; option subnet-mask 255.255.255.0; option domain-name option domain-name-servers option time-offset "example.com"; 192.168.1.1; -5; # Eastern Standard Time

range 192.168.1.10 192.168.1.100; }

Jose Antonio Escart´ Vigo, Junio 2005. ın

96 Redes compartidas

Servidor Linux para conexiones seguras de una LAN a Internet

Todas las subredes que comparten la misma red f´ ısica deben declararse dentro de una declaraci´n o shared-network. Los par´metros dentro de shared-network, pero fuera de las declaraciones subnet se consia deran par´metros globales. El nombre que le asignemos debe ser el t´ a ı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 192.168.1.254; more parameters for EXAMPLE shared-network subnet 192.168.1.0 netmask 255.255.255.0 { parameters for subnet range 192.168.1.1 192.168.1.31; } subnet 192.168.1.32 netmask 255.255.255.0 { parameters for subnet range 192.168.1.33 192.168.1.63; } }

Grupos La declaraci´n group puede utilizarse para aplicar par´metros globales a un grupo de declaraciones. o a Podemos agrupar redes compartidas, subredes, hosts u otros grupos.
group { option routers option subnet-mask option domain-name option domain-name-servers option time-offset 192.168.1.254; 255.255.255.0; "example.com"; 192.168.1.1; -5; # Eastern Standard Time

host apex { option host-name "apex.example.com"; hardware ethernet 00:A0:78:8E:9E:AA; fixed-address 192.168.1.4; } host raleigh { option host-name "raleigh.example.com"; hardware ethernet 00:A1:DD:74:C3:F2; fixed-address 192.168.1.6; } }

Tiempo de lease (asignaci´n de IP) o Para configurar un servidor DHCP que realiza un lease de la direcci´n IP din´mica dentro de una o a subred, declararemos un tiempo de lease por defecto, un tiempo de lease m´ximo y los valores de confia guraci´n de red para los clientes. Esto se puede ver en el ejemplo siguiente que asigna direcciones a los o clientes dentro de un rango:
default-lease-time 600; max-lease-time 7200; option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; option routers 192.168.1.254; option domain-name-servers 192.168.1.1, 192.168.1.2; option domain-name "example.com"; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.10 192.168.1.100; }

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, o u o usamos el par´metro hardware ethernet de una declaraci´n host. En el ejemplo siguiente, la declaraci´n a o o host apex especifica que la tarjeta de interfaz de red con la direcci´n MAC 00:A0:78:8E:9E:AA siempre o debe ejecutarse en lease con la direcci´n IP 192.168.1.4. Tambi´n hay que tener en cuenta, que podemos o e usar el par´metro opcional host-name para asignar un nombre host al cliente. a
host apex { option host-name "apex.example.com"; hardware ethernet 00:A0:78:8E:9E:AA; fixed-address 192.168.1.4; }

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 9. Servicios de red M´s opciones a

97

Para obtener una lista completa de sentencias de opciones e informaci´n relacionada, podemos consultar o la p´gina del manual de dhcp-options: $man dhcp-options a 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 o direcci´n IP asignada recientemente se almacena de modo autom´tico en la base de datos lease. La inforo a maci´n incluye la longitud del lease, al que se ha asignado la direcci´n IP, las fechas iniciales y finales del o o lease, y la direcci´n MAC de la tarjeta de interfaz de red utilizada para recuperar el lease. Todas las horas o de la base de datos lease se expresan seg´n GMT, no con la hora local. u 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 192.168.0.11; option subnet-mask 255.255.255.0; option routers 192.168.0.1; option dhcp-lease-time 604800; option dhcp-message-type 5; option domain-name-servers 192.168.0.1; option dhcp-server-identifier 192.168.0.1; option domain-name "proyecto"; renew 4 2005/5/26 09:33:21; rebind 0 2005/5/29 13:16:07; expire 1 2005/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 a o 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 : n INTERFACES="eth0" o INTERFACES="eth0 wlan0" Esto es util si disponemos de una m´quina firewall con dos tarjetas de red. Se puede configurar una tar´ a jeta de red como cliente DHCP para recuperar una direcci´n IP en Internet y la otra puede utilizarse como o servidor DHCP para la red interna, detr´s del firewall. Nuestro sistema ser´ m´s seguro si especificamos la a a a 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 u a 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 o 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 a depurar errores, los mensajes son guardados en el archivo /var/log/messages.
Jose Antonio Escart´ Vigo, Junio 2005. ın

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 o o /etc/dhcpd.conf. -lf archivo: Especifica la localizaci´n del archivo de base de datos lease. Si ya existe , es muy o 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. o

Agente de transmisi´n DHCP o 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. a El agente de transmisi´n DHCP (dhcp-relay) permite transmitir las peticiones DHCP y BOOTP desde o una subred sin un servidor DHCP, dirigidos a uno o m´s servidores en otras subredes. a Cuando un cliente DHCP pide informaci´n, el agente de transmisi´n DHCP reenv´ la petici´n a la o o ıa o 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. o El agente de transmisi´n escuchar´ las peticiones de todas las interfaces a menos que el argumento -i o a se use para especificar solo una o varias interfaces donde escuchar. Para iniciar el agente de transmisi´n o 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 o -i -p -d -q Descripci´n o 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. a a o Puerto en el que deber´ escuchar dhcp-crelay. Transmite peticiones a los servidores en este a puerto y respuestas a los clientes en el puerto inmediatamente superior. Obliga a dhcp-relay a ejecutarse en primer plano. Desactiva la impresi´n de configuraci´n de red, cuando arranca dhcp-relay. o o

9.1.6.

Configuraci´n de un cliente DHCP o

El primer paso al configurar un cliente DHCP es asegurarse de que el kernel reconoce la tarjeta de la interfaz de red. La mayor´ de las tarjetas se reconocen durante el proceso de instalaci´n y el sistema es ıa o configurado para utilizar el m´dulo correcto en el kernel. Si instalamos una tarjeta despu´s de la instalao e ci´n, probablemente tendremos que recompilar el kernel. o 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>
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 9. Servicios de red

99

9.1.7.

Configuraci´n gr´fica de DHCP, interfaz Webmin o a

El m´dulo DHCP para nuestra interfaz web: Webmin, nos facilitar´ mucho la tarea de administraci´n o a o 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. a

Figura 9.1: M´dulo Webmin para DHCPD o

Jose Antonio Escart´ Vigo, Junio 2005. ın

100

Servidor Linux para conexiones seguras de una LAN a Internet

Figura 9.2: M´dulo DHCPD WEBMIN: Subredes y redes compartidas o

Figura 9.3: M´dulo DHCPD WEBMIN: m´quinas y grupos de m´quinas o a a

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 9. Servicios de red

101

9.2.

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. o o o 2. Por otra parte, traducir una direcci´n IP en una o varias direcciones can´nicas, es lo que se conoce o o como traducci´n inversa. o DNS (Domain Name Service) es un sistema jer´rquico con estructura de ´rbol. El inicio se escribe “.” a a y se denomina ra´ al igual que en las estructuras de datos en ´rbol. Bajo la ra´ se hallan los dominios de ız, a ız m´s alto nivel (TLD, del ingl´s, Top Level Domain), cuyos ejemplos m´s representativos son ORG, COM, a e a EDU y NET, si bien hay muchos m´s (como los dominios de paises, .es, .uk, . . . ). Del mismo modo que a un ´rbol, tiene una ra´ y ramas que de ella crecen. a ız Cuando se busca una m´quina, la consulta se ejecuta recursivamente en la jerarqu´ empezando por a ıa, la ra´ As´ pues, empezando en “.” encontramos los sucesivos servidores de nombres para cada nivel en el ız. ı nombre de dominio por referencia. Por supuesto, nuestro servidor de nombres guardar´ toda la informaci´n a o obtenida a lo largo del proceso, a fin de no tener que preguntar de nuevo durante un buen rato. En el a ´rbol an´logo, cada “.” en el nombre es un salto a otra rama. Y cada parte entre los “.” son los nombres a de los nodos particulares en el ´rbol. a

9.2.1.

¿Para qu´ necesitamos un DNS? e

El DNS define: Un espacio de nombres jer´rquico para los hosts y las direcciones IP. a Una tabla de hosts implementada como una base de datos distribuida. Un traductor (resolver) o librer´ de rutinas que permite realizar consultas a esa base de datos. ıa Enrutamiento mejorado para el correo electr´nico. o Un mecanismo para encontrar los servicios en una red. Un protocolo para intercambiar informaci´n de nombres. o Para ser aut´nticos ciudadanos de Internet, los sitios necesitan el DNS. Mantener un fichero local e /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 a 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´ ser clientes del DNS, pero relativamente ıan pocos necesitan ser servidores de DNS. Si nuestra organizaci´n es peque˜a (unos pocos hosts en una unica red), podemos ejecutar un servidor o n ´ 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´ tener m´ltiples servidores de DNS para reducir la n ıa u 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.

Jose Antonio Escart´ Vigo, Junio 2005. ın

102

Servidor Linux para conexiones seguras de una LAN a Internet

9.2.2.

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. o Resoluci´n inversa (de direcciones IP a nombres). o Listas de control de acceso. Servidores secundarios. Transferencia segura de zonas entre servidores primarios y secundarios (y puertos). Localizaci´n de servicios. o Respuestas parametrizadas en funci´n del origen de la petici´n (vistas). o o Uso de la herramienta rndc. Logs a medida.

9.2.3.

Configuraci´n del servidor o

Un FQDN (Nombre de Dominio Totalmente Cualificado) est´ formado por un host y un nombre de a dominio, incluyendo el de m´s alto nivel. Por ejemplo, www.upc.es es un FQDN. www es el host, upc es a el dominio de segundo nivel y .es es el dominio de de m´s alto nivel. Un FQDN siempre comienza con el a nombre del host y contin´a subiendo directo al dominio de m´s alto nivel. u a 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´ las versiones anteriores. DNS es uno de los ıan puntos m´s fr´giles y puede ser atacado en cualquier momento, borrando nuestras m´quinas de la red. a a a 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: e bind9-host dns-browse dnscvsutil nslint bind9-doc libbind-dev libnet-dns-perl dhcp-dns

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 9. Servicios de red Los archivos de configuraci´n que intervendr´n ser´n los siguientes: o a a /etc/bind/named.conf : Para definir las zonas DNS b´sicas. a /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. n /etc/bind/db.192.168.0 : Para a˜adir el DNS inverso de una LAN. n El archivo /etc/bind/named.conf.options tambi´n es procesado por resolvconf para producir: e /var/run/bind/named.options

103

Este archivo es el mismo que el original, excepto que la especificaci´n forwarders es una lista de los o 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/. o a

9.2.4.

Traducci´n de nombres a direcciones IP o

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. n A menos que seamos un proveedor de servicios de internet, se nos habr´n proporcionado una o m´s a a 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 { // 0.0.0.0; // }; Y dejarlo en algo como esto: forwarders { 194.224.52.4; 194.224.52.6; }; Entre las opciones tambi´n se encuentra ocultar la versi´n de Bind, para una mayor seguridad del e o sistema: "DNS server";

9.2.5.

Configuraci´n gr´fica de DNS BIND, interfaz Webmin o a

Para facilitarnos la compleja tarea de configuraci´n de DNS BIND es posible utilizar la herramienta o de administraci´n web: Webmin. o Para la instalaci´n del m´dulo correspondiente, utilizamos el siguiente apt: o o #apt-get install webmin-bind En los apartados siguientes ir´ comentando las opciones a las que se puede acceder desde el m´dulo e o web.

Jose Antonio Escart´ Vigo, Junio 2005. ın

104 Pantalla principal

Servidor Linux para conexiones seguras de una LAN a Internet

Para acceder al servidor BIND, pulsamos sobre la pesta˜a “Servidores” y despu´s sobre el icono “Sern e vidor de DNS BIND”, aparecer´ el men´ de configuraci´n, como se observa en la figura 9.4. a u o En este men´ podemos realizar las siguientes opciones: u 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 a 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. o a o Pasemos a ver cada una de las secciones a las que podemos acceder.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 9. Servicios de red Opciones generales

105

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

Jose Antonio Escart´ Vigo, Junio 2005. ın

106 Crear zona maestra

Servidor Linux para conexiones seguras de una LAN a Internet

En esta secci´n podemos crear un servidor DNS primario o editar sus par´metros una vez configurado. o a

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. o a

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 a asociados al dominio, esto es, por motivos de redundancia. Si bien es posible utilizar un unico servidor ´ DNS no es una pr´ctica recomendable. a A pesar del nombre servidor “secundario”, la informaci´n que contienen estos servidores DNS, es el o mismo valor que cualquier otro servidor DNS primario, la raz´n principal por la que se configura un servidor o 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 unica 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. o o La actualizaci´n de esta copia de Archivo de Zona es conocida como “Zone Transfer” y ocurre depeno diendo de los par´metros que hayan sido definidos. a
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 9. Servicios de red Crear zona de s´lo cache o En esta secci´n podemos crear y modificar todos los par´metros de un servidor DNS de cache. o a

107

Figura 9.8: Webmin BIND: Crear zona de s´lo cache o 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 unico que se evita en este tipo de ´ servidores DNS es mantener Archivos de Zona, toda resoluci´n que realice un servidor “cache” debe ser o 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 o o por lo tanto evitan un cierto nivel de tr´fico, aprovechando la informaci´n local para buscar resoluciones a o 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 o a 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´ en los servidores DNS de nuestra red. ıo
Jose Antonio Escart´ Vigo, Junio 2005. ın

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 a firewall para permitir que s´lo un servidor DNS se comunique con Internet. Cuando hayamos configurado o los dem´s servidores DNS de nuestra red para reenviar a ese servidor DNS consultas que no puedan a resolver localmente, ese servidor funcionar´ como nuestro unico reenviador. a ´

9.2.6.

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 o 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 a binario monol´ ıtico en lugar de una arquitectura m´s modular). Adem´s DNS, frecuentemente se ejecuta a a como ra´ lo que hace que sea m´s peligroso. ız, a As´ mismo, como DNS es dif´ de configurar y se conoce poco, se suele configurar y asegurar mal. Las ı ıcil 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 o a a o del administrador, las brechas DNS ofrecen la forma m´s r´pida y f´cil de dejar a nuestra empresa fuera a a a del mapa de Internet. Incluso aunque tengamos conectividad IP con el mundo, sin un servicio DNS v´lido a para nuestros dominios, nadie podr´ llegar a nuestro servidor web y no se producir´ ning´n flujo de ıa ıa u correo. De hecho, se ha citado DNS como el punto m´s d´bil en toda la infraestructura de Internet y a e un objetivo potencial para los ataques del terrorismo cibern´tico. En lugar de introducirse en nuestros e servidores o atravesar nuestro cortafuegos, un atacante puede simplemente enviar un DoS (denegaci´n de o 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 u nuestro sitio ser´n redireccionados al sitio que le apetezca al atacante. a 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 cueno ta de root, la este c´digo puede lanzarse con los mismos privilegios. Adem´s, se puede interrumpir la o a propia operaci´n del servidor BIND, y obtener otro tipo de informaci´n, que llevar´ a explotar otras o o ıa vulnerabilidades diferentes en el sistema. ¿Cu´les son los sistemas son afectados? a Est´n afectados todos los servidores de nombres de dominio (DNS), que ejecutan las versiones de a BIND 4.9.8 y 8.2.3 (y todas las anteriores). Las versiones 9.x, ya se encuentran corregidas. Como el funcionamiento normal de la mayor´ de los servicios de Internet depende del funcionamiento apropiado ıa de los servidores de DNS, podr´ afectar otros servicios si estas vulnerabilidades son explotadas. ıan ¿Como usuario domestico, nos debemos preocupar por este problema? Los usuarios comunes, tambi´n estamos afectados por este problema, aunque en forma indirecta. Gee neralmente 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´ a ı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´ estar ejecutando este servicio, sin haberlo configurado ı, ıan expl´ ıcitamente.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 9. Servicios de red

109

9.3.

NIS: Servicio de informaci´n de red o

El servicio de informaci´n de red (NIS, Network Informati´n Service) hace posible la compartici´n o o o de archivos cr´ ıticos a trav´s de una red de ´rea local. Normalmente, archivos tales como /etc/passwd e a y /etc/group, que idealmente deber´ permanecer sin cambios entre todas las m´quinas, se comparten ıan a mediante NIS. De esta forma, cada m´quina de red que tiene su cliente NIS correspondiente puede leer los a 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 A los usuarios, NIS da la apariencia de un sistema m´s uniforme (no importa con qu´ m´quina trabaje, a e a que todas sus herramientas y archivos estar´n all´ a ı).

9.3.1.

Funcionamiento b´sico a

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 unica por cada archivo. NIS accede a esas tabla ´ por nombre y permite b´squedas de dos formas: u Listado de la tabla entera Presentaci´n de una entrada espec´ o ıfica basada en una b´squeda por una clave dada u 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 a o las entradas que necesite para que el sistema trabaje en modo usuario unico (cuando no hay conectividad ´ por red), por ejemplo, el archivo /etc/passwd. Cuando un programa hace una petici´n de b´squeda de la o u informaci´n de contrase˜a de un usuario, el cliente comprueba su archivo passwd local y si el usuario no o n existe all´ entonces el cliente hace la petici´n a su servidor NIS para buscar la entrada correspondiente en ı, o la tabla de contrase˜as. Si NIS tiene entrada, la devolver´ cliente y al programa que pidi´ la informaci´n. n a o o 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´ recibir la informaci´n n ıa o sin que sepa qu´ ha ocurrido entre medias. e Esto se aplica a todos los archivos que se comparten por NIS. Otros archivos comunes compartidos incluyen a /etc/group y /etc/hosts.

9.3.2.

Servidores NIS

NIS puede tener un unico 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 o es grande, podemos necesitar distribuir la carga entre m´s de una m´quina. Esto lo podemos hacer a a configurando uno o m´s servidores NIS secundarios. Adem´s de ayudar a distribuir la carga, los servidores a a secundarios tambi´n proporcionan un mecanismo de manejo de fallos de servidores, ya que puede continuar e contestando peticiones incluso mientras el maestro u otros secundarios est´n ca´ a ı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 secuno darios 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 o e de mapas en los secundarios. Una vez recibidos los archivos, los servidores secundarios actualizan tambi´n e 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. n

Jose Antonio Escart´ Vigo, Junio 2005. ın

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 a o env´ datos, no realiza autenticaci´n. El proceso de autenticaci´n de usuarios se deja a cada m´quina indiıa o o a vidual. 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. a Deberemos dar nombre a los dominios NIS, y es una buena pr´ctica (aunque no obligatoria) usar a nombres distintos de nuestros nombres de dominios DNS. Nos ser´ mucho m´s f´cil explicar los dominios a a a 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 o o o Webmin. Para la instalaci´n se utiliza el siguiente apt: o #apt-get install webmin-nis

Figura 9.10: Interfaz gr´fica Webmin para el servidor NIS a

9.3.3.

Configuraci´n del servidor NIS maestro o

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 o n o a 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” o e a era una marca registrada de British Telecom y para evitar un pleito, Sun renombr´ el paquete a Servicio o de informaci´n de red, despu´s otros vendedores de Unix le siguieron. o e 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. o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 9. Servicios de red Para instalar el servidor NIS realizaremos un apt: #apt-get install nis,. . . la instalaci´n nos pedir´ que especifiquemos el nombre de dominio o a

111

Para obtener m´s informaci´n se instala en el sistema el HowTo de NIS, documento muy clarificador: a o /usr/share/doc/nis/nis.debian.howto.gz Disponemos de varios archivos de configuraci´n: o /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: e o #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 e e 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, ı a as´ como algunos par´metros adici´nales sobre c´mo compartirlos. Editamos el Makefile y retocamos las ı a o o 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 coma partir´n una vez compilemos el Makefile. a La mayor´ de las entradas comienzan con: $(YPWDIR) y $(YPSRCDIR), son variables que se configuran ıa al inicio del Makefile, y se˜alan la ruta donde encontrar los archivos, el valor por defecto es /etc. n 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 o Ypinit ejecutar´ el make, para construir los mapas y ponerlos en los servidores secundarios que se le a indiquen en /var/yp/yp-servers.

Jose Antonio Escart´ Vigo, Junio 2005. ın

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=1000 ... # 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 ....

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 9. Servicios de red Configuraci´n de un NIS maestro para poner esclavos o Esto requiere dos tareas:

113

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´ a ı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´ ser mayor que cero. Estas variables del /var/yp/Makefile son: ıa MINUID=<numero> MINGID=<numero> Configuraci´n de un servidor NIS secundario o 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. a e Los servidores no requieren mantenimiento adicional una vez configurados, debido a que el servidor NIS maestro les env´ las actualizaciones si se recontruyen los mapas. ıa 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 n n a manejar´, tomando el campo encriptado del archivo /etc/shadow y mezcl´ndolo con la copia compartida a a de /etc/passwd en NIS. ´ Esta opci´n se encuentra en el archivo /var/yp/Makefile. A menos que tengamos una raz´n espec´ o o ıfica para no compartir las contrase˜as, dejaremos la variable MERGE PASSWD=true. n El archivo /etc/group permite tener contrase˜as de grupo aplicadas en el sistema. Puesto que necesita n 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. o

9.3.4.

Cliente NIS

El primer paso que deberemos realizar es indicar al cliente NIS, ypbind, cu´l es el dominio al que se va a a conectar, siendo el comportamiento por defecto de ypbind interrogar al servidor de la red local a la que est´ conectado. a De esta forma, si se trata de un ordenador port´til, el cual deber´ conectarse a diferentes redes podea a mos optar por dejar el archivo /etc/yp.conf vac´ sin especificar el dominio a emplear, de esta forma el ıo ypbind realizar´ la consulta por defecto en la red local en donde se esta conectando. a Para lanzar el cliente NIS, ejecutaremos el siguiente comando: #ypbind
Jose Antonio Escart´ Vigo, Junio 2005. ın

114

Servidor Linux para conexiones seguras de una LAN a Internet

Configuraci´n local de NIS: /etc/yp.conf o Si hubiera m´s de un dominio en la red especificaremos el servidor NIS de la siguiente forma: a
# yp.conf # # # # # # IMPORTANT: # # # 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. 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: e u #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: o a #domainname proyecto Si no supi´ramos el nombre o IP del servidor en un determinado dominio se podr´ modificar el archivo e ıa de configuraci´n de la siguiente forma: o #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 o servidor que encuentre en la red local. Seleccionar los archivos de configuraci´n del servidor o Una vez establecida la conexi´n con el servidor NIS, es necesario especificar qu´ archivos de configuo e raci´n importaremos. o Normalmente los archivos de configuraci´n ser´n los correspondientes a la configuraci´n de usuarios, o a o 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 o u o 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´ nora ı malmente se consultar´ en primer lugar el archivo local y posteriormente el ofrecido por NIS. a 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 o total sobre los usuarios que pueden acceder a los diferentes ordenadores de la red sin necesidad de editar manualmente cada uno de los hosts.
Jose Antonio Escart´ Vigo, Junio 2005. ın

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. u Una vez realizada esta comprobaci´n podremos activar este servicio NIS a˜adiendo el siguiente c´digo o n o 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: a Servicio files yp nis dns [NOTFOUND=return] nis+ Descripci´n o Usa el archivo de la propia m´quina a Usa NIS para realizar la b´squeda u Usa NIS para realizar la b´squeda (nis es un alias de yp) u Usa DNS para realizar la b´squeda (se aplica s´lo al archivo hosts) u o Detiene la b´squeda u Usa NIS+

Prueba de configuraci´n del cliente NIS o 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 o cliente, y probar de nuevo.

9.3.5.

Herramientas b´sicas a

Para trabajar con NIS disponemos de algunas herramientas que extraen informaci´n de la base de o datos mediante la l´ ınea de comandos: ypcat: Comentada en la secci´n anterior, vuelca los contenidos de un mapa NIS (archivo NIS). o ypwhich: Devuelve el nombre del servidor NIS que responde a las peticiones. Tambi´n es una buena e herramienta de diagn´stico, si NIS parece no funcionar correctamente. o 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 util, por ejemplo, a ´ para el passwd: #ypmatch josan passwd
Jose Antonio Escart´ Vigo, Junio 2005. ın

116

Servidor Linux para conexiones seguras de una LAN a Internet

9.3.6.

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 n a 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 auu tenticaci´n a nivel de RPC, cualquier m´quina de la red puede enviar una respuesta falsa, y pasar por el o a servidor de NIS. Para que el ataque tenga ´xito, el paquete con la respuesta falsa debe llegar al cliente e antes de que responda el servidor. Tambi´n debe ser capaz de observar la petici´n y generar la respuesta, e o para ello es preciso que la m´quina que lleva a cabo el ataque est´ situada en el camino de comunicaa e ci´n entre servidor y cliente. Se puede crear f´cilmente un mapa NIS para sustituir al del servidor. Un o a intruso podr´ acceder al cliente NIS a trav´s de los comandos de acceso remoto, cambiando en el mapa, a e la direcci´n de la m´quina que lleva a cabo la intrusi´n, por otra m´quina que se encuentre en el archivo o a o a /etc/hosts.allow. La soluci´n de estos problemas de seguridad pasa por utilizar autenticaci´n en el protocolo RPC. NIS+ o o 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´ tener un defecto e ıa grave, dejaba su archivo de contrasen˜s legible por pr´cticamente cualquier persona en todo Internet, esto a a supon´ un gran n´mero de posibles intrusos. Si un intruso sab´ nuestro dominio NIS y la direcci´n de ıa u ıa o nuestro servidor, simplemente ten´ que enviar una consulta al mapa passwd y recibir al instante todas ıa las contrase˜as encriptadas del sistema. Con un programa r´pido para crackear contrase˜as, y un buen n a n diccionario, averiguar unas cuantas contrase˜as de usuario no ten´ ning´n problema. n ıa u De todo esto trata la opci´n securenets. Simplemente restringe el acceso a su servidor NIS a ciertos o nodos, bas´ndose en la direcci´n IP. La ultima versi´n de ypserv implementa esta caracter´ a o ´ o ıstica de dos formas. Utilizando un archivo de configuraci´n especial: /etc/ypserv.securenets. o Utilizando convenientemente los archivos /etc/hosts.allow y /etc/hosts.deny.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 9. Servicios de red

117

9.4.

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. n Todav´ pod´ construirse protocolos basados en la confianza, tanto el servidor como el cliente, confiando ıa ıan en la informaci´n que intercambian. Internet convierte este principio en algo absurdo y este es sin duda o uno de los mayores problemas de NFS. La segunda versi´n del protocolo es la primera versi´n publicada o o y sigue la siendo la m´s extendida en nuestros d´ Existen implementaciones sobre varias plataformas a ıas. diferentes y se han descrito pocos problemas de compatibilidad. La tercera versi´n del protocolo data de 1992 y presenta varias mejoras: o Mejora del rendimiento debido a la reescritura del c´digo de red y uso de paquetes de datos mayores. o 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. o o n Por desgracia, la tercera versi´n de NFS para Linux, esta todav´ en pa˜ales. NFS para GNU/Linux o ıa n 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´ red, opera las modificaciones sobre el sistema local. o ıa Dispone de todo lo que podemos esperar de un sistema de archivos tipo Unix: gesti´n de permisos, o propiedades avanzadas, enlaces, tuber´ con nombre . . . ıas Pero como indica su nombre ha sido ideado para ser usado de forma transparente a trav´s de la red. e Desde el punto de vista del cliente, se trata de un sistema de archivos cl´sico, se monta con mount, a y se integra en la jerarqu´ de archivos existente en la m´quina. Todas las ordenes de entrada/salida son ıa a enviadas al servidor que se encarga de procesarlas, controlar acceso concurrente a archivos, etc.

9.4.1.

Cliente NFS

Montaje de las partici´nes o 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: o a El nombre del servidor. El nombre de la partici´n a la que se desea acceder. o El nombre del directorio donde vamos a montar la partici´n NFS. o 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 o 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 o molesto si estamos montando /usr pero tiene sentido si estamos montando particiones de datos. La opci´n -o noexec es todav´ m´s radical, ya que imposibilita la ejecuci´n de programas desde o ıa a o la partici´n montada por NFS. Si tenemos usuarios que escriben scripts esta opci´n puede ser muy o o molesta.
Jose Antonio Escart´ Vigo, Junio 2005. ın

118 Ejemplos de uso

Servidor Linux para conexiones seguras de una LAN a Internet

Los ejemplos de uso de una partici´n NFS son numerosos. Podemos imaginar, entre otros, una partici´n o o de lectura/escritura sobre /home. As´ cada usuario puede trabajar sobre cualquier m´quina de la red ı a 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 o p´rdidas de mensajes. e Podemos tambi´n compartir una partici´n que contenga ejecutables, como /usr/bin para ganar algo e o de espacio en disco sobre las m´quinas locales. Llegando al extremo podr´ a ı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 utiles. Showmount en este caso, nos permite ver la lista ´ de particiones NFS montadas por otras m´quinas dentro de la red. a

9.4.2.

Montaje autom´tico de particiones NFS a

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 o o a o permite que cualquier usuario monte la partici´n con mount, pero no en el arranque. o

9.4.3.

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 o que los propietarios de los archivos sobre el servidor y sobre la m´quina local no concuerdan. Es que Linux a no usa los nombres de usuario y grupos sino que utiliza los c´digos de usuario y de grupo (UID, GID). Las o 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 ı o o sobre otra m´quina donde el UID 542 corresponde al usuario Pepe. Esto es un problema porque ahora a 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 a de usuarios uniforme. Los accesos concurrentes Las diferentes versiones del protocolo NFS dejan en manos del implementador la soluci´n de los proo blemas derivados de la concurrencia. Uno de los problemas m´s habituales en una red lenta o subestimada a 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.
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 9. Servicios de red

119

9.4.4.

Servidor de NFS

Existen dos servidores NFS en Linux, uno funciona como un servidor tradicional y el otro integrado en el kernel. Este ultimo es frecuentemente llamado knfsd, y ofrece mejores resultados en t´rminos de rapidez ´ e pero le falta estabilidad. Para realizar la instalaci´n haremos un apt: o #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: a # /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) 192.168.0.10(rw) La mayor´ de implementaciones de NFS no autorizan la exportaci´n de un subdirectorio de un diıa o rectorio previamente exportado. El servidor de NFS del kernel si que permite esta opci´n y esto puede o favorecer ciertas configuraciones. Entre las opciones m´s corrientes, podemos citar las opciones de seguridad que veremos m´s adelante a a y las opciones de montaje tales como rw o ro que permiten la exportaci´n en modo lectura/escritura o 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 doa minios enteros. Si estamos utilizando NIS podemos tambi´n precisar el nombre del grupo de NIS. e Modificar din´micamente las particiones exportadas no es posible, el servidor NFS no actualiza los a 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 o 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): o o #exportfs -u <directorio> Este comando nos permite interrumpir moment´neamente la exportaci´n de uno o varios directorios. a o Este comando no modifica el contenido de /etc/exports y la modificaci´n no es definitiva. Permite prohibir o todo nivel de montaje, pero los montajes existentes no son desactivados. Restricci´n de los permisos de los clientes o Cuando el administrador de una m´quina monta una partici´n NFS, dispone de permisos de acceso de a o escritura, como sobre cualquier otra partici´n del disco local. Si la red es administrada por varios usuarios o root, en m´quinas distintas se sugiere el uso de la opci´n: root squash en el archivo de /etc/exports. a o Esta opci´n elimina los privilegios de root sobre la partici´n montada, lo que asegura la integridad o o de la misma. En el marco de una exportaci´n de /home impedir´ que el usuario root de una m´quina o ıa a 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” e o (usuario an´nimo). o
Jose Antonio Escart´ Vigo, Junio 2005. ın

120 El problema del UID

Servidor Linux para conexiones seguras de una LAN a Internet

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. o En primer lugar no montamos directamente /home en el conjunto de m´quinas cliente, sino que el a servidor debe exportarlas una a una sobre cada cliente. Hecho esto, usamos la opci´n all squash para que o 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 o ı a ´l es due˜o sin ning´n problema. e n u La autenticaci´n por m´quina funciona relativamente bien si los recursos personales son montados desde o a clientes Windows donde solo hay un usuario. Esto, sin embargo, es problem´tico en entornos multiusuario a (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 a o o a est´ autorizada. a

9.4.5.

Configuraci´n gr´fica de NFS, interfaz Webmin o a

Para facilitarnos la tarea de la configuraci´n de archivos, en Debian, disponemos de la herramienta web: o Webmin. Esta herramienta nos permitir´ una configuraci´n y administraci´n de forma simple y sencilla. a o o Para instalar el m´dulo NFS de Webmin realizaremos un apt: o #apt-get install webmin-exports

Figura 9.11: M´dulo Webmin para NFS o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 9. Servicios de red

121

9.5.

Samba: Servicio de conexiones para sistemas Microsoft

En esta secci´n configuraremos el servidor Samba, mostrando sus funcionalidades m´s habituales. o a Basado en los articulos sobre Samba publicados en http://bulma.net

9.5.1.

Compartici´n de recursos o

El servicio de FTP permite intercambiar archivos en red. Pero presenta serios problemas de integraci´n. o Es decir no es transparente al usuario, su uso cambia seg´n trabajemos con los entornos Linux o Windows. u NFS, soluci´n limitada a m´quinas Linux o a Entre m´quinas Linux, es posible usar el protocolo NFS para compartir archivos. Se trata de una buena a soluci´n puesto que permite conservar todas las funcionalidades del sistema de archivos Linux. Pero tiene o una serie de inconvenientes: NFS presenta problemas de seguridad No existe una buena implementaci´n libre de NFS para equipos Windows o Protocolo CIFS, una posible soluci´n o En lugar de usar una soluci´n costosa, en los equipos Windows, es m´s econ´mico (y lleva menos o a o trabajo) utilizar el protocolo empleado nativamente por las m´quinas Windows. El protocolo CIFS (Coma mon Internet FileSystem), tiene implementaciones sobre un gran n´mero de plataformas. Existiendo una u implementaci´n libre, llamada SaMBa, que permite utilizarlo sobre servidores Unix/Linux. o

9.5.2.

¿Qu´ es Samba? e

Samba es una implementaci´n bajo Unix/Linux de los protocolos CIFS y NetBIOS (antiguamente o 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. a Veremos m´s adelante como configurarlo en detalle, pero es posible: a Proteger con una contrase˜a el acceso a un directorio compartido. n Proteger con una contrase˜a personificada para cada usuario, y dotar de permisos de acceso indivin dualizados. 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. o • Archivos de configuraci´n. o • Documentaci´n b´sica de Samba. o a
Jose Antonio Escart´ Vigo, Junio 2005. ın

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. o • Documentaci´n esencial de Samba. o 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 o del servidor Samba. swat: Es una aplicaci´n web que permite configurar el servidor Samba f´cilmente. Pero para ello nos o a har´ falta: Apache y varios paquetes de dependencias. a Estos paquetes se pueden instalar f´cilmente con apt: a #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 o e 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´quia nas presentes en la red sobre cuales son los recursos disponibles. Este demonio maneja tambi´n la e resoluci´n de nombres de NetBIOS. Para ello, puede comunicarse con un servidor WINS (Windows o Internet Naming Service) que se encuentre presente en la red.

Existen dos formas para realizar la configuraci´n: o Editar directamente los archivos de configuraci´n con un editor de texto. o Manejar una herramienta gr´fica que generar´ el mismo resultado. Aqu´ veremos, el manejo de a a ı Swat (Samba Web Administrati´n Tool), que se trata de una interfaz que se comporta como un o servidor Web, conect´ndose a la m´quina por medio de un simple navegador. Es posible leer la a a documentaci´n, cambiar la configuraci´n y realizar el resto de tareas administrativas despu´s de o o e habernos validado con un usuario y una contrase˜a. El servidor Swat, por defecto, se ejecuta en el n puerto http://localhost:901. 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 a 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.
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 9. Servicios de red

123

9.5.3.

Configuraci´n gr´fica de Samba, interfaz SWAT o a

La herramienta SWAT es el ejemplo de una buena interfaz de administraci´n gr´fica. Intenta de forma o a relativamente transparente proporcionar todas las funcionalidades de la configuraci´n en modo texto. o Como la configuraci´n de Samba es sencilla, ha sido posible agrupar todas las posibilidades en un o n´mero reducido de opciones, sin sobrecargar la interfaz. u 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. e o Si no lo realiza la instalaci´n en el sistema, para poder ejecutar SWAT hay que modificar el archivo o /etc/inetd.conf. Y a˜adir la siguiente l´ n ınea: swat stream tcp nowait.400 root /usr/sbin/swat swat

Figura 9.12: Interfaz gr´fica Swat para Samba a

Presentaci´n de los archivos en modo texto o /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. a e 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.

Jose Antonio Escart´ Vigo, Junio 2005. ın

124 Los men´ s de SWAT u

Servidor Linux para conexiones seguras de una LAN a Internet

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 o o 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 a gr´fica. De un modo u otro toda esta documentaci´n es en el fondo muy descriptiva. a o GLOBALS : Contiene variables generales que se aplican al total de los recursos puestos a disposici´n o del servidor Samba. Esta secci´n contiene tambi´n informaci´n de identificaci´n del servidor dentro o e o o 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 a primero crear la partici´n compartida (o los directorios) y despu´s precisar para cada partici´n sus o e o propiedades particulares. PRINTERS : Es casi id´ntico al anterior, pero permite compartir impresoras en lugar de particiones e de disco o directorios. WIZARD: Permite configurar de una forma r´pida los archivos de configuraci´n, establecer el modo a o de funcionamiento del servidor y el servidor WINS de la red. Desdeaqu´ tambi´n podemos cambiar ı, e la configuraci´n para compartir los directorios /home por Samba. o 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 e un valor por defecto. PASSWORD: Permite al usuario cambiar su contrase˜a. Se trata de un interfaz grafico para el n programa smbpasswd. Sirve tambi´n al administrador para a˜adir nuevos usuarios. e n

9.5.4.

Funcionamiento de CIFS

Sobre una misma red, varias m´quinas pueden poner recursos a disposici´n de otras. CIFS dispone de a o 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 a a m´quina en particular, el Servidor de Anuncios (Master Browser) que se encarga de centralizar estas a 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. a 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. a a Estableciendo un sistema de validaci´n para restringir el acceso, basado en contrase˜a. o n El anuncio de servicios esta limitado al “grupo de trabajo”. Cada m´quina Windows puede ser miembro a de un solo grupo, y por tanto, solo puede pertener a un conjunto de m´quinas que compartan los mismos a 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 a necesario pasar por un sistema de autenticaci´n. o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 9. Servicios de red Existen varias formas de autenticaci´n, cada una con sus ventajas e inconvenientes: o

125

La autenticaci´n por usuario y contrase˜a: Se trata del m´todo por defecto. Representa la ventaja o n e de permitir una gesti´n fina de los permisos. Para cada usuario es posible definir el acceso o no a o unos recursos. Este m´todo presenta un inconveniente: cada usuario debe disponer de una cuenta en e la m´quina Unix, para permitir la autenticaci´n. a o El control de acceso por comparticiones: Se trata de un m´todo m´s global: cada recurso compartido e a 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. n Este m´todo presenta la ventaja de que no son necesarias tantas cuentas de usuario como usuarios e haya, sino tantas como recursos se compartan. Autenticaci´n contra otro servidor : Existen tambi´n dos m´todos indirectos de control de acceso. o e e • El m´todo server : Consiste en consultar con otro servidor CIFS, que se encargara de la autene ticaci´n. o • El m´todo domain: Consiste en validarse contra el servidor de dominio NT. e

9.5.5.

Par´metros globales a

Es necesario elegir algunos par´metros de funcionamiento del servidor y para identificarlo y conseguir a que se integre en la red. El campo server string: Permite elegir la descripci´n que acompa˜a al nombre del servidor en la o n lista de recursos anunciados. El campo netbios name: Permite definir el nombre de la m´quina, no como un nombre de DNS, sino a como un nombre de resoluci´n de nombres propio del protocolo NetBIOS. Es importante entender o 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: e a El campo security: Permite elegir el m´todo de autenticaci´n, podemos elegir uno de los vistos e o anteriormente. Los men´s hosts allow y host deny permiten controlar el acceso a los recursos de ciertas m´quinas. u a Las configuraciones hechas en esta secci´n se aplican a la totalidad de los recursos compartidos, o independientemente de la configuraci´n especifica. o Las configuraciones realizadas por Swat se reflejan en el archivo de configuraci´n /etc/smb.conf. Si o 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
Jose Antonio Escart´ Vigo, Junio 2005. ın

126

Servidor Linux para conexiones seguras de una LAN a Internet

9.5.6.

Impresoras

Samba permite compartir f´cilmente una impresora conectada f´ a ısicamente a una m´quina Linux, haa ciendo asi accesible a todas las m´quinas conectadas a la red. a Una impresora de red que no soporte mecanismos de autenticaci´n puede ser puesta a disposici´n de o o los usuarios gracias a un servidor de impresi´n de Samba, lo que permite controlar el acceso. o Esta operaci´n de elegir impresora, se realiza dentro del menu PRINTERS. Este presenta una lista o de impresoras existentes. Seleccionando una en la lista desplegable y usando el comando Choose Printer (elegir impresora) accederemos a su configuraci´n. o Por defecto Samba extrae la lista de impresoras disponibles de /etc/printcap. Si la m´quina dispone de a otras impresoras, es posible a˜adirlas, introduciendo su nombre en el campo Create Printer y confirmando n la acci´n. o 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. o Autorizar el acceso guest, es permitir a cualquier usuario de una m´quina miembro del grupo de a 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 o e validaci´n. Cualquier usuario de una m´quina Windows puede cambiar su grupo de trabajo tantas veces o a como desee sin que ning´n mecanismo de autenticaci´n se lo impida. De este modo podr´ introducirse u o ıa en un grupo con permisos de impresi´n un usuario al que en principio hab´ o ıamos dejado fuera. Puede ser necesario usar restricciones por nombre de m´quina (archivos host allow y host deny) para una mayor a seguridad. El men´ browseable indica que este recurso debe ser anunciado por nmbd, y por tanto ser visible para u todos los usuarios.

9.5.7.

Compartici´n de directorios o

Algunas opciones son id´nticas a la compartici´n de impresoras. Las opciones que permiten limitar el e o acceso a ciertas m´quinas, elegir el camino de acceso al recurso (en este caso, directorio a compartir), y la a autorizaci´n de un usuario invitado son identicas a las que hemos encontrado en la secci´n PRINTERS. o o En el caso de la compartici´n de espacio en disco es posible tener un mejor control sobre el acceso. o Activando la opci´n read only, autorizar solamente el acceso en modo lectura o definir sobre un mismo o directorio varios tipos de permisos. Por ejemplo, se podr´ ofrecer acceso de solo lectura a la totalidad del ıa 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 o los derechos correspondientes al directorio que es compartido. El sistema usa un m´todo heuristico para e determinar el identificador de un usuario que se conecta, pero este m´todo es facilmente manipulable. e As´ que m´s vale usar la autenticaci´n en modo usuario. Este modo permite por ejemplo, compartir las ı a o carpetas personales del usuario sin riesgo alguno. Por defecto, Samba no utiliza contrase˜as cifradas. Esta elecci´n le permite interoperar con clientes n o 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 a no hay m´quinas windows95 o anteriores, es muy recomendable configurar el servidor de Samba para que a use contrase˜as cifradas. n Esto se hace, a˜adiendo al archivo smb.conf la siguiente l´ n ınea: encrypt passwords = Yes, . . . dentro de [global] Estas contrase˜as son almacenadas dentro del archivo /etc/smbpasswd. Las m´quinas clientes contactan n a con el servidor y reciben una clave codificada usando la contrase˜a cifrada. El resultado es reenviado al n servidor, que hace la misma operaci´n. Si los dos resultados son id´nticos la autenticaci´n es correcta. o e o Esto impide a un usuario “malicioso” hacerse con los passwords que atraviesan la red camino al servidor en busca de la autenticaci´n. o
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 9. Servicios de red

127

9.5.8.

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´ n ı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 unicamente a los usuarios mencionados. ´ La opci´n read only, permite impedir a los usuarios que escriban en el directorio compartido. Pudiendo o tambi´n limitar el acceso a unos usuarios concretos. e 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. o 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. o

9.5.9.

Integraci´n de Samba en un dominio NT o

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 o miembros de un dominio utilizan la misma base de datos de usuarios y contrase˜as. n Cuando un cliente miembro de un dominio intenta acceder a un recurso, env´ una petici´n a todas las ıa o m´quinas de la red, y se autentica contra la primera que responde. En una red NT, la tarea de responder a se lleva a cabo la m´quina “mas activa” que tenga acceso a la base de datos de usuarios. Se trata del a 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 a 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: e 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 o autenticaci´n. Evidentemente el servidor NT debe estar configurado para responder a las peticiones o de autenticaci´n del servidor de Samba. o Despu´s hay que crear una cuenta para el servidor: e #smbpasswd -j nombre_del_dominio Por ultimo, 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. a

Jose Antonio Escart´ Vigo, Junio 2005. ın

128

Servidor Linux para conexiones seguras de una LAN a Internet

9.5.10.

Configuraci´n de Samba como controlador de dominio o

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. o a 2. Configurar la autenticaci´n usuario por usuario. o 3. Declararse Master Browser, es decir invertir el mecanismo de elecci´n habitual en las m´quinas NT o a para llevarlas a nuestra m´quina Samba. a En el archivo /etc/samba/smb.conf, la secci´n [GLOBAL] debe contener los siguientes elementos: o 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, o o 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 o u o diferentes m´quinas. a Autorizar la conexi´n de las m´quinas NT o a Las m´quinas NT intentan conectarse directamente al servidor y no a un recurso en concreto. Es por a tanto preciso autorizarlas para ello. Necesitamos que las m´quinas (y no los usuarios) dispongan de una a 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 $. a a As´ por ejemplo la m´quina iceberg, tendr´ como identificador iceberg$. Hecho lo cual hay que a˜adir ı a a n esta cuenta de usuario a la base de datos de los usuarios de Samba, con el comando: #smbpasswd -a -m maquina

9.5.11.

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 e 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

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 9. Servicios de red El recurso puede ser: Un directorio. Una impresora. Un disco compartido.

129

El nombre de la m´quina es su nombre de NetBIOS, que puede (y suele) ser diferente de su nombre a de DNS. La opci´n -R permite elegir el modo de resoluci´n del nombre de la m´quina: o o a -R lmhosts: Permite consultar el archivo /etc/lmhosts, que resuelve nombres de IP contra los nombres de NetBIOS de la m´quina. a -R wins: Permite lanzar la consulta a un servidor WINS para obtener dicha conversi´n. o Una vez conectado al servicio en cuesti´n, disponemos de una interfaz de transferencia de archivos o id´ntica a la del FTP. Tambi´n podemos acceder a algunas opciones extra, tales como print archivo, para e e 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 coma a o partidos 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´ de directorios y podemos movernos por el ıa 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. a 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 e crear copias incrementales con la opci´n -N fecha, que no almacena nada m´s que los archivos que han o a sido modificados a partir de la fecha especificada.

9.5.12.

Configuraci´n gr´fica de Samba, interfaz Webmin o a

Para facilitarnos la tarea de la configuraci´n de archivos en Debian, tambi´n disponemos de otra heo e rramienta web, esta vez para el entorno Webmin. Esta herramienta nos permitir´ una configuraci´n y a o administraci´n de forma simple y sencilla. o Para instalar el m´dulo Samba de Webmin realizaremos un apt: o #apt-get install webmin-samba En la figura 9.13 se puede observar una serie de pantallas de la interfaz.

Jose Antonio Escart´ Vigo, Junio 2005. ın

130

Servidor Linux para conexiones seguras de una LAN a Internet

Figura 9.13: M´dulo Webmin para Samba o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 9. Servicios de red

131

9.6.

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 o encontrar en Linux es ProFTPD. Este servidor soporta la creaci´n de hosts virtuales permiti´ndonos diso e poner, de esta forma, de “m´s de un servidor FTP” en una sola m´quina. Se dise˜o como un servidor a a n 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. o o 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´ n ı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. o

9.6.1.

Servidor ProFTP

La configuraci´n se encuentra almacenada en el archivo: /etc/proftpd.conf. o Ser´ necesario editar este archivo y al menos, realizar los siguente cambios: a 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 o especificado al instalar. 3. 4. Colocamos, despu´s de ServerType, la l´ e ınea ServerIdent off. De esta forma el servidor no mostrar´ su a versi´n cuando se establece una conexi´n. o o Especificamos el User y el Group, si colocamos nobody nadie podr´ acceder al servidor. Si queremos a colocar un usuario an´nimo, se suele utilizar: user:ftp y group:nogruop. o

5. Cambiamos MaxClients por el n´mero m´ximo de conexiones simultaneas que deseamos permitir. u a Este valor lo tendremos que determinar en funci´n del n´mero de usuarios del servidor, el ancho de o u banda disponible y los recursos de la m´quina. a Podemos especificar m´ltiples opciones m´s, que se detallan en el archivo mediante comentarios, o u a podemos instalar el paquete de documentaci´n y consultarlo all´ o ı: #apt-get install proftpd-doc El archivo de configuraci´n /etc/ftpusers contendr´ los nombres de los usuarios, a los que se les pero a mitir´ el uso del servicio FTP. a

Jose Antonio Escart´ Vigo, Junio 2005. ın

132

Servidor Linux para conexiones seguras de una LAN a Internet

9.6.2.

Configuraci´n gr´fica de ProFTP, interfaz Webmin o a

Estas misma tareas administrativas se pueden realizar c´modamente con la herramienta web: Webmin. o Para instalar el m´dulo de ProFTPD para webmin: o #apt-get install webmin-proftpd

Figura 9.14: M´dulo Webmin para ProFTPD o Desde la ventana de ProFTP accederemos a las opciones de configuraci´n global del servidor y de los o 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. a a o Cuando configuramos un servidor virtual podemos volver a ajustar algunos de los par´metros establecidos a en las opciones globales, como por ejemplo las opciones de autenticaci´n de los usuarios y grupos en el o caso de que tengamos que establecer una configuraci´n de seguridad diferente en cada servidor virtual. o Desde las opciones de configuraci´n del servidor virtual tambi´n podremos establecer el directorio o e utilizado para guardar los archivos a disposici´n de los usuarios que se conecten a nuestro servidor de o forma an´nima. o

9.6.3.

Clientes FTP

En Internet es posible encontrar diversas aplicaciones que nos permiten trabajar con servidores FTP de una forma f´cil y r´pida. a a Desde nuestro entorno Debian se ponen a nuestra disposici´n: gFTP (GNU FTP ). o Para instalarlo: #apt-get install gftp, . . . para ejecutarlo: #gftp Es un cliente FTP, muy intuitivo y con entorno gr´fico. a

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 10

Servicios de usuario
10.1. 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 a limite de consumo de disco, quit´ndoles su habilidad de consumir espacio ilimitado en un sistema. a 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 a separado. Primero deberemos de asegurarnos que la opci´n quota est´ activada dentro de nuestro kernel (opci´n o a o 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

10.1.1.

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 /dev/hda10 /home ext3 defaults,usrquota /dev/hda7 /tmp ext2 defaults,usrquota,grpquota 1 1 1 1 0 2

El par´metro grpquota, habilita las cuotas de grupo en la partici´n que corresponde a /usr. El par´mea o a tro usrquota, habilita las cuotas de usuario en la partici´n que corresponde a /home. En una misma o partici´n pueden haber cuotas de usuario y grupo, colocando los dos par´metros (en el ejemplo /tmp). o a Ahora debemos de crear los siguientes archivos, para manejar las cuotas de la partici´n /home: o #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: o a

134 #chmod 600 /home/quota.user #chmod 600 /home/quota.group

Servidor Linux para conexiones seguras de una LAN a Internet

Los comandos que se muestran a continuaci´n nos permiten interactuar con el servicio de cuotas: o Comando #repquota -a #quotacheck -avug Descripci´n o Produce un resumen de la informaci´n de cuota de un sistema de archivos. o 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 o anacron cada cierto tiempo (por ejemplo cada semana). Edita la cuota de el grupo. Activa las cuotas. Desactiva las cuotas.

#edquota -g <cuota> #quotaon -vaug #quotaoff -vaug

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 a o e e e que los sistemas de archivos incluidos en /etc/fstab hallan sido montados, en caso contrario las cuotas no funcionar´n. a Para obtener m´s informaci´n podemos consultar el manual: a o $man quota $man -k quota

10.1.2.

Asignar cuotas a los usuarios

Esta operaci´n se realiza con el comando edquota. Es recomendable ejecutar quotacheck -avug para o obtener el uso de los sistemas de archivos lo m´s actualizado posible antes de editar cuotas. a Si ejecutamos el siguiente comando: #edquota -u <user> Se editar´n todos los dispositivos que permitan tener cuotas de usuario, especificado en /etc/fstab. a 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. a Permitiendo modificar las cuotas del grupo.

10.1.3.

Configuraci´n gr´fica de Quote, interfaz Webmin o a

Para facilitarnos la tarea de administraci´n de cuotas, podemos utilizar el m´dulo Webmin para cuotas. o o 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´ ı a ınea de comandos.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 10. Servicios de usuario

135

Figura 10.1: Gesti´n de cuotas de disco, en este caso /tmp o

Jose Antonio Escart´ Vigo, Junio 2005. ın

136

Servidor Linux para conexiones seguras de una LAN a Internet

10.2.

Cups: Servidor de impresi´n o

Como servidor de impresi´n utilizar´ Cups frente a LPD, este ultimo es un sistema bastante engorroso o e ´ 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. a n a Cada usuario puede tener su propia configuraci´n y no es necesario instalar varias impresoras cuando o cambiamos los par´metros de una impresora (econofast, presentaciones, color, 600x600, . . . ). a Usa SLP e IPP para descubrimiento/publicaci´n del servicio e impresi´n, respectivamente. Esto o o 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. o Pero no todo son alegr´ tambi´n existen una serie de desventajas respecto a lpd: ıas, e LPD es bastante m´s sencillo de hacer funcionar, para una m´quina aislada con la impresora en a a local. Si no necesitamos soporte a usuarios Microsoft igual nos estamos complicando la vida con Cups.

10.2.1.

Servidor Cups

Para instalar el servidor de impresi´n y que se pueda compartir por Samba, necesitaremos instalar o 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 o cargar con la herramienta: #modconf, en caso contrario, no tendremos m´s remedio que recompilar el a kernel, con las opciones adecuadas a nuestro sistema de impresi´n. o Configuraci´n del servidor o 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 ı a o forma mucho m´s visual y agradable. Para conseguirlo modificaremos las siguientes opciones: a ServerName host.dominio.com ServerAdmin admin@host.com HostNameLookups On <Location /> Order Deny,Allow Deny From All Allow From 192.168.0.* </Location>

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 10. Servicios de usuario <Location /admin> AuthType Basic AuthClass System Order Deny,Allow Deny From All Allow From 192.168.0.* </Location>

137

En la opci´n de Allow From pondremos la IP, o rango de IP desde las cuales accederemos al servidor o Cups. En el ejemplo, se deniega el acceso a todo el mundo y despues se permite a las direcci´nes del rango o 192.168.0.* 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 @LOCAL @IF(name)

Cuando hayamos terminado con la configuraci´n, reiniciaremos el servidor Cups: o #/etc/init.d/cupsys restart Configuraci´n gr´fica v´ web o a ıa Una vez hemos configurado los accesos, probaremos a conectarnos al servicio de administraci´n v´ o ıa web. Para ello, nos conectaremos al host donde se encuentre el servidor, accediendo por el puerto 631 : http://host.dominio.com:631 http://IP:631 http://localhost: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 a e a sistema. En la figura 10.2 podemos observar la pantalla de presentaci´n. o

Figura 10.2: Interfaz gr´fica de configuraci´n para Cups a o

Jose Antonio Escart´ Vigo, Junio 2005. ın

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. u o

Ahora hacemos clic en A˜adir impresora. En este men´ estableceremos un nombre a la impresora y n u estableceremos el tipo de conexi´n. o

Despu´s s´lo queda elegir el fabricante y el modelo adecuados. e o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 10. Servicios de usuario

139

Una vez realizado esto tendremos la impresora configurada, desde el men´ impresoras podemos impriu mir una p´gina de prueba y comprobar que la configuraci´n es correcta. a o

Figura 10.3: Impresora HP815 configurada para usar Cups

10.2.2.

Servidor Cups para Samba

Para configurar Cups rn Samba editaremos el archivo /etc/samba/smb.conf, para a˜adir lo siguiente: n
[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 = 192.168.0. 127.0.0.1 [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´ o a ıamos a˜adir los usuarios Samba para que n se puedan autenticar contra el servidor. Lo realizaremos de la siguiente forma: #smbpasswd usuario, . . . nos pedir´ que le establezcamos una contrase˜a. a n Una vez realizado esto, volveremos a la configuraci´n Cups y realizaremos los siguientes cambios: o 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´ funcionar. o e ıa /etc/init.d/samba restart /etc/init.d/cupsys restart

Jose Antonio Escart´ Vigo, Junio 2005. ın

140

Servidor Linux para conexiones seguras de una LAN a Internet

10.2.3.

Clientes Linux

La configuraci´n del cliente, es muy similar a la instalaci´n del servidor Cups. o o 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: e n #apt-get install ghostscript ghostscript-fonts Ahora iniciaremos el servicio Cups: #/etc/init.d/cupsys restart Y entraremos v´ web a nuestro host cliente (http://localhost:631 ) para configurar una nueva imıa presora. La a˜adiremos de la misma forma que en el servidor. n La diferencia est´ en la conexi´n, en este caso asignaremos una impresora del tipo Windows Printer a o v´ Samba. Y en el Device URI, colocaremos: ıa smb://<usuario:password>@<host.dominio.com>/<impresora> Una vez finalizada podemos imprimir una p´gina de prueba, para ver si todo est´ configurado correca a tamente.

10.2.4.

Clientes Microsoft

Vamos a realizar la instalaci´n, mediante los siguientes pasos: o Accedemos a Inicio -> Configuraci´n -> Panel de Control. o 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 ultimo, seleccionamos el modelo de impresora que vamos a agregar (en mi caso, HP 815). ´ Una vez hecho esto la impresora deber´ estar configurada y lista para imprimir. ıa

10.2.5.

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 o 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 o m´delo concreto de impresora que tenemos no est´ soportado. o a

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 10. Servicios de usuario

141

10.3.

Servidor Web

Un servidor web1 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 a n a a (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 ´ e ıntimamente ligados no debe dar lugar a confundir ambos t´rminos. HTML es un formato de archivo y HTTP es un protocolo. e 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 o e responde con el contenido que el cliente solicita. El cliente es el encargado de interpretar el c´digo HTML, o es decir, de mostrar las fuentes, los colores y la disposici´n de los textos y objetos de la p´gina; el servidor o a tan s´lo se limita a transferir el c´digo de la p´gina sin llevar a cabo ninguna interpretaci´n de la misma. o o a o ´ Sobre el servicio web cl´sico podemos disponer de aplicaciones web. Estas son fragmentos de c´digo a o 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 a del usuario. Son las aplicaciones tipo Java o Javascript, el servidor proporciona el c´digo de las o aplicaciones al cliente y ´ste, mediante el navegador, las ejecuta. Es necesario, por tanto, que el cliente e disponga de un navegador con capacidad para ejecutar aplicaciones (tambi´n llamadas scripts). e Normalmente, los navegadores permiten ejecutar aplicaciones escritas en lenguaje javascript y java, aunque pueden a˜adirse mas lenguajes mediante el uso de plugins. n Aplicaciones en el lado del servidor: El servidor web ejecuta la aplicaci´n. Una vez ejecutada, genera o cierto c´digo HTML, el servidor toma este c´digo reci´n creado y lo env´ al cliente por medio del o o e ıa protocolo HTTP. Las aplicaciones de servidor suelen ser la opci´n por la que se opta en la mayor´ de las ocasiones para o ıa realizar aplicaciones web. La raz´n es que, al ejecutarse ´sta en el servidor y no en la m´quina del cliente, o e a ´ste no necesita ninguna capacidad adicional, como s´ ocurre en el caso de querer ejecutar aplicaciones e ı javascript o java. As´ pues, cualquier cliente dotado de un navegador web b´sico puede utilizar. ı a

10.3.1.

Servidor Apache

El servidor HTTP Apache es un servidor HTTP de c´digo abierto para plataformas Unix (BSD, o GNU/Linux, etc.), Windows y otras, que implementa el protocolo HTTP/1.1 (RFC 2616) y la noci´n de o sitio virtual. Cuando comenz´ su desarrollo en 1995 se bas´ inicialmente en c´digo del popular NCSA o o o HTTPd 1.3, pero m´s tarde fue reescrito por completo. Su nombre se debe a que originalmente Apache a consist´ solamente en un conjunto de parches a aplicar al servidor de NCSA. Era, en ingl´s, a patchy ıa e 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 o a en su configuraci´n (en nuestro caso esto queda resuelto con Webmin). o En la actualidad (2005), Apache es el servidor HTTP m´s usado, siendo el servidor HTTP del 68 % a de los sitios web en el mundo y creciendo a´n su cuota de mercado. u

1 Definici´n o

obtenida de Wikipedia, la enciclopedia libre: http://es.wikipedia.org
Jose Antonio Escart´ Vigo, Junio 2005. ın

142 Configuraci´n de Apache o

Servidor Linux para conexiones seguras de una LAN a Internet

Para instalar el servidor web y realizar su configuraci´n de una forma c´moda y sencilla, utilizaremos o o unos m´dulos para la herramienta web Webmin. o 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 o o a de configuraci´n que podemos modificar del mismo. o

Figura 10.4: Interfaz Webmin para Apache

Directorios y archivos de configuraci´n o En nuestra distribuci´n Debian, los directorios de configuraci´n se encuentran colocados en los siguieno o tes puntos del sistema: ServerRoot: /etc/apache, . . . directorio base de los archivos de configuraci´n. o DocumentRoot: /var/www, . . . directorio base de las p´ginas web del servidor. a Ejecutables de Apache: /usr/bin El directorio base de los archivos de configuraci´n del servidor web se especifica en el archivo httpd.conf, o utilizando la directiva ServerRoot. Cuando el servidor web se inicia mediante los scripts de inicializaci´n, o 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 ). o o

Jose Antonio Escart´ Vigo, Junio 2005. ın

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 o a o contenido habitual se describen en el cuadro 10.1. Los cambios de configuraci´n de Apache m´s habituales o a se realizan en httpd.conf. Cuadro 10.1: Archivos de configuraci´n de Apache o Contenido Par´metros generales de configuraci´n del servidor. Este archivo tiende ahora a contener a o toda la configuraci´n, suprimiendo la necesidad de srm.conf y access.conf. o 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 o a de documentos (espacio de nombres) visible por todos los usuarios, adem´s de c´mo el a o servidor env´ informaci´n de ese ´rbol a clientes remotos. La estructura del ´rbol de ıa o a a 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.

Archivo httpd.conf srm.conf

access.conf mime.types

Hist´ricamente, los archivos .conf contienen los diferentes tipos de informaci´n. Sin embargo, todas o o 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 a o opciones en el archivo principal httpd.conf. Si existen los dem´s archivos .conf, se procesar´n en el orden a a siguiente: http.conf, srm.conf y access.conf. Los archivos de configuraci´n adicionales (especialmente los o relacionados con la seguridad) deber´n estar presentes en el ´rbol de documentos real que el servidor a a procesa. Estos archivos pueden ser modificados desde el m´dulo Webmin de Apache. Los par´metros a los que o a se puede acceder los podemos observar en la figura 10.5. Sintaxis de los archivos de configuraci´n: o Los archivos de configuraci´n de Apache contienen una directiva por l´ o ı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 o espacio en blanco entre el car´cter “\” y el fin de la l´ a ınea. En las directivas, dentro de los archivos de configuraci´n, no se hace distinci´n entre may´sculas y o o u min´sculas. Las l´ u ıneas que comiencen con el car´cter “#” ser´n consideradas comentarios, siendo ignoraa a das. No se pueden incluir comentarios en una l´ ınea, despu´s de una directiva de configuraci´n. Los espacios e o y l´ ıneas en blanco antes de una directiva de configuraci´n se ignoran, de manera que se puede dejar una o sangr´ en las directivas para mayor claridad. ıa Podemos hacer un chequeo de la sintaxis de sus archivos de configuraci´n sin tener que reiniciar el o servidor, usando apachectl configtest o la opci´n -t de la l´ o ınea de comandos. Directivas relevantes en los archivos de configuraci´n: o Las directivas m´s habituales son las siguientes: a <Directory> <DirectoryMatch> <Files> <FilesMatch> <Location> <LocationMatch> <VirtualHost>

Jose Antonio Escart´ Vigo, Junio 2005. ın

144

Servidor Linux para conexiones seguras de una LAN a Internet

Figura 10.5: Par´metros de configuraci´n de APACHE a o Las directivas que se pongan en los archivos principales de configuraci´n se aplicar´n a todo el servidor. o a Si queremos cambiar unicamente la configuraci´n de una parte del servidor, podemos cambiar el rango de ´ o acci´n de las directivas poni´ndolas dentro de las secciones <Directory>, <DirectoryMatch>, <Files>, o e <FilesMatch>, <Location>, y <LocationMatch>. Estas secciones limitan el dominio de aplicaci´n de las o 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. o a 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 o e e de <VirtualHost>, de manera que solo tendr´n efecto para pedidos de un sitio web en particular. a
Jose Antonio Escart´ Vigo, Junio 2005. ın

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 o de procesos solo pueden ir en el contexto del servidor principal. Para descubrir qu´ directivas pueden estar e dentro de qu´ secciones, revise el contexto de la directiva. e Protecci´n impl´ o ı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 a n o 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: n o <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 o o e dentro del ´rbol de p´ginas web. Los archivos especiales se llaman normalmente .htaccess, pero se puede a a especificar cualquier otro nombre en la directiva AccessFileName. Las directivas que se pongan dentro de los archivos .htaccess se aplicar´n unicamente al directorio donde est´ el archivo, y a todos sus subdirectorios. a ´ e Siguen las mismas reglas de sintaxis que los archivos principales de configuraci´n. Como los archivos o .htaccess se leen cada vez que hay una petici´n de p´ginas, los cambios en estos archivos comienzan a o a actuar inmediatamente. Para ver qu´ directivas se pueden colocar, podemos consultar el contexto de cada directiva. El admie nistrador del servidor pueden controlar a´n m´s qu´ directivas son permitidas configurando la directiva u a e AllowOverride en los archivos principales de configuraci´n. o Con se puede observar en la figura 10.6, en el m´dulo Webmin-htaccess, podemos especificar los direco torios a los que se va a tener acceso a trav´s de Apache. e

Figura 10.6: Interfaz Webmin para HtAccess de Apache

Jose Antonio Escart´ Vigo, Junio 2005. ın

146 Archivos de log

Servidor Linux para conexiones seguras de una LAN a Internet

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 a e o 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 u logs/httpd.pid. Este nombre de archivo se puede cambiar con la directiva PidFile. El n´mero del u 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 a a 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 a que, por defecto, ser´ logs/access log. El nombre del archivo se puede alterar usando la directiva a 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. e o 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 o a e es capaz de realizar estadisticas para el proxy Squid y los servidores FTP. El archivo de configuraci´n de Webalizer es: /etc/webalizer.conf o Si ejecutamos desde el programa desde la l´ ınea de comandos: #webalizer, se generar´ el reporte de a estad´ ısticas, estos reportes quedar´n almacenados, en formato html, en el directorio: /var/www/webalizer. a Si utilizamos el m´dulo para Webmin, lo primero que necesitaremos ser´ a˜adir los archivos de log de o a n Apache, situados en el directorio: /var/log/apache/. En la figura 10.7 se muestran diferentes pantallas del m´dulo Webmin. o Hosts virtuales El t´rmino Host Virtual se utiliza para referirse a la pr´ctica de mantener m´s de un servidor web en e a a una sola m´quina, as´ como para diferenciarlos por el nombre de servidor que presentan. En determinadas a ı circunstancias puede suceder que una empresa que dispone de un servidor quiera tener m´s de un dominio a activo en el servidor, por ejemplo: www.empresa1.com y www.empresa2.com. El servidor web Apache fue uno de los primeros que incluy´ soporte de hosts virtuales basados en o IP y basados en nombre. A partir de la versi´n 1.3.13 Apache tiene una nueva funcionalidad en la que o si cualquiera de los archivos de configuraci´n es un directorio, Apache entrar´ en ese directorio y analio a zar´ cualquier archivo (y subdirectorio) que se encuentre all´ trat´ndolos como archivos de configuraci´n. a ı, a o Un posible uso de esta funcionalidad consistir´ en a˜adir servidores virtuales (VirtualHosts), creando ıa n peque˜os archivos de configuraci´n para cada servidor virtual, y coloc´ndolos en un directorio de confin o a guraci´n. As´ se puede insertar o eliminar servidores virtuales sin tener que editar ning´n archivo, sino o ı, u simplemente quitando o copiando archivos. Esto facilita la automatizaci´n de estos procesos. o
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 10. Servicios de usuario

147

Figura 10.7: M´dulo de Webmin para Webalizer o Con el boom de Internet y el consiguiente aumento del n´mero de sitios web, cada vez es m´s frecuente u a encontrar una sola m´quina actuando como servidor para m´s de un sitio web. a a Existen unas cuantas formas de proporcionar m´s de un sitio web desde una m´quina. Una de ellas a a consiste en ejecutar m´ltiples copias de un servidor web, una para cada sitio; sin embargo, puede resultar u imposible por lo que respecta a los recursos de la m´quina. a Hay dos m´todos para soportar hosts virtuales como un solo servidor. Uno se basa en utilizar m´ltiples e u direcciones IP, una para cada sitio web, y otro se basa en soportar m´ltiples nombres de host en (normalu mente) una sola direcci´n IP. Se denominan, respectivamente, hospedaje virtual basado en IP y basado o 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. o o Los procedimientos y los par´metros necesarios para configurar el hospedaje virtual utilizando estos a m´todos diferentes se tratan en las secciones siguientes. He aqu´ unas cuantas preguntas que podemos e ı utilizar para seleccionar una de los m´todos de hospedaje virtual: e ¿Disponemos de m´s de una direcci´n IP? a o ¿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? u a ¿Deseamos separar estrictamente los sitios web?

Jose Antonio Escart´ Vigo, Junio 2005. ın

148

Servidor Linux para conexiones seguras de una LAN a Internet Para a˜adir un host virtual en Apache utilizaremos la directiva <VirtualHost>. n En el siguiente ejemplo podemos ver c´mo se definir´ un servidor virtual para el dominio www.aucad.com. o ıa

<VirutalHost www.aucad.com aucad.com> ServerName www.aucad.com DocumentRoot /usr/local/etc/httpd/vhost/aucad ServerAdmin webmaster@servidoc.com 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 o a

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´. a

Figura 10.9: Compartici´n de carpetas en Apache o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 10. Servicios de usuario Arrancar el servidor Apache

149

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. o En el caso de que el puerto especificado en el archivo de configuraci´n sea el puerto por defecto, 80 o (o cualquiera por debajo de 1024), ser´ necesario tener privilegios de root para poder iniciar Apache. a 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 a peticiones de los clientes. El proceso principal httpd continuar´ ejecut´ndose como root, pero los procesos a a hijo se lanzar´n con un usuario con menos privilegios. a La primera tarea que realiza httpd cuando es invocado es localizar y leer el archivo de configuraci´n o httpd.conf. Es posible especificar la ruta del archivo en el momento de la ejecuci´n la opci´n -f en la l´ o o ı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´ a ımbolo del sistema y si ejecutamos en un navegador: http://localhost, podremos ver la p´gina de prueba ubicada en el directorio especificado a en DocumentRoot. Si nos da alg´n fallo al arrancar normalmente es debido a que ya hab´ otra instancia de Apache corrienu ıa do 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 a (v´ase ap´ndice D), de inicio del sistema. Si hemos realizado un apt, ya se habr´ colocado all´ e e a ı. M´dulos Apache o Apache es un servidor modular. Esto implica que en el servidor b´sico se incluyen unicamente las a ´ funcionalidades m´s b´sicas. Otras funcionalidades se encuentran disponibles a trav´s de m´dulos que a a e o pueden ser cargados por Apache. Por defecto, durante la compilaci´n se incluye en el servidor un juego o de m´dulos base. Los m´dulos van por separado y pueden ser incluidos en cualquier momento usando la o o directiva LoadModule. Las directivas de configuraci´n pueden ser incluidas en forma condicional depeno diendo de la presencia de un m´dulo particular, poni´ndolas dentro de un bloque <IfModule>. Para ver o e qu´ m´dulos han sido cargados en el servidor, se puede usar la opci´n de l´ e o o ınea de comandos -l. Para poder realizar las configuraci´n, en conjunto con el resto del sistema, podr´ ser interesante o ıa utilizar alguno de los siguientes m´dulos Apache: o apache-utils libapache-mod-security apache-perl libapache-mod-perl apache-php libapache-mod-php4 libapache-mod-jk libapache-mod-auth-shadow
Jose Antonio Escart´ Vigo, Junio 2005. ın

150 libapache-mod-auth-radius libapache-mod-ldap

Servidor Linux para conexiones seguras de una LAN a Internet

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 o sistema y habilitar o deshabilitar su uso.

Figura 10.10: M´dulos instalados en APACHE o

10.3.2.

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]. o o En esta secci´n nos ocuparemos de otro aspecto de la seguridad: hacer privadas las comunicaciones o mantenidas entre los clientes y su servidor web, lo cual se consigue codificando dichas comunicaciones a trav´s del protocolo SSL (Secure Sockets Layer ). e El hecho de que el protocolo SSL est´ disponible para utilizarlo con los servidores web, supone un ine teresante dilema para los gobiernos que desean controlar los sistemas de codificaci´n con el fin de impedir o 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 a e o que se enviaran la una a la otra. Despu´s de garantizar, de esta manera, la seguridad de una sesi´n de e o comunicaci´n, las dos m´quinas pueden intercambiar informaci´n privada o confidencial sin preocuparse o a o de que alguien pueda escuchar y utilizar la informaci´n. La seguridad es una caracter´ o ı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 o u e o cuentas bancarias.
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 10. Servicios de usuario Sistemas de clave p´ blica-privada u

151

Para codificar los paquetes que viajan entre dos m´quinas, las m´quinas deben entender una codificaa a ci´n de algoritmos com´n, y deben intercambiar informaci´n que permita a una m´quina descodificar lo o u o a que la otra codifica. Las partes de la informaci´n de seguridad utilizadas para codificar y descodificar la o informaci´n se llaman claves. o La codificaci´n se realiza introduciendo una modificaci´n en la informaci´n localizada en una ubicaci´n, o o o o mediante una clave. Se transmite, entonces, la informaci´n a otra ubicaci´n, donde se utiliza una clave para o o restaurar la informaci´n a su forma original (descodificarla). En un sistema sencillo, la clave utilizada para o codificar la informaci´n es la misma que se utiliza para descodificarla. Es a esto a lo que se llama sistema o de clave privada, porque el contenido de la clave se debe mantener en secreto para que la informaci´n se o mantenga tambi´n en secreto. Sin embargo, los sistemas de clave privada presentan un problema porque e la clave se debe transmitir, de alg´n modo, de forma segura a la nueva ubicaci´n. SSL utiliza una forma u o especial de codificaci´n denominada infraestructura de clave p´blica (PKI), como parte del sistema global o u que utiliza para proporcionar sesiones de comunicaci´n segura. o En un sistema de claves como ´ste, se utilizan dos claves para el proceso de codificaci´n y descodificae o ci´n, y una de ellas (la clave p´blica) se puede hacer disponible para cualquiera sin que se vea afectada o u la seguridad de las comunicaciones entre dos m´quinas. De esta forma se soluciona el problema de la a seguridad de la distribuci´n de claves, inherente a los sistemas de claves. o Certificados: Verificaci´n de qui´n est´ al otro lado de una sesi´n segura o e a o 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 o e web err´neo (por ejemplo, el cliente puede proporcionar un n´mero de tarjeta de cr´dito a un servidor o u e falso ejecutado por estafadores). Cuando se utiliza un sistema de clave p´blica-privada, tambi´n es posible u e transmitir informaci´n adicional, lo que se denomina un certificado, donde se describa al servidor web y o a la organizaci´n que hay detr´s del mismo. o a Este certificado puede estar “firmada” electr´nicamente por una agencia de confianza. Existen varias o agencias que investigan a la organizaci´n que est´ ejecutando el sitio web y la informaci´n recopilada en o e o el certificado y, despu´s, firman el certificado, por un precio. Los navegadores clientes poseen una lista de e agencias de confianza que utilizan para verificar que se est´ comunicando con el servidor con el que el a usuario desea (es decir, que el servidor est´ siendo ejecutado por la organizaci´n que el usuario espera). a o Cuando instalemos un servidor web, debemos crear una pareja de claves p´blicas-privadas y un certiu ficado para utilizarlos con el servidor. Si deseamos ejecutar un sitio web seguro para uso p´blico, debemos u hacer que una de estas agencias de confianza firme el certificado. Utilizaci´n del HTTP seguro: HTTPS o En las comunicaciones a trav´s de un servidor web seguro, el cliente utiliza un protocolo diferente, e 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 n la URL con el identificador de protocolo HTTPS, como indico a continuaci´n: o 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, a 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 o o de todas las URL que creemos y que est´n vinculadas al sitio seguro. e
Jose Antonio Escart´ Vigo, Junio 2005. ın

152

Servidor Linux para conexiones seguras de una LAN a Internet

10.3.3.

Creaci´n de un servidor web seguro o

Debido a las restricciones gubernamentales impuestas en los EEUU a la exportaci´n, la mayor´ de las o ıa 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, o a 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 o o se recomienda usar, se denomina mod ssl. Consiste en un conjunto de parches y un m´dulo especial para o utilizarlos con el c´digo fuente de Apache y utiliza una biblioteca de criptograf´ llamada OpenSSL, que o ıa, proporciona las funciones de SSL. OpenSSL se basa en una biblioteca m´s antigua llamada SSLeay, y a 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´ Open Sopurce ıa (de c´digo fuente abierto). o Preparaci´n de los archivos especiales necesarios para la seguridad o 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) o para que el p´blico en general utilice correctamente el sitio web. u 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 u 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 o puede confiar en que es ciertamente esa organizaci´n la que ejecuta el sitio web. o Una petici´n de firma del certificado: Este archivo contiene informaci´n del certificado, as´ como ino o ı formaci´n sobre la clave. Se debe enviar a la agencia de confianza (llamada autoridad de certificaci´n) o o para que sea firmado. Todos estos archivos son creado durante el proceso de instalaci´n de Apache-SSL. As´ como los nuevos o ı archivos de configuraci´n que quedar´n alojados en: /etc/apache-ssl/. o a A partir de ahora nuestro httpd.conf, se encontrar´ situado en: /etc/apache-ssl/httpd.conf a Pareja de claves p´ blica-privada: u La pareja de claves p´blica-privada se guarda en el archivo server.key, de manera predeterminada. u Este archivo contiene las claves que utiliza el servidor para realizar la codificaci´n. o La clave privada de la pareja de claves p´blica-privada debe ser protegida en todo momento. Por u este motivo, durante la creaci´n de la clave, se nos pedir´ que introduzcamos una frase de contrase˜a o a n para codificar el archivo que contiene la clave. Una vez que el archivo est´ codificado, se nos pedir´ que e a introduzcamos la frase de contrase˜a cada vez que el servidor se inicie para que pueda acceder al archivo. n Aunque pueda resultar molesto, es muy peligroso dejar sin codificar la clave privada en el disco, sin protegerla con una frase de contrase˜a. n Hay que utilizar la directiva SSLCertificateKeyFile del archivo de configuraci´n httpd.conf del servidor o 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 o o ´ web. Este es transmitido al cliente cuando se establece una sesi´n segura, y el cliente lo utiliza para verificar o
Jose Antonio Escart´ Vigo, Junio 2005. ın

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 e a 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 o posee una lista de las autoridades de certificaci´n de confianza cuyas firmas acepta. Cuando un navegador o 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 o a a usuario si conf´ o no en que el sitio al que est´ conectado sea v´lido. ıa a a El archivo de certificados que se ha de utilizar aparece especificado en el archivo de configuraci´n del o servidor, mediante la directiva SSLCertificateFile La petici´n de firma del certificado o Si deseamos que los clientes conf´ en nuestro sitio, deberemos poseer un certificado firmado por una ıen agencia de confianza que funcione como autoridad de certificaci´n. Para que una autoridad de certificaci´n o o nos firme el certificado, deberemos de crear un CSR (Certificate Signing Request, Petici´n de firma del o certificado) y env´ ıarla a la autoridad con la documentaci´n y el dinero. o Existen varias agencias que act´an como autoridades de certificaci´n, lo que implica verificar la inu o formaci´n recopilada en el certificado y firmarlo digitalmente. El precio de este servicio se cobra por el o coste derivado de investigar la informaci´n que contiene el CSR y por asumir la responsabilidad de la o certificaci´n de nuestro sitio web. o En la siguiente lista se pueden observar algunas autoridades de certificaci´n: o CatCert: http://www.catcert.net CertiSing: http://certisign.com.br/servidores Entrust: http://www.entrust.net IKS GmbH : http://www.iks-jena.de/produkte/ca Thawte: http://www.thawte.com VeriSign: http://www.verisign.com/site Todas estas compa˜´ aceptan las peticiones de firma de certificados generadas por el paquete mod ssl, nıas 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 a e o o o coincidir exactamente con el nombre de la compa˜´ nombre registrado del dominio y otro datos que nıa, la autoridad de certificaci´n solicita para que puedan procesar la petici´n. Adem´s, el archivo se cifra o o a autom´ticamente en un formato especial. Podemos encontrar informaci´n detallada sobre los precios y a o las instrucciones para la creaci´n de la CSR, as´ como la documentaci´n solicitada por la autoridad de o ı o certificaci´n, en los sitios web de cada compa˜´ o nıa. POdemos actuar como nuestra propia autoridad de certificaci´n y firmar nuestro certificado para o comprobar nuestro servidor o para ejecutarlo internamente en nuestra organizaci´n. A esto se le denomina o autocertificaci´n. Los navegadores que se conecten a nuestro servidor no reconocer´n nuestra firma, como o a una de las que las autoridades de certificaci´n contemplan como v´lidas, pero los usuarios lo pueden o a 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. o Cuando hayamos recibido un certificado firmado por una autoridad de certificaci´n real, sustituiremos o el certificado autofirmado copiando el nuevo sobre el archivo antiguo, o modificando el valor de la directiva SSLCertificateFile.
Jose Antonio Escart´ Vigo, Junio 2005. ın

154

Servidor Linux para conexiones seguras de una LAN a Internet

Ejemplo de la creaci´n de certificados para un servidor o Deberemos de tener instalado el SSL, ya se habr´ instalado con apache-ssl, pero para asegurarnos a 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 a e para utilizarlo correctamente. Busca d´nde est´ instalado el OpenSSL y nos aseguraremos de que est´ en el o a a $PATH, despu´s vamos al directorio donde tengamos los archivos de configuraci´n de apache-ssl (/etc/apachee o ssl/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, a a y no son fiables. Si quieres generar un certificado, y una petici´n de certificado para enviar a alguien como o 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 n archivo de configuraci´n de Apache, para conseguir que ejecute las extensiones SSL con nuestros certifio cados. Tambi´n ser´ preciso a˜adir algunas configuraciones globales. e a n Pasemos a ver las modificaciones de la configuraci´n de /etc/apache-ssl/httpd.conf : o
# 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 10.1.1.1: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 12345 # 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 www.example.com:443> DocumentRoot /www/secure/ ServerName www.example.com ServerAdmin example@example.com 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
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 10. Servicios de usuario Directrices de seguridad especiales

155

Se a˜aden las directrices de seguridad para el control de mod ssl a la documentaci´n de Apache que n o 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 ı o utilizaci´n. o Debemos utilizar la directiva SSLCipherSuite para controlar qu´ algoritmos se permiten para las e 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 o o ı a 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 o u servidores hijos, el uso de una cache de sesi´n para compartir la informaci´n entre los procesos hijo o o 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. o o Debemos utilizar las directivas SSLLog y SSLLogLevel para crear registros donde almacenar la informaci´n espec´ o ıfica de SSL. Finalmente, los certificados SSL y X.509 pueden ser utilizados tambi´n por el servidor para la aue tenticaci´n de los clientes utilizando los certificados: SSLCACertificatePath, SSLCACertificateFile, o SSLVerifyClient, SSLVerifyDepth y SSLRequire. Comprobaci´n de la legalidad o En su infinita sabidur´ las comisiones del gobierno de los EEUU han creado leyes que convierten ıa, en un delito exportar desde este pa´ ciertos programas potentes de codificaci´n. Aparentemente, se ha ıs o tomado esta medida para impedir que una herramienta de codificaci´n muy potente caiga en manos de o terroristas y gobiernos no simpatizantes. El resultado de esta situaci´n, sin embargo, es que la mayor´ de o ıa los programas buenos de codificaci´n se desarrollan en otros pa´ y es EEUU el pa´ que los importa, en o ıses ıs lugar de ser al contrario. El software de codificaci´n que EEUU importa, ya no puede ser exportado desde o EEUU, ni al propio autor original. Hasta hace muy poco tiempo, la compa˜´ RSA Data Security, Inc. pose´ una patente norteamericana nıa ıa sobre determinados algoritmos de codificaci´n de claves p´blicas-privadas utilizados en el protocolo SSL. o u La patente del algoritmo de RSA expir´ en el 2000, de modo que ya no existen restricciones en la mayor o parte del c´digo. Sin embargo, si tenemos c´digo espec´ o o ıficamente de RSA, todav´ nos encontraremos ıa 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 o una m´quina que lo contenga al extranjero, es necesario consultar con un abogado para conocer cuales a son las leyes de exportaci´n e importaci´n de criptograf´ en el lugar, debemos asegurarnos de atenernos o o ıa 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´ m´s f´cil. Con el tiempo se ver´ hacia donde nos o ıa a a a lleva esta tendencia.

Jose Antonio Escart´ Vigo, Junio 2005. ın

156

Servidor Linux para conexiones seguras de una LAN a Internet

10.3.4.

Apache 2.x

La versi´n 2.x de Apache incorporar´ una gran cantidad de mejoras y nuevas opciones entre las que o a cabe citar las siguientes: Soporte de multi-threads: De esta forma Apache puede ejecutarse utilizando m´ltiples procesos como u suced´ con la versi´n 1.3.x, con m´ltiples hebras de un unico proceso o en una forma h´ ıa o u ´ ıbrida, proporcionando de esta forma una mejor escalabilidad. Soporte para multiple protocolos: Apache incluye la infraestructura necesaria para servir m´ltiples u protocolos. Nueva API : La versi´n 2.x incorpor´ m´ltiples cambios en la API (Aplication Programming Intero a u face) mejor´ndola y a˜adiendo nuevas funciones que permiten incorporar nuevas capacidades a los a n m´dulos. Uno de los inconvenientes de estas modificaciones es la incompatibilidad con los m´dulos o o 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 o servido. Errores multilenguaje: Los mensajes de error devueltos al navegador pueden proporcionarse de forma autom´tica en funci´n del idioma del navegador. a o Configuraci´n simplificada: Algunas directivas confusas han sido simplificadas. Tambi´n han sufrido o e mejoras algunos de los m´dulos que se incluyen por defecto en la instalaci´n b´sica de Apache. o o a Algunos de estos m´dulos son: o • mod_ssl: Este nuevo m´dulo proporciona una interfaz a los protocolos de encriptaci´n SSL/TLS o o proporcionados por OpenSSL. • mod_dav: Es un m´dulo nuevo que implementa DAV (Distributed Authoring and Versioning) o para HTTP. DAV es una especificaci´n para publicar y mantener el contenido de una web. o • mod_proxy: Este m´dulo ha sido completamente reescrito para aprovechar las nuevas caraco ter´ ısticas de filtrado e implementar de una forma m´s eficiente HTTP/1.1 a Para instalarlo deberemos ejecutar el siguiente apt: #apt-get install apache2 apache2-doc

10.3.5.

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 o gran n´mero se debe al aumento creciente de tipos de protocolos y comandos con los que los servidores u tienen que tratar. Cuando las p´ginas web s´lo consist´ en HTML, era mucho m´s f´cil controlarlo todo. a o ıan a a Pero ahora que los servidores tienen que interpretar ASP, PHP y otro tipo de tr´fico que contiene c´digo a o ejecutable. Ahora que las aplicaciones web son cada vez m´s complejas, con el tiempo estos problemas a s´lo se incrementar´n. o a Algunos servidores web son m´s seguros que otros, pero todos tienen sus problemas. Y un servidor a web pirateado puede significar m´s que la verg¨enza de una p´gina web deformada si el servidor tambi´n a u a e tiene acceso a bases de datos y otros sistemas internos, algo bastante com´n en nuestros d´ u ıas.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 10. Servicios de usuario

157

10.4.

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. a • Apache. • PHP. • Para autenticar usuarios: LDAP o MySQL. Procmail: Procesador de correo. Es utilizado para filtrar los correos a trav´s de los siguientes proe gramas • 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 a a que este libre de virus y Spam. En las siguientes secciones detallo la configuraci´n del sistema. o Basado en art´ ıculos publicados en http://bulma.net

10.4.1.

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 unico archivo de configuraci´n global: o ´ o /etc/exim4/exim4.conf.template Adem´s se nos pedir´ que contestemos a una serie de preguntas para configurar el servidor: a a 1. 2. Tipo de uso que vamos a dar a Exim. Como posteriormente queremos enviar nosotros mismos los e-mails, seleccionaremos la primera opci´n. o Nombre visible de nuestro sistema, es decir, el “mail name” o nombre de dominio en la direcci´n de o correo. Si no sabemos que contestar, colocamos cualquier cosa, despu´s lo podemos modificar desde e el archivo de configuraci´n. o Si tenemos otro nombre para el correo entrante, presionamos intro para dejar la opci´n por defecto. o Servidores virtuales de correo, en este caso no lo vamos a utilizar. Hacer de “relay” para otros dominios, tampoco se aplica en nuestra situaci´n. o
Jose Antonio Escart´ Vigo, Junio 2005. ın

3. 4. 5.

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. a e a Colocamos un usuario del sistema que habilitemos para esta tarea. 7. Por ultimo preguntar´ si queremos guardar nuestro archivo de aliases o sobrescribir el ya existente. ´ a Por si lo necesitamos m´s adelante, es mejor guardar la configuraci´n anterior. a o En el archivo, /etc/exim4/exim4.conf.template, encontramos reunidos todos los par´metros de confia guraci´n. Editaremos este archivo, para que reparta el correo local en el formato Maildir, consiguiendo o que sea compatible con “courier-imap” (lo utilizaremos m´s adelante para el Webmail). a La parte que tenemos que cambiar es la que hace referencia al reparto local de los e-mails, por defecto los enviar´ al archivo: /var/mail/<usuario>, concaten´ndose uno detras de otro, esto es precisamente lo a a que queremos evitar. Nos situamos en la secci´n: 30 exim4-config mail spool. Una vez all´ comentaremos la siguiente l´ o ı ınea: file = /var/spool/mail/${local_part}, . . . agreg´ndole un # delante. a Y a cambio, debajo de esa l´ ınea a˜adiremos lo siguiente: n 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: o #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

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 10. Servicios de usuario

159

Figura 10.11: Monitor para Exim a trav´s del m´dulo para Webmin e o

10.4.2.

Fetchmail: Correo externo

Fetchmail es un cliente de IMAP y POP que permite a los usuarios descargar autom´ticamente el a 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 a cliente. Como caracter´ ısticas m´s habituales podemos citar: a Soporte de POP3, APOP, KPOP, IMAP, ETRN y ODMR. Puede reenviar correo utilizando SMTP lo que permite que las reglas de filtrado, reenv´ y “aliasing” ıo funcionen correctamente. Se puede ejecutar en modo daemon para comprobar peri´dicamente el correo entrante. o Puede recuperar correo de m´ltiples carpetas y reenviarlos, en funci´n de la configuraci´n establecida, u o o 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 o u ı redireccionar el correo a cada usuario. Este podr´ ser un listado t´ ıa ıpico:
Jose Antonio Escart´ Vigo, Junio 2005. ın

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 buzon@dominio.com 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 a 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 e o lea las opciones del archivo de configuraci´n y se descargue el correo. Ese archivo se llamara: ˜/.fetchmailrc o Podriamos simplificar la configuraci´n de los archivos de usuario mediante el paquete fetchmailconf. o Para instalarlo realizamos el siguiente apt: #apt-get install fetchmailconf Este podr´ ser el archivo tipico de usuario ˜/.fechmailrc: ıa
set postmaster "pepe" set bouncemail set no spambounce set properties "" # set daemon 90 # Cuentas de correo de ono: pepe1@ono.com y pepe2@ono.com 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: pepe2@terra.es pepe3@terra.es y pepe4@terra.es 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: wgates@microsoft.com ;-) 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: a Ponerlo en el cron Ejecutarlo como demonio del sistema. Para ello descomentamos la l´ ınea: set daemon, del archivo de configuraci´n. o 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 a .profile o .bashrc (incluiremos la instrucci´n, fetchmail). Si preferimos lanzarlo manualmente, ejecutamos o desde la l´ ınea de comandos: #fetchmail Si lo queremos ejecutar en el cron, a˜adiremos al archivo /var/spool/cron/crontabs/<usuario>, en n nuestro caso pepe: */3 * * * * /usr/bin/fetchmail -s Esto indicar´ que se ejecute fetchmail cada tres minutos. a
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 10. Servicios de usuario Configuraci´n gr´fica de Fetchmail, interfaz Webmin o a

161

Para simplificar el proceso de configuraci´n podemos utilizar nuestra herramienta de configuraci´n por o o web: Webmin. Para instalar el m´dulo realizaremos el siguiente apt: o #apt-get install webmin-fetchmail

Figura 10.12: M´dulo Webmin para Fetchmail o

10.4.3.

Horde: Webmail

Un Webmail no es m´s que una interfaz para leer el correo electr´nico del servidor de correo, por medio a o de una pagina web. Horde es un programa gestor de correo IMAP para ser usado con un navegador y que est´ disponible a 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 o o cualquier equipo que tenga una conexi´n a Internet. Una vez configurada la cuenta IMAP, podemos espeo cificar 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. u 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, u n e a u Polaco, Portugu´s, Noruego, Ruso, . . . e M´ltiples carpetas, por defecto cuenta con la opci´n enviar, la papelera y soporta algunas creadas u o por los usuarios. Configuraci´n en l´ o ımite del tama˜o para archivos adjuntos en salida. n Preferencias de usuarios, incluyendo n´mero de mensajes en pantalla, lenguaje, firma y estilo. u Cada usuario tiene su propias libreta de direcciones.
Jose Antonio Escart´ Vigo, Junio 2005. ın

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 o 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: http://dominio.tld:2095/horde/ 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´ util m´s o e a ´ a 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 o direcci´n de Internet: o http://patux.glo.org.mx/imp-mini-como.html, HowTo sobre como instalar el servidor IMAP a trav´s e de Horde.

10.4.4.

Protocolo IMAP

El protocolo IMAP nos servir´ para consultar el correo v´ web con cualquier navegador, pudiendo a ıa 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 e-mails al host local, si es que as´ esta configurado en ese cliente, con la consiguiente ı perdida de los e-mails 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 a o 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 Fetche mail 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 o 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. o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 10. Servicios de usuario All´ cambiaremos la siguiente l´ ı ınea: ADDRESS = 0 por ADDRESS = 127.0.0.1, localhost

163

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 o Para que el servidor solo sea accesible desde nuestra m´quina. Deberemos instalar un filtro de e-mails, a 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 e-mails para as´ colocarlos en subcarpetas, seg´n el asunto, el remitente, etc. ı u La configuraci´n b´sica es que nos deje todos los emails en el directorio Maildir. Estas opciones son cono a figurables desde el archivo de configuraci´n: ˜/.mailfilter. o 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 a e o del servidor de correo Imap. Por ejemplo, podemos configurar Mutt, que comprende a la perfecci´n el o 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. n

10.4.5.

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 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 a filtros de Spam: SpamAssassin y Bogofilter. Las posibilidades son pr´cticamente ilimitadas y dependen de nuestra imaginaci´n y de nuestras haa o bilidades, pero b´sicamente el proceso consiste en dos pasos: a 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. a
Jose Antonio Escart´ Vigo, Junio 2005. ın

164 Redireccionamiento de correo

Servidor Linux para conexiones seguras de una LAN a Internet

Si queremos redireccionar el correo desde Fetchmail, necesitamos editar o crear el archivo de configuraci´n Fetchmail del usuario: ˜/.fetchmailrc. o 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. a a Otra opci´n interesante es procesar directamente un archivo de correo (*.mbox) de forma manual, a o ´l se aplicar´n los filtros indicados en el ˜/.procmailrc: e a $formail -s procmail < INBOX.mbox En este caso es recomendable utilizar un script para Procmail, como el siguiente:
#!/bin/sh ORGMAIL=/var/mail/$LOGNAME if cd $HOME && test -s $ORGMAIL && lockfile -r0 -l1024 .newmail.lock 2>/dev/null then trap "rm -f .newmail.lock" 1 2 3 13 15 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 o Los archivos de configuraci´n de Procmail, son los siguientes: o /etc/procmailrc: Archivo de configuraci´n del servidor Procmail. o ˜/.procmailrc: Archivo de configuraci´n Procmail, por cada usuario. o Este ser´ un archivo ˜/.procmailrc t´ ıa ıpico:
PATH=/usr/bin:/bin:/usr/local/bin:. MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/ :0fw: spamassassin.lock * < 256000 | 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´ el formato, que habr´ que a˜adir al ˜/.procmailrc, para borrar los correos que cumplan una ıa ıa n determinada regla: :0 * ^X-Regla: Yes /dev/null
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 10. Servicios de usuario Configuraci´n gr´fica de Procmail, interfaz Webmin o a

165

Para simplificar el proceso de configuraci´n podemos utilizar nuestra herramienta de configuraci´n por o o web: Webmin. Para instalar el m´dulo realizaremos el siguiente apt: o #apt-get install webmin-procmail

Figura 10.13: M´dulo Webmin para Procmail o Desde este m´dulo, adem´s de editar manualmente el archivo de configuraci´n /etc/procmail, como o a o podemos observar en la figura 10.14, podemos especificar las acciones que ejecutar´ el filtro. a

Figura 10.14: Crear acciones gr´ficamente en Procmail a

10.4.6.

ClamAV: Antivirus para correo

Mediante ClamAv podemos escanear, los mensajes recibidos, es el filtro antivirus que pasaremos a trav´s de Procmail. e 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

Jose Antonio Escart´ Vigo, Junio 2005. ın

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), preo guntar´ por qu´ interfaz estamos conectados a Internet y un servidor (se apuntan varios por defecto) desde a e donde bajarse las actualizaciones. Tambi´n podemos establecer el modo de ejecuci´n de clamav-freshclam, e o se recomienda ejecutar como demonio del sistema. El archivo de configuraci´n del demonio ClamAv es: /etc/clamav/clamd.conf o 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. o 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: ˜/.proca e mailrc,. . . para cada usuario) y lo dejar´, t´ a ıpicamente en: /var/mail/<usuario>. Para que Procmail ejecute ClamAv a˜adiremos al archivo: /etc/procmailrc, las siguientes l´ n ı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, e en estos casos no se ejecutar´ el c´digo entre comillas simples. ıa o 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 n ı lo puede filtrar f´cilmente, tambi´n nos sirve para saber que el correo ha sido escaneado). a e 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 a el nombre del virus. Como funci´n adicional, en lugar de modificar el Subject lo podr´ o ıamos eliminar directamente. Para que esta configuraci´n funcione necesitamos tener lanzado el demonio: clamav-daemon. o Para probar que el sistema funciona, en la direcci´n: http://www.eicar.org/download/eicar.com.txt, o encontraremos la siguiente l´ ınea: X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H* Es un test, si nos la mandamos por e-mail, ClamAv deber´ detectarlo como virus. a Una vez configurado este sistema, s´lo tendremos que fijarnos que todos los correos nuevos que lleguen o a los usuarios contengan la nueva cabecera de X-Virus.
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 10. Servicios de usuario

167

10.4.7.

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 e e spamc, que ser´ ejecutado por Procmail. Para identificar el correo spam, usaremos expresiones regulares, a 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: a a #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: o n :0fw | spamc -f -s 100000 -u $LOGNAME Una vez instalados ambos y arrancado el spamd, s´lo hay que hacer que el spamc filtre todos los meno sajes 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 1.94 2002/06/14 23:17:15 hughescr Exp $)

Adem´s, agrega la siguiente cabecera al Subject del mensaje: a Subject: *****SPAM***** Say Goodbye to YELLOW, STAINED Teeth! Y las siguientes l´ ıneas en el texto para describir las reglas aplicadas:
SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: SPAM: -------------------- Start SpamAssassin results ---------------------This mail is probably spam. The original message has been altered so you can recognise or block similar unwanted mail in future. See http://spamassassin.org/tag/ for more details. Content analysis details: (25.5 hits, 5 required) NO_REAL_NAME (-1.1 points) From: does not include a real name INVALID_DATE_TZ_ABSURD (4.4 points) Invalid Date: header (timezone does not exist) FAKED_UNDISC_RECIPS (3.5 points) Faked To "Undisclosed-Recipients" PLING (0.1 points) Subject has an exclamation mark DOUBLE_CAPSWORD (1.1 points) BODY: A word in all caps repeated on the line CLICK_BELOW (1.5 points) BODY: Asks you to click below CALL_FREE (0.7 points) BODY: Contains a tollfree number NORMAL_HTTP_TO_IP (3.3 points) URI: Uses a dotted-decimal IP address in URL REMOVE_PAGE (2.2 points) URI: URL of page called "remove" MAILTO_WITH_SUBJ (1.9 points) URI: Includes a link to send a mail with a subject CLICK_HERE_LINK (0.8 points) BODY: Tells you to click on a URL MAILTO_LINK (0.8 points) BODY: Includes a URL link to send an email FREQ_SPAM_PHRASE (2.4 points) Contains phrases frequently found in spam [score: 14, hits: click here, email address,] [enter your, list please, please click, this] [message, you wish, your email, your] [name] DATE_IN_FUTURE_06_12 (2.4 points) Date: is 6 to 12 hours after Received: date FORGED_YAHOO_RCVD (1.5 points) ’From’ yahoo.com does not match ’Received’ headers -------------------- End of SpamAssassin results ---------------------

Jose Antonio Escart´ Vigo, Junio 2005. ın

168

Servidor Linux para conexiones seguras de una LAN a Internet

Configuraci´n del Procmail, con SpamAssassin o Se pueden aplicar filtros en el Procmail del usuario, en el gen´rico para todo el sistema (Hay que usar e con cuidado esta opci´n, borrar o modificar un mensaje de terceros sin su aprobaci´n puede ser un delito) o o o en el propio cliente (MUA) de correo electr´nico, que es la opci´n m´s recomendable. o o a En este apartado lanzaremos el cliente (spamc) desde: /etc/procmailrc y ejecutarlo de forma global. Editaremos el archivo y a˜adiremos las siguientes l´ n ı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 e a 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 a probadas y no nos importa perder alg´n e-mail v´lido, podemos eliminarlos, envi´ndolos a /dev/null u a a Configuraci´n gr´fica de SpamAssassin, interfaz Webmin o a Para simplificar el proceso de configuraci´n podemos utilizar nuestra herramienta de configuraci´n por o o web: Webmin. Para instalar el m´dulo realizaremos el siguiente apt: o #apt-get install webmin-spamassassin

Figura 10.15: M´dulo Webmin para SpamAssassin o Como opci´n adicional se pueden especificar las opciones de configuraci´n de Procmail para que proo o cese el correo con SpamAssassin.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 10. Servicios de usuario

169

En las siguientes figuras (10.16) podremos observar la multitud de opciones que podemos configurables gr´ficamente. a

Figura 10.16: Opciones de configuraci´n SpamAssassin o

10.4.8.

Bogofilter: Filtro bayesiano

El problema fundamental con el SpamAssassin es que est´ basado en el reconocimiento de patrones a 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. a Esto produce que el proceso de an´lisis de cada mensaje sea a´n m´s lento de lo que ya es actualmente, a u a entre otras cosas porque est´ implementado en Perl y el n´mero de reglas es muy grande. a u Y no acaba aqu´ en problema, lo que es el m´s grave, puede dar falsos positivos, que son mensajes que ı, a 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 e 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 a los trucos para saltarse las reglas de filtrados, ya que son de dominio p´blico y com´n para todas las u u instalaciones. La soluci´n pasa por usar m´todos que “aprendan” de los mensajes que recibe el usuario y generan o e 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 o e
Jose Antonio Escart´ Vigo, Junio 2005. ın

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 a tipos de mensajes que recibe cada usuario. El problema fundamental de ´sta aproximaci´n es que hay que entrenar inicialmente al programa con e o un conjunto relativamente grande de mensajes spams y otros v´lidos para que arme su base de datos. A a partir de all´ el programa puede aplicar los m´todos bayesianos y usar esos mismos mensajes, ya clasifiı, e cados 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. a Una implementaci´n mejorada de este m´todo es Bogofilter, el filtro bayesiano que aqu´ propongo. o e ı Configuraci´n de Bogofilter o 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 a u 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 a 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 a a o spam, mejores ser´n sus resultados. Si s´lo le ense˜amos cuales son mensajes v´lidos, no podr´ detectar a o n a a los spams. Al contrario, si s´lo le “ense˜amos” spams, considerar´ a muchos mensajes v´lidos como spams o n a a (falsos positivos . . . ). O sea, el aprendizaje inicial es important´ ısimo, y nos ahorrar´ mucho trabajo de a mantenimiento de la base de datos. Para configurarlo realizaremos los siguientes pasos: Entrenarlo con un conjunto grande de mensajes v´lidos que tengamos almacenados. a Entrenarlo con un conjunto grande de spams. Configurar ˜/.procmailrc Seguimiento y mantenimiento los primeros d´ para evitar falsos positivos. ıas, Si queremos probar otros, el sistema Debian pone a nuestra disposici´n, m´s filtros bayesianos como o a por ejemplo, spamprobe. Entrenarlo con mensajes v´lidos a 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 1.000 mensajes. Si tenemos los mensajes almacenados en formato mbox, basta con hacer lo siguiente: #bogofilter -n < archivo_mbox

Jose Antonio Escart´ Vigo, Junio 2005. ın

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 a e 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 a 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 10.4.5 a o hemos realizado un filtro que recompon´ esa l´ ıa ınea de “From”. Despu´s de este paso se habr´ creado la base de datos: ~/.bogofilter/goodlist.db e a Entrenarlo con spams El siguiente paso ser´ entrenarlo con spams, en la direcci´n: a o http://bulma.net/ gallir/BULMA/spams.txt.gz Se puede encontrar una lista de m´s de 700 mensajes de spams. Para entrenar el filtro con estos a mensajes usaremos la instrucci´n: o #zcat spams.txt.gz | bogofilter -s Despu´s de este paso se habr´ creado la base de datos: ~/.bogofilter/spamlist.db e a Configuraci´n de Procmail o El siguiente paso es configurar Procmail. Para ello modificaremos el archivo de configuraci´n: ˜/.proco mailrc de cada usuario, ya que este filtro depender´ de sus e-mails y no tendr´ sentido aplicarlo a toda a ıa la organizaci´n (en el /etc/procmailrc). o Una vez el mensaje ha sido clasificado como spam, modificaremos la configuraci´n de Procmail para o 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 a ir´ aprendiendo con el tiempo, en pocas semanas ya no necesita casi mantenimiento. a El c´digo que incluiremos en el ˜/.procmailrc es el siguiente: o :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

Jose Antonio Escart´ Vigo, Junio 2005. ın

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 aco a o tualice directamente la base de datos de acuerdo a la clasificaci´n que se haga del mensaje. o Es decir la siguiente regla, insertada en ˜/.procmailrc, ya ser´ suficiente: ıa :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´ deberemos de verificar los mensajes, resituando ıas los falsos positivos como mensajes v´lidos. a 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 o 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: a #bogofilter -N < mensaje.txt, . . . esta situado en el archivo mbox: ˜/mail/spams.

10.5.

Jabber: Mensajer´ instant´nea para corporaciones ıa a

El protocolo Jabber, ser´ una de las piezas claves del desarrollo y evoluci´n de la futura Internet, como a o lo son y han sido los protocolos IP, FTP, Telnet, DNS, NNTP, ARP, ICMP, . . . , pero enfocado a la cada vez m´s utilizada mensajer´ instant´nea. a ıa a Jabber a diferencia de otros sistemas de mensajer´ instant´neos, es algo m´s que un sencillo programa ıas a a para enviar y recibir mensajes de texto entre usuarios a trav´s de Internet, es un protocolo de Internet que e aspira a convertirse en parte fundamental de la misma, para lo cual cuenta con una serie de interesantes caracter´ ısticas: Buena documentaci´n. o Basado en estandares abiertos y libres. Utiliza XML. Es multiplataforma. Su c´digo esta liberado a la comunidad. o 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. n a Existen disponibles, librer´ Jabber en varios lenguajes. ıas Est´ basado en una arquitectura cliente/servidor. a

Jose Antonio Escart´ Vigo, Junio 2005. ın

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 ı. a 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 o a o 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 a comunicaci´n instant´nea y directa. o a

10.5.1.

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 a configuraci´n de usuarios (/etc/passwd ) se ha creado un usuario jabber, para manejar el servidor Jabber o en el sistema. Adem´s el servicio ha quedado agregado al arranque del sistema, en el inetd. a Para arrancar el servidor de jabber, a mano, ejecutaremos: #jabberd

Configuraci´n Jabber o La configuraci´n se encuentra centralizada en un unico archivo: /etc/jabber/jabber.xml o ´ Lo primero que tendremos que hacer es especificar en que m´quina esta el servidor, el nombre de la a misma ha de estar en formato FQDN, para que desde cualquier m´quina de nuestra red pueda acceder a a los servicios proporcionados por Jabber. Otra opci´n es poner directamente la direcci´n IP de la m´quina, o o a e incluso para realizar pruebas en la propia m´quina podemos poner localhost. a 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 u e o necesitamos crear un usuario y registrarlo en el servidor local. Podemos a˜adirle tambi´n otras funcionalidades extras: n e Si queremos que nuestro servidor Jabber soporte conferencia, es decir m´s de dos usuarios simultaa neos, necesitamos jabber-muc (Jabber Multi user chat), para ello realizaremos el siguiente apt: #apt-get install jabber-muc

Jose Antonio Escart´ Vigo, Junio 2005. ın

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´ instant´nea, en la direcci´n: u a ıa a o http://download.jabber.org/, encontraremos m´s utilidades. a Para conseguir m´s informaci´n sobre las opciones, podemos recurrir al manual: #man jabberd a o O bien consultar la p´gina oficial: http://www.jabber.org a

10.5.2.

Configuraci´n gr´fica de Jabber, interfaz Webmin o a

Podemos hacer m´s sencilla la configuraci´n de nuestro servidor, si utilizamos nuestra herramienta a o web: Webmin. Para instalar el m´dulo de Jabber realizaremos el siguiente apt: o #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 e o /etc/jabber/jabber.xml.

10.5.3.

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. e Como podemos observar en la figura 10.18, situando nuestra cuenta podemos interactuar con multitud de servicios de mensajer´ adem´s de Jabber, es un cliente muy versatil. ıa a Existen otros Clientes multiprotocolo, como Gaim (v´ase figura 10.19), que tambi´n funcionan muy e e 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. o a

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 10. Servicios de usuario

175

Figura 10.17: M´dulo Webmin para Jabber o

Jose Antonio Escart´ Vigo, Junio 2005. ın

176

Servidor Linux para conexiones seguras de una LAN a Internet

Figura 10.18: Cliente de mensajer´ instantanea Kopete ıa

Figura 10.19: Cliente de mensajer´ instantanea Gaim ıa

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 11

Comunicaciones seguras
En el interior y exterior de las redes de nuestro sistema pueden existir m´ltiples peligros acechandonos u 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.

11.1.

Shell seguro: OpenSSH

SSH es una herramienta de acceso remoto que nos permite iniciar la sesi´n en un sistema remoto de o una forma segura. El tal´n de Aquiles de la mayor´ de las redes es el hecho de que normalmente las o ıa 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 a o 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. e o u Una de las herramientas de acceso remoto m´s populares, Telnet, sufre esta deficiencia. a SSH soluciona el problema utilizando tanto la criptograf´ sim´trica como la clave p´blica para cifrar ıa e u la sesi´n desde la primera pulsaci´n de tecla. De este modo, todo el que est´ escuchando su conexi´n o o e o obtiene un sonido aleatorio. SSH no s´lo proporciona confidencialidad para nuestros datos utilizando el o cifrado sino que adem´s proporciona una s´lida autenticaci´n, que impide la suplantaci´n de identidad, a o o o 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 a funci´n, SSH funciona con cualquier protocolo, mientras que SSL est´ dise˜ado principalmente para las o a n comunicaciones Web. SSH tambi´n incluye SCP, un reemplazo seguro para RPC, la herramienta de copia remota, y SFTP un e reemplazo seguro para FTP. SSH tambi´n puede utilizarse para crear un t´nel con otros protocolos entre e u m´quinas, como HTTP y SMTP. Al utilizar esta familia de programas en lugar de sus hom´logos m´s a o a antiguos, nos aseguramos de que no se est´n leyendo nuestras comunicaciones remotas con los servidores. a Eliminar el uso de Telnet y FTP en nuestra red puede ser dif´ ıcil, pero cuanto m´s lo hagamos, m´s a a seguros estaremos.

11.1.1.

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 a a poco se est´ haciendo m´s popular. Cisco est´ instalando SSH en sus enrutadores, aunque todav´ deja a a a ıa 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 o a ten´ fallos en su implantaci´n de protocolos criptogr´ficos y son susceptibles de ataques. De hecho, ıan o a

178

Servidor Linux para conexiones seguras de una LAN a Internet

es recomendable asegurarse de tener la utima versi´n disponible, ya que el c´digo se est´ mejorando ´ o o a constantemente y los algoritmos se est´n ajustando. a SSH tiene un n´mero de usos realmente interesantes distintos a asegurar un inicio de sesi´n en un u o sistema remoto. Se puede utilizar para crear un t´nel para cualquier servicio a trav´s de un canal cifrado u e 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: a o $ssh -l login hotname Donde login es su nombre de usuario en el sistema remoto y hotname es el anfitri´n al que est´ inteno a tando conectar con SSH. Tambi´n se puede utilizar: e $ssh login@hostname 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´ o ıamos que escribir: $ssh josan@web.example.com Tambi´n podemos utilizar, $ssh -l josan web.example.com para iniciar la sesi´n. Si simplemente e o escribirmos $ssh web.example.com, el servidor supondr´ que el nombre del usuario es igual que el del a inicio de sesi´n del sistema. o En la tabla 11.1 podemos encontrar el resto de opciones de SSH: Cuadro 11.1: Opciones del cliente SSH Descripci´n o Utiliza un protocolo criptogr´fico espec´ a ıfico (tiene que ser soportado por la versi´n que o utilizamos de SSH) Se conoceta a un n´mero de puerto espec´ u ıfico en lugar de la puerto SSH predeterminado (puerto 22) Usa un puierto espec´ ıfico que no forma parte de la lista est´ndar de puertos propietarios, lo a que normalmente significa un n´mero por encima de 1024. Esto puede ser util si tenemos u ´ un cortafuegos que imposibilita las comunicaciones en n´meros de puertos inferiores. u ´ Muestra la salida larga. Util para la depuraci´n o Informa en modo silencioso, cdontrario del modo largo Utiliza compresi´n del tr´fico cifrado. PUde ser util para conexiones demasiado lentas, o a ´ como las telef´nicas, pero es mejor tener un procesaro m´s potente para realizar la como a presi´n o ralentizar´ mucho el rendimiento. o a

Opci´n o -c protocol -p port# -P port#

-v -q: -C:

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. o o

11.1.2.

Servidor OpenSSH

Para utilizar SSH debemos tener un cliente SSH ejecut´ndose en la m´quina que deseamos conectar y a a un servidor SSH en la m´quina a la que deseamos conectarnos. Los clientes FTP y Telnet normales no se a conectar´n a un servidor SSH. El cliente se encuentra integrado en la mayor´ de los sistemas operativos a ıa Linux actuales, aunque puede que tengamos que seleccionar esta opci´n al instalar el sistema. El servidor o SSH es normalmente opcional. Para determinar si ya est´ instalado, escribimos $ps y comprobamos si se a est´ ejecutando el proceso sshd. Si no se est´ ejecutando, tendremos que instalar el servidor para permitir a a las conexiones de su m´quina a trav´s de SSH. a e

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 11. Comunicaciones seguras Pasemos a describir el proceso de instalaci´n del servidor de SSH. o 1. Lo primero es instalar el paquete si no lo tenemos en el sistema: #apt-get install openssh-server-udeb

179

2. Despu´s hay que revisar los archivos de configuraci´n que se encuentran en el directorio /etc/ssh e o para asegurarse de que coincide con los par´metros de nuestro sistema. El archivo de configuraci´n a o para el servidor es /etc/ssh/sshd config. A continuaci´n detallo los campos que hay que revisar dentro de este archivo: o 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 a manualmente el n´mero de puerto en sus clientes SSH. u 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 o ´ utilizadas para generar la autenticaci´n de clientes. Estas no son las mismas claves que las o claves del servidor generadas en la instalaci´n. o 3. Antes de poder utilizar un servidor SSH tiene que generar sus distintas claves. Esto proporciona un identificador unico 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 coı a nexiones. Si se desea ejecutar sshd autom´ticamente al inicio (opci´n muy recomendable), hay que a o colocar dicha l´ ınea al final de un archivo al estilo de rc.local de otras distribuciones (v´ase ap´ndice e e 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 e o o o web Webmin. Para la instalaci´n se utiliza el siguiente apt: o #apt-get install webmin-sshd

Puerto de env´ con OpenSSH ıo Aunque SSH se dise˜´ en principio para una interacci´n de l´ no o ınea de comandos tipo Telnet, tambi´n e se puede utilizar para configurar un t´nel entre dos m´quinas para cualquier aplicaci´n. Podemos crear u a o una conexi´n segura entre dos servidores con la opci´n de puerto de env´ integrada en SSH. Para realizar o o ıo esta tarea, debemos tener SSH ejecut´ndose en ambos extremos de la conexi´n. a o Con la siguiente declaraci´n emitida en el extremo del cliente podemos realizar cualquier servicio sobre o 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 u o local host: Por la m´quina local a remote port: Por el puerto del servicio con el que deseamos abrir un t´nel en el extremo remoto u
Jose Antonio Escart´ Vigo, Junio 2005. ın

180

Servidor Linux para conexiones seguras de una LAN a Internet

Figura 11.1: Interfaz gr´fica Webmin para el servidor SSHD a remote hostname: Por la direcci´n IP o nombre del servidor en el otro extremo de la conexi´n o o La opci´n -L le indica a SSH que debe escuchar el local port en local host y enviar cualquier conexi´n o o 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 o o o o el tr´fico enviado. a Si se desea que esta configuraci´n del sistema se mantenga en siguientes reinicios de la m´quina hay o a que a˜adirla a un archivo de rc.local como se especifica en la secci´n D. n o Esto podr´ ser ejemplos de este tipo de usos: ıan Si se necesita cifrar una conexi´n de correo electr´nico: o o #ssh -L 5000:localhost:25 192.168.0.1 -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: o #ssh -L 5000:localhost:80 192.168.0.1 -N &, . . . utilizando en el navegador localhost:5000 se realizaran env´ a trav´s de t´nel seguro con el puerto web(80) en la m´quina remota. ıos e u a Tambi´n podemos tener varios puertos al mismo servidor, como es nuestro caso: e #ssh -L 5000:localhost:25 -L 5001:localhost:80 192.168.0.1 -N &

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 11. Comunicaciones seguras

181

Como se puede observar, SSH funciona extraordinariamente bien para crear una conexi´n segura entre o dos m´quinas para casi cualquier protocolo. a

11.2.

Criptograf´ y cifrado ıa

Hoy en d´ la solidez del cifrado normalmente se mide por el tama˜o de su clave. Independientemente ıa n 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 o milenios. Sin embargo, un fallo inadvertido en un algoritmo o el avance en la tecnolog´ inform´tica o en ıa a los m´todos matem´ticos pueden reducir este tiempo considerablemente. e a 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 o o meses est´ bien. Sin embargo, algo como n´mero de tarjeta de cr´dito o los secretos de seguridad nacional a u e tienen que mantenerse seguros durante un periodo de tiempo m´s prolongado y de forma eficaz para a siempre. Por lo tanto, utilizar algoritmos de cifrado m´s d´biles o longitudes de clave m´s cortas para a e a algunas cosas est´ bien, siempre que la utilidad de la informaci´n para un intruso expire en un breve a o periodo de tiempo.

11.2.1.

Tipos de cifrado

Criptograf´ sim´trica ıa e El primer tipo de cifrado, denominado criptograf´ sim´trica, o cifrado de secreto compartido, se ha ıa e estado utilizando desde la ´poca de los antiguos egipcios. Esta forma de cifrado utiliza una clave secreta, e denominada secreto compartido, para cifrar los datos en un galimat´ inteligible. La persona que se ıas 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´ sim´trica porque ıa e 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 fore ma 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 a existiendo: tendremos que comunicar la clave secreta de alguna forma al destinatario pretendido antes de iniciar una comunicaci´n segura. o Criptograf´ asim´trica ıa e Una revoluci´n en el cifrado fue la iniciada cuando Whitfield Diffie, Martin Hellman y Ralph Merkle o inventaron la criptograf´ de calve p´blica. (En realidad, todav´ existe alg´n debate sobre si el brit´nico ıa u ıa u a James Ellis en realidad invent´ esta clave antes y la mantuvo en secreto, pero Diffie, Hellman y Merkle o fueron los primeros en publicarla en 1976). Estaban tratando de resolver el antiguo problema del intercambio de clave. Diffie se preguntaba c´mo o dos individuos que deseaban realizar una transacci´n financiera por una red electr´nica pod´ hacerlo con o o ıan seguridad. Llevaba mucho tiempo pensando en ello porque Internet estaba naciendo en aqu´l momento e y el comercio electr´nico todav´ no exist´ Si los gobiernos ten´ muchos problemas tratando con el o ıa ıa. ıan problema del intercambio de clave, ¿c´mo podr´ controlarlo una persona media? Quer´ llegar a crear o ıa ıa 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´ que si resolv´ el problema del intercambio ıa ıa de claves, ser´ un gran avance en la criptograf´ ıa ıa. Diffie se asoci´ con Martin Hellman y Ralph Merkle. Tardaron algunos a˜os, pero finalmente consio n guieron crear un sistema denominado Cifrado de clave p´blica (PKE, Public Key Encription), tambi´n u e conocido como Criptograf´ asimetrica. ıa La criptograf´ asim´trica utiliza un cifrado que divide la clave en dos claves m´s peque˜as. Una de ıa e a n las claves se hace p´blica y otra sigue siendo privada. El mensaje lo ciframos con la clave p´blica del u u
Jose Antonio Escart´ Vigo, Junio 2005. ın

182

Servidor Linux para conexiones seguras de una LAN a Internet

´ destinatario. Este puede descifrarla a continuaci´n con su propia clave privada. Y lo mismo pueden hacer o por nosotros, cifrando un mensaje con nuestra clave p´blica para poderlo descifrar con nuestra clave u 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 u como si fueran una gu´ telef´nica). Al utilizar la clave p´blica del destinatario, sabemos que s´lo esa ıa o u o 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. u Normalmente la criptograf´ asim´trica se implanta mediante el uso de funciones de un sentido. En ıa e t´rminos matem´ticos, ´stas son funciones f´ciles de calcular en una direcci´n pero muy dif´ e a e a o ıciles de calcular a la inversa. De esta forma podemos publicar nuestra clave p´blica, derivada a partir de nuestra clave u privada, una tarea muy dif´ de llevar a cabo al rev´s para determinar la clave privada. Una funci´n ıcil e o com´n de un s´lo sentido utilizada actualmente, es la descomposici´n en factores de n´meros primos u o o u grandes. Es f´cil multiplicar dos n´meros primos y obtener un producto. Sin embargo, determinar cu´l de a u a las muchas posibilidades son los dos factores de un producto es uno de los problemas matem´ticos m´s a a complejos (su tiempo de computaci´n es NP-Completo1 ). o Si alguien inventase un m´todo para deducir f´cilmente factores de n´meros primos grandes2 en tieme a u po de computaci´n lineal o polin´mico, dar´ al traste con el mecanismo de cifrado de claves p´blicas o o ıa u actual, haciendo que cualquier tipo de comunicaci´n basada en este tipo de algoritmos resultase insegura. o Afortunadamente, otras funciones de un solo sentido funcionan bien para este tipo de aplicaci´n, como los o c´lculos sobre curvas el´ a ıpticas o el c´lculo de logaritmos inversos sobre un campo finito. a Poco despu´s del lanzamiento de Diffie, Hellman y Merkle, otro grupo de tres hombres desarroll´ una e o aplicaci´n pr´ctica de la teor´ Su sistema para el cifrado p´blico se denomin´ RSA, por sus nombres: o a ıa. u o Ronald Rivest, Adi Shamir y Leonard Adleman. Formaron una empresa que empez´ a regular su sistema. o La velocidad de adopci´n era lenta y su empresa estuvo a punto de quebrar, hasta que lleg´ el momento o o de aprovechar el emergente campo comercial de Internet con una empresa, entonces peque˜a denominada n Netscape. El resto es historia y ahora RSA es el algoritmo de cifrado de clave p´blica m´s utilizado. Diffie u a y Hellman finalmente lanzaron una aplicaci´n pr´ctica de su propiedad, pero s´lo util para intercambios o a o ´ de clave, mientras que RSA puede realizar la autenticaci´n y el no reconocimiento. o Panorama actual Hoy en d´ el cifrado de clave p´blica se encuentra detr´s de cada servidor web que nos ofrece una ıa, u a compra segura. Nuestra transacci´n se cifra sin tener que dar ni obtener una clave secreta y todo se o produce en segundo plano. Como usuarios, lo unico que conocemos es ese peque˜o s´ ´ n ımbolo de candado SSL que se muestra en nuestro explorador para sentirnos seguros. No se puede imaginar el efecto que tendr´ sobre el comercio de Internet si cada vez que dese´ramos comprar algo online tuvi´semos que ıa a e 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´ tal y como existe actualmente si no o ıa existiese la criptograf´ de clave p´blica. ıa u Por lo general las aplicaciones, combinan los dos tipos de criptograf´ Utilizan primeramente criptoıa. graf´ de clave p´blica para acordar una clave sim´trica aleatoria. Esta clave sim´trica es una clave de ıa u e e sesi´n y sirve para realizar m´s r´pidamente el cifrado y descifrado de la informaci´n que se mandan, ya o a a o 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.

11.2.2.

Est´ndares generales a

El est´ndar de cifrado de datos (DES, Data Encryption Standar) es el est´ndar original que el gobierno a a de los Estados Unidos empez´ a promover para su uso gubernamental y comercial. Pensado originalmente o para se pr´cticamente inquebrantable en los a˜os setenta, el aumento en potencia y el descenso en costo a n
1 Denominaci´n que se le da en inform´tica te´rica a los problemas m´s dificeles de calcular, que necesitan un tiempo o a o a exponencial para su resoluci´n). o 2 Esto no es algo descabellado, hace muy pocos a˜ os se ha conseguido desarrollar un algoritmo que resuelve el problema n de si un n.o tiene factores, en tiempo de computaci´n polinomico. o

Jose Antonio Escart´ Vigo, Junio 2005. ın

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 a o confidencial. Sin embargo, todav´ se sigue utilizando en muchos productos comerciales y se considera ıa aceptable para las aplicaciones de seguridad inferior. Tambi´n se utiliza en productos que tienen procee sadores m´s lentos, como las tarjetas inteligentes y los dispositivos que no procesan un tama˜o de clave a n m´s largo. a TripleDES Tambi´n llamado 3DES es la versi´n DES m´s moderna y actualizada, su nombre implica lo que hace. e o a 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 o o resultados del proceso), pero sigue teniendo una longitud de clave efectiva de 168 bits, bastante solidez para la mayor´ de usos. ıa 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´ p´blica. Se han realizado mejoras a lo largo del tiempo para o a ıa u hacerla m´s s´lida y solucionar problemas menores. La versi´n actual, RC6, permite una clave de 2.040 a o o bits de tama˜o y un tama˜o de bloque variable de hasta 128 bits. n n AES Cuando el gobierno de los Estados Unidos se dio cuenta de que DES terminar´ llegando al final de ıa su vida util, empez´ a buscar un sustituto. Hubo muchos competidores, incluyendo RC6, Blowfish del ´ o reconocido cript´grafo Bruce Schneier y otros algoritmos meritorios. El concurso se resolvi´ a favor de o o AES, basado en un algoritmo denominado Rijindael dise˜ado por dos cript´grafos belgas. Este hecho es n o importante porque se utiliz´ una competici´n abierta para decidir el est´ndar. Asimismo, al seleccionar o o a 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 o a a a cifrado. Ofrece una clave de hasta 256 bits, algo m´s que suficiente para el futuro previsible. Normalmente, a AES se implanta en modo de 128 o 192 bits.

11.2.3.
Hash

Aplicaciones de la criptograf´ ıa

Los hash son funciones especiales de sentido unico que proporcionan autenticaci´n y verificaci´n uti´ o o lizando el cifrado. Una funci´n hash recoge un archivo y lo coloca en una funci´n para que se produzca o o un archivo de tama˜o, en conjunto, mucho m´s peque˜o. Al hacerlo, se produce una huella digital unica, n a n ´ 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 o correcta, podremos saber si se ha producido alg´n cambio en el archivo. Es muy poco probable que un u archivo con una estructura diferente produzca una huella id´ntica. Incluso si cambia uno de los caracteres, e 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 a o puede descargar desde r´plicas de los servidores oficiales. El sitio web oficial normalmente incluye el hash e correcto de la ultima versi´n. Si ambos no coinciden, sabremos que se han producido cambios, posiblemente ´ o sin el permiso o el conocimiento de los desarrolladores del software. El algoritmo hash m´s conocido se a denomina MD5. Cuando se instala el sistema, se pregunta al usuario que algoritmo hash quiere usar para las contrase˜as. n Es muy recomendable establecer MD5 como predeterminado, ya que actualmente se le considera uno de los mejores algoritmos de hash.
Jose Antonio Escart´ Vigo, Junio 2005. ın

184 Certificados digitales

Servidor Linux para conexiones seguras de una LAN a Internet

Los certificados digitales son las “firmas” del mundo comercial en Internet. Utilizan una combinaci´n de o tipos de cifrado para proporcionar autenticaci´n y comprueban que quien se est´ conectando es realmente o a quien dice ser. En resumen, un certificado es una “certificaci´n” expedida por una autoridad de la que nos o 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 u o p´blica de una autoridad de firmas. El uso de una autoridad de certificados o firmas se considera el u m´todo m´s seguro de los dos. Si podemos descifrar el certificado con su clave publica, podremos suponer e a razonablemente que el sitio web pertenece a dicha organizaci´n. o 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 a han sancionado a otras muchas empresas por ofrecer certificados de su parte, sin regulaci´n de ningun o 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 a o e por v´ telef´nica o bien por otro medio de documentaci´n en papel, como un contrato corporativo en el ıa o o que se pide autenticaci´n en persona. Cuando han “certificado” que nuestra informaci´n es correcta, cogen o o esta informaci´n, incluyendo los URL que vamos a utilizar para el certificado y la “firman” digitalmente o cifr´ndola con su clave privada. Despu´s, un servidor Web o cualquier programa podr´n utilizar este a e a certificado. Las entidades de certificaci´n descentralizan su misi´n en entidades de certificaci´n locales en las que o o o confian. En Catalu˜a esta entidad es la Agencia Catalana de certificaciones, CATCERT. n En su p´gina web podemos encontrar m´s informaci´n: http://www.catcert.net a a o Cuando los usuarios externos reciben datos, como una p´gina web del servidor, y adjunta un certificado, a pueden utilizar la criptograf´ de clave p´blica para descifrar el certificado y verificar nuestra identidad. ıa u Se utilizan principalmente en los sitios de comercio electr´nico, pero tambi´n se utilizan en cualquier otra o e forma de comunicaci´n. Programas como SSH y Nessus pueden utilizar certificados para la autenticaci´n. o o Las VPN o las redes inal´mbricas tambi´n pueden utilizar certificados para la autenticaci´n en lugar de a e o contrase˜as. n

11.2.4.

Protocolos de cifrado

Un hecho bien conocido es que el protocolo IP tal y como se dise˜o originalmente no era muy seguro. n La versi´n 4 de IP (IPv4), utilizado por casi todo el mundo de la comunicaci´n con IP, no proporciona o o ning´n tipo de autenticaci´n ni confidencialidad. Las cargas utiles del paquete se env´ al descubierto y u o ´ ıan los encabezados del paquete se pueden modificar f´cilmente ya que no se verifican en el destino. Muchos a ataques de Internet se basan en esta inseguridad b´sica de la infraestructura de Internet. Para proporcionar a autenticaci´n y confidencialidad a trav´s del cifrado, se ha desarrollado un nuevo est´ndar IP denominado o e a IPv6. Adem´s, ampl´ el espacio de direcci´n IP utilizando una direcci´n de 128 bits en lugar de 32 bits a ıa o o y mejora adem´s otros elementos. a La implantaci´n completa del est´ndar IPv6 requiere actualizaciones de hardware a amplia escala, por o a 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 o IPsec, que no requer´ cambios importantes en el esquema del direccionamiento. Los suministradores de ıa hardware se aferraron a ello, convirti´ndose IPsec poco a poco en un est´ndar de hecho para crear VPNs e a 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 o u a n
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 11. Comunicaciones seguras

185

tambi´n autenticaci´n. Esta funci´n se denomina encabezado de autenticaci´n (AH, Autentication Heae o o o der). Con AH, un hash se crea a partir del encabezado IP y ´ste pasa adelante. Cuando el paquete llega a e su destino, se crea un nuevo hash a partir de cada encabezado. Si no es comparable al enviado, sabr´ que a el encabezado se ha alterado de alguna manera durante el tr´nsito, lo que nos proporciona un alto nivel de a garant´ de que el paquete proviene de donde dice. Podemos elegir descifrar la carga util pero no ejecutar ıa ´ un AH ya que puede ralentizar el procesamiento. AH tambi´n puede estropearse en algunos entornos con e NAT o cortafuegos. Existen otros dos modos de operaci´n diferentes en los que podemos ejecutar IPsec: en modo t´nel o o u en modo transporte. En modo t´nel, todo el paquete (encabezados incluidos) se encapsula y se cifra, se coloca en otro u paquete y se remite al procesador VPN central. Los extremos finales descifran los paquetes y despu´s los e env´ al IP correcto. Una de las ventajas de utilizar este m´todo es que los usuarios externos pueden ıan e saber incluso cu´l es el destino final del paquete cifrado. Otra ventaja es que VPN puede controlarse y a administrarse desde pocos puntos centrales. El inconveniente es que requiere un hardware dedicado en ambos extremos para abrir el t´nel. u En modo de transporte s´lo se cifran las cargas utiles del paquete; los encabezados se env´ intactos, o ´ ıan lo que produce un despliegue m´s facil y requiere menos infraestructura. Podemos seguir ejecutando AH a cuando utilicemos el modo de transporte y verificar la direcci´n de origen de los paquetes. o PPTP: Protocolo de t´ nel punto a punto u El protocolo PPTP (Point-to-Point Tunneling Protocol) es un est´ndar desarrollado por Microsoft, a 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´ o ıa una admisi´n t´cita que IPsec hab´ ganado como nuevo est´ndar de cifrado. Sin embargo, PPTP sigue o a ıa a siendo un protocolo util y econ´mico para configurar VPN entre los PC m´s antiguos de Windows. ´ o a L2TP: Protocolo de t´ nel de dos capas u 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´ no ı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. o Originalmente lo dise˜o Netscape para que su explorador ayudase a la simulaci´n de comercio electr´nico. n o o SSL proporciona cifrado de datos, autenticaci´n en ambos extremos e integridad de mensajes utilizando o certificados. Normalmente, SSL se utiliza cuando se realiza una conexi´n a un servidor web para que sepa que la o informaci´n que enviamos se protege a lo largo del trayecto. La mayor´ de las personas ni siquiera se dan o ıa cuenta de que SSL se est´ ejecutando en segundo plano. Normalmente s´lo autentica un extremo, la parte a o del servidor, ya que la mayor´ de usuarios finales no tienen certificados. ıa

11.2.5.

OpenPGP: Aplicaci´n de cifrado o

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. o 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 o de reg´ ımenes represivos la interceptaci´n y recopilaci´n de informaci´n sobre los disidentes. Phil quer´ o o o ıa escribir alg´n software que ayudase a dichas personas a mantener su informaci´n privada y segura frente u o
Jose Antonio Escart´ Vigo, Junio 2005. ın

186

Servidor Linux para conexiones seguras de una LAN a Internet

a los brutales regimenes que los controlaban. Este software pod´ salvar literalmente la vida de algunas ıa personas. Tampoco cre´ que su propio gobierno no observara sus datos personales cuando se desplazaban ıa por redes interconectadas. Sab´ lo f´cil que pod´ ser para el gobierno crear sistemas para buscar cada ıa a ıa l´ ınea de los mensajes de correo electr´nico para determinadas palabras clave. Deseaba proporcionar a las o 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, o ı ya que cre´ que hac´ una buena labor a la hora de proteger los datos ante los servicios de inteligencia de ıa ıa los pa´ m´s peque˜os. Sin embargo, la agencia de la informaci´n de los Estados Unidos, NSA, no lo ve´ ıses a n o ıa de esa forma. Zimmerman fue investigado por infringir las leyes federales de exportaci´n de munici´n por o o permitir que su software se descargase fuera del pa´ Originalmente, Phil pretend´ buscar una empresa ıs. ıa que vendiera su innovaci´n. Sin embargo, cuando el gobierno inici´ su persecuci´n, distribuy´ libremente o o o o el software por Internet para que se distribuyese por todas partes. Posteriormente form´ una empresa para o vender las versiones comerciales del software pero existen implantaciones de libre distribuci´n de PGP o por todo Internet. Algunas de ´stas son mas populares que otras y algunas son aplicaciones que tienen e funciones espec´ ıficas como el cifrado de mensajes de correo electr´nico. Se pueden encontrar una lista de o todas estas implementaciones de PGP en http://www.cypherspace.org/openpgp/. 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 o o y por lo tanto podemos utilizarla para cualquier aplicaci´n, comercial o personal, asi como ampliarla o 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 o que tener cuidado, GnuPG probablemente no sea la mejor opci´n para usuarios no t´cnicos, a no ser que o e a˜adamos su propia interfaz (Gnome dispone de una). n Para comprobar la versi´n: o $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 u Si se han de crear: 1. 2. Escribimos: #gpg --gen-key y seguimos las instrucciones de pantalla GnuPG pide el tama˜o de bits de sus claves. El predeterminado es 1.024, que generalmente se n considera suficiente para una criptograf´ s´lida de clave p´blica. Podemos aumentar el tama˜o ıa o u n hasta 2.048 para una seguridad mucho mas fuerte. Generalmente no se desea que las claves expiren, pero si tiene un caso especial en el que s´lo o utilizar´ esta clave durante un tiempo limitado, se puede establecer una fecha de finalizaci´n. a o Por ultimo se pide que se introduzca una contrase˜a que sirva de frase de paso. ´ n

3. 4.

Atenci´n: Es muy importante conservar copias de seguridad del par de claves en un lugar o seguro, en caso de perderlas, los datos cifrados se no se podr´ recuperar. ıan

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 11. Comunicaciones seguras $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. a Crear un certificado de revocaci´n: o

187

Una vez creadas las claves, tambi´n podemos crear un certificado de revocaci´n que se utiliza si perdemos e o nuestras claves o si alguien obtiene acceso a nuestra clave privada. Despu´s podemos utilizar este certifie cado para revocar nuestra clave de los servidores p´blicos. Podemos seguir descifrando mensajes recibidos u utilizando la clave p´blica antigua (suponiendo que no la hayamos perdido) pero nadie podr´ descifrar u a ning´n mensaje con las claves p´blicas incorrectas. Para crear un certificado: u u $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´ hacerse con el certificado de revocaci´n. e e ıa o Publicar la clave p´ blica u Se puede colocar la clave p´blica en un servidor de claves para que cualquiera pueda encontrarla f´cilu a mente 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 u o de correo electr´nico de la clave que desea publicar. Puede utilizar cualquier servidor de claves p´blicas o u PGP ya que todos se sincronizan con frecuencia. Existen muchos servidores de claves p´blicas, como por u ejemplo: pgp.mit.edu, certserver.pgp.com y usa.keyserver.net.

Jose Antonio Escart´ Vigo, Junio 2005. ın

188 Cifrar archivos con GnuPG

Servidor Linux para conexiones seguras de una LAN a Internet

Para cifrar un archivo se utiliza el comando: $gpg --output file.gpg --encrypt --recipient friend@example.com file.doc Reemplanzando file.gpg con el nombre de archivo resultante deseado, friend@example.com con la direcci´n de correo electr´nico del usuario al que est´ realizando el env´ y file.doc por el arcivo que se desea o o a ıo cifrar. Tenga en cuenta que tiene que tener la clave p´blica del destinatario en su repositorio para poder u hacerlo. Tambi´n se puede utilizar GnuPG para cifrar archivos con una criptograf´ sim´trica, que puede utilizar e ıa e para sus archivos locales que desea proteger o para alguien del que no tiene su clave p´blica. Para ello, u 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. u Un mensaje solicitar´ la frase de contrase˜a y, una vez introducida correctamente, GnuPG producir´ el a n a 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 e descifra, GnuPG tambi´n verificar´ el documento. e a 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 e ´ del archivo para poder acceder a usuarios sin GnuPG e incluir la firma. Estos 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 e de firma separado, para dejar almacenada la firma o mandarla por separado, con el comando: $gpg --output sig.doc --detached-sig file.doc

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 11. Comunicaciones seguras Web de modelo de confianza de PGP/GnuPG

189

Tal y como hemos mencionado anteriormente, en lugar de utilizar un sistema de confianza jer´rquia co 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´ haber una u ıa manzana podrida, pero la idea que se esconde detr´s del sistema es que se propaga org´nicamente y no a a requiere ninguna estructura. Debido a ello puede desmantelarse o formarse f´cilmente a gran escala. La a 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 o con el siguiente comando: gpg --edit-key friend@example.org Donde friend@example.org coincide con la direcci´n de correo electr´nico de la clave que desea firo o mar 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 o a 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 u a por tel´fono o por cualquier otro medio de comunicaci´n. Tambi´n puede comprobar si alguien m´s ha e o e a 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´ en ella. e ıa En este modo tambi´n puede editar los niveles de las diferentes claves en su repositorio. Se introduce este e modo dentro del modo de edici´n de la clave escribiendo trust. o As´ se muestra el siguiente men´: ı u 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. Esta es otra a forma de poderse comunicar con otros a cerca de los usuarios que tienen su nivel m´s alto de confianza y a cu´les son usuarios en los que conf´ poco. a ıa 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 o SSH, explicado en la secci´n anterior. o Existen much´ ısimas m´s opciones que se pueden consultar con: $man gpg a

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 12

Herramientas de seguridad
12.1. Herramientas b´sicas a

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. o

12.1.1.

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, o rebota en un destino y vuelve. Aunque se trate de una buena analog´ general, no describe exactamente ıa lo que sucede cuando incluimos un ping en una m´quina. Los ping utilizan un protocolo de red denomia nado 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, o conocidos tambi´n como Solicitud de eco y Contestaci´n de eco respectivamente. Cuando utilizamos el coe o mando ping, la m´quina env´ una solicitud de eco a otra m´quina. Si se puede acceder a la m´quina que se a ıa a a encuentra en el otro extremo y se ejecuta una pila TCP conforme, responder´ con una contestaci´n de eco. a o B´sicamente, las comunicaciones en un ping tienen la siguiente apariencia: a El sistema A env´ un ping al sistema B: solicitud de eco, “¿Est´s ah´ ıa a ı?” El sistema B recibe la solicitud de eco y env´ una contestaci´n de eco: “Si, estoy aqu´ ıa o ı” En una sesi´n ping t´ o ıpica, este proceso se repite varias veces para comprobar si la m´quina de destino a o la red est´n bajando paquetes. Tambie´n se puede utilizar para determinar la latencia, el tiempo que a e tardan los paquetes entre dos puntos. Tambi´n podemos obtener estos otros tipos de mensajes ICMP cuando mandamos un ping. Cada uno e tiene us propio significado. Red inalcanzable Anfitri´n inalcanzable o Con un ping podemos saber algo m´s sobre un anfitri´n que si simplemente est´ activo o no. La forma en a o a que una m´quina responde a un ping, normalmente, identifica el sistema operativo que est´ ejecutando. a a Tambi´n podemos utilizar ping para generar una solicitud de b´squeda DNS, que nos proporciona el e u nombre del anfitri´n de destino (si lo tiene), que a veces puede decirnos si esta m´quina es un servidor, o a un enrutador o quiz´ una conexi´n telef´nica o conexi´n de ancho de banda. Podemos mandar un ping a a o o o una direcci´n IP o a un nombre de dominio. o

192

Servidor Linux para conexiones seguras de una LAN a Internet

Opci´n o -c count -f

-n -s size

-p pattern

Cuadro 12.1: Opciones del comando ping Descripci´n o Establece un n´mero de pings deteminado, por defecto es infinito u ´ Flujo de los ping. Env´ tantos paquetes como puede, tan r´pido como puede. Util para ıa a comprobar si un anfitri´n esta bajando paquetes porque mostrar´ gr´ficamente a cu´ntos o a a a ping responde. Hay que tener cuidado con esta opci´n porque puede producir la caida o de la red por DoS (denegaci´n de servicio) o No ejecuta DNS en la direcci´n IP. Puede aumentar la velocidad de una respuesta y o cancelar los problemas de DNS cuando existen problemas de diagn´stico de la red o ´ para probar c´mo manipula los paquetes grandes Env´ paquetes de longitud size. Util ıa o una m´quina o un enrutador. Irregularmente, los paquetes grandes se utilizan en ataques a de denegaci´n de servicios para hacer caer una m´quina o desbordarla o a Env´ un patr´n espec´ ıa o ıfico en el paquete ICMP de carga util. Tambi´n es util para probar ´ e ´ c´mo responde una m´quina a un est´ o a ımulo ICMP inusual

La tabla 12.1 incluye los modificadores y las opciones adicionales para el comando ping, que pueden resultar utiles. ´ Un ejemplo de este comando podr´ ser el siguiente: ıa # ping www.fib.upc.es PING www.fib.upc.es (147.83.41.7): 56 64 bytes from 147.83.41.7: icmp_seq=0 64 bytes from 147.83.41.7: icmp_seq=1 64 bytes from 147.83.41.7: icmp_seq=2 64 bytes from 147.83.41.7: icmp_seq=3 64 bytes from 147.83.41.7: icmp_seq=4 64 bytes from 147.83.41.7: icmp_seq=5 data bytes ttl=241 time=66.3 ms ttl=241 time=130.4 ms ttl=241 time=103.8 ms ttl=241 time=62.0 ms ttl=241 time=76.8 ms ttl=241 time=61.5 ms

--- www.fib.upc.es ping statistics --6 packets transmitted, 6 packets received, 0% packet loss round-trip min/avg/max = 61.5/83.4/130.4 ms

12.1.2.

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´sia o o a camente, los pings que rastrean rutas (tracerotue) son anfitriones, pero cuando env´ fuera el primer ıan paquete, establecen la configuraci´n TTL (tiempo de vida) del paquete en uno. Esta configuraci´n cono o trola la cantidad de puntos de conexi´n en el ordenador de la red que obtendr´ antes de morir por lo que o a el primer paquete s´lo ir´ al primer enrutador o m´quina m´s all´ de la nuestra en Internet y despu´s o a a a a e devolver´ un mensaje indicando que el paquete ha “expirado”. A continuaci´n el siguiente paquete se a o establece con un TTL de 2, y as´ sucesivamente hasta llegar a nuestro objetivo, mostr´ndonos el trazado ı a virtual (la ruta) que siguen los paquetes. Se resuelve el nombre de cada anfitri´n encontrado a lo largo o del camino para que podamos ver c´mo cruza Internet el tr´fico. Puede ser muy interesante comprobar o a c´mo un paquete pasa por diferentes paises antes de llegar a su destino una fracci´n de segundo despu´s o o e 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 a o intruso que hemos encontrado en nuestro logs o alertas. Podemos rastrear la ruta de la direcci´n IP y o saber varias cosas sobre dicha direcci´n. La salida puede indicarnos si se trata de un usuario dom´stico o e
Jose Antonio Escart´ Vigo, Junio 2005. ın

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 a sobre el abuso), qu´ tipo de servicio tiene y lo r´pido que es y d´nde se encuentra geogr´ficamente (a veces e a o a depende de la capacidad de descripci´n de los puntos intermedios). o Para ver como funciona podemos ejecutar el siguiente ejemplo: # traceroute www.fib.upc.es traceroute to www.fib.upc.es (147.83.41.7), 30 hops max, 38 byte packets 1 (192.168.0.1) 0.480 ms 0.459 ms 0.408 ms 2 213.0.184.252 (213.0.184.252) 46.732 ms 47.016 ms 116.462 ms 3 213.0.190.22 (213.0.190.22) 48.833 ms 51.344 ms 47.850 ms 4 tbvia1-tbest1-1.nuria.telefonica-data.net (213.0.248.146) 47.108 ms 45.986 ms 5 213.0.254.242 (213.0.254.242) 47.335 ms 52.532 ms 51.392 ms 6 montseny-catnix.catnix.net (193.242.98.2) 61.530 ms 66.452 ms 61.101 ms 7 upc-anella.cesca.es (84.88.18.18) 63.990 ms 129.435 ms 64.099 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 o o un ataque. Si identificamos el ISP, con el sitio web de la empresa podemos encontrar un n´mero de telefono u o una direcci´n de correo y quejarnos. Los ISPs habitualmente finalizan su contrato de suministro con o el cliente malintencionado. Tambi´n podemos utilizar el comando whois, para buscar contactos t´cnicos e e espec´ ıficos para la empresa y organizaci´n. o

12.1.3.

Whois

El comando whois es util para intentar localizar el contacto de alguien que est´ causando problemas ´ a 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 o e es el propietario de un dominio. Este comando es util 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 e nuestro problema. Esta soluci´n no siempre es muy pr´ctica, pero por lo menos podemos probar. o a Su sintaxis es: $whois domain-name.com, . . . donde domain-name.com es el nombre del dominio sobre el que estamos buscando informaci´n. o Podemos observar esto en el siguiente ejemplo:
$whois www.google.com Whois Server version 1.3 Domain names in the .com and .net domains can now be registered with many different competing registrars. Go to http://www.internic.net for detailed information. Server Name: WWW.GOOGLE.COM.TR Registrar: TUCOWS INC. Whois Server: whois.opensrs.net Referral URL: http://domainhelp.tucows.com Server Name: WWW.GOOGLE.COM.MX Registrar: ENOM, INC. Whois Server: whois.enom.com Referral URL: http://www.enom.com Server Name: WWW.GOOGLE.COM.BR Registrar: ENOM, INC. Whois Server: whois.enom.com Referral URL: http://www.enom.com Server Name: WWW.GOOGLE.COM.AU Registrar: MELBOURNE IT, LTD. D/B/A INTERNET NAMES WORLDWIDE Whois Server: whois.melbourneit.com Referral URL: http://www.melbourneit.com >>> Last update of whois database: Wed, 25 May 2005 08:39:49 EDT <<<

Jose Antonio Escart´ Vigo, Junio 2005. ın

194 Tambi´n nos puede pasar lo siguiente: e

Servidor Linux para conexiones seguras de una LAN a Internet

$whois www.fib.upc.es 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 unica soluci´n es buscar a mano en esa direcci´n. Solamente los dominios .com, .net y ´ o o .edu se encuentran incluidos en whois. El comando whois normalmente muestra una lista de direcciones de correo electr´nico, direcciones de o correo postal y, a veces, n´meros telef´nicos. Nos dice cu´ndo se cre´ el dominio y si se han hecho cambios u o a o 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. a o Si administra dominios propios, debe asegurarse de que su listado whois est´ actualizado y es tan a gen´rico como pueda serlo. Al colocar direcciones de correo electr´nico y nombre reales en los campos de e o informaci´n, estamos proporcionando informaci´n que alguien del exterior puede aprovechar, ya sea para o o una labor social como para atacar nuestros sistemas. Es mejor utilizar direcciones de correo electr´nico o gen´ricas, dejando que los responsables reciban los mensajes enviados a esas direcciones de correo electr´nie o co y evitar proporcionar una informaci´n valiosa sobre la estructura de nuestra organizaci´n t´cnica. o o e

12.1.4.

Dig

El comando dig consulta en el servidor de nombres determinada informaci´n sobre un dominio. Dig o es una versi´n actualizada del comando nslookup, que ha quedado desfasado. Podemos utilizarlo para o determinar los nombre de m´quinas utilizados en una red, qu´ direcciones IP se unen a dichas m´quinas, a e a cu´l es su servidor de correo y otro tipo de informaci´n util. a o ´ La sintaxis general es: $dig @ 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. o Como ejemplo podemos poner una direcci´n que viene en el manual: o
$dig www.isc.org ; <<>> DiG 9.2.4 <<>> www.isc.org ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25173 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 3 ;; QUESTION SECTION: ;www.isc.org. ;; ANSWER SECTION: www.isc.org. ;; AUTHORITY SECTION: isc.org. isc.org. isc.org. isc.org. ;; ADDITIONAL SECTION: ns-ext.lga1.isc.org. ns-ext.nrt1.isc.org. ns-ext.sth1.isc.org. ;; ;; ;; ;;

IN

A

600

IN

A

204.152.184.88

3599 3599 3599 3599

IN IN IN IN

NS NS NS NS

ns-ext.isc.org. ns-ext.lga1.isc.org. ns-ext.nrt1.isc.org. ns-ext.sth1.isc.org.

3599 3599 3599

IN IN IN

A A A

192.228.91.19 192.228.90.19 192.228.89.19

Query time: 696 msec SERVER: 192.168.0.1#53(192.168.0.1) WHEN: Wed May 25 21:30:18 2005 MSG SIZE rcvd: 192

En la tabla 12.2 podemos encontrar las opciones m´s usuales del comando dig. a

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 12. Herramientas de seguridad

195

Opci´n o AXFR

A MX CNAME ANY

Cuadro 12.2: Opciones del comando dig Descripci´n o 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 o sobre la red Devuelve el nombre del anfitri´n de correo registrado para dicho dominio. Es util para o ´ contactar con un administrador Devuelve cualquier anfitri´n CNAMED, conocidos como alias o Devuelve cualquier informaci´n que puede generarse en el dominio. Algunas veces funciona o cuando falla AXFR

12.1.5.

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 a no o usuarios permit´ que otras personas al otro lado del mundo conociesen sus datos. ıan La mayor´ de los administradores lo eliminan de sus sistemas porque es una fuente de brechas de ıa seguridad, pero todav´ existen muchos enrutadores que lo incluyen y algunos Unix lo mantienen por deıa fecto. Adem´s a esto se une que muchos administradores se les olvida desinstalarlo o no saben c´mo hacerlo. a o El comando finger permite consultar, al sistema remoto, acerca de informaci´n de sus usuarios. La o sintaxis ser´ la siguiente: ıa $finger user@hotname.example.com Tambi´n podemos especificar una direcci´n IP como dominio. El resultado del finger, podr´ ser usada e o ıa por una persona malintencionada para conseguir informaci´n m´s relevante mediante ingenier´ social. o a ıa 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 a e incluso podemos saber si est´n inactivos y durante cuanto tiempo. Por ultimo presenta una lista de las a ´ 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 josan josan Name Jose Antonio Escartin Jose Antonio Escartin Tty *:0 pts/1 Idle Login Time Office May 26 12:18 May 26 12:34 (:0.0) Office Phone

Y despu´s se puede utilizar para para averiguar m´s sobre un usuario: e a $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, o o 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: e o $finger -l
Jose Antonio Escart´ Vigo, Junio 2005. ın

196

Servidor Linux para conexiones seguras de una LAN a Internet

12.2.

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 mecao nismos de defensa insuficientes si no se han configurado correctamente. Una l´ ınea de configuraci´n err´nea o o puede negar la protecci´n que ofrece un cortafuegos. Un administrador muy ocupado que est´ intentando o e establecer el acceso para los empleados errar´ normalmente m´s en la parte de acceso en lugar de realizar a a ah´ un mejor esfuerzo para configurar la seguridad. Se necesita mucha revisi´n y paciencia a la hora de ı o establecer las reglas. Los cortafuegos, se sit´an en la parte en la parte superior del sistema operativo y por lo tanto, pueden u 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 ı e 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 a cortafuegos para toda la seguridad de nuestra red.

12.2.1.

Pol´ ıticas de seguridad

En alg´n momento, preferiblemente antes de instalar el cortafuegos, debemos comentar por escrito u su proceso de actuaci´n. Esto nos ser´ muy util para planificar la instalaci´n y configuraci´n. Este plan o a ´ o o 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 o a est´ ofreciendo a la organizaci´n la seguridad prometida. e o Los siguientes pasos perfilan un proceso para la implantaci´n y funcionamiento de un cortafuegos. o 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 e y sentarnos a esperar las quejas. Revisar y probar las reglas del cortafuegos peri´dicamente. o Dise˜ar y utilizar un proceso como ´ste nos ayudar´ a garantizar que obtenemos mucho m´s de la n e a a implantaci´n de nuestro cortafuegos. o

12.2.2.

Modos de configuraci´n o

Existen dos formas de configurar un cortafuegos: Permitir todo y bloquear lo que no deseemos Denegar todo y a˜adir lo permitido n El m´todo habitual, usado por la gran mayor´ de administradores es empezar con “denegar todo” y e ıa despu´s a˜adir lo que deseamos permitir a los usuarios. Autom´ticamente bloqueamos todo el tr´fico, a e n a a no ser que se admita en la configuraci´n espec´ o ıficamente. Para la mayor´ de los sitios, la soluci´n “denegar todo” es mucho mas seguro. Sin embargo, s´lo ıa o o porque optemos por esta soluci´n no significa que nuestra red sea totalmente segura. Los ataques pueden o provenir a trav´s de cualquier brecha que hayamos creado, como la web y el correo electr´nico. e o
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 12. Herramientas de seguridad

197

12.2.3.

IPTables

Esta secci´n describe c´mo se configura un cortafuegos con IPTables, que es la utilidad integrada en la o o mayor´ de los sistema Linux 2.4 y posteriores. Esta utilidad nos permite crear un cortafuegos empleando ıa comandos de nuestro sistema operativo. Es una herramienta muy eficaz, pero compleja, y normalmente se recomienda para usuarios que est´n e 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 o a o 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 a a cubierta” con IPTables antes de empezar a configurar con una de las herramientas gr´ficas. a Instalar IPTables La mayor´ de los sistemas Linux con kernel 2.4 o superior tendr´n integrado IPTables, por lo que no ıa a es necesario instalar ning´n programa adicional, el servicio lo proporciona el propio kernel. u Para comprobar si lo tenemos instalado hay que ejecutar: $iptables -L, . . . deber´ mostrar una lista con el conjunto actual de reglas. ıa Si tenemos problemas lo m´s probable es que no tengamos habilitado IPTables en el kernel, tenemos a que recompilar el kernel. M´dulos del kernel para IPTables o 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. o a Las opciones de IPTables se encuentran en: Networking-suport -> Networking-options -> Networkpacket-filtering. 1. M´dulos b´sicos o a CONFIG NETFILTER CONFIG PACKET CONFIG IP NF CONNTRACK CONFIG IP NF FTP 2. Tabla filter (act´a como filtro) u 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

Jose Antonio Escart´ Vigo, Junio 2005. ın

198 3. Tabla Nat (act´a como router) u CONFIG IP NF NAT

Servidor Linux para conexiones seguras de una LAN a Internet

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 CONFIG IP COMPAT IPCHAINS CONFIG IP COMPAT IPFWADM Utilizar IPTables La idea que se esconde detr´s de IPTables es crear canales de entradas y procesarlas de acuerdo con a un conjunto de reglas (la configuraci´n del cortafuegos) y enviarlas a continuaci´n a canales de salida. En o o IPTables, estos canales se denominan tablas. Las tablas b´sicas empleadas en IPTables son: a Input: Tr´fico que entra en la m´quina a a Forward: Tr´fico que pasa por la m´quina a a Prerouting: Enrutamiento previo Postrouting: Enrutamiento posterior Output: Trafico que sale de la m´quina a El formato que genera una declaraci´n IPTables es: o #iptables command rule-specification extensions Donde command, rule-specification y extensions son una o m´s opciones v´lidas. La tabla 12.3 incluye a a 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 e a de listados, consulte el manual de IPTables escribiendo: $man iptables

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 12. Herramientas de seguridad

199

Cuadro 12.3: Especificaciones de reglas de IPTables Descripci´n o Especifica una determindada direcci´n de red origen a comparar. Para desigo nar un rago de direcciones IP se usa la notaci´n est´ndar de barra oblicua. o a Tambi´n se pude especificar un n´mero de puerto o un rango de n´meros e u u de puerto coloc´ndolos despu´s de un signo de exclamaci´n de apertura a e o -d address/mask!port Especifica una determindada direcci´n de red destino a comparar. Para o designar un rago de direcciones IP se usa la notaci´n est´ndar de barra o a oblicua. Tambi´n se pude especificar un n´mero de puerto o un rango de e u n´meros de puerto coloc´ndolos despu´s de un signo de exclamaci´n de u a e o 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 o -m multiport Especifica que se usar´ el m´dulo de multipuertos a o -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) a -i interface Especifica una interfaz de entrada -o interface Especifica una interfaz de salida Indica lo que se tiene que hacer con el paqute si coincide -j target con las especificaciones. Las opciones v´lidas para target son: a DROP Coloca el paquete sin ninguna acci´n posterior o 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 o 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 a a SNAT NAT est´tica. Esta opci´n se utiliza cuando se est´ realia o a zando una Traducci´n de direcci´n de red (NAT, Network o o Address Translation). Convierte la direcci´n de origen en o otro valor est´tico a DNAT NAT din´mica. Similar a la anterior pero usando un rango a din´mico de direcciones IP a MASQ Enmascara la IP usando una IP p´blica u REDIRECT Redirecciona el paquete Regla -s address/mask!port 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 192.168.0.1 - 192.168.0.254, que la interfaz eth1 es la conexi´n LAN local y que la interfaz eth0 es la conexi´n WAN o Internet. o o 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.
Jose Antonio Escart´ Vigo, Junio 2005. ın

200

Servidor Linux para conexiones seguras de una LAN a Internet

Comando -A chain -I chain rulenum -D chain -R chain rulenum -L -F

-Z chain -N chain -X chain -P chain policy

Cuadro 12.4: Comandos IPTables Descripci´n o A˜ade una o m´s reglas al final de la declaraci´n n a o Inserta una cadena en la ubicaci´n rulenum. Es util cuando deseamos que una o ´ regla reemplace a las anteriores Elimina la cadena indicada Reemplaza la regla en la ubicaci´n rulenum con la chain proporcionada o Lista todas las reglas en la cadena actual Purga todas las reglas en la cadena actual, eliminando b´sicamente la configua raci´n de nuestro cortafuegos. Es recomendable su uso cuando iniciamos una o configuraci´n para asegurarnos de que ninguna regla existente entrar´ en cono a flicto con una regla nueva Pone a cero todas las cuentas de paquetes y bytes en la cadena denominada Crea una nueva cadena con el nombre de chain Elimina la cadena especificada. Si no se especifica ninguna cadena, se eliminan todas las cadenas 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 ı a e haber usado: iptables -F, afectando a todas las cadenas a la vez. 3. Inserta la declaraci´n “denegar todo” est´ndar justo al principio: o a 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 o este tipo de ataques con dos sencillas declaraciones. iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -j DROP iptables -A FORWARD -p icmp -i eth0 -d 192.168.0.0/24 -j DROP La primera declaraci´n rechaza cualquier paquete que provenga de la interfaz eth0 de Internet con la o direcci´n interna 192.168.0.0/24. Por definici´n, ning´n paquete deber´ provenir de una interfaz de o o u ıa no confianza con una direcci´n de fuente privada e interna. La segunda declaraci´n retira cualquier o o paquete del protocolo ICMP que provenga de la direcci´n exterior a la interior. o Tambi´n se podr´ evitar las respuestas a pings externos mediante: e ıan iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 12. Herramientas de seguridad

201

6. Generalmente aceptaremos el tr´fico entrante basado en conexiones iniciadas desde el interior, por a ejemplo, alguien que explora una p´gina Web. Siempre que la conexi´n est´ en curso y se haya a o e iniciado internamente, probablemente sea correcta. Sin embargo, podemos limitar el tipo de tr´fico a permitido. Supongamos que s´lo deseamos permitir a los empleados el acceso a la Web y al correo o electr´nico. Podemos especificar los tipos de tr´fico para permitir s´lo el que est´ en una conexi´n ya o a o e o iniciada. Podemos saber si es una conexi´n existente comprobando si se ha establecido la parte ACK, o es decir, si se ha producido la conexi´n TCP de tres v´ Las siguientes declaraciones permiten el o ıas. tr´fico web basado en este criterio. a iptables -A FORWARD -m multiport -p tcp -i eth0 -d 192.168.0.0/24 --dports www,smtp --tcp-flags SYN,ACK ACK -j ACCEPT iptables -A FORWARD -m multiport -p tcp -i eth0 -d 192.168.0.0/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 o o o o de indicadores –tcp indica que s´lo deseamos paquetes con el campo ACK establecido o 7. Para poder aceptar conexiones de entrada desde el exterior s´lo en determinados puertos, como un o mensaje correo electr´nico entrante en nuestro servidor de correo, usamos este tipo de declaraci´n: o o iptables -A FORWARD -m multiport -p tcp -i eth0 -d 192.168.0.0/24 --dports smtp --syn -j ACCEPT El indicador de m´ltiples puertos -m indica a IPTables que vamos a emitir una declaraci´n de u o coincidencia para los puertos. La declaraci´n -syn le indica que se permiten los paquetes SYN, lo o que significa que se deben iniciar las conexiones TCP. Y el indicador --dports permite s´lo el tr´fico o a de correo SMTP. 8. Podemos permitir que los usuarios inicien conexiones de salida pero s´lo en los protocolos que o 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”. o iptables -A FORWARD -m multiport -p tcp -i eth0 -d 0.0.0.0 --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 a paquetes TCP, no podemos fiarnos de la revisi´n de los indicadores SYN o ACK. Deseamos admitir o UDP s´lo en el puerto 53, por lo que especificaremos: domain (una variable integrada para el puerto o 53), como unico puerto admisible. Las declaraciones que debemos usar son: ´ iptables -A FORWARD -m multiport -p udp -i eth0 -d 192.168.0.0/24 --dports domain -j ACCEPT iptables -A FORWARD -m multiport -p udp -i eth0 -s 192.168.0.0/24 --sports domain -j ACCEPT iptables -A FORWARD -m multiport -p udp -i eth1 -d 0.0.0.0 --dports domain -j ACCEPT iptables -A FORWARD -m multiport -p udp -i eth1 -s 0.0.0.0 --sports domain -j ACCEPT Las dos primeras declaraciones permiten los datagramas UDP entrantes y las otras dos declaraciones permiten las conexiones salientes.
Jose Antonio Escart´ Vigo, Junio 2005. ın

202 10.

Servidor Linux para conexiones seguras de una LAN a Internet Tambi´n podemos especificarlos para los paquetes ICMP. Lo que pretendemos es permitir todo tipo e de ICMP interno hacia el exterior, pero s´lo determinados tipos como la contestaci´n de eco hacia o o el interior, algo que podemos conseguir con las siguientes instrucciones: iptables -A FORWARD -m multiport -p icmp -i eth0 -d 192.168.0.0/24 --dports 0,3,11 -j ACCEPT iptables -A FORWARD -m multiport -p icmp -i eth1 -d 0.0.0.0 --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 ultimo, vamos a establecer el inicio de sesi´n para poder ver en los registros lo que se ha ´ o rechazado. Es mejor revisar estos registros de vez en cuando, incluso aunque no exista ning´n u problema, para tener una idea de los tipos de tr´fico que se han rechazado. Si observa paquetes a rechazados repetidamente de la misma red o direcci´n, puede que est´ siendo atacado. Existe una o e declaraci´n para registrar cada tipo de tr´fico: o a 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 o a internet. El siguiente c´digo es el ejemplo en un script. o 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 192.168.0.0/24 -i eth0 -j DROP #iptables -A INPUT -p icmp --icmp-type echo-request -j DROP iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

- OMITIDO , para evitar el punto 10

# Punto 6 iptables -A FORWARD -m multiport -p tcp -i eth0 -d 192.168.0.0/24 --dports www,smtp --tcp-flags SYN,ACK ACK -j ACCEPT iptables -A FORWARD -m multiport -p tcp -i eth0 -d 192.168.0.0/24 --sports www,smtp --tcp-flags SYN,ACK ACK -j ACCEPT # Punto 7 iptables -A FORWARD -m multiport -p tcp -i eth0 -d 192.168.0.0/24 --dports smtp --syn -j ACCEPT # Punto 8 iptables -A FORWARD -m multiport -p tcp -i eth0 -d 0.0.0.0 --dports www,smtp --syn -j ACCEPT # Punto 9 iptables -A iptables -A iptables -A iptables -A

FORWARD FORWARD FORWARD FORWARD

-m -m -m -m

multiport multiport multiport multiport

-p -p -p -p

udp udp udp udp

-i -i -i -i

eth0 eth0 eth1 eth1

-d -s -d -s

192.168.0.0/24 --dports 192.168.0.0/24 --sports 0.0.0.0 --dports domain 0.0.0.0 --sports domain

domain -j ACCEPT domain -j ACCEPT -j ACCEPT -j ACCEPT

# Punto 10 - OMITIDO #iptables -A FORWARD -m multiport -p icmp -i eth0 -d 192.168.0.0/24 --dports 0,3,11 -j ACCEPT #iptables -A FORWARD -m multiport -p icmp -i eth1 -d 0.0.0.0 --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 o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 12. Herramientas de seguridad El resultado de nuestro cortafuegos despu´s de ejecutar el script ser´ el siguiente: e ıa
# iptables -L Chain INPUT (policy target prot opt DROP all -DROP icmp -ACCEPT) source anywhere anywhere destination anywhere anywhere

203

icmp echo-request

Chain FORWARD (policy DROP) target prot opt source ACCEPT all -f anywhere DROP all -- 192.168.0.0/24 ACCEPT tcp -- anywhere ACCEPT tcp -- anywhere ACCEPT tcp -- anywhere ACCEPT tcp -- anywhere ACCEPT udp -- anywhere ACCEPT udp -- 192.168.0.0/24 ACCEPT udp -- anywhere ACCEPT udp -- 0.0.0.0 LOG tcp -- anywhere LOG udp -- anywhere LOG icmp -- anywhere Chain OUTPUT (policy ACCEPT) target prot opt source

destination anywhere anywhere 192.168.0.0/24 192.168.0.0/24 192.168.0.0/24 0.0.0.0 192.168.0.0/24 anywhere 0.0.0.0 anywhere anywhere anywhere anywhere

multiport dports www,smtp tcp flags:SYN,ACK/ACK multiport sports www,smtp tcp flags:SYN,ACK/ACK multiport dports smtp tcp flags:SYN,RST,ACK/SYN multiport dports www,smtp tcp flags:SYN,RST,ACK/SYN multiport dports domain multiport sports domain multiport dports domain multiport sports domain tcp LOG level warning udp LOG level warning icmp any LOG level warning

destination

Enmascarar IP con IPTables Cuando se dise˜o Internet originalmente, se reservaron varios bloques de direcciones para su uso n en redes privadas. Estas direcciones nos se van a enrutar a trav´s de Internet y se pueden utilizar sin e preocuparse de que vayan a tener conflictos con otras redes. Los rangos de direcciones privadas son: 10.0.0.0 - 10.255.255.255 192.168.0.0 - 192.68.255.255 172.16.0.0 - 172.31.255.255 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. a Podemos proporcionar esta capa adicional de protecci´n f´cilmente con IPTables utilizando el enmascao a rado 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´ el paquete de datos a su destino con o ıa una direcci´n IP de origen de la interfaz p´blica del cortafuegos. o u 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 e o o 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 o a o 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 o u convertirla en una interfaz DMZ para servidores con direcci´n p´blica. Existen libros completos sobre la o u configuraci´n avanzada de cortafuegos y muchas listas de correo. o Existen otros m´todos mas simples y r´pidos de crear un cortafuegos, sin introducir comandos y e a tener que recordar la sintaxis. Muchas herramientas crean las declaraciones del cortafuegos utilizando una interfaz gr´fica, es decir, de forma autom´tica. a a Para simplificar el m´todo utilizare el m´dulo Firewall para Webmin, basado en IPTables. e o

Jose Antonio Escart´ Vigo, Junio 2005. ın

204

Servidor Linux para conexiones seguras de una LAN a Internet

12.3.

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: o 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: o #apt-get install squid webmin-squid El fichero de configuraci´n del squid es: /etc/squid/squid.conf. Lo configuramos para permitir el o acceso del proxy a nuestra red interna: • En #ACCESS CONTROLS : acl redInterna src 192.168.1.0/255.255.255.0 • 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 e a o 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: o Cuadro 12.6: Ejemplo del archivo /etc/squid/squid.conf
#Sacado de http://debaser.ath.cx/deal/manuales/Limitar-ancho-de-banda-COMO/html/install.html #Todas las opciones de este archivo se encuentran muy bien documentadas en el #propio squid.conf asi #como en http://www.visolve.com/squidman/Configuration%20Guide.html #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 250 16 256 #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 192.168.1.0/255.255.255.0 acl localhost src 127.0.0.1/255.255.255.255 acl Safe_ports port 80 443 210 119 70 20 21 1025-65535 acl CONNECT method CONNECT acl all src 0.0.0.0/0.0.0.0

Jose Antonio Escart´ Vigo, Junio 2005. ın

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/20011122 #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 8080 3130 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 !192.168.1.1 #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 http://su-servidor-web/cgi-bin/cachemgr.cgi cache_mgr your@email 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 http://www.squid-cache.org #No queremos limitar las descargas en nuestra red local. acl magic_words1 url_regex -i 192.168 #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: 192.168 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/150000 son valores para la red al completo #5000/120000 son valores para la IP independiente #una vez los archivos descargados exceden los 150000 bytes, #(o el doble o el triple) #las descargas proseguiran a 5000 bytes/s delay_parameters 2 5000/150000 5000/120000 #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

Jose Antonio Escart´ Vigo, Junio 2005. ın

206

Servidor Linux para conexiones seguras de una LAN a Internet

12.4.

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 a a a dependiendo del uso pretendido de la m´quina. a Antes el fortalecimiento sol´ ser un proceso manual intensivo a medida que se probaban y testeaban ıa las posibles modificaciones. Sin embargo, en Linux, existen herramientas que realizar´n autom´ticamente a a 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 e o 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. a 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: www.bastille-linux.org. a o a

12.4.1.

Ejecuci´n o

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, u produciendo cortes de servicio o detenci´n del mismo. Cuando haya probado su efecto y verificado su o 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: o Perl 5.5 003 o superior Perl TK Module 8.00.23 o superior Perl Curses Module 1.06 o superior Para ejecutar Bastille linux: #/usr/sbin/bastille, . . . para el modo gr´fico. a #/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 Base tille autom´ticamente, sin hacer preguntas, desde un archivo de configuraci´n preasignado. cada vez que a o ejecutamos Bastille, se crea un archivo de configuraci´n. A continuaci´n podemos utilizarlo para ejecutar o o Bastille en otras m´quinas en modo no interactivo. Esta t´cnica es util para cerrar r´pidamente m´ltiples a e ´ a u m´quinas. Cuando disponga del archivo de configuraci´n con los elementos deseados, simplemente cargue a o Bastille en las m´quinas adicionales y copie el archivo de configuraci´n en dichas m´quinas (o deje que a o a 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. o o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 12. Herramientas de seguridad

207

12.4.2.

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 o a a 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 resa a pondemos negativamente, desconecta el servidor Samba, que permite a nuestra m´quina interactuar con a las m´quinas Windows. Samba podr´ introducir algunas brechas de seguridad potenciales en nuestro a ıa sistema, por lo que es recomendable desconectarlo si no lo necesitamos. Si tenemos que ejecutar algunos servidores (por ejemplo, SSH), intentar´ establecerlos con privilegios a limitados o utilizando un chrooted jail, es decir, si un servidor tiene que ejecutarse con acceso a la ra´ del ız 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. e A cada pregunta le acompa˜a una peque˜a explicaci´n de porqu´ esa configuraci´n es importante, n n o e o as´ podemos decidir si es apropiada para nuestra instalaci´n. Tambi´n existe un bot´n de detalle con ı o e o informaci´n adicional. o Bastille adopta la soluci´n de intentar educar al administrador mientras est´ cerrando el sistema. o a Cuanta m´s informaci´n tenga, mejor armado estar´ para los deberes de seguridad de su red. Si no a o a est´ seguro, puede saltarse una pregunta y volver a ella m´s adelante. No hay que preocuparse, se ofrece una a a oportunidad final para terminar todas las configuraciones. Tambi´n puede ejecutar Bastille posteriormente e despu´s de investigar sobre la respuesta y cambiar la configuraci´n. Otra ventaja es que Bastille nos ofrece e o una lista de “cosas para hacer” al final de la sesi´n de fortalecimiento para cualquier elemento del que o Bastille no se haya ocupado.

12.5.

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.

12.5.1.

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 a u 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 a u 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. o

Jose Antonio Escart´ Vigo, Junio 2005. ın

208

Servidor Linux para conexiones seguras de una LAN a Internet

12.5.2.

Mt

El programa mt proporciona controles simples para la unidad de cinta, como el rebobinado, expulsi´n o o la b´squeda de un archivo. En el contexto de las copias de seguridad, mt es muy util como mecanismo u ´ de rebobinado y b´squeda. u Todas las acciones de mt se especifican en la l´ ınea de comandos. El cuadro 12.7 muestra los par´metros a del comando. Cuadro 12.7: Opciones del comando mt, para manipular cintas de backup Par´metros a Descripci´n o -f <dispositivo> Especifica el dispositivo de cinta. fsf <cuenta> Avanza un n´mero (cuenta) de archivos. La cinta se coloca en el primer bloque u del archivo siguiente; por ejemplo, fsf 1 deber´ dejar la cabeza preparada para ıa 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. e 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). o unlock Desbloquea la puerta de la unidad (s´lo aplicable a ciertas unidades de cinta). o 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.

12.5.3.
dump

Dump y Restore

Las herramientas que utilizaremos ser´n dos: a

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 ultima vez que se realiz´ un dump con un nivel de dump menor. Por poner un ejemplo, si ´ o consideramos que tenemos tres dump: el primero de nivel 0, el segundo de nivel 1 y el tercero tambi´n e 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. o Este archivo lista cada copia de seguridad de un sistema de archivos, cu´ndo se hizo y de qu´ nivel. Dada a e esta informaci´n, podemos determinar que copia debemos restaurar. o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 12. Herramientas de seguridad En el cuadro 12.8 se muestran los par´metros m´s usuales del comando dump: a a

209

Par´metro a -n -b <tam_bloque>

-B <cuenta>

-f <archivo>

-u -d <densidad> -s <tam>

Cuadro 12.8: Par´metros del comando dump a Descripci´n o El nivel de dump, donde n es un n´mero entre 0 y 9. u Configura el tama˜o del bloque de dump a tam bloque, el cual se mide en kilobytes. n Si hacemos copias de archivos muy grandes, al usar un tama˜o de bloque mayor n aumentar´ el rendimiento. a Especifica el n´mero (cuenta) de registros por cinta. Si hay m´s datos sobre los que u a hacer dump, que espacio de cinta, dump muestra un s´ ımbolo del sistema pidiendo que se inserte una cinta nueva. Especifica una localizaci´n (archivo) para el archivo dump resultado. Podemos o hacer el archivo dump como un archivo normal que reside en otro sistema de archivos, o podemos escribirlo en un dispositivo de cinta. Actualiza el archivo /etc/dumpdates despu´s de un dump con ´xito. e e La densidad de una cinta en bits por pulgada. El tama˜o (tam) de la cinta en pies. n

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 e 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 o 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 e o de ellos). Durante mis estudios en la FIB (Facultad de Inform´tica de Barcelona) coincid´ con varios profesores a ı 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 o 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 a o DVDs grabables. Primero tenemos que decidir sobre qu´ sistemas de archivos vamos a hacer la copia, e est´ informaci´n est´ en el archivo /etc/fstab. a o a 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 | #dump -Ouf - /dev/hda3 | #dump -Ouf - /dev/hda5 | #dump -Ouf - /dev/hda6 | #mt -f /dev/nst0 rewind #mt -f /dev/nst0 eject gzip gzip gzip gzip --fast --fast --fast --fast -c -c -c -c > > > > /dev/st0 /dev/st0 /dev/st0 /dev/st0

Jose Antonio Escart´ Vigo, Junio 2005. ın

210 Uso de restore

Servidor Linux para conexiones seguras de una LAN a Internet

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. e El cuadro 12.9 muestra las opciones de l´ ınea de comandos de la utilidad restore. Cuadro 12.9: Opciones del comando RESTORE Descripci´n o Activa el modo interactivo de restore. La utilidad leer´ el contenido del directorio a de la cinta y nos dar´ una interfaz parecida a la shell en la cual nos podemos mover a entre los directorios y se˜alar los archivos que queramos, restore ir´ al dump y los n a restaurar´. Este modo es util para recuperar archivos individuales, especialmente a ´ si no est´mos seguro en qu´ directorio est´n. a e a 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´ y restaurar todos los archivos y directorios del archivo dump. ıo Configura el tama˜o del bloque de dump a tam bloque kilobytes. Si no proporciona n esta informaci´n, restore se la pedir´. o a Lee un dump del archivo nom archivo. Especifica el espacio de trabajo temporal (directorio) para el restore. Por defecto es /tmp. La opci´n verbal; muestra cada paso del restore. o En el caso de un error, reintenta autom´ticamente en lugar de preguntar al usuario a si quiere probar de nuevo.

Opci´n o -i

-r

-b tam_bloque -f nom_archivo -T directorio -v -y

Un restore t´ ıpico podr´ ser el siguiente: ıa #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. o e 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/st0

12.5.4.

Configuraci´n gr´fica de backups, interfaz Webmin o a

Para realizar de una forma mucho m´s simple las copias de seguridad, podemos utilizar la herramienta a de configuraci´n por web: Webmin. o Para instalar el m´dulo de copias de seguridad ejecutaremos un apt: o #apt-get install webmin-fsdump Este m´dulo permite hacer backups de: o Sistemas EXT2 Sistemas EXT3 Archivos TAR

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 12. Herramientas de seguridad

211

Figura 12.1: M´dulo Webmin para realizar Backups del sistema o

12.5.5.

K3B: Grabaci´n de CDs y DVDs o

Si queremos guardar las copias en CDs o DVDs, nos resultar´ muy util una interfaz gr´fica simple e a ´ a 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

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13

Sistemas de detecci´n de intrusiones o
Los Sistemas de detecci´n de intrusiones (IDS, Intrusion Detection System) son b´sicamente sniffers o a modificados que pueden ver todo el tr´fico de la red e intentan detectar un tr´fico potencialmente da˜ino, a a n alert´ndonos de ello cuando aparezca. a La forma principal de conseguirlo es examinando el tr´fico de entrada e intent´ndolo comparar con a a una base de datos de actividades da˜inas conocidas denominadas firmas. Esta utilizaci´n de las firmas es n o muy similar a la forma en que funcionan los programas antivirus. La mayor´ de los tipos de ataques tienen una apariencia muy distintiva a nivel TCP/IP. Un IDS puede ıa definir ataques bas´ndose en las direcciones IP, los n´meros de puertos, el contenido y cualquier n´mero a u u de criterios. Existe otra forma de realizar una detecci´n de intrusi´n en el nivel del sistema comprobando la inteo o gridad de los archivos clave y asegur´ndose de que no se ha realizado ning´n cambio en dichos archivos. a u Tambi´n existen otras tecnolog´ emergentes que combinan el concepto de detecci´n de intrusi´n y e ıas o o cortafuegos o realizan una acci´n posterior m´s all´ de la pura detecci´n. o a a o Esta secci´n esta basada en el libro [How05]. o

13.1.

Tipos de IDS

Existen tres tipos diferenciados de IDS: NIDS: IDS de red, basado en firmas IDS basado en actividad an´mala o IPS: IDS que responde a las alertas con acciones autom´ticas a En las siguientes secciones se explican en detalle.

13.1.1.

NIDS (Network Intrusion Detection System)

Un sistema detecci´n de intrusi´n de red (NIDS, Network Intrusion Detection System) puede protegero o nos contra los ataques que entran a trav´s del cortafuegos hasta la LAN Interna. Los cortafuegos pueden e estar mal configurados, permitiendo la introducci´n de tr´fico no deseado en nuestra red. Incluso cuando o a funcionan correctamente, los cortafuegos normalmente dejan pasar alg´n tr´fico de aplicaci´n que puede u a o ser peligroso. Lo que llega a los puertos del cortafuegos, y est´ permitido por las reglas, se env´ a los a ıa servidores internos provocando un tr´fico potencialmente da˜ino. Un NIDS puede comprobar dicho tr´fico a n a y marcar los paquetes sospechosos. Configurado correctamente puede hacer una doble comprobaci´n de las o reglas de nuestro cortafuegos y proporcionarnos una protecci´n adicional para los servidores de aplicaci´n. o o Aunque es util 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 a ataques externos, sin embargo, cuando el atacante se encuentra en la red local puede hacer muy poco.

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. o a 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´ o a ısticas demuestran que un setenta por ciento de los incidentes en cr´ ımenes inform´ticos provienen de un origen interno. Por mucho a que nos guste pensar que nuestros compa˜eros no van a hacer nada para da˜arnos, a veces no es el caso, n n los intrusos internos no siempre son piratas inform´ticos que trabajan por la noche. Pueden ser desde a un administrador de sistemas contrariado, un empleado descuidado o hasta la se˜ora de la limpieza. El n simple hecho de descargar un archivo o de abrir un archivo adjunto de un mensaje de correo electr´nico o puede cargar un troyano que crear´ toda una brecha en nuestro cortafuegos para todo tipo de fechor´ a ı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.

13.1.2.

IDS (Detecci´n de actividades an´malas) o o

En lugar de utilizar firmas est´ticas, que s´lo pueden captar una actividad da˜ina cuando se define a o n expl´ ıcitamente, estos sistemas de nueva generaci´n registran los niveles normales para distintos tipos de o actividad en nuestra red. Si observa una s´bita oleada de tr´fico FTP, nos avisar´. El problema con este u a a tipo de sistemas es que son muy propensos a los falsos positivos, ´stos se producen cuando se dispara una e alerta aunque la actividad que est´ marcando es normal y permitida en nuestra LAN, por ejemplo una a persona que est´ descargando un archivo particularmente grande activar´ la alarma. a a As´ mismo se tarda mucho en que un IDS de detecci´n de anomal´ desarrolle un modelo preciso de ı o ıas la red. Al principio, el sistema generar´ tantas alertas que es casi in´til. a u Adicionalmente, estos tipos de sistemas de detecci´n de intrusi´n pueden ser enga˜ados por alguien que o o n conozca bien la red. Si los piratas inform´ticos son suficientemente furtivos y h´biles utilizar´n protocolos a a a usados en nuestra LAN y no activar´n este tipo de sistemas. a Sin embargo, una gran ventaja es que no tiene que actualizar firmas continuamente. A medida que esta tecnolog´ madure y se haga m´s inteligente, probablemente se convierta en una forma muy popular ıa a de detectar intrusiones. Un ejemplo de IDS basado en actividades an´malas y de libre distribuci´n es Spade, un m´dulo gratuito o o o para el NIDS Snort.

13.1.3.

IPS (Intrusion Prevention System)

Un nuevo tipo de NIDS denominado Sistema de prevenci´n de intrusi´n (IPS, Intrusion Prevention o o System) se est´ publicitando como la soluci´n para la seguridad de las empresas. Este tipo de sistemas a o responder´n a las alertas a medida que se generen. Esto puede realizarse trabajando con un cortafuegos o a 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´ se encuentra en una constante evoluci´n, todav´ est´ muy lejos de poder ıa o ıa a proporcionar el an´lisis y el juicio de una persona. El hecho es que cualquier sistema que dependa al cien a por cien de una m´quina y de su software, tarde o temprano podr´ ser burlado por alg´n intruso. a a u Un ejemplo de IPS de libre distribuci´n es Inline Snort de Jed Haile, un m´dulo gratuito para el NIDS o o Snort.

13.2.

Ubicaci´n del NIDS o

Para elegir la ubicaci´n del NIDS hay que valorar el grado de interoperabilidad con el resto de nuestras o protecciones de red. Existen varias posibilidades y cada una tiene distintas ventajas e inconvenientes.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o 1.

215

En la red LAN local, detr´s del cortafuegos: Es el lugar m´s com´n, ofrece la mejor protecci´n frente a a u o 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 e 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 a a debemos estar preparados para realizar muchos ajustes en este ´rea. As´ mismo, si nos encontramos a ı 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. a

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 repreu a sentan recursos valiosos, es buena idea supervisarlos con un IDS. El problema de esta configuraci´n o es ordenar todas las alertas. Aunque todas ellas puedan ser alertas v´lidas, con el nivel de ataque de a tr´fico general actual en Internet, cualquier IP p´blica es atacada de forma aleatoria todos los d´ a u ıas. Reaccionar ante ello intentando localizar dichas alertas ser´ excesivo y contraproducente. ıa Por lo tanto, ¿c´mo podemos saber qu´ alertas son s´lo gusanos que est´n atacando a nuestro o e o a servidor y qu´ alertas est´n realmente avis´ndonos de un intruso real?. Una forma de hacerlo es e a a reduciendo el n´mero de firmas a un peque˜o n´mero que s´lo se activen si el host est´ realmente u n u o a comprometido, por ejemplo, reglas espec´ ıficas a las aplicaciones que se est´n ejecutando en el host, a como MySQL.rules, web-iis.rules o reglas relacionadas con la administraci´n de conexiones. o

3.

Entre el ISP y el cortafuegos: Esta configuraci´n filtrar´ todo el tr´fico entrante y saliente de la o a a LAN y DMZ. Lo bueno es que capturar´ todos los ataques tanto a los servidores p´blicos como a a u la LAN interna. Lo malo es que no podr´mos ver ning´n tr´fico interno y el volumen general de las e u a alertas puede ser bastante alto, debido al tr´fico de ataque general subyacente. a Igual que en el ejemplo anterior, se puede probar a reducir las alertas y dejar s´lo las que realmente o van a mostrar alg´n problema para este segmento. As´ mismo, al situarlo entre el sensor ISP y el u ı cortafuegos, puede crear un cuello de botella y un punto de errores para nuestro tr´fico de red. a

Todas las formas puede ser v´lidas para utilizar un IDS y no hay raz´n para que no podamos seguir a o las tres, siempre que tengamos el hardware y el tiempo necesario para hacerlo.

13.3.

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 o o muchos falsos positivos. Un falso positivo se produce cuando el sistema genera una alerta bas´ndose a en lo que cree que es una actividad da˜ina o sospechosa pero en realidad es un tr´fico normal en esa n a LAN. Generalmente, cuando establecemos un NIDS con sus configuraciones predeterminadas, va a buscar todo lo que sea ligeramente inusual. La mayor´ de los sistemas de detecci´n de intrusi´n de red tienen ıa o o 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 a incluyen todo. Existen otras muchas fuentes de falsos positivos, dependiendo de la configuraci´n de nuestra red y o de su nivel de actividad. Un NIDS con una instalaci´n predeterminada puede generar cientos de falsos o positivos en un solo d´ algo que puede conducir a un sensaci´n de desesperaci´n en el administrador ıa, o o del sistema. La reacci´n normal, es que las alertas de estos sistemas se ignoran a menudo debido a su o falta de eficacia. Sin embargo, con poco esfuerzo y utilizando las t´cnicas descritas en este cap´ e ıtulo un IDS puede convertirse en una herramienta util, en lugar de en la versi´n electr´nica de la ni˜a del exorcista. ´ o o n Las causas m´s comunes de los falsos positivos se describen en los siguientes apartados. a
Jose Antonio Escart´ Vigo, Junio 2005. ın

216

Servidor Linux para conexiones seguras de una LAN a Internet

Actividad del sistema de supervisi´n de red o
Muchas empresas utilizan sistemas de supervisi´n de redes (NMS, Network Monitorig System) como o 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 u e utilizar pings y pruebas m´s intrusivas. De forma predeterminada, la mayor´ de los sistemas de detecci´n a ıa o considerar´n hostil esta actividad, o al menos, sospechosa. Un NMS en una red grande puede generar a 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 e 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 a
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. a Estos programas est´n dise˜ados para hacer exactamente lo que hacen los piratas inform´ticos. De hecho, a n a probablemente exista una alerta para la mayor´ de los complementos del programa Nessus. Una vez m´s, ıa a podemos deshabilitar el informe de la direcci´n IP de nuestro servidor Nessus o Nmap dentro del NIDS. o Una mejor manera de controlar esta situaci´n es apagar nuestro IDS durante los escaneados programados. o As´ la IP del esc´ner seguir´ protegida contra un ataque cuando no est´ escaneando y nuestra base de ı, a a e datos de alertas no se cargar´ con datos de nuestra actividad de escaneado. a

Actividad de usuario
La mayor´ de los sistemas de detecci´n de intrusi´n de redes se configuran para marcar diversas ıa o o actividades de usuario peligrosas, como compartir archivos punto a punto, mensajer´ instant´nea, etc. ıa a 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. a ´ Este ser´ un buen momento para imponer o crear pol´ ıa ıticas contra su utilizaci´n ya que podemos o demostrar cu´nto ancho de banda y tiempo consumen, sin mencionar las implicaciones de seguridad. a 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´ en masa de mensajes de correo electr´nico. o a ıo o Estas actividades las puede detectar un NIDS, sin embargo, estas firmas tambi´n pueden ser activadas e 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. a n

Cadenas largas de autenticaci´n b´sica o a
Este tipo de alerta busca las cadenas de registro web largas, algunos ataques utilizan este m´todo para e conseguir un desbordamiento de memoria y obtener acceso al sistema. Sin embargo, hoy en d´ muchas webs llenan este campo de informaci´n. Aunque, si desactivamos la ıa, o regla para evitar falsos positivos, puede viajar c´digo da˜ino por nuestra red y pasar inadvertido para el o n NIDS.

Actividad de autenticaci´n de base de datos o
Algunos sistemas de detecci´n de intrusi´n de red buscan actividades administrativas sobre bases de o o datos. La teor´ es que el uso de bases de datos no deber´ de tener demasiada actividad administrativa ıa ıa en curso y ello podr´ ser se˜al de que alguien est´n intentando sabotearla. Sin embargo, muchas bases ıa n a
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o

217

de datos tienen trabajos en proceso y mucha actividad administrativa incluso si no se est´n consultando. a Esta actividad, aunque leg´ ıtima, generar´ muchas de estas alertas. a Si nuestras bases de datos est´n en constante desarrollo, probablemente deberemos desactivar dichas a alertas, al menos hasta que se estabilicen y tengan un uso normal.

13.4.

Obtener lo m´ximo del IDS a

Para darnos cuenta del verdadero potencial de un sistema de detecci´n de intrusi´n necesitaremos o o seguir unas pautas antes y despu´s de la instalaci´n. e o

13.4.1.

Configuraci´n apropiada del sistema o

Si simplemente instalamos un IDS y lo activamos con una configuraci´n predeterminada, r´pidamente o a nos inundar´n miles de alertas de falsos positivos. Podemos ajustarlo despu´s de estar activo, pero nos a e ahorraremos mucho tiempo y esfuerzo configur´ndolo cuidadosamente de antemano. No debemos confora marnos con las configuraciones por defecto, hay que ajustarlas al perfil de nuestra LAN. La mayor´ de los sistemas de detecci´n agrupan las alertas en categor´ Es preciso examinar cada ıa o ıas. 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 u que buscan la utilizaci´n de mensajer´ instant´nea o la utilizaci´n de software punto a punto. Si ya o ıa a o 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´ de las alertas basadas en Windows, pero existir´n algunas irrelevantes para nuestra red o que ıa a causen falsos positivos, esas las podemos desactivar. Tambi´n podemos excluir algunos hosts del examen. Si efectuamos desde una m´quina constantes e a sondeos SNMP por nuestra red o frecuentemente estamos iniciando sesi´n como administrador remoto, o generaremos alertas que no merece la pena proteger. Aunque reduzcamos el nivel de protecci´n proporcionado y podamos dejar sin protecci´n alguna m´quio o a na cr´ ıtica, podemos hacer el IDS m´s efectivo y merecer´ la pena asumir ese riesgo. Tardar algunas horas a a en configurar nuestro sistema antes de activarlo puede ahorrarnos mucho tiempo y frustraci´n en el futuro. o Si vamos a ejecutar un IDS es mejor que nos tomemos el tiempo necesario para hacerlo funcionar correctamente.

13.4.2.

Ajuste del IDS

Cuando ya se est´ ejecutando, incluso el IDS m´s meticulosamente configurado empezar´ a generar a a a 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 a u que est´ produciendo el IDS. a Tambi´n nos proporcionar´ un conocimiento de c´mo est´ trabajando nuestra red y del tipo de tr´fico e a o a a que se est´ revisando, algo util para cualquier administrador de redes. a ´ 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 a m´s dificultades. En general, se tardan algunos meses antes de que un IDS est´ ajustado correctamente a e para enviar alertas utiles sobre una actividad procesable. ´

13.4.3.

Herramientas de an´lisis IDS a

Los sistemas de detecci´n normalmente ofrecen a los administradores varios m´todos de notificaci´n o e o de una alerta. En su nivel m´s b´sico, las alertas pueden simplemente enviarse a un archivo de registro para una a a revisi´n posterior, algo que no es muy recomendable ya que requiere que el administrador revise o los registros. Si no se supervisan diariamente, pueden pasar d´ o semanas antes de descubrir los ıas intentos de intrusi´n. o
Jose Antonio Escart´ Vigo, Junio 2005. ın

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 o a siempre que se genere una alerta. Sin embargo, incluso en un sistema bien ajustado, puede ser molesto recibir correos varias veces al d´ As´ mismo, las alertas de correo electr´nico no estar´n en ıa. ı o a 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 o an´lisis m´s profundo. Existe una herramienta de libre distribuci´n para los sistemas de detecci´n a a o o de intrusiones denominada Analysis Console for Intrusion Database (ACIDlab, v´ase secci´n 13.8). e o

13.5.

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 a 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 o o realizar una detecci´n de actividad de anomal´ Existen tambi´n otros m´dulos de complemento como o ıas. e o 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: a o o http://www.snort.org O consultar la informaci´n que podemos obtener en nuestro sistema Debian: o #apt-get install snort-doc

13.5.1.

Caracter´ ısticas b´sicas a

Libre distribuci´n: Snort es de libre distribuci´n y portable a casi cualquier sistema operativo o o Unix/Linux. Tambi´n existen versiones disponibles para Windows y otros sistemas operativos. e Ligero: Debido a que el c´digo se ejecuta de una forma eficiente, no requiere mucho hardware, lo o que permite poder analizar tr´fico en una red de 100 Mbps a una velocidad cercana al cable, algo a bastante incre´ si pensamos lo que hace con cada paquete. ıble Snort personaliza reglas: Snort ofrece una forma f´cil para ampliar y personalizar el programa esa cribiendo nuestras propias reglas o firmas. Existe mucha documentaci´n que puede ayudarnos a o aprender a hacer reglas (v´ase secci´n 13.5.9), sin mencionar la cantidad de foros sobre el tema. e o

13.5.2.

Instalaci´n o

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 o /etc/snort/snort.<host>.conf: Archivo de configuraci´n para el host o /etc/snort/snort.<dispositivo>.conf : Archivo de configuraci´n para un dispositivo de red concreto o /etc/snort/rules/* : Archivos de reglas

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o

219

13.5.3.

Modos de ejecuci´n o

Snort se ejecuta desde la l´ ınea de comandos, en tres modos diferentes: Sniffer de red Registro de paquetes IDS La mayor´ de los usuarios lo ejecutaran en este ultimo modo para obtener las ventajas de IDS, pero ıa ´ tambi´n hay usos para los dos primeros modos. e Modo de sniffer de paquetes En este modo, Snort act´a como un sniffer, mostrando el contenido sin filtrar en el cable. Evidenteu mente. Si lo unico que necesitamos es un sniffer podr´ ´ ıamos utilizar Tcpdump o Ethereal (m´s completos). a Sin embargo, el modo sniffer de paquetes es bueno para asegurarse de que todo funciona correctamente y Snort esta viendo los paquetes. En este modo tenemos las siguientes opciones: Opci´n o -v -d -e Descripci´n o Imprime en la pantalla los encabezados de los paquetes TCP/IP en Ethernet Igual que la opci´n anterior pero adem´s imprime los datos de la capa de aplicaci´n o a o Igual que la opci´n anterior pero adem´s imprime la capa de enlace de datos o a

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. o La siguiente salida, es una conexi´n a una p´gina web desde el servidor: o a
#snort -v Running in packet dump mode Initializing Network Interface eth0 --== Initializing Snort ==-Initializing Output Plugins! Decoding Ethernet on interface eth0 --== Initialization Complete ==-,,_ o" )~ ’’’’ -*> Snort! <*Version 2.3.2 (Build 12) By Martin Roesch & The Snort Team: http://www.snort.org/team.html (C) Copyright 1998-2004 Sourcefire Inc., et al.

06/09-13:09:39.402225 195.149.189.15:80 -> 192.168.0.11: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: 217975842 8827642 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 06/09-13:09:39.442220 192.168.0.11:3516 -> 195.149.189.15: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: 8837681 217975842 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 06/09-13:09:43.433979 192.168.0.11:3516 -> 195.149.189.15: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: 8841673 217975842 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 06/09-13:09:43.819445 195.149.189.15:80 -> 192.168.0.11: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: 217976284 8841673 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ .......................................................................... ..........................................................................

Jose Antonio Escart´ Vigo, Junio 2005. ın

220

Servidor Linux para conexiones seguras de una LAN a Internet

========================================================================== Snort received 263 packets Analyzed: 263(100.000%) 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 o a ejecutamos con los mismos comandos que en el modo sniffer de paquetes, pero a˜adiendo un modificador n 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 a o crea un directorio independiente para cada IP registrada. Si estamos registrando tr´fico en una red local a grande con muchas direcciones, esto puede escaparse r´pidamente a nuestro control. a Podemos utilizar otra configuraci´n para indicarle a Snort que registre los paquetes de la LAN en la o que se encuentra con el comando: -h homenet, donde homenet es el rango de direcciones IP en la notaci´n o de barra inclinada. Esto hace que Snort coloque las direcciones bas´ndose en la direcci´n IP del paquete a o externo a la LAN, para poder ver con m´s facilidad el tr´fico ajeno a la red. Si tanto los anfitriones de a a destino como de origen son locales, Snort los coloca en el directorio con el n´mero de puerto superior, u aparentemente para recoger el host de conexi´n sobre el host servidor. o Snort utiliza la direcci´n de origen como nombre del directorio en el que se colocar´n los datos de los o a paquetes, cuando registramos alertas de intrusi´n es importante saber con facilidad de d´nde est´ provio o a niendo el tr´fico de alertas marcado. a Por lo tanto, el comando para el modo de registro de paquetes ser´: a #snort -vde -l /var/log/snort -h 192.168.0.0/24 Esta declaraci´n especifica una red interna en el rango comprendido entre 192.168.0.1 y 192.168.0.254. o Tambi´n podemos utilizar la opci´n: -b para registrar todos los datos en un solo archivo binario, e o 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 ı a archivos secuencialmente en un gran archivo. Este m´todo es mucho m´s r´pido para registrar redes de e a a muchos registros o si Snort funciona en un m´quina lenta. Tambi´n facilita el an´lisis con herramientas a e a m´s complejas, algo necesario si vamos a buscar sobre una gran cantidad de datos de red capturados. a Modo de detecci´n de intrusi´n (IDS) o o Este modo lo utiliza Snort para registrar paquetes sospechosos o que merecen una consideraci´n eso pecial. S´lo necesitamos un modificador adicional a la declaraci´n anterior para que Snort entre en este o o modo. El modificador: -c configfile, le indica a Snort que utilice un archivo de configuraci´n para dirigir o los paquetes que registra. Este archivo determina la configuraci´n de Snort, se incluye un archivo predeo
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o 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 192.168.0.0/24 -c /etc/snort/snort.conf

221

Ejecutaremos Snort en modo IDS utilizando el archivo de configuraci´n snort.conf predeterminado. o 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 e 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. a e Si omitimos el modificador -l, Snort de forma predeterminada utilizar´ /var/log/snort como su directorio a de registro. Tambi´n podemos utilizar el modificador -b si deseamos registrar un archivo binario para un e an´lisis posterior con un programa independiente. a El comando para ejecutar Snort en el modo IDS es: #snort -h 192.168.0.0/24 -c /etc/snort/snort.conf

13.5.4.

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 Descripci´n o Informaci´n completa de la alerta, incluyendo datos de aplicaci´n. Es el modo predeo o terminado de alerta y se utilizar´ cuando no especifiquemos nada. a Modo r´pido. Registra s´lo la informaci´n de encabezado del paquete y el tipo de a o o alerta. Es util para redes muy r´pidas pero si se necesita m´s informaci´n forense hay ´ a a o que utilizar el modificador full. Reenv´ la alerta a un socket ıa Desactiva las alertas.

Opci´n o -A full -A fast

-A unsock -A none

Tambi´n podemos utilizar las opciones, Syslog, SMB y opciones de salida de bases de datos. Estas e opciones no utilizan el modificador -A desde la l´ ınea de comandos sino m´dulos de salida independientes o ´ que ofrecen una variedad m´s amplia de opciones de salida. Estas deben configurarse en el tiempo de a compilaci´n con modificadores a˜adidos a la declaraci´n de configuraci´n. o n o o SMB : Env´ las alertas al servicio de men´ emergente de Windows. Para esta opci´n hay que ıa u o descargar las fuentes y compilarlas con la opci´n enable-smbalerts. o Para ejecutar Snort con esta configuraci´n: #snort -c /etc/snort/snort.conf -M workstations o Donde workstations es el nombre del host Windows al que se env´ las alertas. ıan Syslog: Env´ alertas al servidor Syslog de Unix. Este es un servicio, que captura y guardar archivos ıa de registro, lo que nos ayudar´ a consolidar registros de red en un lugar unico. Este servicio dificulta a ´ a un intruso borrar los rastros de la intrusi´n. Podemos especificar los formatos Syslog dentro del o archivo de configuraci´n y enviar ah´ las alertas incluyendo el modificador -s. o ı 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 o a archivo de configuraci´n y en tiempo de compilaci´n. o o
Jose Antonio Escart´ Vigo, Junio 2005. ın

222

Servidor Linux para conexiones seguras de una LAN a Internet

13.5.5.

Optimizar la configuraci´n o

Ahora que ya sabemos c´mo funciona Snort y conocemos los comandos b´sicos, tendr´mos que editar o a e el archivo de configuraci´n para convertirlo en un IDS fiable y obtener los resultados deseados. Muchas o l´ ıneas del archivo contienen informaci´n util para aclarar cada una de las partes de la configuraci´n. o ´ o Para definir el archivo de configuraci´n seguiremos los siguientes pasos: o 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: o 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 u a un nombre de interfaz y utilizar la direcci´n IP y la m´scara de red asignada a dicha interfaz como o a 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. a Tambi´n podemos definir nuestras redes externas con una declaraci´n similar a HOME NET, reeme o plaz´ndola por EXTERNAL NET. La entrada predeterminada para ambas variables es any. Es a 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 sero vidores de red, incluyendo web, mail, dns, telnet, . . . As´ limitaremos los falsos positivos para los ı, servicios en esas m´quinas. a Tambi´n podemos especificar los n´meros de puertos para dichos servicios, entonces si nuestros e u usuarios usan ese puerto, no se registrar´ ninguna alerta. Todas estas opciones de configuraci´n a o pueden ayudarnos a reducir el n´mero de falsos positivos que obtenemos y alertarnos s´lo con u o informaci´n que tiene valor real. o 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. o Estas rutinas se ejecutan en el tr´fico antes de pasar por ning´n conjunto de reglas, normalmente a u para formatearlas correctamente o para tratar con un tipo determinado de tr´fico que sea m´s f´cil de a a a procesar directamente en lugar de utilizar los conjuntos de reglas. Un ejemplo de este tipo de tr´fico a ser´ los paquetes fragmentados-defragmentados. Muchos ataques intentan ocultar su verdadera ıan naturaleza fragmentando los paquetes, en esos casos, esta opci´n es muy valiosa. o Otro decodificador es para los paquetes de escaneado de puertos. Como ´stos suelen entrar en grupos e 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. a o 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 o para controlar las salidas de Snort. Como ya hemos visto anteriormente, existen varios m´dulos de o 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 o e otros programas.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o El formato general para configurar los m´dulos de salida es: o output module_name: configuration options

223

Siendo module name bien alert syslog, database o alert unified dependiendo del m´dulo que cargueo mos. Las opciones de configuraci´n para cada m´dulo de salida son las siguientes: o o 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. o 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 a nombre de usuario v´lido en la base de datos y password por la contrase˜a asociada al usuario. a n La variable dbname identifica el nombre de la base de datos en la que se va a realizar el registro. Por ultimo, database address es la direcci´n IP del servidor que contiene la base de datos. ´ o 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. a Los dos argumentos adminitidos son filename y limit: output alert_unified: filename snort.alert, limit 128 5. Personalizamos los conjuntos de reglas: El archivo snort.conf permite a˜adir o eliminar clases enteras n de reglas. En la parte final del archivo podremos ver todos los conjuntos de reglas de alertas. Podemos desactivar toda una categor´ de reglas comentando la l´ ıa ınea. Por ejemplo, podr´ ıamos desactivar todas las reglas icmp-info para reducir los falsos positivos del tr´fico ping o todas las a reglas NetBIOS si no tenemos m´quinas Windows en nuestra red. Tambi´n podemos encontrar a e disponibles conjuntos de reglas que se han ajustado para entornos espec´ ıficos.

13.5.6.

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 a a a sistema, esto lo podemos hacer entrando en la configuraci´n de Snort. El directorio /etc/snort/rules/ o contiene muchos archivos con la extensi´n .rules, cada uno de ellos contiene las reglas agrupadas por o categor´ ıa. Podemos deshabilitar toda una clase de reglas coment´ndola en el archivo de configuraci´n o podemos a o deshabilitar reglas individuales si queremos la protecci´n del resto de reglas de la clase. Para comentar o 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. e o En el cuadro 13.2 podemos observar una lista con las clases de reglas m´s habituales en Snort y una a peque˜a descripci´n de las mismas. n o

Jose Antonio Escart´ Vigo, Junio 2005. ın

224

Servidor Linux para conexiones seguras de una LAN a Internet

Cuadro 13.2: Clases de reglas de Snort (I) Clase de reglas Descripci´n o attack-response.rules Son las alertas para paquetes de respuesta comunes despu´s de que un atae que haya tenido ´xito. Raramente se informan como falsos positivos y dee bemos dejarlas activadas en la mayor´ de los casos. ıa backdoor.rules Estas reglas son signos comunes de una puerta trasera o de un programa troyano en uso. Raramente son falsos positivos. bad-traffic.rules Estas reglas representan el tr´fico de red no est´ndar que normalmente no a a deber´ verse en la mayor´ de las redes. ıa ıa chat.rules Localizan transmisiones est´ndar para muchos programas conocidos de cona versaci´n. Si la conversaci´n se permite impl´ o o ı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 o no detectar´n todos los tipos de tr´fico de conversaciones. a a ddos.rules Busca tipos de ataques de denegaci´n de servicio distribuido est´ndares. En o a 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 utiles dentro de una LAN para comprobar si tenemos una ´ m´quina zombi en otra red participando en un ataque de denegaci´n de a o servicio (DoS) sin saberlo. dns.rules Buscan algunos abusos est´ndar contra servidores DNS. Si no est´mos ejea a cutando un servidor DNS propio, podemos desactivarlas. dos.rules Similar al conjunto de reglas anterior. experimental.rules Est´n deshabilitadas de forma predeterminada. Generalmente se utilizan a s´lo para probar nuevas reglas hasta que se desplazan a otra categor´ o ıa. exploit.rules Estas reglas son para el tr´fico de abuso est´ndar, siempre habilitadas. a a finger.rules Estas reglas marcan el tr´fico que tiene que ver con los servidores finger. Si a no est´mos ejecutando ninguno de estos servidores, las podemos deshabilia tar. 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. ftp.rules Igual que las reglas anteriores pero buscan abusos de FTP. Una vez m´s, a podemos dejarlas habilitadas aunque no tengamos servidores FTP ya que nos avisar´n de cualquier servidor FTP ilegal en el sistema. a icmp-info.rules 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 a en nuestra red. Otra clase de tr´fico ICMP da˜ino conocido, icmp.rules, a n captura los escaneados de puertos y similares. icmp.rules Cubre el tr´fico ICMP sospechoso o da˜ino y es poco propenso a generar a n falsos positivos. Sin embargo, es posible que se activen en una red ocupada ejecutando muchos servicios de diagn´stico. o imap.rules Reglas correspondientes al uso del protocolo de acceso a mensajes desde internet (IMAP, Internet Message Access Protocol). info.rules Capturan mensajes de errores diversos: Web, FTP y otros servidores. local.rules En este archivo podemos a˜adir nuestras propias firmas o reglas personalin zadas para la red, el archivo est´ vac´ de forma predeterminada. a ıo misc.rules Reglas que no encajan en ninguna de las restantes categor´ ıas. multimedia.rules Registra el uso de software de v´ ıdeo. Si permitimos las aplicaciones de v´ ıdeo o utilizamos video-conferencia, debemos deshabilitar estas reglas.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o

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 o 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 ı a desarrollo, podr´ producirse muchos falsos positivos. ıan 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. o Tendr´mos que jugar con esta secci´n para deducir cu´les son las reglas e o a 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 u 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 a 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´ o ı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 o con la pornograf´ No constituyen ni mucho menos un reemplazo para los ıa. 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 o de c´digo y normalmente se utiliza en los troyanos y exploits. o 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´ o ıcita. Si utilizamos esc´neres de puertos, podemos desactivar Snort durante su ejecuci´n o a o deshabilitar esta regla en concreto para la IP donde se encuentra el esc´ner. a Esta clase busca paquetes que contienen c´digo de montaje, comandos de o bajo nivel tambi´n conocidos como c´digo shell. Estos comandos normale o mente forman parte integral de muchos exploits como los desbordamientos de memoria. Capturar al momento un c´digo shell es una buena indicaci´n o o de que se est´ produciendo un ataque. a 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 o a u correo normales activar´n reglas de esta secci´n. a o 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. a

Jose Antonio Escart´ Vigo, Junio 2005. ın

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 o 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 servia dores. 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. e 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 a 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 e 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 preocuparnos. 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. a

13.5.7.

Ejecutar como servicio del sistema

Si vamos a ejecutar Snort en un servidor que se va a utilizar las 24 horas del d´ siete d´ a la semana, ıa, ıas 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 n secuencia de comandos que ejecute Snort con los par´metros de l´ a ınea de comandos en las rutinas de inicio. Deberemos colocar el comando de arranque de Snort. Como por ejemplo: snort -h 192.168.0.0/24 -c /etc/snort/snort.conf & El signo de concatenaci´n & indica que se debe ejecutar Snort como un proceso en segundo plano. o

13.5.8.

Configuraci´n gr´fica de Snort, interfaz Webmin o a

Realizar toda la configuraci´n para Snort desde la l´ o ınea de comandos puede llegar a ser algo tedioso. Aunque todav´ no existe una interfaz gr´fica para Snort, existe un m´dulo para la conocida herramienıa a o ta de administraci´n web Webmin que nos permite realizar ajustes y configuraciones desde un servidor web. o Algunas de las ventajas de este sistema son: Acceso a los archivos de configuraci´n de Snort, basado en un formulario. o 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.
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o Soporte para ejecutar Snort como servicio utilizando archivos rc.d. Administraci´n remota segura a trav´s de SSL (si esta habilitado). o e

227

El m´dulo de Snort requiere la versi´n 0.87 de Webmin o superior. Instalaremos el m´dulo con apt: o o o #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 prino a e cipales del archivo de configuraci´n, las configuraciones del procesado previo y las opciones de inicio de o sesi´n en la parte superior de la ventana. Haga clic en cualquiera de las opciones de configuraci´n para o o introducir su informaci´n personal para que Webmin realice los cambios apropiados en los archivos de o Snort.

Figura 13.1: M´dulo Webmin de Snort o Todos los conjuntos de reglas aparecen en una lista, podemos ver cu´les est´n habilitados y cuales no. a a 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 a ı 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 u o exploit com´nes (VCE, Common Vulnerability or Exploit), podemos hacer clic en un hiperv´ u ınculo para abrir m´s detalles sobre lo que hace la alerta. En esta interfaz se puede ajustar el conjunto de alertas m´s a a f´cilmente. a Con el m´dulo Webmin Snort tambi´n podemos configurar usuarios para que puedan acceder a deo e terminadas configuraciones. Esto se realiza mediante el control de usuarios de Webmin, en la secci´n o
Jose Antonio Escart´ Vigo, Junio 2005. ın

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 aco ceder 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 o delegar las tareas diarias en usuarios con privilegios de administraci´n, a la vez que seguimos conservando o el control de la configuraci´n y los cambios. o

13.5.9.

Personalizar reglas

Aunque los conjuntos de reglas est´ndar incluidos en Snort proporcionan una protecci´n adecuada a o contra firmas de ataques conocidas, podemos dise˜ar algunas reglas personalizadas espec´ n ı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. o Vigilar determinados tipos de tr´fico que no pertenecen a nuestra propia red. a La escritura de reglas de Snort es f´cil de aprender y nos permite a˜adir funcionalidades al programa, a n sin muchos conocimientos de programaci´n. Como hemos podido comprobar, las reglas de Snort son o simplemente declaraciones de texto dentro de un archivo de reglas. Si deseamos que Snort busque un comportamiento unico que deber´ ser sospechoso en nuestra red, ´ ıa podemos codificar r´pidamente una regla y probar el resultado. El formato de una regla de Snort es b´sia a camente una sola l´ ınea de texto que empieza con una acci´n (normalmente alert) seguida por diversos o argumentos. Se pueden a˜adir multiples l´ n ıneas simplemente a˜adiendo una barra inclinada (/) al final n de cada l´ ınea. Tambi´n se puede llamar a otros programas utilizando una declaraci´n de inclusi´n para e o o obtener una regla m´s compleja. a En su forma b´sica, una regla de Snort consta de dos partes: a Un encabezado de regla Las opciones de la regla Aqu´ tenemos un ejemplo: ı alert tcp any any 192.168.0.0/24 / (content:"|00 05 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 e o acci´n (en este caso, alert), el protocolo y las direcciones de puertos de origen y destino. La acci´n es lo o o 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. o Ignora el paquete, es la acci´n predeterminada en paquetes que no coino ciden con la regla. Alertar y a continuaci´n activar una regla din´mica. o a Permanecer inactiva hasta que se active, a partir de entonces act´a como u una regla normal registro.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o

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, lisı o tada en la notaci´n de barra inclinada est´ndar para los rangos IP. Tambi´n podemos listar m´ltiples o a e u direcciones individuales y redes separ´ndolas con una coma, sin espacios y escribiendo la declaraci´n entre a o corchetes, por ejemplo: alert tcp any <> [192.168.0.2,192.168.0.5,192.168.0.10] 80 / (content:"|00 05 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 a o a 192.168.0.2, 192.168.0.5 y 192.168.0.10 en el puerto 80. Suponiendo que se tratan de nuestros servidores Web, la sentencia buscar´ el tr´fico entrante con los datos hexadecimales de la secci´n de contenido. ıa a o 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 encabea a u zado TCP/IP o buscar simplemente la cargar util del paquete. Despu´s de cada comando debemos incluir ´ e comillas y el valor que se est´ buscando. Podemos a˜adir m´ltiples opciones separ´ndolas con un punto y a n u a coma. El cuadro 13.5 contiene los comandos de opci´n v´lidos en la confecci´n de reglas. o a o

13.6.

Detecci´n de intrusiones en el host o

Hemos tratado con detalle la detecci´n de intrusiones basadas en redes (NIDS). Sin embargo, existen o otras formas de encontrar intentos de intrusi´n. o Un m´todo alternativo es buscar signos de intrusi´n en el propio sistema. Si se ha aprovechado un e o exploit en una m´quina, normalmente se alterar´n determinados archivos del sistema. Por ejemplo, puede a a cambiar el archivo de contrase˜as, pueden a˜adirse usuarios, pueden modificarse archivos de configuraci´n n n o del sistema o se pueden alterar los permisos de algunos archivos. Normalmente, estos archivos de sistema no deber´ cambiar mucho. Al buscar modificaciones podemos detectar una intrusi´n u otra actividad ıan o inusual. Este m´todo de detecci´n de intrusi´n puede ser mucho m´s preciso, produciendo menos falsos posie o o a tivos ya que no se activan a no ser que un sistema est´ realmente afectado. Algo m´s complicado es el e a 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: e o o 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: e o o 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 e e nos proporcionan un aviso previo.

Jose Antonio Escart´ Vigo, Junio 2005. ın

230

Servidor Linux para conexiones seguras de una LAN a Internet

Opci´n o 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 o Descripci´n o Proporciona la descripci´n del texto de una alerta. o Registra el paquete para un nombre de archivo espec´ ıfico de un usuario en lugar de para el archivo de salida est´ndar. a 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´ o o ıficos. Prueba los bits de fragmentaci´n del encabezado IP. o Prueba el tama˜o de carga util del paquete frente a un valor. n ´ Prueba los indicadores TCP para determinados valores. Prueba el campo de n´mero de secuencia TCP para un valor espec´ u ı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´ o ı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´ u ıfico. Busca un patr´n en la carga util del paquete. o ´ Busca un conjunto de patrones en la carga util del paquete. ´ Modificador para la opci´n de contenido. Establece la compensaci´n en el intento de o o coincidencia con el patr´n. o Modificador para la opci´n de contenido. Establece la profundidad de b´squeda para un o u intento de coincidencia con el patr´n. o Compara la cadena de contenido anterior sin tener en cuenta las may´sculas y las u min´sculas. u Descarga la informaci´n de la capa de aplicaci´n para una determinada sesi´n o o o Vigila los servicios RPC en b´squeda de determinadas llamadas de aplicaciones o proceu dimientos. 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. u o Identificador de clasificaci´n de regla. o Identificador de severidad de regla. Busca un patr´n en la parte URI del paquete. o 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. a Coincidencia de patr´n de caracteres comod´ o ın. Evaluaci´n num´rica. o e Obliga a que la coincidencia de patr´n relativa omita determinado n´mero de bytes en o u el paquete. Prueba num´rica del patr´n. e o Prueba num´rica del patr´n y ajuste de compensaci´n e o o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o

231

13.7.

Integridad de archivos: IDS Tripwire

Originalmente, Tripwire era de libre distribuci´n. Al final, los creadores fundaron una empresa para o venderlo y soportarlo comercialmente. Sin embargo, cogieron el c´digo base original y lo distribuyeron o con licencia GPL para que pudiera continuar su desarrollo en la comunidad de la libre distribuci´n. Esta o versi´n libre se ha ido actualizando desde su lanzamiento (versi´n 2.2.1). o o Ambas versiones funcionan creando una base de datos de atributos b´sicos, archivos importantes que a deseamos registrar para comprobar los atributos reales, en cualquier momento, frente a los atributos b´sicos. Con ello determinaremos si ha cambiado algo. a Uno de los trucos favoritos de los piratas inform´ticos, una vez introducidos en un sistema, es reemplaa zar 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 o e Tripwire durante una investigaci´n forense para descubrir d´nde ha estado un intruso, es como seguir las o o 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 e ´ introducirse. El archivo principal de pol´ ıticas es: /etc/tripwire/twpol.txt. Este 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, o 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 o a de propiedad, y representan las propiedades que est´ registrando Tripwire. a El cuadro 13.6 recoge la lista de los elementos que se pueden registrar para cada archivo y sus letras de c´digo. o Cuadro 13.6: M´scaras de propiedad de Tripwire a Letras de c´digo o a b c d g i l m n p s t u c h m s Atributos registrados ´ Ultimo 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 u Si se permite crecer el archivo Modificaci´n de la fecha y hora impresa o N´mero de enlaces al i-nodo u Leer/escribir/ejecutar permisos en el archivo Tama˜o del archivo n Tama˜o del tipo n ID de usuario del propietario del archivo C´digo CRC32 o C´digo Haval o C´digo MD5 o C´digo SHA/SHS o

Jose Antonio Escart´ Vigo, Junio 2005. ın

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 (-). a El formato para la declaraci´n de un archivo de pol´ o ı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´ que Tripwire nos notificase en cualquier momento, cu´ndo se produjo el ultimo acceso, la ıa a ´ fecha de creaci´n o modificaci´n, los permisos, la propiedad o el tama˜o del tipo de archivo, cambiado en o o n el archivo /etc/secreto.txt. Existen adem´s diversas m´scaras de propiedad predefinidas. En el cuadro 13.7 se incluyen dichas a a m´scaras plantilla y sus efectos. a Cuadro 13.7: M´scaras de propiedad de plantillas a M´scara de propiedad a $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 o de acceso estar´n continuamente cambiando cuando los programas los utilicen, pero no deseamos que el a contenido o el tama˜o cambien. Podemos utilizar $Growing para nuestros archivos de registro ya que est´n n a constantemente creciendo. El archivo de configuraci´n de pol´ o ıticas tambi´n define algunas variables que son combinaciones de las e configuraciones predeterminadadas anteriores con algunas adiciones o sustracciones, proporcion´ndonos a un establecimiento r´pido para las pol´ a ıticas de diversas clases de archivos. El siguiente c´digo muestra las variables contenidas en el archivo /etc/tripwire/twpol.txt: o
@@section GLOBAL TWBIN = /usr/sbin; TWETC = /etc/tripwire; TWVAR = /var/lib/tripwire; # # File System Definitions # @@section FS # # First, some # SEC_CRIT SEC_BIN SEC_CONFIG

variables to make configuration easier = $(IgnoreNone)-SHa ; = $(ReadOnly) ; = $(Dynamic) ;

# Critical files that cannot change # Binaries that should not change # 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 .......................................................................

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o

233

Debajo de las m´scaras de propiedad, se establecen las pol´ a ı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. e a Una vez hecho esto, ya estaremos preparados para ejecutar Tripwire.

Inicializar la base de datos b´sica a
El primer paso en la ejecuci´n de Tripwire es establecer la base de datos b´sica, creando as´ la lista o a ı 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 e 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 a 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. n Para que Tripwire sea realmente seguro, debemos hacer una copia de su base de datos b´sica en alg´n a u 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 o 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´ a u ıticas y devolver´ un informe con los cambios producidos. a 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-20050610-210613.twr

Tripwire(R) 2.3.0 Integrity Check Report Report generated by: Report created on: Database last updated on: root vie 10 jun 2005 21: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

Jose Antonio Escart´ Vigo, Junio 2005. ın

234

Servidor Linux para conexiones seguras de una LAN a Internet

=============================================================================== Rule Summary: =============================================================================== ------------------------------------------------------------------------------Section: Unix File System ------------------------------------------------------------------------------Rule Name --------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. Severity Level -------------100 Added ----0 Removed ------0 Modified -------0

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 o a no s´lo que se a˜adan nuevos archivos y directorios a la base de datos sino tambi´n que se eliminen los o n e 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 util. Podemos ı a ´ actualizar los directorios seleccionados despu´s de todo, algunos elementos como pueden ser los binarios e del sistema, cambiar´n en contadas ocasiones. a 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 a o a 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 ı a e supondr´ que la firma original es la correcta y no la actualizar´. Al salir, Tripwire ejecutar´ dichos cambios. a a a Tambi´n, podemos especificar -c en el comando para salir realizando la vista previa y dejar que Tripwire e 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 elia a minar o cambiar las m´scaras de propiedad. Para ello realizaremos los cambios necesarios en el archivo de a pol´ ıticas de Tripwire.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o

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 a introduzcamos la contrase˜a local y de site antes de actualizar la pol´ n ı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.

13.8.

ACIDlab: Analizar alertas IDS

La consola de an´lisis para bases de datos de alarmas de intrusi´n (ACID, Analysis Console for Ina o trusion Databases) es un programa dise˜ado para hacer un mejor uso de los dispositivos de detecci´n de n o intrusi´n. Esta es su p´gina oficial: o a http://acidlab.sourceforge.net/ La idea que se esconde detr´s de ACID es portar todos los datos de detecci´n de intrusi´n a una a o o 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 u 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 o 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 e 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: e #apt-get install snort-mysql Sustituir´ el antiguo Snort por otro que produzca las salidas en una base de datos MySQL. a Es muy recomendable instalar ACID en una m´quina independiente de Snort. Colocarlos en la misma a m´quina no s´lo es poco recomendable desde el punto de vista de la seguridad sino que adem´s inundar´ de a o a a 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 o
Este es el archivo de configuraci´n del sistema ACIDlab: o /etc/acidlab/acid_conf.php En la siguiente tabla se puede observar la descripci´n de las variables contenidas en el archivo: o

Jose Antonio Escart´ Vigo, Junio 2005. ın

236

Servidor Linux para conexiones seguras de una LAN a Internet

Cuadro 13.8: Variables de configuraci´n de ACID o Nombre de variable $DBtype $alert_dbname Descripci´n o Tipo de base de datos ACID que se va a utilizar. El valor predeterminado es mysql, pero tambi´n podemos establecer postgresql o mssql. e El IDS desde donde se est´n obteniendo las alarmas para ACID. Aca a tualmente 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 o a m´quina, ser´ localhost. Para una mejor seguridad y rendimiento, es a ıa recomendable ejecutar la base de datos en una m´quina distinta a la del a servidor web con PHP. Puerto sobre el que se accese a la base de datos. Si es local, s´lo debemos o 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 o La contrase˜a para el usuario de la base de datos. Una vez m´s, hay que n a asegurarse de que coincide con la contrase˜a MySQL para dicho usuario. n Nombre de la base de datos de Snort. El valor predeterminado es snort archive, a no ser que estemos guardando m´ltiples bases de dau tos en esta m´quina y deseemos escribir nombres m´s descriptivos a a Host donde se va a ubicar la base de datos de archivo. Si est´ en la a misma m´quina debe ser localhost. a Puerto para iniciar la sesi´n en el servidor de base de datos. Introducimos o “ ” si estamos iniciando la sesi´n localmente. o 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 n 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. o o a Formato de archivo de los gr´ficos. El formato predeterminado es png. a Otros formatos v´lidos son jpg y gif. a

$alert_host

$alert_port $alert_user

$alert_password $archive_dbname

$archive_host $archive_port $archive_user

$archive_password

$chartlib_path $chart_file_format

Ejecuci´n de ACID o
Una vez ajustado el archivo de configuraci´n nos debemos conectar a la direcci´n: o o http://localhost/acidlab/acid_main.php Se muestra la p´gina de configuraci´n de ACID. A partir de este momento podremos utilizar la interfaz a o web para terminar la configuraci´n de ACID. o 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: http://localhost/acid La p´gina principal de ACID y para ver la base de datos de Snort. a Una vez hecho esto hemos terminado la configuraci´n de ACID y podemos empezar a utilizarlo para o administrar el sistema IDS.
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o

237

Utilizar ACID para ajustar y administrar nuestro NIDS
Antes de que el NIDS sea util 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 a a las alertas. La mayor´ de estas ser´n falsos positivos, para que los datos de alerta sean importantes en ıa a nuestra red, tenemos que empezar a eliminar algunas de estas firmas para reducir la actividad err´nea y o proporcionar s´lo los datos procesables. o Cuando tengamos un n´mero suficiente en la base de datos (al menos unas miles de alertas), podemos u empezar a analizar datos y asi eliminar los tipos de alertas que no nos proporcionen informaci´n. o Si pulsamos Unique Alerts (Alertas unicas) se mostrar´n las alertas m´s recientes clasificadas por tipo ´ a a de alerta. En est´ p´gina podemos clasificar y ordenar por los siguientes campos: a a Nombre de la firma (<Signature>). Clasificaci´n de la alerta (<Classification>). o N´mero total de este tipo de alertas en la base de datos (<Total#>). u N´mero de sensores desde donde proviene la alerta (Sensor#). u N´mero de las diferentes direcciones IP de origen asociadas con dicha alerta (<Src. Addr.>). u N´mero de las diferentes direcciones IP de destino asociadas con dicha alerta (<Dest. Addr.>). u 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? u o ¿Provienen todas las alertas de la misma direcci´n IP? o ¿Se dirigen todas las alertas a la misma direcci´n IP? o ¿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 a o a las alertas individuales. Bas´ndose en la IP del emisor, podemos utilizar esta informaci´n para determinar si se trata de a o una direcci´n que normalmente est´ accediendo a nuestra red. Tambi´n podemos mirar m´s abajo para o a e a comprobar la parte util del paquete (Se ve en hexadecimal y ASCII). ´ Si determinamos que es un ataque al sistema podemos intentar tomar medidas. Normalmente ser´n a 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 a esta protegida contra ese tipo de ataque y enviar una queja al ISP del atacante. Tambi´n se pueden e ejecutar otras acciones contra la direcci´n IP que aparece como IP de origen, como una persecuci´n legal o o o una acci´n civil, si se ha producido con ´xito la intrusi´n. o e o Al menos sabremos exactamente qu´ tipo de ataques se est´n produciendo en nuestra red y lo que e a est´n intentando hacer, As´ nuestra red estar´ m´s protegida y podremos reaccionar si se produce un a ı, a a ataque.

Jose Antonio Escart´ Vigo, Junio 2005. ın

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. o ¿Qui´n es el objetivo del ataque? Al utilizar ACID, buscamos las direcciones IP m´s comunes ya que e a muestran las direcciones IP que supuestamente son las m´s atacadas y, por consiguiente, habr´ m´quinas a a a sobre las que debemos centrar nuestros esfuerzos de protecci´n, algo que nos ayudar´ a diferenciar entre o a los falsos positivos y los positivos reales. Podremos localizar cualquier m´quina que est´ generando un a e gran n´mero de alertas desde una aplicaci´n que se est´ ejecutando. u o a Un incremento s´bito en las alertas hacia una direcci´n IP determinada puede apuntar que se esta u o iniciando un ataque sobre dicha m´quina. A continuaci´n, podemos ejecutar esc´neres de vulnerabilidad, a o a 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 e a o a 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 o o por el n´mero de alertas permite ver a los peores atacantes, seg´n la generaci´n de alertas. Si las direcciones u u o IP con la mayor´ de las alertas est´n en nuestra red, puede existir un culpable interno o una aplicaci´n ıa a o que est´ activando una alerta. e 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´ a ı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 o a o o para analizarla con m´s detalle. a Analizando esas salidas podremos encontrar qu´ organizaci´n es propietaria de dichas IP. Y podremos e o 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.
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o

239

¿Cu´l es el servicio m´s atacado? Al buscar los puertos m´s comunes en los que las alertas se est´n a a a a recibiendo podemos comprobar cu´les son los servicios m´s atacados. Si comprobamos que hay muchas a a alertas basadas en web, deberemos de tener m´s cuidado en el bloqueo de servidores web. a 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 n ı a centrar primero nuestra atenci´n. o

Mantener la base de datos ACID
A medida que crece nuestra base de datos, tendremos que ejecutar alg´n tipo de tarea de manteniu miento peri´dico, para evitar que se haga demasiado grande. As´ mismo, nuestras estad´ o ı ısticas y gr´ficos a ser´n m´s precisos si archivamos nuestras primeras alertas, que van a contener muchos falsos positivos. a a As´ mismo, la limpieza de nuestra base de datos de vez en cuando agilizar´ el proceso de consultas. Para ı a 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 ultimo a˜o. Despu´s seleccionamos Archive Alerts (Archivar alertas) como acci´n para ´ n e o la consulta. Podemos archivar alertas seleccionando por dato, alerta u otros criterios. Tambi´n podemos e elegir simplemente copiar las alerta en un archivo o eliminarlas. Las alertas archivadas se situar´n en la a propia base de datos, con el nombre establecido en el archivo acid conf.php durante la configuraci´n. o Debemos archivar todas las alertas desde los primeros meses de funcionamiento cuando est´bamos a ajustando el sensor de Snort. A partir de ahora, los datos ser´n m´s importantes para los ataques reales a a frente a los falsos positivos. Es recomendable archivar al menos una vez al a˜o o quiz´ trimestralmente, n a dependiendo del volumen de alertas que se est´n registrando. Como regla general, no es recomendable e tener m´s de 100.000 alertas en la base de datos. a

13.9.

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´ o semanas sin mirarlos. Debido a ıas esto, no sabemos qu´ oscuras criaturas pueden estar penetrando nuestro sistema. Adem´s, cuando leemos e a logs la proporci´n de informaci´n util respecto a la in´til es alarmantemente baja . . . o o ´ u Se hace necesario disponer de una herramienta que analize autom´ticamente esa informaci´n y solo a o extraiga las partes interesantes de esos logs. Haci´ndolos mucho m´s f´ciles de consultar y, sobre todo, e a a leer. Logcheck revisa peri´dicamente los logs del sistema , analizando y clasificando cada l´ o ınea y seg´n difeu rentes niveles de alerta. Report´ndolo al administrador del sistema en un formato f´cil de leer, descartando a a las l´ ıneas que no tengan relevancia. Normalmente estos datos son enviados por correo. Logcheck chequear´ cada l´ a ınea frente a cuatro niveles de seguridad: Ignorar, actividad inusual, violaci´n de seguridad y ataque. o 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. a

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 a shell normal, e incluye la configuraci´n en un formato f´cil de comprender. o a
Jose Antonio Escart´ Vigo, Junio 2005. ın

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 a entrar al sistema o de conseguir informaci´n acerca de ´l, y por tanto ser´n reportadas como ataques o e a activos, llamando la atenci´n de manera especial al administrador. o 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´ a ı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´ e e ı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 mana tiene la informaci´n de qu´ logs han sido analizados y hasta qu´ punto, para no perder ni repetir l´ o e e ıneas. Logcheck por defecto analizar´ los archivos /var/log/messages, /var/log/secure y /var/log/maillog. a

Opciones de logcheck.sh
En el archivo logcheck.sh encontraremos las siguientes opciones de configuraci´n: o PATH : Indica d´nde buscar´ el sistema los binarios. Debemos recordar que se ejecutara con una o a llamada desde cron, por lo que no hace da˜o definirlo, y tal vez limitarlo al m´ n ınimo necesario. SYSADMIN : Es la persona que recibir´ el reporte por correo. Si no lleva una direcci´n completa, a o asume que es una direcci´n local. o LOGTAIL: Indica el path completo para el programa logtail. TMPDIR: Especifica el directorio temporal que usar´ el programa. Este debe ser un directorio a seguro, que no tenga acceso de escritura m´s que para el usuario que ejecute Logcheck. a 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 a 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 o
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 a a u hora. Para ello es necesario crear una entrada en el crontab de root o de alg´n usuario que tenga permiso u de leer los archivos localizados en /var/log. La l´ ınea a ser agregada en el crontab ser´ similar a la siguiente: a 0 * * * * /bin/sh /usr/local/etc/logcheck.sh

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o Con esto, cada hora el administrador recibir´ un mensaje similar al siguiente: a
From root@hostname.dominio.com Wed Sep 27 21:46:33 2000 Date: Wed, 27 Sep 2000 19:00:04 -0500 From: root <root@hostname.dominio.com> To: root@hostname.dominio.com Subject: hostname.dominio.com 09/27/00:19.00 system check Security Violations =-=-=-=-=-=-=-=-=-= Sep 27 18:23:07 hostname Sep 27 18:23:11 hostname Sep 27 18:23:11 hostname Sep 27 18:23:11 hostname Sep 27 18:23:43 hostname Unusual System Events =-=-=-=-=-=-=-=-=-=-= Sep 27 18:02:26 hostname Sep 27 18:14:40 hostname Sep 27 18:22:19 hostname Sep 27 18:23:07 hostname Sep 27 18:23:11 hostname Sep 27 18:23:11 hostname Sep 27 18:00:12 hostname

241

PAM_pwdb[14075]: authentication failure; (uid=0) -> root for ssh service PAM_pwdb[14075]: (ssh) session opened for user root by (uid=0) sshd[14075]: log: Password authentication for root accepted. sshd[14075]: log: ROOT LOGIN as ’root’ from hostname2.dominio.com PAM_pwdb[14075]: (ssh) session closed for user root

proftpd[13963]: hostname.dominio.com (lab1-15.dominio.com [192.168.1.16]) - FTP no transfer timeout, disconnected. proftpd[14030]: hostname.dominio.com (lab1-15.dominio.com [192.168.1.16]) - FTP no transfer timeout, disconnected. proftpd[13875]: hostname.dominio.com (lab2-21.dominio.com [192.168.2.21]) - FTP no transfer timeout, disconnected. PAM_pwdb[14075]: authentication failure; (uid=0) -> root for ssh service PAM_pwdb[14075]: (ssh) session opened for user root by (uid=0) sshd[14075]: log: ROOT LOGIN as ’root’ from dir-03.dominio.com 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´ u ınea de logcheck.hacking, para que el reporte sea visto m´s r´pidamente por el administrador cambiar´n los encabezados, quedando as´ a a a ı:
From root@hostname.dominio.com Wed Sep 27 21:52:58 2000 Date: Wed, 27 Sep 2000 21:00:05 -0500 From: root <root@hostname.dominio.com> To: root@hostname.dominio.com 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/192.168.0.111 to TCP port: 1019 Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Host 192.168.0.111 has been blocked via wrappers with string: "ALL: 192.168.0.111" Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Host 192.168.0.111 has been blocked via dropped route command: "/sbin/iptables -I input -s 192.168.0.111 -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 192.168.0.111 (...)

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. o n

13.10.

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 util: Sistema operativo, versi´n, servicios que o e ´ o ofrecemos, versi´n de los programas que tenemos... Cualquiera de estos datos puede ser suficiente para que o su ataque sea exitoso. Basta con que el atacante vea, por ejemplo, que tenemos una versi´n vieja de un o programa, aunque no tenga ´ste ninguna vulnerabilidad importante, para que se d´ cuenta que no somos e e 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 a u o 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 e o a para realizar barridos de puertos es el Nmap (v´ase secci´n 17.2). e o
Jose Antonio Escart´ Vigo, Junio 2005. ın

242

Servidor Linux para conexiones seguras de una LAN a Internet

Figura 13.3: M´dulo Webmin para LogCheck o 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. o Detectar un barrido de puertos es muy f´cil: Muchas conexiones casi simult´neas a una gran cantidad a a de puertos originadas desde la misma direcci´n. Si bien los programas barredores se han vuelto muy o sofisticados y cada vez es m´s dif´ detectarlos por diferentes estrategias que emplean (Nmap sabe hacer a ıcil desde una sencilla conexi´n TCP hasta un barrido silencioso con SYN, FIN, Xmas, Null, UDP, paquetes o fragmentados y barridos paralelos de diferentes tipos), el principio b´sico es el mismo. a Hay un excelente programa dedicado precisamente a encontrar ´ste patr´n y tomar la acci´n que le e o o 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 o indiquemos que deben permanecer siempre inactivos. En caso de llegar una conexi´n a uno de ellos puede o marcarlo en los logs del sistema, bloquear toda la comunicaci´n con la direcci´n identificada como agreo o sora, o ejecutar un comando externo. El archivo de configuraci´n de PortSentry es: o /etc/portsentry/portsentry.conf El programa tiene varios modos de operaci´n: o Modo cl´sico a Modo stealth Modo avanzado
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o

243

Modo cl´sico a
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. u Por ejemplo, puede que nuestro servidor no est´ dando servicio de red SMB (Samba, red tipo Microsoft). e Sin embargo, es com´n que las computadoras windows manden mensajes broadcast buscando a un sistema u 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. o

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 o experimental, por lo cual no funcionar´ en todos los sistemas. a

Modo avanzado
Este modo es tambi´n considerado hasta cierto punto perteneciente a la categor´ stealth. En ´ste modo, e ıa e Portsentry no abre ning´n puerto, sino que le pide al kernel que le notifique si llega alguna petici´n a alg´n u o u 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 ADVANo CED EXCLUDE UDP. El modo avanzado es mucho m´s sensible que el modo cl´sico, dado que escucha muchos m´s puertos, a a a por lo que puede efectivamente causar una negaci´n de servicio si no es configurado con cuidado. o

Otras opciones de configuraci´n o
Tras haber especificado los puertos que deseamos escuchar, hay algunos par´metros adicionales que a 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´ muy ıa molesto que quisi´ramos ejecutar Nmap contra uno de nuestros servidores para asegurarnos de que e no haya servicios abiertos que no requiramos y que nosotros mismos qued´ramos bloque´dos. a a 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 unicamente a la sesi´n actual ´ o de Portsentry. BLOCK TCP : Especifica qu´ hacer cuando un barrido de puertos TCP es detectado. Tiene tres poe sibles valores: 0 (s´lo registrar el intento), 1 (bloquear la direcci´n que intent´ acceder a la m´quina) o o o a 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. o o 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. o KILL HOSTS DENY : Tiene la l´ ınea que deber´ ser agregada a /etc/hosts.deny para que la direcci´n a o atacante sea bloqueada por TCPwrappers. Es conveniente activarlo, pues a diferencia de las reglas e a 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 o o e podr´ seguir proporcionando informaci´n importante a nuestro atacante. a o
Jose Antonio Escart´ Vigo, Junio 2005. ın

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 o se recomienda utilizar esta opci´n, ya que puede f´cilmente llevar a una negaci´n de servicio. Hay o a o administradores que sugieren utilizar esta opci´n para lanzar un contraataque contra el atacante. o Nosotros categ´ricamente les indicamos que esto es una muy mala idea – La mejor defensa es tener o nuestro sistema seguro, no atacar al enemigo. Al atacar al enemigo, lo m´s probable es que centre a m´s su atenci´n en nosotros y, con el paso del tiempo, logre penetrar nuestra seguridad. Es mucho a o mejor aparentar que nada ocurri´ o simplemente tirar la conexi´n que atacarla. o o SCAN TRIGGER: Indica con cuantos intentos de conexi´n se deben realizar, para marcarla como o un ataque. Probablemente, si a la primera bloqueamos toda comunicaci´n con el presunto atacante, o dejaremos fuera a muchos usuarios leg´ ıtimos que por casualidad hicieron la conexi´n equivocada. Sin o embargo, si ponemos un n´mero muy alto nos exponemos a dar m´s informaci´n de la que hubi´ramos u a o e querido. Un valor de 1 o 2 es recomendado, aunque los muy paran´icos querr´n mantenerlo en 0. o a

Inicializaci´n autom´tica o a
Hay que incluir la ejecuci´n en uno de los archivos que se ejecutan al iniciar la m´quina. Las opciones o a que podemos establecer son las siguientes: Cuadro 13.9: Opciones de PortSentry Opci´n o -tcp -udp -stcp -sudp -atcp -audp Descripci´n o Iniciar en modo Iniciar en modo Iniciar en modo Iniciar en modo Iniciar en modo Iniciar en modo cl´sico, escuchar TCP a cl´sico, escuchar UDP a stealth, escuchar TCP stealth, escuchar UDP avanzado, escuchar TCP 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 util, tenemos que analizar nuestros logs y llevar registros de e ´ qui´n y cu´ndo intent´ se intentaron escanear nuestros puertos. Adem´s, s´lo leyendo los logs sabremos e a o a o si estamos limitando de m´s, bloqueando el acceso de m´quinas leg´ a a ıtimas. Afortunadamente, Portsentry utiliza syslog para reportar toda la informaci´n que el administrador o debe saber, por lo cual todo lo que necesitamos estar´ t´ a ı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´ o ı:
Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Sep 27 20:10:48 hostname portsentry[14722]: attackalert: blocked via dropped route using command: "/sbin/iptables Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Sep 27 20:10:48 hostname portsentry[14722]: attackalert: Sep 27 20:10:48 hostname portsentry[14722]: attackalert: (...) SYN/Normal scan from host: ejemplo.dominio.com/192.168.1.3 to TCP Host 192.168.1.3 has been blocked via wrappers with string: "ALL: Host 192.168.1.3 has been -I input -s 192.168.1.3 -j DENY -l" SYN/Normal scan from host: ejemplo.dominio.com/192.168.1.3 to TCP Host: ejemplo.dominio.com/192.168.1.3 is already blocked Ignoring SYN/Normal scan from host: ejemplo.dominio.com/192.168.1.3 to TCP Host: ejemplo.dominio.com/192.168.1.3 is already blocked Ignoring SYN/Normal scan from host: ejemplo.dominio.com/192.168.1.3 to TCP Host: ejemplo.dominio.com/192.168.1.3 is already blocked Ignoring SYN/Normal scan from host: ejemplo.dominio.com/192.168.1.3 to TCP Host: ejemplo.dominio.com/192.168.1.3 is already blocked Ignoring SYN/Normal scan from host: ejemplo.dominio.com/192.168.1.3 to TCP port: 1019 192.168.1.3"

port: 70 port: 934 port: 267 port: 202 port: 613

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o

245

Readmitiendo hosts marcados como atacantes
Cuando configuremos Portsentry es muy com´n que marquemos direcciones como atacantes por error. u Eliminarlos de la lista de bloqueo es afortunadamente muy sencillo. Si asumimos que queremos volver a permitir acceso a la direcci´n 192.168.1.3. Todo el proceso debeo remos realizarlo como root. Nuestro primer paso ser´ editar el archivo /etc/hosts.deny y buscar la direcci´n que queremos a o 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! 216.98.66.42 210.124.182.137 192.168.1.3 200.36.163.106 202.111.97.171

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´ necesarios para insertarlas. ıan
# /sbin/iptables-save :input ACCEPT :forward ACCEPT :output ACCEPT Saving ‘input’. -A input -s 216.98.66.42/255.255.255.255 -d 0.0.0.0/0.0.0.0 -j DENY -l -A input -s 210.124.182.137/255.255.255.255 -d 0.0.0.0/0.0.0.0 -j DENY -l -A input -s 192.168.1.3/255.255.255.255 -d 0.0.0.0/0.0.0.0 -j DENY -l -A input -s 200.36.163.106/255.255.255.255 -d 0.0.0.0/0.0.0.0 -j DENY -l -A input -s 202.111.97.171/255.255.255.255 -d 0.0.0.0/0.0.0.0 -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 192.168.1.3/255.255.255.255 -d 0.0.0.0/0.0.0.0 -j DENY -l Con esto, el host con la direcci´n 192.168.1.3 ya tendr´ de nuevo acceso a nuestro sistema. o a

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. o n

13.11.

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 o tarjetas de red en modo promiscuo (sniffers), aqu´ mostraremos las siguientes: ı Neped Sentinel Estas herramientas, utilizan las siguientes t´cnicas para descubrir sniffers: e
Jose Antonio Escart´ Vigo, Junio 2005. ın

246

Servidor Linux para conexiones seguras de una LAN a Internet

Figura 13.4: M´dulo Webmin para Portsentry o

El test DNS En este m´todo, la herramienta de detecci´n en s´ misma est´ en modo promiscuo. Creamos numerosas e o ı a 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 o u inversas DNS en los paquetes que capturan. Cuando se realiza una b´squeda inversa DNS, una utilidad u de detecci´n de sniffers “huele” la petici´n de las operaciones de b´squeda para ver si el objetivo es aquel o o u que realiza la petici´n del host inexistente. o

El Test ICMP Etherping Este m´todo conf´ en un problema en el n´cleo de la m´quina receptora. Podemos construir una petie ıa u a ci´n tipo “ICMP ECHO” con la direcci´n IP de la m´quina sospechosa de hospedar un sniffer. Enviamos o o a un un paquete “ICMP ECHO” al objetivo con la direcci´n IP correcta, pero con una direcci´n de MAC o o deliberadamente err´nea. La mayor´ de los sistemas desatender´n este paquete ya que su direcci´n MAC o ıa a o es incorrecta. Pero en algunos sistemas Linux, NetBSD y NT, puesto que el NIC est´ en modo promisa cuo, el sniffer identificara este paquete de la red como paquete leg´ ıtimo y responder´ por consiguiente. a Si el blanco en cuesti´n responde a nuestra petici´n, sabremos que est´ en modo promiscuo. Los sniffers o o a 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, e e 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 e paquetes a raz´n de que el tiempo de latencia incremente. Entonces hacemos ping otra vez, y comparamos o el RTT esta vez con el de la primera vez. Despu´s de una serie de tests y medias, podemos concluir o no e si un sniffer est´ realmente funcionando en el objetivo. a
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o El test ARP

247

Podemos enviar una petici´n ARP a nuestro objetivo con toda la informaci´n r´pida excepto con una o o a direcci´n hardware de destino err´nea. Una m´quina que no est´ en modo promiscuo nunca ver´ este o o a e a paquete, puesto que no era destinado a ellos, por lo tanto no contestar´. Si una m´quina est´ en modo a a a promiscuo, la petici´n ARP ser´ considerada y el n´cleo la procesar´ y contestar´ La m´quina que o ıa u ıa ıa. a contesta est´ en modo promiscuo. a

13.11.1.

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 a modo promiscuo. Lo podemos descargar desde su p´gina web: a http://apostols.org/projectz/neped/ La forma de uso es muy sencilla: #neped <dispositivo> Esto ser´ un ejemplo de su funcionamiento: ıa
#neped eth0 ---------------------------------------------------------> My HW Addr: 00:00:F4:C2:0E:2A > My IP Addr: 192.168.0.2 > My NETMASK: 255.255.255.0 > My BROADCAST: 192.168.0.255 ---------------------------------------------------------> Scanning .... *> Host 192.168.0.3, 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 e o o 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 o 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. a

13.11.2.

Sentinel

Lo podemos descargar desde su p´gina web: a http://www.packetfactory.net/Projects/sentinel/ Utiliza los m´todos de busqueda de snifers: e 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: e -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: a o
Jose Antonio Escart´ Vigo, Junio 2005. ın

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´ algunos posibles ejemplos de uso de Sentinel: ıan Test ARP en el host 192.168.0.2 #sentinel -a -t 192.168.0.2 Test DNS en el host 192.168.0.2 #sentinel -d -f 1.1.1.1 -t 192.168.0.2 Escanear una red de Clase C (192.168.0) usando el test ARP, DNS y test etherping #sentinel -aed -c 192.168.0

13.12.

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. a 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 ultima o ´ versi´n disponible detecta troyanos en los siguientes ficheros: o 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: e 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. a 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

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o

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 ‘w55808’... 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. a
Jose Antonio Escart´ Vigo, Junio 2005. ın

250

Servidor Linux para conexiones seguras de una LAN a Internet

13.13.

HoneyPots: Entretener a los atacantes

Informaci´n obtenida de la web: http://www.xombra.com o El papel de la tecnolog´ del sistema de detecci´n de intrusos basado en se˜uelos (o “honeypots”) ıa o n est´ evolucionando. Los honeypots, que alguna vez fueron utilizados, principalmente por los investigaa dores, 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 efeca to, al brindar detecci´n temprana de actividad no autorizada en las redes, los honeypots son ahora m´s o a utiles que nunca para los profesionales de la seguridad inform´tica. Aqu´ se analiza el funcionamiento de ´ a ı los honeypots y su tecnolog´ que se est´ convirtiendo en el componente clave del sistema de capas de ıa, a protecci´n contra intrusos. o Los honeypots son una emocionante tecnolog´ nueva, con un enorme potencial para la comunidad ıa inform´tica. Los primeros conceptos fueron introducidos primeramente por varios iconos en la seguridad a inform´tica, especialmente por Cliff Stoll en el libro “The Cuckoo’s Egg” y el trabajo de Bill Cheswick a “An Evening with Berferd”. Desde entonces, han estado en una continua evoluci´n, convirtiendose en la o poderosa herramienta de seguridad que es hoy en d´ En esta secci´n se detalla exactamente: qu´ son los ıa. o e 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 a 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 o personas”. Dan Adams. Los honeynets son conjuntos de Honeypots, compuestos por servicios reales, as´ se abarca m´s informaı a ci´n para el estudio. Hacen m´s fascinante el ataque al intruso, lo cual incrementa el n´mero de ataques. o a u La funci´n principal a parte de la de estudiar las herramientas de ataque, es la de desviar la atenci´n del o o 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. u 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 u que se emplean a la hora de vulnerar un sistema. Son una herramienta muy util 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. o 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. u 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 hoo o neypots para la investigaci´n, que se utilizan para recolectar informaci´n sobre las acciones de los o o intrusos. El proyecto Honeynet 1 , por ejemplo, es una organizaci´n para la investigaci´n sobre seguo o ridad voluntaria, sin ´nimo de lucro que utiliza los honeypots para recolectar informaci´n sobre las a o amenazas del ciberespacio. Honeypots para la producci´n: Son los que se utilizan para proteger a las organizaciones. Sin embargo, o se les concede cada vez m´s importancia debido a las herramientas de detecci´n que pueden brindar a o y por la forma c´mo pueden complementar la protecci´n en la red y en los hosts. o o
1 Proyecto

Honeynet en castellano: http://his.sourceforge.net/trad/honeynet/
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o

251

13.13.1.

¿C´mo funcionan? o

Los honeypots tambi´n se pueden describir como de alta o baja interacci´n, distinci´n que se basa en e o o el nivel de actividad que permiten al atacante. Un sistema de baja interacci´n ofrece actividad limitada, o la mayor´ de las veces emula los servicios y sistemas operativos. Las principales ventajas de los honeypots ıa de baja interacci´n es que son relativamente f´ciles de instalar y mantener; tambi´n implican un riesgo o a e m´ ınimo porque el atacante nunca tiene acceso a un sistema operativo real para perjudicar a otros sistemas. Honeyd (v´ase secci´n 13.13.7) es un ejemplo de honeypot de baja interacci´n, cuya funci´n principal e o o o 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´ o u ıctima para captar y registrar al ataque. Por el contrario, los honeypots de alta interacci´n utilizan sistemas operativos reales y aplicaciones reao les, no emulan nada. Al ofrecerles a los atacantes sistemas reales para que interact´en, se puede aprender u mucho sobre su comportamiento. Los honeypots de alta interacci´n no imaginan como se comportar´ un o a atacante y proporcionan un ambiente que rastrea todas las actividades, lo que permite conocer un comportamiento al que de otra manera no tendr´ acceso. ıan Los sistemas de alta interacci´n tambi´n son flexibles y los profesionales de la seguridad inform´tica o e a pueden implementarlos en la medida que quieran. Adem´s, este tipo de honeypot proporciona un objetivo a m´s realista, capaz de detectar atacantes de mayor calibre. Pueden ser complejos de instalar, sin embargo, a requieren que se implementen tecnolog´ adicionales para evitar que los atacantes los utilicen para lanzar ıas ataques a otros sistemas.

13.13.2.

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 n peque˜as cantidades de informaci´n. En lugar de logear 1 Gb por d´ logean s´lo 1 Mb de datos por n o ıa, o d´ En vez de generar 10.000 alertas por d´ pueden generar s´lo 10 alertas por d´ Recordemos ıa. ıa, o ıa. que los honeypots s´lo capturan actividad sospechosa ya que cualquier interacci´n con un honeypot o o 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 o unicamente por “chicos malos”. Esto significa que es mucho m´s f´cil (y barato) de analizar los datos ´ a a que un honeypot recoge. Nuevas herramientas y t´cticas: Los honeypots son dise˜ados para capturar cualquier cosa que a n interact´a con ellos, incluyendo herramientas o t´cticas nunca vistas. u a M´ ınimos recursos: Los honeypots requieren m´ ınimos recursos, s´lo capturan actividad irregular. Esto o significa que un viejo Pentium con 128 mb de RAM puede manejar f´cilmente una entera red de a clase B entera. Encriptaci´n en IPv6: A diferencia de la mayor´ de las tecnolog´ para la seguridad, como los o ıa ıas 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´. a a Informaci´n: Los honeypots pueden recoger informaci´n “en profundidad” como pocos, si es que o o existen tecnolog´ que se le parezcan. ıas Simplicidad: Finalmente, los honeypots son conceptualmente simples. No hay por qu´ desarrollar e algoritmos raros, ni complejas tablas que mantener, o firmas que actualizar. Mientras m´s simple a sea la tecnolog´ menos posibilidades de errores o desconfiguraciones habr´. ıa, a

Jose Antonio Escart´ Vigo, Junio 2005. ın

252

Servidor Linux para conexiones seguras de una LAN a Internet

Como en cualquier otra tecnolog´ los honeypots tambi´n tienen su debilidad. Esto es debido a que ıa, e no reemplaza a la actual tecnolog´ sino que trabaja con las existentes. ıa, Visi´n Limitada: Los honeypots pueden s´lo rastrear y capturar actividad que interact´en directao o u mente con ellos. Los Honeypots no podr´n capturar ataques a otros sistemas vecinos, al menos que a el atacante o la amenaza interact´e con el honeypot al mismo tiempo. u Riesgo: Todas las tecnolog´ de seguridad tienen un riesgo. Los firewalls tienen el riesgo de que sean ıas penetrados, la encriptaci´n tiene el riesgo de que los algoritmos sean rotos, los sensores IDS tienen el o riesgo de que fallen al detectar ataques. Los Honeypots no son diferentes, tienen un riesgo tambi´n. e 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. n 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´ o ıtica.

13.13.3.

Utilidades de honeypots

Cuando son utilizados con prop´sitos productivos, los honeypots est´n protegiendo la organizaci´n. o a o En este mundo se incluye, prevenci´n, detecci´n y respuesta a un ataque. o o Cuando son utilizados con prop´sitos de investigaci´n, los honeypots son utilizados para recolectar o o informaci´n. La importancia de esta informaci´n depende seg´n las organizaciones. Algunas organizacioo o u nes querr´n estudiar la tendencia de las actividades intrusivas, mientras otras estar´n interesadas en la a a predicci´n y prevenci´n anticipada, o las fuerzas legales. o o En general, honeypots de baja interacci´n son utilizados con prop´sitos productivos, mientras hoo o neypots de alta interacci´n son utilizados con prop´sitos de investigaci´n. Sin embargo, los dos tipos de o o o honeypots pueden funcionar para ambos prop´sitos. o 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´ a a ıctima). Uno de las m´todos para protejer de tales ataques es bajando la velocidad de su escaneo y potencialmente detenerlos. e 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 velou e cidad 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. Esto 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 o honeypot es: LaBrea Tarpit. Los “honeypots pegajosos” son m´s comunes encontrarlos entre soluciones de a baja interacci´n (hasta podr´ llam´rsele soluciones “no interactivas”, ya que reducen tanto la velocidad o ıa a que hacen “gatear” al atacante. Los Honeypots pueden tambi´n protejer nuestra organizaci´n de intrusos e o humanos. Este concepto se conoce como enga˜o o disuaci´n. La idea es confundir al atacante, hacerle n o 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 e a a un atacante sabe que nuestra organizaci´n est´ utilizando honeypots pero no sabe cuales son los sistemas o a honeypots y cuales son sistemas leg´ ıtimos, quiz´s tenga miedo de ser capturado por honeypots y decida a no atacarlo. Por lo tanto, honeypots disuaden al atacante. Un ejemplo de honeypot dise˜ado para hacer n esto, es el Deception Toolkit, un honeypot de baja interacci´n. o La segunda forma por la cual honeypots pueden ayudar a protejer una organizaci´n es por medio de o la detecci´n. La detecci´n es cr´ o o ıtica, su prop´sito es la identificaci´n de fallos para para la prevenci´n. No o o o importa cu´n segura sea nuestra organizaci´n, siempre habr´n fallos si los hombres est´n involucrados en a o a a el proceso... Detectando al atacante, podr´n r´pidamente reaccionar ante ellos, deteni´ndolos, o mitigando a a e el da˜o que hicieron. Tradicionalmente, la detecci´n ha sido extremadamente dificil de hacer. Tecnolog´ n o ıas como sensores IDS y sistemas de logueo han sido inefectivos por diversas razones: Generan muchos datos,
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o

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 o muchos de los problemas de la detecci´n cl´sica. Los honeypots reducen los falsos positivos, capturando o a peque˜as cantidades de datos de gran importancia, capturan ataques desconocidos como nuevos exploits n o shellcodes polim´rficos, y trabajan en forma encriptada o en entornos IPv6. En general, honeypots de o baja interacci´n son la mejor soluci´n para la detecci´n y tienen un riesgo limitado. o o o La forma tercera y final por la cual honeypots nos pueden ayudar a protejer una organizaci´n es en la o respuesta. Una vez que una organizaci´n detecta un fallo, ¿c´mo debe responder? Esto es a menudo uno o o de los grandes retos a los que nos debemos enfrentar. Hay por lo general poca informaci´n acerca de qui´n o e es el atacante, c´mo ingres´ al sistema o cu´nto da˜o hizo. En estas situaciones, la informaci´n detallada o o a n o 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 o servidor de correo de una organizaci´n, son tan cr´ o ıticos que aunque est´n compremetidos los administrae dores no pueden desconectarlos y hacer un an´lisis forense como corresponde. Est´n limitados a analizar a a 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 e o a n o red. El otro problema es que incluso en el caso de que este desconectado, hay tanta poluci´n de datos que o es muy dif´ determinar qu´ es lo que hizo el “chico malo”. Con poluci´n de datos me refiero que hay ıcil e o tanta actividad (logeo de usuarios, lecturas de cuentas de mail, archivos escritos a bases de datos, etc. . . ) que puede ser dif´ determinar cu´l es la actividad normal del d´ a d´ y qu´ es lo que hizo el atacante. ıcil a ıa ıa e 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 complea a a to, sin el impacto en las operaciones empresariales de todos los d´ Recuerden que la unica actividad que ıas. ´ guardan los honeypots son las relacionadas con el atacante, ya que no las utilizan nadie (son se˜uelos), n excepto los atacantes. La importancia de los honeypots aqu´ es la r´pida entrega de la informaci´n, anaı a o lizada en profundidad, para responder r´pida y eficientemente a un incidente. En general, los honeypots a de alta interacci´n son la mejor soluci´n para la respuesta. Para reaccionar ante un intruso, se necesita o o conocimientos en profundidad sobre qu´ hicieron, c´mo ingresaron, y qu´ herramientas utilizaron. e o e

13.13.4.

Tipos de honeypots

Los honeypots vienen con diversidad de colores y gustos, haciendo dif´ su comprensi´n. Para ayudarıcil o nos a entender mejor a los honeypots y a todos los diferentes tipos, dividiremos a dos categor´ generales: ıas honeypots de “baja interacci´n” y de “alta interacci´n”. Estas categor´ nos ayudan a entender con o o ıas qu´ tipo de honeypots estamos trabajando, sus fortalezas y debilidades. La interacci´n define el nivel e o de actividad que un honeypot le permite tener un atacante. Los honeypots de baja interacci´n tienen o una interacci´n limitada, normalmente trabajan unicamente emulando servicios y sistemas operativos. La o ´ actividad del atacante se encuentra limitada al nivel de emulaci´n del honeypot. Por ejemplo, un servicio o FTP emulado escuchando en el puerto 21 probablemente estar´ emulando un login FTP o probablemente a suportar´ alg´nos comandos FTP adicionales. Las ventajas de un honeypot de baja interacci´n es su a u o simplicidad, estos honeypots tienden a ser f´ciles de utilizar y mantener con un riesgo m´ a ı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 o e a actividad del intruso, que nunca tiene acceso al sistema operativo real donde puede atacar o da˜ar otros n sistemas. Las principales desventajas de los honeypots de baja interacci´n es que registran unicamente o ´ informaci´n limitada y son dise˜ados para capturar actividad prevista, los servicios emulados s´lo pueden o n o llegar hasta ah´ Tambi´n es f´cil para un atacante detectar un honeypot de baja interacci´n, sin importar ı. e a o cu´n buena sea la emulaci´n. Un intruso h´bil puede, con el debido tiempo, detectar su presencia. Ejemplos a o a de honeypots de baja interacci´n se incluyen: Specter, Honeyd, y KFSensor. o Los honeypots de alta interacci´n son diferentes, ´stos generalmente son soluciones complejas ya que o e implica la utilizaci´n de sistemas operativos y aplicaciones reales. Nada es emulado, le damos a los ino
Jose Antonio Escart´ Vigo, Junio 2005. ın

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 e verdadero sistema Linux y montar un verdadero servidor FTP. Las ventajas de dicha soluci´n son dos: o Primero, usted capturar´mos grandes cantidades de informaci´n d´ndoles a los intrusos algo sistemas a o a reales con la cual interactuar, podremos aprender la completa extensi´n de sus actividades, cualquier cosa o 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 o a 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 o o honeypot captur´ comandos “back door” codificados en un protocolo IP no estandard (espec´ o ıficamente protocolo IP 11, Network Voice Protocol). No obstante, esto tambi´n incrementa el riesgo de los honeye pots 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 o tecnolog´ adicional que prevenga al atacante de da˜ar otros sistemas que no son honeypots. En general, ıa n honeypots de alta interacci´n pueden hacer todo lo que uno de baja interacci´n puede hacer y mucho o o m´s, pero pueden ser m´s complejos de utilizar y mantener. Ejemplos de honeypots de alta interacci´n a a o son Symantec Decoy Server y los Honeynets.

13.13.5.

Otras caracter´ ısticas

Algunos honeypots, como Honeyd, no s´lo emulan servicios sino que tambi´n emulan el Sistema Opeo e rativo. 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 e 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 a 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 a el comportamiento de un IIS webserver, y para el caso de un Linux, deber´ emular el comportamiento ıa de un webserver Apache. La mayor´ de los honeypots emulan el SO de esta manera. Algunos honeypots ıa sofisticados llevan la emulaci´n un paso adelante (como lo hace el Honeyd): No s´lo emulan en el nivel de o o 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 a e el honeypot. Honeyd falsea la respuesta, emulando no s´lo el servicio sino emulando tambi´n el stack del o e IP, comport´ndose como si fuera realmente otro sistema operativo. El nivel de emulaci´n y sofisticaci´n a o o depende de la tecnolog´ del honeypot que elijamos. ıa 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. o o Honeynets Symantec Decoy Server 2. De baja interacci´n: Emula sistema operativos y servicios. o Honeyd Specter KFSensor Deception Toolkit

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 13. Sistemas de detecci´n de intrusiones o

255

13.13.6.

Honeynets: alta interacci´n o

Los Honeynets son un ejemplo ideal de honeypots de alta interacci´n. Honeynets no son un producto, o no son una soluci´n software que se instala en una computadora. En lugar de eso, los Honeynets son una o arquitectura, una red entera de m´quinas dise˜ados para ser atacadas. La idea es tener una arquitectura a n 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 a 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´ o ı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 o un gateway Honeywall. Este gateway permite el tr´fico de entrada a los “sistemas v´ a ıctima”, pero controla el tr´fico de salida usando tecnolog´ de prevenci´n contra instrusos. Esto le da al atacante la flexibilidad a ıas o de interactuar con las sistemas v´ ıctimas, pero previene al atacante de da˜ar otros sistemas que no forman n parte del Honeynet.

13.13.7.

Honeyd: baja interacci´n o

Honeyd es un honeypot de baja interacci´n. Desarrollado por Niels Provos, Honeyd es OpenSource o y est´ dise˜ado para correr principalmente en sistemas Unix/Linux (aunque fue portado a Windows). a n 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 o o u v´ ıctima. Por defecto, Honeyd detecta y logea cualquier conexi´n a puertos UDP o TCP. Como si fuera o 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 o e 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. a e a Todo depende del nivel de emulaci´n del honeypot. La mayor´ de los servicios emulados trabajan de la o ıa misma manera. Ellos esperan un tipo espec´ ıfico de comportamiento, y est´n programados para reaccionar a en una forma predeterminada. La limitaci´n est´ en que si el atacante hace algo que la emulaci´n no tiene o a o previsto, entonces no saben c´mo responder. La mayor´ de los honeypots de baja interacci´n, incluyendo o ıa o Honeyd, simplemente generar´ un mensaje de error. Podemos ver cuales son los comandos que soporta el a servidor FTP emulado de Honeyd viendo el c´digo fuente. o En nuestra instalaci´n Debian utilizaremos este paquete honeyd, ya que tiene licencia GPL y es grao tuito. 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). e 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 a 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 e Nmap, permiti´ndonos convertirnos en el SO que queramos. Si ejecutamos la configuraci´n que viene como e o 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 cone o figurados. Lo podemos encontrar en: /usr/share/doc/honeyd/examples/config.localhost

Jose Antonio Escart´ Vigo, Junio 2005. ın

256

Servidor Linux para conexiones seguras de una LAN a Internet Si observamos la definici´n del dispositivo 10.0.0.1 de ejemplo, veremos lo siguiente: o

#cat /usr/share/doc/honeyd/examples/config.localhost|more ... route entry 10.0.0.1 route 10.0.0.1 link 10.0.0.0/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 10.0.0.1 routerone ... La explicaci´n a grandes rasgos es que tenemos un dispositivo cuya direcci´n IP es 10.0.0.1, que se o o comportar´ como un Cisco 7206 ejecutando una IOS 11.1(24), resetear´ todas las conexiones TCP menos a a las que vayan al puerto 23, ya que entonces el script router-telnet.pl (una emulaci´n del demonio telnet) o ser´ ejecutado. a 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 10.0.0.1: (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 178.847 s Cuando recibimos los paquetes de Nmap, honeyd responde con la personalidad que hemos escogido.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 14

Redes inal´mbricas a
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 n 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 a est´ ejecutando un punto de acceso ilegal. a Hasta hace muy poco los administradores de red s´lo ten´ que preocuparse de asegurar los bienes o ıan de la tecnolog´ de informaci´n f´ ıa o ı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. a Esta nueva tecnolog´ ha ayudado a rebajar el coste del despliegue de redes, ha tra´ acceso a sitios ıa ıdo a los que no se pod´ acceder antes y ha convertido el t´rmino “inform´tica m´vil” en una realidad. ıa e a o Ha cambiado dr´sticamente el per´ a ımetro de seguridad de redes de las empresas de todos los tama˜os. n Tradicionalmente, las redes corporativas se conectaban al mundo exterior en s´lo unos pocos lugares. As´ o ı, los administradores de redes se pod´ concentrar en proteger estos puntos de acceso limitados. Pod´ ıan ıan colocar cortafuegos o otras defensas en esos puntos de contenci´n cruciales. El interior de la red se trataba o como de confianza porque no hab´ forma de introducirse que no fuese a trav´s de los puntos protegidos. ıa e Ahora con una LAN inal´mbrica desplegada, nuestro per´ a ımetro de seguridad se convierte literalmente en el aire que nos rodea. Los atacantes sin cables pueden provenir de cualquier direcci´n. Si tenemos o 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´ sin cables ıa 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 a o del ´rea local inal´mbrica y cu´les son sus puntos d´biles. a a a e Los fabricantes del equipamiento LAN inal´mbrico han reducido tanto los precios que ahora es una a alternativa muy viable para las redes dom´sticas. En lugar de cablear nuestra casa para conectar nuestros e PCs a Ethernet, podemos comprar un punto de acceso (AP, Access Point) y un par de tarjetas inal´mbricas a y utilizar Internet desde cualquier habitaci´n de nuestra casa (o fuera de ella). El amplio despliegue de la o tecnolog´ LAN inal´mbrica ha llegado definitivamente para quedarse y tarde o temprano tendremos que ıa a tratar con ella.

14.1.

Est´ndar 802.11 (Wifi) a

El protocolo m´s popular para la tecnolog´ LAN inal´mbrica es actualmente la serie 802.11, conocido a ıa a com´nmente como wifi. Los est´ndares inal´mbricos de 802.11 son b´sicamente una extensi´n del protocolo u a a a o Ethernet, es la raz´n por la que funciona tambi´n con las redes Ethernet con cables. Utiliza las frecuencias o e de 2.4 GHz para 802.11b y 802.11g y 5 GHz para 802.11a para se˜ales de transmisi´n de datos. Estas n o 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. e Algunos tel´fonos inal´mbricos y microondas se encuentran en la banda de los 2.4 GHz, por lo que si e a

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 a interferencias. Esta longitud de onda es perfecta para el corto rango deseado para wifi. Sus par´metros de dise˜o a n 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 802.11 que han aparecido. o a a

Est´ndar a 802.11a

802.11b

802.11g

802.11i

Cuadro 14.1: Est´ndares de 802.11 inal´mbricos a a Descripci´n o Esta versi´n del est´ndar utiliza una logitud de onda de 5 GHz, un espectro menos abao a rrotado y menos propenso a tener problemas de interferencias. El potencial te´rico para o esta tecnolog´ es de 54 Mps, una gran cantidad de ancho de banda, pero la mayor´ de ıa ıa las aplicaciones en el sector no se acercan a esa cantidad. 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 a ´ptimas trabajan a la mitad de dicha cantidad. o Actualmente es el est´ndar inal´mbrico m´s conocido. Proporciona hasta 54 Mps de ancho a a a de banda, pero en el mismo espectro de 2.4 GHz que 11b. Tambi´n es compatible hacia e atr´s con el hardware de 11b. a Este nuevo protocolo es b´sicamente una extensi´n de 802.11b que se adhiere al protocolo a o de cifrado para ser mucho m´s seguro. El IEEE acaba de aprobarlo y ya podemos encontrar a productos que lo implementan.

Una red wifi inal´mbrica puede operar en uno de estos dos modos: a Modo adhoc: Nos permite conectar directamente dos nodos juntos. Este modo es util 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 o (AP, Access Point), y conectarla a nuestra LAN. Todos los nodos sin cables se conectan a la LAN ´ trav´s de este punto. Esta es la configuraci´n m´s com´n en redes corporativas ya que permite al e o a u administrador controlar el acceso sin cables a un punto. Cada punto de acceso y tarjeta inal´mbricos a ´ tiene un n´mero asignado, es el ID del nodo cliente (BSSID, Basic Station System ID). Esta es u la direcci´n MAC para los clientes inal´mbricos que se asocian al nodo servidor. Este nombre no o a es necesariamente unico a dicho punto de acceso. De hecho, la mayor´ de los fabricantes asignan ´ ıa 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 u dom´sticos y de peque˜os negocios. Yo dispongo de un router 3Com ADSL 11g de este tipo. e n Podemos configurar un nodo de red inal´mbrica instalando una tarjeta de interfaz de red (NIC, Neta work Interface Card) en un ordenador. Una NIC inal´mbrica puede ser de varios tipos: puede ser una a tarjeta que se introduce en la ranura del PC, una tarjeta PCMCIA, un dispositivo USB, etc. Una red inal´mbrica 802.11 en un modo de infraestructura tiene un punto de acceso que act´a como puente entre a u la LAN de Ethernet con cables y uno o m´s puntos extremo sin cables. El punto de acceso env´ frecuena ıa temente transmisiones de “se˜ales luminosas” para que cualquier nodo sin cables sepa que est´ ah´ Las n a ı. transmisiones de se˜ales luminosas act´an como un faro invitando a cualquier nodo sin cables del ´rea a n u a iniciar la sesi´n. Estas se˜ales forman parte del problema con wifi. es imposible desactivar completamente o n dichas se˜ales, lo que dificulta ocultar el hecho de que hay una red inal´mbrica. Cualquiera que tenga n a una tarjeta inal´mbrica puede, al menos, ver las se˜ales luminosas si se encuentran dentro de un rango, a n aunque algunos receptores permiten limitar la cantidad de informaci´n que sale de dichas transmisiones. o Estas se˜ales contienen informaci´n b´sica sobre el punto de acceso inal´mbrico, normalmente inclun o a a yendo su SSID. Si la red no est´ utilizando ning´n cifrado ni ninguna otra protecci´n, esto es todo lo que se a u o
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 14. Redes inal´mbricas a

259

requiere para que un intruso acceda a la red. Sin embargo, incluso en una red inal´mbrica cifrada, el SSID a 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. a o

14.2.

Peligros de las LAN inal´mbricas a

Aunque ofrecen la misma flexibilidad y funcionalidad que pueden ofrecer las LAN con cables, tambi´n e introducen algunos retos y peligros unicos para el administrador de redes preocupado por la seguridad. ´ ´ Estos son algunos de los que tenemos que tener en cuenta al a˜adir una LAN inal´mbrica a nuestra n a infraestructura: Escuchas clandestinas: Lo m´s ´cil para un intruso en una red inal´mbrica es recopilar paquetes a a a utilizando un sniffer. Poco podemos hacer frente a ello, Los dise˜adores de las redes inal´mbricas n a pensaron sobre ello e introdujeron en el dise˜o un cifrado est´ndar denominado Privacidad equivalen n a 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 o 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. a a o Alguien podr´ escuchar sobre nuestro enlace sin cables para buscar los registros de inicio de sesi´n, ıa o las contrase˜as o cualquier otro dato. n Acceder a los PC sin cables: Un enlace inal´mbrico proporciona a un atacante potencial un vector en a una m´quina de nuestra red. Aparte de los puntos de acceso, las m´quinas con tarjetas inal´mbricas, a a a 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 a a como las defensas del per´ ımetro o los servidores p´blicos. u Acceder a la LAN : Probablemente ´ste sea el mayor peligro que presentan las redes inal´mbricas. e a Si los intrusos pueden obtener el acceso a nuestra LAN a trav´s de un punto de acceso inal´mbrico, e a normalmente tienen las llaves de nuestro reino. La mayor´ de las LAN ejecutan un servidor DHCP ıa sin restringir, por lo que los intrusos pueden obtener una direcci´n IP v´lida y empezar a explorar o a nuestra red. A continuaci´n pueden ejecutar un esc´ner de vulnerabilidades (como Nesus) o un o a esc´ner de puertos como Nmap (Vease secci´n 17) para encontrar m´quinas de su inter´s y buscar a o a e brechas que puedan aprovechar. Acceso an´nimo a Internet: Aunque los intrusos no est´n interesados en lo que contienen nuestra o e LAN, pueden utilizar nuestro ancho de banda para otros usos. Al iniciar la sesi´n en nuestra red y o acceder despu´s a Internet, pueden piratear nuestra red y hacer el da˜o que quieran sin que podamos e n seguirles la pista. Cualquier ataque o da˜o perpetrado desde esta conexi´n se rastrear´ hacia nuestra n o a red. Las autoridades pueden llamar a nuestra puerta, no a la suya. Este m´todo de pirater´ se e ıa har´ cada vez m´s comun a medida que los intrusos se den cuenta de lo dif´ que es rastrear a a ıcil 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, a o algo bastante caro y poco habitual. Las LAN inal´mbricas no aseguradas ofrecen a los intrusos el a mejor acceso an´nimo que existe. o Vulnerabilidades espec´ ıficas de 802.11 : Adem´s de las inseguridades de las LAN inal´mbricas, existen a a algunos problemas espec´ ıficos del est´ndar 802.11. Algunos de ellos se deben a un mal dise˜o del a n fabricante o a las configuraciones predeterminadas, otros problemas se deben al dise˜o general de n est´ndar. a SSID predeterminados: Cada estaci´n base wifi tiene un identificador espec´ o ıfico que debemos conocer para entrar en la red. Este identificador proporciona alg´n nivel de seguridad si se implanta correcu tamente. 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. a
Jose Antonio Escart´ Vigo, Junio 2005. ın

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 o n o n las redes inal´mbricas. La estaci´n base debe emitir regularmente su existencia para que los emisores a o del usuario final puedan encontrar y negociar una sesi´n y como los dispositivos leg´ o ıtimos del usuario no se han autenticado todav´ esta se˜al debe transmitirse al descubierto. Cualquiera puede capturar ıa, n esa se˜al y, como m´ n ınimo saber que tenemos una LAN inal´mbrica. Muchos modelos nos permiten a desactivar la parte SSID de la transmisi´n para que, al menos, sea m´s dif´ de captar para las o a ıcil escuchas clandestinas de redes inal´mbricas, pero SSID se sigue enviando cuando una estaci´n se a o conecta, por lo que sigue existiendo una peque˜a ventana de vulnerabilidad. n Comunicaciones sin cifrar de forma predeterminada: La mayor´ de los dispositivos LAN inal´mbriıa a cos de hoy en d´ ofrecen la opci´n de activar el cifrado WEP est´ndar . El problema es que normalıa o a mente se tiene que hacer manualmente. Muchos fabricantes comercializan su equipamiento con esta opci´n desconectada de forma predeterminada. Muchos administradores tienen prisa por configurar o su red inal´mbrica y no tienen mucho tiempo para activar esta importante funci´n. Si una persona a o no t´cnica configura la red, es muy probable que no se active el cifrado. Tambi´n existe el problema e e 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 a cables. Punto d´bil de WEP : Incluso cuando se utiliza el cifrado incorporado, la se˜al sigue teniendo el riesgo e n de ser le´ ıda. Existen algunos puntos d´biles fundamentales en la implantaci´n del algoritmo RC4 e o 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 a e vectores de inicializaci´n d´biles con un porcentaje suficientemente alto como para que finalmente o e puedan descifrarse. Una vez roto el cifrado, no s´lo los atacantes pueden leer todo el tr´fico de la red o a inal´mbrica sino que probablemente puedan entrar en la red. Por lo tanto, aunque WEP ofrece una a protecci´n b´sica frente a escuchas clandestinas casuales, cualquier intruso serio tendr´ el software o a a como para descifrar potencialmente el cifrado.

14.3.

El fen´meno del “Wardriving” o

La b´squeda de LANs inal´mbricas inseguras se ha convertido en un pasatiempo popular entre los u a piratas inform´ticos. Esta pr´ctica se conoce como “wardrive” o “wardriving”, funciona de la misma forma a a que el marcado telef´nico en masa o guerra del marcado telef´nico, de los primeros piratas inform´ticos, o o a consiste en seleccionar de forma aleatoria bancos de n´meros de tel´fono para encontrar m´dems activos. u e o En general, los piratas inform´ticos conducen un autom´vil con una tarjeta inal´mbrica y alg´n softa o a u ware buscando una se˜al de una red. El software puede registrar la ubicaci´n exacta de la red inal´mbrica n o a a trav´s del GPS as´ como otra gran cantidad de informaci´n como: si est´ cifrada o no y que tipos de e ı o a 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 a urbanos y ´reas del centro donde hay muchos edificios altos. Las redes inal´mbricas que utilizan 802.11b a a tienen una distancia efectiva de un par de cientos de metros. Es f´cil crear un puede entre el espacio a 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 u a o la seguridad, los edificios altos suelen ser uno de los peores lugares para ejecutar una LAN inal´mbrica. a el t´ ıpico edificio de cristal permite que las se˜ales de su LAN viajen a mucha distancia. Si hay otros n edificios cerca, es casi seguro que podr´n recoger algunas de sus se˜ales. Incluso es peor los edificios altos a n que se encuentran junto a una zona residencial. Imaginemonos a los adolescentes y otros reci´n llegados e escaneando en busca de las LAN inal´mbricas disponibles, desde la comodidad de sus habitaciones en las a afueras de una ciudad. Aproximadamente un 60 por ciento de las LAN inal´mbricas son completamente inseguras. Los que a realizan los paseos de batalla han llegado incluso a anunciar puntos de acceso sin cables en bases de datos
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 14. Redes inal´mbricas a

261

online con mapas para que cualquiera pueda encontrar una LAN Inal´mbrica bierta en cualquier parte. a Las catalogan por tipo de equipamiento, cifradas o no cifradas, etc. Si tenemos una LAN inal´mbrica en a un ´rea metropolitana importante, es probable que est´ catalogada en uno de estos sistemas, esperando a e s´lo a que cualquier intruso oportunista de su zona al que le sobre algo de tiempo. Las siguientes son bases o de datos online que se pueden consultar para ver si nuestra LAN se encuentra ya catalogada: http://www.wifimaps.com/ http://www.nodedb.com/europe/es http://www.cybergeography.org/spanish/wireless.html Existe hasta un catalogo de simbolos estandarizado para identificar redes wifis urbanas:

Figura 14.1: S´ ımbolos urbanos de redes wifi
Jose Antonio Escart´ Vigo, Junio 2005. ın

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 campeonao to de Wardriving de Espa˜a (Canarias Wardrive’05), podemos encontrar mas informaci´n en esta direcci´n: n o o http://www.canariaswardrive.org/ Estas son las curiosas bases del concurso: “Solo necesitamos explorar nuestra propia ciudad empleando un simple port´til, pda o similar, a dotado de una tarjeta wifi. La competici´n se divide en tres categor´ territoriales: o ıas Competici´n de Wardrive en Tenerife o Competici´n de Wardrive en Gran Canaria o Competici´n de Wardrive en toda Canarias o En estas competiciones se permite la participaci´n individual o por equipos. Trabajando en o equipo se cubre m´s territorio y se encuentran los focos emisores m´s rapidamente. Una coma a petici´n sin car´cter regional es la de los MiniGames, se celebrar´n en Tenerife. En ellos se o a a 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 o a local. La participaci´n en este tipo de competici´n exige inexorablemente un comportamiento o o deportivo intachable.” Ha m´s de un administrador de sistemas se le pondr´n los pelos de punta al leer esto. a a

14.4.

Seguridad en redes inal´mbricas a

Si tenemos la red inal´mbrica sin cifrado, cualquier intruso podr´ leer los datos que mandemos o incluso a a entrar en nuestra red. Es necesario implantar una serie de medidas: cifrado de datos, concienciaci´n del o personal, auditorias, etc.

14.4.1.

Clave WEP (Wired Equivalente Privacy)

La clave WEP es una clave asim´trica, compartida por todos los usuarios inal´mbricos. Est´ basada e a a en el algoritmo RC4 y tiene un nivel de seguridad d´bil. Es debido a un fallo del algoritmo, crea una serie e de vectores de inicializaci´n d´biles que con un trafico de red suficiente, permiten deducir la clave. Fue o e introducida con el est´ndar 802.11a y actualmente ha quedado superado por WPA. a Si en vez de tener una red abierta, al menos, ciframos los datos con clave WEP, los intrusos tendr´n a que perder tiempo y esfuerzo en obtenerlos. Esto desanimar´ a intrusos casuales, y har´ que los serios a a tengan que quedarse por nuestra zona varios d´ aumentando las posibilidades de que el personal de ıas, seguridad o los vigilantes noten su presencia. La clave WEP, no es recomendable, ya que WPA representa una mejor forma de protecci´n. En o 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.

14.4.2.

Clave WPA (Wifi Protected Access)

Esta destinada a garantizar la seguridad en las especificaciones IEEE 802.11a, 802.11b y 802.11g, mejorando las claves WEP; En abril de 2003 aparecieron en el mercado los primeros productos que incorporaban tecnolog´ de cifrado WPA. ıa En la figura 14.2 podemos ver una comparativa entre las claves WEP Y WPA.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 14. Redes inal´mbricas a

263

Figura 14.2: Comparativa entre WEP y WPA Privacidad e integridad con TKIP TKIP (Temporal Key Integrity Protocol) ampl´ y mejora a WEP, solucionando sus vulnerabilidades. ıa Ampl´ la longitud de la clave de 40 a 128 bits y pasa de ser unica y est´tica, a ser generada de forma ıa ´ a din´mica, para cada usuario, para cada sesi´n (teniendo una duraci´n limitada) y para cada paquete a o o enviado. Conceptualmente el vector de inicializaci´n pasa de 24 a 48 bits, minimizando la reutilizaci´n de o o claves. Tambi´n utiliza claves para tr´fico de difusi´n y multidifusi´n. e a o o 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 o n 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 u u utilizar´ para el cifrado de cada fragmento. a Autenticaci´n mediante 802.1X/EAP o El est´ndar IEEE 802.11x define un protocolo para encapsular, protocolos de autenticaci´n sobre a o protocolos de enlace de datos. IEEE 802.11x permite utilizar diversos m´todos para autentificar al usuario e a trav´s del protocolo de autenticaci´n extensible (EAP). Se concibe como una ampliaci´n de la capa de e o o enlace de datos:

Figura 14.3: Funcionamiento WPA/EAP
Jose Antonio Escart´ Vigo, Junio 2005. ın

264 IEEE 802.11x define 3 entidades:

Servidor Linux para conexiones seguras de una LAN a Internet

El solicitante (supplicant), reside en la estaci´n inal´mbrica o a El autenticador (authenticator), reside en el AP El servidor de autenticaci´n, reside en un servidor AAA (Authentication, Authorization, & Accouno ting), como los servidores Radius Utiliza un m´todo de control de acceso basado en el concepto de puerto (PAE, Port Acess Entity). El e autenticador crea un puerto l´gico por cliente, existiendo dos caminos uno autorizado y otro no. Mientras o el cliente no se ha autenticado con ´xito unicamente se permite tr´fico 802.11x/EAP hacia el servidor de e ´ a autenticaci´n. o

Figura 14.4: Autenticaci´n mediante un servidor Radius o 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 o unicamente el tr´fico 802.11x, el resto de tr´fico se bloquea. El cliente env´ un mensaje “EAP Start”. El ´ a a ıa 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 o o se comunicar´n directamente, utilizando un cierto algoritmo de autenticaci´n que pueden negociar. Si el a o servidor de autenticaci´n acepta la autenticaci´n, el autenticador pasa el puerto del cliente a un estado o o autorizado y el tr´fico ser´ permitido. a a Los m´todos de autenticaci´n definidos en WPA son: EAP-TLS, EAP-TTLS y PEAP. Estos m´todos se e o e basan en la infraestructura de clave p´blica (PKI) para autenticar al usuario y al servidor de autenticaci´n, u o utilizando certificados digitales. La premisa es la existencia de una Autoridad de Certificaci´n (CA) de o confianza para la corporaci´n, que emita certificados para los usuarios y el servidor de autenticaci´n. La o o CA puede ser privada (empresarial) o p´blica (basada en CAs de Internet como Verisign). u EAP-TLS (TRANSPORT LAYER SECURITY) Los usuarios y el servidor de autenticaci´n deben tener un certificado digital. El solicitante, tras la o asociaci´n y la creaci´n del puerto de acceso por el autenticador, env´ su identificaci´n (nombre de o o ıa o usuario) hacia el autenticador y ´ste hacia servidor de autenticaci´n. Este ultimo env´ su certificado al e o ´ ıa cliente, al validarlo el cliente responde con su certificado. El servidor de autenticaci´n comprueba si el o certificado es v´lido y corresponde con el nombre de usuario antes enviado, si es as´ autentica al cliente. a ı Cliente y servidor generan la clave de cifrado para esa sesi´n, y el servidor de autenticaci´n la env´ al o o ıa punto de acceso, de forma que ya puede comunicarse el cliente de forma segura.
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 14. Redes inal´mbricas a PEAP y EAP-TTLS

265

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 e o e EAP (PEAP) y EAP-Tunneled TLS (EAP-TTLS), que requieren unicamente del certificado en el servidor ´ de autenticaci´n. o La idea subyacente es que si el servidor de autenticaci´n dispone de un certificado digital, el cliente o podr´ enviarle datos cifrados, cre´ndose un “t´nel de seguridad” por donde el cliente podr´ enviar sus a a u a datos de autenticaci´n. o PEAP fue dise˜ado por Microsoft, Cisco y RSA. Cuando el cliente ha validado el certificado del n servidor de autenticaci´n y creado el t´nel, usando TLS se inicia una nueva autenticaci´n donde negocian o u o un m´todo, por ejemplo MS-CHAP v2, tras autentificar el servidor al cliente, ambos generan la clave de e sesi´n. EAP-TTLS fue dise˜ado por Funk Software. Tambi´n se basa en crear en primer lugar un t´nel TLS o n e u 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. e e WPA y seguridad en peque˜ as oficinas n Los m´todos soportados por EAP necesitan de una cierta infraestructura, fundamentalmente de un e servidor Radius, lo que puede limitar su implementaci´n en redes peque˜as. Wifi ofrece los beneficios de o n WPA mediante el uso de una clave pre-compartida (PSK, pre-shared key) o contrase˜a. Esto posibilita el n 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 802.11i (denominado RSN: Robust Security Network) marcan a 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 a o a 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 a cifrado en sistemas de computaci´n y comunicaciones. WPA indica el soporte de AES como opcional, o existiendo dispositivos que lo implementan. Implementaci´n de WPA o Para soportar WPA, en caso de que los productos no est´n certificados por su uso, debemos actualizar e el firmware de los puntos de acceso y de los adaptadores de red inal´mbricos de las estaciones. En las a estaciones se deber´ actualizar el sistema operativo para soportar 802.11x y el m´todo EAP elegido. Por a e ejemplo, Windows XP soporta WPA mediante una actualizaci´n. o Seg´n el m´todo EAP elegido habr´ que definir la configuraci´n del servidor Radius. Tambi´n es posible u e a o e que tengamos que utilizar o implementar los servicios de una Autoridad de certificaci´n. o Conclusiones sobre el uso de WPA La seguridad es una cuesti´n conjunta por lo que las directivas aplicables a los segmentos de redes o inal´mbricas deben integrarse con el resto de directivas. Por ejemplo, el uso de cortafuegos para conectar la a red inal´mbrica con la red corporativa, a˜adiendo capacidades de detecci´n de intrusos e incluso de analizar a n o el tr´fico inal´mbrico y detectar puntos de acceso no autorizados son mecanismos de seguridad necesarios a a para garantizar los requerimientos de seguridad. Asimismo, tanto los clientes como servidores deber´n de a 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 o o o A la espera de poder implementar el est´ndar final sobre seguridad en redes inal´mbricas (802.11i) a a la especificaci´n Wifi Protected Access (WPA) ofrece una soluci´n fiable y robusta para garantizar la o o privacidad, integridad y autenticaci´n. Garantizando, adem´s, la interoperabilidad entre fabricantes y o a ofreciendo un modo “natural” de migrar hacia WPA2.
Jose Antonio Escart´ Vigo, Junio 2005. ın

266

Servidor Linux para conexiones seguras de una LAN a Internet

14.4.3.

Clave WPA2 (Est´ndar 802.11i) a

Aunque hace ya varios a˜os que se desvelaron las vulnerabilidades del protocolo WEP (raz´n por n o la que fue sustituido por WPA basado en TKIP), esta tecnolog´ dej´ de ser un borrador a finales de ıa o junio de 2004, por lo que ya podemos referirnos a ella como un est´ndar aprobado por el IEEE. Esta a nueva especificaci´n utiliza el algoritmo de cifrado AES (Advanced Encryption Standard), un mecanismo o extremadamente seguro que mereci´ en su d´ la aprobaci´n del NIST (National Institute of Standards o ıa o and Technology). WPA2 se basa en 802.11i y es compatible con WPA. La llegada de 802.11i 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 a a est´ndar. a Dentro de alg´n tiempo WPA2 se convertir´ en el est´ndar de seguridad para las redes inal´mbricas. u a a a

14.4.4.

Medidas preventivas

La implantaci´n de cualquier acceso inal´mbrico tiene un riesgo, pero se puede reducir tomando una o a serie de medidas preventivas. Tratar la red inal´mbrica como de no confianza a Como no se puede controlar el tr´fico entrante por el aire, no se deber´ tratar de forma distinta a la a ıa parte p´blica del cortafuegos. Si nos lo podemos permitir, es recomendable situar un cortafuegos entre su u red inal´mbrica y la LAN privada o situarla en una DMZ (Zona desmilitarizada). Despu´s se puede filtrar a e determinados tipos de paquetes de ataque, limitar los tipos de tr´fico y registrar cualquier actividad que a provenga de dicha interfaz. Auditar el per´ ımetro inal´mbrico regularmente a Hay que probar la distancia de la se˜al, si la red est´ superpuesta sobre otras redes cercanas. n a Es necesario realizar una tarea peri´dica para localizar cualquier punto de acceso “no controlado”. o La tecnolog´ inal´mbrica es ahora tan barata que cualquier usuario de nuestro sistema puede comprar, ıa a instalar y configurar una tarjeta wifi para alg´n prop´sito licito o no, como puede ser una demostraci´n sin u o o cables en una sala de conferencias, abriendo as´ nuestra red para los ataques inal´mbricos. Actualmente ı a podemos encontrar hasta tarjetas de red wifi para USB. Asimismo, no hay que olvidar que muchos PCs nuevos, especialmente port´tiles, tienen incorporadas a tarjetas wifi y habilitarlas es cosa de ni˜os. Podemos estar funcionando de forma inal´mbrica en nuestra n a red sin darnos cuenta. Una auditor´ inal´mbrica es la unica forma de descubrirlo. ıa a ´ Configurar correctamente la red inal´mbrica a 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 o una sesi´n con la estaci´n base. Act´a como una contrase˜a d´bil. Sin embargo, si una escucha o o u n e clandestina descifra el cifrado, podr´ obtener el SSID f´cilmente. a a Restringir el acceso por la direcci´n MAC: As´ es m´s dif´ para alguien obtener acceso a nuestra o ı a ıcil red a trav´s de una estaci´n base inal´mbrica. En la mayor´ de los puntos de acceso, podemos e o a ıa restringir el mismo a determinadas direcciones MAC hardware, un m´todo bastante s´lido para la e o autenticaci´n, ya que s´lo las personas con la tarjeta con un n´mero de serie correcto pueden obtener o o u acceso. Sin embargo, puede ser inc´modo para un administrador mantener el registro de las tarjetas o NIC autorizadas, eso si contar que no permite el acceso instant´neo a un nuevo usuario en nuestra a 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. o
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 14. Redes inal´mbricas a Formar al personal

267

Igual que sucede con todo lo referente a la seguridad inform´tica, el elemento humano puede ser el a punto m´s d´bil o el m´s fuerte. Hay que aseg´rese de que los guardas de seguridad, los recepcionistas y a e a u 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 n techo del mismo, es muy probable que se trate de alguien que busca entrar en nuestra red inal´mbrica. a Asimismo, hay que desarrollar una pol´ ıtica a nivel de toda la empresa. Algunas veces una demostraci´n o es la mejor forma de mostrar este tipo de peligro. Un personal informado puede ser nuestra mejor defensa.

14.5.

Servidor Radius: FreeRadius

Lo que vamos a montar es un sistema EAP-TLS (Vease secci´n 14.4.2) donde el servidor y los usuarios o 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. a 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: o HowTo 802.1x: http://tldp.org/HOWTO/html single/8021X-HOWTO/ HowTo EAP-TLS: http://www.missl.cs.umd.edu/wireless/eaptls/ HowTo Radius en WindowsXP: http://www.dslreports.com/forum/remark,9286052˜mode=flat

14.5.1.

Configurar FreeRadius con EAP-TLS

Los archivos de configuraci´n se encuentra en: /etc/freeradius/, los comentarios que llevan integrao dos en el c´digo ayudan bastante a la configuraci´n y es muy recomendable leerlos. o o Hay que realizar las siguientes modificaciones: /etc/freeradius/radiusd.conf : Fichero de configuraci´n general de Radius. Aqu´ definimos los sisteo ı mas de autenticaci´n. Hay muchas partes del fichero que no he utilizado. o /etc/freeradius/eap.conf : Fichero de configuraci´n del servicio EAP del servidor radius. o /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 172.16.1.253) client 172.16.1.253/32 { secret = clave_secreta shortname = localhost }
Jose Antonio Escart´ Vigo, Junio 2005. ın

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 n josan Auth-Type := Local, User-Password == "atitelovoyadecir" Service-Type = Framed-User, Framed-Protocol = PPP, Framed-IP-Address = 192.168.0.2, Framed-IP-Netmask = 255.255.255.0, 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 a y la IP.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 14. Redes inal´mbricas a

269

14.5.2.

Generar los certificados

Respecto a la generaci´n de certificados, obviamente la idea es que los emita una entidad certificadora o contrastada, pero tambi´n nos los podemos hacer nosotros. e 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 o Escogeremos la segunda opci´n, usando los scripts predefinidos, ya que, con muy pocas modificaciones o 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: o #apt-get source freeradius, nos descargar´ los fuentes en el directorio actual. a 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 n Perl para crear Autoridades de Certificaci´n y cuyo path no suele estar en el $PATH del sistema. o 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 unico que deberemos de hacer es: ´ #apt-get install ./certs.sh Lo que se muestra por pantalla ser´ algo parecido a esto: a # ./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. a Es recomendable colocar estos certificados en /etc/freeradius/certs, ya que los archivos de configuraci´n o de freeradius apuntan a ese directorio y tendremos menos cosas que modificar.

Jose Antonio Escart´ Vigo, Junio 2005. ın

270

Servidor Linux para conexiones seguras de una LAN a Internet

14.5.3.

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 n hici´ramos nos pedir´ la clave al arrancar al demonio y no podr´ arrancarlo iniciar el sistema. e ıa ıa 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 a servicio de Radius. La configuraci´n es realmente muy sencilla, yo lo tengo configurado como un router o entre dos redes la de usuarios (192.168.1.0/24) e Internet (en el gr´fico la 172.16.1.253). a 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 ı n deberemos colocar la misma clave (lo podemos observar en la figura 14.6).

14.5.4.

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 14.6. Hay que introducir la direcci´n IP de la m´quina y el puerto de escucha del servicio Radius. o a Radius Key es la clave secreta que hemos elegido en /etc/freeradius/client.conf

Figura 14.6: Router 3Com con WPA y servidor radius

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 14. Redes inal´mbricas a

271

14.5.5.

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. o a 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 802.11g 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 o Radius: network={ ssid="example" proto=WPA key_mgmt=WPA-EAP pairwise=TKIP group=TKIP eap=TLS identity="user@example.com" 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: e #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 e variar´ dependiendo de nuestra configuraci´n de hardware. a o 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: o #wpa_supplicant -dd -i eth1 -c /etc/wpa_supplicant.conf -D ipw

Jose Antonio Escart´ Vigo, Junio 2005. ın

272

Servidor Linux para conexiones seguras de una LAN a Internet

14.5.6.

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 n 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, : e Elegimos la opci´n “agregar”, “certificados”. Pulsando sobre ´l deber´ de aparecer: o e ıa 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”. o a 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” o Despu´s cambiamos a la pesta˜a de autenticaci´n y establecemos como EAP “tarjeta inteligente u e n o otro certificado” y activamos la opci´n “Autenticar como equipo cuando la informaci´n del equipo o o 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 o hemos instalado. Ahora, si volvemos a la pantalla principal de selecci´n de redes detectadas y si pulsamos sobre nuestra o 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 a est´ validando el servidor y que presionemos “aceptar” si el certificado es correcto, una vez presionemos a ya no ser´ necesario volver a repetir el proceso y si todo va bien podremos conectarnos de forma segura a a nuestra red.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 14. Redes inal´mbricas a

273

14.6.

Herramientas de seguridad

Las redes wifi son inseguras por definici´n, el hecho de comunicarse por un medio de libre acceso como o es el aire implica que la transmisi´n ser´ vulnerable. o a 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´ AirSnort que trata de descubrir la clave o e ıa WEP, si la utilizamos para el cifrado de datos.

14.6.1.

Descubrir redes ilegales e intrusos: Kismet Wireless

Kismet Wireless es uno de los sniffers inal´mbricos principales para Linux, pero existen otros programas a como AeroSniff o Prism2Dump. He elegido Kismet debido a su creciente oferta de m´dulos de soporte. o Es una herramienta cliente-servidor como Nessus (V´ase apartado 17.1), que proporciona incluso m´s e a flexibilidad. Funciona con otros programas y puede dise˜arse para recopilar claves de cifrado para los intentos n 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. o a Instalar Kismet Se puede obtener la versi´n m´s actualizada del programa en la direcci´n: o a o http://www.kismetwireless.net 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 ı o y las preferencias de la interfaz wifi (el cuadro 14.2 recoge los par´metros que se pueden configurar) a 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) a a Ya esta listo para auditar la red inal´mbrica a

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. a a 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 o inal´mbricas activas que puede ver Kismet y alguna informaci´n b´sica sobre ellas: el SSID de la red a o a (si est´ disponible), el tipo (punto de acceso frente a nodo), si est´ cifrada o no utilizando WEP, el a a canal en el que se est´ transmitiendo, el n´mero de paquetes interceptados hasta el momento, cuala u quier indicador sobre los datos y la cantidad de datos que est´n por la red. La pantalla est´ codificada a a con colores, apareciendo en color rojo las redes activas y en negro las que no est´n activas. a El cuadro Info (informaci´n) que se encuentra a la derecha de la pantalla muestra las estad´ o ısticas globales para esta sesi´n de captura (incluyendo el n´mero total de redes detectadas, el n´mero total o u u de paquetes, el n´mero de paquetes cifrados, las redes d´biles percibidas, los paquetes con un alto u e nivel de ruido, los paquetes descartados y la media de paquetes por segundo.
Jose Antonio Escart´ Vigo, Junio 2005. ın

274

Servidor Linux para conexiones seguras de una LAN a Internet

Cuadro 14.2: Archivo de configuraci´n de Kismet o Descripci´n o Define las interfaces que va a escuchar Kismet. Normalmente la interfaz inal´mbrica principal (wlan0, eth1, etc.) ya deber´ estar configurada a ıa aqu´ Si desea a˜adir interfaces adicionales puede hacerlo en el formato: ı. n source=type, interface, name Fuzzy encryption Muestra cualquier paquete que hayamos identificado como “sin descifrar” (Cifrado confuso) para las estaciones que est´n utilizando m´todos de cifrado sin definir o a e propietarios. Generalmente se deja desconectado a no ser que su tarjeta est´ informando sobre redes cifradas como “sin descifrar”. e Filtering packet logs Limita el paquete que se registra. Utilice la opci´n noiselog para quitar o (Filtrar registros de pa- cualquier paquete que parezca que se va a desglosar o fragmentar por el quete) 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 n de su registro reducido. La opci´n beaconlog quita todos los paquetes de o se˜ales luminosas, excepto el primero, de un punto de acceso determinan do. La configuraci´n phylog quita cualquier paquete de la capa f´ o ısica que a veces se recogen. Tambi´n puede utilizar cualquier combinaci´n de estas e o configuraciones. Decrypt WEP keys Descifra los paquetes de datos interceptados al momento. Sin embargo, pri(Descifrar claves WEP) mero tiene que tener la clave que a veces, se obtiene utilizando AirSnort. Cada punto de acceso necesita una declaraci´n independiente en el formato o o bssid:key, siendo bssid la direcci´n MAC del punto de acceso y key la clave para dicho punto de acceso Using an external IDS Env´ paquetes a un IDS externo para un an´lisis posterior ıa a (Utilizar un IDS externo) Par´metro a Capture source (Origen de captura) Cuadro 14.3: Configuraci´n de la la interfaz UI de Kismet o Descripci´n o 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 a 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 o o e que jugar con esta configuraci´n un poco hasta obtener los colores correctos. o

Configuraci´n o Columns (Columnas)

Colors (Colores)

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. a 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 o e Kismet escoge autom´ticamente las coordenadas de las redes detectadas y las registra. a Podemos ir un paso m´s all´ y crear un mapa con estas coordenadas. Kismet incluye un programa a a
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 14. Redes inal´mbricas a

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 o 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 o y que las muestre Abre una ventana emergenete en servidores Kismet, lo que permite supervisar simult´neamente a dos o m´s servidores Kismet en distintos anfitriones (hay que recordar que se trata de una a arquitectura cliente-servidor) Sigue el centro estimado de una red y muestra un comp´s a Agrupa las redes codificadas actualmente Obtiene una lista de todos los comandos posibles Muestra informaci´n detallada sobre la red o el grupo actual o Muestra los niveles de se˜al/capacidad/ruido si la tarjeta informa sobre ellos n Silencia el sonido y la voz, si est´n activados (o los activa si est´n silenciados) a a 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 a 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´ el nivel de zoom del panel de presentaci´n de la red a pantalla completa (o vuelve a su ıa o tama˜o normal si ya estaba en pantalla completa) n

denominado GPSMPA que traza autom´ticamente los datos recopilados en mapas en formato .gps El a 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 o 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 e a a n entrates y detectar´ el tr´fico inal´mbrico que se sabe est´ asociado con los ataques a redes wifi o activia a a a dades inal´mbricas sospechosas. a Detecta unos 10 tipos diferentes de tr´fico, incluyendo sondeos del programa NetStumbler (herramienta a para Windows), la actividad de Airjack y otras herramientas de pirater´ inal´mbrica. Y, como es de ıa a libre distribuci´n, siempre podemos ampliarlo mediante la escritura de nuestras propias alertas. Tambi´n o e podemos canalizar los datos de Kismet a trav´s de un IDS tradicional como Snort (V´ase secci´n 13.5) e e o para obtener un an´lisis m´s detallado. a a La opci´n IDS se configura en /etc/kismet/kismet.conf y de forma predeterminada est´ deshabilitada. o a Tambi´n puede configurar Kismet para recopilar claves d´biles conocidas criptogr´ficamente para un e e a programa como AirSnort, que analiza paquetes inal´mbricos e intenta descifrar el cifrado WEP. Pasemos a a describir el funcionamiento de este programa.

14.6.2.

Desencriptar claves inal´mbricas WEP: Airsnort a

Si utilizamos criptograf´ por clave WEP, cosa que no recomiendo, podemos probar si nuestra clave se ıa puede deducir facilmente con esta herramienta. Actualmente la encriptaci´n WPA es m´s segura y es una o a mejor soluci´n para servidores. o AirSnort se desarroll´ como una aplicaci´n pr´ctica para demostrar la debilidad de WEP, el protocolo o o a b´sico de cifrado inal´mbrico. Una nota sobre las debilidades en el algoritmo de programaci´n de claves de a a o
Jose Antonio Escart´ Vigo, Junio 2005. ın

276

Servidor Linux para conexiones seguras de una LAN a Internet

RC4, escrita por los expertos criptogr´ficos Fluhrer, Martin y Shamir, inclu´ detalles sobre una te´rica a ıa o debilidad en el algoritmo WEP, describiendo la debilidad de algunos vectores de inicializaci´n. Los paquetes o cifrados con estos vectores d´biles se pod´ coleccionar y al final habr´ suficientes datos para extrapolar la e ıan ıa clave secreta compartida, lo que permitir´ descifrar f´cilmente los paquetes. Poco despu´s, se lanzaron dos ıa a e 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 a adicional como sniffer inal´mbrico. a AirSnort es ahora un proyecto de libre distribuci´n que se encuentra en SourceForge.net y que se ha o extendido y mejorado considerablemente desde su lanzamiento. Usos de AirSnort ¿Por qu´ utilizar AirSnort en una red inal´mbrica? Alguien podr´ decir que no existe un uso leg´ e a ıa ıtimo para el programa y su unico prop´sito es el de ser una herramienta para el asalto de redes. Creo que la ´ o unica forma de saber lo expuesta que est´ nuestra red inal´mbrica es hacer lo que har´ un intruso para ´ a a ıa comprobar si nuestro cifrado se puede descifrar y la cantidad de tiempo que tardar´ en hacerlo. AirSnort ıa lleva a cabo precisamente esta tarea. Al intentar descifrar el cifrado inal´mbrico, podemos ver si se puede hacer. Si se est´ utilizando un a a WEP est´ndar, entonces es simplemente cuesti´n de tiempo. Es una realidad matem´tica que se puede a o a descifrar en alg´n punto utilizando esta herramienta. La cuesti´n es cuanto tardaremos en hacerlo. Si u o 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´ o incluso de semanas, lo que sit´a a nuestra a n o ıas u red fuera del reino de lo pr´ctico para la mayor´ de los piratas inform´ticos casuales. Sin embargo, si es a ıa a una red ocupada, alguien podr´ recoger los paquetes suficientes para descifra nuestro cifrado en cuesti´n ıa o de horas o en un d´ Saber todo esto nos ayuda a proteger mejor nuestra red. Puede justificar incluir ıa. m´s protecciones, como mejores controles f´ a ısicos o limitar el tr´fico en la red. Tambi´n puede justificar la a e actualizaci´n de nuestro equipamiento inal´mbrico, como por ejemplo a un sistema WPA con un servidor o a Radius, como el que se propone en este proyecto. Una red inal´mbrica que utiliza este protocolo puede a ser, actualmente (solo actualmente) indescifrable. Podemos descubrir que el nivel de tr´fico no hace que a sea pr´ctico descifrar el cifrado. De cualquier forma, dormiremos mucho mejor por la noche, si lo sabemos. a Ejecutar AirSnort Para instalarlo solo hay que ejecutar la siguiente instrucci´n: o #apt-get install airsnort Tiene tres archivos ejecutables principales: airsnort: Recopila los paquetes desde alg´n origen, normalmente la tarjeta de red inal´mbrica u a gencases: Ordena los datos capturados en busca de claves d´biles e decrypt: Realiza los intentos en desconexi´n de descifrado para los archivos cargados desde otro o origen AirSnort acepta archivos de otros sniffers inal´mbricos siempre que se guarden en formato PCAP. Con a el tiempo, Kismet separar´ espec´ a ıficamente los paquetes interesantes para AirSnort, ahorr´ndonos este a paso. No es necesario tener toda la colecci´n de datos a la vez. AirSnort puede guardar una sesi´n y retomarla o o 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 a o 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 o a n 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
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 14. Redes inal´mbricas a

277

interesantes y el n´mero total de paquetes cifrados y sin cifrar. La secci´n superior muestra nuestras u o 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 u 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. a o

Figura 14.7: Imagen de AirSnort A continuaci´n, es el momento de sentarnos a recopilar paquetes. No hay que esperar descifrar claves o WEP en un momento. Para que AirSnot funcione correctamente, necesita aproximadamente entre 1.500 y 4.500 paquetes con claves d´biles, es decir, aproximadamente entre 100MB y 500MB de datos. En una red e moderadamente ocupada, podemos tardar uno o m´s d´ en recopilar esta cantidad de datos. En redes a ıas m´s lentas, podemos tardar m´s y en redes ocupadas mucho menos. Hay que esperar, al menos, tardar un a a par de horas, aunque seguramente sea m´s. Evidentemente, todo se basa en tener un poco de suerte, por a 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 hexae decimal en la parte izquierda de la pantalla y los extremos de la sesi´n de captura. o ¿Qu´ pasar´ si encontr´semos las claves WEP? Bueno, hay que tranquilizarse, que no nos entre el e ıa a p´nico ya que la mayor´ de los intrusos casuales no se molestar´n lo m´s m´ a ıa a a ınimo. Sin embargo deber´ ıamos pensar en tomar medidas para aumentar la seguridad de nuestra red inal´mbrica para que sea m´s dif´ a a ıcil recopilar estos datos. Hay que seguir muchos pasos que var´ desde reemplazar el equipamiento hasta ıan volver a configurar y cambiar el AP (punto de acceso). Tendremos que tomar decisiones bas´ndonos en la a confidencialidad de los datos que tratamos en nuestra red.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 15

Servicio de administraci´n por Web: o WebMin
Para acceder a la configuraci´n de Webmin, si no hemos cambiado los puertos por defecto: o http://127.0.0.1:10000, o http://localhost:10000 , https si usamos SSL Webmin est´ dividido en diversos m´dulos. Cada uno de estos se encarga de la administraci´n de una a o o 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 confio o a guraci´n predeterminada para la versi´n y distribuci´n de Linux seleccionadas. o o o Los m´dulos incluidos por defecto en Debian nos permiten administrar entre otros servicios Apache, o 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 o o debido a que alguna parte del software se ha instalado en directorios que no son est´ndar en Linux. a

15.1.

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. o En el caso de que se nos olvide la contrase˜a de acceso y tengamos acceso como root al ordenador, se n 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 o configurar los usuarios que tendr´n acceso a Webmin. Permite al administrador del sistema crear diferentes a 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 o o o servidor de impresi´n crear´ o ıamos un usuario que pudiera administrar las colas de impresi´n. o De esta forma es posible crear diferentes usuarios en funci´n de los m´dulos a los que tendr´n acceso, o o a delegando f´cilmente la administraci´n de determinados servicios del ordenador a diferentes usuarios y a o siendo posible incluso determinar que aspectos de un determinado servicio podr´ administrar. a

15.2.

Secciones Webmin

La secci´n Webmin nos da acceso a las diferentes opciones de configuraci´n de Webmin, as´ como a o o ı los logs de actuaciones, el ´ ındice de servidores Webmin y los usuarios Webmin.

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 o o a propio Webmin como instalar nuevos m´dulos, actualizar Webmin, cambiar el idioma, a˜adir, eliminar o o n modificar usuarios de Webmin, cambiar el puerto utilizado, etc.

Figura 15.1: Webmin pantalla de configuraci´n o

Control de acceso a IP
Ya que Webmin tienen su propio servidor web (miniserv.pl) desde esta opci´n podemos seleccionar o qu´ direcciones de red (como 192.168.100.0), direcciones de host (como 192.168.100.7) o nombres de hosts e (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 10000. En el caso o de que nuestro ordenador tenga asignada m´s de una direcci´n IP tambi´n podremos establecer qu´ dia o e e recci´n IP deber´ atender el servidor web de Webmin, ya que por defecto el servidor aceptar´ peticiones o a a 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. ı a De esta forma podremos monitorizar f´cilmente las actuaciones realizadas por los diferentes usuarios a los a que proporcionemos acceso a Webmin. Webmin nos permite guardar en el historial las acciones realizadas en funci´n del m´dulo utilizado o o o del usuario. Se permite programar cuando se limpiar´ el historial para evitar que el tama˜o del mismo a n 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 confio o guraremos 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.
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 15. Servicio de administraci´n por Web: WebMin o

281

Desde esta opci´n se modifican los colores y tipos de letras utilizados para visualizar las p´ginas de o a Webmin.

M´dulos de Webmin o
Webmin est´ formado por diversos m´dulos. cada uno de estos m´dulos se encargan de realizar una a o o 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. o n o Est´ se encuentra dividida en tres secciones: a Instalar m´dulo o Clonar m´dulo o Borrar m´dulos o Instalar m´dulo La secci´n Instalar m´dulo permite instalar un nuevo m´dulo de Webmin, ya sea o o o o 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 o o Clonar un m´dulo Esta opci´n permite al administrador del sistema duplicar un m´dulo para permio o o tir 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 administraa o o ci´n de Apache para permitir a diferentes usuarios acceder de forma independiente a la versi´n de Apache o o que sea necesario. Eliminar m´dulos Desde esta ultima secci´n, seleccionaremos y borraremos aquellos m´dulos que no o ´ o o nos sean de inter´s o no se vayan a utilizar. As´ por ejemplo, si no tenemos instalado en nuestro ordenador e ı, PostgreSQL podemos eliminar el m´dulo utilizando para su administraci´n. o o

Sistema operativo
Desde esta opci´n podremos especificar cual es nuestro sistema operativo. Este proceso deber´ realizarse o a si, por ejemplo, hemos actualizado el sistema operativo instalando una versi´n nueva, la cual modifica la o estructura de directorios en los que se guardaba la configuraci´n de los diferentes servicios del sistema. o

Lenguaje
Se emplea para seleccionar el idioma utilizado para visualizar los textos en los m´dulos. o

Opciones de p´gina ´ a ındice
En esta opci´n seleccionaremos el formato de la p´gina inicial de Webmin y de las diferentes p´ginas o a a ´ ındice de cada una de las categor´ existentes, indicando el n´mero de iconos a visualizar en cada fila. ıas u Tambi´n podemos indicar si queremos agrupar los m´dulos en funci´n de la categor´ a la cual pertee o o ıa necen.

Mejorar Webmin
Desde esta p´gina es posible actualizar Webmin a la ultima versi´n disponible de forma autom´tica o a ´ o a desde un archivo que hayamos descargado de Internet. Utiliza un gestor de paquetes para realizar la tarea, en nuestro caso apt.
Jose Antonio Escart´ Vigo, Junio 2005. ın

282

Servidor Linux para conexiones seguras de una LAN a Internet

Autenticaci´n o
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 n o n a 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 o ataques. La primera opci´n que encontramos en la ficha es Tiempo m´ximo de clave de acceso. Si activamos o a esta opci´n, se bloquear´ el acceso al ordenador si se producen una serie de fallos en unos segundos o a determinados, esto indicar´ que alguien est´ ejecutando una aplicaci´n autom´tica para descubrir a a o a nuestra contrase˜a. n La Autenticaci´n de sesi´n nos proporciona un m´todo para desconectar un usuario de Webmin si o o e transcurre un determinado tiempo sin que ´ste realice alguna operaci´n. e o Tambi´n podemos especificar si permitimos el acceso a Webmin empleando las cuentas de usuario e 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 o no, podr´ trabajar con Webmin. a

Reasignando m´dulos o
Como ya se ha comentado Webmin agrupa los m´dulos instalados en diferentes categor´ o ıas. Estas categor´ est´n definidas en funci´n de la tarea que realiza el m´dulo. Desde estas opci´n Webmin nos ıas a o o o permite asignar un m´dulo a una nueva categor´ en el caso de que no estemos de acuerdo con la categor´ o ıa ıa asignada por defecto. Algunos m´dulos desarrollados antes de que se crearan las categor´ en Webmin se asignan por defecto o ıas a la categor´ Otros. ıa

Editar categor´ ıas
Utilizaremos esta opci´n para crear nuevas categor´ o editar las existentes. o ıas

Temas de Webmin
En estas secci´n se puede modificar el aspecto y los colores de Webmin, utilizando temas. o Los temas de Webmin son muy flexibles, permitiendo al desarrollador modificar pr´cticamente cualquier a aspecto de la apariencia y distribuci´n de los elementos de Webmin. o

Referenciadores de confianza
Al estar basado en archivos web y accederse a ´l desde un navegador web, uno de los peligros con los e que podemos encontrarnos es el hecho de que la informaci´n de autenticaci´n se guarda en el navegador o o y puede ser reenviada de forma autom´tica desde ´l. Esto puede causar que otro usuario que emplee el a e mismo navegador tenga acceso a nuestro sistema sin conocer tan si quiera la contrase˜a o nombre de n usuario de Webmin. En esta secci´n podremos indicar que hosts tienen acceso a Webmin, limitando de esta forma desde o qu´ ordenadores se podr´ utilizar. e a

Acceso an´nimo a m´dulo o o
Esta secci´n permite garantizar acceso a m´dulos selectos de Webmin y a trayectorias sin necesidad o o de que los clientes hagan login.
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 15. Servicio de administraci´n por Web: WebMin o

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 o
Si tenemos instaladas en nuestro ordenador las librer´ OpenSSL y el m´dulo de Perl Net::SSLeay ıas o podremos emplear conexiones encriptadas con SSL para acceder a Webmin. Para acceder a Webmin utilizaremos una conexi´n segura, de la forma: o https://127.0.0.1:10000, ´ https://localhost:10000 o As´ incrementaremos la seguridad de Webmin, ya que la informaci´n, como por ejemplo el nombre de ı o usuario y contrase˜a, se enviar´ de forma encriptada. n a Aunque se instala OpenSSL por defecto en la mayor´ de distribuciones de Linux actuales, es posible ıa 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 o configurar Webmin para que no sea necesario proporcionar un usuario y contrase˜a para utilizarlo. Los n usuarios pueden solicitar un certificado personal en el m´dulo de usuarios de Webmin y agregarlo al o navegador, de esta forma el navegador podr´ autenticarse de forma autom´tica y segura. a a El problema que puede surgir al utilizar este m´todo de autenticaci´n es que cualquier usuario con e o acceso a un navegador que contenga un certificado v´lido para acceder a Webmin podr´ utilizar las a a herramientas de administraci´n. Este m´todo tambi´n inv´lida pol´ o e e a ıticas de seguridad como la desconexi´n o del usuario despu´s de un determinado periodo de inactividad, ya que simplemente volviendo a abrir el e navegador podr´ ıamos acceder.

15.3.

M´dulos de Webmin o

Existen diversos m´dulos, que podemos instalar con apt y que permiten configurar de forma r´pida o a y gr´fica muchas partes del sistema. En la tabla 15.1 podemos observar algunos, solo he colocado los a m´dulos m´s utiles. La mayor´ de ellos han sido utilizados durante la elaboraci´n del proyecto. o a ´ ıa o Podemos buscar m´s m´dulos Webmin dentro del sistema Debian con apt-cache: a o #apt-cache search webmin Otra fuente de m´dulos para Webmin la encontraremos en la p´gina: o a http://webadminmodules.sourceforge.net/ Aqu´ hallaremos una gran cantidad de m´dulos agrupados por categor´ ı o ıas.

Para instalar los m´dulos, simplemente realizaremos un apt: o #apt-get install <m\’odulo>

Jose Antonio Escart´ Vigo, Junio 2005. ın

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: o

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

Gesti´n de paquetes o

Gesti´n de la red o

Servicios de red

Gesti´n de usuarios o

Servicios de usuario

Gesti´n de seguridad o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 15. Servicio de administraci´n por Web: WebMin o

285

Una vez instalados todos los m´dulos necesarios para el proyecto pasemos a ver graficamente las seco ciones de nuestro servidor.

Figura 15.2: Pantallas de la interfaz Webmin (I)

Jose Antonio Escart´ Vigo, Junio 2005. ın

286

Servidor Linux para conexiones seguras de una LAN a Internet

Figura 15.3: Pantallas de la interfaz Webmin (II)

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 16

Servicios de monitorizaci´n del o sistema
Para tener bajo control el sistema, es muy importante tener informaci´n esencial de su rendimiento: o procesos en ejecuci´n, cantidad de memoria disponible, n.o de particiones, etc. o

16.1.

Monitor del sistema: Top

Proporciona una visi´n continuada de la actividad del procesador en tiempo real, muestra las tareas o que m´s uso hacen de la CPU, y tiene una interfaz interactiva para manipular procesos. a Las cinco primeras l´ ıneas muestran informaci´n general del sistema: o Las estad´ ısticas del comando uptime Estad´ ısticas sobre los procesos del sistema (n´mero de procesos, procesos durmiendo, procesos ejeu cut´ndose, procesos zombies y procesos parados). a 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, e e a a cantidad total de buffer p´ginas de la cach´ que podr´ quedar libres, cantidad total de buffer o a e ıan p´ginas de la cach´ que est´n libres y disponibles.) a e a 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 a procesos, como por ejemplo: Cambiar la prioridad de alguno utilizando el comando “r”. Matar o enviar una se˜al con el comando “k”. n Ordenarlos seg´n diferentes criterios (por PID con “N”, uso de CPU con “P”, tiempo con “A”, etc.). u Con “n” se cambia el n´mero de procesos que se muestran. u Para salir se utiliza la letra “q”.

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. a En el siguiente ejemplo podemos observar lo que se ver´ habitualmente: ıa
$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: 511948k total, 491884k used, 20064k free, 63432k buffers Swap: 979924k total, 0k used, 979924k free, 250764k cached PID 4359 4479 4501 4918 10072 4642 4475 4503 4512 1 2 3 4 9 18 111 125 246 247 249 248 256 257 258 259 260 261 262 881 1104 1114 1117 ... USER root josan josan josan josan josan josan josan josan root root root root root root root root root root root root root root root root root root root root root root root PR NI VIRT RES SHR S %CPU %MEM 6 -10 107m 39m 5672 S 9.9 7.9 15 0 22700 13m 9656 S 1.3 2.7 15 0 18992 9.9m 7920 S 1.3 2.0 15 0 30828 12m 8624 S 1.3 2.6 16 0 2132 1064 832 R 1.0 0.2 15 0 56140 33m 19m S 0.7 6.6 16 0 12556 7396 6176 S 0.3 1.4 15 0 17160 8376 6884 S 0.3 1.6 15 0 18568 8576 7012 S 0.3 1.7 16 0 1584 512 452 S 0.0 0.1 34 19 0 0 0 S 0.0 0.0 10 -5 0 0 0 S 0.0 0.0 10 -5 0 0 0 S 0.0 0.0 10 -5 0 0 0 S 0.0 0.0 10 -5 0 0 0 S 0.0 0.0 10 -5 0 0 0 S 0.0 0.0 16 0 0 0 0 S 0.0 0.0 15 0 0 0 0 S 0.0 0.0 15 0 0 0 0 S 0.0 0.0 17 -5 0 0 0 S 0.0 0.0 25 0 0 0 0 S 0.0 0.0 15 0 0 0 0 S 0.0 0.0 25 0 0 0 0 S 0.0 0.0 25 0 0 0 0 S 0.0 0.0 25 0 0 0 0 S 0.0 0.0 17 -5 0 0 0 S 0.0 0.0 17 -5 0 0 0 S 0.0 0.0 15 0 0 0 0 S 0.0 0.0 17 0 0 0 0 S 0.0 0.0 15 0 0 0 0 S 0.0 0.0 15 0 0 0 0 S 0.0 0.0 15 0 0 0 0 S 0.0 0.0 TIME+ 11:00.41 0:06.16 0:08.43 0:20.18 0:00.16 8:53.77 0:08.92 0:10.62 0:33.27 0:01.07 0:00.00 0:00.85 0:00.00 0:00.00 0:01.90 0:00.04 0:00.24 0:00.55 0:02.41 0:00.00 0:00.00 0:00.00 0:00.00 0:00.00 0:00.00 0:00.00 0:00.00 0:00.00 0:00.00 0:00.00 0:00.00 0:00.00 COMMAND XFree86 gnome-panel wnck-applet gnome-terminal top kile metacity multiload-apple clock-applet init ksoftirqd/0 events/0 khelper kthread kacpid kblockd/0 khubd pdflush pdflush aio/0 kswapd0 cifsoplockd jfsIO jfsCommit jfsSync xfslogd/0 xfsdatad/0 xfsbufd kseriod khpsbpkt knodemgrd_0 pccardd

16.2.

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 n o n 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. a

16.2.1.

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

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 16. Servicios de monitorizaci´n del sistema o Y un ejemplo del comando ser´ ıa: # iostat Linux 2.6.11 (debian) cpu-med: %user 12,55 %nice 0,10 tps 2,12 0,01 26/05/05 %sys %iowait 1,85 1,82 Blq_leid/s 35,58 0,08 %idle 83,68 Blq_leid 581224 1384 Blq_escr 231256 0

289

Device: hda hdc

Blq_escr/s 14,16 0,00

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

16.2.2.

Memoria: free

Se utiliza para obtener informaci´n sobre el estado de la memoria, (el significado de los campos es o mismo que en top). Este podr´ ser un ejemplo de su uso: ıa # free total Mem: 511948 -/+ buffers/cache: Swap: 979924 used 472644 178392 0 free 39304 333556 979924 shared 0 buffers 63548 cached 230704

16.2.3.

Memoria virtual: vmstat

Si queremos obtener informaci´n sobre la memoria virtual utilizaremos este comando. o Esto podr´ ser una salida t´ ıa ıpica: # vmstat procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu---r b swpd free buff cache si so bi bo in cs us sy id wa 0 0 0 38528 63620 230752 0 0 17 7 1063 255 12 2 84 2 En la siguiente tabla muestro el significado de las columnas: r: n´mero de procesos esperando su tiempo de ejecuci´n. u o b: n´mero de procesos en espera u w: n´mero de procesos en espacio de intercambio u us: tiempo de usuario como porcentaje del tiempo total
Jose Antonio Escart´ Vigo, Junio 2005. ın

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. o

16.2.4.

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. e Esto es la salida de mi sistema para el comando df: # df S.ficheros /dev/hda4 tmpfs /dev/hda5 /dev/hda7 /dev/hda8 /dev/hda9 /dev/hda10 /dev/hda11 none Bloques de 1K Usado 1921188 127236 255972 8 1921156 22344 1921156 324 964500 505948 3842376 3656336 2284880 150528 31246392 29145696 5120 3216 Dispon Uso% Montado en 1696360 7% / 255964 1% /dev/shm 1801220 2% /boot 1823240 1% /tmp 409556 56% /var 0 100% /usr 2018284 7% /home 2100696 94% /mnt/ntfs 1904 63% /dev

Se puede ver que el disco tiene un grave problema en /usr, ya que est´ en uso al 100 %. Hay que liberar a 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.

16.2.5.

Usuarios y sus procesos: w

Sirve para determinar que usuarios est´n conectados y qu´ est´n haciendo. a e a El siguiente ejemplo ilustra el comando: # w 17:07:08 USER josan josan up 4:54, 2 users, TTY FROM :0 pts/4 :0.0 load average: 0,31, 0,22, 0,26 LOGIN@ IDLE JCPU PCPU WHAT 12:18 ?xdm? 36:34 1.54s x-session-manag 15:53 1.00s 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

16.3.

Gestionar procesos

Para poder observar y modificar el funcionamiento de nuestros procesos disponemos de las siguientes herramientas:
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 16. Servicios de monitorizaci´n del sistema o

291

16.3.1.

Visualizar procesos: ps

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

Jose Antonio Escart´ Vigo, Junio 2005. ın

292 Un ejemplo de esto ser´ ıa:
$ ps aux USER root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root message hal root root root root root root root root josan root root root root root root root root root root root root josan josan josan josan josan josan josan root josan josan josan josan josan josan josan josan josan josan josan josan PID %CPU %MEM VSZ RSS TTY 1 0.0 0.0 1584 472 ? 2 0.0 0.0 0 0 ? 3 0.0 0.0 0 0 ? 4 0.0 0.0 0 0 ? 9 0.0 0.0 0 0 ? 18 0.0 0.0 0 0 ? 111 0.0 0.0 0 0 ? 125 0.0 0.0 0 0 ? 277 0.0 0.0 0 0 ? 276 0.0 0.0 0 0 ? 284 0.0 0.0 0 0 ? 285 0.0 0.0 0 0 ? 286 0.0 0.0 0 0 ? 287 0.0 0.0 0 0 ? 288 0.0 0.0 0 0 ? 289 0.0 0.0 0 0 ? 290 0.0 0.0 0 0 ? 352 0.0 0.0 0 0 ? 951 0.0 0.0 0 0 ? 1175 0.0 0.0 0 0 ? 1185 0.0 0.0 0 0 ? 1188 0.0 0.0 0 0 ? 1241 0.0 0.0 0 0 ? 1259 0.0 0.0 0 0 ? 1343 0.0 0.0 1572 392 ? 2990 0.0 0.0 0 0 ? 2991 0.0 0.0 0 0 ? 2992 0.0 0.0 0 0 ? 3924 0.0 0.1 2876 520 ? 4189 0.0 0.1 2328 656 ? 4192 0.0 0.0 3128 488 ? 4221 0.0 0.1 1580 612 ? 4250 0.0 0.1 2160 880 ? 4255 0.1 0.6 8136 3236 ? 4265 0.0 0.0 2316 508 ? 4386 0.0 0.0 1600 484 ? 4390 0.0 0.0 1572 456 ? 4399 0.0 0.1 3544 660 ? 4423 0.0 0.2 4820 1148 ? 4532 0.0 0.2 2816 1028 ? 4533 0.0 0.2 2816 1028 ? 4534 0.0 0.1 11788 536 ? 4553 0.0 0.3 3440 1908 ? 4567 0.0 0.1 2448 608 ? 4677 0.0 0.3 9184 1684 ? 4694 0.0 0.1 1820 744 ? 4699 0.0 0.3 9476 1772 ? 4701 0.0 0.4 10032 2164 ? 4749 0.0 0.0 1580 416 tty1 4750 0.0 0.0 1580 416 tty2 4751 0.0 0.0 1580 416 tty3 4752 0.0 0.0 1580 416 tty4 4753 0.0 0.0 1580 416 tty5 4754 0.0 0.0 1580 416 tty6 4819 7.5 43.4 238624 222152 ? 5133 0.0 0.0 3072 428 ? 5135 0.0 1.1 10068 5812 ? 5140 0.0 0.1 2328 772 ? 5142 0.0 0.4 5620 2240 ? 5169 0.0 0.4 9060 2196 ? 5182 0.0 1.1 16628 6052 ? 5206 0.0 1.9 18972 9720 ? 8911 0.0 0.0 0 0 ? 10637 0.0 1.8 22600 9304 ? 10640 0.0 1.7 22296 8796 ? 10642 0.0 1.9 24068 9896 ? 10644 0.0 2.5 26808 13056 ? 10738 0.0 2.9 31816 14972 ? 13198 0.0 2.6 26084 13540 ? 14623 1.9 13.4 83728 68852 ? 14624 0.0 0.3 3280 1640 pts/0 17531 0.0 1.9 24276 10036 ? 20028 0.0 0.1 2276 664 ? 20029 0.0 0.3 3284 1644 pts/1 20042 0.0 0.1 2564 844 pts/1 STAT S SN S< S< S< S< S< S S< S S S S S S< S< S S S S S S S< S S<s S S S Ss Ss Ss Ss Ss Ss Ss Ss SNs Ss Ss S S S Ss Ss Ss Ss Ss S Ss+ Ss+ Ss+ Ss+ Ss+ Ss+ S< Ss S S Ss Ss Ss S S Ss S S S S S S Ss+ S S Ss R+ START 11:50 11:50 11:50 11:50 11:50 11:50 11:50 11:50 11:50 11:50 11:50 11:50 11:50 11:50 11:50 11:50 11:50 11:50 11:50 11:50 11:50 11:50 11:50 11:50 11:50 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 11:51 12:01 12:01 12:01 12:01 12:01 12:01 12:01 14:20 15:07 15:07 15:07 15:07 15:07 16:43 17:33 17:33 19:23 21:03 21:03 21:04 TIME 0:01 0:00 0:01 0:00 0:00 0:06 0:00 0:00 0:00 0:02 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:03 0:00 0:02 0:00 0:00 0:00 0:00 0:00 0:34 0:00 0:00 0:02 0:00 0:00 0:00 0:00 0:00 0:30 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00 41:44 0:00 0:01 0:00 0:00 0:04 0:01 0:16 0:03 0:00 0:00 0:00 0:01 0:08 0:02 4:05 0:00 0:00 0:00 0:00 0:00

Servidor Linux para conexiones seguras de una LAN a Internet

COMMAND init [2] [ksoftirqd/0] [events/0] [khelper] [kthread] [kacpid] [kblockd/0] [khubd] [aio/0] [kswapd0] [cifsoplockd] [jfsIO] [jfsCommit] [jfsSync] [xfslogd/0] [xfsdatad/0] [xfsbufd] [shpchpd_event] [kseriod] [khpsbpkt] [knodemgrd_0] [pccardd] [exec-osm/0] [pktgen/0] udevd [kjournald] [kjournald] [kjournald] dhclient3 -pf /var/run/dhclient.eth0.pid -lf /var/run/dhdaemon /sbin/syslogd /sbin/klogd /usr/sbin/acpid -c /etc/acpi/events -s /var/run/acpid.soroot /usr/bin/dbus-daemon-1 --system /usr/sbin/hald --drop-privileges /usr/sbin/inetd /sbin/cardmgr /usr/sbin/powernowd -q /usr/sbin/sshd /usr/bin/X11/xfs -daemon /bin/bash /etc/rc2.d/S20xprint start /bin/bash /etc/rc2.d/S20xprint start /usr/bin/Xprt -ac -pn -nolisten tcp -audit 4 -fp /usr/X1root /usr/sbin/famd -T 0 /sbin/rpc.statd /usr/bin/perl /usr/share/webmin/miniserv.pl /etc/webmin/daemon /usr/sbin/cron /usr/bin/gdm /usr/bin/gdm /sbin/getty 38400 tty1 /sbin/getty 38400 tty2 /sbin/getty 38400 tty3 /sbin/getty 38400 tty4 /sbin/getty 38400 tty5 /sbin/getty 38400 tty6 /usr/X11R6/bin/X :0 -audit 0 -auth /var/lib/gdm/:0.Xauthjosan /usr/bin/ssh-agent x-session-manager /usr/lib/gconf2/gconfd-2 5 /usr/bin/gnome-keyring-daemon /usr/lib/bonobo-activation/bonobo-activation-server --acjosan gnome-smproxy --sm-config-prefix /.gnome-smproxy-ghqj5S/josan gnome-volume-manager --sm-config-prefix /gnome-volume-majosan /usr/lib/gnome-panel/wnck-applet --oaf-activate-iid=OAFIjosan [pdflush] kdeinit Running... dcopserver [kdeinit] dcopserver --nosid --suicide klauncher [kdeinit] klauncher kded [kdeinit] kded knotify [kdeinit] knotify kio_uiserver [kdeinit] kio_uiserver /usr/bin/kile /bin/bash kio_file [kdeinit] kio_file file /tmp/ksocket-josanGrQ9Wjosan gnome-pty-helper bash ps aux

16.3.2.

Enviar signals a procesos: kill

En ocasiones es necesario enviar se˜ales a los procesos: pararlos (SIGSTOP -19), eliminarlos, que conn tin´en (SIGCONT -18), etc. u kill [-signal] pids: #kill [-signal] pid, . . . env´ una se˜al al proceso identificado por pid. ıa n #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´ un SIGTERM (signal 15). o ıa La se˜al SIGKILL (signal 9), no puede ser capturada y fuerza al proceso a finalizar. n #kill [-signal] orden, . . . env´ la se˜al a todos los procesos “orden” (ejemplo: #killall -9 bash). ıa n

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 16. Servicios de monitorizaci´n del sistema o Hay procesos que no mueren a pesar de recibir la se˜al KILL: n Procesos zombies Procesos que esperan un recurso v´ NFS que no est´ disponible ıa a Procesos que esperan una petici´n de E/S realizada a un dispositivo o

293

16.3.3.

Modificar prioridades: nice

El n´mero nice marca la prioridad del proceso. u Linux realiza una planificaci´n por prioridades din´micas o a Al lanzar un proceso se le asigna un valor de prioridad (n´mero nice), por defecto la hereda del u proceso padre. La prioridad din´mica del proceso se calcula en funci´n del n´mero nice, junto con el consumo de a o u CPU realizado Valores bajos (negativos), implica m´s prioridad a Valores altos (positivos), menos prioridad Rango de prioridad: -20(m´xima) a 20 (m´ a ınima) Valor especial: -19, s´lo se le da la CPU cuando nadie m´s la quiere o a Asignar un valor negativo o que disminuya (mejore) la prioridad del proceso s´lo puede hacerlo el o root, aumentar (disminuir prioridad) tambi´n lo puede hacer el usuario que lo ejecuto e nice -incremento orden a ejecutar renice nueva prioridad pid

16.4.

Terminal de root con prioridad m´xima a

Para establecer un programa de m´xima prioridad solamente es necesario subir la prioridad a uno de a 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 u 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.

16.5.

Programaci´n de tareas o

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´ la semana o el mes. En Linux hay m´ltiples y o ıa, u 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 o a un shell como int´rprete. e
Jose Antonio Escart´ Vigo, Junio 2005. ın

294

Servidor Linux para conexiones seguras de una LAN a Internet

16.5.1.

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 a el comando, o de un fichero utilizando la opci´n -f, el camino a este fichero debe estar especificado a partir o 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 trav´s del correo local al usuario correspona ıa e diente 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: o $ 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 #atq 1 2 5 # lanza medianoche, 24 de sep, manda correo

2000-11-24 10:35 b pepe 2000-11-23 00:00 c pepe 2000-11-26 01:00 Z root # muestra el contenido de tarea 2

#at -c 2

Tambi´n existe el comando batch que es similar a at solo que los trabajos batch se ejecutan cuando e 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.

16.5.2.

Cron

Existe otro tipo de tareas que se pueden ejecutar peri´dicamente conocidas como crons. Para definirlas o se emplea un fichero por usuario cuyo formato se explica a continuaci´n. o B´sicamente para cada tarea peri´dica se escribe una l´ a o ınea donde se especifican los momentos en que se ejecutar´ y el comando correspondiente. Tambi´n se pueden realizar asignaciones a variables de entorno a e que ser´n vlidas s´lo para los procesos indicados en lo sucesivo mientras no aparezcan nuevas asignaciones. a o Las fechas se especifican utilizando cinco indicadores separados por espacios: 1. Minutos: Oscila entre 0 y 59 2. Horas: Oscila entre 0 y 23 3. D´ del mes: Oscila entre 1 y 31 ıas 4. Meses: Oscila entre 1 y 12 (se pueden poner tambi´n las tres primeras letras del nombre del mes en e ingl´s) e 5. D´ de la semana: Oscila entre 0 y 7 (0 y 7 corresponden al domingo, tambi´n se pueden usar las ıas e tres primeras letras del nombre del d´ en ingl´s) ıa e
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 16. Servicios de monitorizaci´n del sistema o

295

Si no se coloca alguno de los cinco indicadores se pone el car´cter “*” en su lugar. Para separar india cadores 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. e A continuaci´n muestro ejemplos de este sistema: o 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 0 8 31 12 * sendmother MAILTO = josan 0 8-16/2 4,19 * * echo "cobraste josan?" Los ficheros de tareas peri´dicas o crons de los usuarios se guardan en el directorio del sistema o /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 a modificar´ el fichero de crons a -l: lista todos los crons del usuario -r: borra todos los crons A continuaci´n, podemos observar algunos ejemplos del uso de crontab: o $ $ $ $ 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: o # 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 17 * * * * 25 6 * * * 47 6 * * 7 52 6 1 * * dow user command root run-parts --report /etc/cron.hourly root test -x /usr/sbin/anacron || run-parts --report /etc/cron.daily 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.

Jose Antonio Escart´ Vigo, Junio 2005. ın

296

Servidor Linux para conexiones seguras de una LAN a Internet

16.5.3.

Tareas peri´dicas o

Un sistema Linux trae algunas tareas peri´dicas definidas por defecto y es posible a su vez crear otras. o 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 ı a 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 o per´ ıodo correspondiente. Algunas de las tareas que se hacen de forma peri´dica por el sistema, son la actualizaci´n de las bases o o de datos sobre las que trabajan los comandos locate y whatis, as´ como la rotaci´n de las trazas del sistema. ı o 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 a las tareas peri´dicas, se trasmiten al usuario correspondiente utilizando la mensajer´ local del sistema. o ıa Para el caso de las tareas del sistema, se env´ al usuario root a menos que se defina lo contrario. ıan

16.5.4.

Anacron

Una tarea tipo cron es muy util pero su ejecuci´n depende de que la m´quina se encuentre encendida ´ o a en el momento exacto para el que se program´. Es por ello que existe otro tipo de tareas peri´dicas: o o las anacrons. Estas se ejecutan cada cierto tiempo especificado en d´ En caso de que la m´quina se ıas. a 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 a transcurra la espera especificada. O sea, para cada trabajo anacron se indica un tiempo en d´ y una ıas espera (delay). Los trabajos anacron se almacenan en el fichero del sistema /etc/anacrontab. Adem´s de indicar el a intervalo de d´ el delay y el comando se especifica un nombre para el trabajo. Este se emplea para las ıas, trazas y para nombrar un fichero que emplea el servicio de anacron para saber cuando fue la ultima vez ´ que ejecut´ este trabajo (timestamp file). Este fichero se almacena en /var/spool/anacron/ y slo contiene o 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 30 15 cron.monthly run-parts /etc/cron.monthly Podr´ pensarse que puede ocurrir que un mismo programa se ejecute por la v´ cron y por la anacron, ıa ıa 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. a

Jose Antonio Escart´ Vigo, Junio 2005. ın

Parte IV

Valoraci´n final o

Cap´ ıtulo 17

Pruebas del sistema
17.1. Nessus: Esc´ner de vulnerabilidades a

Nessus es un potente esc´ner de redes de Software Libre. Consta de dos partes (cliente/servidor) que a pueden estar instaladas en las misma m´quina por simplicidad. a Si el ataque se hace hacia localhost lo que se consigue es auditar nuestra propia m´quina. a 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”. o o La distribuci´n de Nessus consta de cuatro ficheros b´sicos: las librer´ del programa, las librer´ o a ıas ıas NASL (Nessus Attack Scripting Language), el n´cleo de la aplicaci´n y sus plugins. u o 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 nee a cesarios, instalandolos en la carpeta /nessus/plugins. Durante el proceso de instalaci´n se nos realizan una serie de preguntas para generar un certificado o 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.

17.1.1.

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 o La configuraci´n por defecto es completa y v´lida, entre otras cosas escanea desde el puerto 0 al o a 15000. Ah´ podemos modificar todas las opciones que nos parezcan oportunas. ı

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 a e 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 ultima configuraci´n es neceario editar el archivo de reglas /etc/nessus/nessusd.rules ´ o 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: http://www.nessus.org/register/ poner o un correo electr´nico donde se nos reportar´ la clave. Una vez recibido el correo basta con insertarlo o a 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 root 10938 10960 0.0 1.0 0.9 0.1 7332 4712 ? 2316 772 pts/3 Ss S+ 13:22 13:23 0:00 nessusd: waiting 0:00 grep nessus

17.1.2.

Ejecuci´n de Nessus o

Para lanzar el cliente en modo gr´fico, ejecutaremos el siguiente comando: #nessus a Tambi´n se puede iniciar en modo comando, para el modo comando consultaremos el manual de ayuda: e $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). n o En la pesta˜a de plugins (los tipos de ataques), seleccionaremos todos si queremos un escaneo n 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. n 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. o a

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 17. Pruebas del sistema En las siguientes pantallas podemos observar cada una de estas secciones:

301

Figura 17.1: Configuraci´n de la aplicaci´n Nessus o o

Jose Antonio Escart´ Vigo, Junio 2005. ın

302

Servidor Linux para conexiones seguras de una LAN a Internet

Una vez realizada la comprobaci´n del servidor podemos observar las siguientes vulnerabilidades eno contradas:

Figura 17.2: Vulnerabilidades encontradas en el sistema B´sicamente podemos decir que la seguridad del servidor esta controlada. A esto unicamente habr´ a ´ ıa que a˜adir alguna actualizaci´n de versiones para parchear posibles exploits descubiertos recientemente. n o

17.1.3.

Otros interfaces de configuraci´n o

Tambi´n podemos ejecutar otras interfaces gr´ficas para Nessus: e a NPI: Interfaz PHP. Se puede descargar en: http://enterprise.bidmc.harvard.edu/pub/nessus-php/ NCC: Nessus Command Center. Se puede descargar en: http://www.netsecuritysvcs.com/ncc/
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 17. Pruebas del sistema

303

17.2.

Nmap: Esc´ner de red y puertos a

La herramienta de exploraci´n de red y esc´ner de seguridad, Nmap es posiblemente el mejor escaner o a de puertos existente, permitiendo determinar, de una forma r´pida y sencilla, que servidores est´n activos a a y qu´ servicios ofrecen, es decir sus puertos abiertos. e 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 a 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 e e varios complementos, incluyendo analizadores de salidas del programa, como por ejemplo Nlog.

17.2.1.

Caracter´ ısticas b´sicas a

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 e e a IP, firewalls, routers y otros obst´culos. Estas incluyen mecanismos de escaneado de puertos (tanto a TCP, como UDP), detecci´n del sistema operativo, escaneos invisibles, conexiones semiabiertas, . . . o Potente: Se puede utilizar para escanear redes de ordenadores con cientos de m´quinas. a Portable: Existen versiones para la gran mayor´ de los sistemas operativos modernos, entre ellos: ıa 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 a 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. o a Buena Documentaci´n: Se ha realizado un gran esfuerzo en mantener actualizados y traducidos o tanto las p´ginas man, como los tutoriales y el resto de documentaci´n relacionada con Nmap. a o Soportado: Aunque Nmap viene sin garant´ explicita de ning´n tipo, se puede escribir al autor o ıa u utilizar las diferentes listas de distribuci´n sobre Nmap. Existen varias empresas que incluyen soporte o 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 a a sistemas operativos, como Debian. Esta gran popularidad es la mejor garant´ de su calidad, soporte ıa 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 a a La salida que obtenermos del servidor que se ha configurado durante el proyecto se puede observar en la siguiente p´gina. a

Jose Antonio Escart´ Vigo, Junio 2005. ın

304

Servidor Linux para conexiones seguras de una LAN a Internet

#nmap 192.168.0.10 -O Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2005-06-11 19:27 CEST Interesting ports on 192.168.0.10: (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 2.5.25 - 2.6.3 or Gentoo 1.2 Linux 2.4.19 rc1-rc7), Linux 2.6.3 - 2.6.8 Uptime 0.274 days (since Sat Jun 11 12:52:40 2005) Nmap finished: 1 IP address (1 host up) scanned in 2.372 seconds

Depu´s de descubrir los servicios que ofrece la m´quina, con un simple telnet hemos obtenido el sistema e a operativo instalado en la m´quina y la versi´n de ssh, si se conoce alguna vulnerabilidad de esa versi´n a o o podr´ ser atacada: telnet <host> <puerto> ıa
# telnet 192.168.0.10 22 Trying 192.168.0.10... Connected to 192.168.0.10. 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 docua a mentaci´n incluida con Nmap, as´ como a la p´gina man del mismo. o ı a #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 a o m´quinas escaneadas (por ejemplo, en /var/log/messages), por lo que es interesante el utilizar alguno de a 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 o 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 o a Script-kiddies, la podemos observar en el siguiente ejemplo:
#nmap -oS - 192.168.0.10+ $taRt|ng nmap V. 2.54B3T431 ( www.1n$ecur3.ORg/nmap/ ) |nt3r3sting pOrtz 0n debian.example.org (192.168.0.10): (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

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 17. Pruebas del sistema

305

17.2.2.

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. a Cuadro 17.1: Tipos de escaneo en Nmap Descripci´n o Escaneado predeterminado, no completa la comunicaci´n TCP. o Parecido a SYN, completando la comunicaci´n TCP. Es un m´todo ruidoso o e y carga en exceso las m´quinas examinadas. a 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´ de los hosts devolveran un RST. ıa 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. a e Escaneado XMAS: -sX Similar a NULL pero todos los indicadores del encabezado TCP se activan. Los Windows, por su estructura, no responder´n. a 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´ accesible. ıa Escaneado RPC: -sR Busca m´quinas que respondan a los servicios RPC. a Escaneado Windows: Se basa en una anomal´ en las respuestas a los paquetes ACK en alg´n ıa u -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 Tipo de escan´o e SYN: -sS TCP Connect: -sT

17.2.3.

Opciones de descubrimiento

Tambi´n podemos ajustar la forma en que Nmap descubre la red y determina que hosts est´n activos. e a El cuadro 17.2 incluye diversas opciones: Cuadro 17.2: Opciones de descubrimiento en Nmap Descripci´n o Utiliza paquetes ICMP y TCP para determinar el estado de un anfitri´n. Es la o forma m´s fiable y precisa, ya que usa los dos m´todos. a e Usa solo el m´todo TCP. Si estamos intentando ser sigilosos esta es la mejor e opci´n. o No es una buena opci´n si el objetivo se encuentra detr´s de un cortafuegos, la o a mayor´ de los paquetes ser´n eliminados. ıa a Nmap no intentar´ conocer primero qu´ hosts se encuentran activos en la red, a e en su lugar enviar´ sus paquetes a todas las IP en el rango especificado, incluso a aunque no haya una m´quina detr´s. Puede ser la unica forma de examinar una a a ´ red bien protegida y que no responde a ICMP.

Opci´n o TCP + ICMP: -PB TCP Ping: -PT ICMP Ping: -PE Dont’s Ping: -P0

17.2.4.

Opciones de ajuste de frecuencia de Nmap

Nmap nos ofrece la opci´n de agilizar o ralentizar la frecuencia con la que env´ sus paquetes de esc´ner. o ıa a Si est´mos preocupado por la cantidad de tr´fico de red (o est´mos intentando ser sigilosos), podemos a a a ralentizar el nivel. S´lo hay que tener en cuenta que cuanto m´s lejos los enviamos, m´s tiempo tardar´ el o a a a 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 a ver los distintos niveles de frecuencia en el cuadro 17.3.
Jose Antonio Escart´ Vigo, Junio 2005. ın

306

Servidor Linux para conexiones seguras de una LAN a Internet

Frecuencia Paranoid

Sneaky Polite Normal Agressive

Insane

Cuadro 17.3: Configuraciones de frecuencia en Nmap Par´metro Frecuencia de paquete a Comentarios -F 0 Una vez cada 5 minutos No utilizar esta opci´n en escaneados o de varios hosts, ya que el escaneado nunca terminar´. a -F 1 Una vez cada 15 segundos -F 2 Una vez cada 4 segundos -F 3 Tan r´pida como permita el SO a Configuraci´n predeterminada. o -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 -F 5 0,75 segundos por host y 0,3 se- Este m´todo no funciona bien a no ser e gunos por paquete de sondeo que estemos en una red muy r´pida a y usemos un computador realmente r´pido, e incluso as´ podr´ a ı ıamos perder datos.

17.2.5.

Otras opciones de Nmap

El cuadro 17.4 recoge una lista de otras opciones para Nmap que controlan cosas como la resoluci´n o DNS, la identificaci´n de SO y otras opciones. Existen m´s opciones para ajustar nuestros escaneados o a disponibles utilizando la interfaz de l´ ınea de comandos. Si queremos m´s detalles podemos recurrir al a manual de Nmap. Cuadro 17.4: Opciones deversas de Nmap descripci´n o Agiliza el escaneado, pero podemos perder hosts, sobre todo en redes con DHCP. Fast Scan: -F Escanea los puertos especificados, generalmente los puertos conocidos por debajo de 1024. Port Range: -p port_range De forma predeterminada Nmap examina los 65.536 puertos disponibles, con esta opci´n solo examina ese rango. o Use Decoy: -D Se introducen IPs se˜uelo en el trafico mandado a la m´quina que se n a decoy_address1, esta examinando, as´ le resulta m´s dificil saber que m´quina le esta ı a a decoy_address2, ... escaneando. Fragmentation: -f Opci´n sigilosa, que fragmenta los paquetes de escaneado a mediada o que sale. Los paquetes son montados en la m´quina atacada y algunas a veces pueden burlar los cortafuegos e IDS. Get Indentd Info: -I El servicio Identd que se ejecuta en algunas m´quinas puede propora cionar informaci´n adicional sobre el host consultado. o Resolve All: -R Esta opci´n intenta resolver las direcciones en el rango, incluso aunque o no est´n respondiendo. e SO Identification -o Analiza la “huella digital” de las respuestas para determinar el SO Send on Device: Obliga a los paquetes de escaneado a salir de una interfaz espec´ ıfica. -e interface_name

Opci´n o Don’t Resolve: -n

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 17. Pruebas del sistema

307

17.2.6.

Salida de Nmap

Nmap produce un informe que muestra cada direcci´n IP encontrada, los puertos descubiertos escuo chando dicha IP y el nombre conocido del servicio (si lo tiene). Tambi´n muestra si el puerto se ha abierto, e filtrado o cerrado. Sin embargo, s´lo porque Nmap obtenga una respuesta sobre el puerto 80 e imprima o “http”, no significa que un servidor Web se est´ ejecutando en el host, aunque es algo bastante probable. a Siempre se puede verificar cualquier puerto sospechoso abierto consultando con dicha direcci´n IP sobre el o n´mero de puerto especificado y observando la respuesta obtenida. Si existe un servidor Web ejecut´ndose u a ah´ normalmente podremos obtener una respuesta mediante la introduccion del comando GET/HTTP. ı, As´ se devolver´ la p´gina inicial de ´ ı a a ındice como HTML (no como una bonita p´gina Web), pero podremos a verificar si un servidor se est´ ejecutando. Con otros servicios como FTP o SMTP podemos llevar a cabo a tareas similares. Nmap tambi´n codifica con colores los puertos encontrados, seg´n la siguiente tabla: e u Cuadro 17.5: Codificaci´n de color de la salida de Nmap o Descripci´n o Este n´mero de puerto est´ asignado a un servicio que ofrece alguna forma directa de inicio u a de sesi´n en la m´quina, como Telnet o FTP. Estos son los m´s atractivos para los intrusos. o a a Este n´mero de puerto representa un servicio de correo como SMTP o POP. u Estos son servicios que pueden proporcionar alguna informaci´n sobre la m´quina o el sistema o a operativo. Cualquier otro servicio o puerto identificado.

Color Rojo Azul Negrita Negro

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 a a que deber´ ıamos ignorar cualquier n´mero inusual que no est´ resaltado o en negrita. Los troyanos y el u e software de conversaci´n se muestran normalmente como servicios desconocidos, pero podemos buscar un o puerto misterioso en una lista de puertos malignos conocidos para determinar r´pidamente si el puerto a 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 a a n a a n´mero de puerto conocido. u Podemos guardar los registros Nmap como n´meros de formato, incluyendo el texto simple o legible u por la m´quina, e importarlos en otro programa. Sin embargo, si dichas opciones no fuesen suficientes, a 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 o de p´ginas de salidas Nmap nos puede volver locos r´pidamente. a a

17.2.7.

Configuraci´n gr´fica de Nmap, interfaz Nmapfe o a

Incluido con Nmap se encuentra nmapfe que es un interfaz gr´fica, que permite ejecutar Nmap usando a el rat´n. Tambi´n indicar que existen otras interfaces gr´ficas para facilitar a´n m´s el uso de esta potente o e a u a aplicaci´n (KNmap, KNmapFE, QNMap, Kmap, Web-NMap, vnmap, . . . ) o 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 a network security before the bad guys do). La p´gina oficial de Nmap es: http://www.insecure.org/nmap/ a

Jose Antonio Escart´ Vigo, Junio 2005. ın

308

Servidor Linux para conexiones seguras de una LAN a Internet

17.3.

Pruebas de carga

Aunqu´ en un principio pense en realizar una serie de pruebas de carga con diferentes clientes, para e 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 u o 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 o o consultado, se advert´ de que el uso de servicios de gran consumo de recursos en la misma m´quina ıa a provocar´ la ralentizaci´n del sistema hasta niveles inaceptables. Un ejemplo de esto ser´ el IDS Snort, ıan o ıa 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, o 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 unica m´quina. o ´ a Las razones que me llevan a esta decisi´n son varias: o 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: n • Para empresas peque˜as carece de sentido tener todos los tipos de servidores disponibles, ya n que la mayor´ no se utilizar´n. ıa a • 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 a o de las m´quinas sino en el personal que necesitan para configurarlas y administrarlas, adem´s a a 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´ al 100 % de su capacidad, obteniendose de ella un 10 % del rendimiento a ıa te´rico. o • Si se produjer´ una caida fortuita de la m´quina, como un fallo el´ctrico o mec´nico, todos los a a e a servicios de la red caer´ con ella. ıan 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 a vez el control de todos los servicios de esa m´quina. a • Los ataques dirigidos sobre una sola m´quina son m´s eficientes que sobre varias. a a Por todo ello, no creo necesario realizar pruebas de carga para determinar que no es una buena elecci´n o situar todos los servicios en una unica m´quina. Y que se deber´ de buscar una soluci´n para descentralizar ´ a ıa o el sistema.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 18

Estudio Econ´mico o
Mediante los siguientes esquemas se determinar´ el coste del proyecto de haber sido encargado por a una empresa.

18.1.

Recursos

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

310

Servidor Linux para conexiones seguras de una LAN a Internet

18.2.

Costes

En la siguiente tabla, se puede encontrar una valoraci´n aproximada de los costes totales del proyecto, o basada en los sueldos/hora asignados a cada cargo del personal. Cuadro 18.2: Costes del proyecto Nombre Jose Antonio Escart´ Vigo ın Jose Antonio Escart´ Vigo ın Jose Antonio Escart´ Vigo ın Jose Antonio Escart´ Vigo ın Material Nombre corto Jefe de proyecto Analista Tareas asignadas Establecer la planificaci´n y fijar o objetivos Seleccionar herramientas y analizar el grado de cumplimiento de los objetivos Instalar sistema, configurar servicios y realizar las pruebas Generar informes y documentar el proyecto — N.o de horas 20 h. 50 h. Coste 800e 1.500e

Administrador de sistemas Documentalista Varios

220 h. 160 h. — TOTAL:

5.500e 2.400e 4.766e 14.966e

18.3.

Resumen econ´mico o

El coste del proyecto esta muy por encima de lo esperado, con un valor aproximado de 15.000e. 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 a utilizar este documento de manera intensiva, haciendo inviable un estudio de este tipo en pymes.

18.4.

Modificaciones a los costes econ´micos o

Debido a la falta de experiencia en sistemas Linux y en la creaci´n de manuales, esta planificaci´n o o econ´mica se deber´ ver incrementada de la siguiente forma: o ıa Hasta las 350 horas en Administraci´n de sistemas: Para la asimilaci´n de los entornos, la configuo o raci´n de los servicios y las pruebas necesarias. o Hasta las 400 horas en Documentaci´n: Debido al cambio de orientaci´n del proyecto, hacia la o o elaboraci´n de un “Manual de instalaci´n de servidores en Linux”. o o Esto supodr´ un aumento, de valor respecto al proyecto original, de unos 7.000e, subiendo el precio ıa total aproximado a los 22.000e. Este aumento en el n´mero de horas en ning´n caso a derivado en un retraso en los plazos de entrega, u u ya que estos han sido respetados con riguridad. Y atienden a un mejor aprovechamiento y usabilidad de los contenidos del proyecto. Se podr´ decir que respecto a los objetivos iniciales, de “instalar un servidor”, ıa elaborando un “Manual de instalaci´n para servidores Linux” se ha conseguido que el uso del proyecto o pueda llegar a m´s ´mbitos y convertirlo en util para muchas personas. a a ´

Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 19

Conclusiones
La conclusi´n principal es que los objetivos marcados inicialmente fueron err´neos: o o 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. o No es viable un servidor portatil corporativo e itinerante: • S´lo puede ser utilizado para servicios concretos. o • Las redes inal´mbricas producen graves problemas de seguridad intrinsecos e inevitables. a • Las conexiones itinerantes a Internet, ofrecidas por los ISP, todav´ estan en pa˜ales. ıa n • La conexi´n es un problema, desde los siguientes puntos de vista: o 1. Se necesita un punto de acceso (AP) que acompa˜e al servidor, como podr´ ser un router. n ıa 2. La conexi´n EAP-TLS a trav´s de certificados digitales no es muy flexible a la incorporao e ci´n de nuevos usuarios, que por ejemplo podr´ ser los empleados de otra oficina, en otra o ıan 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 o o acceden al servidor mediante usuario y contrase˜a. n 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 o o o de la distribuci´n, pasando por la instalaci´n del sistema y finalmente la configuraci´n de la gran mayor´ o o o ıa de servicios disponibles para entornos corporativos. Este cambio de orientaci´n, fue decidio a la mitad del proyecto, de nada serv´ documentar la inso ıa talaci´n de un servidor Linux, si el proceso no pod´ ser reproduccido, a menos que se dispusiera de la o ıa misma m´quina y la misma infraestructura. El proyecto se ha adaptado a un entorno m´s general, basado a a en la distribuci´n Debian Sarge, para que los conociemientos adquiridos, puedan ser aprovechados por un o n´mero mayor de usuarios de escritorio y administradores de sistemas. u A modo de resumen me quedar´ con la siguiente frase que lei mientras me documentaba y que esta e en concordancia con el esp´ ıritu de este proyecto: “En Internet s´lo el paranoico sobrevive. Puede ser un o lugar muy sucio, lleno de virus, gusanos, troyanos, spammers y abogados de litigios de patentes; lo ultimo ´ que alguien querr´ es ponerse en l´ ıa ınea sin protecci´n alguna.” o

312 Es decir, el uso de:

Servidor Linux para conexiones seguras de una LAN a Internet

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. o IDS, sistemas de detecci´n de intrusos: NIDS como Snort, IDS como Tripwire para garantizar la ino tegridad 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, . . . o 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 a ı a esta forma es mucho m´s facil que el intruso se desespere y se vaya a hacer lo que quiere hacer, a otro sitio. a Los sistemas de este estilo, no son la panacea, exigen la dedicaci´n de mucho tiempo y una adminiso traci´n rigurosa. Es decir, exigen de mucho tiempo y mucho dinero para que resulten efectivos. o No todas las empresas se podr´n permitir este tipo de gastos. Hay que analizar hasta donde conviene a proteger y aplicar una soluci´n, que no ser´ estandar, sino adaptada al perfil de nuestra organizaci´n o o a 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´ con mucha voluntad, ıa 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 o se han aumentado muchisimo, llegando suplir esta falta de previsi´n con unas 300 horas extras o respecto a la planificaci´n inicial. o A pocos d´ de la entrega final, se lanzo la versi´n estable del proyecto Debian Sarge. Esto derivo ıas o en dos consecuencias importantes: 1. La primera positiva: La elecci´n de Debian Sarge fue muy acertada, si hubiera elegido Debian o Woody, habr´ terminado un proyecto que desde el principio ser´ obsoleto. Por contra, ahora ıa ıa est´ totalmente actualizado y ser´ v´lido por un largo periodo de tiempo. a a a En contra: La mayor parte del documento est´ escrito pensado que la versi´n estable se lanzar´ a o ıa en un futuro inmediato. Este futuro se ha adelantado un mes, la soluci´n a pasado por agregar o un anexo (v´ase anexo G) donde se explica que ha pasado y que implicaciones tiene esto en el e documento.

2.

El proyecto lo podr´ clasificar de inter´s personal, ya que mi pasi´n de siempre, han sido los ıa e o sistemas operativos. Por razones diversas no me hab´ adentrado en el mundo de Linux, m´s que a ıa 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 a profesional se ubique en este sector. Con el proyecto finalizo la Ingenier´ t´cnica en Inform´tica de Sistemas, y me servido para afianıa e a zarme 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 a a tambi´n este enfocado hacia alguna parte concreta de la seguridad inform´tica, sector que actuale a metne est´ teniendo un gran auge. a
Jose Antonio Escart´ Vigo, Junio 2005. ın

Cap´ ıtulo 19. Conclusiones

313

A Los conocimientos adquiridos en el entorno de composici´n de textos L TEX me permitir´n, a partir o a de ahora, realizar documentaci´n mucho m´s profesional. o a

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 a 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. e o Por todo ello, lo considero una experiencia muy positiva y seguramente orientar´ mi futuro profesional a al sector de la seguridad inform´tica. a Una objetivo que me gustar´ conseguir, si es posible (es decir, si la universidad y mi director de ıa proyecto est´n de acuerdo), es poner a disposici´n de la comunidad de usuarios Linux este documento. a o De est´ forma mi trabajo podr´ ser aprovechado por un mayor n´mero de personas, ya que este no es el a a u t´ ıpico proyecto con una utilidad muy limitada, sino que tiene un uso mucho m´s amplio y puede llegar a a ser util a mucha gente. ´

Jose Antonio Escart´ Vigo, Junio 2005. ın

Parte V

Ap´ndices e

Ap´ndice A e

Comandos b´sicos a
Para m´s informaci´n sobre los comandos podemos ejecutar: $man <comando> a o

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 o P´ginas del manual a Listar (m´ltiples opciones) u 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 a Editores de texto, modo texto Editores de texto, modo gr´fico a Partir ficheros Devuelve el Path de un ejecutable, que se encuentre en la variable $PATH

Entorno gr´fico X-Windows a
Comando startx startx -- :2, :3, etc. xf86config xf86cfg CTRL+ALT+BACKSPACE Descripci´n o Iniciar sesion X Abrir nuevas sesiones Configurar X, modo texto Configurar X, modo gr´fico a Salir de las X

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 o Lista los usuarios conectados Informaci´n sobre los usuarios o 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 o Establece una conversaci´n con otro usuario o 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 n

Comprimir y descomprimir
Comando tar zxvf tar jxvf tar cxvf <archivo>.tar.gz <archivo> gzip -d tar gzip Descripci´n o Descomprimir un .tar.gz Descomprimir un .tar.bz2 Comprimir un archivo o directorio Descomprimir un .gz Empaquetar sin comprimir (m´ltiples opciones) u 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 o 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 o Procesos en ejecuci´n del teminal o Procesos en ejecuci´n del usuario o Dispositivos PCI del sistema M´dulos cargados en el kernel o Cargar m´dulos en el kernel o Informaci´n del sistema o Librer´ instaladas ıas Librer´ que usa el programa ıas Reinizializa el sistema (#reboot) Apaga el sistema (#halt) Realiza ´pcion despues de n segundos segundos o Cierra la sesi´n del usuario o Cambia sesi´n a otro usuario (switch user) o Borra el gestor de arranque del disco (arranques del sistema)

Jose Antonio Escart´ Vigo, Junio 2005. ın

Ap´ndice B e

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 a siguiente instrucci´n: o $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 o n siguientes l´ ıneas: es_ES@euro ISO-8859-15 es_ES ISO-8859-1 Una vez a˜adidas al archivo necesitamos que las ejecute y reconfigure nuestro sistema, mediante el n comando: #/usr/sbin/locale-gen Adem´s en unos de los ficheros que carga las variables de usuario a˜adiremos las siguientes variables a n de entorno. Por ejemplo en el archivo ˜/.bash profile: export LANG=es_ES.ISO-8859-15 export LC_ALL=es_ES@euro La pr´xima vez que hagamos login con el usuario cargar´ el nuevo perfil. Podemos comprobamos que o a “los locales” son los correctos, con el mismo comando que antes: $locale

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 e en la consola. Pasa eso tenemos que a˜adir las siguientes l´ n ıneas al fichero /etc/console-tools/config, fichero de configuraci´n de la consola: o 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 sia e a guientes 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: o $man castellanizar

Jose Antonio Escart´ Vigo, Junio 2005. ın

Ap´ndice C e

Archivos de configuraci´n o

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 o Configuraci´n del gestor de arranque Lilo o Superservidor de Internet y envoltorio de demonios TCP/IP Configuraci´n del superservidor, mediante entorno gr´fico o a 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 n El contenido de este directorio se copiar´ al home de cada a 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 o Preferencias de todos los usuarios del sistema Preferencias del usuario Preferencias del shell bash Configuraci´n de inicio del shell bash o Configuraci´n de finalizaci´n del shell bash o o Si se ejecuta un shell interactivo bash sin entrada por consola Configuraci´n del cliente para las conexiones seguras SSH o Configuraci´n del servidor de conexiones seguras SSH o 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 e Tareas programadas por cada usuario Tareas programadas que se pueden ejecutar con retraso Archivo de locales Archivo de configuraci´n de la consola o Archivo de configuraci´n de Webmin o Configuraci´n del proxy Squid o Archivos de configuraci´n del Proxy Squid o

322 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.192.168.0 /etc/bind/named.conf /etc/bind/named.conf.local /etc/bind/named.conf.options /etc/samba/smb.conf /etc/smbpasswd /etc/smbusers /etc/lmhosts

Servidor Linux para conexiones seguras de una LAN a Internet Descripci´n o Configuraci´n de la interfaz del sniffer wifi Kismet o Configuraci´n del sniffer wifi Kismet o Opciones de FreeRadius Opciones para EAP en FreeRadius IPs clientes de FreeRadius Usuarios clientes de FreeRadius M´dulos que se cargar´n al inicio o a Configuraci´n de los m´dulos o o Configuraci´n de interfaces de red o Configuraci´n de las opciones de red o Dice al sistema c´mo resolver los nombres de los hosts o Nombre.dominio del host local Nombre y direcci´n IP de hosts del sistema o 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) o a Archivos de agentes de dispositivos Sistema de versiones concurrentes (cvs) Opciones del servidor de versiones (cvs) Archivo de configuraci´n estandar DHCPD o 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 o DHCP del cliente dhcp3 DHCP del servidor dhcp3 Archivo de configuraci´n de Snort o Archivos de reglas para Snort Archivo de pol´ ıticas Archivo de configuraci´n de ACID o Archivo de configuraci´n de PortSentry o Registro de logs del sistema Archivo de configuraci´n de Nessus o Configuraci´n del servidor ProFTPD o Usuarios del sistema que tienen permitido el acceso FTP Configuraci´n del servidor NIS o Configura las IP que tienen permiso para usar el servidor NIS Configuraci´n opciones servidor NIS y archivos a exportar o Listado de los servidores NIS secundarios de nuestro sistema Configuraci´n del cliente NIS o Archivos a importar del servidor NIS Contiene el nombre y la direcci´n IP de los servidores DNS o A˜adir para los equipos de una LAN n A˜adir para el DNS inverso de una LAN n Configuraci´n del servidor DNS BIND o Define zonas locales en el servidor DNS BIND Define las opciones del servidor DNS BIND Configuraci´n del servidor Samba o 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

Jose Antonio Escart´ Vigo, Junio 2005. ın

Ap´ndice C. Archivos de configuraci´n e o 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/email-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

323 Descripci´n o Impresoras del sistema Cola de impresi´n, por defecto, en Samba o Correo de los usuarios Informaci´n de las copias de seguridad realizadas o Archivos de configuraci´n de quotas de grupo o Archivos de configuraci´n de quotas de usuario o Archivo de configuraci´n de NFS o Archivo de configuraci´n del servidor Jabber o Archivo de configuraci´n de impresoras LPD o Configuraci´n del servidor Cups o Archivo de configuraci´n de impresoras Cups o Directorio donde se almacenan los archivos que se van a imprimir Archivos de configuraci´n de Apache o

Directorio de configuraci´n de los m´dulos Apache o o Los mismos archivos de configuraci´n, para Apache-SSL o Directorio donde se almacenan los logs, generados por Apache Archivo de configuraci´n de Webalizer o Reportes de estadisticas web Archivo de configuraci´n de Exim4 o 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 o Archivo de configuraci´n de usuario Fetchmail o Archivo de configuraci´n de courier-imap o Opciones de courier-imap Opciones de courier-imap-ssl Configuraci´n de usuario Maildrop o Archivo de configuraci´n del servidor Procmail o Archivo de configuraci´n de usuario Procmail o Archivo de configuraci´n de ClamAV o Configuraci´n del SpamAssassin o Configuraci´n del demonio de SpamAssassin o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Ap´ndice D e

¿Por qu´ Debian no tiene rc.local ? e
A diferencia de otras distribuciones Linux, parece que Debian no usa rc.local (el archivo de configuraci´n o local) para el proceso de inicializaci´n. Entonces, ¿qu´ facilidades suministra Debian para esta tarea? o e

Runlevels
Tradicionalmente en los sistemas UNIX/LINUX, cuando se inicia la m´quina, el proceso “init” (que a 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. o Dicho proceso de arranque se separa en runlevels, que son simplemente n´meros que identifican cada u 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. u e a Hay una excepci´n, el runlevel s, que es el “single user mode”, y se suele usar para tareas especiales o de rescate y/o mantenimiento inesperado. Hoy en d´ las distribuciones manejan cada una sus scripts de arranque de forma particular, y muchas ıa, veces se manejan de forma alternativa sin tener runlevels claramente definidos como hasta hace unos a˜os. n En algunas, se pueden encontrar los directorios /etc/rc#.d/, donde # representa al n´mero de runlevel ; u en otras est´n todos los scripts contenidos en /etc/rc.d o en /etc/init.d. Lo mas aconsejable en cada caso a es consultar la documentaci´n de cada distribuci´n. o o Podemos cofigurar gr´ficamente los scrips de RunLevel con la herramienta: #ksysv a

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 ı, u 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/. a Cada enlace comenzar´ con una ‘S’ o una ‘K’, seguida de un n´mero, seguido por el nombre del script. Los a u scripts que comiencen con ‘S’ en /etc/rcN.d/ ser´n ejecutados al entrar al runlevel N. Los que lo hagan a con con una ‘K’ ser´n ejecutados al dejar el runlevel N. a

1 Para

tener disponible el comando update-rc.d hay que realizar un apt: #apt-get install rcconf

326

Servidor Linux para conexiones seguras de una LAN a Internet

Uno podr´ por ejemplo, obligar al script exemple a ejecutarse en el arranque, poni´ndolo en /etc/init.d/ ıa, e 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. u u 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 a u a del sistema.

Insertar un script, mediante el asistente gr´fico a
Se pueden agregar scrips de forma gr´fica, mediante nuestra herramienta de configuraci´n web: Weba o mail. En la figura D.1 podemos observar el m´todo para agregar un scrip nuevo. e

Figura D.1: Interfaz gr´fica Webmin para agregar Runlevels a

Jose Antonio Escart´ Vigo, Junio 2005. ın

Ap´ndice E e

Puertos por defecto
El n.o de puertos a los que podemos acceder en cada hosts es de 65.536 (216 ). Estos puertos est´n a divididos en tres secciones: Los puertos IANA: Son los 1024 primeros puertos del PC. La organizaci´n IANA (Internet Aso signed Numbers Authority) adjudic´ a cada uno de estos puertos una utilidad, protocolo,. . . para o estandarizar la comunicaci´n. o Los puertos Registrados: Son aquellos comprendidos entre el 1.024 y el 49.151 asignados a protocolos, programas, . . . Pero no se encuentran estandarizados. Los puertos privados: Son los que van del 49.152 y el 65.535. Sobre ellos no recae ning´n uso paru ticular y son utilizados para uso privado de los hosts y programas locales. Si necesitamos m´s informaci´n, sobre la asignaci´n de puertos la podemos consultar en la RFC1700 a o o que data de Octubre de 1994, disponible en la direcci´n: http://www.ietf.org/rfc/rfc1700.txt. o Tambi´n existe otro “malicioso” grupo de puertos, son los puertos por defecto de los troyanos. Se e utilizan para establecer la comunicaci´n servidor-cliente entre los ordenadores implicados en la misma. Al o existir troyanos que permiten utilizar utilizar otros puertos , la identificaci´n de los mismos puede no ser o infalible, si bien la mayor´ de los usuarios de troyanos no se molestan en cambiar los puertos y utilizan ıa los puertos por defecto. Si necesitamos m´s informaci´n, en la siguiente p´gina web podemos encontrar la a o a mayor´ de puertos de troyanos: http://webs.ono.com/usr026/Agika2/2troyanos/puertos troya.htm ıa Y para terminar con esta secci´n, podemos observar los puertos que hemos utilizado en este proyecto: o

Servicio FTP SSH TELNET DNS DHCP SERVIDOR DHCP CLIENTE TFTP WEB (HTTPS) HTTPS CUPS

Puerto 21 22 23 53 (UDP) 67 (UDP) 68 (UDP) 69 80 443 631

Servicio SAMBA NESSUS RADIUS SERVER HORDE HORDE (SSL) SQUID JABBER CLIENTE JABBER SERVIDOR WEBMIN

Puerto 901 1241 1812 2095 2096 3128 5222 5269 10000

Ap´ndice F e

Manual del editor Vim (Vi mejorado)
Personalmente utilizo el editor Vim frente al editor Emacs, este ultimo es m´s completo y tiene m´s ´ a a opciones, pero no me son utiles. Prefiero un editor potente y a la vez simple (Vim es muy simple, una vez ´ conocidos los comandos b´sicos). a Tiene dos modos de trabajo, el modo comando y el modo inserci´n. Me voy a centrar, principalmente o en el modo comando debido al gran n´mero de opciones disponibles. u

Edici´n de ficheros o
Para editar un fichero simplemente hay que hacer: $vi <archivo>, . . . en caso de que no exista se crear´. a

Modo inserci´n o
Al editar un fichero entramos en el modo comando por defecto, si lo que queremos es entrar en el modo inserci´n, tenemos varias opciones: o a: A˜adir a partir del siguiente car´cter n a i: Insertar a partir del car´cter actual a o: Insertar una l´ ınea debajo de la actual y comenzar all´ la inserci´n ı o El modo inserci´n no tiene muchos secretos, se puede escribir lo que se quiera y luego volver al modo o comando, pulsando la tecla Esc.

Modo comando
El modo comando del vim tiene multitud de opciones, pasemos a detallar las m´s utilizadas: a u: Deshacer la ultima acci´n. Cabe destacar que en Vim, a diferencia de otros editores se pueden ´ o deshacer infinitos cambios, ya que esta opci´n no tiene l´ o ımite CTRL+r: Rehace la ultima acci´n deshecha con “u” ´ o w: Guardar w!: Fuerza a guardar (es recomendable usar esta opci´n) o

330

Servidor Linux para conexiones seguras de una LAN a Internet q: Salir, si no se ha guardado bloquea la salida q!: Fuerza a salir sin guardar x: Guardar y salir x!: Guardar y salir, forzando la escritura. e fichero: Abre el fichero dd: Elimina la l´ ınea sobre la que est´ el cursor a x: Suprime el car´cter siguiente a donde esta el cursor a <numero>yy: Copia una cantidad de l´ ıneas igual a n´mero u p: Pegar l´ ıneas /cadena: Busca ‘cadena’ en el texto sobre el que trabajamos n: nueva b´squeda sobre la ultima cadena especificada u ´ :<numero> : Va a la l´ ınea identificada por el n´mero u %s/cadena/nueva cadena: Se usa para sustituir ‘cadena’ por ‘nueva cadena’ en el texto, esta opci´n o es especialmente util ´ r fichero: Vuelca el contenido de fichero sobre la posici´n actual del cursor o !comando: Inserta la salida de un comando ejecutado. Por ejemplo si hacemos !ls inserta la salida de ls en nuestro fichero. . (punto): Repite el ultimo comando ´

Personalizaci´n del Vim o
Se puede personalizar Vim mediante un archivo de configuraci´n, el ˜/.vimrc. En dicho fichero tenemos o una serie de opciones que podemos activar o desactivar seg´n lo que prefiramos, las principales son: u syntax on: Activa el coloreado de sintaxis, muy util para programadores ´ set nobackup: Evita que se cre´n copias de seguridad cada vez que editemos un fichero e set showmode: Muestra siempre en que modo estamos trabajando (comando o inserci´n) o set ruler: Muestra una regla con informaci´n en la parte inferior de la consola o set vb: Desactiva el molesto “pitido” y lo sustituye por un parpadeo de pantalla set ignorecase: No diferencia entre may´sculas y min´sculas u u set showmatch: Es util para realizar b´squedas, resaltar´ los resultados coincidentes con el patr´n. ´ u a o au BufReadPost * if line ("""")lexecute(normal’"")|endif: Posiciona el cursor en donde se encontraba la ultima vez que editamos el fichero ´ Basado en un manual publicado en Todo-Linux, puede ser consultado en la siguiente direcci´n: o http://www.todo-linux.com/modules.php?name=News&file=article&sid=2162

Jose Antonio Escart´ Vigo, Junio 2005. ın

Ap´ndice G e

Gu´ r´pida de IPTables ıa a
IPTables es una herramienta para filtrar paquetes del kernel (2.4x o posterior).

Comandos b´sicos a
IPTables es la evoluci´n de ipchains y ipfwadm y b´sicamente permite o rechaza los paquetes que o a llegan al host desde una red. Cadenas (chains) predefinidas: • INPUT: Los paquetes que llegan a nuestra m´quina a • OUTPUT: Los paquetes que salen de nuestra m´quina a • FORWARD: Los paquetes que atraviesan nuestra m´quina a Las opciones b´sicas: a • -s: Especifica una direcci´n de origen o • -d: Especifica una direcci´n de destino o • --sport: Puerto de origen • --dport: Puerto de destino • --tcp-flags mascara activos: Flags permitidos (m´scara) y flags activos a • -m: M´dulo de opciones (Vease $man iptables) o • -f: Paquetes fragmentados • -t: Especifica la tabla (filter, nat o mangle) • -p: Especifica un protocolo • -i: Especifica un interface de entrada • -o: Especifica un interface de salida • -j: Especifica la acci´n a ejecutar sobre el paquete o Acciones: • DROP: Elimina el paquete • LOG: Registra el paquete • REJECT: Rechaza el paquete • ACCEPT: Acepta el paquete

332 Comandos fundamentales:

Servidor Linux para conexiones seguras de una LAN a Internet

• iptables -L, . . . ver las reglas introducidas • iptables -F, . . . borrar todas las reglas Con #man iptables tenemos todas las opciones.

Ejemplos
Eliminamos todas los paquetes de entrada y salida: iptables -A INPUT -j DROP iptables -A OUPUT -j DROP Aceptamos que se conecten a nuestro servidor Web(80) y FTP(21): iptables -A INPUT -p TCP --dport 80 -j ACCEPT iptables -A INPUT -p TCP --dport 21 -j ACCEPT Permitimos la comunicaci´n con el servidor DNS: o iptables -A INPUT -p udp --dport 53 -j ACCEPT Script muy b´sico de IPTables para dar acceso al 80 y al 22: a
#!/bin/bash # Permitimos que se conecten a nuestro servidor web y al ssh iptables -A INPUT -p TCP --dport 80 -j ACCEPT iptables -A INPUT -p TCP --dport 22 -j ACCEPT # Permitimos la comunicacion con el servidor dns iptables -A INPUT -p udp --dport 53 -j ACCEPT # Reglas basicas. Denegamos todas las entradas permitimos todas las salidas iptables -A INPUT -j DROP iptables -A OUTPUT -j ACCEPT

Si queremos poner la m´quina como firewall con dos interfaces de red, eth0 y eth1: a • Activamos el ip forward: echo 1 > /proc/sys/net/ipv4/ip_forward • Hacemos el NAT de las direcciones de fuera y permitimos la salida: iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE iptables -A FORWARD -o eth1 -i eth0 -j ACCEPT • S´lo permitimos que la o iptables -A FORWARD iptables -A FORWARD iptables -A FORWARD red interna acceda a los puertos 25 y 80 de la red externa: -s 192.168.0.0/24 -p TCP -j DROP -s 192.168.0.0/24 -p TCP --dport 25 -j ACCEPT -s 192.168.0.0/24 -p TCP --dport 80 -j ACCEPT

Si queremos hacer un proxy transparente para la salida de la red interna, es decir abrir un puerto de salida en el router: iptables -t nat -A PREROUTING -i eth0 -p tcp --dport [puerto_externo] -j DNAT --to [IP_maquina]:[puerto_maquina] Si queremos denegar un rango concreto de IPs: iptables -A INPUT -s 195.76.238.0/24 -j DROP iptables -A INPUT -s 217.116.8.112/29 -j DROP iptables -A INPUT -s 217.116.0.144 -j DROP iptables -A INPUT -s 195.76.172.0/24 -j DROP iptables -A INPUT -s 155.201.0.0/16 -j DROP

Jose Antonio Escart´ Vigo, Junio 2005. ın

Debian Sarge, nueva versi´n estable o
En el proyecto Debian, Sarge ha sido congelada y en breve ser´ la nueva versi´n ‘stable’ de Debian. La a o versi´n testing pasara a llamarse Etch y ser´ una versi´n real “en pruebas” ya que Sarge llevaba mucho o a o tiempo entre los usuarios y ya esta muy probada. Para tener nuestro servidor es necesario tener una versi´n estable y no en pruebas, hemos de modificar o nuestro /etc/apt/sources.list para que no nos cambie de versi´n autom´ticamente. o a

En estos momentos mi archivo /etc/apt/sources.list contiene las siguientes entradas: deb http://ftp.rediris.es/debian testing main contrib non-free deb-src http://ftp.rediris.es/debian/ testing main non-free contrib deb http://ftp.rediris.es/debian-non-US testing/non-US main contrib non-free deb-src http://ftp.rediris.es/debian-non-US testing/non-US main contrib non-free deb http://security.debian.org/ testing/updates main contrib non-free Para que mi sistema siga siendo Sarge, aunque dentro de unos d´ lo har´ en la nueva etapa como ıas a estable, deberemos cambiarlo por este otro: deb http://ftp.rediris.es/debian sarge main contrib non-free deb-src http://ftp.rediris.es/debian/ sarge main non-free contrib deb http://ftp.rediris.es/debian-non-US sarge/non-US main contrib non-free deb-src http://ftp.rediris.es/debian-non-US sarge/non-US main contrib non-free deb http://security.debian.org/ sarge/updates main contrib non-free Y realizar un: #apt-get update Si dejamos el archivo /etc/apt/sources.list como “testing”, nuestro sistema dejar´ de ser Sarge, y paa sar´ a ser Etch. a Tambi´n quer´ recordar que existe una tercera versi´n de Debian: Debian Sid o “unstable”, que es la e ıa o versin inestable. Esta versi´n siempre se llamar´ as´ “Sid” y no es adecuada para el uso de servidores, ya o a ı: que esta destinada a desarrollar el software que luego pasar´ al resto de versiones. a

334

Servidor Linux para conexiones seguras de una LAN a Internet Desde la p´gina oficial de Debian podemos obtener los siguientes datos: a Desde el 3 de mayo de 2005, las actualizaciones de seguridad de la distribuci´n “en pruebas” las o gestiona el equipo de seguridad. Por tanto, esta distribuci´n dispone de oportunas actualizaciones o de seguridad. Esta situaci´n es temporal, ya que la distribuci´n en pruebas est´ congelada. o o a La fecha de publicaci´n, inicialmente prevista para el 30 Mayo, se ha pospuesto una semana, y pasa o a ser el 6 de junio de 2005. Como es usual, las metas de la versin y la fecha en la que se har´ p´blica no se determinan con a u antelaci´n. En otras palabras, “Debian publica la nueva versi´n cuando es el momento de hacerlo”. o o Los mayores cambios para Sarge incluyen reemplazar el antiguo sistema de instalaci´n con discos o flexibles, por el nuevo instalador de Debian, y usar GCC 3.3 como el nuevo compilador predeterminado en arquitecturas que hasta ahora usaban la versi´n 2.95. Tambi´n se ha llevando a cabo la o e introducci´n de nuevas versiones de programas como son Perl 5.8 y XFree86 4.3. o

Como despedida solo cabe decir, que acerte de pleno en la planificaci´n y la elecci´n de Debian o o Sarge fue primordial para que este documento sirva como ayuda durante un largo tiempo a los nuevos “administradores junior”, sitio en el cual humildemente me ubico.

Jose Antonio Escart´ Vigo, Junio 2005. ın

Licencia Creative Commons: Reconocimiento-CompartirIgual
Gracias a la Universidad de Barcelona y en particular a Ignasi Labastida i Juan y a la colaboraci´n de o un grupo de abogados de reconocido prestigio disponemos hoy por hoy de las licencias creative commons, no meramente traducidas al castellano y al catal´n, sino tambi´n y sobre todo, adaptadas a la legislaci´n a e o espa˜ola. n Con demasiada frecuencia, la visi´n sobre la protecci´n de de obras creativas tiende a los extremos. o o Por una lado tenemos la concepci´n en la cual cualquier posible uso de una obra debe estar regulado al o mil´ ımetro; cuyo m´ximo exponente en nuestro pa´ quiz´ sea la cada vez menos querida SGAE a ıs a Por otro lado tenemos la anarqu´ total. Una visi´n en la que los creadores tienen total libertad para ıa o hacer lo que les d´ la gana, pero en la que no tienen absolutamente ninguna protecci´n. e o Creative commons surge como una soluci´n de compromiso entre ambas posturas. De esta forma, los o creadores pueden elegir qu´ derechos quieren reservarse y qu´ usos de su obra quieren permitir. As´ se conse e ı truye una capa de protecci´n que ofrece una alternativa razonable y flexible a la cada vez m´s restrictiva o a normativa en cuesti´n de propiedad intelectual. o En diciembre de 2002, Creative Commons lanza el primer conjunto de licencias, que cualquier a puede utilizar de forma completamente gratuita para proteger sus creaciones. Las licencias de Creative Commons se inspiran en la licencia a GPL de la Fundaci´n para el Software o Libre; pero, al contrario ´sta, las licencias Creative Commons no est´n pensadas para software, sino para e a otros tipos de trabajos creativos: p´ginas web, tesis doctorales, m´sica, pel´ a u ıculas, fotograf´ literatura, ıas, cursos . . .

Como escoger una licencia
Para que la selecci´n de licencias resulte f´cil para todo el que quiera proteger sus obras sin necesidad o a de saber nada de Derecho, han creado una herramienta online, diponible en Castellano y Catal´n que te a permite ir eligiendo el tipo de protecci´n que quieres para tu trabajo y en funci´n de las opciones que o o escojas, te ofrece la licencia m´s adecuada. a http://creativecommons.org/license/?lang=es, . . . herramienta en castellano. http://creativecommons.org/license/?lang=ca, . . . herramienta en catal´n. a

0 Estos datos han sido obtenidos de la web http://www.elcuaderno.info, acogida a la licencia http://creativecommons.org/ /licenses/by-sa/2.0/, “Reconocimiento-CompartirIgual” la misma bajo la que se encuentra este proyecto, el autor no se cita al no figurar en el articulo.

336

Servidor Linux para conexiones seguras de una LAN a Internet

Creative commons no supone renunciar a proteger tu trabajo, sino que implica que puedes escoger qu´ derechos prefieres reservarte y qu´ derechos quieres ceder a los dem´s. e e a T´ decides en qu´ condiciones est´s dispuesto a permitir la utilizaci´n de tu trabajo, combinando las u e a o distintas condiciones que puedes imponer, hay hasta once tipos de licencias distintas de las que escoger (adaptadas a nuestra legislaci´n, en este momento hay 6). o Estas son las condiciones que se pueden escoger: Attribution/Reconocimiento: Permites que otras personas puedan copiar, distribuir y comunicar p´licamente la obra as´ como hacer obras derivadas, incluyendo el hacer un uso comercial de tu obra. u ı Siempre que: • Te citen y te reconozcan como el autor original de la obra. • Al reutilizar o distribuir la obra, tienen que dejar bien claro los t´rminos de la licencia la obra e Noncommercial/No comercial : Permites que otras personas puedan copiar, distribuir y comunicar p´licamente la obra as´ como hacer obras derivadas. Siempre que: u ı • Te citen y te reconozcan como el autor original de la obra. • Al reutilizar o distribuir la obra, tienen que dejar bien claro los t´rminos de la licencia la obra e • No utilicen tu obra con fines comerciales No Derivative Works/Sin obra derivada: Permites que otras personas puedan copiar, distribuir y comunicar p´licamente la obra, incluidos los posibles usos comerciales de la obra. Siempre qu´: u e • Te citen y te reconozcan como el autor original de la obra. • Al reutilizar o distribuir la obra, tienen que dejar bien claro los t´rminos de la licencia la obra e • No se alterare, transforme o genere una obra derivada a partir de tu obra. Share Alike/Compartir igual : Permites copiar, distribuir y comunicar p´licamente la obra, hacer u obras derivadas y hacer un uso comercial de esta obra. La distribuci´n de las obras derivadas se o permite unica y exclusivamente cuando la obra derivada utilice una licencia id´ntica que la que tiene ´ e el trabajo original. No se pueden combinar las condiciones “compartir igual” y “sin obra derivada”, puesto que la condici´n “compartir igual” s´lo es aplicable a las obras derivadas. o o Una vez que has escogido las condiciones que quieres, accedes a la licencia apropiada de tres maneras: Resumen simple: Un resumen en un lenguaje simple que todo el mundo puede entender, junto con los iconos representativos de la licencia. C´digo legal: el texto completo de la licencia dirigido fundamentalmente a abogados. o C´digo digital: Una versi´n de la licencia legible por m´quinas que ayudar´ a las herramientas de o o a a b´squeda y otras aplicaciones a identificar tu trabajo en funci´n de sus condiciones de uso. u o

Jose Antonio Escart´ Vigo, Junio 2005. ın

Ap´ndice G. Gu´ r´pida de IPTables e ıa a

337

C´mo se utiliza la licencia o
Una vez elegida la licencia, obtendremos un c´digo HTML, que una vez pegado en la p´gina web o a generar´ un bot´n. a o El bot´n “some rights reserved”, indica que los contenidos del sitio web est´n protegidos por una o a licencia Creative commons. El bot´n enlaza con el resumen de la licencia que utilizas para proteger tus o contenidos. De esta forma, comunicando p´blicamente los t´rminos de tu licencia si alguien infringe los u e mismos, est´s protegido jur´ a ıdicamente y puedes interponer una demanda en defensa de tus derechos de propiedad intelectual. Creative commons no es un bufete de abogados ni proporciona asesoramiento jur´ ıdico en caso de infringimiento de los t´rminos de una licencia. Si se da el caso, tendr´s que acudir a un abogado, los que e a yo conozco? Supongo que los mismos que todo el mundo: Javier Mestre y Carlos S´nchez Almeida del a bufete Almeida (http://www.bufetalmeida.com). En la lista de correo sobre licencias creative commons en espa˜ol, participan varios abogados, quiz´ all´ puedes preguntar qu´ bufete hay cerca de d´nde vives que n a ı e o est´ especializado en estos temas. e Las seis posibles combinaciones adaptadas a la legislaci´n espa˜ola son: o n 1. Reconocimiento 2. Reconocimiento-SinObraDerivada 3. Reconocimiento-NoComercial-SinObraDerivada 4. Reconocimiento-NoComercial 5. Reconocimiento-NoComercial-CompartirIgual 6. Reconocimiento-CompartirIgual

Licencia escogida
Por el car´cter abierto y libre de este proyecto, para elegir la licencia se voy a seguir el esp´ a ıritu de GNU y sus licencias: GPL para software y GFDL (GNU Free Document) para documentaci´n. o Por eso cedo el derecho de realizar una explotaci´n econ´mica de la obra, a condici´n de que, esa obra o o o modificada o derivada este bajo la misma licencia que la primera y en ella se me cite como autor original. Es decir, para el PFC: “Servidor Linux para conexiones seguras de una LAN a Internet”, he escogido la licencia CC - “Reconocimiento-CompartirIgual”. La asignaci´n de este tipo de licencia “Creative Common” respecto a GFDL, est´ justificada debido a o a que, en mi opini´n, GFDL tiene un gran fallo, no permite realizar modificaciones de la obra y publicarlas o bajo el mismo nombre y en mi caso, esta obra se deber´ actualizar con el tiempo, ya sea por m´ o por a ı alguna otra persona que contin´e el proyecto. No quiero que el PFC nazca y muera igual, prefiero donarlo u a la comunidad y permitir que se pueda modificar y actualizar con el tiempo. Creative Commons, me ha facilitado el siguiente p´rrafo para cualquier persona que necesite m´s a a informaci´n sobre la licencia: o “Esta obra est´ bajo la licencia de Atribuci´n de Creative Commons: Reconocimiento-CompartirIgual a o 2.1 Espa˜a. Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by-sa/2.1/es/ n o envie una carta a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.”

Jose Antonio Escart´ Vigo, Junio 2005. ın

338

Servidor Linux para conexiones seguras de una LAN a Internet

Resumen simple de la licencia del PFC

Figura G.1: Licencia Reconocimiento-CompartirIgual Esto es un resumen legible del texto legal, la licencia completa se encuentra disponible en la direcci´n: o http://creativecommons.org/licenses/by-sa/2.1/es/legalcode.es

Jose Antonio Escart´ Vigo, Junio 2005. ın

P´ginas Web consultadas a
http://acidlab.sourceforge.net/ - Consola de an´lisis de Bases de datos de intrusiones (ACID) a http://airsnort.shmoo.com/ - Web oficial de AirSnort http://apostols.org/projectz/neped/ - Web oficial de NePED, detector de sniffers http://barrapunto.com - Web de noticias sobre inform´tica a http://bogofilter.sourceforge.net/ - P´gina web de Bogofilter a http://bulma.es - Comunidad de usuarios Linux, multitud de art´ ıculos http://bulma.net/body.phtml?nIdNoticia=1334 - Manual de configuraci´n DNS BIND 9.2.1 o http://cauchy.bdat.net/dns/bind-9/DNS-HOWTO-9-es/ - DNS Como http://certisign.com.br/servidores - Entidad de certificaci´n o http://deim.etse.urv.es/ajuda/manuals/vi/ - Manual del vi http://docs.kde.org/es/HEAD/kdegraphics/ksnapshot/ - Manual de KSnapshot http://download.jabber.org/ - Pluggins para jabber http://eia.udg.es/˜atm/tcp-ip/index.html - Documentaci´n sobre TCP/IP o http://enterprise.bidmc.harvard.edu/pub/nessus-php/ - Interfaz PHP para Nessus http://es.tldp.org - Proyecto Lucas, documentaci´n Linux en espa˜ol o n http://es.tldp.org/Tutoriales/NOVATO/novato-a-novato/novato-a-novato.html - Manual del novato http://es.wikipedia.org - Wikipedia, la enciclopedia libre http://gimp.hispalinux.es - Grupo de usuarios Espa˜oles de GIMP n http://gsyc.escet.urjc.es/robotica/apuntes/captura video COMO.pdf - COMO capturar video http://his.sourceforge.net/trad/honeynet/ - Proyecto HoneyNet en castellano http://hostap.epitest.fi/wpa supplicant/ - HowTo wpa supplicant http://httpd.apache.org/ - Apache HTTPD Server Project http://kile.sourceforge.net/ - Web oficial Kile http://latex2rtf.sourceforge.net/ - Convertidor de Latex a Rtf http://laura.celdran.name/ - HowTos Laura Celdran http://losinvisibles.net/como/como.html - Mini Como’s de Simon http://oriol.joor.net/article fitxers/1574/WXP-WAP-EAPTLS.pdf - Conectar WinXP a Radius http://packages.debian.org/testing/ - Gu´ completa de paquetes Debian Sarge ıa http://patux.glo.org.mx/imp-mini-como.html - HowTo sobre IMAP http://prosper.sourceforge.net/ - Web oficial de Prosper http://sourceforge.net/projects/airsnort - Proyecto SourceForge AirSnort http://spamassassin.apache.org/ - P´gina web de SpamAssassin a http://tira.escomposlinux.org/ - Tira c´mica Linux o http://tldp.org/HOWTO/html single/8021X-HOWTO/ - HowTo 802.1x http://us1.samba.org/samba/docs/man/Samba-HOWTO-Collection/ - HowTo oficial de Samba http://webadminmodules.sourceforge.net/ - M´dulos para Webmin o http://webs.ono.com/usr026/Agika2/2troyanos/puertos troya.htm - Puertos de Troyanos http://www.apache.org/ - P´gina Web del Proyecto Apache a http://www.apache-ssl.org/ - P´gina Web del Proyecto Apache-SSL a http://www.bastille-linux.org - Web de Bastille Linux http://www.bufetalmeida.com - Bufete Almeida, especializado en ciberderechos http://www.canariaswardrive.org/ - 1.er campeonato de Wardriving en Espa˜a n http://www.catb.org/ esr/fetchmail/ - P´gina web de Fetchmail a

340

Servidor Linux para conexiones seguras de una LAN a Internet

http://www.catcert.net/ - Agencia catalana de certificaci´n o http://www.cert.org/ - Agencia seguridad en Internet CERT (Computer Emergency Response Team) http://www.cervantex.org - Comunidad de usuarios espa˜oles de TEX n http://www.chkrootkit.org/ - Web de chkrootkit http://www.clamv.net - Web oficial del antivirus de correo ClamV http://www.compuamersa.com/linux.htm - Sobre las distribuciones http://www.courier-mta.org/ - P´gina web de Courier a http://www.cypherspace.org/openpgp/ - Implementaciones de OpenPGP http://www.debian.org - Web oficial de Debian http://www.debian.org/distrib/ - M´todos de la distribuci´n Debian e o http://www.debian.org/doc/ - Documentaci´n r´pida para Debian o a http://www.debian.org/doc/manuals/apt-howto/index.es.html - APT HowTo, en espa˜ol n http://www.debian.org/doc/manuals/securing-debian-howto/index.es.html - Manual de seguridad http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html - Recompilaci´n Kernel HowTo o http://www.distrowatch.com/index.php?language=ES - Todo sobre distribuciones http://www.dslreports.com/forum/remark,9286052 mode=flat - Conectar WinXP a Radius (Ingles) http://www.elcuaderno.info/ - Web de noticias http://www.entrust.net - Entidad de certificaci´n o http://www.escomposlinux.org/ - Grupos de noticias de Linux http://www.exim.org/ - P´gina web de Exim a http://www.faqs.org/docs/iptables/index.html - Tutorial IPTables (Ingl´s) e http://www.freeradius.org/ - FreeRadius http://www.gimp.org - Web oficial de The Gimp http://www.gnome.org/ - Web de GNOME http://www.gnupg.org - Web oficial de GnuPG http://www.gwolf.org/seguridad/portsentry/ - Manual de uso PortSentry http://www.gwolf.org/seguridad/logcheck/ - Manual de uso Logcheck http://www.honeyd.org - Web oficial de Honeyd http://www.horde.org/ - P´gina web de Horde a http://www.icewalkers.com/Linux/Howto/ - HowTos en espa˜ol n http://www.ietf.org/rfc/rfc1700.txt - Puertos estandarizados por la IANA http://www.iks-jena.de/produkte/ca - Entidad de certificaci´n o http://www.imendio.com/projects/planner/ - Web oficial Planner http://www.insecure.org/nmap/ - Escaner de puertos http://www.isc.org/index.pl?/sw/bind/ - P´gina oficial de Bind a http://www.jabber.org/ - P´gina web oficial de Jabber a http://www.jabberes.org/ - P´gina de usuarios de Jabber espa˜oles a n http://www.kde.org/ - Web de KDE http://www.kernel.org - Fuentes oficiales http://www.kismetwireless.net - Web oficial Kismet Wireless A http://www.latex-project.org/ - Web oficial de L TEX http://www.lids.org/ - Linux Intrusion Detection System http://www.linux.cu/manual/basico-html/node120.html - Definici´n de tareas peri´dicas o o http://www.linuxdocs.org - HowTos http://www.linuxdocs.org/HOWTOs/Kernel-HOWTO.html - Kernel HowTo http://www.linuxguruz.com/iptables/ - Manuales sobre IPTables http://www.linuxlots.com/˜barreiro/spain/cuota.html#toc1 - Cuotas de usuario http://www.linuxzamora.org - Web de usuarios de Linux http://www.llibreriaha.com/cas/index.asp - Librer´ t´cnica online de Barcelona ıa e http://www.missl.cs.umd.edu/wireless/eaptls/ - HowTo EAP-TLS en WPA http://www.nessus.org/ - Herramienta de b´squeda de vulnerabilidades u http://www.netfilter.org - Web oficial de IPTables http://www.netsecuritysvcs.com/ncc/ - Herramienta gr´fica para Nessus a http://www.nodedb.com/europe/es - Web de nodos wireless
Jose Antonio Escart´ Vigo, Junio 2005. ın

Ap´ndice G. Gu´ r´pida de IPTables e ıa a

341

http://www.openssh.org - Web de OpenSSH http://www.packetfactory.net/Projects/sentinel/ - Web oficial de Sentinet, detector de sniffers http://www.planetplanner.org/ - Comunidad de usuarios de Planner http://www.procmail.org/ - P´gina web de Procmail a http://www.proftpd.org/ - Web oficial del proyecto ProFTPD http://www.samba.org/samba/docs/ - Documentaci´n sobre samba o http://www.snort.org - Web oficial de Snort http://www.thawte.com - Entidad de certificaci´n o http://www.tldp.org/HOWTO/BootPrompt-HOWTO.html - HowTo bootprompt en Debian Sarge http://www.todo-linux.com/ - Manuales sobre linux http://www.tripwire.org - Web oficial de Tripwire http://www.verisign.com/site - Entidad de certificaci´n VeriSign o http://www.webmin.com/ - Web de Webmin http://www.wifimaps.com/ - Mapas de nodos wireless http://www.xfree86.org/ - Web de XFree86 http://www.xombra.com - Articulos sobre Linux http://www.zonagratuita.com/servicios/seguridad/snort.html - Snort + Acid en Windows http://xvidcap.sourceforge.net - Proyecto Xvidcap

Jose Antonio Escart´ Vigo, Junio 2005. ın

Bibliograf´ ıa
[Ano00] [Aok05] [BB00] [BN00] [CO03] Anonimo. Linux m´xima seguridad. Pearson Prentice Hall, 2000. a Osamu Aoki. Gu´ de referencia Debian. http://qref.sourceforge.net, Febrero 2005. ıa Albert Bernaus and Jaime Blanco. Linux a fondo. InforBook’s, 2000. Daniel Bandel and Robert Napier. Linux. Pearson Prentice Hall, sexta edition, 2000. Francisco Charte Ojeda. Programaci´n GNU/Linux. Anaya Multimedia, 2003. o

[CSLSMR+ 00] Bernardo Cascales Salinas, Pascual Lucas Saor´ Jos´ Manuel Mira Ros, Antonio Jos´ Paın, e e llar´s Ruiz, and Salvador S´nchez-Pedreo Guill´n. L TEX: una imprenta en sus manos. Aula e a e A Documental de Investigaci´n, 2000. o [CSLSMR+ 03] Bernardo Cascales Salinas, Pascual Lucas Saor´ Jos´ Manuel Mira Ros, Antonio Jos´ Paın, e e A llar´s Ruiz, and Salvador S´nchez-Pedreo Guill´n. El libro de L TEX. Pearson Prentice e a e Hall, 2003. [eidD04] [How05] [PRG+ 02] El equipo instalador de Debian. Gu´ de instalaci´n Debian GNU/Linux 3.1 para Intel x86. ıa o http://www.debian.org, 2004. http://d-i.alioth.debian.org/manual/es.i386/index.html. Tony Howlett. Software libre: Herramientas de seguridad. Anaya Multimedia, 2005. Bruce Perens, Sven Rudolph, Igor Grobman, James Treacy, and Adam Di Carlo. Instalaci´n Debian GNU/Linux 3.0 para Intel x86. http://www.debian.org, Diciembre 2002. o http://www.debian.org/releases/woody/installmanual. Steve Shash. Manual de administraci´n de Linux. Osborne McGraw-Hill, 2001. o
A Gabriel Valiente Feruglio. Composici´n de textos cient´ o ıficos con L TEX. Ediciones UPC, 1997.

[Sha01] [VF97] [vH02]

William von Hagen. Sistemas de ficheros Linux. Pearson Prentice Hall, 2002.

Sign up to vote on this title
UsefulNot useful