xx Redes de Computadoras Guin de Prcticas

Redes de Computadoras Guixn de Prxcticas

Vicente Gonzxlez Ruiz

Depto de Arquitectura de Computadores y Electrxnica

  vruiz@ual.es
http://www.ace.ual.es/~vruiz/docencia

February 18, 2008

xndice 1 El laboratorio de redes x1.1 Hardware x1.2 Software x1.3 Funcionamiento bxsico del VMware 2 Atenuacixn de las sexales x2.1 ¿Qux es una sexal? x2.2 ¿Cuxndo transporta informacixn una sexal? x2.3 ¿Atenuacixn? x2.4 ¿Qux es la relacixn sexal/ruido? x2.5 ¿Qux es una sexal digital? x2.6 La digitalizacixn de sexales x2.7 Espectro de frecuencias de una sexal x2.8 ¿Cxmo es el espectro de frecuencias de una sexal digital? x2.9 ¿Cxmo afecta la atenuacixn de las sexales a su espectro? x2.10 El filtrado de sexales 3 Multiplexacixn de sexales x3.1 Multiplexar, ¿para qux? x3.2 Multiplexacixn de sexales en el dominio del tiempo x3.3 La modulacixn de sexales x3.4 Multiplexacixn de sexales en el dominio de la frecuencia 4 Configuracixn del IP x4.1 Nociones bxsicas sobre el TCP/IP x4.2 Configuracixn del TCP/IP en Windows XP x4.3 Configuracixn del TCP/IP en Linux 5 Acceso remoto 1: Telnet y Ftp x5.1 Telnet x5.2 Ftp (File Transfer Program) 6 La Web x6.1 Mxs sobre la Web x6.2 Mozilla Firefox x6.3 Apache x6.4 Squid x6.5 Anxlisis de las interacciones Web 7 El correo electrxnico x7.1 The Internet mail infrastructure x7.2 El SMTP (Simple Mail Transfer Protocol) x7.3 Las cabeceras de los correos electrxnicos x7.4 Utilidad de un servidor local x7.5 El correo electrxnico en redes privadas x7.6 Exim x7.7 Un MUA: Mutt 8 DNS (Domain Name Service) x8.1 Los nombres de dominio x8.2 Dominios y subdominios x8.3 La jerarquxa de dominios x8.4 El proceso de resolucixn x8.5 Instalacixn de un servidor DNS x8.6 Configuracixn del servidor DNS x8.7 Configuracixn del cliente x8.8 Ejemplos de consultas x8.9 Cuidado con el DNS x8.10 DNS + DHCP 9 Acceso remoto 2: SSH x9.1 Algoritmos de cifrado x9.2 Caracterxsticas del SSH x9.3 Instalacixn de SSH (cliente y servidor) x9.4 Configuracixn del servidor x9.5 Configuracixn del cliente x9.6 Uso de SSH 10 Un Pinger basado en el UDP x10.1 El comando ping x10.2 El ICMP (Internet Control Message Protocol) x10.3 El Pinger 11 Un servidor simple basado en el TCP x11.1 El servidor x11.2 El cliente 12 DHCP (Dynamic Host Configuration Protocol) x12.1 Clientes, servidores y agentes de retransmisixn x12.2 Sobre las configuraciones asignadas x12.3 El proceso de concesixn x12.4 Instalacixn del servidor DHCP x12.5 Configuracixn del servidor x12.6 Configuracixn del cliente x12.7 Configuracixn del TCP/IP en caliente 13 Rastreo del TCP x13.1 Capturando ... 14 Rastreo del IP x14.1 La estructura del paquete x14.2 Tiempo de vida de los paquetes x14.3 Fragmentacixn x14.4 NAT 15 Rastreo de Ethernet y del ARP x15.1 La estructura del frame x15.2 El ARP A Gestixn de paquetes en Linux xA.1 Debian Linux xA.2 Fedora Core Linux xA.3 Gentoo Linux B Administracixn de cuentas de usuario en Linux C Activacixn y desactivacixn de servicios en Linux D Escaneado de puertos en Linux xD.1 Cuidado cuando escaneamos una mxquina ...

xD.2 netstat

xD.3 Nmap xD.4 Nessus E Filtrado de paquetes en Linux xE.1 En Linux el filtrado de paquetes se realiza a nivel del kernel xE.2 El proceso de filtrado xE.3 Uso de iptables F Captura de paquetes usando Wireshark xF.1 ¿Quixn usa un sniffer? xF.2 Sniffers y analizadores de paquetes xF.3 Instalacixn de Wireshark xF.4 El interfaz grxfico de Wireshark xF.5 Capturando paquetes con Wireshark xF.6 Filtrado de los paquetes capturados xF.7 Ordenacixn de los paquetes capturados xF.8 Anxlisis de los paquetes G Distribucixn de ficheros usando Bittorrent xG.1 Arquitectura de Bittorrent xG.2 Funcionamiento bxsico de Bittorrent xG.3 Uso de un “cliente” xG.4 Uso de un “servidor” H Cxdigos fuente

xH.1 add.c
xH.2 ascii2float.c
xH.3 demodulator.c
xH.4 drawxsignal.sh
xH.5 float2ascii.c
xH.6 lowxpassxfilter.c
xH.7 modulator.c
xH.8 sampler.c
xH.9 spectrumxanalyzer.c

I La tabla ASCII imprimible de 7 bits Bibliography ndice

[next] [prev] [prev-tail] [tail] [up] xndice

1 El laboratorio de redes x1.1 Hardware x1.2 Software xx1.2.1 Windows xx1.2.2 Fedora Core Linux xx1.2.3 Debian Linux del PC virtual x1.3 Funcionamiento bxsico del VMware xx1.3.1 El PC virtual xx1.3.2 Usuarios xx1.3.3 Conectividad 2 Atenuacixn de las sexales x2.1 ¿Qux es una sexal? x2.2 ¿Cuxndo transporta informacixn una sexal? x2.3 ¿Atenuacixn? x2.4 ¿Qux es la relacixn sexal/ruido? x2.5 ¿Qux es una sexal digital? x2.6 La digitalizacixn de sexales xx2.6.1 Digitalizacixn de sexales digitales x2.7 Espectro de frecuencias de una sexal x2.8 ¿Cxmo es el espectro de frecuencias de una sexal digital? x2.9 ¿Cxmo afecta la atenuacixn de las sexales a su espectro? x2.10 El filtrado de sexales 3 Multiplexacixn de sexales x3.1 Multiplexar, ¿para qux? x3.2 Multiplexacixn de sexales en el dominio del tiempo x3.3 La modulacixn de sexales x3.4 Multiplexacixn de sexales en el dominio de la frecuencia 4 Configuracixn del IP x4.1 Nociones bxsicas sobre el TCP/IP xx4.1.1 Las direcciones IP xx4.1.2 La puerta de enlace xx4.1.3 El servidor de nombres x4.2 Configuracixn del TCP/IP en Windows XP x4.3 Configuracixn del TCP/IP en Linux xx4.3.1 ¿Reconoce el kernel el hardware de red? xx4.3.2 Configuracixn temporal del TCP/IP xx4.3.3 Configuracixn permanente del TCP/IP xx4.3.4 Usando las modificaciones permanentes xx4.3.5 Configuracixn del nombre y el dominio del host xx4.3.6 Configuracixn del DNS 5 Acceso remoto 1: Telnet y Ftp x5.1 Telnet xx5.1.1 La interaccixn cliente-servidor xx5.1.2 Utilizando Telnet xx5.1.3 Acerca de la seguridad en las comunicaciones xx5.1.4 Instalacixn del cliente xx5.1.5 Instalacixn del servidor xx5.1.6 Configuracixn del servidor xx5.1.7 Activacixn y desactivacixn del servicio x5.2 Ftp (File Transfer Program) xx5.2.1 Instalacixn del cliente xx5.2.2 Comandos Ftp mxs usuales xx5.2.3 Instalacixn del servidor xx5.2.4 Configuracixn del servidor xx5.2.5 Activacixn y desactivacixn del servicio 6 La Web x6.1 Mxs sobre la Web xx6.1.1 Los servidores Web xx6.1.2 Los navegadores Web xx6.1.3 El HyperText Transfer Protocol xx6.1.4 Los objetos Web y las URL’s xx6.1.5 El HyperText Markup Language xx6.1.6 La W3C xx6.1.7 Los proxys Web xx6.1.8 La cachx de los navegadores Web x6.2 Mozilla Firefox xx6.2.1 Instalacixn xx6.2.2 Ejecucixn x6.3 Apache xx6.3.1 Instalacixn xx6.3.2 Configuracixn x6.4 Squid xx6.4.1 Instalacixn xx6.4.2 Configuracixn xx6.4.3 Utilizacixn x6.5 Anxlisis de las interacciones Web xx6.5.1 Anxlisis de una interaccixn Web bxsica xx6.5.2 Anxlisis de una interacixn Web condicional xx6.5.3 Anxlisis de una interaccixn Web que transmite un objeto “largo” xx6.5.4 Anxlisis de una interaccixn Web con objetos empotrados 7 El correo electrxnico x7.1 The Internet mail infrastructure xx7.1.1 Servidores de e-mail, servidores SMTP, mail exchangers, mailers y MTA’s ??? xx7.1.2 Lectores de e-mails, escritores de e-mails y MUA’s xx7.1.3 Acerca de los clientes y de los servidores xx7.1.4 Las direcciones de correo xx7.1.5 Los mensajes de correo xx7.1.6 Los sobres (envelopes) xx7.1.7 Bounce messages xx7.1.8 Registros DNS, distancias y responsabilidades de los mailers x7.2 El SMTP (Simple Mail Transfer Protocol) xx7.2.1 Peticiones y respuestas xx7.2.2 Los verbos xx7.2.3 Cxdigos x7.3 Las cabeceras de los correos electrxnicos xx7.3.1 Formato xx7.3.2 Descripcixn de los principales campos x7.4 Utilidad de un servidor local x7.5 El correo electrxnico en redes privadas x7.6 Exim xx7.6.1 Instalacixn xx7.6.2 Configuracixn x7.7 Un MUA: Mutt xx7.7.1 Instalacixn xx7.7.2 Utilizacixn 8 DNS (Domain Name Service) x8.1 Los nombres de dominio x8.2 Dominios y subdominios x8.3 La jerarquxa de dominios x8.4 El proceso de resolucixn x8.5 Instalacixn de un servidor DNS x8.6 Configuracixn del servidor DNS xx8.6.1 Configuracixn como servidor cachx x8.7 Configuracixn del cliente x8.8 Ejemplos de consultas xx8.8.1 ¿Cuxles son mis servidores DNS? xx8.8.2 ¿Cuxl es la direccixn IP del host ...? xx8.8.3 ¿Cuxles son los servidores de nombres del dominio ...? xx8.8.4 ¿Cxmo interrogamos a otro servidor DNS? xx8.8.5 Averiguando la jerarquxa de servidores DNS xx8.8.6 Resolucixn inversa x8.9 Cuidado con el DNS x8.10 DNS + DHCP 9 Acceso remoto 2: SSH x9.1 Algoritmos de cifrado x9.2 Caracterxsticas del SSH x9.3 Instalacixn de SSH (cliente y servidor) x9.4 Configuracixn del servidor x9.5 Configuracixn del cliente x9.6 Uso de SSH xx9.6.1 Accediendo a un host remoto

xx9.6.2 Usando ssh-agent y ssh-add

xx9.6.3 Ejecucixn de comandos no interactivos en el host remoto xx9.6.4 Verificacixn de la host key xx9.6.5 Copiando ficheros xx9.6.6 SSH forwarding 10 Un Pinger basado en el UDP x10.1 El comando ping x10.2 El ICMP (Internet Control Message Protocol) x10.3 El Pinger xx10.3.1 El servidor xx10.3.2 El cliente 11 Un servidor simple basado en el TCP x11.1 El servidor x11.2 El cliente 12 DHCP (Dynamic Host Configuration Protocol) x12.1 Clientes, servidores y agentes de retransmisixn x12.2 Sobre las configuraciones asignadas x12.3 El proceso de concesixn xx12.3.1 La solicitud de concesixn xx12.3.2 La oferta de concesixn xx12.3.3 La seleccixn de concesixn xx12.3.4 La confirmacixn de seleccixn x12.4 Instalacixn del servidor DHCP x12.5 Configuracixn del servidor x12.6 Configuracixn del cliente x12.7 Configuracixn del TCP/IP en caliente 13 Rastreo del TCP x13.1 Capturando ... 14 Rastreo del IP x14.1 La estructura del paquete x14.2 Tiempo de vida de los paquetes x14.3 Fragmentacixn x14.4 NAT 15 Rastreo de Ethernet y del ARP x15.1 La estructura del frame x15.2 El ARP A Gestixn de paquetes en Linux xA.1 Debian Linux xxA.1.1 Pasando de stable a testing xxA.1.2 Pasando de testing a unstable xxA.1.3 Actualizacixn de la base de datos de paquetes xxA.1.4 Actualizacixn de los paquetes xxA.1.5 Bxsqueda de un paquete xxA.1.6 Conocer si un paquete ya estx instalado xxA.1.7 Instalacixn de un paquete xxA.1.8 Actualizacixn de un paquete xxA.1.9 Averiguar los ficheros que ha instalado un paquete xxA.1.10 Averiguar el paquete al que pertence un fichero xxA.1.11 Encontrar los paquetes de los que depende otro paquete xxA.1.12 Encontrar los paquetes que dependen de un paquete xxA.1.13 Borrado de un paquete xA.2 Fedora Core Linux xxA.2.1 Actualizacixn de la base de datos de paquetes xxA.2.2 Actualizacixn de los paquetes xxA.2.3 Bxsqueda de un paquete xxA.2.4 Conocer si un paquete ya estx instalado xxA.2.5 Averiguar los ficheros que ha instalado un paquete xxA.2.6 Averiguar el paquete al que pertence un fichero xxA.2.7 Instalacixn de un paquete xxA.2.8 Actualizacixn de un paquete xxA.2.9 Encontrar los paquetes de los que depende otro paquete xxA.2.10 Borrado de un paquete xA.3 Gentoo Linux xxA.3.1 Actualizacixn de la base de datos de paquetes xxA.3.2 Actualizacixn de los paquetes xxA.3.3 Bxsqueda de un paquete xxA.3.4 Conocer si un paquete ya estx instalado xxA.3.5 Instalacixn de un paquete xxA.3.6 Actualizacixn de un paquete xxA.3.7 Averiguar los ficheros que ha instalado un paquete xxA.3.8 Averiguar el paquete al que pertence un fichero xxA.3.9 Encontrar los paquetes de los que depende otro paquete xxA.3.10 Encontrar los paquetes que dependen de un paquete xxA.3.11 Borrado de un paquete B Administracixn de cuentas de usuario en Linux C Activacixn y desactivacixn de servicios en Linux D Escaneado de puertos en Linux xD.1 Cuidado cuando escaneamos una mxquina ...

xD.2 netstat

xD.3 Nmap xxD.3.1 Instalacixn xxD.3.2 Utilizacixn bxsica xD.4 Nessus xxD.4.1 Instalacixn (cliente y servidor) xxD.4.2 Configuracixn del servidor xxD.4.3 Uso del cliente E Filtrado de paquetes en Linux xE.1 En Linux el filtrado de paquetes se realiza a nivel del kernel xxE.1.1 Habilitando el kernel xxE.1.2 Instalacixn de iptables xE.2 El proceso de filtrado xE.3 Uso de iptables xxE.3.1 Mostrar la lista de reglas de una cadena xxE.3.2 Crear una nueva cadena xxE.3.3 Resetear las estadxsticas de una cadena xxE.3.4 Cambiar el comportamiento por defecto de una cadena xxE.3.5 Vaciar una cadena xxE.3.6 Borrar una cadena vacxa xxE.3.7 Axadir una nueva regla a una cadena xxE.3.8 Borrar una regla de una cadena xxE.3.9 Axadiendo reglas mxs complejas xxE.3.10 Salvando y restaurando las cadenas F Captura de paquetes usando Wireshark xF.1 ¿Quixn usa un sniffer? xF.2 Sniffers y analizadores de paquetes xF.3 Instalacixn de Wireshark xF.4 El interfaz grxfico de Wireshark xF.5 Capturando paquetes con Wireshark xF.6 Filtrado de los paquetes capturados xF.7 Ordenacixn de los paquetes capturados xF.8 Anxlisis de los paquetes G Distribucixn de ficheros usando Bittorrent xG.1 Arquitectura de Bittorrent xG.2 Funcionamiento bxsico de Bittorrent xG.3 Uso de un “cliente” xG.4 Uso de un “servidor” xxG.4.1 Instalacixn de un tracker xxG.4.2 Generacixn del fichero .torrent xxG.4.3 Activacixn del seed H Cxdigos fuente

xH.1 add.c
xH.2 ascii2float.c
xH.3 demodulator.c
xH.4 drawxsignal.sh
xH.5 float2ascii.c
xH.6 lowxpassxfilter.c
xH.7 modulator.c
xH.8 sampler.c
xH.9 spectrumxanalyzer.c

I La tabla ASCII imprimible de 7 bits [next] [prev] [prev-tail] [front] [up] 1 El laboratorio de redes

[next] [prev] [prev-tail] [tail] [up] Prxcticax1El laboratorio de redes

Las prxcticas de redes de computadoras son realizadas en el laboratorio de redes. Dedicaremos esta primera prxctica a conocer el hardware y el software del que disponemos.

x1.1 Hardware x1.2 Software xx1.2.1 Windows xx1.2.2 Fedora Core Linux xx1.2.3 Debian Linux del PC virtual x1.3 Funcionamiento bxsico del VMware xx1.3.1 El PC virtual xx1.3.2 Usuarios xx1.3.3 Conectividad

Hardware

[next] [prev] [prev-tail] [tail] [up] 1.1 Hardware

En el laboratorio existen 25 computadoras con las siguientes caracterxsticas:

*xProcesador:xAMDxAthlonx64xbitsx3500
x*xMemoriaxRAM:x1GB
x*xDiscoxDuro:x80GBxATA
x*xAdaptadoresxdexred:xDLINKxDFE-528TX,xLinksysxNC100,xALixM5263
x*xTarjetaxdexVideo:xATIxRADEONx9250
x*xTarjetaxdexSonido:xIntegradaxenxplacaxbasexRealtekxAC´ 97

PIC Figurex1.1: Topologxa fxsica del Laboratorio de Redes.

Como se deduce del tipo de los adaptadores de red que tienen instalados las computadoras (hosts), la red del laboratorio es una red Ethernet. Ademxs, como utiliza conmutadores (switches) Ethernet, podemos decir que se trata de una Ethernet conmutada (hay diferentes tipos de redes Ethernet). Finalmente, si seccionxramos uno de los cables que unen los adaptadores de red de los hosts con los conmutadores, verxamos que se estxn utilizando enlaces fabricados con pares trenzados de cobre UTP, categorxa 5. En Ethernet estos enlaces son full-duplex (hay pares para enviar datos y otros para recibir datos, que funcionan de forma simultxnea).

La topologxa de la red se muestra en la Figura 1.1.

La tasa de transmisixn entre un host y su conmutador directamente conectado es de 100 Mbps y la tasa de transmisixn entre los conmutadores es de 100 Mbps. Por tanto, la tasa de transmisixn entre un host del laboratorio y el resto de Internet es a lo sumo, 100 Mbps.

[next] [prev] [prev-tail] [front] [up]

Software

[next] [prev] [prev-tail] [tail] [up] 1.2 Software

Cada computadora tiene instalados (al menos) dos sistemas operativos: Microsoft Windows XP y Linux. Ambos permiten contectarse a Internet mediante la pila de protocolos TCP/IP. Esto significa que seremos capaces de comunicarnos con otros usuarios de la red si el software de red ha sido convenientemente configurado.

1.2.1 Windows Utilizaremos Windows para las tareas txpicas de navegar por Internet, descargar programas, etc. Para acceder a la computadora utilizaremos la cuenta:

Usuario: redes

Contrasexa: redes

Taller 1.1: Si estx consultando este documento en un ordenador del laboratorio usando Windows, ya habrx accedido a su cuenta de usuario. Si no es asx, hxgalo y si existe algxn problema, comunxqueselo al profesor.

1.2.2 Fedora Core Linux Como una alternativa a Windows, podremos utilizar Linux para acceder a la computadora y realizar las prxcticas. Los datos del usuario que deberemos utilizar son:

Usuario: redes

Contrasexa: redes Taller 1.2: Si estx consultando este documento en un ordenador del laboratorio

usando Linux, ya habrx accedido a su cuenta de usuario. Si no es asx, hxgalo y si existe algxn problema, comunxqueselo al profesor.

1.2.3 Debian Linux del PC virtual Para realizar la mayorxa de las prxcticas de redes utilizaremos Linux, Debian Linux, en concreto.

Debido a que es necesario realizar muchas acciones como administrador del sistema, existe un peligro potencial de estropear el buen funcionamiento del sistema operativo. Por otra parte, en algunas prxcticas es interesante poder utilizar mxs de una computadora. Aunque esto podrxa ser posible fxsicamente, lo mxs cxmodo es utilizar un software de emulacixn de PC que permita ejecutar en una misma computadora cuxntos PC’s virtuales sean necesarios.

Estos dos problemas son resueltos utilizando VMware (http://www.vmware.com). Dicho software permite definir una computadora virtual e instalar en ella los programas que queramos. Nosotros vamos a utilizar una distribucixn Debian Linux (http://www.debian.org) instalada en un PC virtual.

Funcionamiento bsico del VMware

[next] [prev] [prev-tail] [tail] [up]

1.3 Funcionamiento bxsico del VMware VMware consta de muchos programas de los cuales, para realizar las prxcticas, sxlo necesitaremos el VMware Player (http://www.vmware.com/download/player/). Este programa es de libre distribucixn.

VMware Player permite ejecutar el PC virtual sin necesidad de usar ninguna otra utilidad extra. Para definir un PC virtual se utiliza el programa VMware Workstation (http://www.vmware.com/download/ws/) que sx es de pago.

1.3.1 El PC virtual Con el objetivo de acelerar las prxcticas lo mxximo posible se ha creado un PC virtual y se le ha instalado Debian Linux. Dicho PC virtual puede descargarse de esta URL: http://www.ace.ual.es/˜ vruiz/docencia/redes/debian.

Como puede apreciarse se trata de una coleccixn de ficheros que contienen el contenido del PC virtual. Dicho PC tiene las siguientes caracterxsticas:

*xProcesador:xElxmismoxquexelxhostxfxsico
x*xMemoriaxRAM:x256xMB
x*xDiscoxDuro:x8xGBxBusLogicxBT-958xSCSI
x*xAdaptadorxdexred:xAdvancedxMicroxDevicesx[AMD]x79c970x[PCnet32xLANCE]
x*xTarjetaxdexVideo:xVMwarexIncx[VMwarexSVGAxII]xPCIxDisplayxAdapter
x*xTarjetaxdexSonido:xLaxmismaxquexelxhostxfxsico

Taller 1.3: Realice los siguientes pasos:

Descargue  e  instale  el  programa  VMware

Player (http://www.vmware.com/download/player/) (si no estuviera ya instalado). Seleccione el sistema operativo adecuado en su caso.

Descarge el PC virtual. Recuerde que tiene que descargarse todos los ficheros que parecen en la anterior URL.

Ejecute el PC virtual.

1.3.2 Usuarios La instalacixn de Linux Debian que descargamos tiene creado sxlo un usuario: el usuario root con password toor. El usuario root en linux es el usuario administrador del sistema. Posee todos los privilegios posibles y por supuesto, usxndolo sin conocimiento hay un peligro potencial de estropear el sistema operativo. Por tanto, usaremos la “cuenta de root” sxlo cuando sea necesario.

Taller 1.4: Como acabamos de indicar, nos identificaremos en el sistema como root sxlo cuando sea imprescindible. Una de estas situaciones se da durante la creacixn de una nueva cuenta de usuario (vxase el Apxndice B). Acceda al PC virtual como administrador y cree una cuenta de usuario. Anote el nombre de usuario (login) y clave de acceso (password) para poder usar esta cuenta mxs adelante.

1.3.3 Conectividad El Player puede configurarse de tres formas diferentes dependiendo del nivel de conectividad que queremos dotar a los PC’s virtuales. Las alternativas son:

Bridged: El PC virtual es dotado con una IP real, perteneciente a la red a la que pertenece el host donde se ejecuta el PC virtual (host huxsped). Esto sxlo es posible hacerlo si disponemos de dicha IP.

NAT: El PC virtual accede a la red a travxs de un NAT box. La IP usada es, por tanto, privada y asignada dinxmicamente por un servidor de DHCP instalado en el host huxsped (el que ejecuta Windows, por ejemplo).

Host Only: En este caso el PC virtual no puede conectarse a ningxn otro host, independientemente de que sea real o virtual.

Taller 1.5: Para comprobar si hay acceso a Internet desde el PC virtual, actualice los paquetes instalados en xl (vxase el Apxndice A). Nxtese que esta accixn sxlo puede realizarse como superusuario (usuario root).

Cuestixn 1.1: ¿Qux tasa de transmisixn a lo sumo vamos a obtener entre dos hosts del laboratorio? Razone su respuesta.

Cuestixn 1.2: Descarge un archivo de Internet usando su navegador. ¿Cuxl ha sido la tasa de descarga? Explique cxmo y por qux ha realizado dicho cxlculo.

Cuestixn 1.3: ¿Cuxntos conmutadores, a lo sumo, cruzarx un paquete de datos transmitido desde un host del laboratorio hasta cualquier otro host del laboratorio? Razone su respuesta.

Cuestixn 1.4: ¿Cuxntos conmutadores, como mxnimo, han atravesado el archivo que se ha descargado? Considere la NAT box del VMware como un conmutador mxs. Razone.

[next] [prev] [prev-tail] [front] [up] [next] [prev] [prev-tail] [front] [up] 2 Atenuacin de las seales

[next] [prev] [prev-tail] [tail] [up] Prxcticax2Atenuacixn de las sexales

x2.1 ¿Qux es una sexal? x2.2 ¿Cuxndo transporta informacixn una sexal? x2.3 ¿Atenuacixn? x2.4 ¿Qux es la relacixn sexal/ruido? x2.5 ¿Qux es una sexal digital? x2.6 La digitalizacixn de sexales xx2.6.1 Digitalizacixn de sexales digitales x2.7 Espectro de frecuencias de una sexal x2.8 ¿Cxmo es el espectro de frecuencias de una sexal digital? x2.9 ¿Cxmo afecta la atenuacixn de las sexales a su espectro? x2.10 El filtrado de sexales

¿Qu es una seal?

[next] [prev] [prev-tail] [tail] [up] 2.1 ¿Qux es una sexal?

Una sexal [11] es cualquier perturbacixn medible de las caracterxsticas fxsicas de un medio (el que sirve de transmisixn).

¿Cundo transporta informacin una seal?

[next] [prev] [prev-tail] [tail] [up] 2.2 ¿Cuxndo transporta informacixn una sexal?

Las sexales suelen ser imprededibles para el receptor. Cuando una sexal es recibida y ademxs xsta es impredecible de alguna manera, la sexal aporta informacixn al receptor. Tambixn se dice, en este caso, que disminuye la incertidumbre del receptor ¿Atenuacin?

[next] [prev] [prev-tail] [tail] [up]

2.3 ¿Atenuacixn? Todos los medios de transmisixn atenxan las sexales que transportan. Esta atenuacixn produce un decremento en la energxa que transporta la sexal y por tanto, cuanto mxs alejados estxn el emisor y el receptor, menor serxa dicha energxa.

La cantidad de energxa que se pierde durante la transmisixn depende del tipo de

medio∗ ∗En los medios lineales (como pueda ser un cable) la pxrdida es lineal con la distancia recorrida. En los medios de difusixn (como es el aire), la pxrdida es exponencial con la distancia. y de la frecuencia de la sexal. Generalmente, las sexales de mayor frecuencia se atenxan mxs que las sexales de menor frecuencia [18]. Por este motivo, por ejemplo, cuando nos acercamos a un lugar donde hay un concierto de mxsica escuchamos primero los sonidos de mxs baja frecuencia (el bombo de la baterxa) y posteriormente el resto de instrumentos.

¿Qu es la relacin seal/ruido?

[next] [prev] [prev-tail] [tail] [up]

2.4 ¿Qux es la relacixn sexal/ruido? Los medios de transmisixn nunca estxn totalmente libres de sexales indeseables (ruido) que pueden interferir en el receptor con la sexal que nosotros intentamos transmitir. En adelante, llamemos a esta sexal (la que nosotros deseamos transmitir), sexal de datos.

A la relacixn entre la energxa de sexal de datos y la energxa del resto de sexales que llegan tambixn al receptor (y que perturban la recepcixn de la sexal de datos) es lo que se conoce como relacixn sexal-ruido o SNR (Signal-Noise Ratio). Dicho de otra forma:

. SNR = \frac{Energía de la señal de datos}{Energía de la señal de ruido} ¿Qu es una seal digital?

[next] [prev] [prev-tail] [tail] [up] 2.5 ¿Qux es una sexal digital?

Las sexales digitales son aquellas que transportan informacixn digital [10]. Estas sexales se diferencian de las analxgicas en que sxlo unos determinados valores de la sexal tienen un significado en concreto. Por ejemplo, una sexal digital puede oscilar entre 0 y 5 voltios. El primer voltaje indicarxa que se transmite la informacixn “0” y el segundo que se transmite la informacixn “1”. Un voltaje de 2.5 voltios no significa nada.

Cuestixn 2.1: Discuta si el grado de abertura de una puerta es una informacixn digital o analxgica.

La digitalizacin de seales

[next] [prev] [prev-tail] [tail] [up]

2.6 La digitalizacixn de sexales Las sexales (independientemente de si representan fuentes de informacixn analxgicas o digitales) necesitan digitalizarse antes de ser procesadas por un sistema digital (una computadora, por ejemplo). El proceso al que deben ser sometidas se conoce como digitalizacixn y consiste bxsicamente en registrar el valor aproximado de la sexal cada cierto intervalo de tiempo.

El nxmero de muestras capturadas durante la digitalizacixn estx directamente relacionado con la mxxima componente de frecuencia de la sexal. Dicha relacixn es expuesta por el Teorema del Muestreo Uniforme de esta forma:

Si capturamos 2n muestras/segundo de una sexal entonces la mxxima componente de frecuencia registrada de dicha sexal tiene n Hercios.

La digitalizacixn implica normalmente una pxrdida irreversible de parte de la informacixn que transporta la sexal, por dos motivos:

Si la sexal no estx limitada en banda por mucho que aumentemos la frecuencia de muestreo no serx posible registrar todas sus componentes de frecuencia.

Si la sexal no es digital, es imposible utilizando un nxmero finito de bits representar cada uno de sus estados.

Evidxntemente, las sexales digitales digitalizadas sxlo adolecen del primer problema.

2.6.1 Digitalizacixn de sexales digitales Una forma sencilla de crear versiones digitales de sexales digitales consiste en replicar tantas veces como sea preciso cada uno de los distintos valores que toma la sexal digital. Esto es lo que realiza el programa http://www.ace.ual.es/˜ vruiz/docencia/redes/practicas/sampler.c (vxase el Apxndice H.8). Nxtese que si la sexal no fuera digital este proceso no serxa tan simple.

Cuestixn 2.2: Razone por qux no serxa tan simple.

En la entrada de sampler.c, cada nxmero real (representado fxsicamente como un nxmero en punto flotante de 32 bits de precisixn) indica un estado de la sexal digital. La salida es simplemente una replicacixn de cada uno de estos estados.

Cuestixn 2.3: ¿No cree que sobran bits para representar cada muestra? ¿Cuxntos cree que serxan realmente necesarios? ¿Por qux cree que se han usado nxmeros reales?

Para generar el fichero de entrada para sampler.c podemos usar el programa http://www.ace.ual.es/˜ vruiz/docencia/redes/practicas/ascii2float.c (vxase el Apxndice H.2).

Finalmente, para averiguar el contenido de un fichero .float podemos utilizar el programa http://www.ace.ual.es/˜ vruiz/docencia/redes/practicas/float2ascii.c (vxase el Apxndice H.5).

Taller 2.1:

Ejecute  el  PC

virtual (http://www.ace.ual.es/˜ vruiz/docencia/redes/debian). El resto de pasos se realizarxn en xl.

Descarge  el  fichero

http://www.ace.ual.es/˜ vruiz/docencia/redes/practicas/sources.tar.gz.

Descomprima el fichero anterior. Se crearx un directorio llamado sources. En ese directorio encontraremos todos los programas que vamos a utilizar.

Compile los fuentes en C. Situxndonos en el directorio sources, escribir:

makexall

Asegurarse de que los scripts poseen permiso de ejecucixn para el duexo del fichero (aparece una “x” en la cuarta posicixn comenzando desde la izquierda cuando escribimos el comando ls -l en el directorio en el que hemos descargado el script).

Taller 2.2: Ejecute:

ascii2floatx<<xEOFx|xfloat2ascii

y escriba una serie de nxmeros reales separados por la tecla <Enter>. Cuando no desee introducir mxs nxmeros escriba EOF y pulse finalmente <Enter>. Nota: con el redirector de flujo de entrada << provocamos que todo lo que tecleemos se convierta en la entrada estxndar del programa sobre el que estamos realizando la redireccixn, hasta que no escribimos el cxdigo de fin de entrada (en este caso la cadena EOF). Nota 2: el redirector de flujo | provoca que la salida estxndar del programa que queda a la izquierda se la entrada estxndar del programa que queda a la derecha.

Espectro de frecuencias de una seal

[next] [prev] [prev-tail] [tail] [up]

2.7 Espectro de frecuencias de una sexal Las sexales pueden representarse en el dominio del tiempo o en el dominio de la frecuencia [9]. En el primer dominio, la sexal queda especificada por el valor de la sexal a lo largo del tiempo. En el segundo, la sexal queda definida por un conjunto (en principio infinito) de funciones sinusoidales puras (senos y cosenos) que sumadas entre sx generan dicha sexal. A la contribucixn relativa de cada una de estas sexales sinusoidales es a lo que se conoce como espectro de frecuencias de una sexal o espectro de Fourier.

El espectro de Fourier S(f) de la sexal s(t) es una funcixn compleja y por tanto, tiene una parte real y otra imaginaria. Para tener una idea de la distribucixn energxtica del espectro de S(f) suele representarse su mxdulo o magnitud que se calcula como:

. |S(f)| = \sqrt{Re(S(f))^{2} + Im(S(f))^{2}}

donde Re(S(f)) es la parte real de S(f) y Im(S(f)) es la parte imaginaria de S(f). Para calcular |S(f)|, siendo s(t) una sexal digitalizada, es posible utilizar la DFT (Discrete Fourier Transform) mediante el programa http://www.ace.ual.es/˜ vruiz/docencia/redes/practicas/spectrumxanalyzer.c (vxase el Apxndice H.9).

Taller 2.3: Ejecute:

ascii2floatx<<xEOFx>xsignal.floatx&&xspectrum_analyzerxsignal.float

e introduzca una sexal con un nxmero par de muestras. A la salida vamos a obtener el mxdulo del espectro de frecuencias de la sexal introducida. Nota: el sxmbolo > redirige la salida estxndar del programa que queda a la izquierda sobre el fichero que aparece a la derecha. Nota 2: los sxmbolos && representan el operador de ejecucixn condicional. Significa que, sxlo si el comando que queda a la izquierda del operador se ejecuta con xxito, entonces el shell ejecutarx el comando que queda a la derecha.

¿Cmo es el espectro de frecuencias de una seal digital?

[next] [prev] [prev-tail] [tail] [up] 2.8 ¿Cxmo es el espectro de frecuencias de una sexal digital?

PIC Figurex2.1: Espectro de frecuencias de una sexal digital s(t). 1/f_{0} es el tiempo que perdura un bit de informacixn en la sexal digital (periodo de un bit).

El espectro de una sexal digital ideal es discreto y aunque acumula la mayor parte de la energxa en las bajas frecuencias tambixn ocupa un ancho de banda infinito (vxase la Figura 2.1 y la teorxa de la asignatura de redes). Esto implica que todos los medios van a filtrar de alguna manera las sexales digitales transmitidas.

Podemos visualizar el mxdulo del espectro de una sexal digital utilizando el script http://www.ace.ual.es/˜ vruiz/docencia/redes/practicas/drawxsignal.sh (vxase el Apxndice H.4).

Taller 2.4: Con este programa visualizar el mxdulo del espectro de la sexal “01” es tan simple como:

#xVisualizandoxelxespectroxdexlaxsexalx01
xrmx-fxxsignal.txtx#xBorramosxelxfichero
xechox"-1.0"x>>xsignal.txtx#xElxvalorx-1xrepresentaxelxbitx0
xechox"1.0"x>>xsignal.txtx#xElxvalorxx1xrepresentaxelxbitx1
xascii2floatx<xsignal.txtx|xsamplerx128x>xsignal.float
xspectrum_analyzerxsignal.floatx>xspectrum.txt
xdraw_signal.shxspectrum.txtx"Espectroxdexlaxsexalx01"

Como puede apreciarse en la ventana que ha debido aparecer, cada coeficiente de Fourier representa el punto de una polilxnea. Modifique el script draw_signal.sh para que en lugar de unir los puntos del fichero de entrada usando lxneas, se pinten barras verticales. Para saber cxmo hacer esto exxctamente, ejecute el programa gnuplot y escriba en el intxrprete help plot. Luego pulse la tecla <q>, y cuando pregunte Subtopic of plot: escriba with. Aparecerx un mensaje de ayuda con los argumentos que el comando plot acepta para pintar las grxficas. Luego use un editor de ficheros ASCII para modificar el script draw_signal.sh. Cuando haya conseguido mostrar una grxfica semejante a la que se muestra en la Figura 2.1 modifique de nuevo el script draw_signal.sh para dejarlo con su contenido original.

¿Cmo afecta la atenuacin de las seales a su espectro?

[next] [prev] [prev-tail] [tail] [up]

2.9 ¿Cxmo afecta la atenuacixn de las sexales a su espectro? Como ya hemos indicado, los medios de transmisixn tienden a atenuar mxs las altas frecuencias. Esto significa, modelando de una forma bastante pobre el proceso, que las componentes de alta frecuencia de las sexales digitales van a ser eliminadas (van a ser cero). El espectro de una sexal digital atenuada serx semejante al que se presenta en la Figura 2.1, aunque a partir de una determinada banda de frecuencia i · f_{0}, no poseerx energxa. En otras palabras, si s(t) es la sexal original y x(t) es la sexal filtrada (atenuada), se cumple que:

.  Ŝ(f) = \{ \begin{matrix}S(f) & si f < i · f_{0} \\ 0 & en caso contrario \end{matrix}

El filtrado de seales

[next] [prev] [prev-tail] [tail] [up] 2.10 El filtrado de sexales

Un filtro de sexales es un sistema fxsico que modifica la potencia relativa de las distintas componentes de frecuencia de dichas sexales [10]. En concreto, un filtro paso bajo es aquel que deja pasar las bajas frecuencias y elimina las altas, a partir de una determinada frecuencia f_{c}. En la Figura 2.2 podemos ver la funcixn de transferencia de un filtro paso

bajo† †Que no es mxs que la respuesta del filtro paso bajo (la sexal generada por el filtro paso bajo) representada en el dominio de la frecuencia cuando a la entrada colocamos una funcixn impulso (una funcixn que siempre vale 0 excepto durante un intervalo de tiempo muy pequexo). . A la frecuencia f_{c} se le conoce como frecuencia de corte del filtro.

PIC Figurex2.2: Funcixn de transferencia de un filtro paso bajo.

El programa http://www.ace.ual.es/˜ vruiz/docencia/redes/practicas/lowxpassxfilter.c (Apxndice H.6) permite filtrar una sexal, dejando pasar la banda de frecuencias mxs bajas y eliminando el resto.

Taller 2.5: Como ejemplo, vamos a eliminar la mitad de las altas frecuencias de la sexal “01” cuando la transmitimos a una tasa de bit (bit-rate) de 1 bit/segundo. Utilizaremos una precisixn de 128 muestras/bit en nuestro experimento. Para simplificar todo lo posible el proceso ha sido disexado el script http://www.ace.ual.es/˜ vruiz/docencia/redes/practicas/filtradox01.sh cuyo contenido se muestra a continuacixn:

#!/bin/sh
x
x#
x#xFiltradoxdexlaxsexalx01
x#
x
x#
x#xCreamosxlaxsexal
x#
xrmx-fx01_signal.txtx#xBorramosxelxfichero
xechox"-1.0"x>>x01_signal.txtx#xElxvalorx-1xrepresentaxelxbitx0
xechox"1.0"x>>x01_signal.txtx#xElxvalorxx1xrepresentaxelxbitx1
xascii2floatx<x01_signal.txtx|xsamplerx128x>x01_signal.float
x
x#
x#xVisualizamosxsuxespectro
x#
xspectrum_analyzerx01_signal.floatx>x01_spectrum.txt
xdraw_signal.shx01_spectrum.txtx"Espectroxdexlaxsexalx01"
x
x#
x#xfiltramosxlaxsexal
x#
xlow_pass_filterx0.5x01_signal.floatx>x01_filtered.float
x
x#
x#xVisualizamosxlaxsexalxfiltrada
x#
xfloat2asciix<x01_filtered.floatx>x01_filtered.txt
xdraw_signal.shx01_filtered.txtx"Sexalx01xfiltrada"
x
x#
x#xVisualizamosxelxespectroxdexlaxsexalxfiltrada
x#
xspectrum_analyzerx01_filtered.floatx>x01_filtered_spectrum.txt
xdraw_signal.shx01_filtered_spectrum.txtx"Espectroxdexlaxsexalx01xfiltrada"
x

PIC Figurex2.3: La sexal “01” transmitida a razxn de 1 bit/segundo cuando se han eliminado la mitad de las altas frecuencias.

Ejecute el script filtradox01.sh escribiendo:

filtrado_01.sh

Si todo ha ido bien deberxa aparecerle una ventana con una curva semejante a la que se muestra en la Figura 2.3.

Cuestixn 2.4: ¿Por qux el nxmero de coeficientes de Fourier (nxmero de componentes de frecuencia) es la mitad que el nxmero de muestras introducidas?

Cuestixn 2.5: ¿Qux controla el parxmetro 128 que toma el programa sampler en el script que visualiza el espectro de la sexal “01” desde el punto de vista del espectro de la sexal? Es decir, ¿en qux varxa el espectro de la sexal cuando variamos dicho parxmetro?

Cuestixn 2.6: Repita el xltimo experimento cuando se transmiten dos bits/segundo y eliminando todas las componentes de frecuencia por encima de 8 Hz (modifique el script filtradox01.sh). ¿La sexal recibida tiene ahora una mayor “calidad” (se parece mxs a la original)? ¿Por qux o por qux no? Explique las modificaciones que ha realizado en el script para llevar a cabo este experimento.

[next] [prev] [prev-tail] [front] [up] [next] [prev] [prev-tail] [front] [up] 3 Multiplexacin de seales

[next] [prev] [prev-tail] [tail] [up] Prxcticax3Multiplexacixn de sexales

x3.1 Multiplexar, ¿para qux? x3.2 Multiplexacixn de sexales en el dominio del tiempo x3.3 La modulacixn de sexales x3.4 Multiplexacixn de sexales en el dominio de la frecuencia

Multiplexar, ¿para qu?

[next] [prev] [prev-tail] [tail] [up] 3.1 Multiplexar, ¿para qux?

Existen situaciones donde un xnico medio de transmisixn debe ser compartido por varios emisores. En algunos casos, como ocurre en nuestras casas cuando estamos hablamos por telxfono y a la vez descargamos datos de Internet, la multiplexacixn permite usar un xnico par trenzado metxlico para ambas cosas al mismo tiempo, es decir, la multiplexacixn abarata costes al no ser necesario instalar dos pares de hilo. En otros casos, como cuando vamos en el coche escuchando una emisora de radio, no hay mxs remedio de multiplexar las sexales ya que el medio de transmisixn (el aire) es xnico.

PIC Figurex3.1: Multiplexacixn de un enlace.

El dispositivo que permite multiplexar varias sexales sobre un mismo medio de transmisixn se llama multiplexor y el que realiza el proceso inverso, desmultiplexor (vxase la Figura 3.1).

Cuestixn 3.1: Indique otras situaciones donde se hace uso de la multiplexacixn de sexales.

Multiplexacin de seales en el dominio del tiempo

[next] [prev] [prev-tail] [tail] [up] 3.2 Multiplexacixn de sexales en el dominio del tiempo PIC Figurex3.2: Multiplexacixn en el dominio del tiempo de dos sexales. f_{m} es la mxxima componente de frecuencia de cada una de ellas.

Dos (o mxs) sexales pueden multiplexarse en el dominio del tiempo entrelazando sus muestras (siguiendo algxn patrxn predefinido) y transmitixndolas como si de una xnica sexal de se tratara. En la Figura 3.2 se muestra un ejemplo de multiplexacixn en el tiempo o TDM (Time Division Multiplexing) de dos sexales en la que cada slot de tiempo transmite una muestra de cada sexal. En este caso el patrxn de entrelazamiento es enviar sxlo una muestra de cada sexal antes de enviar la siguente. Nxtese que la tasa de datos de la sexal resultante es el doble que la tasa de datos de cada una de las sexales multiplexadas y que por lo tanto se necesita el doble de ancho de banda.

Cuestixn 3.2: Imagine otros patrones de multiplexacixn de dos sexales en el tiempo. Expxngalos.

La modulacin de seales

[next] [prev] [prev-tail] [tail] [up]

3.3 La modulacixn de sexales La modulacixn de una sexal s(t) consiste en desplazar el espectro de la misma S(f), conservando su forma, para generar una sexal modulada [9]. Esto puede realizarse en el dominio del tiempo multiplicando la sexal a modular s(t) por una sexal moduladora (o portadora) w(t) para generar s′(t) mediante

. s′(t) = s(t)w(t),

o en el dominio de la frecuencia, convolucionando ambos espectros con

. S′(f) = S(f) ∗ W (f).

w(t) es una sexal sinusoidal pura (compuesta de una xnica componente de frecuencia w_{0}) y su espectro W (f) es la funcixn Delta de Dirac. Por tanto, la convolucixn de S(f) con W (f) consiste en desplazar S(f) hasta w_{0}. El programa modulator.c (http://www.ace.ual.es/˜ vruiz/docencia/redes/practicas/modulator.c) (Apxndice H.7) realiza este proceso y el programa http://www.ace.ual.es/˜ vruiz/docencia/redes/practicas/demodulator.c (Apxndice H.3) el inverso.

Cuestixn 3.3: Revise la bibliografxa recomendada (y otra que usted considere conveniente) y exponga una definicixn formal de la convolucixn entre funciones. ¿Qux diferencias hay entre la convolucixn de funciones y de sexales?

Multiplexacin de seales en el dominio de la frecuencia

[next] [prev] [prev-tail] [tail] [up] 3.4 Multiplexacixn de sexales en el dominio de la frecuencia PIC Figurex3.3: Multiplexacixn en el dominio de la frecuencia usando modulacixn en amplitud. ∗ denota a la convolucixn entre sexales. ⇒ a la modulacixn de sexales.

La alternativa a TDM es la multiplexacixn en el dominio de la frecuencia o FDM (Frecuency Division Multiplexing). En este caso (como ocurre con las emisiones de radio) cada emisor transmite de forma continua en un rango de frecuencias diferentes. A cada una de estas bandas de frecuencias se les denomina canal. Este proceso se describe para tres sexales en la Figura 3.3.

En dicha figura w_{a}, w_{b} y w_{c} son los anchos de banda de tres sexales a(t), b(t) y c(t), respectivamente. w_{c_{1}} y w_{c_{2}} son la frecuencia de dos sexales portadoras c_{1}(t) y c_{2}(t) que modulan a las sexales b(t) y c(t), respectivamente. Si se cumple que w_{c_{1}} > w_{a} y que w_{c_{2}} > w_{a} + w_{b} es posible construir una sexal s(t) como

. s(t) = a(t) + b(t)c_{1}(t) + c(t)c_{2}(t),

o lo que es lo mismo, construir S(f) como

. S(f) = A(f) + B(f) ∗ C_{1}(f) + C(f) ∗ C_{2}(f),

de la que es posible, mxs tarde, extraer las sexales multiplexadas a(t), b(t) y c(t). Para ello hay que seleccionar el canal de frecuencias correspondiente y desmodular si es preciso.

Taller 3.1:

Ejecute

el PC virual (http://www.ace.ual.es/˜ vruiz/docencia/redes/debian). El resto de pasos se realizarxn en este PC.

Vamos a multiplexar y desmultiplexar en la frecuencia dos sexales digitales. Lo primero que tenemos que tener en cuenta es que el espectro de las sexales digitales no estx limitado en banda. Por tanto, tendremos que filtrar ambas sexales antes de multiplexarlas. En este ejemplo supondremos que vamos a transmitir dos sexales a(t) y b(t) que transportan 16 bits cada una a una tasa de 2 bits/segundo y que el ancho de banda disponible es de 16 Hz. Dedicaremos, por tanto, 8 Hz a cada canal. A continuacixn modularemos una de las sexales (b(t), por ejemplo) utilizando una portadora de 8 Hz y sumaremos las dos sexales. Por tanto, la operacixn que estamos haciendo es . s(t) = a(t) + b(t)c(t),

donde c(t) es la sexal portadora. En el dominio de la frecuencia estamos realizando el cxlculo

. S(f) = A(f) + B(f) ∗ C(f).

Para desmultiplexar cada sexal hay que seleccionar el canal de frecuencias correspondiente. En el caso de a(t) sxlo hay que aplicar un filtro paso bajo que seleccione el canal [0, 8[ Hz. Con esto estamos eliminando B(f) ∗ C(f) y no es necesario desmodular. Para la recuperar sexal b(t) tendremos que eliminar la banda [0, 8[ Hz con lo que eliminamos A(f) y a continuacixn desmodular para obtenemer B(f). El script http://www.ace.ual.es/˜ vruiz/docencia/redes/practicas/multiplexacion-desmultiplexacion.sh, cuyo contenido se muestra a continuacixn:

#!/bin/sh
x
x#
x#xMultiplexacixnxyxdesmultiplexacixnxdexdosxsexalesxdigitales
x#
x
x#
x#xCreamosxlaxsexalxa(t)
x#
xrmx-fxa_signal.txtx#xBorramosxelxfichero
xechox"-1.0"x>>xa_signal.txtx#x1.xElxvalorx-1xrepresentaxelxbitx0
xechox"1.0"x>>xa_signal.txtxx#x2.xElxvalorxx1xrepresentaxelxbitx1
xechox"1.0"x>>xa_signal.txtxx#x3.
xechox"1.0"x>>xa_signal.txtxx#x4.
xechox"-1.0"x>>xa_signal.txtx#x5.
xechox"-1.0"x>>xa_signal.txtx#x6.
xechox"-1.0"x>>xa_signal.txtx#x7.
xechox"1.0"x>>xa_signal.txtxx#x8.
xechox"1.0"x>>xa_signal.txtxx#x9.
xechox"1.0"x>>xa_signal.txtxx#x10.
xechox"-1.0"x>>xa_signal.txtx#x11.
xechox"-1.0"x>>xa_signal.txtx#x12.
xechox"1.0"x>>xa_signal.txtxx#x13.
xechox"-1.0"x>>xa_signal.txtx#x14.
xechox"-1.0"x>>xa_signal.txtx#x15.
xechox"-1.0"x>>xa_signal.txtx#x16
xascii2floatx<xa_signal.txtx|xsamplerx128x>xa_signal.float
x
x#
x#xCreamosxlaxsexalxb(t)
x#
xrmx-fxxb_signal.txtx#xBorramosxelxfichero
xechox"1.0"x>>xb_signal.txtxx#x1.xElxvalorx-1xrepresentaxelxbitx0
xechox"-1.0"x>>xb_signal.txtx#x2.xElxvalorxx1xrepresentaxelxbitx1
xechox"-1.0"x>>xb_signal.txtx#x3.
xechox"1.0"x>>xb_signal.txtxx#x4.
xechox"-1.0"x>>xb_signal.txtx#x5.
xechox"-1.0"x>>xb_signal.txtx#x6.
xechox"-1.0"x>>xb_signal.txtx#x7.
xechox"1.0"x>>xb_signal.txtxx#x8.
xechox"-1.0"x>>xb_signal.txtx#x9.
xechox"1.0"x>>xb_signal.txtxx#x10.

xechox"-1.0"x>>xb_signal.txtx#x11.
xechox"1.0"x>>xb_signal.txtxx#x12.
xechox"1.0"x>>xb_signal.txtxx#x13.
xechox"1.0"x>>xb_signal.txtxx#x14.
xechox"-1.0"x>>xb_signal.txtx#x15.
xechox"1.0"x>>xb_signal.txtxx#x16.
xascii2floatx<xb_signal.txtx|xsamplerx128x>xb_signal.float
x
x#
x#xFiltramosxa(t).xTransmitexaxunaxtasaxdex2xbpsxyxhayx128xmuestras/bit.
x#xPorxtanto,xlaxfrecuenciaxdexmuestreoxesx256xmuestras/segundo.
x#xEstoxsignificaxquexlaxmxximaxcomponentexdexfrecuenciaxregistradaxparaxa(t)
x#xesxdex128xHz.xComoxvamosxaxfiltrarxax8xHz,xcut-off_bandx=x8/128x=x0.0625.
x#
xlow_pass_filterx0.0625xa_signal.floatx>xa_filtered_signal.float
x
x#
x#xLoxmismoxhacemosxparaxb(t).
x#
xlow_pass_filterx0.0625xb_signal.floatx>xb_filtered_signal.float
x
x#
x#xModulamosxlaxsexalxb(t)xusandoxunaxportadoraxc(t).
x#xb(t)xtienexunxtotalxdex128*16=2048xmuestras
x#xyx2048/2=1024xbandasxdexfrecuencia.xComoxelxanchoxdexbandaxregistradoxesxde
x#x128xHz,xcadaxbandaxrepresentaxunxtotalxdex128/1024x=x0.125xHz.xSixqueremos
x#xmodularxb(t)xhastaxlosx8xHz,x8/0.125=64xbandas.
x#
xmodulatorx64xb_filtered_signal.floatx>xb_modulated_signal.float
x
x#
x#xSumamosxs(t)x=xa(t)x+xc(t)b(t).
x#
xaddxa_filtered_signal.floatxb_modulated_signal.floatx>xs_signal.float
x
x#
x#xVisualizamosxa(t)xfiltrada,xb(t)xfiltradaxyxs(t).
x#
xfloat2asciix<xa_filtered_signal.floatx>xa_filtered_signal.txt
xdraw_signal.shxa_filtered_signal.txtx"a(t)xfiltrada"
xfloat2asciix<xb_filtered_signal.floatx>xb_filtered_signal.txt
xdraw_signal.shxb_filtered_signal.txtx"b(t)xfiltrada"
xfloat2asciix<xs_signal.floatx>xs_signal.txt
xdraw_signal.shxs_signal.txtx"s(t)"
x

x#xVisualizamosxA(f)xfiltrada,xB(f)xfiltradaxyxS(f).
x#
x./spectrum_analyzerxa_filtered_signal.floatx>xa_filtered_spectrum.txt
xdraw_signal.shxa_filtered_spectrum.txtx"A(f)xfiltrada"
x./spectrum_analyzerxb_filtered_signal.floatx>xb_filtered_spectrum.txt
xdraw_signal.shxb_filtered_spectrum.txtx"B(f)xfiltrada"
x./spectrum_analyzerxs_signal.floatx>xs_spectrum.txt
xdraw_signal.shxs_spectrum.txtx"S(f)"
x
x#
x#xDesmultiplexamosxa(t).xEliminamosxlaxbandaxdexfrecuencia
x#x]8,x16]xHz.
x#
xlow_pass_filterx0.0625xs_signal.floatx>xa_desmultiplexed_signal.float
x
x#
x#xDesmultiplexamosxb(t).xFiltramosxyxdesmodulamos.
xhigh_pass_filterx0.0625xs_signal.floatx>xb_unmodulated_signal.float
xdemodulatorx64xb_unmodulated_signal.floatx>xb_desmultiplexed_signal.float
x
x#
x#xVisualizamosxa(t)xdesmultiplezadaxyxb(t)xdesmultiplexada.
x#
xfloat2asciix<xa_desmultiplexed_signal.floatx>xa_desmultiplexed_signal.txt
xdraw_signal.shxa_desmultiplexed_signal.txtx"a(t)xdesmultiplexada"
xfloat2asciix<xb_desmultiplexed_signal.floatx>xb_desmultiplexed_signal.txt
xdraw_signal.shxb_desmultiplexed_signal.txtx"b(t)xdesmultiplexada"

realiza el proceso que acabamos de describir. Este script estx tambixn incluido en el fichero http://www.ace.ual.es/˜ vruiz/docencia/redes/practicas/guion.tar.gz. Podemos ejecutar dicho script escribiendo:

    multiplexacion-desmultiplexacion.sh

Cuestixn 3.4: Repita el experimento usando 32 Hz de ancho de banda por canal y presente el script disexado. ¿Ha mejorado la calidad de las sexales desmultiplexadas? ¿Por qux?

Cuestixn 3.5: Los espectros de las sexales son simxtricos respecto de la banda de frecuencia 0. Esto significa que hasta ahora simplemente sxlo hemos dibujado la mitad de los espectros (ignorando las frecuencias negativas). Ademxs, los espectros de las sexales digitalizadas (como las que estamos usando en prxcticas) son perixdicos (el espectro “analxgico” se repite un nxmero infinito de veces en el dominio de la frecuencia). Si multiplicamos una sexal digitalizada por una portadora cuya frecuencia es igual a la mitad de la frecuencia de muestreo, ¿cxmo serxa el espectro de la sexal modulada en comparacixn con el espectro de la sexal original? Razone su respuesta.

[next] [prev] [prev-tail] [front] [up] [next] [prev] [prev-tail] [front] [up] 4 Configuracin del IP

[next] [prev] [prev-tail] [tail] [up] Prxcticax4Configuracixn del IP

TCP/IP es el nombre que recibe el conjunto de protocolos que permiten conectarnos a Internet [5]. Entre estos protocolos el TCP (Transmission Control Protocol) que se encarga de controlar los errores de transmisixn, y el IP (Internet Protocol) que controla el routing de los mismos, son los mxs utilizados.

Todos los sistemas operativos actuales, y entre ellos por supuesto Windows y Linux implementan el TCP/IP. Para que xste pueda hacer su trabajo, el IP antes debe ser adecuadamente configurado.

x4.1 Nociones bxsicas sobre el TCP/IP xx4.1.1 Las direcciones IP xx4.1.2 La puerta de enlace xx4.1.3 El servidor de nombres x4.2 Configuracixn del TCP/IP en Windows XP x4.3 Configuracixn del TCP/IP en Linux xx4.3.1 ¿Reconoce el kernel el hardware de red? xx4.3.2 Configuracixn temporal del TCP/IP xx4.3.3 Configuracixn permanente del TCP/IP xx4.3.4 Usando las modificaciones permanentes xx4.3.5 Configuracixn del nombre y el dominio del host xx4.3.6 Configuracixn del DNS

Nociones bsicas sobre el TCP/IP

[next] [prev] [prev-tail] [tail] [up] 4.1 Nociones bxsicas sobre el TCP/IP

Para comprender el funcionamiento del IP es esencial conocer cxmo se referencian las aplicaciones de red. En Internet hay millones de hosts y dentro de cada uno de ellos se ejecutan decenas de aplicaciones de red. Las direcciones IP y los puertos de red se utilizan para diferenciar a una aplicacixn de red de las demxs que se estxn ejecutando en Internet.

4.1.1 Las direcciones IP Las direcciones IP (en la versixn 4 del IP) son nxmeros de 32 bits. Por definicixn, cada host pxblico en Internet posee una direccixn IP

diferente.∗ ∗Esto no es cierto para los hosts que se encuentran en redes privadas, es decir, los que estxn conectados a Internet a travxs de un NAT.

La forma mxs frecuente de representar las direcciones IP es mediante la notacixn decimal punteada. Segxn esta notacixn los 4 bytes de una direccixn IP se representan en decimal separados por puntos. Por ejemplo, si hacemos un ping a www.google.es veremos que tiene una direccixn IP asignada:

#xLaxopcixnx"-cx1"xsexutilizaxparaxenviarxsxloxunaxpeticixnxdexeco.
xusuario$xpingx-cx1xwww.google.es
xPINGxwww.l.google.comx(209.85.129.104)x56(84)xbytesxofxdata.
x64xbytesxfromxfk-in-f104.google.comx(209.85.129.104):xicmp_seq=1xttl=128xtime=56.7xms
x
x---xwww.l.google.comxpingxstatisticsx---
x1xpacketsxtransmitted,x1xreceived,x0%xpacketxloss,xtimex0ms
xrttxmin/avg/max/mdevx=x56.774/56.774/56.774/0.000xms

Taller 4.1: Ejecute el PC virtual (http://www.ace.ual.es/˜ vruiz/docencia/redes/debian). Haga un ping a un host conocido para comprobar que la red funciona correctamente.

Toda direccixn IP consta de dos partes: (1) la direccixn de la red a la cual pertenece y (2) la direccixn del host que posee dicha direccixn IP dentro de la red. Por ejemplo, todas las direcciones IP de los hosts de este aula son de la forma:

 193.147.118.X

y por lo tanto comparten el mismo prefijo. El xltimo byte X indica el host dentro de la red del aula. Nxtese que el tamaxo de las direcciones IP es fijo (siempre 32 bits). Por tanto, si dedicamos mxs bits a especificar el host dentro de la red, entonces el nxmero de bits que indican la direccixn de la red serx menor, y viceversa.

Para conocer cuxntos bits de la direccixn IP especifican la direccixn de la red y cuxntos la direccixn del host dentro de la red, se utiliza la mxscara de red. Una mxscara de red (en la versixn 4 del IP) es un nxmero de 32 bits que comienza siempre por 1 y acaba en 0. Por ejemplo, todos los ordenadores del aula tienen la siguiente mxscara de red:

255.255.255.0

Conociendo este valor, si la direccixn IP de mi host es, por ejemplo:

193.147.118.100

entonces, la direccixn IP de la red del aula

es:† †Recuxrdese que todas las direcciones IP en IPv4 son de 32 bits, independientemente de si referencian a un host o a una red de hosts.

193.147.118.0

y la direccixn de mi host dentro de la red es:

El nxmero de bits a 0 que hay en la mxscara de red determina el tamaxo de la red (el nxmero mxximo de adaptadores de red que pueden estar conectados a la red). En nuestro caso hay 8 ceros. Por tanto, el tamaxo de la red del laboratorio es 2^{8} = 256 direcciones IP.

Cuestixn 4.1: ¿Cuxl serxa la mxscara de red para una red que estx conectada a Internet y en la que sxlo hay dos hosts? Razone su respuesta.

4.1.2 La puerta de enlace Todas las redes conectadas a otras lo hacen a travxs de, al menos, un dispositivo de conmutacixn especial llamado router. Este nodo recibe comxnmente los nombres de puerta de enlace y gateway. Generalmente la direccixn IP del gateway es la primera del rango xtil de direcciones de la red a la que estamos conectados. Por ejemplo, la direccixn IP de la red del aula es:

 193.147.118.0

Esta direccixn sxlo puede utilizarse para designar a la red, no puede ser utilizada por ningxn interface de red. La siguiente direccixn IP del rango disponible es:

 193.147.118.1

Esta deberxa ser la direccixn IP del interface de red del gateway que conecta nuestra red con el resto de Internet. Finalmente, indicar que puesto que la direccixn IP del interfaz dentro de la red tiene un tamaxo de 8 bits, la xltima direccixn IP del rango de direcciones asociadas a nuestra red es:

 193.147.118.255

Esta direccixn IP tampoco puede ser asignada a ningxn interfaz porque es la direccixn de broadcast de la red local. Cualquier mensaje enviado a esta direccixn llegarx a todos los interfaces de la red local.

4.1.3 El servidor de nombres Las direcciones IP raramente se utilizan cuando estamos navegando por Internet porque recordar direcciones IPxes complicado. Es mucho mxs fxcil recordar www.google.es que

142.234.211.117, por ejemplo.

El servicio que permite asignar nombres a los hosts en Internet se conoce como servicio de nombres de dominio o DNS (Domain Name Service). Cuando configuramos el TCP/IP generalmente tambixn se especifica la direccixn IPxde uno o mxs servidores DNS. Asx, evitaremos tener que introducir las direcciones IPxde cada uno de los hosts a los que fuxramos a acceder.

Taller 4.2: Compruebe que el DNS del PC virtual funciona correctamente. Hacer un ping a un host al que no se haya conectado previamente en esta sesixn es suficiente.

Cuestixn 4.2: En su caso, ¿pertenece el servidor de nombres de dominio que estx utilizando a su red local? Razone su respuesta.

Configuracin del TCP/IP en Windows XP

[next] [prev] [prev-tail] [tail] [up] 4.2 Configuracixn del TCP/IP en Windows XP

Todos los hosts del laboratorio estxn ya configurados para conectarnos a Internet. Por tanto, lo que vamos a indicar son los pasos que habrxa que ir realizando para configurar el TCP/IP, aunque en realidad no sea necesario llevarlos a cabo.

Lo primero que debemos saber es que la modificacixn de la configuracixn del TCP/IP podrxa afectar a otros usarios que estxn utilizando la computadora. Como Microsoft Windows XP es un sistema operativo multiusuario (varios usuarios pueden estar utilizando la computadora al mismo tiempo), sxlo un usuario con los permisos de administrador podrxa modificar los parxmetros de configuracixn del TCP/IP.

Bien. Bajo la suposicixn de que hemos accedido al ordenador como administrador, ejecutaremos los siguientes pasos (supondremos instalada una versixn en espaxol):

Acceder a Panel de control.

Acceder a Conexiones de red.

Seleccionar el interface de red titulado Conexiones de xrea local. Si estuviera deshabilitada, pinchar en el icono con el botxn derecho del ratxn y habilitarla. Pinchar de nuevo en el icono usando el botxn derecho de ratxn y elegir la entrada Propiedades.

Se abrirx una nueva ventana titulada Propiedades de Conexixn de xrea local. En la ventana interna titulada Esta conexixn utiliza los siguientes elementos: buscar la entrada Protocolo Internet (TCP/IP). Esta entrada debe estar activada (en la parte izquierda debe aparecer una especie de V) y ademxs seleccionada con el ratxn (debe aparecer en vxdeo inverso, con el fondo el azul y las letras en blanco). Cuando todas estas premisas se cumplan, pulsar en Propiedades.

Aparecerx una nueva ventana titulada Propiedades de Protocolo Internet (TCP/IP) que dentro tiene una xnica pestaxa titulada General. En esta pestaxa aparecen los campos que permiten configurar el TCP/IP.

Entre Obtener una direccixn IPxautomxticamente y Usar la siguiente direccixn IP eligiremos esta xltima opcixn, porque los hosts del laboratorio (actualmente) tienen una IP fija. En ese instante se habilitarxn las zonas donde escribiremos la direccixn IP la mxscara de la red y la puerta de enlace. Toda esta informacixn la deberxamos encontrar en una etiqueta que hay en el frontal de nuestro ordenador.

Entre Obtener la direccixn del servidor DNS automxticamente y Usar las siguientes direcciones de servidor DNS seleccionaremos esta xltima opcixn, porque el DNS es estxtico y conocido para los hosts del laboratorio (en concreto, filabres.ual.es). Se habilitarxn dos zonas donde escribir la direccixn IPxde dos servidores DNS. Uno deberxa ser suficiente. El segundo sxlo se utiliza cuando el primero no funciona. La direccixn IPdel servidor DNS principal deberxa aparecer tambixn en el frontal del ordenador.

Cuestixn 4.3: Averigue las diferencias que existen entre configurar el TCP/IP a mano y hacerlo mediante el DHCP.

Configuracin del TCP/IP en Linux

[next] [prev] [prev-tail] [tail] [up]

4.3 Configuracixn del TCP/IP en Linux Todos los hosts deberxan tener configurado el TCP/IP. Por tanto, vamos a explicar qux pasos serxan los que darxamos en el caso de que esto no fuera asx.

En primer lugar, saber que sxlo el sxper-usuario (root) puede modificar los parxmetros del TCP/IP. Sin embargo, como en realidad no necesitamos modificar ningxn fichero, todo el proceso que a continuacixn se expone deberxa poderse realizar como usuario sin privilegios de administracixn.

4.3.1 ¿Reconoce el kernel el hardware de red? Para conocer si el nxcleo (kernel) del sistema operativo reconoce el adaptador de red que estamos utilizando podemos realizar diferentes pruebas. La primera consiste en ver si el TCP/IP ya estx configurado, con lo que sabremos que el kernel necesariamente lo reconoce. Esto se puede hacer escribiendo en un shell:

root#xifconfig

La salida es una lista de interfaces, junto con algunos parxmetros de configuracixn. Lo importante es que veamos que aparece el interface eth0, esto es, el primer interface de red Ethernet.

Si esto no fuera asx, hay dos opciones:

Cargar el mxdulo correspondiente: Conociendo el modelo del adaptador de red

tenemos que averiguar cxmo se llama el mxdulo que lo manipula.‡ ‡Lo mxs sencillo es buscar en Internet. Lo localizamos en el sistema de ficheros y lo cargamos usando insmod o modprobe. Los detalles de este proceso son deberxan ser consultados en un kernel-HOWTO o en un manual de referencia de la distribucixn de Linux que estamos utilizando.

Compilar un nuevo kernel y usarlo: Para hacer esto necesitamos los fuentes de un kernel reciente (preferiblemente la xltima disponible). Activaremos el mxdulo correspondiente y compilaremos el kernel. Despuxs lo copiaremos en un directorio accesible por el boot loader y reiniciaremos la mxquina. Los detalles de este proceso deberxan encontrarse en la documentacixn anteriormente comentada.

4.3.2 Configuracixn temporal del TCP/IP Como se ha indicado en la seccixn anterior, puede ocurrir que el kernel sx que reconozca el hardware de red, pero xste no ha sido activado. La forma estxndar de configurar temporalmente un interfaz de red consiste en usar las utilidades /sbin/ifconfig y /sbin/route desde la lxnea de comandos. Ejemplo:

#xEstablecemosxlaxdirxIP
xroot#xifconfigxeth0x192.168.213.128
x
x#xEstablecemosxlaxmxscaraxdexred
xroot#xifconfigxeth0xnetmaskx255.255.255.0
x
x#xLevantamosxelxinterfaz.xSustituirx"up"xporx"down"xparaxdesactivarlo.
xroot#xifconfigxeth0xup
x
x#xEstablecemosxelxgatewayx(routerxdexnuestraxred)
xroot#xroutex--inetxaddx-netx0.0.0.0/0xgwx192.168.213.2xeth0
x
x#xDefinimosxelxservidorxdexnombres
xroot#xechox"nameserverx150.214.156.2"x>x/etc/resolv.conf

Taller 4.3: Determine el rango de direcciones IP de la subred en la que estx el PC virtual (utilice ifconfig sin argumentos). Cambie la direccixn IP del PC virtual y comprueve que la conexixn con Internet sigue funcionando.

Cuestixn 4.4: Indique la direccixn IP que ha utilizado. ¿A qux sub-red pertenece dicha direccixn IP? ¿Es una direccixn privada?

Taller 4.4: Cambie el servidor de nombres del PC virtual por el de la Universidad

     de Almerxa (150.214.156.2).

Cuestixn 4.5: ¿Sigue funcionando el DNS? Intente contestar a esta pregunta en dos situaciones distintas: (1) cuando estx en la universidad y (2) cuando fuera de la universidad.

4.3.3 Configuracixn permanente del TCP/IP La configuracixn permanente se consigue haciendo que los scripts de arranque de la computadora ejecuten en algxn instante los comandos especificados durante la configuracixn temporal. El problema al que nos enfrentamos ahora es localizar los ficheros de configuracixn que estos scripts utilizan para realizar dicha tarea. Por desgracia, estos scrips suelen tener diferentes localizaciones y contenidos dependiendo de la distribucixn de Linux utilizada. A continuacixn se explicarx cxmo localizar dichos

ficheros.§ §Aunque esta seccixn ha sido particularizada para Debian Linux, el procedimiento de localizacixn de los ficheros de configuracixn del TCP/IP puede ser fxcilmente adaptado a otras distribuciones de Linux.

Bien. Antes de comenzar, un poco de nomenclatura; en adelante hablaremos de los programas ejecutables como procesos. En Unix (y por tanto en Linux) los procesos son tareas que pueden invocar a otros procesos y que el sistema operativo ejecuta durante un cierto intervalo de tiempo. Cuando los procesos resuelven tareas xtiles se habla de demonios (daemons en inglxs.)

Para encontrar el o los ficheros que contienen la configuracixn del TCP/IP en una mxquina con Linux los pasos a realizar deberxan ser los siguientes:

Localizar el fichero /etc/inittab. Este fichero es utilizado por el proceso /sbin/init que se encarga de configurar la computadora y de cargar el resto de procesos despuxs de que el sistema operativo arranque y monte el sistema de ficheros raxz [3]. De hecho, /sbin/init es el proceso padre de todos los demxs procesos que corren en su mxquina. Esto xltimo puede comprobarse escribiendo:

usuario$xpsxaxx-H

En Debian, el fichero /etc/inittab deberxa tener una entrada semejante a:

si::sysinit:/etc/init.d/rcS

El primer campo¶ ¶Cada campo estx delimitado por el carxcter ”:”. (si) es un identificativo del runlevel (nivel de ejecucixn) en el que se lanza cada proceso y significa system

initialization.∥ ∥El runlevel define el estado en el que se encuentra computadora. Por ejemplo, si vale 0 es que la computadora estx apagada o se estx apagando, si vale 1 es que estx en modo single-user. Los runlevels que van desde el 2 hasta el 5 se dedican para ejecutar procesos en modo multi-user y el runlevel 6 para indicar que la computadora se estx reiniciando. El segundo campo es una lista de niveles de ejecucixn en los que se va a ejecutar el proceso especificado por el cuarto campo (/etc/init.d/rcS) y debe estar vacxo si el tercer campo, que especifica la accixn a llevar a cabo en ese runlevel vale sysinit. El script /etc/init.d/rcS se encarga de levantar el sistema y serxa el equivalente al fichero AUTOEXEC.BAT en MS-DOS.

Tras la inicializacixn especificada en /etc/init.d/rcS, /sbin/init lleva la computadora al estado normal de funcionamiento. Para ello debe lanzar un montxn de demonios que hacen cosas como leer el teclado y el ratxn, mandar los trabajos de impresixn a las impresoras, recibir los correos electrxnicos, etc. Todos estos procesos son especificados en las entradas:

l0:0:wait:/etc/init.d/rcx0
xl1:1:wait:/etc/init.d/rcx1
xl2:2:wait:/etc/init.d/rcx2
xl3:3:wait:/etc/init.d/rcx3
xl4:4:wait:/etc/init.d/rcx4
xl5:5:wait:/etc/init.d/rcx5
xl6:6:wait:/etc/init.d/rcx6

Escribir

usuario$xmanxinittab

para conocer la sintaxis exacta de /etc/inittab. Como podemos apreciar, estas entradas tienen un elemento extra que es un parxmetro al script /etc/init.d/rc. Cuando ejecutamos:

/etc/init.d/rcx0

Todos los procesos que en el directorio /etc/rc0.d comiencen por una S van a ser lanzados en el runlevel 0, en orden alfabxtico. Los procesos que comienzan por K son killed (matados) cuando abandonamos ese runlevel. Como podemos ver, todos estos procesos son enlaces simbxlicos a otros procesos localizados en el directorio:

x/etc/init.d/

En /etc/rc0.d encontramos que el proceso S??networking (donde ?? son dos dxgitos decimales) apunta al proceso:

/etc/init.d/networking

que es el encargado de configurar el TCP/IP. Este proceso debe invocarse escribiendo:

root#x/etc/init.d/networkingxstart

para configurar por primera vez la

red∗∗ ∗∗Por primera vez se refiere a que es la primera vez desde que la computadora ha arrancado. . Si lo editamos y buscamos en la seccixn start veremos que el proceso que configura el interface de red se llama /sbin/ifup.

/sbin/ifup tiene una documentacixn asociada que puede consultarse escribiendo:

usuario$xmanxifup

Revisando dicha documentacixn descubriremos que ifup y ifdown (el programa que se utiliza para deshabilitar los interfaces de red) leen los datos para configurar el TCP/IP del fichero:

     /etc/network/interfaces

Bien. Si hemos realizado correctamente el proceso de rastreo anterior llegaremos a que los ficheros de configuracixn del TCP/IP son, dependiendo de la distribucixn de Linux:

Debian Linux: x

Como acabamos de ver, el fichero que contiene los parxmetros son:

/etc/network/interfaces

Su sintaxis es:

root#xcatx/etc/network/interfaces
x###xetherconfxDEBCONFxAREA.xDOxNOTxEDITxTHISxAREAxORxINSERTxTEXTxBEFORExIT.
xautoxloxeth0
x
xifacexloxinetxloopback
x
xifacexeth0xinetxstatic
xxxaddressx193.147.118.57
xxxnetmaskx255.255.255.0
xxxgatewayx193.147.118.1
x
x###xENDxOFxDEBCONFxAREA.xxPLACExYOURxEDITSxBELOW;xTHEYxWILLxBExPRESERVED.

En xl podemos leer que este fichero ha sido creado de forma automxtica por la utilidad debconf cuando instalx el paquete etherconf. Por tanto, si quisixramos modificar este fichero deberxamos escribir:

root#xdpkg-reconfigurexetherconf

Para aprender mxs acerca de la utilidad dpkg acceder a la Guxa de Referencia Debian (http://www.debian.org/doc/user-manuals#quick-reference).

Fedora Core Linux: x

El fichero que configura el interfaz eth0 es /etc/sysconfig/network-scripts/ifcfg-eth0

cuya sintaxis es:

#xAdvancedxMicroxDevicesx[AMD]x79c970x[PCnet32xLANCE]
xDEVICE=eth0
xONBOOT=yes
xBOOTPROTO=none
xNETMASK=255.255.255.0
xIPADDR=193.147.118.57
xGATEWAY=193.147.118.1
xTYPE=Ethernet
xUSERCTL=no
xIPV6INIT=no
xPEERDNS=no

Este fichero sxlo deberxa modificarse utilizando un programa que lo edite. Por ejemplo, en X-window podemos utilizar system-config-network.

Gentoo Linux: x

El fichero que configura a todos los interfaces de red es:

/etc/conf.d/net

Su sintaxis es:

root#xcatx/etc/conf.d/net
x#xThisxblankxconfigurationxwillxautomaticallyxusexDHCPxforxanyxnet.*
x#xscriptsxinx/etc/init.d.xxToxcreatexaxmorexcompletexconfiguration,
x#xpleasexreviewx/etc/conf.d/net.examplexandxsavexyourxconfiguration
x#xinx/etc/conf.d/netx(thisxfilex:]!).
x
xconfig_eth0=(x"193.147.118.57xnetmaskx255.255.255.0xbrdx193.147.118.255"x)
xroutes_eth0=(x"defaultxgwx193.147.118.1"x)

En Gentoo este fichero se modifica usando un editor de ficheros ASCII.

4.3.4 Usando las modificaciones permanentes La modificacixn de los ficheros de configuracixn del TCP/IP no basta para que probemos los cambios. Hay que inicializar los scripts que utilizan dichos ficheros. Esto se hace asx:

root#x/etc/init.d/networkingxrestart

Fedora Core Linux: x

root#x/etc/init.d/networkxrestart

Gentoo Linux: x

root#x/etc/init.d/net.eth0xrestart

4.3.5 Configuracixn del nombre y el dominio del host Debian Linux: x

El nombre y dominio del host se encuentran en el fichero /etc/hostname:

gogh.ace.ual.es

Fedora Core Linux: x El nombre y dominio del host se encuentran en el fichero /etc/sysconfig/network:

NETWORKING=yes
xNETWORKING_IPV6=yes
xHOSTNAME=gogh.ace.ual.es

Gentoo Linux: x

El nombre del host aparece en el fichero /etc/conf.d/hostname:

root#xcatx/etc/conf.d/hostname
x#x/etc/conf.d/hostname
x
x#xSetxtoxthexhostnamexofxthisxmachine
xHOSTNAME="gogh"

El dominio del host aparece en el fichero /etc/conf.d/domainname:

#x/etc/conf.d/domainname
x
x#xWhenxsettingxupxresolv.conf,xwhatxshouldxtakexprecedence?
x#xx0x=xletxdhcp/whateverxoverridexDNSDOMAIN
x#xx1x=xoverridexdhcp/whateverxwithxDNSDOMAIN
x
xOVERRIDE=1
x
x#xToxhavexaxproperxFQDN,xyouxneedxtoxsetupx/etc/hostsxandx/etc/resolv.conf
x#x(domainxentryxinx/etc/resolv.confxandxFQDNxinx/etc/hosts).
x#
x#xDNSDOMAINxmerelyxsetsxthexdomainxentryxinx/etc/resolv.conf,xsee
x#xthexresolv.conf(5)xmanpagexforxmorexinfo.
x
xDNSDOMAIN="ace.ual.es"
x
x#xForxinformationxonxsettingxupxNIS,xpleasexsee:
x#xxxhttp://www.linux-nis.org/nis-howto/HOWTO/
x
xNISDOMAIN=""

4.3.6 Configuracixn del DNS Aunque parezca mentira, la configuracixn del servidor de nombres es independiente de la distribucixn de Linux. El fichero que contiene la direccixn IP del servidor DNS es siempre /etc/resolv.conf que, para todos los hosts de la Universidad de Almerxa, deberxa tener al menos la entrada:

nameserverx150.214.156.2

Si existen servidores alternativos, aparecen mxs entradas pero con otra direccixn IP claro.

Otro aspecto importante a considerar es el papel del fichero /etc/hosts. Este fichero se utiliza siempre (aunque el servidor DNS haya sido especificado,) y contiene una lista de resoluciones estxticas de nombres. En este fichero se incluyen las resoluciones mxs frecuentes (por ejemplo, para hosts a los que nos conectamos todos los dxas) y descargamos asx al DNS. Por otra parte, si este servicio cae, la resolucixn para estos hosts sigue funcionando. El contenido txpico de este fichero es:

root#xcatx/etc/hosts
x#x/etc/hosts
x#
x#xThisxfilexdescribesxaxnumberxofxhostname-to-address
x#xmappingsxforxthexTCP/IPxsubsystem.xxItxisxmostly
x#xusedxatxbootxtime,xwhenxnoxnamexserversxarexrunning.
x#xOnxsmallxsystems,xthisxfilexcanxbexusedxinsteadxofxa
x#x"named"xnamexserver.xxJustxaddxthexnames,xaddresses
x#xandxanyxaliasesxtoxthisxfile...
x#
x
x127.0.0.1xxxxxxxxxxxxxlocalhost
x193.147.118.57xxxxxxxxgogh.ace.ual.esxxxgogh
x150.214.156.2xxxxxxxxxfilabres.ual.esxxxfilabresxalias_filabres
x
x#xIPV6xversionsxofxlocalhostxandxco
x::1xip6-localhostxip6-loopback
xfe00::0xip6-localnet
xff00::0xip6-mcastprefix
xff02::1xip6-allnodes
xff02::2xip6-allrouters
xff02::3xip6-allhosts

Taller 4.5: Defina un alias para filabres.ual.es. Pruebe a hacer un ping a filabres usando su alias.

Cuestixn 4.6: ¿Podrxa navegar por Internet si no ha especificado correctamente el servidor de nombres? Razone su respuesta.

Cuestixn 4.7: ¿Qux ventajas tiene el usar un servidor de nombres local frente a usar un servidor de nombres lejano?

Cuestixn 4.8: ¿Qux fichero contiene la direccixn IP del gateway?

Cuestixn 4.9: ¿Qux fichero almacena la mxscara de red?

Cuestixn 4.10: ¿Qux diferencia existe entre usar el nombre canxnico o usar el alias?

Cuestixn 4.11: Cuando realiza un ping a su servidor de nombres usando su nombre canxnico, ¿se estx usando su servidor DNS para resolver la direccixn IP de su servidor DNS?

5 Acceso remoto 1: Telnet y Ftp

[next] [prev] [prev-tail] [tail] [up] Prxcticax5Acceso remoto 1: Telnet y Ftp

Las primeras computadoras eran extremadamente caras y debxan ser compartidas por muchos usuarios a la vez para justificar su construccixn. En esta situacixn cada usuario usaba un terminal “tonto” (con poca potencia de cxlculo) para conectarse al host principal “el mainframe”. Para que los usuarios pudieran usar los recursos del host principal se escribieron una serie de aplicaciones de red que perduran hasta nuestros dxas. De estos programas, los mxs interesantes son Telnet y Ftp.

x5.1 Telnet xx5.1.1 La interaccixn cliente-servidor xx5.1.2 Utilizando Telnet xx5.1.3 Acerca de la seguridad en las comunicaciones xx5.1.4 Instalacixn del cliente xx5.1.5 Instalacixn del servidor xx5.1.6 Configuracixn del servidor xx5.1.7 Activacixn y desactivacixn del servicio x5.2 Ftp (File Transfer Program) xx5.2.1 Instalacixn del cliente xx5.2.2 Comandos Ftp mxs usuales xx5.2.3 Instalacixn del servidor xx5.2.4 Configuracixn del servidor xx5.2.5 Activacixn y desactivacixn del servicio

Telnet

[next] [prev] [prev-tail] [tail] [up] 5.1 Telnet

Telnet es una aplicacixn cliente-servidor que se utiliza para el acceso remoto a un host. El servidor se ejecuta en el host remoto y el cliente en el local. De esta forma podemos acceder a los recursos de la computadora remota a travxs de un shell, igual que si estuvixramos sentados frente a un teclado directamente conectado al host remoto.

5.1.1 La interaccixn cliente-servidor Telnet utiliza el protocolo TCP para transmitir, carxcter a carxcter, hasta el host remoto cada una de las teclas que pulsamos en el teclado del host cliente. De hecho, Telnet es (aparte de una conexixn con un shell en el host remoto) una aplicacixn bxsica de eco (echo en inglxs). Cada vez que pulsamos una tecla el cliente la transmite hasta el servidor y xste nos la devuelve. Asx el usuario comprueba si ha existido algxn error.

Como hemos dicho, para llevar a cabo estas comunicaciones Telnet utiliza el TCP. Esto significa que todas las comunicaciones estxn virtualmente libres de errores de transmisixn gracias al sistema de retransmisixn automxtica de paquetes que el TCP

implementa.∗ ∗Por tanto, si vemos que existe un error en algxn comando que hayamos escrito, muy probablemente se trate de un error de mecanografxa.

5.1.2 Utilizando Telnet Para usar Telnet simplemente invocamos al cliente desde la lxnea de comandos y escibimos a continuacixn el nombre del host al que queremos conectarnos:

usuario$xtelnetx<host_remoto>
x#xNota:xlosx<>xnoxpertenecenxaxlaxdireccixnxdelxhost

Ademxs, Telnet puede ser utilizado tambixn para acceder a un servidor distinto de telnetd. Por ejemplo, podemos utilizar un cliente Telnet cuando deseemos comprobar el funcionamiento de un servidor SMTP que escucha en el puerto 25. Para seleccionar dicho servicio invocaremos a (el cliente) telnet de la siguiente forma:

usuario$xtelnetx<servidor_SMTP>x25

5.1.3 Acerca de la seguridad en las comunicaciones Un aspecto importante a tener en cuenta a la hora de utilizar Telnet es que todas las transmisiones circulan por la red en texto plano, sin ningxn tipo de cifrado. Y xsto es cierto incluso para la transmisixn del nombre de usuario y del password cuando accedemos a la computadora remota. Por este motivo, Telnet sxlo deberxa ser utilizado en aquellos contextos donde se estx seguro que este hecho no va a ser un problema.

En la prxctica existen pocas situaciones donde el uso de Telnet sea seguro: (1) cuando accedemos localmente a nuestro host y (2) cuando accedemos a un host remoto y la red garantiza que nadie puede estar haciendo sniffing. Por desgracia, esto xltimo fuera de una red local cableada es bastante complicado de asegurar.

Taller 5.1: Usando el programa Telnet que viene con el sistema operativo Windows intente hacer Telnet a un servidor que conozca. El programa Telnet puede ser invocado desde el intxrprete de comandos del MS-DOS a travxs del comando

     telnet.

5.1.4 Instalacixn del cliente

Debian Linux: Instalamos el paquete Linux NetKit (http://www.hcs.harvard.edu/xdholland/computers/netkit.html).

root#xapt-getxinstallxtelnet

Fedora Core Linux: Instalamos el paquete Linux NetKit.

root#xyumxinstallxtelnet

Gentoo Linux: Instalamos el paquete OpenBSD (ftp://ftp.suse.com/pub/people/kukuk/ipv6/).

root#xemergextelnet-bsd

Taller 5.2: Instale un cliente Telnet. Intente acceder a un host que conoza usando

el servicio Telnet desde el PC virtual. 5.1.5 Instalacixn del servidor

Debian Linux: x

root#xapt-getxinstallxtelnetd

Fedora Core Linux: x

root#xyumxinstallxtelnet-server

Gentoo Linux: x

root#xemergextelnet-bsdxxinetd

5.1.6 Configuracixn del servidor

Debian Linux: No hay que hacer nada.

Fedora Core Linux: Hay que editar el fichero /etc/xinetd.d/telnetd y comprobar que el servidor de Telnet no estx “disabled”. A continuacixn reiniciar el servicio xinetd (vxase el Apxndice C).

Gentoo Linux: Hay que editar el fichero /etc/xinetd.d/telnetd y comprobar que el servidor de Telnet no estx “disabled”. A continuacixn reiniciar el servicio xinetd (vxase el Apxndice C).

Taller 5.3: Instale un servidor Telnet. Intente acceder al host virtual. No utilice el usuario root porque en muchos casos, por motivos de seguridad, el demonio Telnet estx configurado para negar el acceso al administrador. Intente el acceso desde:

El PC virtual (Linux).

El PC huxsped (Windows).

5.1.7 Activacixn y desactivacixn del servicio El demonio Telnet es un sub-demonio y por tanto, su activacixn y desactivacixn no es trivial. Esto es exxctamente lo que hay que hacer:

Debian Linux:

#xActivacixnxdefinitiva
xroot#xupdate-inetdx--enablextelnet
x
x#xDesactivacixnxdefinitiva
xroot#xupdate-inetdx--disablextelnet

Fedora Core Linux: El demonio que controla Telnet se llama xinetd. Para activar y desactivar Telnet hay que modificar el fichero de configuracixn y reiniciar el demonio.

Gentoo Linux: El demonio que controla Telnet se llama xinetd. Para activar y desactivar Telnet hay que modificar el fichero de configuracixn y reiniciar el demonio.

Taller 5.4: Compruebe que activando y desactivando el servidor Telnet, el servicio se reanuda o deja de prestarse.

Ftp (File Transfer Program)

[next] [prev] [prev-tail] [tail] [up] 5.2 Ftp (File Transfer Program)

Ftp es, junto con Telnet, uno de esos programas que aparecieron en las primeras redes de computadoras. Si Telnet permite acceder de forma remota a un host, Ftp se utiliza para transmitir ficheros entre hosts remotos.

Ftp es una sistema que consta de un servidor y de un cliente. El usuario ejecuta el cliente de la forma:

usuario$xftpx<host_remoto>

El servidor Ftp solicita un login y un password correctos y cuando dicha informacixn ha sido enviada (sin cifrar), el cliente ejecuta un intxrprete sencillo de xrdenes que permiten mover ficheros entre nuestro host y el remoto.

5.2.1 Instalacixn del cliente Existen muchos clientes Ftp. El que nosotros vamos a instalar se llama ftp y pertenece al paquete Linux NetKit (http://www.hcs.harvard.edu/˜ dholland/computers/netkit.html):

root#xapt-getxinstallxftp

Fedora Core Linux: x

root#xyumxinstallxftp

Gentoo Linux: x

     root#xemergexftp

Taller 5.5: Instale un cliente Ftp.

5.2.2 Comandos Ftp mxs usuales A continuacixn presentamos una lista de los principales comandos que acepta el cliente: pwd: Imprimir el directorio actual. ls: Mostrar el contenido del directorio remoto. cd <directorio>: Nos permite cambiar de directorio. get <fichero>: Transfiere un fichero desde el host remoto al host local. put <fichero>: Transfiere un fichero desde el host local al host remoto. !<comando local>: Ejecuta un comando en un shell del cliente. quit: Cierra el intxrprete del Ftp.

Si se desea conocer el resto de comandos que el cliente Ftp acepta, escriba help en el shell del cliente Ftp.

Taller 5.6: Conxctese a un servidor Ftp que conozca desde el PC virtual y transfiera algxn archivo. Haga lo mismo desde el host huxsped (Windows).

5.2.3 Instalacixn del servidor Tambixn existen mxltiples servidores Ftp. El que nosotros vamos a instalar se llama vsftpd (http://vsftpd.beasts.org/):

root#xapt-getxinstallxvsftpd

Fedora Core Linux: x

root#xyumxinstallxvsftpd

Gentoo Linux: x

     root#xemergexvsftpd

5.2.4 Configuracixn del servidor En el vsftpd, por defecto sxlo tiene acceso el usuario anonymous. Para habilitar el acceso a todos los usuarios del sistema es necesario descomentar la lxnea localxenable=YES. Ademxs, si queremos habilitar la escritura en los home’s de los usuarios, hay que descomentar la lxnea writexenable=YES.

Debian Linux: El fichero de configuracixn es /etc/vsftpd.conf. Excepto lo indicado anteriormente no hay que realizar nada extra.

#xEditarxelxficheroxyxsalvarlo
xroot#xvix/etc/vsftpd.conf

Fedora Core Linux: Si se desea que los usuarios tengan acceso a su home’s en la mxquina remota hay deshabilitar selinux modificando el fichero /etc/selinux/config. Esto puede hacerse con el comando:

root#x/usr/sbin/setseboolx-Pxftp_home_dirx1

Gentoo Linux: Es necesario crear un fichero de configuracixn. Por suerte, la que viene en el fichero /etc/vsftpd/vsftpd.conf.example es suficiente para la mayorxa de los servicios mxs comunes:

root#xcpx/etc/vsftpd/vsftpd.conf.examplex/etc/vsftpd/vsftpd.conf

5.2.5 Activacixn y desactivacixn del servicio El demonio que hemos instalado se activa y desactiva de forma estxndar. Vxase el Apxndice C para saber cxmo hacer esto.

Taller 5.7:

Instale un servidor Ftp en un PC virtual y configurelo para que los usuarios puedan escribir en sus home’s.

Acceda desde el host huxsped (Windows) a su cuenta de usuario en el host virtual y transfiera algxn fichero. Esto puede hacerse invocando desde el intxrprete de comandos del MS-DOS al programa ftp. Pruebe a hacer lo mismo desde el PC virtual.

Compruebe que activando y desactivando el servidor, el servicio se reanuda o deja de prestarse.

Cuestixn 5.1: Describa brevemente para qux se utilizan los programas Telnet y Ftp.

Cuestixn 5.2: Usando Wireshark (vxase el Apxndice F) disexe un time-line que muestre una interaccixn real entre un cliente y un servidor Telnet suponiendo que el usario sxlo ejecuta el comando exit una vez que ha accedido al servidor remoto. Muestre sxlo los paquetes generados por el protocolo Telnet que dependen de la sesixn (los generados cuando introducimos nuestro login y

nuestro password† †Altere el login y el password para no revelarlos ... , y los que resultan de ejecutar el comando exit). En cada paquete transmitido indique el contenido del payload (la parte del paquete que es generada en la parte mxs alta de la pila de protocolos) y el instante en el que es capturado por el sniffer.

Cuestixn 5.3: En la aplicacixn Ftp, ¿qux diferencias hay entre transmitir los ficheros en formato binario y en formato ASCII? Investigue en Internet.

Cuestixn 5.4: Actualmente es imposible realizar Telnet o Ftp a un ordenador de la Universidad de Almerxa desde el resto de Internet, si estos servicios estxn

siendo ofrecidos en los puertos estxndar (vxase el fichero /etc/services).‡ ‡Sin usar el redireccionamiento de puertos mediante la aplicacixn SSH. ¿Por qux esto es asx? Sabiendo que, por ejemplo, el trxfico Web sx estx permitido, ¿podrxa instalarse un servidor Telnet en el puerto 80 (el puerto usado por los servidores Web) y conectarnos a xl desde fuera de la Universidad? Razone su respuesta. Indique en este xltimo caso qux otro servicio necesariamente no podrxa ofrecerse en el host que tiene el servidor Telnet escuchando en el puerto 80.

[next] [prev] [prev-tail] [front] [up] [next] [prev] [prev-tail] [front] [up] 6 La Web

[next] [prev] [prev-tail] [tail] [up] Prxcticax6La Web

En este mxdulo analizamos una de las aplicaciones mxs importantes de Internet: la Web. Bxsicamente veremos los siguientes aspectos:

Instalar y configurar bxsicamente un cliente Web.

Instalar y configurar bxsicamente un servidor Web.

Instalar y usar un proxy Web.

Depurar una interaccixn Web utilizando un sniffer.

x6.1 Mxs sobre la Web xx6.1.1 Los servidores Web xx6.1.2 Los navegadores Web xx6.1.3 El HyperText Transfer Protocol xx6.1.4 Los objetos Web y las URL’s xx6.1.5 El HyperText Markup Language xx6.1.6 La W3C xx6.1.7 Los proxys Web xx6.1.8 La cachx de los navegadores Web x6.2 Mozilla Firefox xx6.2.1 Instalacixn xx6.2.2 Ejecucixn x6.3 Apache xx6.3.1 Instalacixn xx6.3.2 Configuracixn x6.4 Squid xx6.4.1 Instalacixn xx6.4.2 Configuracixn xx6.4.3 Utilizacixn x6.5 Anxlisis de las interacciones Web xx6.5.1 Anxlisis de una interaccixn Web bxsica xx6.5.2 Anxlisis de una interacixn Web condicional xx6.5.3 Anxlisis de una interaccixn Web que transmite un objeto “largo” xx6.5.4 Anxlisis de una interaccixn Web con objetos empotrados

Ms sobre la Web

[next] [prev] [prev-tail] [tail] [up]

6.1 Mxs sobre la Web La World Wide Web (tambixn llamada WWW o simplemente “la Web”) es un sistema de informacixn (actualmente enorme, posiblemente el mxs grande de la historia) basado en millones de pxginas Web distribuidas por Internet. Esta informacixn es servida bajo demanda por los servidores Web y consultada por los usuarios a travxs de los clientes (tambixn llamados navegadores) Web.

6.1.1 Los servidores Web Un servidor Web es un servicio que proporciona acceso a objetos Web alojados en un host con acceso a Internet. Los servidores Web aceptan peticiones (generalmente a travxs del puerto 80) de los clientes Web.

Existen muchos servidores Web. Aqux mostramos una lista con algunos de ellos: CERN httpd (http://www.w3.org/Daemon), Apache (http://httpd.apache.org) y Microsoft Internet Information Server (http://www.microsoft.com/WindowsServer2003/iis/default.mspx).

6.1.2 Los navegadores Web Un navegador es la parte cliente de la Web. Cada vez que utilizamos uno y descargamos una pxgina estamos realizando una peticixn HTTP a un servidor Web, y xste nos contesta con una respuesta HTTP que contiene el objeto Web solicitado.

Inicialmente los navegadores Web sxlo podxan mostrar texto. Sin embargo, actualmente existen muchos tipos de objetos Web que los navegadores son capaces de procesar (como imxgenes, sonidos y vxdeos, programas escritos en Java y Flash, etc.). Esta es una lista de algunos de los navegadores Web mxs famosos: Amaya (http://www.w3.org/Amaya), Epiphany http://www.gnome.org/projects/epiphany, Galeon (http://galeon.sourceforge.net), Windows Internet Explorer (http://www.microsoft.com/spain/windows/ie/default.mspx), Konqueror (http://konqueror.org), Lynx (http://lynx.browser.org), Mozilla Firefox (http://www.mozilla-europe.org/es/products/firefox), Netscape Navigator (http://browser.netscape.com), Opera (http://www.opera.com), Safari (http://www.apple.com/es/macosx/features/safari) y Shiira ((http://hmdt-web.net/shiira/en).

6.1.3 El HyperText Transfer Protocol El HTTP (http://www.w3.org/Protocols) es el protocolo de transferencia de informacixn

bxsico∗ ∗Ahora existen muchos otros que tambixn se utilizan como el File Transfer Protocol (FTP). en la Web. Fue ideado a principios de los 90 en el CERN (http://www.cern.ch) por Tim Berners-Lee (http://www.w3.org/People/Berners-Lee).

6.1.4 Los objetos Web y las URL’s El nombre comxn para todo lo que es posible transferir a travxs de la Web se conoce como objeto Web. Por definicixn cada objeto puede ser referenciado a travxs de una URL (Uniform Resource Locator). En los navegadores Web, las URLs se muestran en la entrada que se sitxa normalmente en la parte superior de la ventana del navegador.

6.1.5 El HyperText Markup Language El HTML (http://www.w3.org/MarkUp) es el lenguaje en el que estxn escrito las pxginas Web. En su versixn mxs bxsica, una pxgina Web es un conjunto de instrucciones escritas en HTML que referencian a otros objetos Web.

6.1.6 La W3C La World Wide Web Consortium (W3C) es el organismo internacional encargado de regular el desarrollo de la Web. La Web es el sistema de informacixn mxs importante de Internet y muchas compaxxas y grupos de investigacixn (entre otros) axaden constantemente nuevas funcionalidades. La W3C se encarga (bxsicamente) de que cualquier cliente Web sea capaz de comunicarse con cualquier servidor Web.

6.1.7 Los proxys Web La Web consume un gran porcentaje del ancho de banda de Internet. Para reducir dicho consumo puede instalarse un proxy Web que es un sistema que funciona como una cachx para los usuarios que los usan.

El funcionamiento de un proxy Web es bastante simple de entender. Un proxy txpicamente es utilizado por los usuarios de una red con suficientemente ancho de banda. Si suponemos que generalmente dichos usuarios van a acceder a un conjunto de objetos Web mxs de una vez en un intervalo de tiempo dado, es mxs eficiente colocar dichos objetos en el proxy Web y acceder a xl.

Un proxy Web funciona como servidor y como cliente. Cuando un usuario configura su navegador Web para utilizar un proxy Web y accede a un objeto Web a travxs de su URL original (que referencia el objeto en el servidor Web, no en el proxy Web), en realidad accede (siempre) al proxy Web. El proxy Web entonces busca el objeto en su cachx y si lo encuentra “fresco”† †Para ello el proxy le pregunta al servidor Web que contiene el objeto si su copia es tan nueva como la que xl tiene. , se lo sirve al navegador Web cliente. Nxtese que en este contexto el proxy Web estx funcionando como un servidor Web.

Pero, ¿qux ocurre cuando el proxy Web no contiene el objeto Web solicitado? Entonces el proxy Web actxa como un cliente Web e intenta acceder al objeto Web a travxs de su URL original. Cuando lo consigue, actualiza su cachx y lo envxa al navegador Web del usuario.

Finalmente indicar que, aunque no configuremos nuestro navegador Web para utilizar un proxy Web, es probable que lo estemos utilizando. Muchos ISP colocan proxys Web transparentes para reducir el trxfico Web a travxs de su red.

Existen decenas de proxys Web. Sin embargo el mxs utilizado es, con diferencia Squid (http://www.squid-cache.org).

6.1.8 La cachx de los navegadores Web El tema del ahorro de ancho de banda es una cuestixn fundamental, y no sxlo para los administradores de las redes. Por este motivo, la mayorxa de los navegadores Web implementan su propia cachx con el objeto de reducir el trxfico. Asx, cuando accedemos a un objeto, el navegador primero comprueba si tiene una copia del mismo en su cachx y si este estx “fresco”, entonces el navegador visualiza el objeto sin necesidad de descargarlo de Internet.

Mozilla Firefox

[next] [prev] [prev-tail] [tail] [up] 6.2 Mozilla Firefox

Mozilla Firefox es un navegador Web que ha sido desarrollado por Mozilla Corporation (http://www.mozilla.org/reorganization) y cientos de voluntarios, siendo, junto con Microsoft Internet Explorer y Apple Safari, uno de los navegadores mxs utilizados. Ademxs, estx disponible prxcticamente para todos los sistemas operativos con entorno grxfico y gracias a que se distribuye en cxdigo fuente es considerado, por muchos (yo, entre ellos) como el navegador mxs seguro que existe.

6.2.1 Instalacixn

root#xapt-getxinstallxfirefox

Fedora Core Linux: x

root#xyumxinstallxfirefox

Gentoo Linux: x

     root#xemergexfirefox

Taller 6.1: Instale firefox (si hiciera falta).

6.2.2 Ejecucixn Muy sencillo:

usuario$xfirefoxx&

Un detalle, sxlo podemos lanzar Firefox en una consola grxfica (xterm, por ejemplo).

Apache

[next] [prev] [prev-tail] [tail] [up] 6.3 Apache

Apache es un servidor Web. De hecho, es el servidor Web mxs difundido actualmente (http://news.netcraft.com/archives/web ṡerver ṡurvey.html). Si a esto sumamos que la Web es la aplicacixn mxs difundida en Internet, podemos asegurar que Apache es el servidor mxs extendido de la historia.

6.3.1 Instalacixn

root#xapt-getxinstallxapache2

Fedora Core Linux: x

root#xyumxinstallxhttpd

Gentoo Linux: x

root#xemergexapache

Taller 6.2: Instale apache. Una vez instalado este paquete deberxamos poder conectarnos al servidor. Esto puede comprobarse si accedemos con el navegador a la URL:

http://hocalhost

y comprobamos que se lee un objeto Web (normalmente el fichero index.html que es el objeto por defecto cuando accedemos a un directorio). Tambixn deberxamos tener acceso al servidor desde la lxnea de comandos:

root#xapache2x-h
xxapache2x-h
xUsage:xapache2x[-Dxname]x[-dxdirectory]x[-fxfile]
xxxxxxxxxxxxxxxx[-Cx"directive"]x[-cx"directive"]
xxxxxxxxxxxxxxxx[-kxstart|restart|graceful|graceful-stop|stop]
xxxxxxxxxxxxxxxx[-v]x[-V]x[-h]x[-l]x[-L]x[-t]x[-S]
xOptions:
xxx-Dxnamexxxxxxxxxxxx:xdefinexaxnamexforxusexinx<IfDefinexname>xdirectives
xxx-dxdirectoryxxxxxxx:xspecifyxanxalternatexinitialxServerRoot
xxx-fxfilexxxxxxxxxxxx:xspecifyxanxalternatexServerConfigFile
xxx-Cx"directive"xxxxx:xprocessxdirectivexbeforexreadingxconfigxfiles
xxx-cx"directive"xxxxx:xprocessxdirectivexafterxreadingxconfigxfiles
xxx-exlevelxxxxxxxxxxx:xshowxstartupxerrorsxofxlevelx(seexLogLevel)
xxx-Exfilexxxxxxxxxxxx:xlogxstartupxerrorsxtoxfile
xxx-vxxxxxxxxxxxxxxxxx:xshowxversionxnumber
xxx-Vxxxxxxxxxxxxxxxxx:xshowxcompilexsettings
xxx-hxxxxxxxxxxxxxxxxx:xlistxavailablexcommandxlinexoptionsx(thisxpage)
xxx-lxxxxxxxxxxxxxxxxx:xlistxcompiledxinxmodules
xxx-Lxxxxxxxxxxxxxxxxx:xlistxavailablexconfigurationxdirectives
xxx-tx-DxDUMP_VHOSTSxx:xshowxparsedxsettingsx(currentlyxonlyxvhostxsettings)
xxx-Sxxxxxxxxxxxxxxxxx:xaxsynonymxforx-tx-DxDUMP_VHOSTS
xxx-tx-DxDUMP_MODULESx:xshowxallxloadedxmodules
xxx-Mxxxxxxxxxxxxxxxxx:xaxsynonymxforx-tx-DxDUMP_MODULES
xxx-txxxxxxxxxxxxxxxxx:xrunxsyntaxxcheckxforxconfigxfiles

Pruebe finalmente a usar el servidor Web que ha instalado desde el sistema operativo huxsped (Windows). Para ello deberx averiguar la direccixn IP que utiliza el host virtual (Debian) y especificar la URL usando dicha direccixn.

6.3.2 Configuracixn La configuracixn de Apache depende del contenido del directorio:

/etc/apache2/

Fedora Core Linux: x

/etc/httpd/

Gentoo Linux: x

     /etc/apache2/

Dicho directorio contiene una serie de ficheros y directorios. El fichero de configuracixn principal es apache2.conf o httpd.conf (dependiendo de la distribucixn). El resto de ficheros de configuracixn son cargados desde xste.

Taller 6.3: Localice el directorio con los ficheros de configuracixn de Apache.

Entre los directorios encontramos los que indican qux mxdulos hay disponibles y qux mxdulos hay habilitados (veremos mxs tarde qux son los mxdulos), asx como qux sites hay disponibles y habilitados (esto estx relacionado con los virtual hosts, mxs tarde tambixn hablaremos de esto).

Cada vez que Apache es ejecutado (o re-ejecutado) se leen los ficheros de configuracixn que estxn bastante bien documentados. Dichos ficheros se organizan en secciones que contienen un conjunto de directivas. Cada directiva debe escribirse en una xnica lxnea. Veamos cxmo controlar algunas de las posibilidades de Apache modificando dichas directivas y el contenido de los directorios de configuracixn:

Localizacixn de los objetos Web en el servidor La directiva DocumentRoot define el directorio que contiene los objetos Web del servidor. Dicha directiva cuando no se declara, tiene el siguiente valor por defecto:

/var/www/apache2-default

Fedora Core Linux: x

/var/www/html

Gentoo Linux: x

     /var/www/localhost/htdocs

Taller 6.4: Localice el directorio que almacena los objetos Web.

Apache ademxs puede servir los objetos que se colocan en el directorio publicxhtml de los usuarios. Por ejemplo, para acceder al directorio publicxhtml del usuario “usuario” en la mxquina local deberxmos utilizar la URL:

http://localhost/~usuario

Para conseguir esto debemos hacer lo siguiente:

Cargar el mxdulo “userdir”. Apache es capaz de realizar las mxs diversas tareas que se le pueden encargar a un servidor Web. Como hay muchos usuarios que no utilizan a la vez todas las posibilidades, el servidor se ha disexado de forma modular. Por tanto, dependiendo de la tarea que deseamos realizar habrx que cargar el mxdulo correspondiente. En este caso necesitamos cargar el mxdulo “userdir” (si es que no estx ya cargado).

#xComprobamosxsixelxmxdulox"userdir"xestxxcargado
xroot#xapache2x-M
xLoadedxModules:
xxcore_modulex(static)
xxlog_config_modulex(static)
xx:
xxstatus_modulex(shared)
xSyntaxxOK
x
x#xEstoxtambixnxpuedexhacersexmostrandoxelxcontenidoxdelxdirectorio:
xroot#xlsx-lx/etc/apache2/mods-enabled/
xtotalx0
xlrwxrwxrwxx1xrootxrootx40x2007-01-08x18:51xactions.loadx->\
xx/etc/apache2/mods-available/actions.load
xlrwxrwxrwxx1xrootxrootx28x2007-01-03x16:03xalias.loadx->x../mods-available/alias.load
x:
xlrwxrwxrwxx1xrootxrootx29x2007-01-03x16:03xstatus.loadx->x../mods-available/status.load
x#xAunquexaquxxsxloxaparecerxanxlosxmxdulosxdextipox"shared",xquexnoxse
x#xinstalanxporxdefectoxenxelxservidor
x
x#xSixnoxloxestx,xconfiguramosxApachexparaxquexloxcarge
xroot#xa2enmodxuserdir
x
x#xForzamosxaxApachexaxleerxtodosxlosxmxdulos
xroot#x/etc/init.d/apache2xforce-reload

Crear el directorio que almacena los objetos Web:

#xCreamosxelxdirectorio
xusuario$xmkdirxpublic_html
x
x#xComprobamosxquextengaxpremisosxdexlecturaxyxdexacceso
xusuario$xlsx-laxpublic_html/
xtotalx8
xdrwxr-xr-xxx2xusuarioxusuariox4096x2007-01-13x13:27x.
xdrwxr-xr-xx14xusuarioxusuariox4096x2007-01-13x13:27x..
x
x#xCopiamosxunxficheroxconxunxobjetoxWeb
xusuario$xcpx/var/www/apache2-default/index.htmlxpublic_html
x
x#xComprobamosxquextenemosxaccesoxaxdichoxfichero
xusuario$xfirefoxxhttp://localhost/~usuariox&

Taller 6.5: Habilite Apache para que los usuarios puedan publicar objetos Web en sus directorios public_html. Compruebe que el servicio funciona correctamente.

Por ser la primera vez que se muestra cxmo se instala un mxdulo en Apache, mostraremos ademxs cxmo se desinstala:

root#xa2dismodxuserdir
xroot#x/etc/init.d/apache2xforce-reload

Taller 6.6: Desinstale e instale (de nuevo) el mxdulo userdir. Compruebe ambas situaciones comprobando si el mxdulo estx funcionando.

Binding Apache por defecto escucha en el puerto 80 a travxs de todos los interfaces de red de los que dispone el host. Este comportamiento puede modificarse para:

Escuchar en un puerto distinto del 80: Esto se hace a travxs de la directiva Listen. Ejemplo:

#xUsandoxunxeditorxdexficherosxASCII,xbuscarxenxelxficheroxde
x#xconfiguracixnxdexApachexlaxdirectivax"Listenx80"xyxcambiarlaxpor
x#x"Listenx8080".xSixdichaxdirectivaxaparecexenxelxfichero
x#x"/etc/apache2/ports.conf",xestoxpuedexhacersextambixnxconxlos
x#xsiguientesxcomandos:
xroot#xsedx's/80/8080/g;'x/etc/apache2/ports.confx>x/etc/apache2/ports.conf.new
xroot#xmvx/etc/apache2/ports.conf.newx/etc/apache2/ports.conf
x
x#xRe-iniciamosxApache.
xroot#x/etc/init.d/apache2xrestart
x
x#xComprobamosxelxcambio.
xusuario$xfirefoxxhttp://localhost:8080x&
x
x#xDeshacemosxelxcambio.
xroot#xsedx's/8080/80/g;'x/etc/apache2/ports.confx>x/etc/apache2/ports.conf.new
xroot#xmvx/etc/apache2/ports.conf.newx/etc/apache2/ports.conf
x
x#xReiniciamosxApache
xroot#x/etc/init.d/apache2xrestart

Taller 6.7: Realice las modificaciones oportunas para que Apache escuche en el puerto 8080 y compruebe que realmente es asx. Finalmente deshaga dichas modificaciones y compruebe que Apache vuelve e escuchar en el puerto 80.

Escuchar en mxs de un puerto: Ejemplo:

root#xcatx>>x/etc/apache2/ports.confx<<xEOF
xListenx8080
xEOF
x
x#xReiniciamosxApache
xroot#x/etc/init.d/apache2xrestart
x
x#xComprobacixn
xusuario$xfirefoxxhttp://localhost:80x&
xusuario$xfirefoxxhttp://localhost:8080
x
x#xDesahacemosxelxcambio.
xroot#xsedx's/Listenx8080//g;'x/etc/apache2/ports.confx>x/etc/apache2/ports.conf.new
xroot#xmvx/etc/apache2/ports.conf.newx/etc/apache2/ports.conf
x
x#xReiniciamosxApache
xroot#x/etc/init.d/apache2xrestart

Taller 6.8: Realice las modificaciones oportunas para que Apache escuche simultaneamente en los puertos 80 y 8080, y compruebe que realmente es asx. Finalmente deshaga dichas modificaciones.

Escuchar por diferentes direcciones IP y mostrando diferentes objetos Web: ... en funcixn de la direccixn IP utilizada por el cliente. Aunque no es muy frecuente, sx que es posible instalar en un host mxs de un adaptador de red, cada uno configurado con una direccixn IP distinta. En este contexto se puede configurar Apache para que sirva diferentes objetos Web en funcixn del adaptador por el que recibe las peticiones. A esta cualidad de Apache se le llama IP-based Virtual Hosting. Para ver un ejemplo nos vamos a aprovechar de que el host con el que estamos trabajando tiene asignadas dos direcciones IP diferentes, una para localhost y otra para el nombre de la mxquina

debian.

#xComprobamosxlaxprimeraxdireccixnxIP.
xusuario$xpingx-cx1xlocalhost
xPINGxlocalhostx(127.0.0.1)x56(84)xbytesxofxdata.
x64xbytesxfromxlocalhostx(127.0.0.1):xicmp_seq=1xttl=64xtime=0.739xms
x
x---xlocalhostxpingxstatisticsx---
x1xpacketsxtransmitted,x1xreceived,x0%xpacketxloss,xtimex0ms
xrttxmin/avg/max/mdevx=x0.739/0.739/0.739/0.000xms
x
x#xComprobamosxlaxsegundax(nxtesexquexahoraxesx.1.1)
xusuario$xpingx-cx1xdebian
xPINGxdebian.localdomainx(127.0.1.1)x56(84)xbytesxofxdata.
x64xbytesxfromxdebian.localdomainx(127.0.1.1):xicmp_seq=1xttl=64xtime=0.048xms
x
x---xdebian.localdomainxpingxstatisticsx---
x1xpacketsxtransmitted,x1xreceived,x0%xpacketxloss,xtimex0ms
xrttxmin/avg/max/mdevx=x0.048/0.048/0.048/0.000xms
x
x#xAxadimosxelxhostxvirtual.
xroot#xcatx>>x/etc/apache2/apache2.confx<<xEOF
x
x<VirtualHostxdebian>
xxxDocumentRootx/var/www/debian/
x</VirtualHost>
xEOF
x
x#xCreamosxelxnuevox"site".
xroot#xmkdirx/var/www/debian
x
x#xMetemosxdentroxunxobjeto.
xroot#xcpx/var/www/apache2-default/index.htmlx/var/www/debian/
x
x#xLoxcambiamosxunxpoco:
xroot#xsedx's/Itxworks!/Funciona!/g;'x/var/www/debian/index.htmlx>\
xx/var/www/debian/index.html.new
xroot#xmvx/var/www/debian/index.html.newx/var/www/debian/index.html
x
x#xReiniciamosxApache
xroot#x/etc/init.d/apache2xrestart
x
x#x¿Funciona?
xusuario$xfirefoxxlocalhostx&

xusuario$xfirefoxxdebian

Taller 6.9: Realice las anteriores configuraciones y compruebe que funcionan.

Escuchar en una xnica direccixn IP, pero mostrando diferentes objetos: ... en funcixn del alias del servidor que utiliza el cliente. El DNS tiene la posibilidad de asignar mxs de un nombre a una direccixn IP. A uno de estos nombres se le conoce como nombre canxnico y al resto como aliases. Aprovechxndonos de esta posibilidad, el servidor Apache puede servir un conjunto de objetos Web diferente en funcixn el alias que estx usando el cliente para reclamar los objetos al

servidor.‡ ‡Esto puede ser muy xtil para servir las pxginas en diferentes idiomas en funcixn del nombre que usamos para referenciar al servidor Web. De esta forma parecerx que estamos accediendo a un servidor ejecutado en otra mxquina diferente, cuando en realidad estamos utilizando el mismo. A esta posibilidad se le conoce como Name-based Virtual Hosting. Un ejemplo:

#xAxadimosxunxaliasxdelxhostxenxelxDNS.
xroot#xsedx\
x's/127.0.1.1\tdebian.localdomain\tdebian/127.0.1.1\tdebian.localdomain\tdebian\talias_debian/g'\
xx/etc/hostsx>x/etc/hosts.new
xroot#xmvx/etc/hosts.newx/etc/hosts
x
xusuario$xpingx-cx1xalias_debian
xPINGxdebian.localdomainx(127.0.1.1)x56(84)xbytesxofxdata.
x64xbytesxfromxdebian.localdomainx(127.0.1.1):xicmp_seq=1xttl=64xtime=0.060xms
x
x---xdebian.localdomainxpingxstatisticsx---
x1xpacketsxtransmitted,x1xreceived,x0%xpacketxloss,xtimex0ms
xrttxmin/avg/max/mdevx=x0.060/0.060/0.060/0.000xms
x
x#xAxadimosxelxhostxvirtual.
xroot#xcatx>>x/etc/apache2/apache2.confx<<xEOF
x
xNameVirtualHostxalias_debian
x<VirtualHostxalias_debian>
xxxDocumentRootx/var/www/alias_debian/
x</VirtualHost>
xEOF
x
x#xCreamosxelxnuevox"site".
xroot#xcpx-ravx/var/www/debian/x/var/www/alias_debian
x
x#xLoxcambiamosxunxpoco:
xroot#xsedx's/Funciona!/Funcionaxdexnuevo!/g'x/var/www/alias_debian/index.html\
xx>x/var/www/alias_debian/index.html.new
xroot#xmvx/var/www/alias_debian/index.html.newx/var/www/alias_debian/index.html
x
x#xReiniciamosxApache
xroot#x/etc/init.d/apache2xrestart
x
x#x¿Funciona?
xusuario$xfirefoxxalias_debianx&

Taller 6.10: Realice las anteriores configuraciones y compruebe que funcionan.

Squid

[next] [prev] [prev-tail] [tail] [up] 6.4 Squid

Squid (http://www.squid-cache.org/) es un proxy

Web§ ^{§Aunque puede funcionar como proxy FTP, Gopher, WAIS, DNS, ...} que se distribuye en cxdigo fuente (bajo la licencia GNU).

6.4.1 Instalacixn

root#xapt-getxinstallxsquid

Fedora Core Linux: x

root#xyumx-yxinstallxsquidxhttpd

Gentoo Linux: x

     root#xemergexsquid

Taller 6.11: Instale Squid.

6.4.2 Configuracixn Para configurar Squid necesitamos editar el fichero:

xx/etc/squid/squid.conf

Por defecto, Squid funciona como un proxy Web escuchando en el puerto 3128, pero no atiende a ningxn cliente.

Aunque es una configuracixn muy abierta, configure Squid para que atienda a cualquier cliente. Para ello debe comentar la lxnea que dice “httpxaccess deny all” y escribir otra que diga “httpxaccess allow all”. Esto es suficiente para nosotros y por tanto, no entraremos en detalle sobre el resto de opciones. Para mxs informacixn, el fichero de configuracixn estx debidamente autocomentado.

Taller 6.12: Modifique el fichero de configuracixn de Squid para que escuche a cualquier host.

6.4.3 Utilizacixn Para usar Squid es necesario modificar la configuracixn de nuestro navegador:

Mozilla Firefox 1.5 Preferencias -¿ General -¿ Configuracixn de Conexixn -¿ Configuracixn manual del proxy. Donde pone Proxy HTTP: poner la direccixn IP del host que sirve el proxy y el puerto 3128.

Mozilla Firefox 2.0 Herramientas -¿ Opciones -¿ Avanzado -¿ Red -¿ Configuracixn manual del proxy. Donde pone Proxy HTTP: poner la direccixn IP del host que sirve el proxy y el puerto 3128.

Microsoft Explorer Herramientas -¿ Opciones de Internet -¿ Conexiones -¿ Configuracixn de LAN -¿ Usar un servidor proxy para la LAN: poner la direccixn IP del host que sirve el proxy y el puerto 3128.

Taller 6.13: Tanto en el host huxsped (Windows) como en el host virtual (Debian), configure su navegador para utilizar el proxy Web que acaba de instalar. Compruebe que puede navegar. Finalmente deshaga dichos cambios en el navegador, pero no desinstale el proxy.

Anlisis de las interacciones Web

[next] [prev] [prev-tail] [tail] [up] 6.5 Anxlisis de las interacciones Web

En esta seccixn vamos a analizar el protocolo HTTP usando la aplicacixn Wireshark. Para saber cxmo utilizar esta utilidad vxase el Apxndice F.

6.5.1 Anxlisis de una interaccixn Web bxsica La interaccixn Web bxsica transfiere un objeto Web por primera vez desde un servidor Web hasta un cliente Web.

Taller 6.14:

Ejecute Wireshark (recuerde, como root) y colxquelo en modo de captura a travxs del interface eth0.

Ejecute un navegador Web (firefox, preferiblemente) y acceda al objeto Web (http://gaia.cs.umass.edu/ethereal-labs/HTTP-ethereal-file1.html).

Cuando el objeto Web haya sido mostrado por el navegador, detenga la captura de paquetes. Deberxa ver (al menos) dos paquetes HTTP, un GET y un OK.

Cuestixn 6.1: ¿Qux versixn del HTTP estx usando su navegador? ¿Y el servidor?

Cuestixn 6.2: ¿Qux lenguajes acepta el navegador?

Cuestixn 6.3: ¿Cuxl es la direccixn IP del host que ejecuta el navegador? ¿Cuxl es la direccixn IP del host que ejecuta el servidor?

Cuestixn 6.4: ¿Cuxl fue el cxdigo de estado retornado por el servidor?

Cuestixn 6.5: ¿Cuxnto tiempo ha pasado desde que el GET fue emitido hasta que el OK fue recibido?

Cuestixn 6.6: ¿Cuxndo fue por xltima vez modificado el objeto que se estx reclamando al servidor? ¿Estx este fichero constantemente siendo modificado?

Cuestixn 6.7: ¿Cuxntos bytes de datos ocupa el objeto Web?

Cuestixn 6.8: ¿Su navegador ha solicitado, ademxs, un objeto llamado favicon.ico? ¿Qux contiene dicho objeto?

6.5.2 Anxlisis de una interacixn Web condicional Los navegadores utilizan su cachx para evitar la descarga de objetos Web cacheados y que estxn frescos (que son iguales a los que tiene el servidor). Para esto se utiliza el GET condicional.

Taller 6.15:

Ejecute su navegador Web y asegxrese de que la cachx de xste estx vacxa (En Mozilla Firefox: Edit -¿ Preferences -¿ Advanced -¿ Network -¿ Cache: Clear Now).

Ejecute el packet sniffer.

Acceda  al  objeto  Web

(http://gaia.cs.umass.edu/ethereal-labs/HTTP-ethereal-file2.html). El browser deberxa mostrar un fichero HTML.

Re-acceda al mismo objeto (pusle el botxn de “Reload current page”).

Detenga la captura de paquetes y use el filtro http.

Cuestixn 6.9: ¿Qux cabecera HTTP identifica al GET condicional? ¿En qux GET (de los dos que hay en la lista de paquetes capturados) aparece dicha cabecera?

Cuestixn 6.10: ¿Qux diferecia existe entre las dos respuestas que ha enviado el servidor?

6.5.3 Anxlisis de una interaccixn Web que transmite un objeto “largo” El TCP del emisor fragmenta los mensajes largos. El receptor recibe un conjunto de paquetes, cada uno con un segmento diferente.

Taller 6.16:

Ejecute su navegador Web y borre su cachx.

Ejecute el packet sniffer.

Reclame  el  objeto

Web http://gaia.cs.umass.edu/ethereal-labs/HTTP-ethereal-file3.html que contiene la US Bill of Rights.

Detenga la captura de paquetes y use el filtro http.

Cuestixn 6.11: ¿Cuxntos mensajes de peticixn HTTP ha generado el navegador Web?

Cuestixn 6.12: ¿Cuxntos objetos Web se han transmitido? ¿Cuxntos segmentos TCP se han recibido?

6.5.4 Anxlisis de una interaccixn Web con objetos empotrados Cuando accedemos a un objeto Web que a su vez referencia a otros objetos Web, el cliente se encarga de ir reclamando cada uno de ellos.

Taller 6.17:

Ejecute su navegador Web y borre su cachx.

Ejecute el packet sniffer.

Reclame  el  objeto

Web http://gaia.cs.umass.edu/ethereal-labs/HTTP-ethereal-file4.html que contiene un corto fichero HTML con dos imxgenes.

Detenga la captura de paquetes y use el filtro http.

Cuestixn 6.13: ¿Cuxntos mensajes de peticixn HTTP ha generado el navegador Web?

Cuestixn 6.14: ¿Qux servidor Web ha servido cada imagen?

Cuestixn 6.15: ¿Cuxntos objetos Web se han transmitido?

Cuestixn 6.16: Especifique si los distintos objetos Web se han descargado en serie o en parelelo e indique por qux.

7 El correo electrnico

[next] [prev] [prev-tail] [tail] [up] Prxcticax7El correo electrxnico

En esta prxctica aprenderemos a:

Instalar un servidor de correo electrxnico.

Instalar un programa para leer y escribir correos electrxnicos.

Utilizar el protocolo SMTP tal y como lo usan los servidores de correo.

x7.1 The Internet mail infrastructure xx7.1.1 Servidores de e-mail, servidores SMTP, mail exchangers, mailers y MTA’s ??? xx7.1.2 Lectores de e-mails, escritores de e-mails y MUA’s xx7.1.3 Acerca de los clientes y de los servidores xx7.1.4 Las direcciones de correo xx7.1.5 Los mensajes de correo xx7.1.6 Los sobres (envelopes) xx7.1.7 Bounce messages xx7.1.8 Registros DNS, distancias y responsabilidades de los mailers x7.2 El SMTP (Simple Mail Transfer Protocol) xx7.2.1 Peticiones y respuestas xx7.2.2 Los verbos xx7.2.3 Cxdigos x7.3 Las cabeceras de los correos electrxnicos xx7.3.1 Formato xx7.3.2 Descripcixn de los principales campos x7.4 Utilidad de un servidor local x7.5 El correo electrxnico en redes privadas x7.6 Exim xx7.6.1 Instalacixn xx7.6.2 Configuracixn x7.7 Un MUA: Mutt xx7.7.1 Instalacixn xx7.7.2 Utilizacixn

The Internet mail infrastructure

[next] [prev] [prev-tail] [tail] [up] 7.1 The Internet mail infrastructure

7.1.1 Servidores de e-mail, servidores SMTP, mail exchangers, mailers y MTA’s ??? Un servidor de e-mail, tambixn llamado servidor SMTP, mail exchanger, mailer y MTA (Mail Transfer Agent) es un proceso servidor que recibe e-mails debidamente formateados utilizando el Simple Mail Transfer Protocol (SMTP) y los retransmite (si es preciso) a otros servidores de e-mail. Utilizaremos en adelante sxlo el txrmino mailer para referirnos a un servidor SMTP.

7.1.2 Lectores de e-mails, escritores de e-mails y MUA’s Aunque es posible utilizar Telnet (hablando en SMTP con el mailer) para leer y escribir correos directamente, es mucho mxs cxmodo utilizar un programa que simplifique dicho proceso. Estos programas generalmente se llaman MUAs (Mail User Agents). Ejemplos mxs que conocidos son Microsoft Outlook (http://www.microsoft.com/spain/office/products/outlook/default.mspx), Mozilla Thunderbird (http://www.mozilla-europe.org/es/products/thunderbird/) y Novell Evolution (http://www.gnome.org/projects/evolution/).

Un MUA no tiene que ser necesariamente un programa que se instala en nuestra computadora. En los xltimos tiempos se han puesto de moda los MUAs vxa Web (tambixn llamados “Web Mail”) (como Hotmail (http://www.hotmail.com), Yahoo! Mail (http://mail.yahoo.com) y Gmail (http://gmail.google.com/), que a travxs de una pxquina Web permiten enviar y recibir e-mails usando simplemente nuestro navegador Web favorito.

7.1.3 Acerca de los clientes y de los servidores Los MUAs no son los xnicos clientes del sistema de transmisixn de e-mails propiamente dicho. De hecho, los mailers funcionan como clientes cuando los e-mails que reciben no van dirigidos a una cuenta de usuario del propio host donde se ejecuta el mailer.

7.1.4 Las direcciones de correo Una direccixn de correo es cualquier cadena que contiene, al menos, un sxmbolo @. Ejemplo:

vruiz@ual.es

En este ejemplo, la cadena ual.es se conoce como dominio de correo. A la cadena vruiz se le conoce como box part.

Otro aspecto importante a tener en cuenta es que las direcciones de correo son interpretadas de la misma forma en mayxsculas y en minxsculas. Por tanto:

Vruiz@Ual.Es
xvruiz@ual.es
xVRUIZ@UAL.ES

son la misma direccixn.

7.1.5 Los mensajes de correo Un mensaje es una secuencia de lxneas, donde una lxnea es una cadena de cero o mxs caracteres imprimibles ASCII de 7 bits (vxase la tabla de la Seccixn I) terminada en \015\012 (en DOS y Windows) o en \012 (en Unix). Los caracteres imprimibles ASCII de 7 bits son los que aparecen en la tabla ASCII entre las posiciones 33 y 127, ambas incluxdas.

7.1.6 Los sobres (envelopes) El remitente y el destinatario de un correo electrxnico deben estar identificados de forma xnica mediante direcciones de correo. A un par de direcciones remitente/destinatario es a lo que se conoce como sobre. Tambixn es posible que un sobre contenga varios destinatarios o ningxn remitente.

7.1.7 Bounce messages Es responsabilidad de los mailers entregar correctamente los correos electrxnicos una vez que estos han sido aceptados. Sin embargo, cuando por alguna circunstancia esto no es posible (porque por ejemplo, el destinatario no existe o el mailer destino estx apagado) algunos mailers envxan correos de aviso al remitente indicando el problema. Estos mensajes se llaman bounce messages.

7.1.8 Registros DNS, distancias y responsabilidades de los mailers Los mailers consultan al DNS cuando tienen que reenviar hacia otro mailer un correo electrxnico. Por ejemplo, con:

usuario$x/usr/bin/hostx-txMXxual.es
xual.esxmailxisxhandledxbyx10xmail.rediris.es.
xual.esxmailxisxhandledxbyx2xsmtp.ual.es.

estamos preguntando al DNS qux mailers son los responsables para el dominio

ual.es.∗ ^{∗Recuerde que el resultado de esta consulta no depende del host en que se realiza.} Como podemos ver, existen dos hosts responsables del intercambio del correo electrxnico en la Universidad de Almerxa; (mail.rediris.es y smpt.ual.es). El primero (mail.rediris.es) estx a una distancia (en

hops†  ^{†Pasos por un router.}  )

de 10 de la red que tiene como dominio ual.es, mientras que el segundo estx a una distancia de 2. Esto significa que cualquier mailer (dentro o fuera de la Universidad) elegirx primero a smtp.ual.es para entregar un correo electrxnico con este dominio. Cuando esta conexixn no sea posible (porque smpt.ual.es ha caxdo, por ejemplo) se utilizarx mail.rediris.es. Si ninguno de estos hosts estx disponible, el mailer generalmente envxa un bounce message al remitente e intentarx la conexixn SMTP durante los prxximos dxas (generalmente 6). Si finalmente el mensaje no es entregado se enviarx otro bounce message al remitente indicando este evento y el mailer destruye el mensaje.

Taller 7.1: Encuentre los mailers para el dominio ya.com, o cualquier otro dominio de correo que conozca. Haga un ping a dichos mailers.

El SMTP (Simple Mail Transfer Protocol)

[next] [prev] [prev-tail] [tail] [up]

7.2 El SMTP (Simple Mail Transfer Protocol) El sistema de transferencia de correos electrxnicos utiliza el modelo cliente/servidor y un protocolo, el SMTP (RFC 821, RFC 1123, RFC 1425, RFC 1651, RFC 1869 y RFC 2821) para comunicarse.

7.2.1 Peticiones y respuestas En una conversacixn SMTP, un MUA o un mailer (cliente) envxa un conjunto de peticiones (en inglxs, requests) a un mailer (servidor) y xste le contesta con respuestas (responses). A grandes rasgos el proceso peticixn-respuesta es asx:

Cuando un cliente se conecta a un servidor, xste envxa una respuesta que indica si acepta la conexixn o la rechaza (temporal o permanentemente). Esta respuesta inicial se conoce como saludo (greeting).

Si el servidor acepta la conexixn, el cliente envxa cero o mxs peticiones al servidor. En general el cliente no debe enviar una nueva peticixn al servidor si la anterior respuesta no ha sido recibida.

7.2.2 Los verbos El formato de una peticixn es siempre una cadena ASCII imprimible:

xx<verb>x[<parameter>]\015\012

donde <verb> puede ser: HELO: Abreviatura de “hello”. Va seguido de un parxmetro que indica al servidor, el

nombre del cliente. Ejemplo:

HELOxgogh.ace.ual.es

RSET: Abreviatura de “reset”. Se utiliza para borrar el sobre que se acaba de enviar al servidor. Esto generalmente se utiliza cuando se van a enviar varios correos electrxnicos desde un mismo cliente a un mismo servidor durante una xnica conexixn SMTP (que en este caso se llama conexixn SMTP persistente).

NOOP: Abreviatura de “no operation”. Se utiliza para testear el estado de la conexixn sin enviar informacixn alguna.

MAIL: Debe ir seguido de la cadena “FROM:” y de la direccixn de correo del remitente.

RCPT: Abreviatura de “recipient”. Debe ir seguido de la cadena “TO:” y de la direccixn de correo del destinatario. Cuando hay varios destinatarios se envxan varios

“RCPT␣TO:”.

DATA: No tiene argumentos y se utiliza para indicar al servidor que todas las lxneas que van a continuacixn forman el cuerpo del mensaje del correo electrxnico. Este cuerpo acaba en una lxnea que sxlo contiene un punto “.”.

QUIT: Solicita al servidor el cierre de la conexixn.

Vxase el RFC correspondiente para conocer el resto de verbos.

7.2.3 Cxdigos El formato de una respuesta es siempre una secuencia de cadenas ASCII imprimibles:

<code>x<string>\015\012

donde <code> es un cxdigo de error que indica el carxcter de la respuesta. Por ejemplo, el cxdigo 250 indica que la peticixn ha sido aceptada. Vxase el RFC correspondiente para conocer el resto de cxdigos.

Las cabeceras de los correos electrnicos

[next] [prev] [prev-tail] [tail] [up]

7.3 Las cabeceras de los correos electrxnicos En esta seccixn vamos a analizar el formato de las cabeceras que se transmiten como parte de los correos electrxnicos. Dichas cabeceras son utilizadas por los mailers para personalizar el envxo de los e-mails. Nxtese que en ningxn caso esta informacixn debe ser confundida con la que se transfiere en una interaccixn SMTP. Toda esta informacixn es creada bien por el remitente como parte del cuerpo del mensaje, bien por el mailer durante el procesamiento y la transmisixn del e-mail.

7.3.1 Formato Una cabecera de correo electrxnico es una secuencia de lxneas no vacxas que concatenan una lista de campos. A su vez, un campo es una secuencia de una o mxs lxneas no vacxas que contienen un nombre de campo y un valor. Un ejemplo:

Received:x(qmail-queuexinvokedxbyxuidx666);
xxx30xJulx1996x11:54:54x-0000
xFrom:x"D.xJ.xBernstein"x<djb@silverton.berkeley.edu>
xTo:xfred@silverton.berkeley.edu
xDate:x30xJulx1996x11:54:54x-0000
xMessage-ID:x<19951223192543.3034.qmail@silverton.berkeley.edu>
xReply-to:x<djbernstein@gmail.com>
xSubject:xGo,xBears!

Como podemos ver el primer campo de nombre Received: tiene un valor que ocupa dos lxneas. Ademxs, la cabecera finaliza siempre en una lxnea vacxa.

7.3.2 Descripcixn de los principales campos La lista de campos que se muestra a continuacixn no es exhaustiva. Para una lista mucho mxs completa, vxase la documentacixn asociada al mailer Qmail (http://cr.yp.to/immhf/index.html) y/o los RFC correspondientes.

   El campo Received:

Cada mailer inserta un campo Received: cuando procesa un mensaje entrante para indicar quixn se lo envxa y cuxndo. De esta manera podemos averiguar qux saltos ha dado (por qux mailers ha pasado) el e-mail hasta que ha llegado hasta nosotros.

El campo Date: Es la fecha en la que el primer MTA crex el e-mail. La diferencia de tiempos entre el que especifica Received: y Date: es el tiempo que ha tardado el e-mail en transferirse desde el mailer origen hasta el destino.

El campo To: Especifica la lista de destinatarios. Cada destinatario es separado del siguiente mediante una “,” (una coma). Ejemplo:

To:xThexBossx<God@heaven.af.mil>,
xxxxx<angels@heaven.af.mil>,
xxxxxWiltx.x(thexxStilt)xChamberlain@NBA.US

En este ejemplo hay tres destinatarios.

El campo Cc: Cc significa carbon copy (copia al carbxn) y se utiliza para especificar una lista de destinatarios de “segundo orden”. De esta manera, los que reciben el e-mail saben si el correo estx directamente dirigidos a ellos o estxn recibiendo simplemente una copia.

El campo Bcc: Bcc significa bind carbon copy (copia al carbxn oculta) y se utiliza para especificar una lista de destinatarios del e-mail que no se van a identificar entre sx. Para hacer esto, el MUA elimina el campo Bcc: antes de enviar el mensaje.

   El campo Subject:

Introduce una cadena explicatoria del contenido del e-mail. Este campo lo rellena el remitente del e-mail y suele ser la lxnea que sigue al verbo DATA en la transaccixn SMTP.

   El campo Reply-to:

Se utiliza para especificar una direccixn de remitente distinta a la que se especificx con el verbo MAIL en la interaccixn SMTP. Esto es xtil cuando el remitente tiene una cuenta en (acceso a) diferentes mailers y quiere recibir las respuestas (replies) siempre a la direccixn de correo indicada por Reply-to:.

   El campo Message-ID:

Introduce una cadena que identifica al e-mail. Para intentar conseguir una etiqueta xnica se utiliza generalmente un nxmero de serie seguido del dominio del mailer que estx procesando el e-mail.

   Los campos Resent-From:, Resent-To: y Resent-Subject:

Estos campos son creados cuando reenviamos un e-mail. Los campos From:, To: y

Subject: son copiados a Resent-From:, Resent-To: y Resent-Subject:,

respectivamente. De esta manera quedan libres para obtener otros valores cuando se reenvxa el e-mail.

   El campo Return-Path:

Indica la lista de mailers a los que puede enviarse un bounce message cuando aparece algxn problema con la entrega del e-mail.

Utilidad de un servidor local

[next] [prev] [prev-tail] [tail] [up] 7.4 Utilidad de un servidor local

En esta prxctica vamos a aprender a instalar un servidor de correo electrxnico. Algunas de las ventajas de que nuestro mail exchanger resida en el host local son:

No es necesario estar permanentemente conectado a Internet para enviar e-mails a usuarios remotos. El sistema de correo se encarga de encolar los mensajes salientes y de chequear perixdicamente si la conexixn se ha restablecido.

Aunque no tengamos nunca conexixn a Internet, los distintos usuarios de nuestro host (recuxrdese que Linux es un sistema operativo multiusuario) podrxn escribirse entre sx.

El correo electrnico en redes privadas

[next] [prev] [prev-tail] [tail] [up]

7.5 El correo electrxnico en redes privadas Como cualquier otro servicio que se ofrece dentro de una red privada tenemos que tener en cuenta que, a menos que configuremos nuestro NAT redireccionando los puertos correspondientes, el servicio sxlo va a estar disponible para los hosts de la red privada.

Puesto que el servicio de correo electrxnico escucha de forma estxndar en el puerto 25, simplemente deberxamos redireccionar este puerto desde el NAT hacia el host y el puerto (probablemente, tambixn el 25) donde el mailer estx escuchando.

Exim

[next] [prev] [prev-tail] [tail] [up] 7.6 Exim

Exim (http://www.exim.org) es un potente mailer que (a diferencia de otros como Qmail (http://cr.yp.to/qmail.html), puede ser distribuido mediante cxdigo compilado. Veremos ademxs que su configuracixn es bastante simple.

7.6.1 Instalacixn

root#xapt-getxinstallxexim4

Fedora Core: x

root#xyumxinstallxexim

Gentoo: x

root#xemergexexim

7.6.2 Configuracixn Para configurar un servidor de correo debemos tener en cuenta varios aspectos:

Si vamos a aceptar correo entrante para usuarios del host que ejecuta el mailer. Normalmente la respuesta serx afirmativa.

Si estamos en una red privada y si nuestro router-NAT tiene asignada una direccixn IP dinxmica. En este caso deberxamos configurar el mailer para que xl no entrege directamente el correo saliente porque es probable que nos consideren como un spammer (y no nos hagan ni caso). En este caso no queda mxs remedio que usar otro mailer (probablemente el del ISP) que haga la entrega por nosotros. A este mailer se le suele llamar smarthost. Evidentemente deberemos conocer su direccixn IP o su nombre.

El dominio que vamos a usar para conocer si el correo entrante va dirigido a un usuario local. Este dominio deberxa coincidir con el que figura en el fichero /etc/resolv.conf. Es importante utilizar un dominio real si vamos a mandar correo externos porque muchos servidores SMTP comprueban que el dominio

del remitente exista.‡ ‡En dicho dominio no deberxa aparecer el nombre del host, sxlo el dominio (“ual.es”, por ejemplo).

Los mailers que tienen permiso para entregarnos correo entrante. En principio, todos.

Otros dominios que los destinatarios quieren usar para recibir el correo. Por supuesto el DNS tiene que estar al tanto de esto.

Si vamos a aceptar correo entrante para usuarios que no tienen cuenta en el host que ejecuta el mailer. En otras palabras, si el mailer que estamos instalando va a ser un smarthost.

El formato de los Mail Boxes. Normalmente usaremos el formato “mbox”, que es el estxndar. En este formato todos los correos aparecen concatenados en un xnico fichero ASCII.

root#xdpkg-reconfigurexexim4-config
x#xElxinstaladorxsolicitarxxtodaxlaxinformacixnxdenecesariaxconxuna
x#xseriexdexpreguntas.

Fedora Core: Es necesario configurar el servidor modificando los ficheros correspondientes. Acceder a la Web de Exim (http://www.exim.org) para mxs informacixn.

Gentoo: Como la mayorxa de las configuraciones en Gentoo, hay que modificar los ficheros de configuracixn correspondientes. En http://gentoo-wiki.com/Mail Ṡerver ḃased ȯn Ėxim ȧnd Ċourier-imap encontrarx una buena documentacixn.

Taller 7.2: Instale y configure Exim.

Un MUA: Mutt

[next] [prev] [prev-tail] [tail] [up] 7.7 Un MUA: Mutt

Para no tener que ir leyendo “a pelo” los mail-boxes y usando el SMTP, un MUA como Mutt (http://www.mutt.org) nos va a venir de perlas.

7.7.1 Instalacixn

root#xapt-getxinstallxmutt

Fedora Core: x

root#xyumxinstallxmutt

Gentoo: x

     root#xemergexmutt

Taller 7.3: Instale Mutt.

7.7.2 Utilizacixn Mutt es un MUA que funciona en una consola de texto, pero no por ello deja de ser muy funcional. Veamos su utilizacixn bxsica:

Enviar un correo: La forma mxs simple de enviar un correo es:

#xEnxestexejemploxnosxenviamosxunxcorreo
xusuario$xmuttxusuario@localhost

Mutt preguntarx si deseamos modificar el destinatario. Pulsar <Enter> si no es asx. Mutt preguntarx por un subject. Pulsar <Enter> cuando lo hayamos especificado. Mutt usarx el editor especificado en la variable de entorno EDITOR para crear el cuerpo del mensaje (o en su ausencia, un editor que corre en la consola que ya estx instalado, tal como joe, vi, nano, vim, etc.). Cambiar este comportamiento con:

usuario$xexportxEDITOR=/path/al/editor

Cuando hayamos salvado el cuerpo del mensaje (recuxrdese que Mutt utiliza un editor de ficheros ASCII externo) y hayamos cerrado el editor, Mutt mostrarx un menu para enviar el mensaje (pulsar <y>), abortar (<q>), cambiar el destinatario (<t>), axadir un CC (<c>), adjuntar un archivo (<a>), cambiar el subject (<d>) o ayuda (<?>). Normalmente pulsaremos

<y>.

Una de las ventajas de Mutt es que puede crear el cuerpo del mensaje usando la redireccixn de la entrada estxndar. Asx, es muy sencillo enviar a alguien un fichero:

usuario$xmuttxusuario@hostx<xfichero.txt

Leer un correo: Basta con llamar a Mutt:

usuario$xmutt

Mutt mostrarx el Mail Box con los mensajes antiguos que no hayan sido borrados y los nuevos. Nos moveremos con el cursor hasta el correo que queremos leer y pulsamos <Enter>.

Una nota. Exim almacena el correo entrante en la cola correspondiente (/var/spool/mail/usuario) y de ahx lo lee Mutt. Cuando es lexdo por Mutt (no todavxa por nosotros), Mutt tratarx de almacenarlo en nuestro home, concretamente en el fichero

mbox.§ §Aunque esto depende de si el mailer ya lo ha hecho o no. Mutt pude procesar cualquier Mail Box a travxs de la opcixn -f. Ejemplo:

#xReleyendoxlosxmensajesxdexcorreoxalmacenadosxenxnuestroxMailxBox:
xusuario$xmuttx-fx$HOME/mbox

Taller 7.4: Envxese un e-mail al host local. Envxese un fichero a travxs del e-mail al host local. Repita ambos procesos usando una direccixn de correo en otro host donde tenga cuenta de correo (Hotmail, Gmail, etc.). Compruebe que las entregas han sido correctas.

Taller 7.5: Para comprender cxmo funciona el SMTP vamos a enviarnos un correo anxnimo. Este correo se distingue porque cuando es recibido, entre la informacixn que acompaxa al cuerpo del mensaje (el correo en sx mismo) no figura la direccixn de correo electrxnico real de quien lo envxa. Esto se puede hacer porque los mailers cuando aceptan enviar un correo no chequean que el remitente del correo existe.

Nos vamos a enviar un correo anxnimo a nosotros mismos en dos casos: (1) utilizando el mailer que acabamos de instalar en nuestro host y (2) utilizando el mailer del dominio en el que estamos.

Usando el mailer local: Para enviar el correo vamos usar el programa Telnet y nos conectaremos al puerto 25, donde escuchan los servidores de correo:

Ejecutar:

usuario$xtelnet

y pulsar <Return>. Aparecerx un mensaje de bienvenida, otro indicando cuxl es la secuencia de escape que se utiliza para cerrar de forma inesperada una conexixn (como la que vamos a establecer) y finalmente un prompt (una cadena indicando que el interprete de comandos de Telnet estx esperando a que le introduzcamos un comando).

Escribir:

openxlocalhostx25

y esperar a recibir el mensaje de bienvenida por parte del servidor de correo. Dicho mensaje comenzarx siempre por 220.

Una vez que lo veamos, escribiremos textualmente (excepto donde pone nuestro_login_real que escribiremos nuestro login real en

localhost):

HELOxanonimo
xMAILxFROM:x<anonimo@ya.com>
xRCPTxTO:x<nuestro_login_real@localhost>
xDATA
xSUBJECT:xEstexesxunxcorreoxconxunxremitentexfalso
x
xHola!
x<anonimo@ya.com>xnoxesxunxusuarioxrealxdexya.com.
x.
xQUIT

Como puede verse existe una lxnea compuesta sxlo por un punto. El mailer la usa para conocer dxnde acaba el cuerpo del mensaje enviado.

Compruebe que el correo le ha sido entregado utilizando el MUA que mxs le guste.

Usando el mailer del ISP: x

Nuestro primer paso consiste en averiguar el servidor de correo electrxnico que es proporcionado por el ISP, es decir, el nombre de aquel host de Internet que se encargarxa de enviar nuestros correos electrxnicos cuando xstos son escritos en nuestro host. Para encontrar el mailer de la Universidad de Almerxa escribiremos:

usuario$xnslookupx-type=MXxual.es

Entre otros mensajes que ahora no nos interesan aparecerx uno que dice mail exchanger igual a smtp.ual.es. Bien, este es el nombre del host que nos dejarx conectarnos y enviar nuestro correo sin remitente real. Pudiera ocurrir que existen mxs de un mail exchanger. En este caso podremos utilizar cualquiera de ellos. El nxmero entero que aparece junto a cada nombre indica la distancia en hops (esto puede comprobarse utilizando el programa traceroute si es que el host destino contesta). Cuanto menor es el nxmero, mayor es la prioridad.

A continuacixn conectarse a smtp.ual.es al puerto 25 usando Telnet:

telnetxsmtp.ual.esx25

Introducir (ojo, el destinatario cambia respecto del ejemplo anterior):

HELOxanonimo
xMAILxFROM:x<anonimo@ya.com>
xRCPTxTO:x<nuestro_login_real@ual.es>
xDATA
xSUBJECT:xEstexesxunxcorreoxconxunxremitentexfalso
x
xHola!
x<anonimo@ya.com>xnoxesxunxusuarioxrealxdexya.com.
x.
xQUIT

Cuestixn 7.1: ¿Qux protocolo de transporte (TCP o UDP) utiliza el SMTP? ¿Coindice con el protocolo de transporte del programa Telnet? Explxquese.

Cuestixn 7.2: ¿Cxmo podemos conocer qux mailers ha atravesado un correo electrxnico? Envxe un correo desde su host virtual usando mutt a una direccixn suya externa (en Hotmail, por ejemplo). ¿Cuxntos mailers estxn involucrados? ¿Cuxnto tiempo ha estado viajando el correo? Si no es posible acceder a la cabecera de los correos electrxnicos en su servidor de correo, haga un reenvxo (forward) del correo desde dicho servidor hasta otro donde sx tenga acceso a dicha cabecera (almanzora.ual.es, por ejemplo, donde puede usar el programa

mailx).

Cuestixn 7.3: Envxe un reply desde un servidor de correo externo hasta su cuenta en el host virtual. ¿A recibido el correo? Explique por qux ocurre esto.

8 DNS (Domain Name Service)

[next] [prev] [prev-tail] [tail] [up] Prxcticax8DNS (Domain Name Service)

El DNS es una de las aplicaciones fundamentales de Internet, con una funcixn primordial: la de traducir los nombres de los hosts en direcciones IP. El servicio de nombres de dominio es una gigantesca base de datos distribuida a nivel mundial que funciona sin pausa, estx constantemente actualizxndose y resuelve las consultas en tiempo real (¿qux mxs se puede pedir?).

El DNS se basa en la arquitectura cliente-servidor. En su consulta mxs frecuente, los clientes piden resoluciones de nombres de dominio y los servidores las contestan indicando sus direcciones IP. La comunicacixn entre ambos se realiza a travxs del UDP.

En esta sesixn vamos a aprender a instalar un servidor DNS y a hacer uso del mismo. Esto genera varias ventajas. La primera y la mxs interesante es que las consultas son resueltas utilizando un nodo local (en nuestra sub-red), con lo que el tiempo de acceso se minimiza cuando este nodo almacena en su cachx una resolucixn. La segunda es que descargamos de trabajo al resto de servidores de la jerarquxa, cosa que algunos administradores nos agradecerxn. Tambixn aprenderemos a realizar consultas de diversa xndole con el objetivo de aprender qux posibilidades ofrece el sistema DNS.

x8.1 Los nombres de dominio x8.2 Dominios y subdominios x8.3 La jerarquxa de dominios x8.4 El proceso de resolucixn x8.5 Instalacixn de un servidor DNS x8.6 Configuracixn del servidor DNS xx8.6.1 Configuracixn como servidor cachx x8.7 Configuracixn del cliente x8.8 Ejemplos de consultas xx8.8.1 ¿Cuxles son mis servidores DNS? xx8.8.2 ¿Cuxl es la direccixn IP del host ...? xx8.8.3 ¿Cuxles son los servidores de nombres del dominio ...? xx8.8.4 ¿Cxmo interrogamos a otro servidor DNS? xx8.8.5 Averiguando la jerarquxa de servidores DNS xx8.8.6 Resolucixn inversa x8.9 Cuidado con el DNS x8.10 DNS + DHCP

Los nombres de dominio

[next] [prev] [prev-tail] [tail] [up] 8.1 Los nombres de dominio Un dominio es, bxsicamente hablando, una organizacixn cualquiera dentro de Internet que desea ser referenciada mediante un nombre de dominio. Por ejemplo, la Universidad de Almerxa es una organizacixn que posee una serie de computadoras llamadas de la forma “*.ual.es”. “ual.es” es el nombre del dominio de la Universidad de Almerxa. En la prxctica para mucha gente es demasiado largo decir “nombre de dominio” y generalmente se dice simplemente “dominio”.

Dominios y subdominios

[next] [prev] [prev-tail] [tail] [up] 8.2 Dominios y subdominios

Es frecuente que un nombre de dominio conste de varios subdominios, normalmente separados por un punto. Por ejemplo, el dominio “ual.es” es en realidad un subdominio del dominio “es”.

Este hecho genera una jerarquxa de dominios en la que cualquier nodo pxblico de Internet puede ser localizado. Por ejemplo, el nodo filabres.ual.es es un host de la Universidad de Almerxa.

La jerarqua de dominios

[next] [prev] [prev-tail] [tail] [up] 8.3 La jerarquxa de dominios

En cada dominio normalmente se instala un servidor de nombres de dominio, tambixn llamado servidor DNS. Dicho servidor se encarga de mantener la base de datos de registros DNS para ese dominio. Por ejemplo, en la Universidad de Almerxa hay un servidor DNS que conoce todas las resoluciones de las direcciones IP para todos los hosts con nombres de la Universidad. En concreto, filabres.ual.es (150.214.156.2) es el servidor DNS del dominio ual.es. Ademxs, filabres.ual.es es el servidor DNS primario para todos los hosts de la Universidad de Almerxa (mxs tarde veremos qux significa esto).

El proceso de resolucin

[next] [prev] [prev-tail] [tail] [up]

8.4 El proceso de resolucixn Cuando un servidor DNS no conoce una resolucixn, normalmente utiliza otro servidor DNS situado inmediatamente superior en la jerarquxa de dominios para intentar resolverla. Esta polxtica de consultas recursivas finalmente encuentra un servidor DNS que sx conoce la resolucixn. Entonces el registro DNS solicitado viaja desde dicho servidor DNS deshaciendo el camino hasta el servidor DNS al que inicialmente realizamos la consulta. En este proceso, cada servidor DNS actualiza su cachx con esta informacixn por un determinado periodo de tiempo.

Por ejemplo, cuando queremos acceder a www.nasa.gov desde un host de la Universidad de Almerxa, dicho host

(generalmente∗ ∗En realidad puede consultar a qualquier otro que se deje consultar, pero lo mxs lxgico es usar filabres. ) pregunta a filabres.ual.es. Si filabres no almacena en su cachx la resolucixn, pregunta al siguiente servidor DNS en la jerarquxa que podrxa ser un nodo del CICA (Centro Informxtico Cientxfico de Andalucxa). Si xste fallara, preguntarxa a un servidor de RedIRIS (la red acadxmica y de investigacixn nacional), y asx sucesivamente hasta llegar a un servidor DNS raxz. Si xste falla, entonces la consulta comienza a descender por la jerarquxa de servidores DNS hasta llegar al responsable del dominio nasa.gov que necesariamente debe conocer la resolucixn.

Existe una versixn diferente de este algoritmo recursivo que se realiza una consulta iterativa. La diferencia radica en que cuando un servidor DNS falla en lugar de hacer xl la consulta le indica al cliente a qux otro servidor DNS puede preguntar. Este proceso, sin embargo, no actualiza las cachxs de los servidores.

Instalacin de un servidor DNS

[next] [prev] [prev-tail] [tail] [up] 8.5 Instalacixn de un servidor DNS

Para convertir un host con Linux en un servidor DNS basta con instalar el programa BIND (Berkeley Internet Name Domain) (http://www.isc.org/products/BIND):

root#xapt-getxinstallxbind9xbind9-docxdnsutils

Fedora Core Linux: x

root#xyumxinstallxbindxbind-utilsxcaching-nameserverxsystem-config-bind

Gentoo Linux: x

root#xemergexbindxbind-utils

Configuracin del servidor DNS

[next] [prev] [prev-tail] [tail] [up]

8.6 Configuracixn del servidor DNS El servidor puede configurarse para ofrecer servicio de tres formas diferentes:

Servidor primario: Si almacena los registros de resolucixn para los hosts del dominio para el cual dicho servidor DNS es servidor primario. Los servidores DNS primarios tambixn se denominan servidores DNS autorizados.

Servidor secundario: Si hace una copia de los registros de otro servidor primario.

Servidor sxlo cachx: Cuando no almacena ningxn registro, excepto los adquiridos en las consultas.

La primera configuracixn es la que utilizarxa el administrador de una nueva red que desea que sus hosts tengan nombres de dominio asignados. En dicha configuracixn se generarxan los registros de resolucixn para cada uno de estos hosts y el servidor DNS del ISP deberxa tener en cuenta el servidor DNS primario instalado ya que pasa a ser el servidor DNS autorizado para el dominio que se ha creado. Por desgracia, esto xltimo es normalmente difxcil llevarlo a la prxctica por motivos de

seguridad† †Un usuario malicioso puede inventarse un dominio con el objetivo de introducir “ruido” en el DNS, y hacer otras cosas peores como veremos mxs tarde. por lo que en esta ocasixn no vamos a instalar un servidor DNS primario. Sin embargo, bastarxa con modificar el fichero de configuracixn correspondiente y construir los registros DNS utilizando alguna herramienta como system-config-bind de Red Hat Linux.

La segunda configuracixn sirve para aumentar la fiabilidad del DNS ya que permite replicar los registros de resolucixn. Asx, si el primario falla, el otro podrxa estar disponible. Por ejemplo, en la Universidad de Almerxa hay un servidor DNS primario

(filabres.ual.es, 150.214.156.2) y otro secundario (150.214.35.10). Instalar un

servidor DNS secundario plantea los mismos problemas de seguridad que instalar uno primario y ademxs, una replicacixn sin control constituye un buen ataque por denegacixn de servicio. Por estos motivos, desistiremos de realizar dicha opcixn.

Finalmente, la tercera y xltima configuracixn, en la que instalamos un servidor DNS que funciona en realidad como un proxy DNS, sx que es posible en cualquier situacixn y tiene sentido si queremos reducir el trxfico a travxs del gateway de la red y el tiempo de resolucixn para las mxquinas a las que servimos. Por suerte, esta configuracixn es la que por defecto se instala con BIND.

8.6.1 Configuracixn como servidor cachx Como hemos indicado anteriormente, en principio no es necesario hacer ninguna modificacixn en el fichero named.conf para conseguir que el servidor DNS funcione como una proxy DNS. Sin embargo, sx que vamos a hacer un pequexo cambio para que BIND utilice los servidores DNS mxs prxximos cuando la cachx

falle.‡ ‡De lo contrario las resoluciones funcionan porque se consultan directamente a los servidores de nombres raxz aunque con el consiguiente aumento de la latencia. Para evitar esto hay que modificar el fichero named.conf insertando el cxdigo:

forwardxfirst;
xforwardersx{
xxx150.214.156.2;
xxx150.214.35.10;
x};

en su seccixn options. Veamos exactamente qux hacer en cada distribucixn:

Debian Linux: La instalacixn de bind crea el fichero /etc/bind/named.conf y

     otros dos ficheros asociados /etc/bind/named.conf.local y

/etc/bind/named.conf.options. El cxdigo anterior debe insertarse en este xltimo fichero.

Fedora Core Linux: El fichero que configura el servidor es /etc/named.conf. Para configurarlo como un servidor DNS cache ejecutar:

root#xsystem-config-bindx#xSalirxsinxhacerxningunaxmodificacixn

A continuacixn insertar el cxdigo anterior en el fichero.

Gentoo Linux: La instalacixn de BIND crea el fichero /etc/bind/named.conf para que funcione como un DNS cachx. Simplemente insertaremos el cxdigo anterior en este fichero.

Finalmente hay que modificar el fichero /etc/resolv.conf indicando que ahora es localhost el servidor DNS.

Taller 8.1: Instale BIND y configurelo como servidor DNS cachx.

Configuracin del cliente

[next] [prev] [prev-tail] [tail] [up] 8.7 Configuracixn del cliente

La xnica opcixn de configuracixn que permiten los clientes es la especificacixn del (o los) servidor(es) DNS. En Linux esta informacixn estx declarada en el fichero:

/etc/resolv.conf

Este es un fichero ASCII y puede ser editado como administrador. Taller 8.2: Configure el DNS para que las aplicaciones de red hagan uso del servidor

DNS que acaba de instalar.

Ejemplos de consultas

[next] [prev] [prev-tail] [tail] [up] 8.8 Ejemplos de consultas

8.8.1 ¿Cuxles son mis servidores DNS? A la hora de determinar el servidor DNS que estamos utilizando existen dos alternativas:

Acceder a esta informacixn en los ficheros de configuracixn correspondientes. Por ejemplo, en Linux hay que leer el fichero

/etc/resolv.conf

Evidentemente, esta opcixn sxlo funciona bajo Linux.

Utilizar programas para chequear el funcionamiento del DNS como pueden ser nslookup y dig. nslookup funciona tanto desde la lxnea de comandos como de forma interactiva. dig sxlo lo hace desde la lxnea de comandos. Ademxs, txngase en cuenta que normalmente no se pregunta por el servidor DNS de un host, sino por el servidor DNS de un dominio (al que pertenece el host) ya que todos los hosts del mismo dominio deberxan utilizar los mismos servidores DNS locales (mxs que nada, por eficiencia). Finalmente indicar que el resultado de la consulta no depende del host, ni de que xste pertenezca al dominio por el que estamos preguntando. El resultado sxlo depende del dominio por el que preguntamos. Veamos algunos ejemplos:

#xPreguntamosxaxnuestroxservidorxDNSxporxdefectoxporxelxdominiox"ual.es"
xusuario$xdigxual.es
x
x;x<<>>xDiGx9.2.4x<<>>xual.es
x;;xglobalxoptions:xxprintcmd
x;;xGotxanswer:
x;;x->>HEADER<<-xopcode:xQUERY,xstatus:xNOERROR,xid:x65305
x;;xflags:xqrxaaxrdxra;xQUERY:x1,xANSWER:x0,xAUTHORITY:x1,xADDITIONAL:x0
x
x;;xQUESTIONxSECTION:
x;ual.es.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxINxxxxxxA
x
x;;xAUTHORITYxSECTION:
xual.es.xxxxxxxxxxxxxxxxx172800xxINxxxxxxSOAxxxxxfilabres.ual.es.\
xpostmaster.filabres.ual.es.x2006111502x16400x7200x2592000x172800
x
x;;xQueryxtime:x0xmsec
x;;xSERVER:x150.214.156.2#53(150.214.156.2)
x;;xWHEN:xThuxNovx30x10:26:33x2006
x;;xMSGxSIZExxrcvd:x80

En esta consulta, entre mucha otra informacixn dig indica que el servior DNS autorizado para el dominio ual.es es filabres.ual.es.

Taller 8.3: Recree la(s) consulta(s) anterior(es).

Taller 8.4: Averigue el (o los) servidor(es) de nombres autorizado(s) para el

dominio google.es.

8.8.2 ¿Cuxl es la direccixn IP del host ...? En la siguiente consulta preguntamos a uno de nuestros servidores DNS locales por la direccixn IP del host www.google.es:

#xPreguntamosxaxunxservidorxDNSxlocalxporxlaxIPxdex"www.google.es"
xusuario$xdigxwww.google.es
x
x;x<<>>xDiGx9.2.4x<<>>xwww.google.es
x;;xglobalxoptions:xxprintcmd
x;;xGotxanswer:
x;;x->>HEADER<<-xopcode:xQUERY,xstatus:xNOERROR,xid:x46300
x;;xflags:xqrxrdxra;xQUERY:x1,xANSWER:x5,xAUTHORITY:x6,xADDITIONAL:x6
x
x;;xQUESTIONxSECTION:
x;www.google.es.xxxxxxxxxxxxxxxxxINxxxxxxA
x
x;;xANSWERxSECTION:
xwww.google.es.xxxxxxxxxx167616xxINxxxxxxCNAMExxxwww.google.com.
xwww.google.com.xxxxxxxxx425476xxINxxxxxxCNAMExxxwww.l.google.com.
xwww.l.google.com.xxxxxxx201xxxxxINxxxxxxAxxxxxxx209.85.129.104
xwww.l.google.com.xxxxxxx201xxxxxINxxxxxxAxxxxxxx209.85.129.99
xwww.l.google.com.xxxxxxx201xxxxxINxxxxxxAxxxxxxx209.85.129.147
x
x;;xAUTHORITYxSECTION:
xl.google.com.xxxxxxxxxxx81028xxxINxxxxxxNSxxxxxxa.l.google.com.
xl.google.com.xxxxxxxxxxx81028xxxINxxxxxxNSxxxxxxb.l.google.com.
xl.google.com.xxxxxxxxxxx81028xxxINxxxxxxNSxxxxxxc.l.google.com.
xl.google.com.xxxxxxxxxxx81028xxxINxxxxxxNSxxxxxxd.l.google.com.
xl.google.com.xxxxxxxxxxx81028xxxINxxxxxxNSxxxxxxe.l.google.com.
xl.google.com.xxxxxxxxxxx81028xxxINxxxxxxNSxxxxxxg.l.google.com.
x
x;;xADDITIONALxSECTION:
xa.l.google.com.xxxxxxxxx23928xxxINxxxxxxAxxxxxxx216.239.53.9
xb.l.google.com.xxxxxxxxx23928xxxINxxxxxxAxxxxxxx64.233.179.9
xc.l.google.com.xxxxxxxxx14956xxxINxxxxxxAxxxxxxx64.233.161.9
xd.l.google.com.xxxxxxxxx81028xxxINxxxxxxAxxxxxxx64.233.183.9
xe.l.google.com.xxxxxxxxx14956xxxINxxxxxxAxxxxxxx66.102.11.9
xg.l.google.com.xxxxxxxxx21711xxxINxxxxxxAxxxxxxx64.233.167.9
x
x;;xQueryxtime:x12xmsec
x;;xSERVER:x150.214.156.2#53(150.214.156.2)
x;;xWHEN:xThuxDecx21x10:39:27x2006
x;;xMSGxSIZExxrcvd:x319

Esta respuesta es un poco complicada por dos motivos: (1) www.google.es y www.google.com son la misma mxquina cuando hacemos la consulta a nuestro servidor de nombres y (2), el servidor Web estx replicado tres veces en las direcciones IP

209.85.129.104, 209.85.129.147 y 209.85.129.99. Esto puede comprobarse si

preguntamos por www.google.com:

#xPreguntamosxaxunxservidorxDNSxlocalxporxlaxIPxdex"www.google.com"
xusuario$xdigxwww.google.com
x
x;x<<>>xDiGx9.2.4x<<>>xwww.google.com
x;;xglobalxoptions:xxprintcmd
x;;xGotxanswer:
x;;x->>HEADER<<-xopcode:xQUERY,xstatus:xNOERROR,xid:x20533
x;;xflags:xqrxrdxra;xQUERY:x1,xANSWER:x4,xAUTHORITY:x6,xADDITIONAL:x6
x
x;;xQUESTIONxSECTION:
x;www.google.com.xxxxxxxxxxxxxxxxxxxxxxxxINxxxxxxA
x
x;;xANSWERxSECTION:
xwww.google.com.xxxxxxxxx420014xxINxxxxxxCNAMExxxwww.l.google.com.
xwww.l.google.com.xxxxxxx207xxxxxINxxxxxxAxxxxxxx209.85.129.104
xwww.l.google.com.xxxxxxx207xxxxxINxxxxxxAxxxxxxx209.85.129.99
xwww.l.google.com.xxxxxxx207xxxxxINxxxxxxAxxxxxxx209.85.129.147
x
x;;xAUTHORITYxSECTION:
xl.google.com.xxxxxxxxxxx75566xxxINxxxxxxNSxxxxxxa.l.google.com.
xl.google.com.xxxxxxxxxxx75566xxxINxxxxxxNSxxxxxxb.l.google.com.
xl.google.com.xxxxxxxxxxx75566xxxINxxxxxxNSxxxxxxc.l.google.com.
xl.google.com.xxxxxxxxxxx75566xxxINxxxxxxNSxxxxxxd.l.google.com.
xl.google.com.xxxxxxxxxxx75566xxxINxxxxxxNSxxxxxxe.l.google.com.
xl.google.com.xxxxxxxxxxx75566xxxINxxxxxxNSxxxxxxg.l.google.com.
x
x;;xADDITIONALxSECTION:
xa.l.google.com.xxxxxxxxx18466xxxINxxxxxxAxxxxxxx216.239.53.9
xb.l.google.com.xxxxxxxxx18466xxxINxxxxxxAxxxxxxx64.233.179.9
xc.l.google.com.xxxxxxxxx9494xxxxINxxxxxxAxxxxxxx64.233.161.9
xd.l.google.com.xxxxxxxxx75566xxxINxxxxxxAxxxxxxx64.233.183.9
xe.l.google.com.xxxxxxxxx9494xxxxINxxxxxxAxxxxxxx66.102.11.9
xg.l.google.com.xxxxxxxxx16249xxxINxxxxxxAxxxxxxx64.233.167.9
x
x;;xQueryxtime:x1xmsec
x;;xSERVER:x150.214.156.2#53(150.214.156.2)
x;;xWHEN:xThuxDecx21x12:10:30x2006
x;;xMSGxSIZExxrcvd:x292

Ademxs, como puede verse www.google.com es un alias de www.l.google.com.

Taller 8.5: Recree la(s) consulta(s) anterior(es). 8.8.3 ¿Cuxles son los servidores de nombres del dominio ...?

#xPreguntamosxaxnuestroxservidorxDNSxporxelxdominiox"mit.edu"
xusuario$xdigxmit.edu
x;x<<>>xDiGx9.2.4x<<>>xmit.edu
x;;xglobalxoptions:xxprintcmd
x;;xGotxanswer:
x;;x->>HEADER<<-xopcode:xQUERY,xstatus:xNOERROR,xid:x10644
x;;xflags:xqrxrdxra;xQUERY:x1,xANSWER:x1,xAUTHORITY:x3,xADDITIONAL:x3
x
x;;xQUESTIONxSECTION:
x;mit.edu.xxxxxxxxxxxxxxxxxxxxxxxINxxxxxxA
x
x;;xANSWERxSECTION:
xmit.edu.xxxxxxxxxxxxxxxx60xxxxxxINxxxxxxAxxxxxxx18.7.22.69
x
x;;xAUTHORITYxSECTION:
xmit.edu.xxxxxxxxxxxxxxxx14655xxxINxxxxxxNSxxxxxxBITSY.mit.edu.
xmit.edu.xxxxxxxxxxxxxxxx14655xxxINxxxxxxNSxxxxxxSTRAWB.mit.edu.
xmit.edu.xxxxxxxxxxxxxxxx14655xxxINxxxxxxNSxxxxxxW20NS.mit.edu.
x
x;;xADDITIONALxSECTION:
xBITSY.mit.edu.xxxxxxxxxx14655xxxINxxxxxxAxxxxxxx18.72.0.3
xSTRAWB.mit.edu.xxxxxxxxx8735xxxxINxxxxxxAxxxxxxx18.71.0.151
xW20NS.mit.edu.xxxxxxxxxx8735xxxxINxxxxxxAxxxxxxx18.70.0.160
x
x;;xQueryxtime:x158xmsec
x;;xSERVER:x150.214.156.2#53(150.214.156.2)
x;;xWHEN:xThuxDecx21x12:20:46x2006
x;;xMSGxSIZExxrcvd:x157
x

Podemos ver que existen tres servidores de nombres autorizados para el dominio “bit.edu”.

Taller 8.6: Recree la(s) consulta(s) anterior(es).

Taller 8.7: Encuentre los servidores nombres de un dominio que conozca.

8.8.4 ¿Cxmo interrogamos a otro servidor DNS?

#xPreguntamosxalxservidorxDNSx"bitsy.mit.edu"xporxelxhostx"www.google.es"
xusuario$xdigx@bitsy.mit.eduxwww.google.es
x
x;x<<>>xDiGx9.2.4x<<>>x@bitsy.mit.eduxwww.google.es
x;;xglobalxoptions:xxprintcmd
x;;xGotxanswer:
x;;x->>HEADER<<-xopcode:xQUERY,xstatus:xNOERROR,xid:x7735
x;;xflags:xqrxrdxra;xQUERY:x1,xANSWER:x5,xAUTHORITY:x7,xADDITIONAL:x7
x
x;;xQUESTIONxSECTION:
x;www.google.es.xxxxxxxxxxxxxxxxxINxxxxxxA
x
x;;xANSWERxSECTION:
xwww.google.es.xxxxxxxxxx304614xxINxxxxxxCNAMExxxwww.google.com.
xwww.google.com.xxxxxxxxx557306xxINxxxxxxCNAMExxxwww.l.google.com.
xwww.l.google.com.xxxxxxx174xxxxxINxxxxxxAxxxxxxx64.233.161.104
xwww.l.google.com.xxxxxxx174xxxxxINxxxxxxAxxxxxxx64.233.161.99
xwww.l.google.com.xxxxxxx174xxxxxINxxxxxxAxxxxxxx64.233.161.147
x
x;;xAUTHORITYxSECTION:
xl.google.com.xxxxxxxxxxx72376xxxINxxxxxxNSxxxxxxc.l.google.com.
xl.google.com.xxxxxxxxxxx72376xxxINxxxxxxNSxxxxxxf.l.google.com.
xl.google.com.xxxxxxxxxxx72376xxxINxxxxxxNSxxxxxxd.l.google.com.
xl.google.com.xxxxxxxxxxx72376xxxINxxxxxxNSxxxxxxb.l.google.com.
xl.google.com.xxxxxxxxxxx72376xxxINxxxxxxNSxxxxxxe.l.google.com.
xl.google.com.xxxxxxxxxxx72376xxxINxxxxxxNSxxxxxxg.l.google.com.
xl.google.com.xxxxxxxxxxx72376xxxINxxxxxxNSxxxxxxa.l.google.com.
x
x;;xADDITIONALxSECTION:
xc.l.google.com.xxxxxxxxx40415xxxINxxxxxxAxxxxxxx64.233.161.9
xf.l.google.com.xxxxxxxxx72376xxxINxxxxxxAxxxxxxx72.14.235.9
xd.l.google.com.xxxxxxxxx38903xxxINxxxxxxAxxxxxxx64.233.183.9
xb.l.google.com.xxxxxxxxx38903xxxINxxxxxxAxxxxxxx64.233.179.9
xe.l.google.com.xxxxxxxxx38903xxxINxxxxxxAxxxxxxx66.102.11.9
xg.l.google.com.xxxxxxxxx44316xxxINxxxxxxAxxxxxxx64.233.167.9
xa.l.google.com.xxxxxxxxx39459xxxINxxxxxxAxxxxxxx216.239.53.9
x
x;;xQueryxtime:x231xmsec
x;;xSERVER:x18.72.0.3#53(bitsy.mit.edu)
x;;xWHEN:xThuxDecx21x12:15:01x2006
x;;xMSGxSIZExxrcvd:x351

Ahora preguntamos al servidor DNS “bitsy.mit.edu” por el host “www.google.com”:

#xPreguntamosxalxservidorxDNSx"bitsy.mit.edu"xporxelxhostx"www.google.com"
xusuario$xdigx@bitsy.mit.eduxwww.google.com
x
x;x<<>>xDiGx9.2.4x<<>>x@bitsy.mit.eduxwww.google.com
x;;xglobalxoptions:xxprintcmd
x;;xGotxanswer:
x;;x->>HEADER<<-xopcode:xQUERY,xstatus:xNOERROR,xid:x29537
x;;xflags:xqrxrdxra;xQUERY:x1,xANSWER:x4,xAUTHORITY:x7,xADDITIONAL:x7
x
x;;xQUESTIONxSECTION:
x;www.google.com.xxxxxxxxxxxxxxxxxxxxxxxxINxxxxxxA
x
x;;xANSWERxSECTION:
xwww.google.com.xxxxxxxxx557281xxINxxxxxxCNAMExxxwww.l.google.com.
xwww.l.google.com.xxxxxxx149xxxxxINxxxxxxAxxxxxxx64.233.161.99
xwww.l.google.com.xxxxxxx149xxxxxINxxxxxxAxxxxxxx64.233.161.147
xwww.l.google.com.xxxxxxx149xxxxxINxxxxxxAxxxxxxx64.233.161.104
x
x;;xAUTHORITYxSECTION:
xl.google.com.xxxxxxxxxxx72351xxxINxxxxxxNSxxxxxxc.l.google.com.
xl.google.com.xxxxxxxxxxx72351xxxINxxxxxxNSxxxxxxf.l.google.com.
xl.google.com.xxxxxxxxxxx72351xxxINxxxxxxNSxxxxxxd.l.google.com.
xl.google.com.xxxxxxxxxxx72351xxxINxxxxxxNSxxxxxxb.l.google.com.
xl.google.com.xxxxxxxxxxx72351xxxINxxxxxxNSxxxxxxe.l.google.com.
xl.google.com.xxxxxxxxxxx72351xxxINxxxxxxNSxxxxxxg.l.google.com.
xl.google.com.xxxxxxxxxxx72351xxxINxxxxxxNSxxxxxxa.l.google.com.
x
x;;xADDITIONALxSECTION:
xc.l.google.com.xxxxxxxxx40390xxxINxxxxxxAxxxxxxx64.233.161.9
xf.l.google.com.xxxxxxxxx72351xxxINxxxxxxAxxxxxxx72.14.235.9
xd.l.google.com.xxxxxxxxx38878xxxINxxxxxxAxxxxxxx64.233.183.9
xb.l.google.com.xxxxxxxxx38878xxxINxxxxxxAxxxxxxx64.233.179.9
xe.l.google.com.xxxxxxxxx38878xxxINxxxxxxAxxxxxxx66.102.11.9
xg.l.google.com.xxxxxxxxx44291xxxINxxxxxxAxxxxxxx64.233.167.9
xa.l.google.com.xxxxxxxxx39434xxxINxxxxxxAxxxxxxx216.239.53.9
x
x;;xQueryxtime:x156xmsec
x;;xSERVER:x18.72.0.3#53(bitsy.mit.edu)
x;;xWHEN:xThuxDecx21x12:15:25x2006
x;;xMSGxSIZExxrcvd:x324

Taller 8.8: Recree la(s) consulta(s) anterior(es).

Como podemos ver, ambas respuestas son idxnticas (como en el caso de preguntar a filabres), pero diferentes comparadas con las que devuelve nuestro servidor de nombres local. Esto significa que, si nos conectamos a www.google.es desde el MIT, veremos la versixn americana de google.

Finalmente, nxtese que el servidor DNS no devuelve las direcciones IP de las rxplicas del servidor Web siempre en el mismo orden. Esto se utiliza para distribuir la carga.

Taller 8.9: Encuentre los servidores nombres para el dominio “ual.es”. Interrogue al servidor DNS “bitsy.mit.edu” (o a otro que conozca).

8.8.5 Averiguando la jerarquxa de servidores DNS Como hemos comentado anteriormente, cuando consultamos a un servidor DNS sobre una direccixn IP para la cual xl no es el servidor DNS autorizado lo mxs frecuente es que xste tenga que consultar a otro servidor DNS (consulta recursiva) o nos indique a qux otro servidor DNS podemos preguntar nosotros (consulta iterativa).

Activando el flag +trace de dig podemos conocer qux servidores DNS se han consultado. En el siguiente ejemplo preguntamos a bitsy.mit.edu por la direccixn IP

del host gogh.ace.ual.es:

usuario$xdigx+tracex@bitsy.mit.eduxgogh.ace.ual.es
x
x;x<<>>xDiGx9.2.4x<<>>x+tracex@bitsy.mit.eduxgogh.ace.ual.es
x;;xglobalxoptions:xxprintcmd
x.xxxxxxxxxxxxxxxxxxxxxxx488373xxINxxxxxxNSxxxxxxa.root-servers.net.
x.xxxxxxxxxxxxxxxxxxxxxxx488373xxINxxxxxxNSxxxxxxh.root-servers.net.
x.xxxxxxxxxxxxxxxxxxxxxxx488373xxINxxxxxxNSxxxxxxc.root-servers.net.
x.xxxxxxxxxxxxxxxxxxxxxxx488373xxINxxxxxxNSxxxxxxg.root-servers.net.
x.xxxxxxxxxxxxxxxxxxxxxxx488373xxINxxxxxxNSxxxxxxf.root-servers.net.
x.xxxxxxxxxxxxxxxxxxxxxxx488373xxINxxxxxxNSxxxxxxb.root-servers.net.
x.xxxxxxxxxxxxxxxxxxxxxxx488373xxINxxxxxxNSxxxxxxj.root-servers.net.
x.xxxxxxxxxxxxxxxxxxxxxxx488373xxINxxxxxxNSxxxxxxk.root-servers.net.
x.xxxxxxxxxxxxxxxxxxxxxxx488373xxINxxxxxxNSxxxxxxl.root-servers.net.
x.xxxxxxxxxxxxxxxxxxxxxxx488373xxINxxxxxxNSxxxxxxm.root-servers.net.
x.xxxxxxxxxxxxxxxxxxxxxxx488373xxINxxxxxxNSxxxxxxi.root-servers.net.
x.xxxxxxxxxxxxxxxxxxxxxxx488373xxINxxxxxxNSxxxxxxe.root-servers.net.
x.xxxxxxxxxxxxxxxxxxxxxxx488373xxINxxxxxxNSxxxxxxd.root-servers.net.
x;;xReceivedx436xbytesxfromx18.72.0.3#53(bitsy.mit.edu)xinx158xms
x
xes.xxxxxxxxxxxxxxxxxxxxx172800xxINxxxxxxNSxxxxxxNS3.NIC.FR.
xes.xxxxxxxxxxxxxxxxxxxxx172800xxINxxxxxxNSxxxxxxSUN.REDIRIS.es.
xes.xxxxxxxxxxxxxxxxxxxxx172800xxINxxxxxxNSxxxxxxSUNIC.SUNET.SE.
xes.xxxxxxxxxxxxxxxxxxxxx172800xxINxxxxxxNSxxxxxxNS.UU.NET.
xes.xxxxxxxxxxxxxxxxxxxxx172800xxINxxxxxxNSxxxxxxNS1.NIC.es.
xes.xxxxxxxxxxxxxxxxxxxxx172800xxINxxxxxxNSxxxxxxAUNIC.AUNIC.NET.
xes.xxxxxxxxxxxxxxxxxxxxx172800xxINxxxxxxNSxxxxxxNS1.CESCA.es.
xes.xxxxxxxxxxxxxxxxxxxxx172800xxINxxxxxxNSxxxxxxNS2.NIC.es.
x;;xReceivedx352xbytesxfromx198.41.0.4#53(a.root-servers.net)xinx134xms
x
xual.es.xxxxxxxxxxxxxxxxx7200xxxxINxxxxxxNSxxxxxxchico.rediris.es.
xual.es.xxxxxxxxxxxxxxxxx7200xxxxINxxxxxxNSxxxxxxalboran.ual.es.
xual.es.xxxxxxxxxxxxxxxxx7200xxxxINxxxxxxNSxxxxxxfilabres.ual.es.
xual.es.xxxxxxxxxxxxxxxxx7200xxxxINxxxxxxNSxxxxxxsun.rediris.es.
xual.es.xxxxxxxxxxxxxxxxx7200xxxxINxxxxxxNSxxxxxxdns1.cica.es.
xual.es.xxxxxxxxxxxxxxxxx7200xxxxINxxxxxxNSxxxxxxdns2.cica.es.
x;;xReceivedx263xbytesxfromx192.134.0.49#53(NS3.NIC.FR)xinx49xms
x
xace.ual.es.xxxxxxxxxxxxx172800xxINxxxxxxNSxxxxxxfilabres.ual.es.
xace.ual.es.xxxxxxxxxxxxx172800xxINxxxxxxNSxxxxxxalboran.ual.es.
x;;xReceivedx110xbytesxfromx130.206.1.3#53(chico.rediris.es)xinx37xms
x
xgogh.ace.ual.es.xxxxxxxx172800xxINxxxxxxAxxxxxxx193.147.118.57

xace.ual.es.xxxxxxxxxxxxx172800xxINxxxxxxNSxxxxxxfilabres.ual.es.
xace.ual.es.xxxxxxxxxxxxx172800xxINxxxxxxNSxxxxxxalboran.ual.es.
x;;xReceivedx126xbytesxfromx150.214.156.2#53(filabres.ual.es)xinx0xms

Taller 8.10: Recree la(s) consulta(s) anterior(es).

Como podemos ver, bitsy.mit.edu consulta (en la versixn recursiva) al servidor de nombres raxz a.root-servers.net, que consulta a NS3.NIC.FR, que consulta a

chico.rediris.es, que consulta a filabres.ual.es.

8.8.6 Resolucixn inversa Finalmente, tambixn podemos interrogar al servidor DNS por el nombre de un host a partir de su direccixn IP:

#xPreguntamosxalxservidorxDNSxporxelxnombrexdelxhostxquextienexlaxIP
x#x193.147.118.57
xusuario$xdigx-xx193.147.118.57
x
x;x<<>>xDiGx9.2.4x<<>>x-xx193.147.118.57
x;;xglobalxoptions:xxprintcmd
x;;xGotxanswer:
x;;x->>HEADER<<-xopcode:xQUERY,xstatus:xNOERROR,xid:x44233
x;;xflags:xqrxaaxrdxra;xQUERY:x1,xANSWER:x1,xAUTHORITY:x6,xADDITIONAL:x7
x
x;;xQUESTIONxSECTION:
x;57.118.147.193.in-addr.arpa.xxxINxxxxxxPTR
x
x;;xANSWERxSECTION:
x57.118.147.193.in-addr.arpa.x172800xINxxPTRxxxxxgogh.ace.ual.es.
x
x;;xAUTHORITYxSECTION:
x118.147.193.in-addr.arpa.x172800xINxxxxxNSxxxxxxfilabres.ual.es.
x118.147.193.in-addr.arpa.x172800xINxxxxxNSxxxxxxalboran.ual.es.
x118.147.193.in-addr.arpa.x172800xINxxxxxNSxxxxxxdns1.cica.es.
x118.147.193.in-addr.arpa.x172800xINxxxxxNSxxxxxxdns2.cica.es.
x118.147.193.in-addr.arpa.x172800xINxxxxxNSxxxxxxsun.rediris.es.
x118.147.193.in-addr.arpa.x172800xINxxxxxNSxxxxxxchico.rediris.es.
x
x;;xADDITIONALxSECTION:
xfilabres.ual.es.xxxxxxxx172800xxINxxxxxxAxxxxxxx150.214.156.2
xalboran.ual.es.xxxxxxxxx172800xxINxxxxxxAxxxxxxx150.214.156.32
xdns1.cica.es.xxxxxxxxxxx163357xxINxxxxxxAxxxxxxx150.214.5.83
xdns2.cica.es.xxxxxxxxxxx3265xxxxINxxxxxxAxxxxxxx150.214.4.35
xsun.rediris.es.xxxxxxxxx15046xxxINxxxxxxAxxxxxxx130.206.1.2
xchico.rediris.es.xxxxxxx15295xxxINxxxxxxAxxxxxxx130.206.1.3
xdns2.cica.es.xxxxxxxxxxx127925xxINxxxxxxAAAAxxxx2001:720:c10:9::4
x
x;;xQueryxtime:x1xmsec
x;;xSERVER:x150.214.156.2#53(150.214.156.2)
x;;xWHEN:xThuxDecx21x13:19:57x2006
x;;xMSGxSIZExxrcvd:x332

Como podemos ver, el host es gogh.ace.ual.es.

Taller 8.11: Recree la(s) consulta(s) anterior(es).

Taller 8.12: Existen servidores Web que prestan este mismo servicio. Ejemplos:

http://remote.12dt.com/
xhttp://www.zoneedit.com/lookup.html

Utilice algunas de estas pxginas Web para comprobar que el resultado coincide con el que devuelve dig para una determinada consulta.

Cuidado con el DNS

[next] [prev] [prev-tail] [tail] [up] 8.9 Cuidado con el DNS

El DNS es uno de los servicios mxs crxticos que existen en Internet. A continuacixn mostramos algunos de los riesgos mxs importantes a los que nos exponemos cuando utilizamos un servidor DNS inseguro (mxs informacixn en BULMA (http://bulma.net/body.phtml?nIdNoticia=1334).

Si definimos un dominio e instalamos un servidor DNS primario para el mismo, estamos obligados a ofrecer informacixn sobre el dominio definido. Esto significa que cualquier usuario de Internet puede conocer qux mxquinas y con qux direcciones IP existen en nuestro dominio.

Los servidores DNS que delegan dominios a otros servidores primarios (es decir, que ya no son servidores primarios para ese sub-dominio) estxn obligados a escuchar las modificaciones que en dichos dominios se producen (en caso contrario, el DNS no escalarxa). Si no tenemos cuidado cuando configuramos nuestro servidor y controlamos adecuadamente “la transferencia de dominio”, un hacker puede instalar un servidor DNS y hacerlo pasar por el servidor DNS primario de ese dominio. Si esto ocurre, puede inyectar informacixn falsa en el sistema DNS y hacer que cuando accedamos a un host en realidad entremos en otro. Imagine lo que serxa acceder a nuestra cuenta bancaria a travxs del host del hacker, creyendo que estamos enviando los datos al servidor de nuestro banco cuando en realidad lo estamos haciendo a un host que controla el hacker.

DNS + DHCP

[next] [prev] [prev-tail] [tail] [up]

8.10 DNS + DHCP Cuando utilizamos el DHCP para gestionar redes pxblicas en las que las direcciones IP asignadas son dinxmicas, podemos configurar el servidor DHCP para que avise al servidor DNS autorizado de ese dominio de los cambios que se vayan produciendo en las asignaciones de las direcciones.

Este sistema tiene una gran ventaja: se gestiona sxlo. Sin embargo, no es muy recomendable su uso cuando vamos a instalar servicios importantes en los hosts del dominio. Supongamos que en uno de estos host tenemos un servidor Web que tiene miles de accesos diarios. En esta situacixn la direccixn IP de este host estx diseminada por las cachxs de miles de servidores DNS de toda la Internet. Si dicho host recibe una nueva IP, muchas resoluciones serxan incorrectas hasta que las cachxs son actualizadas.

Taller 8.13: Configure el sistema operativo huxsped (Windows) para que utilice el servidor DNS que ha instalado en el host virtual (Debian).

Cuestixn 8.1: Determine el servidor DNS para su host virtual. ¿Pertenece el servidor a la misma red que el host virtual? ¿Cxmo cree que estx configurado dicho servidor, como primario, secundario o cachx? Exponga sus razones.

Cuestixn 8.2: Tras instalar BIND en su host, ¿pasan las aplicaciones de red a usar de forma automxtica el DNS que acaba de instalar? Explxquese.

Cuestixn 8.3: Cuando consulta los servidores de nombres de un dominio, ¿a qux servidor DNS ha consultado?

Cuestixn 8.4: Determine qux servidor(es) DNS de nivel mxs bajo (mxs prxximo al servidor DNS autorizado) tienen en comxn los ordenadores de la Universidad de Almerxa y los de la Universidad de Granada.

Taller 8.14: Capture la interaccixn cuando desde el host virtual se interroga al

DNS para encontrar la direccixn IP de www.mit.edu. Cuestixn 8.5: ¿Qux protocolo de transporte se estx usando? Cuestixn 8.6: ¿A qux direccixn IP y puerto se ha enviado la consulta? Cuestixn 8.7: ¿Desde qux direccixn IP y puerto se ha efectuado la consulta? Cuestixn 8.8: ¿Qux tipo de peticixn DNS se ha generado?

[next] [prev] [prev-tail] [front] [up] [next] [prev] [prev-tail] [front] [up] 9 Acceso remoto 2: SSH

[next] [prev] [prev-tail] [tail] [up] Prxcticax9Acceso remoto 2: SSH

SSH (Secure SHell) [14] es un programa semejante al programa Telnet, pero que a diferencia de xste, SSH cifra toda la comunicacixn entre el cliente y el servidor. Para ello se vale de un algoritmo de cifrado de clave pxblica. SSH es muy utilizado para el acceso remoto a hosts, permitiendo a los usuarios trabajar como si estuvieran fxsicamente sentados frente el teclado del host remoto.

En esta prxctica aprenderemos a usar el conjunto de utilidades que vienen con el paquete SSH.

La implementacixn del SSH que vamos a utilizar en este mxdulo se llama OpenSSH (http://www.openssh.com) e incorpora, entre otras, las siguientes utilidades:

ssh: Un cliente. El sustituto de Telnet.

sshd: Un servidor.

scp: (Secure CoPy). Una utilidad semejante a la utilidad rcp que permite copiar ficheros entre hosts remotos de forma segura.

sftp: (Secure FTP). Una versixn segura del programa Ftp.

x9.1 Algoritmos de cifrado x9.2 Caracterxsticas del SSH x9.3 Instalacixn de SSH (cliente y servidor) x9.4 Configuracixn del servidor x9.5 Configuracixn del cliente x9.6 Uso de SSH xx9.6.1 Accediendo a un host remoto

xx9.6.2 Usando ssh-agent y ssh-add

xx9.6.3 Ejecucixn de comandos no interactivos en el host remoto xx9.6.4 Verificacixn de la host key xx9.6.5 Copiando ficheros xx9.6.6 SSH forwarding

Algoritmos de cifrado

[next] [prev] [prev-tail] [tail] [up] 9.1 Algoritmos de cifrado Los algoritmos de cifrado (o criptogrxficos) se utilizan para esconder la informacixn a aquel conjunto de personas que no deberxan tener acceso a ella. La idea es muy simple y consiste en alterar la representacixn de la informacixn usando una clave (o key). Asx, sxlo quien conozca la clave es capxz de restaurar la representacixn original (descrifrada) de la informacixn.

Existen dos tipos distintos de algoritmo de cifrado, dependiendo del nxmero de claves que se utilizan:

Algoritmos de clave simxtrica: Tambixn se llaman algoritmos de clave secreta y se caracterizan por usar la misma clave para cifrar y descifrar. Asx, si enviamos un e-mail cifrado a alguien tambixn tenemos que indicarle la clave que usamos para cifrarlo.

Algoritmos de clave asimxtrica: Los sistemas de clave simxtrica presuponen que el receptor conoce la clave secreta, pero, ¿cxmo le hacemos llegar dicha clave sxlo a xl a travxs de un canal inseguro como puede ser Internet? Usando un algoritmo de clave simxtrica es imposible.

Para evitar este problema se idearon los algoritmos de clave asimxtrica (o algoritmos de clave pxblica). En estos algoritmos cada extremo de la comunicacixn

maneja dos claves, una pxblica y otra privada (en total, 4 claves).∗ ∗El emisor tiene una clave pxblica y otra privada y el receptor una clave pxblica y otra privada. Se cumple que: (1) lo que se cifra utilizando la clave pxblica puede descifrarse, sxlo, utilizando la clave privada y (2) es imposible derivar la clave privada a partir de la pxblica (sin informacixn adicional).

Asx, cuando dos personas desean intercambiarse informacixn primero deben intercambiar sus claves pxblicas. Habiendo hecho esto, cuando yo (por ejemplo) deseo enviar un mensaje a alguien lo cifro usando la clave pxblica de mi interlocutor. Dicho mensaje puede ser interceptado por una tercera persona, pero sxlo mi interlocutor va a ser capaz de descifrarlo porque es la xnica persona que posee la clave privada que puede descifrarlo. De la misma manera, sxlo yo podrx descifrar lo que mi interlocutor me envxa porque sxlo yo poseo la clave privada que permite descifrar el mensaje.

Caractersticas del SSH

[next] [prev] [prev-tail] [tail] [up]

9.2 Caracterxsticas del SSH El SSH utiliza tres mecanismos (tres protocolos) [14]:

Transport Layer Protocol (TLP) [16]: Autentifica  el  servidor,

cifra la comunicacixn y conserva la integridad de la informacixn transmitida. Suele usar el TCP y adicionalmente puede comprimir los datos.

User Authentication Protocol (UAP) [15]: Utiliza el TLP y autentifica el cliente al servidor.

Connection Protocol (CP) [17]: Se ejecuta sobre el UAP y permite multiplexar muchos canales lxgicos sobre un xnico tunel cifrado.

Existen dos versiones de SSH: la versixn 1 y la versixn 2. La segunda es la mxs evolucionada y utilizada. Ambas versiones estxn basadas en un algoritmo de cifrado de clave pxblica. SSH permite ademxs comprimir el stream de datos al vuelo (on-the-fly). Con esto ganaremos en velocidad efectiva de tranmisixn y aumentaremos la seguridad.

SSH utiliza DES (Data Encryption Standard) en su versixn 1 y ademxs AES (Advanced Encryption Scheme) y Blowfish en su versixn 2. DES es considerado el menos seguro y AES el mxs seguro. Debe tenerse en cuenta que el consumo de CPU serx proporcional al nivel de seguridad.

Quizxs la parte mxs importante de SSH radica en que posee un sistema para autentificar a los extremos de la comunicacixn (evita el spoofing). De esta manera, se asegura que tanto el emisor como el receptor son realmente quien dicen ser.

†  ^{†Nxtese que esto no se puede verificar simplemente con el algoritmo de cifrado.}

A continuacixn se presenta todo el proceso de comunicacixn (http://es.tldp.org/Tutoriales/doc-ssh-intro/intro-ssh/node9.html) entre un cliente y un servidor (versixn 2 del protocolo):

Fase de conexixn TCP:

El cliente establece una conexixn TCP con el servidor.

Fase de identificacixn del protocolo:

Si el servidor acepta la conexixn TCP envxa al cliente un mensaje (no cifrado) que indica los parxmetros fundamentales de la conexixn (como por ejemplo, el puerto que utilizarx para el resto de la sesixn y la versixn del protocolo SSH).

El cliente envxa al servidor otro mensaje con su propia informacixn acerca de los parxmetros que desea utilizar en la comunicacixn.

Fase de autentificacixn del servidor:

Si el servidor acepta las condiciones del cliente, el servidor envxa su host key pxblica, sin cifrar, y un nxmero aleatorio, sin cifrar.

El cliente comprobarx que la host key recibida es igual a la que recibix en la xltima conexixn con dicho servidor. Si es la primera vez que se conecta, mostrarx la host key al usuario para que pueda, por ejemplo, telefonear al administrador del host remoto para preguntarle la host key. Si no es la primera vez y es diferente (el cliente mira en x/.ssh/knownxhosts), tambixn mostrarx la host key para evitar el posible spoofing.

Si el cliente continua con la conexixn, cifrarx y almacenarx la host key en x/.ssh/knownxhosts para futuras comprobaciones.

Generacixn de la clave de sesixn:

El cliente genera una clave de cifrado simxtrica llamada session key y la cifra utilizando la host key pxobica del servidor.

El cliente envxa la session key cifrada al servidor.

El servidor descifra la session key utilizando su host key privada. En este punto ambos extremos conocen la clave de sesixn que se utiliza para cifrar y descifrar el resto de la comunicacixn.

Fase de identificacixn y autentificacixn del usuario (http://www.ssh.fi/support/documentation/online/ssh/adminguide/32/User Ȧuthentication.html). Se intentarxn secuencialmente cada uno de los siguientes mxtodos‡ ‡Esta lista no es exhaustiva, pueden existir otras formas de autentificacixn. :

Autentificacixn basada en el host del usuario: El usuario queda autentificado en estos casos:

Si el host de usuario estx en /etc/hosts.equiv o en /etc/ssh/shosts.equiv, y si el nombre del usuario es el mismo en la mxquina local y en la mxquina remota.

Si los ficheros x/.rhosts o x/.shosts en el directorio home del usuario en la mxquina remota contiene una entrada de la forma

    ususarioxmaquinaxcliente@maquinaxcliente.

En cualquiera de estos casos es necesario que el fichero /etc/ssh/sshxknownxhosts o el fichero x/.ssh/knownxhosts contenga el host key pxblica del cliente.

Autentificacixn de clave pxblica: Para poder usar esta forma de autentificacixn, el usuario en alguna sesixn previa ha debido generar una clave pxblica y otra privada (generalmente usando RSA). En dicha sesixn previa, el usuario ha informado al servidor de su clave de usuario pxblica. Durante esta fase de autentificacixn el servidor genera un nxmero aleatorio (llamado challenge) que es cifrado usando la clave pxblica que le envix el usuario. El cliente recibe el desafxo, lo descifra usando su clave privada, y lo vuelve a cifrar usando su clave privada. Finalmente se lo envxa al servidor. El servidor lo descifra usando la clave pxblica del usuario y si el nxmero coindice, entonces el usuario queda autentificado.

Autentificacixn basada en password: Consiste en enviar un password que sxlo el usuario conoce (generalmente el password usado en la cuenta de la mxquina remota). Dicho password viaja cifrado con la clave de sesixn.

Fase de acceso al sistema remoto:

El host remoto ejecuta un shell cuya entrada y salida es proporcionada por el servidor SSH.

Fase de desconexixn:

Cuando el usuario realiza un logout, el shell en el host remoto muere y la conexixn TCP se cierra.

Instalacin de SSH (cliente y servidor)

[next] [prev] [prev-tail] [tail] [up] 9.3 Instalacixn de SSH (cliente y servidor)

En Linux tenemos disponibles un servidor y un cliente SSH a travxs del paquete OpenSSH (http://www.openssh.com). Su instalacixn es muy sencilla:

root#xapt-getxinstallxssh

El demonio se llama ssh. Fedora Core Linux: x

root#xyumxinstallxopenssh

El demonio se llama sshd. Gentoo Linux: x

root#xemergexopenssh

El demonio se llama sshd.

Configuracin del servidor

[next] [prev] [prev-tail] [tail] [up] 9.4 Configuracixn del servidor

El servidor SSH se configura modificando el fichero de configuracixn (ojo con la

/etc/ssh/sshd_config

Dicho fichero estx codificado en ASCII y suficientemente autocomentado. A continuacixn comentaremos las diferentes opciones (mxs informacixn en man

sshdxconfig):

Port: Puerto de escucha del servicio. 22 por defecto. ListenAddress: Direcciones que serxn atendidas. Todas por defecto. Protocol: Versixn del protocolo. 2 por defecto. HostKey: Especifica los ficheros con las host keys. /etc/ssh/sshxhostxrsaxkey

     y /etc/ssh/sshxhostxdsaxkey, por defecto.
UsePrivilegeSeparation: Espefifica si el fichero x/.ssh/environment y las
     opciones environment= en el fichero x/.ssh/authorizedxkeys son

procesadas por sshd. Por defecto, no. KeyRegenerationInterval: Periodo de regeneracixn del server key para la versixn

1 del protocolo. Por defecto, 1 hora. ServerKeyBits: Nxmero de bits de la server key para la versixn 1 del protocolo.

Por defecto 768 bits. SyslogFacility: Tipo de registro de actividades. Por defecto AUTH. LogLevel: Nivel de registro de actividades. Por defecto, INFO. LoginGraceTime: Tiempo de espera para la autentificacixn. 120 segundos, por

defecto. PermitRootLogin: ¿Se permite acceder al root? Por defecto, sx.

StrictModes: Enviar ficheros con todos los permisos a todos los usuarios. Sx, por

defecto. RSAAuthentication: ¿Queremos usar RSA (versixn 1)? Sx, por defecto. PubkeyAuthentication: ¿Queremos usar clave pxblica (versixn 2)?. Sx, por

defecto. AuthorizedKeysFile: Fichero con las claves para la autentificacixn.

     x/.ssh/authorizedxkeys, por defecto.

IgnoreRhosts: ¿Se ignoran los ficheros x/.rhostsyt x/.shosts? Sx, por defecto.

RhostsRSAAuthentication: Permitir la autentificacixn por /etc/rhosts

(versixn 1). Por defecto, no.

HostbasedAuthentication: Permitir la autentificacixn por /etc/rhosts

(versixn 2). Por defecto, no. IgnoreUserKnownHosts: Poner a yes si no confiamos en el fichero

     x/.ssh/knownxhosts para la RhostsRSAAuthentication.

PermitEmptyPasswords: No, por defecto (y no se recomienda poner yes”.

ChallengeResponseAuthentication: Habilita  los  passwords

“challenge-response”. Por defecto, no. PasswordAuthentication: Permite deshabilitar los passwords en texto plano

cuando se estx utilizando tunneling. No, por defecto (los passwords estxn cifrados, por defecto).

KerberosAuthentication: Usar Kerberos para autentificar los usuarios. Por

defecto, no. KerberosOrLocalPasswd: Opcixn “OrLocalPasswd” cuando utilizamos Kerberos.

Por defecto, sx.

KerberosTicketCleanup: Opcixn “TicketCleanup” cuando utilizamos Kerberos. Por defecto, sx.

KerberosGetAFSToken: Opcixn “GetAFSToken” cuando utilizamos Kerberos. Por defecto, no.

GSSAPIAuthentication: Usar GSSAPI para autentificar los usuarios. Por defecto, no.

GSSAPICleanupCredentials: Opcixn “CleanupCredentials” cuando utilizamos Kerberos. Por defecto, sx.

X11Forwarding: Redirigir la conexixn TCP usada por el servidor X-Window. Sx, por defecto. Asx, cuando accedamos al host remoto desde una consola grxfica (un xterm, por ejemplo) y ejecutemos una aplicacixn grxfica, xsta aparecerx en nuestro sistema de ventanas.

X11DisplayOffset: Offset por defecto para la variable de entorno DISPLAY que

controla el display grxfico utilizado por las aplicaciones grxficas.§ §En el sistema X11 un servidor X11 puede tener varios clientes X11 (varios terminales grxficos). La variable DISPLAY permite seleccionar el cliente. Por defecto, 10.

PrintMotd: El fichero /etc/motd es un mensaje de bienvenida codificado en ASCII y que es mostrado cuando accedemos a travxs del terminal remoto. Por defecto, no usar.

PrintLastLog: Imprimir la salida mxs reciente del comando de lastlog que se utiliza para saber desde dxnde nos conectamos al servidor la xltima vez que utilizamos SSH. Por defecto estx a yes.

TCPKeepAlive: Enviar perixdicamente mensajes “TCP keepalive”. De esta manera si la conexixn falla los extremos son notificados y el terminal no se “cuelga”. Por defecto, sx.

UseLogin: ¿Usar la utilidad login para la autentificacixn?. Por defecto, no.

MaxStartups: Espefifica el nxmero mxximo de conexxiones concurrentes sin autentificar que serxn permitidas. Por defecto, 10.

Banner: El banner es un mensaje que puede enviarse antes de iniciarse la conexixn con el servidor (para avisar, por ejemplo, que se estx accediendo a un sitio muy chungo :-). Esta opcixn indica la localizacixn del fichero ASCII que contiene dicho mensaje.

AcceptEnv: Espeficica qux variables para la configuracixn local del lenguaje van a ser aceptadas. Por defecto, todas.

Subsystem: Permite especificar la localizacixn en el sistema de ficheros de una determinada utilidad a usar con SSH. Normalmente se utiliza para indicar el fichero que contiene ejecuta la utilidad sftp.

UsePAM: Autentificar al usuario utilizando el Pluggable Authentication Module. Por defecto, sx.

Tras modificar el fichero de configuracixn del servidor SSH es necesario relanzar el servicio (vxase el Apxndice C).

Configuracin del cliente

[next] [prev] [prev-tail] [tail] [up] 9.5 Configuracixn del cliente

El cliente SSH (ssh) utiliza el fichero de configuracixn:

/etc/ssh/ssh_config

y demxs, el fichero:

~/.ssh/config

si es que existe. Los parxmetros especificados en xl prevalecen sobre el fichero sshxconfig. La informacixn completa sobre este fichero puede obtenerse mediante man

sshxconfig.

Vexmos las principales opciones que podemos configurar:

Host: Especifica el host al que se aplican los parxmetros que aparecen a continuacixn. Un “*” (que es el valor por defecto) referencia a todos los hosts. Nxtese que el los sistemas en los que comparte el directorio “/etc” esto puede ser muy xtil.

ForwardAgent: Indica si la conexixn con el agente de autentificacixn (si es que existe) serx redirigido a la mxquina remota. Por defecto, no.

ForwardX11: Se utiliza para hacer que las conexiones X11 sean automxticamente redirigidas sobre el canal seguro (utilizando la variable de entorno DISPLAY). Por defecto es que no.

ForwardX11Trusted: Especifica si el cliente X11 tendrx acceso sin restricciones al servidor. Por defecto es que sx tendrx acceso total.

RhostsRSAAuthentication: Especifica si usar el fichero rhosts con RSA (ver configuracixn del servidor). Por defecto, no.

RSAAuthentication: Especifica si usar RSA authentication (ver configuracixn del servidor). Por defecto, sx.

PasswordAuthentication: Indica si usar autentificacixn basada en password. Por defecto, sx.

HostbasedAuthentication: Especifica si usar la autentificacixn basada en rhosts con la autentificacixn de clave pxblica. Por defecto, no.

BatchMode: Permite deshabilitar la pregunta sobre el password. Por defecto, no.

CheckHostIP: Por defecto estx habilitada. Si se deshabilita el cliente SSH no comprobarx si el servidor figura en el fichero /etc/ssh/sshxknownxhosts. Esto permite detectar el DNS spoofing (el que alguien inserte en el DNS una IP falsa para un host).

AddressFamily: Tipos de direcciones IP aceptadas. Por defecto any.

ConnectTimeout: El TCP utiliza un temporizador para mantener activa la conexixn enviando un paquete de datos vacxo, aunque no exista actividad. Con esta opcixn hacemos que sea el SSH el que se encarge de este proceso, en lugar del TCP. Un valor a 0 indica que esta opcixn seguirx siendo controlada por el TCP.

StrictHostKeyChecking: Si este flag se activa a yes, el cliente SSH no axadirx el key host al fichero x/.ssh/knownxhosts, y por tanto, rechararx la conexixn con aquellos hosts que hallan cambiado su host key (por ejemplo, porque han reinstalado el sistema operativo).

IdentityFile: Espeficica el fichero con el identificador DSA. En la versixn 1 del protocolo apunta al fichero x/.ssh/identity. En la versixn 2 puede apuntar al fichero x/.ssh/idxrsa and x/.ssh/idxdsa, dependiendo del algoritmo de cifrado usado.

Port: Puerto donde espera encontrar al servidor. 22, por defecto.

Protocol: Versixn del protocolo. 2, por defecto.

Cipher: Especifica el cifrador en la versixn 1 del protocolo. Por defecto, 3des.

Ciphers: Cifradores para la versixn 2, por orden de preferencia. Por defecto, aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes2
56-cbc.

EscapeChar: Por defecto vale el carxcter ~ (<AltxGr>x+x<4>) y se utiliza para realizar acciones como terminar la conexixn (~.), enviar un BREAK al sistema remoto (~B), acceder al interprete de comandos del cliente (~C), mostrar las conexiones redirigidas (~#), etc.

Tunnel: Esta opcixn por defecto vale no y se utiliza para evitar tener que utilizar la capa de red del TCP/IP. Los otros posibles valores son: yes, point-to-point

y ethernet.

TunnelDevice: Selecciona el interface de red sobre el que realizar el tunneling. Por defecto, any:any.

PermitLocalCommand: Controla la posibilidad de ejecutar comandos en la mxquina local (no en la remota) usando la secuencia de escape xC. Por defecto, no.

SendEnv: Sirve para especificar el contenido de una variable de entorno (generalmente LANG que controla el lenguaje utilizado en el shell).

HashKnownHosts: Se usa para aplicar un hashing sobre los nombres de host y direcciones que se especifican en x/.ssh/knownxhosts. No, por defecto.

GSSAPIAuthentication: Permitir autentificacixn GSSAPI. Por defecto, no.

Uso de SSH

[next] [prev] [prev-tail] [tail] [up] 9.6 Uso de SSH

SSH es uno de los programas con los que tendremos que lidiar todos los dxas que estamos trabajando en una mxquina con Unix o Linux. Vexmos algunos ejemplos de uso txpicos.

9.6.1 Accediendo a un host remoto Para acceder al host remoto utilizamos el cliente ssh. En ese momento se producirx el proceso de autentificacixn del servidor y el proceso de identificacixn y autentificacixn del usuario. Dependiendo del esquema de autentificacixn de usuario existen distintas alternativas:

Autentificacixn basada en password: Suele ser la forma mxs corriente de acceder al host remoto:

usuario$xsshxhost_remoto

Con este comando estamos accediendo al host utilizando el usuario usuario. Cuando queramos acceder con otro nombre de usuario utilizaremos:

usuario$xsshxnombre_de_usuario@host_remoto

Taller 9.1: Instale un servidor SSH. Acceda a su cuenta en su host usando SSH. Pruebe tambixn a hacerlo como administrador.

Autentificacixn basada en clave pxblica: Como indicamos, el usuario se autentifica probando que es capaz de firmar (descifrar y cifrar) el desafxo que le plantea el servidor. Para poder hacer esto son necesarios los siguientes pasos:

Generar las claves de autentificacixn:

#xPorxcuriosidadxmostramosxelxcontenidoxdelxdirectoriox"~/.ssh".
xusuario$xlsx-lx$HOME/.ssh/
xtotalx4
x-rw-r--r--x1xusuarioxusuariox1866x2007-02-08x15:12xknown_hosts
xv
x#xGeneracixnxdexlaxclavexusandoxRSA.
xusuario$xssh-keygenx-txrsa
x#xSelecionarxelxficheroxdexsalidaxquexsexespecificaxporxdefecto.
x#xLaxclavexdeberxaxtenerxalxmenosx20xcaracteres.
x
x#xPorxcuriosidadxmostramosxelxcontenidoxdelxdirectoriox"~/.ssh".
xusuario$xlsx-lx$HOME/.ssh/
xtotalx12
x-rw-------x1xusuarioxusuariox1743x2007-02-08x22:19xid_rsa
x-rw-r--r--x1xusuarioxusuarioxx405x2007-02-08x22:19xid_rsa.pub
x-rw-r--r--x1xusuarioxusuariox1866x2007-02-08x15:12xknown_hosts
x
x#xComprobamosxquexlaxclavexpxblicaxsexhaxgenerado.
xusuario$xcatx~/.ssh/id_rsa.pub
xssh-rsaxAAAAB3NzaC1yc2EAAAABIwAAAQEA5HgtUR6OfvEIUv6m2xXM6QK3MH0Z6\
x74btlJ20XDTAfh0llRgiDxnqrH492ZwH0r6EjVfkH6KhB9R2Duxvpzp4LeBWZ0ouL\
xE5MiJBe0aR7CBUcjkq8FzLL3Caf0c7w3Dbtldn4zQdIoHswsD8sFyk2vT4a3QXBV/\
xU3Q0DvCXyb5kZp7JOfzNAMJbCD6IVEbDrwqfu4JfTOXAWY8ckofq9zFK+JtkB9XJy\
xa7pVJVtI0dKCnVTw3oU4eufj4OxwSGnAyVrf9rEv6jB+4R7tCQZdtuJO7SPAUbJsc\
xrD4qjnOz/BDvx2LUQuQXMrbr7GQ+lBNC6gZWcUF33RGc+wIAjvR8Q==\
xxusuario@debian.ace.ual.es

Enviar la clave pxblica al servidor:

#xAxadimosxlaxclavexpxblicaxaxnuestroxficheroxdexclavesxpxblicasxenxel
x#xhostxremoto.
xusuario$xsshx<host_remoto>x"mkdirx.ssh/;xumaskx077;xcatx>>x.ssh/authorized_keys"x<x~/.ssh/id_rsa.pub

En este punto deberxamos tener ya acceso al host remoto. Para ello se nos preguntarx por la frase que usamos cuando generamos las claves de autentificacixn. Esta forma de autentificacixn sxlo se establecerx cuando accedemos desde el host local usando el usuario usuario. Si accedemos desde otro host o con otro nombre de usuario, se utiliza la autentificacixn mediante password.

Taller 9.2: Pruebe la autentificacixn basada en clave pxblica accediendo a un host remoto. Si no dispone de cuenta en un host remoto, utilice su propio host. Emplee en este caso una cuenta de usuario distinta.

Autentificacixn basada en el host del usuario: Para habilitar esta forma de autentificacixn debemos tener acceso al host remoto como administrador. Estos son los pasos:

Acceder al host remoto y comprobar que HostbasedAuthentication

= yes y que IgnoreRhosts = no.

Reiniciar el servidor SSH en el host remoto si se ha tenido modificar su configuracixn.

Copiar la host key pxblica del cliente en el servidor. La clave pxblica en el cliente se almacena en /etc/ssh/sshxhostxrsaxkey.pub. Dicha clave debe ser axadida al fichero /etc/ssh/sshxknownxhosts o al fichero

x/.ssh/knownxhosts.

En el servidor, axadir el nombre del host cliente al fichero x/.shosts.

En el cliente, asegurarse de que HostbasedAuthentication = yes.

En el cliente, asegurarse de que la host key privada y pxblica existen. Esta informacixn deberxa estar en los ficheros /etc/ssh/sshxhostxrsaxkey

         y /etc/ssh/sshxhostxrsaxkey.pub, respectivamente.

Debido a que necesitamos disponer de la clave de root en el host remoto, esta forma de autentificacixn es poco corriente. Ademxs, como veremos a continuacixn, la autentificacixn basada en clave pxblica es muy cxmoda y segura si utilizamos un agente SSH.

   9.6.2 Usando ssh-agent y ssh-add

Para que la identificacixn basada en clave pxblica sea realmente segura la frase que usemos para generar la clave de autentificacixn debe ser suficientemente larga (20 caracteres o mxs). Esto puede suponer un embrollo cuando accedemos muchas veces al host remoto.

Para solucionar este problema, el SSH incorpora un demonio llamado ssh-agent que se encarga de escribir por nosotros las frases. Este demonio puede ser invocado por el usuario de la siguiente manera:

#x¿Quxxprocesosxsexestxnxejecutando?
xusuario$xpsxx
xxPIDxTTYxxxxxxSTATxxxTIMExCOMMAND
xxxx:x:xxxxxxxx:xxxxxx:xxxx:
x3096xpts/1xxxxR+xxxxx0:00xpsxx
x
x#xComprobamosxquexentrexlasxvariablesxdexentornoxdeclaradas
x#xnoxaparecenxSSH_AGENT_PIDxyxSSH_AUTH_SOCK.
xusuario$xexport
xdeclarex-xxHISTCONTROL="ignoredups"
xdeclarex-xxHOME="/home/usuario"
xdeclarex-xxLANG="es_ES.UTF-8"
x:
xdeclarex-xxTERM="xterm"
xdeclarex-xxUSER="usuario"
x
x#xLanzamosxelxdemonio.xEstexcomandoxcompruebaxprimeroxquexnoxexiste
x#xyaxunxagentexejecutxndose.xLaxdirectivaxdelxshellx"eval"xpermite
x#xejecutarxssh-agentxconxsuxparxmetro.
xusuario$xtestx-zx"$SSH_AUTH_SOCK"x&&xevalx`ssh-agentx-s`
xAgentxpidx3256
xusuario@debian:~$xexport
xdeclarex-xxHISTCONTROL="ignoredups"
xdeclarex-xxHOME="/home/usuario"
x:
xdeclarex-xxSSH_AGENT_PID="3256"
xdeclarex-xxSSH_AUTH_SOCK="/tmp/ssh-kVGvUg3255/agent.3256"
x:
xdeclarex-xxTERM="xterm"
xdeclarex-xxUSER="usuario"
x
xusuario$xpsxx
xxxPIDxTTYxxxxxxSTATxxxTIMExCOMMAND
xxxxx:x:xxxxxxxx:xxxxxx:xxxx:
xx3056x?xxxxxxxxSsxxxxx0:00xssh-agentx-s
xx3099xpts/1xxxxR+xxxxx0:00xpsxx

Una vez que el demonio estx ejecutxndose, informarle de nuestra clave de autentificacixn pxblica es sencillo:

#xDeberemosxintroducirxlaxclavexpxblicaxintroducidaxen
x#xlaxfasexdexautentificacixnxbasadaxenxclavexpxblica...
xusuario$xssh-add

En este punto, accederemos al host remoto sin necesidad de escribir la frase de acceso porque ssh-agent lo ha hecho por nosotros.

Evidxntemente, como podemos tener acceso a distintas mxquinas con distintas frases de acceso, podemos usar tantas veces ssh-add como deseemos. Para saber qux frases son admistradas en un momento dado por ssh-agent:

usuario$xssh-addx-l

Las frases puede ser eliminadas del demonio usando:

usuario$xssh-addx-dx[fichero_con_la_clave]

Usar man ssh-add para ver el resto de opciones.

Taller 9.3: Haga uso ssh-agent para acceder a un host remoto sin necesidad de introducir la clave pxblica. Si no dispone de cuenta en un host remoto, utilice su propio host y una cuenta de usuario distinta.

9.6.3 Ejecucixn de comandos no interactivos en el host remoto Con SSH es posible ejecutar comandos no interactivos en el host remoto. Un ejemplo:

#xAveriguandoxlosxusuariosxactualesxenxelxhostxremoto
xusuario$xsshx<host_remoto>xwho
x
x#xViendoxelxcontenidoxactualxdelxdirectoriox/tmpxenxelxhostxremoto
xusuario$xsshx<host_remoto>xlsx/tmp
x
x#xCopiandoxunxficheroxalxhostxremoto
xusuario$xcatxficherox|xsshx<host_remoto>x"catx>xfichero"
x
x#xCopiandoxunxdirectorioxcompletoxalxhostxremoto
xusuario$xtarxcvfx-xdirectorio/x|xgzipx-9cx|xsshx<host_remoto>x"tarxxz"

Taller 9.4: Pruebe a ajecutar un comando en un host remoto. Si no dispone de cuenta en un host remoto, hxgalo en su propio host usando una cuenta de usuario distinta.

9.6.4 Verificacixn de la host key Como vimos al comienzo de este mxdulo, SSH incorpora un mecanismo para autentificar al servidor basado en la comparacixn de la host key que envxa el servidor con la que hay almacenada en el fichero x/.ssh/knownxhosts. Si es la primera vez que nos conectamos o por algxn motivo, la host key ha cambiado, es una buena costumbre que comprobemos que dicha clave coindice con la que el servidor generarxa utilizando las herramientas del SSH. Para mostrar la host key en el servidor podemos utilizar el siguiente comando:

#xMostrandoxlaxhostxkeyxdelxservidor.
xusuario$xssh-keygenx-lx-fx/etc/ssh/ssh_host_rsa_key.pub

En el fichero /etc/ssh/sshxhostxrsaxkey.pub se almacena la host key pxblica de forma cifrada usando el algoritmo RSA. En el fichero /etc/ssh/sshxhostxrsaxkey se almacenan la host key privada de forma cifrada usando el algoritmo RSA.

Taller 9.5: Fuerce a que SSH le muestre la host key de un host remoto. Para ello debe borrar la entrada correspondiente a dicho host en el fichero ~/.ssh/known_hosts (puede borrar directamente el fichero). Acceda al host remoto y anote la host key que le muestra el cliente. En el host remoto ejecute el comando que muestra la host key y compruebe que ambas claves coinciden. Si no dispone de cuenta en un host remoto, utilice su propio host y una cuenta de usuario distinta.

9.6.5 Copiando ficheros SSH incorpora una utilidad semejante a cp para copiar ficheros entre hosts de una forma muy sencilla. Algunos ejemplos:

#xCopiandox"fichero"xalxhomexdelxhostxremoto:
xusuario$xscpxficherox<host_remoto>:~
x
x#xCopiandox"fichero"xalx/tmpxdelxhostxremoto:
xusuario$xscpxficherox<host_remoto>:/tmp
x
x#xCopiandox"fichero"xalx/tmpxdelxhostxremotoxyxcambiandoxelxnombre:
xusuario$xscpxficherox<host_remoto>:/tmp/file
x
x#xCopiandoxunx"directorio"xconxtodosxsusxcontenidosxalxhomexdelxhostxremoto:
xusuario$xscpx-rxdirectoriox<host_remoto>:~
x
x#xTambixnxpodemosxutilizarxsftpx(unxintxrpretexsemejantexaxftp)xpara
x#xmoverxficherosxentrexhosts:
xusuario$xsftpx<host_remoto>
x#xLosxcomandosxdexsftpxsonxsimilaresxaxlosxdelxprogramaxftp.
x
x#xPorxxltimo,xpodemosxhacerxcopiasxincrementalesxconxlaxutilidadxrsync:
xusuario$xrsyncx*x<host_remoto>

Taller 9.6: Efectxe una copia remota entre hosts. Si no dispone de cuenta en un host remoto, utilice su propio host y una cuenta de usuario distinta.

9.6.6 SSH forwarding El SSH tiene la habilidad de multiplexar varias conexiones sobre un mismo tunnel cifrado. A esta propiedad se le conoce como forwarding (encaminamiento). Vexmos algunos ejemplos interesantes:

Forwarding del agente de autentificacixn Como vimos anteriormente, el agente de autentificacixn es muy xtil para lidiar con las frases de clave. El problema es que si hemos accedido a un host remoto A y desde xl queremos acceder a otro B usando de nuevo el agente, deberxamos ejecutarlo en A y axadirle las frases. Para conseguir esto podemos hacer dos cosas:

Configurar nuestro cliente para que rediriga el agente:

#xTambixnxvalexelxficherox/etc/ssh/ssh_config
xusuario$xcatx~/.ssh/config
x:
xHostxnombre_host_remoto
xForwardAgentxyes
x:

Invocar al cliente mediante:

#xEstexcomandoxlanzarxxssh-agentxenxelxhostxremotoxyxcopiarxxlasxclaves.
xusuario@host_local$xsshx-Ax<host_remoto>

Para verificar que el redireccionamiento ha funcionado, comprobaremos que el agente en el host remoto contempla nuestras claves:

usuario@host_remoto$xssh-addx-l

Taller 9.7: Redirija ssh-agent hacia un host remoto y compruebe que las claves se han copiado. Si no dispone de cuenta en un host remoto, hxgalo contra su propio host usando una cuenta de usuario distinta.

Redireccionamiento del X11 Cuando usamos SSH desde una consola grxfica, podemos ejecutar aplicaciones grxficas en el host remoto y presentarlas en el host local. Para conseguir esto debemos:

Configurar nuestro cliente para que rediriga el X11:

#xTambixnxvalexelxficherox/etc/ssh/ssh_config
xusuario$xcatx~/.ssh/config
x:
xHostxnombre_host_remoto
xForwardX111xyes
x:

Invocar al cliente mediante:

usuario@host_local$xsshx-Xxnombre_host_remoto

En este punto podrxamos ejecutar una aplicacixn grxfica, un xterm, por ejemplo:

usuario@host_remoto$xxtermx&

Taller 9.8: Para probar la redireccixn del X11 lo ideal es tener cuenta en un host remoto con el servidor X11 y el servidor SSH activados. Si este no es el caso, podemos instalar en el host huxsped (Windows) el software Cygwin (http://www.cygwin.com/) y acceder desde una consola grxfica al host virtual usando SSH. Una vez que hayamos accedido al host virtual lanzaremos alguna aplicacixn grxfica y comprobaremos que la redireccixn ha funcionado. Mxs concretamente:

Instale Cygwin en el host huxsped. Los paquetes que se instalan por defecto instalan un cliente SSH y el sistema grxfico X11.

Ejecute una consola de texto. Tras la instalacixn anterior, en su escritorio deberxa haber aparecido un icono que ejecuta dicha consola.

Escriba en ella:

startxx&

Transcurridos unos segundos deberxa aparecer una ventana con un terminal grxfico (este terminal se invoca con la aplicacixn xterm). En el terminal grxfico realice las siguientes acciones:

#xHabilitamosxelxsistemaxgrxficoxparaxquexcualquierxhostxpueda
x#xenviarxsuxsalidaxgrxficaxX11xaxnuestroxsistema.
xusuario$xxhostx+
x
x#xAccedemosxalxhostxvirtual
xusuario$xsshx-Xx<dir_IP_del_host_virtual>

Cuando estx dentro del host virtual, ejecute una aplicacixn grxfica:

    usuario$xxeyesx&

Redireccionamiento de puertos El redireccionamiento de puertos es una caracterxstica utilxsima de SSH. Con esto podemos acceder a servicios que estxn filtrados por un cortafuegos y cifrar transmisiones sobre redes no seguras.

Antes de mostrar cxmo se realiza el redireccionamiento, una aclaracixn importante. El objetivo del redireccionamiento es codificar la comunicacixn desde nuestro host a otro distinto, situado fuera de nuestra red “segura”. En este sentido podemos encontrarnos los siguientes contextos:

Que el host que ejecuta el servicio no tiene un servidor SSH instalado o no tenemos cuenta de usuario en xl. En este caso deberxamos tener una cuenta en otro host X situado en la misma red segura que el host Y que ejecuta el servicio, y el redireccionamiento se realizarxa desde nuestro host al host X usando un canal seguro y desde el host X al host Y usando un canal inseguro, pero a travxs de la red que se considera segura. Usaremos el txrmino redireccionamiento local indirecto para referirmos a esta posibilidad.

Que tenemos cuenta de usuario en el host que ejecuta el servicio. En este caso sxlo tenemos que redireccionar el puerto desde nuestro host al host remoto. LLamaremos a esta forma de redireccionamiento, redireccionamiento local directo.

Con SSH es posible utilizar servicios que estxn tras un cortafuegos que no permite las conexiones SSH entrantes (desde Internet hacia la red protegida). Esto puede hacerse con el redireccionamiento remoto. Para ello debemos tener acceso fxsico al host que ejecuta el servicio y redirigir el puerto del servicio a un puerto en el host que estx fuera de la red protegida.

Bien, una vez hecha estas aclaraciones explicaremos cxmo redireccionar puertos en cada caso. En los ejemplos que se muestran a continuacixn supondremos que hemos configurado nuestro navegador Web para que utilize un proxy Web situado en nuestro host (homexhost) escuchando en el puerto 1234, aunque dicho servidor estx realmente ejecutxndose en un host remoto que llamaremos squidxhost y al que tenemos acceso mediante SSH. Supondremos ademxs que en la red local (y por tanto, segura) de squidxhost existe otro host remoto remotexhost en el que tambixn tenemos cuenta.

Redireccionamiento local directo: x

#xLaxformaxestxndarxes:
xhome_host@usuario$xsshx-Lx1234:squid_host:3128xsquid_host
x#xNotaximportante:xsix"usuario"xnoxtienexcuentaxcomox"usuario"xen
x#x"squid_host"xyxporxloxtantoxtienexquexespecificarlo,xeste
x#xprocedimientoxpuedexnoxfuncionarx:-(
x
x#xAunquextambixnxfunciona:
xhome_host@usuario$xsshx-Lx1234:localhost:3128xsquid_host

Con este ejemplo, hemos redirigido el puerto 1234 del homexhost al puerto 3128

de host squidxhost.

Redireccionamiento local indirecto: x

home_host@usuario$xsshx-Lx1234:squid_host:3128xremote_host
x#xNotaximportante:xsix"usuario"xnoxtienexcuentaxcomox"usuario"xen
x#x"squid_host"xyxporxloxtantoxtienexquexespecificarlo,xeste
x#xprocedimientoxpuedexnoxfuncionarx:-(

En este ejemplo el puerto 1234 del host local se ha redirigido al puerto 3128 del

host squidxhost a travxs del host remotexhost.

Redireccionamiento remoto: x

squid_host@usuario$xsshx-Rx1234:localhost:3128xhome_host

Redireccionamos el puerto 3128 del host squidxhost al puerto 1234 del host

homexhost.

Taller 9.9: Redirija el puerto 1234 hacia un host remoto que ejecuta Squid en el puerto 3128. Configure su navegador Web para que utilice un proxy escuchando en el host local en el puerto 1234. Compruebe que puede navegar. Utilice como host local el PC huxsped (Windows) y como host remoto el PC virtual (Debian).

Cuestixn 9.1: Imagine que estx utilizando un sistema de cifrado de clave asimxtrica para comunicarse con otra persona. ¿Con qux clave descifrarx un mensaje que ella le ha enviado? ¿Con qux clave cifrarx le mensaje que usted quiere transmitirle?

Cuestixn 9.2: Usted dispone de una cuenta de usuario en un host de la universidad de Almerxa en el que estx ejecutxndose un servidor POP3. Explique qux pasos realizarxa para leer el correo electrxnido cuando estx usando un host externo a la universidad. Nota, el cortafuegos de la universidad impide cualquier conexixn a un host de la universidad desde fuera de la misma, si el servicio usado no es La Web o el SSH.

[next] [prev] [prev-tail] [front] [up] [next] [prev] [prev-tail] [front] [up] 10 Un Pinger basado en el UDP

[next] [prev] [prev-tail] [tail] [up] Prxcticax10Un Pinger basado en el UDP

El objetivo de esta prxctica es implementar una Pinger utilizando el UDP (User Datagram Protocol). Un Pinger es una aplicacixn de red que envxa uno o varios paquetes desde el host que ejecuta la parte cliente hasta el host que ejecuta la parte servidora. Esta los devuelve y permite calcular el RTT (Round-Trip Time) entre ambos hosts.

x10.1 El comando ping x10.2 El ICMP (Internet Control Message Protocol) x10.3 El Pinger xx10.3.1 El servidor xx10.3.2 El cliente

El comando ping

[next] [prev] [prev-tail] [tail] [up] 10.1 El comando ping

Un Pinger es una aplicacixn bxsica de chequeo del estado de la red. Por este motivo, en la mayorxa de los sistemas operativos encontramos una utilidad llamada ping. Vexmos un ejemplo:

pingxwww.google.es
xPINGxwww.l.google.comx(72.14.221.147):x56xdataxbytes
x64xbytesxfromx72.14.221.147:xicmp_seq=0xttl=238xtime=64.6xms
x64xbytesxfromx72.14.221.147:xicmp_seq=1xttl=238xtime=66.7xms
x64xbytesxfromx72.14.221.147:xicmp_seq=2xttl=238xtime=65.1xms
x64xbytesxfromx72.14.221.147:xicmp_seq=3xttl=238xtime=65.5xms
xx(pulsamosx<CTRL>x+x<c>)
x---xwww.l.google.comxpingxstatisticsx---
x4xpacketsxtransmitted,x4xpacketsxreceived,x0%xpacketxloss
xround-tripxmin/avg/maxx=x64.6/65.4/66.7xms

Como podemos ver, por defecto se envxan paquetes cuyo payload contiene 56 bytes, que sumados a los 8 bytes de cabecera del IGMP dan 64 bytes, el tamaxo de los paquetes transmitidos (sin contar la cabecera del IP). Nxtese que no se utiliza ningxn protocolo de la capa de transporte.

El cliente calcula el tiempo que transcurre desde que cada paquete es enviado hasta que es recibido. Para finalizar, alcula el tiempo mxnimo, medio y el mxximo.

El ICMP (Internet Control Message Protocol)

[next] [prev] [prev-tail] [tail] [up]

10.2 El ICMP (Internet Control Message Protocol) La utilidad ping utiliza el protocolo de control de mensajes de Internet o ICMP para funcionar. Dicho protocolo pertenece a la pila de protocolos TCP/IP y contempla un mensaje llamado Echo Request (Peticixn de Eco). Cuando un host funciona adecuadamente, estx conectado a Internet y no ha sido expresamente configurado para denegar las contestaciones Echo Request envxa un mensaje ICMP del tipo Echo Response al host que le ha hecho la peticixn.

Los mensajes de peticixn y de respuesta son generalmente muy cortos. Esto significa que los tiempos de transmisixn son prxcticamente nulos y por tanto, ping se utiliza normalmente para medir el RTT entre nuestro host y el host remoto.

El Pinger

[next] [prev] [prev-tail] [tail] [up] 10.3 El Pinger

El Pinger presentado es una aplicacixn que utiliza el UDP. El cliente envxa paquetes UDP y el servidor los recibe y los retorna. Para descibir ambas partes se ha utilizado el lenguaje de programacixn Java.

10.3.1 El servidor El servidor es bxsicamente un bucle infinito que espera a recibir paquetes UDP. Para ello escucha en el puerto que se le indica por la lxnea de comandos cuando es ejecutado.

Como la mayorxa de las ocasiones tendremos que ejecutar el cliente y el servidor en el mismo host, el servidor puede configurarse para:

Simular la pxrdida de paquetes: Cuando el servidor y el cliente estxn suficientemente alejados (en hops) los paquetes deberxan perderse con una cierta probabilidad. Puesto que UDP no es un protocolo fiable (como el TCP), no todos los paquetes que el cliente envxa van a llegar al servidor y no todos los paquetes que el servidor devuelve al cliente van a llegar a xste.

Sin embargo, dentro del mismo host o incluso en la red de laboratorio, es prxcticamente imposible que se pierdan paquetes. Para simular dicho comportamiento el servidor deja de enviar un eco al cliente con una cierta probabilidad controlada por el parxmetro que llamado LOSSxRATE.

Simular el retraso promedio de los paquetes: El parxmetro AVERAGExDELAY se encarga de retrasar las contestaciones del servidor una determinada cantidad de tiempo, en promedio. De esta forma, se simula ademxs una cierta distancia entre el servidor y el cliente, aunque estos estxn ejecutxndose en el mismo host.

A continuacixn se presenta el cxdigo que implementa el servidor (http://www.ace.ual.es/xvruiz/docencia/redes/practicas/PingServer.java(:

importxjava.io.*;
ximportxjava.net.*;
ximportxjava.util.*;
x
x/*
xx*xUnxservidorxquexprocesaxpeticionesxpingxsobrexUDP.
xx*/
xpublicxclassxPingServerx{
xxxxxprivatexstaticxfinalxdoublexLOSS_RATEx=x0.3;
xxxxxprivatexstaticxfinalxintxAVERAGE_DELAYx=x100;x//xmilisegundos
x
xxxxpublicxstaticxvoidxmain(String[]xargs)xthrowsxExceptionx{
xxxxxxxx/*xComprobamosxquexsexhanxintroducidoxlosxparxmetrosxdexentrada
xxxxxxxxxxxdesdexlaxlxneaxdexcomandos.x*/
xxxxxxxifx(args.lengthx!=x1)x{
xxxxxxxxxxxSystem.out.println("Youxmustxspecifyxaxport");
xxxxxxxxxxxreturn;
xxxxxxx}
x
xxxxxxx/*xPuertoxdexescuchaxdelxservidor.x*/
xxxxxxxintxportx=xInteger.parseInt(args[0]);
x
xxxxxxx/*xUsaremosxunxgeneradorxdexnxmerosxaleatoriosxparaxsimularxla
xxxxxxxx*xpxrdidaxdexpaquetesxyxelxretrasoxdexlaxred.x*/
xxxxxxxRandomxrandomx=xnewxRandom();
x
xxxxxxx/*xCreamosxunxsocketxdextipoxDatragramSocketxparaxrecibirxy
xxxxxxxx*xenviarxpaquetesxUDP.x*/
xxxxxxxDatagramSocketxsocketx=xnewxDatagramSocket(port);
x
xxxxxxx/*xProcessingxloop.x*/
xxxxxxxwhilex(true)x{
x
xxxxxxxxxxx/*xCreamosxlaxestructuraxdexdatosxquexnosxservirxxpara
xxxxxxxxxxxxxxalmacenarxunxpaquetexUDP.x*/
xxxxxxxxxxxDatagramPacketxrequestx=xnewxDatagramPacket(newxbyte[1024],x1024);
x
xxxxxxxxxxx/*xNosxbloqueamosxhastaxquexsexrecibexelxsiguientexpaquete
xxxxxxxxxxxxxxUDP.x*/
xxxxxxxxxxxsocket.receive(request);
x
xxxxxxxxxxx/*xImprimimosxelxpayloadxdelxpaquete.x*/

xxxxxxxxxxxprintData(request);
x
xxxxxxxxxxx/*xDecidimosxsixresponderxoxsimularxlaxpxrdidaxdelxpaquete.x*/
xxxxxxxxxxxifx(random.nextDouble()x<xLOSS_RATE)x{
xxxxxxxxxxxxxxxSystem.out.println("xxxReplyxnotxsent.");
xxxxxxxxxxxxxxxcontinue;
xxxxxxxxxxx}
x
xxxxxxxxxxx/*xSimulamosxelxretrasoxdexlaxred.x*/
xxxxxxxxxxxThread.sleep((int)x(random.nextDouble()x*x2x*xAVERAGE_DELAY));
x
xxxxxxxxxxx/*xEnviamosxlaxrespuesta.x*/
xxxxxxxxxxxInetAddressxclientHostx=xrequest.getAddress();
xxxxxxxxxxxintxclientPortx=xrequest.getPort();
xxxxxxxxxxxbyte[]xbufx=xrequest.getData();
xxxxxxxxxxxDatagramPacketxreplyx=xnewxDatagramPacket(buf,xbuf.length,xclientHost,xclientPort);
xxxxxxxxxxxsocket.send(reply);
xxxxxxxxxxxSystem.out.println("xxxReplyxsent.");
xxxxxxx}
xxxx}
x
xxxxx/*
xxxxxx*xImprimexlosxdatosxdelxdatagramax(payload)xsobrexlaxsalidaxestxndar.
xxxxxx*/
xxxxxprivatexstaticxvoidxprintData(DatagramPacketxrequest)xthrowsxExceptionx{
xxxxxxxxx/*x"buf"xapuntaxalxcomienzoxdexlosxdatosxenxelxpaquete.x*/
xxxxxxxxxbyte[]xbufx=xrequest.getData();
x
xxxxxxxxx/*xConvertimosx"buf"xenxunxstreamxdexentradaxdexbytes.x*/
xxxxxxxxxByteArrayInputStreamxbaisx=xnewxByteArrayInputStream(buf);
x
xxxxxxxxx/*xConvertimosx"bais"xenxunxstreamxdexentradaxdexcaracteres.x*/
xxxxxxxxxInputStreamReaderxisrx=xnewxInputStreamReader(bais);
x
xxxxxxxxx/*xConvertimosx"isr"xenxunxstreamxdexentradaxdexcaracteres
xxxxxxxxxxxxbuffereado.xAsxxpodremosxleerxlxneasxcompletas.xUnaxlxnea
xxxxxxxxxxxxesxcualquierxcombinacixnxdexcaracteresxquexacabaxen
xxxxxxxxxxxxcualquierxcombinacixnxdex\rxyx\n.x*/
xxxxxxxxxBufferedReaderxbrx=xnewxBufferedReader(isr);
x
xxxxxxxxx/*xLosxdatosxdelxmensajexestxnxcontenidosxenxunaxxnica
xxxxxxxxx//xlxnea.xAsxxlaxleemos.x*/
xxxxxxxxxStringxlinex=xbr.readLine();
x
xxxxxxxxx/*xImprimimosxlaxdireccixnxdelxhostxquexenvxaxelxmensajexyxlos
xxxxxxxxx//xdatosxdelxmismo.x*/

xxxxxxxxxSystem.out.println("Receivedxfromx"x+
xxxxxxxxxxxxxxxxxxxxxxxxxxxxrequest.getAddress().getHostAddress()x+
xxxxxxxxxxxxxxxxxxxxxxxxxxxx":x"x+
xxxxxxxxxxxxxxxxxxxxxxxxxxxxnewxString(line)x);
xxxxx}
x}

Taller 10.1: Compile el servidor usando el comando:

#xEstexcomandoxgeneraxelxficherox"PingServer.class".
xjavacxPingServer.java

Taller 10.2: Ejecute el servidor con el comando:

     #xRecuerdexquexhayxquexutilizarxunxpuertoxmayorxquex1024
     x#xsixnoxsomosxelxusuarioxroot.
     x#xElxficherox"PingServer.class"xdeberxaxexistirxenxelxdirectorioxactual.
     xjavaxPingServerx6789

10.3.2 El cliente El cliente envxa 10 peticiones de ping al servidor especificado. Cada mensaje contiene un payload de datos donde figura la cadena PING, un nxmero de secuencia y una estxmpa de tiempo.

Tras enviar un paquete, el cliente espera hasta un segundo para recibir una respuesta. Si transcurrido este tiempo xsta no llega, el cliente supone que su paquete de peticixn o el paquete de respuesta se ha perdido.

A continuacixn se muestra el cxdigo del cliente (http://www.ace.ual.es/xvruiz/docencia/redes/practicas/Client.java):

importxjava.io.*;
ximportxjava.net.*;
ximportxjava.util.*;
x
x/*
xx*xUnxclientexquexgeneraxpeticionesxpingxsobrexUDP.
xx*/
x
xpublicxclassxPingClientx{
xxxxxpublicxstaticxfinalxStringxCRLF="\r\n";
x
xxxxxpublicxstaticxvoidxmain(String[]xargs)xthrowsxExceptionx{
x
xxxxxxxxx/*xComprobamosxquexsexhanxintroducidoxlosxparxmetrosxdexentrada
xxxxxxxxxxxxdesdexlaxlxneaxdexcomandos.x*/
xxxxxxxxxifx(args.lengthx!=x2)x{
xxxxxxxxxxxxxSystem.out.println("Youxmustxspecifyxaxserverxandxaxport");
xxxxxxxxxxxxxreturn;
xxxxxxxxx}
x
xxxxxxxxx/*xObtenemosxlaxdirxIPxdelxservidorxaxpartirxdexsuxnombre.x*/
xxxxxxxxxInetAddressxserverAddressx=xInetAddress.getByName(args[0]);
x
xxxxxxxxx/*xObtenemosxelxpuertoxenxelxquexescuchaxelxservidor.x*/
xxxxxxxxxintxserverPortx=xInteger.parseInt(args[1]);
x
xxxxxxxxx/*xCreamosxunxsocketxdextipoxDatragramSocketxparaxrecibirxy
xxxxxxxxxx*xenviarxpaquetesxUDP.x*/
xxxxxxxxxDatagramSocketxsocketx=xnewxDatagramSocket();
x
xxxxxxxxx/*xAsignamosxunxtiempoxmxximoxdexesperaxdexrecepcixnxaxtravxs
xxxxxxxxxx*xdexestexsocketx(time-out)xdexunxsegundo.x*/
xxxxxxxxxsocket.setSoTimeout(1000);
x
xxxxxxxxx/*xCreamosxlaxestructuraxdexdatosxquexalmacenarxxunxpaquetexUDP.x*/
xxxxxxxxxDatagramPacketxreplyx=xnewxDatagramPacket(newxbyte[1024],x1024);
x
xxxxxxxxx/*xEnviamosxlosx10xpaquetes.x*/
xxxxxxxxxforx(intxi=0;xi<10;x++i)x{
x
xxxxxxxxxxxxx/*xGeneramosxelxpayloadxdelxpaquetexconxelxinstantexenxque
xxxxxxxxxxxxxx*xelxmismoxesxgenerado.x*/

xxxxxxxxxxxxxlongxsendingDatex=x(newxDate()).getTime();
xxxxxxxxxxxxxStringxpayloadx=x"Pingx"x+x(i+1)x+x"x"x+xsendingDatex+xCRLF;
xxxxxxxxxxxxxDatagramPacketxrequestx=
xxxxxxxxxxxxxxxxxnewxDatagramPacket(payload.getBytes(),
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxpayload.getBytes().length,
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxserverAddress,
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxserverPort);
x
xxxxxxxxxxxxxSystem.out.print("Packetxsentxwithxpayload:x"x+xpayload);
x
xxxxxxxxxxxxx/*xEnvismosxelxpaquete.x*/
xxxxxxxxxxxxxsocket.send(request);
x
xxxxxxxxxxxxx/*xEsperamosxlaxrespuestaxdelxservidor.x*/
xxxxxxxxxxxxxtryx{
xxxxxxxxxxxxxxxxxsocket.receive(reply);
xxxxxxxxxxxxx}
xxxxxxxxxxxxxcatch(SocketTimeoutExceptionxe)x{
xxxxxxxxxxxxxxxxx/*xSexhaxproducidoxunxtime-out.x*/
xxxxxxxxxxxxxxxxxSystem.out.println("Notxresponsexfromxserver");
xxxxxxxxxxxxxxxxxcontinue;
xxxxxxxxxxxxx}
x
xxxxxxxxxxxxx/*xCalculamosxelxtiempoxquexelxpaquetexhaxtardadoxenxregresar.x*/
xxxxxxxxxxxxxlongxreceivingDatex=x(newxDate()).getTime();
xxxxxxxxxxxxxSystem.out.println("Packetxreceivedxafterx"x+
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(receivingDate-sendingDate)x+x"xmiliseconds");
xxxxxxxxx}
xxxxx}
x}

Taller 10.3: Compile y ejecute el cliente:

javacxPingClient.java
xjavaxPingClientxlocalhostx6789

Cuestixn 10.1: Escriba una versixn del cliente y del servidor Pinger usando el lenguaje de programacixn C.

Cuestixn 10.2: Compruebe que sus versiones funcionan y muxstreselo al profesor.

Cuestixn 10.3: Compruebe que puede intercambiar una de sus aplicaciones por la respectiva aplicacixn escrita en Java. Muxstreselo al profesor.

Cuestixn 10.4: Entregue una copia impresa del cxdigo del cliente y del servidor que usted ha escrito al profesor.

11 Un servidor simple basado en el TCP

[next] [prev] [prev-tail] [tail] [up] Prxcticax11Un servidor simple basado en el TCP

En esta prxctica vamos a disexar un servidor simple basado en el TCP. El objetivo es entender cxmo funciona la API del TCP tanto en C como en Java.

x11.1 El servidor x11.2 El cliente

El servidor

[next] [prev] [prev-tail] [tail] [up] 11.1 El servidor

Nuestro servidor es una aplicacixn escrita en C que mantiene una variable que puede ser modificada por los clientes. Cada cliente es servido en un hilo diferente que perdura tanto tiempo como la conexixn con el cliente. Como puede haber mxs de un cliente conectados de forma simultanea, se trata, por tanto, de un servidor concurrente.

El servidor imprimirx por la consola el valor actual de la variable compartida. Este proceso se ejecutarx hasta que no pulsemos <CTRL>+<C> en la consola donde hemos ejecutado el servidor.

A continuacixn se muestra el cxdigo fuente del servidor (http://www.ace.ual.es/xvruiz/docencia/redes/practicas/servidor.c):

/*
xx*xservidor.c
xx*
xx*xAceptaxconexionesxTCPxaxtravxsxdelxpuertoxPORTxparaxquexdistintos
xx*xclientesxpuedanxmodificarxunaxvariablexcompartida
xx*x(shared_value).xLasxaccionesxquexpuedenxrealizarxlosxclientes
xx*xdependexdelxvalorxespecificadoxenxcadaxinteraccixn.xSixelxvalor
xx*xintroducidoxesx<=-2,xelxclientexesxdesconectado.xSixelxvalor
xx*xintroducidoxesx-1,xelxclientexesxinformadoxdelxvalorxactualxdexla
xx*xvariablexcompartida.xEnxcualquierxotroxcaso,xelxvalorxintroducido
xx*xesxtomadoxporxlaxvariablexcompartida.
xx*
xx*xParaxdetenerxelxservidor,xpulsarx<CTRL>+<C>xenxlaxconsolaxdondexse
xx*xlanzxxelxservidor.
xx*
xx*xCompilarxescribiendo:
xx*
xx*xgccxservidor.cx-oxservidorx-lpthread
xx*
xx*xgse.x2007.
xx*
xx*/
x
x/******************************************************************************
xx*
xx*xFicherosxcabecera.
xx*
xx*****************************************************************************/
x
x/*xEntradaxyxsalidaxdexstreamsxbuffereados.x*/
x#includex<stdio.h>
x
x/*xBibliotecaxdexfuncionesxestxndarx(exit(),xEXIT_SUCCESS,
xxxxEXIT_FAILURE,x...)x*/
x#includex<stdlib.h>
x
x/*xManipulacixnxdexcadenasxyxmovimientoxdexmemoriax(memset(),x...).x*/
x#includex<string.h>
x
x/*xBibliotecaxestxndarxdexfuncionesxrelacionadasxconxelxsistema
xxxxoperativoxUnixx(read(),xwrite(),x...).x*/
x#includex<unistd.h>

x/*xPOSIXxThreadsx(pthread_t,xpthread_create(),x...).x*/
x#includex<pthread.h>
x
x/*xSockets.x*/
x/*xMxsxinfoxen:
xx*
xx*xhttp://www.csce.uark.edu/~aapon/courses/os/examples/concurrentserver.c
xx*xhttp://beej.us/guide/bgnet/
xx*/
x
x/*xTiposxdexdatosxprimitivosxdelxsistema.x*/
x#includex<sys/types.h>
x
x/*xSocketsx(socket(),xlisten(),x...).x*/
x#includex<sys/socket.h>
x
x/*xDireccionesxIP,xopcionesxyxdefiniciones.x*/
x#includex<netinet/in.h>
x
x/*xServicioxdexresolucixnxdexnombres.x*/
x#includex<netdb.h>
x
x/*xSignalsx(interrupciones)x(signal(),xSIGINT).x*/
x#includex<signal.h>xx/*xsignal(),xSIGINTx*/
x
x/******************************************************************************
xx*
xx*xDefiniciones.
xx*
xx*****************************************************************************/
x
x/*xPuertoxdexescuchaxdelxservidor.x*/
x#definexPORTx6789
x
x/*xNxmeroxmxximoxdexclientesxquexesperanxaxquexlaxconexixnxsea
xxxxestablecida.x*/
x#definexQLENx1
x
x/******************************************************************************
xx*
xx*xVariablexglobales.
xx*
xx*****************************************************************************/
x
x/******************************************************************************

xx*xFunciones.
xx*
xx*****************************************************************************/
x
x/*xCuerpoxprincipalxdelxprograma.x*/
xintxmain(intxargc,xcharx*argv[])x{
xxxwork(argc,xargv);
xxxreturnxEXIT_SUCCESS;
x}
x
x/*xFuncixnxquexrealizaxtodoxelxtrabajo.x*/
xwork(intxargc,xcharx*argv[])x{
x
xxx/*xUnxsemxforoxparaxaccederx"enxexclusixnxmutua"xaxunaxzonaxde
xxxxxxcxdigo.x*/
xxxpthread_mutex_txmut;
x
xxx/*xCreamosxelxsemxforo.x*/
xxxpthread_mutex_init(&mut,xNULL);
x
xxx/*xLaxvariablexcompartidaxquexpuedexserxcontroladaxporxlosxclientes.x*/
xxxintxshared_valuex=x0;
x
xxx/*xCreamosxelxsocketxTCPxdexescucha.x*/
xxxintxlisten_sd;x{
x
xxxxx/*xObtenemosxelxnxmeroxdelxprotocolo.x*/
xxxxxstructxprotoentx*ptrp;x/*xPointerxtoxaxprotocolxtablexentry.x*/
xxxxxptrpx=xgetprotobyname("tcp");
xxxxxif((int)(ptrp)x==x0)x{
xxxxxxxperror("getprotobyname");
xxxxxxxexit(EXIT_FAILURE);
xxxxx}
x
xxxxx/*xCreamosxelxsocket.x*/
xxxxxlisten_sdx=xsocketx(PF_INET,xSOCK_STREAM,xptrp->p_proto);
xxxxxif(listen_sdx<x0)x{
xxxxxxxperror("socket");
xxxxxxxexit(EXIT_FAILURE);
xxxxx}
x
xxxxx/*xUsaremosxelxpuertoxdexservicioxsinxesperarxaxquexxstexestx
xxxxxxxxlibre.x*/
xxxxxintxyesx=x1;
xxxxxif(setsockopt(listen_sd,xSOL_SOCKET,xSO_REUSEADDR,x&yes,xsizeof(int))x<x0)x{

xxxxxxxperror("setsockopt");
xxxxxxxexit(EXIT_FAILURE);
xxxxx}
xxx}
x
xxx/*xAsignamosxunaxdireccixnx(dirxIP,xpuerto)xalxsocketxdexescucha.x*/x{
xxxxxstructxsockaddr_inxsad;xxxxxxxxxxxxxx/*xDireccixnxdelxservidor.x*/
xxxxxmemset((charxx*)&sad,0,sizeof(sad));x/*xBorramosxlaxestructura.x*/
xxxxxsad.sin_familyx=xAF_INET;xxxxxxxxxxxx/*xUsaremosxInternet.x*/
xxxxxsad.sin_addr.s_addrx=xINADDR_ANY;xxxx/*xCualquieraxdexlasxIP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxasignadasxalxhostxvale.x*/
xxxxxsad.sin_portx=xhtons((u_short)PORT);x/*xAsignamosxelxpuertoxde
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxescucha.x*/
xxxxxifx(bind(listen_sd,x(structxsockaddrx*)&sad,xsizeofx(sad))x<x0)x{
xxxxxxxperror("bind");
xxxxxxxexit(EXIT_FAILURE);
xxxxx}
xxx}
x
xxx/*xComenzamosxaxescuchar.x*/
xxxifx(listen(listen_sd,xQLEN)x<x0)x{
xxxxxperror("listen");
xxxxxexit(EXIT_FAILURE);
xxx}
x
xxxfprintf(stderr,"%s:xesperandoxconexionesx...\n",xargv[0]);
x
xxx/*xSixpulsamosxCRTL+C,xelxprogramaxacabaxejecutandoxlaxfuncixn
xxxxxxend().x*/
xxxvoidxend()x{
xxxxxfprintf(stderr,"%s:x<CTRL>+<C>xdetectado.xSaliendox...\n",argv[0]);
x
xxxxx/*xCerramosxelxsocketxdexescucha.x*/
xxxxxclose(listen_sd);
x
xxxxx/*xSalimos.x*/
xxxxxexit(EXIT_SUCCESS);
xxx}
xxxsignal(SIGINT,xend);
x
xxx/*xLazoxdelxservidor.x*/
xxxwhile(1)x{
x
xxxxx/*xSocketxparax"servir"xaxlosxclientes.x*/
xxxxxintxserve_sd;

xxxxx/*xEsperamosxaxquexunxclientexsexconecte.x*/x{
xxxxxxxstructxsockaddr_inxcad;xxxxxxxx/*xClient'sxaddress.x*/
xxxxxxxsocklen_txalenx=xsizeof(cad);xx/*xTamaxoxdexlaxdireccixn.x*/
xxxxxxxserve_sdx=xaccept(listen_sd,x(structxsockaddrx*)&cad,x&alen);
xxxxxxxif(serve_sd<0)x{
xxxxxxxxxperror("accept");
xxxxxxxxxexitx(EXIT_FAILURE);
xxxxxxx}
xxxxx}
x
xxxxxfprintf(stderr,"%s:xconexixnxaceptada!\n",argv[0]);
x
xxxxx/*xHiloxquexcontrolaxaxunxcliente.x*/
xxxxxvoidx*service(voidx*arg)x{
x
xxxxxxx/*xElxsocketxdexconmunicacixnxconxelxcliente.xNxtesexquexcada
xxxxxxxxxxclientexposeexunaxvariablex"sd"xdiferente.x*/
xxxxxxxintxsdx=x(int)arg;
x
xxxxxxxfor(;;)x{
xxxxxxxxxintxnew_shared_value;
x
xxxxxxxxxinform_to_client(sd,xshared_value);
xxxxxxxxxreceive_from_client(sd,x&new_shared_value);
x
xxxxxxxxx/*xLoopingxmientrasxnew_shared_valuex>x-2.x*/
xxxxxxxxxif(new_shared_valuex<x-1)xbreak;
x
xxxxxxxxx/*xModificamosxshared_valuexmientrasxnew_shared_valuex>x-1.x*/
xxxxxxxxxif(new_shared_valuex>x-1)x{
xxxxxxxxxxx/*xSeccixnxcrxtica.x*/
xxxxxxxxxxxpthread_mutex_lock(&mut);
xxxxxxxxxxxshared_valuex=xnew_shared_value;
xxxxxxxxxxxfprintf(stderr,"%s:xshared_valuex=x%d\n",xargv[0],xshared_value);
xxxxxxxxxxxpthread_mutex_unlock(&mut);
xxxxxxxxxxx/*xFinxdexlaxseccixnxcrxtica.x*/
xxxxxxxxx}
x
xxxxxxx}
x
xxxxxxx/*xElxclientexhaxintroducidox-2.x*/
x
xxxxxxx/*xCerramosxlaxconexixnxconxelxcliente.x*/
xxxxxxxclose(sd);
x
xxxxxxx/*xFinalizamosxelxhilo.x*/

xxxxxxxpthread_exit(0);
xxxxx}
x
xxxxx/*xLanzamosxelxhilo.x*/
xxxxxpthread_txservice_tid;x/*xThreadxidentificator.x*/
xxxxxif(pthread_create(&service_tid,xNULL,xservice,x(voidx*)serve_sd)x==x-1)x{
xxxxxxxperror("pthread_create");
xxxxxxxexit(EXIT_FAILURE);
xxxxx}
xxx}
x
x}
x
x/*xInformaxaxunxclientexsobrexelxvalorxdexshared_value.x*/
xinform_to_client(intxsd,xintxshared_value)x{
xxxcharxmessage[80];
xxxmemset(message,x80,x0);
xxxsprintf(message,"shared_valuex=x%d.xIntroduzcaxnuevoxvalorx...x",xshared_value);
xxxsend(sd,xmessage,xstrlen(message),x0);
x}
x
x/*xRecibexdelxclientexunxnuevoxvalor.x*/
xreceive_from_client(intxsd,xintx*shared_value)x{
xxxcharxmessage[80];
xxxread_text_line(sd,xmessage);
xxxsscanf(message,"%d",shared_value);
x}
x
x/*xLeexunaxlxneaxdextextoxASCII.x*/
xread_text_line(intxsd,xcharx*str)x{
xxxintxn;
xxxdox{
xxxxxnx=xrecv(sd,xstr,x1,x0);
xxx}xwhilex(n>0x&&x*str++x!=x'\n');
x}

Taller 11.1: Compile el servidor escribiendo:

gcc␣servidor.c␣-o␣servidor␣-lpthread

Taller 11.2: Ejecute el servidor escribiendo:

./servidor

El cliente

[next] [prev] [prev-tail] [tail] [up] 11.2 El cliente

El usar un socket TCP y transmitir los datos en ASCII nos permite utilizar el programa Telnet como cliente. He aqux una interaccixn ejemplo:

usuario$xtelnetxlocalhostx6789
xTryingx127.0.0.1...
xConnectedxtoxlocalhost.
xEscapexcharacterxisx'^]'.
xshared_valuex=x0.xIntroduzcaxnuevoxvalorx...x3
xshared_valuex=x3.xIntroduzcaxnuevoxvalorx...x-1
xshared_valuex=x3.xIntroduzcaxnuevoxvalorx...x-2
xConnectionxclosedxbyxforeignxhost.

Como puede verse, en cada interaccixn el cliente obtiene el valor actual de la variable compartida shared_value y puede especificar un valor distinto. En funcixn del valor especificado podemos:

Si el valor introducido es menor o igual que -2, el cliente desea cerrar la conexixn con el servidor.

Si el valor introducido es -1, el cliente desea conocer el valor actual de la variable compartida (sin alterar su valor). Txngase en cuenta que desde que se recibe el xltimo valor de la variable compartida hasta que otra es introducida, otro cliente ha podido modificar dicho valor. Por tanto, especificar el mismo valor que el actual no valdrxa como consulta.

Si el valor introducido es mayor o igual que 0, el cliente modifica el valor de la variable compartida.

Cuestixn 11.1: Escriba una versixn del servidor usando el lenguaje de programacixn Java.

Cuestixn 11.2: Compruebe que su versixn funciona y muxstreselo al profesor.

Cuestixn 11.3: Entregue una copia impresa del servidor que usted ha escrito al profesor.

[next] [prev] [prev-tail] [front] [up] [next] [prev] [prev-tail] [front] [up] 12 DHCP (Dynamic Host Configuration Protocol)

[next] [prev] [prev-tail] [tail] [up] Prxcticax12DHCP (Dynamic Host Configuration Protocol)

El DHCP [4], como su nombre indica, es un protocolo para la configuracixn dinxmica del IP en los hosts. Este protocolo sirve fundamentalmente para dos cosas: (1) que dicha configuracixn no se tenga que realizar a mano (muy xtil cuando hay muchos hosts que configurar o hay que configurar muchas veces con distintos parxmetros un host) y (2) acomodar a mxs hosts que direcciones IP hay disponibles (sxlo en el caso de que nunca todos los hosts estxn encendidos a la vez, claro). Por su comodidad, el DHCP es muy usado en entornos inalxmbricos donde los hosts constantemente entran y salen de las BSS’s (Basic Services Sets).

x12.1 Clientes, servidores y agentes de retransmisixn x12.2 Sobre las configuraciones asignadas x12.3 El proceso de concesixn xx12.3.1 La solicitud de concesixn xx12.3.2 La oferta de concesixn xx12.3.3 La seleccixn de concesixn xx12.3.4 La confirmacixn de seleccixn x12.4 Instalacixn del servidor DHCP x12.5 Configuracixn del servidor x12.6 Configuracixn del cliente x12.7 Configuracixn del TCP/IP en caliente

Clientes, servidores y agentes de retransmisin

[next] [prev] [prev-tail] [tail] [up] 12.1 Clientes, servidores y agentes de retransmisixn

El DHCP es un protocolo cliente-servidor. Un cliente es una computadora que desea configurar su TCP/IP y un servidor es otra que sabe cxmo hacerlo.

Generalmente existe un servidor por subred. Sin embargo, puede ocurrir tambixn que existan muchos o ninguno. El primer caso se suele dar cuando el conjunto de direcciones IP disponibles es tan grande que el trabajo debe ser dividido. El segundo ocurre cuando este conjunto es tan pequexo que no se justifica un servidor en la subred. En este caso un router, que hace de DHCP relay agent, conoce la direccixn IP de un servidor externo y permite que los clientes accedan al servidor DHCP a travxs de Sobre las configuraciones asignadas

[next] [prev] [prev-tail] [tail] [up]

12.2 Sobre las configuraciones asignadas En en sistema DHCP hay uno o varios hosts servidores DHCP que mantienen la base de datos con las configuraciones del resto de hosts que son los clientes DHCP. Las direcciones IPxdisponibles pueden ser asignadas mediante dos polxticas diferentes: (1) estxtica, cuando los mismos hosts siempre reciben las mismas direcciones IPxy (2) dinxmica, cuando las direcciones IPxrecibidas pueden cambiar, dependiendo, por ejemplo, del orden en que se encienden las mxquinas. Al rango estxtico se le suele llamar intervalo de exclusixn mientras que al dinxmico, xmbito. A la suma de ambos conjuntos de direcciones se le llama conjunto de direcciones disponibles.

El proceso de concesin

[next] [prev] [prev-tail] [tail] [up] 12.3 El proceso de concesixn PIC Figurex12.1: Proceso de concesixn utilizando el DHCP [8]. La notacixn es la siguiente: “src”: direccixn IP y puerto origen del paquete, “dest”: direccixn IP y puerto destino el paquete, “yiaddr”: Your Internet ADDRess y “ID”: IDentification.

En la Figura 12.1 se presenta un time-line del proceso de concesixn DHCP. Dicho proceso se realiza siempre bajo demanda del cliente, cuando es encendido o cuando expira la anterior concesixn. Toda la comunicacixn se realiza sobre el UDP.

A continuacixn explicamos con mayor detalle cada uno de los mensajes.

12.3.1 La solicitud de concesixn Cuando un host cliente es encendido o desea renovar su direccixn IPxemite a la direccixn de broadcast de la subred un paquete UDP dirigido al puerto 67 (servicio

bootps∗  ^{∗Vxase el fichero /etc/services.}  )

y que contiene un mensaje del tipo DHCP Discover. Nxtese que el servidor DHCP debe estar, por tanto, en la misma subred que los clientes (excepto cuando existe un relay agent que se encarga de solventar este problema). Este mensaje va a ser recibido por todos los adaptadores conectados a la red local. Tras esta transmisixn, el cliente espera un tiempo a la contestacixn del servidor.

12.3.2 La oferta de concesixn Los servidores DHCP (puede haber muchos) contestan al cliente con un mensaje del tipo DHCP Offer. Este contiene una direccixn IP, la mxscara de la red, la direccixn IP del gateway, la(s) direccixn(es) IP con el/los servidores DNS y el tiempo de prxstamo (lease time) de la direccixn

IP.† †Ocurre que cuando los hosts son apagados (o se bloquean, por ejemplo) no existe una obligacixn de comunicar este hecho a los servidores DHCP. El tiempo de prxstamo sirve para que las direcciones IP puedan ser reutilizadas en estos casos. Como el paquete emitido utiliza el UDP (y por tanto el IP) y el cliente no tiene todavxa una direccixn IP vxlida, no queda mxs remedio que enviarlo, de nuevo, a la direccixn de broadcast de la red.

12.3.3 La seleccixn de concesixn De entre todas las direcciones IP ofertadas, el cliente selecciona una, aunque todavxa no la usa. Entonces envxa un paquete UDP a la direccixn de broadcast de la red con el mensaje DHCP request. En xste replica los datos de la oferta que acaba de recibir.

12.3.4 La confirmacixn de seleccixn Los servidores DHCP van a recibir este mensaje y el que realizx la oferta va a emitir, de nuevo a la direccixn de broadcast de la red, un paquete UDP con el mensaje DHCP Ack (Acknowledgment). Cuando el cliente lo recibe sabe que ya estx en condiciones de utilizar la nueva configuracixn.

Si el servidor finalmente negara al cliente el uso de la configuracixn

ofertada‡ ‡Nxtese que esto puede ocurrir si otro cliente mxs “adelantadillo” ha reclamado antes para sx la concesixn. , en lugar de transmitirse un DHCP Ack se transmitirxa un DHCP NAck (Negative Ack) y todo el proceso comienza de nuevo.

Instalacin del servidor DHCP

[next] [prev] [prev-tail] [tail] [up] 12.4 Instalacixn del servidor DHCP

Vamos a instalar el paquete dhcp3-server (http://www.isc.org/products/DHCP) del Internet Systems Consortium (ISC). En concreto, el comando para instalar el servidor dhcp3 serxa:

#xInstalaxelxservidorxyxelxrelayxagent.
xroot#xapt-getxinstallxdhcp3-server

#xInstalaxelxservidor,xelxrelayxagentxyxelxcliente.
xroot#xyumxinstallxdhcp3

#xInstalaxelxservidor,xelxrelayxagentxyxelxcliente.
xroot#xemergexdhcp

Configuracin del servidor

[next] [prev] [prev-tail] [tail] [up] 12.5 Configuracixn del servidor

El servidor DHCP se configura modificando el fichero de configuracixn correspondiente.

Debian: El fichero de configuracixn del servidor es /etc/dhcp3/dhcpd.conf. No hay ningxn fichero ejemplo, asx que es una buena costumbre hacer una copia de este fichero antes de realizar ninguna modificacixn sobre el mismo.

Fedora core: El fichero de configuracixn del servidor es /etc/dhcpd.conf. Hay

un ejemplo en /usr/share/doc/dhcp-<version>/dhcpd.conf.sample.

Gentoo Linux:

El fichero de configuracixn del servidor es /etc/dhcp/dhcpd.conf. Hay un

ejemplo en /etc/dhcp/dhcpd.conf.sample.

Configuracin del cliente

[next] [prev] [prev-tail] [tail] [up] 12.6 Configuracixn del cliente

La configuracixn del cliente DHCP dhclient recae en el fichero dhclient.conf. La localizacixn de este fichero depende de la distribucixn de Linux:

/etc/dhcp3/dhclient.conf

Fedora Core Linux: x

/etc/dhclient.conf

El fichero dhclient.conf debe ser creado desde cero utilizando un editor de ficheros ASCII.

Gentoo Linux: x

     /etc/dhcp/dhcpd.conf

     Hay una copia en /etc/dhcp/dhcpd.conf.sample.

Los parxmetros que podemos controlar en este fichero van desde seleccionar el timeout de contacto con un servidor DHCP hasta el tiempo mxximo de arrendamiento de la direccixn IP asignada (vxase dhclient.conf(5) para mxs informacixn). Sin embargo, como la mayorxa de estos parxmetros los controla el servidor, rara vez es necesario editarlo. Por este motivo, incluso si dicho fichero no existe el sistema DHCP, funcionarx correctamente (con los parxmetros por defecto).

Configuracin del TCP/IP en caliente

[next] [prev] [prev-tail] [tail] [up] 12.7 Configuracixn del TCP/IP en caliente

Cuando un interfaz de red no estx configurado o deseemos re-configurarlo (usando el DHCP), podemos hacerlo escribiendo:

#xConfigurandoxmediantexDHCPxelxinterfazxdexredxeth0
xroot#xdhclientxeth0
x
x#xOxsimplemente
xroot#xdhclient
x#xsixsxloxexistexunxxnicoxinterfacexdexredx(eth0)

Por supuesto, es necesario tener acceso a un servidor DHCP.

Taller 12.1: Vamos a instalar un servidor DHCP y a usarlo. Para ello ejecute los siguientes pasos:

Ejecute el PC virtual.

Instale el servidor DHCP.

Configurare a mano el IP. Siga los pasos que vix en la Seccixn 4.3.2. Determine la direccixn de la red y la direccixn del gateway que le permita seguir navegando por Internet. Anote estos parxmetros (en adelante supondremos que la red es 192.168.213.0/24 y el gateway

es 192.168.213.2).

Configure el servidor DHCP usando los anteriores parxmetros:

El servidor DHCP darx servicio a una red privada

192.168.213.0/24.

La direccixn IP 192.168.2.4 se asigna siempre de forma estxtica (por ejemplo, para un posible servidor). El resto de direcciones IP se asignan de forma dinxmica.

El tiempo de prxstamo por defecto (si el cliente no solicita lo contrario) es de 600 segundos y como mxximo de 7200 segundos.

El DNS primario es 150.214.156.2 y el secundario

150.214.35.10.

El dominio de los clientes es establecido a ace.ual.es.§ §Consulte resolv.conf(5) si necesita mxs informacixn sobre qux significa el dominio de bxsqueda. Tambixn hablaremos de esto cuando veamos el DNS.

El DNS no es avisado de las asignaciones lo que implica que los hosts de la red local no van a estar dados de alta en el DNS. Esto es lo mxs frecuente en redes privadas ya que los hosts internos no son visibles desde el exterior y por lo tanto, no tiene sentido darlos de alta en el DNS.

La asignacixn dinxmica de direcciones IP se producirx (1) cuando los clientes arrancan y (2) cuando expira el uso de la direccixn IP anteriormente asignada.

El servidor DHCP que configuramos va a ser el servidor DHCP oficial de la sub-red.

Con toda esta informacixn, el contenido del fichero dhcpd.conf serxa:

#xNoxvamosxaxactualizarxelxDNS
xddns-update-stylexnone;
x
x#xDefinimosxelxdominioxdexlosxclientes
xoptionxdomain-namex"curso.ual.es";
x
x#xDefinimosxlosxservidoresxdexnombresxquexutilizarxnxlosxclientes
xoptionxdomain-name-serversx150.214.156.2,x150.214.35.10;
x
x#xTiempoxdexlasxconcesiones,xporxdefecto
xdefault-lease-timex600;
x
x#xTiempoxmxximoxdexlasxconexiones
xmax-lease-timex7200;
x
x#xEstexesxelxservidorxDHCPxquexmanda
xauthoritative;
x
x#xUsexthisxtoxsendxdhcpxlogxmessagesxtoxaxdifferentxlogxfilex(youxalso
x#xhavextoxhackxsyslog.confxtoxcompletexthexredirection).
xlog-facilityxlocal7;
x
x#xDefinimosxelxrangoxdexdirsxIPxdisponibles
xsubnetx192.168.213.0xnetmaskx255.255.255.0x{
xxxrangex192.168.213.4x192.168.213.254;
xxxoptionxbroadcast-addressx192.168.213.255;
xxxoptionxroutersx192.168.213.2;
x}
x
x#xDefinimosxlasxconcesionesxestxticas
xhostxlaptopx{
xxx#xLaxdirxfxsicaxdelxNICxparaxelxclientex"192.168.213.3".
xxxhardwarexethernetx00:10:5a:2e:56:a7;
xxx#xDireccixnxIPxdelxcliente.xTambixnxsexpuedexusarxunxnombre.xEn
xxx#xestexxltimoxcasoxelxservidorxDHCPxutilizarxxelxDNSxpara
xxx#xresolverla.
xxxfixed-addressx192.168.213.3;
xxxoptionxbroadcast-addressx192.168.213.255;
xxxoptionxroutersx192.168.213.2;

Reinicie el servicio DHCP que acaba de configurar y compruebe que arranca sin problemas (vxase el Apxndice C).

El VMware ha instalado un servidor DHCP en la computadora huxsped que va a competir con el servidor que a continuacixn va a instalar. El primer paso consiste en deshabilitar este servidor. Es imprescindible que el PC virtual estx apagado (ni tan siguiera pausado). Apague el PC virtual.

Desactive el servidor DHCP del VMware:

En Microsoft Windows XP: Acceder a Inicio -> Panel de Control -> Herramientas Administrativas -> Servicios. Localizar el servicio VMware DHCP Service, pinchar sobre la entrada pulsando el botxn derecho del ratxn y detener (desactivar) o pausar dicho servicio. Es importante que no exista ninguna mxquina virtual corriendo.

Ejecute el PC virtual. El dispositivo de red Ethernet debe estar conectado y configurado como un NAT.

Compruebe que el servidor DHCP estx funcionando y si no es asx, lxncelo para aprender a hacer esto). No hace falta que lo dx de alta en los scripts de arranque porque en el resto del curso volveremos a utilizar el servidor DHCP de la computadora huxsped.

Reconfigure el IP del PC virtual (vxase la Seccixn 12.7) y compruebe que el mensaje DHCPACK proviene de su propio host (192.168.213.128). Compruebe que el IP ha sido correctamente configurado.

Ejecute Wireshark.

Conteste ahora a las cuestiones de evaluacixn.

Apague el PC virtual, deshabilite el servidor DHCP instalado en el PC virtual y habilite el servicio VMware DHCP en el host huxsped.

Cuestixn 12.1: Renueve la configuracixn del IP para eth0 mientras captura paquetes con el sniffer. Escriba en el campo de filtrado “bootp” (el DHCP es una evolucixn del protocolo bootp que se utiliza para arrancar las mxquinas sin disco). Deberxamos ver los paquetes DHCP Discover, DHCP Offer, DHCP Request y DHCP Ack ¿Qux protocolo de la capa de transporte es utilizado por el DHCP?

Cuestixn 12.2: ¿Cuxl es la direccixn fxsica del interface de red de nuestro host?

Cuestixn 12.3: ¿Coincide xsta con la que devuelve /sbin/ifconfig?

Cuestixn 12.4: Renueve la configuracixn capturando de nuevo los paquetes generados el sistema DHCP. ¿Ha cambiado el campo Transaction-ID del mensaje DISCOVER respecto de la primera concesixn?

Cuestixn 12.5: ¿Cuxl es la direccixn IP del servidor DHCP?

Cuestixn 12.6: ¿A qux puerto son enviadas las peticiones? ¿A travxs de qux puerto son retornadas las contestaciones?

Cuestixn 12.7: ¿Cuxl es la direccixn IP concedida?

Cuestixn 12.8: ¿Cuxnto dura la concesixn?

Cuestixn 12.9: Vacxe el campo de filtrado. ¿Se generan paquetes ARP durante la transaccixn DHCP? ¿Para qux sirven estos paquetes? (conteste a esta pregunta incluso cuando estos paquetes no se generan).

[next] [prev] [prev-tail] [front] [up] [next] [prev] [prev-tail] [front] [up] 13 Rastreo del TCP

[next] [prev] [prev-tail] [tail] [up] Prxcticax13Rastreo del TCP

En esta prxctica vamos a estudiar el TCP en detalle. Para ello vamos a analizar la traza de los segmentos TCP que se envxan y reciben cuando se transfiere un fichero de 150 KB (que contiene el texto de Lewis Carroll: Alicia en el Paxs de las Maravillas. Estudiaremos cxmo el TCP utiliza los nxmeros de secuencia y de reconocimiento para conseguir una transferencia sin errores, y cxmo funciona el mecanismo de control del flujo y de la congestixn. Tambixn calcularemos tiempos de transmisixn y tasas de transferencia para conocer el rendimiento de la conexixn.

x13.1 Capturando ...

Capturando ...

[next] [prev] [prev-tail] [tail] [up] 13.1 Capturando ...

Para realizar nuestro estudio necesitamos capturar los paquetes generados en la transmisixn utilizando un packet sniffer (vxase el Apxndice F), cuando transmitimos el fichero anteriormente mencionado desde nuestro host hasta un servidor Web.

PIC Figurex13.1: Pxgina Web con el fichero alice.txt.

PIC Figurex13.2: Pxgina Web donde podemos subir el fichero alice.txt.

PIC Figurex13.3: Felicitaciones por haber subido con xxito el fichero alice.txt.

PIC Figurex13.4: Captura ejemplo tras transmitir el fichero alice.txt.

PIC Figurex13.5: La captura del fichero alice.txt tras usar el filtro “tcp”.

Taller 13.1:

Ejecute un navegador Web.

Acceda a la URL http://gaia.cs.umass.edu/ethereal-labs/alice.txt y almacene en disco el fichero alice.txt.

Acceda a la URL http://gaia.cs.umass.edu/ethereal-labs/TCP-ethereal-file1.html donde deberxa ver una pxgina Web como la que aparece en la Figura 13.2.

Utilice el botxn Browse de esta pxgina para indicar el camino al fichero alice.txt en su host. No pulse todavxa el botxn Upload alice.txt file.

Ejecute el packet sniffer y colxquelo en modo de captura de paquetes.

Pulse ahora el botxn Upload alice.txt file. Cuando el fichero haya sido completamente subido a gaia.cs.umass.edu, aparecerx un mensaje que se lo indica (vxase la Figura 13.3).

Detenga el packet sniffer. Deberxa haber obtenido una captura semejante a la que se muestra en la Figura 13.4).

Filtre los paquetes “tcp” (vxase la Figura 13.5). Deberxan aparecer el three-way handshake que contiene un mensaje SYN, un mensaje HTTP POST y una serie de mensajes “HTTP Continuation”. Estos mensajes son la forma en que el packet sniffer indica que existen muchos segmentos TCP para transmitir un xnico mensaje HTTP. Tambixn deberxa ver los paquetes TCP ACK que gaia.cs.umass.edu envxa hasta su computadora.

Cuestixn 13.1: ¿Cuxl es la direccixn IP y el nxmero de puerto usado por su host?

Cuestixn 13.2: ¿Cuxl es la direccixn IP de gaia.cs.umass.edu?

Cuestixn 13.3: ¿De qux puerto parten los segmentos en gaia.cs.umass.edu? Cuestixn 13.4: ¿Hacia qux puerto en gaia.cs.umass.edu van dirigidos los suyos?

PIC Figurex13.6: La captura del fichero alice.txt tras usar el filtro “tcp” y deshabilitar el anxlisis del HTTP.

Deshabilite el anxlisis del HTTP. Acceda a Analyze -¿ Enabled Protocols, deseleccione la caja para HTTP y pulse el botxn OK. En este instante deberxa ver los paquetes capturados de forma parecida a como se muestran en la Figura 13.6.

Cuestixn 13.5: ¿Cuxl es el nxmero de secuencia usado en el segmento TCP SYN que inicia la conexixn entre su host y gaia.cs.umass.edu?

Cuestixn 13.6: ¿Qux distingue a un segmento TCP SYN de otro que no lo sea?

Cuestixn 13.7: ¿Cuxl es el nxmero de secuencia usado en el segmento TCP

     SYNACK enviado por gaia.cs.umass.edu?

Cuestixn 13.8: ¿Qux relacixn tienen los nxmeros de secuencia de los segmento SYN y SYNACK?

Cuestixn 13.9: ¿Cuxl es el nxmero de secuencia del segmento que contiene el comando HTTP POST y el de los siguientes cinco segmentos que van dirigidos desde su host hacia gaia.cs.umass.edu? (Busque este segmento buscando en los payload’s de los segmentos.)

Cuestixn 13.10: ¿En qux instante de tiempo se han generado cada uno de esos seis segmentos?

Cuestixn 13.11: ¿En qux instante de tiempo se han recibido los correspondientes ACK’s?

Cuestixn 13.12: ¿Cuxl es el RTT para esos seis segmentos?

Cuestixn 13.13: ¿Cuxl es el valor EstimatedRTT (vxase la pxgina 237 del texto de [8]) tras la recepcixn de cada ACK? (Asuma que el valor de EstimatedRTT es igual al RTT medido para el primer segmento.)

Cuestixn 13.14: ¿Cuxl es la longitud de cada uno de estos seis segmentos? Cuestixn 13.15: ¿Cuxl es la cantidad mxnima de buffer disponible que el receptor

advierte el emisor? Cuestixn 13.16: ¿Se estx produciendo en algxn momento un control del flujo? Cuestixn 13.17: ¿Hay retransmisiones de segmentos? ¿Cxmo lo sabe? Cuestixn 13.18: ¿Cuxl es la cantidad mxxima de datos reconocidos por el receptor?

Cuestixn 13.19: ¿Se ha producido algxn ACK acumulativo? Cuestixn 13.20: ¿Cuxl ha sido el throughput (bytes transferidos por unidad de

tiempo) de la conexixn? Explique el cxlculo.

PIC Figurex13.7: Nxmero de secuencia versus instante de tiempo de los segmentos enviados.

Seleccione un segmento que para desde su host hacia gaia.cs.umass.edu en la ventana de segmentos capturados.

Acceda  al  menx  Statistics  -¿

TCP Stream Graph -¿ Time-Sequence-Graph(Stevens). Usted deberxa ver algo parecido a lo que se presenta en la Figura 13.7. En ella, cada punto representa un segmento enviado. Lo que vemos concretamente es el nxmero de secuencia del segmento versus el instante de tiempo en el que el segmento ha sido enviado.

Cuestixn 13.21: ¿Indique en qux instantes de tiempo comienza y finaliza la fase de arranque lento? Esta fase se reconoce porque el mecanismo de control de la congestixn del TCP estx funcionando.

Cuestixn 13.22: Viendo esta grxfica (Figura 13.7) y sin tener en cuenta el throughput, ¿en qux podrxa haber mejorado la transmisixn?

14 Rastreo del IP

[next] [prev] [prev-tail] [tail] [up] Prxcticax14Rastreo del IP

El IP (Internet Protocol) gobierna el trasiego de paquetes por la red. En esta prxctica realizaremos una serie de experimentos que nos ayudarxn a comprender el funcionamiento de este protocolo tan importante.

x14.1 La estructura del paquete

x14.2 Tiempo de vida de los paquetes x14.3 Fragmentacixn x14.4 NAT

La estructura del paquete

[next] [prev] [prev-tail] [tail] [up] 14.1 La estructura del paquete

El payload de un paquete IP almacena los datos entregados por el protocolo de la capa de transporte al IP.

Taller 14.1: Disexe un experimento en el que transmita un xnico paquete IP desde su host hasta otro diferente. Captxrelo usando un packet sniffer.

Cuestixn 14.1: Explique su experimento.

Cuestixn 14.2: ¿Qux versixn del IP ha usado?

Cuestixn 14.3: ¿Cuxl es la direccixn IP del adaptador de red desde el que ha partido dicho paquete?

Cuestixn 14.4: ¿A qux direccixn IP ha sido dirigido dicho paquete? ¿Es una direccixn IP de una red pxblica o privada?

Cuestixn 14.5: ¿Qux vale el campo TTL?

Cuestixn 14.6: ¿Cuxl ha sido el identificador de protocolo usado en la cabecera IP? ¿Cxmo se llama el protocolo asociado?

Cuestixn 14.7: ¿Cuxntos bytes contiene la cabecera IP? ¿Cuxntos bytes contiene el paquete IP? ¿Cuantos bytes contiene el paquete IP? ¿Cuxntos bytes el payload?

Cuestixn 14.8: ¿Cuxl ha sido el payload?

Tiempo de vida de los paquetes

[next] [prev] [prev-tail] [tail] [up]

14.2 Tiempo de vida de los paquetes El tiempo de vida de un paquete IP en realidad controla el nxmero de hops que el paquete puede realizar antes de que un router lo destruya. Esto se hace para que los paquetes dirigidos a destinos inexistentes no viajen de forma indefinida por la red.

Taller 14.2: Disexe un experimento en el que un paquete no llege a su destino porque su TTL es demasiado bajo. Capture este paquete y el paquete ICMP TTL-exceeded generado usando un packet sniffer.

Cuestixn 14.9: Explique su experimento.

Cuestixn 14.10: ¿Qux TTL ha usado?

Cuestixn 14.11: ¿Cuxl es la direccixn IP del nodo que ha generado el ICMP TTL-exceeded?

Cuestixn 14.12: ¿Cuxl ha sido el payload del paquete recibido?

Fragmentacin

[next] [prev] [prev-tail] [tail] [up] 14.3 Fragmentacixn

El IP fragmenta aquellos paquetes que son demasiado grandes para ser transmitidos. Dichos fragmentos son ensamblados en el receptor por su capa de red y asx el datagrama o el segmento original es entregado, tal cual, a la capa de transporte.

Taller 14.3: Disexe un experimento en el que se transmita un mensaje lo suficientemente grande como para que el IP de su host lo fragmente.

Cuestixn 14.13: ¿Cuxntos paquetes ha enviado?

Cuestixn 14.14: ¿Cuxntos paquetes recibe el receptor?

Cuestixn 14.15: ¿Cuxntos datagramas o segmentos ha enviado?

Cuestixn 14.16: ¿Cuxntos datagramas o segmentos recibe el receptor?

Cuestixn 14.17: ¿Qux informacixn indica que el datagrama o el segmento ha sido fragmentado por el IP?

Cuestixn 14.18: ¿Qux tamaxo tiene el payload de cada fragmento?

Cuestixn 14.19: ¿Cxmo conoce el IP que el payload un paquete recibido forma parte (es un subconjunto) del payload un datagrama o de un segmento?

Cuestixn 14.20: Calcule el MTU de la red conectada a su host.

Cuestixn 14.21: ¿Cxmo calcularxa el MTU de todo el trayecto entre su host y cualquier otro host de Internet?

NAT

[next] [prev] [prev-tail] [tail] [up] 14.4 NAT

El NAT es el router que nos permite conectarnos a Internet desde una red txpicamente privada.

Taller 14.4: Disexe un experimento en el que compruebe el funcionamiento de su NAT. Dicho dispositivo deberxa modificar el puerto y la direccixn IP origen de todos los paquetes que son enviados por cualquier host de la red privada hacia un host de la red pxblica

Cuestixn 14.22: ¿Cuxl es la direccixn IP y el puerto origen de los paquetes cuando estos viajan por la red privada?

Cuestixn 14.23: ¿Y por la red pxblica? ¿Coinciden?

Cuestixn 14.24: ¿Cuxl es la direccixn IP y el puerto destino de los paquetes cuando estos viajan por la red privada?

Cuestixn 14.25: ¿Y por la red pxblica? ¿Coinciden?

Cuestixn 14.26: ¿Modifica el NAT algxn otro campo de la cabecera IP (aparte de la direccixn IP y el puerto origen del paquete)?

Cuestixn 14.27: Sin necesidad de redireccionar los puertos en el NAT y bajo la suposicixn de que utiliza el UDP. ¿Qux podrxa hacer para instalar un servidor en un host de la red privada y que un cliente desde la red pxblica se conectara a xl?

[next] [prev] [prev-tail] [front] [up] [next] [prev] [prev-tail] [front] [up] 15 Rastreo de Ethernet y del ARP

[next] [prev] [prev-tail] [tail] [up]

Prxcticax15Rastreo de Ethernet y del ARP Ethernet es la tecnologxa de cominicaciones prevalente en redes locales de computadoras que estxn conectadas mediante cables. En esta prxctica analizaremos algunos de los aspectos mxs interesantes de la transmisixn de frames Ethernet.

El ARP (Address Resolution Protocol) se utiliza con el mismo objetivo que el DNS aunque a nivel de enlace de datos: determinar las direcciones fxsicas de los interfaces de red que forman parte de una misma red local. Es decir, con el ARP lo que traducimos son direcciones IP en direcciones fxsicas.

x15.1 La estructura del frame

x15.2 El ARP

La estructura del frame

[next] [prev] [prev-tail] [tail] [up]

15.1 La estructura del frame El frame Ethernet es la estructura de datos que transporta los paquetes generados a nivel de la capa de red. A continuacixn analizaremos algunas de sus caracterxsticas bxsicas.

Taller 15.1: Disexe un experimento en el que su host envxe un mensaje a un host que no estx en su red local y xste le envxe un mensaje a su host.

Cuestixn 15.1: Exponga su experimento.

Cuestixn 15.2: ¿Qux protocolos a nivel de la capa de aplicacixn, transporte y red ha usado?

Cuestixn 15.3: ¿Cuxntos frames Ethernet han sido necesarios para transportar el mensaje de ida? ¿Cuxntos para el mensaje de vuelta?

Cuestixn 15.4: ¿Cuxl es el valor del campo Type en el/los frame/s Ethernet?

Cuestixn 15.5: ¿Cuxl es la direccixn fxsica del interface de red del que ha partido el mensaje de ida? Si es incapaz de contestar a esta pregunta, explique por qux.

Cuestixn 15.6: ¿Cuxl es la direccixn fxsica del interface de red del que ha partido el mensaje de vuelta?

Cuestixn 15.7: ¿Cuxl es la direccixn fxsica del interface de red que figura como fuente en el/los frame/s que contiene/n el mensaje de vuelta?

Cuestixn 15.8: ¿A qux nodo se corresponde la anterior direccixn fxsica?

Cuestixn 15.9: Basxndose en el anxlisis del frame que realiza el packet sniffer, haga un esquema de la estructura de un frame Ethernet (indique qux campos posee, cuxl es el tamaxo de cada uno de ellos y qux contiene cada campo).

El ARP

[next] [prev] [prev-tail] [tail] [up] 15.2 El ARP

Ahora vamos a estudiar el funcionamiento del ARP, un protocolo que estx muy ligado a la tecnologxa empleada en la capa de enlace de datos.

Taller 15.2: Disexe un experimento en el que su computadora necesite utilizar el ARP.

Cuestixn 15.10: Explique su experimento.

Cuestixn 15.11: ¿Cuxl es la direccixn fxsica destino del frame que contiene el mensaje ARP request?

Cuestixn 15.12: ¿Cuxl es la direccixn fxsica origen del frame que contiene el mensaje ARP request?

Cuestixn 15.13: ¿A cuxntos hosts ha llegado el mensaje ARP request?

Cuestixn 15.14: ¿Cuxntos hosts han generado un mensaje ARP response?

Cuestixn 15.15: ¿Cuxl es la direccixn fxsica del adaptador de red del que ha partido el mensaje ARP response?

Cuestixn 15.16: ¿A qux nodo se corresponde el anterior adaptador de red? ¿Es un nodo de su red local?

Cuestixn 15.17: ¿Cuxl ha sido la direccixn IP que ha traducido?

Cuestixn 15.18: ¿Se utiliza el ARP normalmente cuando se estx comunicando con un host que no estx en su red local? Explxquese.

Cuestixn 15.19: Averigue cuxnto tiempo cachea su host las entradas en la tabla ARP.

Cuestixn 15.20: ¿Podrxan aparecer en dicha tabla traducciones para direcciones que su host nunca ha utilizado? Indique en qux casos.

[next] [prev] [prev-tail] [front] [up] [next] [prev] [prev-tail] [front] [up] A Gestin de paquetes en Linux

[next] [prev] [prev-tail] [tail] [up] AppendixxAGestixn de paquetes en Linux

A la hora de instalar software en Linux tenemos bxsicamente dos alternativas. La primera consiste en descargar el cxdigo fuente del paquete que deseamos y compilarlo. En la segunda alternativa nos bajamos el paquete ya compilado para la versixn del sistema operativo que estamos utilizando. En distribuciones como Fedora Core y Debian Linux esta suele ser la opcixn mxs frecuente. En otras distribuciones como Gentoo los paquetes se compilan tras las descarga. Vexmos cxmo se realizan estas tareas en estas tres distribuciones de Linux.

xA.1 Debian Linux xxA.1.1 Pasando de stable a testing xxA.1.2 Pasando de testing a unstable xxA.1.3 Actualizacixn de la base de datos de paquetes xxA.1.4 Actualizacixn de los paquetes xxA.1.5 Bxsqueda de un paquete xxA.1.6 Conocer si un paquete ya estx instalado xxA.1.7 Instalacixn de un paquete xxA.1.8 Actualizacixn de un paquete xxA.1.9 Averiguar los ficheros que ha instalado un paquete xxA.1.10 Averiguar el paquete al que pertence un fichero xxA.1.11 Encontrar los paquetes de los que depende otro paquete xxA.1.12 Encontrar los paquetes que dependen de un paquete xxA.1.13 Borrado de un paquete xA.2 Fedora Core Linux xxA.2.1 Actualizacixn de la base de datos de paquetes xxA.2.2 Actualizacixn de los paquetes xxA.2.3 Bxsqueda de un paquete xxA.2.4 Conocer si un paquete ya estx instalado xxA.2.5 Averiguar los ficheros que ha instalado un paquete xxA.2.6 Averiguar el paquete al que pertence un fichero xxA.2.7 Instalacixn de un paquete xxA.2.8 Actualizacixn de un paquete xxA.2.9 Encontrar los paquetes de los que depende otro paquete xxA.2.10 Borrado de un paquete xA.3 Gentoo Linux xxA.3.1 Actualizacixn de la base de datos de paquetes xxA.3.2 Actualizacixn de los paquetes xxA.3.3 Bxsqueda de un paquete xxA.3.4 Conocer si un paquete ya estx instalado xxA.3.5 Instalacixn de un paquete xxA.3.6 Actualizacixn de un paquete xxA.3.7 Averiguar los ficheros que ha instalado un paquete xxA.3.8 Averiguar el paquete al que pertence un fichero xxA.3.9 Encontrar los paquetes de los que depende otro paquete xxA.3.10 Encontrar los paquetes que dependen de un paquete xxA.3.11 Borrado de un paquete

Debian Linux

[next] [prev] [prev-tail] [tail] [up] A.1 Debian Linux

En Debian el instalador de paquetes se llama apt y lo normal es descargar el paquete ya compilado. Para poderlo usar tenemos que haber accedido al sistema como super-usuario.

Existe mucha mxs informacixn acerca de la instalacixn de paquetes usando apt. Podremos encontrar gran parte de esta en la la Guxa de Referencia Debian (http://www.debian.org/doc/user-manuals).

A.1.1 Pasando de stable a testing Cuando instalamos Debian podemos seleccionar dos versiones: (1) la estable que tiene los paquetes mxs probados y (2) la de test, con paquetes mxs nuevos, aunque menos probados. Dependiendo del uso que queramos dar al host deberxamos utilizar una versixn u otra. Generalmente, si el host es un servidor seleccionaremos la versixn estable que da menos problemas de actualizacixn.

En algxn momento puede ser interesante “upgradear” a la versixn de pruebas. Esto se puede hacer son los siguientes comandos:

root#xapt-getxupdate
xroot#xapt-getxinstallxlibc6xperlxlibdb2xdebconf
xroot#xapt-getxinstallxaptxapt-utilsxdselectxdpkg
x
x#xEditarxelxficherox/etc/apt/sources.listxcambiarx"stable"xpor
x#x"testing"xdondexproceda.
x
xroot#xdselectxupdatexx#xalwaysxdoxthisxbeforexupgrade
xroot#xdselectxselectxx#xselectxadditionalxpackages
xroot#xdselectxinstall

A.1.2 Pasando de testing a unstable

#xEditarxelxficherox/etc/apt/sources.listxcambiarx"testing"xpor
x#x"unstable"xdondexproceda.
x
xroot#xdselectxupdatexx#xalwaysxdoxthisxbeforexupgrade
xroot#xdselectxselectxx#xselectxadditionalxpackages
xroot#xdselectxinstall

A.1.3 Actualizacixn de la base de datos de paquetes Antes de realizar una instalacixn es interesante tener actualizada la base de datos de paquetes en nuestra mxquina. Esto se hace escribiendo:

xxroot#xapt-getxupdate

A.1.4 Actualizacixn de los paquetes Es una buena idea mantener el sistema operativo lo mxs actualizado posible. Asx minimizaremos los agujeros de seguridad y nos aseguraremos de estar utilizando las xltimas versiones de los programas. En Debian se actualiza el sistema operativo escribiendo:

xxroot#xapt-getxupgrade

A.1.5 Bxsqueda de un paquete Una vez que nos hemos sincronizado con el servidor de apt que hayamos seleccionado (probablemente durante la instalacixn del sistema operativo) pasaremos a buscar si existe el <paquete> en cuestixn. Esto se realiza escribiendo:

#xBxsquedaxsencilla
xroot#xapt-cachexsearchx<paquete>
x
x#xBxsquedaxconxinformacixnxextra
xroot#xapt-cachexsearchx--fullx<paquete>

La lista de servidores de paquetes utilizados por apt se encuentra en el fichero ASCII:

xx/etc/apt/sources.list

A.1.6 Conocer si un paquete ya estx instalado Para averiguar si un paquete ya estx instalado podemos escribir:

xxusuario$xdpkgx-lx|xgrepx<cadena>

donde <cadena> es una cadena de caracteres que pertenecen al nombre del paquete.

A.1.7 Instalacixn de un paquete Para instalar un <paquete> escribiremos:

xxroot#xapt-getxinstallx<paquete>

A.1.8 Actualizacixn de un paquete Para actualizar un <paquete> escribiremos:

xxroot#xapt-getxinstallx<paquete>

Sx, la misma orden que para instalarlo.

A.1.9 Averiguar los ficheros que ha instalado un paquete

xxroot#xapt-filexupdate
xxxusuario$xapt-filexlistx<paquete>

A.1.10 Averiguar el paquete al que pertence un fichero

xxusuario$xapt-filexsearchx<fichero>

A.1.11 Encontrar los paquetes de los que depende otro paquete

xxusuario$xapt-cachexdependsx<paquete>

A.1.12 Encontrar los paquetes que dependen de un paquete

xxusuario$xapt-cachexrdependsx<paquete>

A.1.13 Borrado de un paquete Para borrar un paquete, escribir:

root#xapt-getxremovex<paquete>

Si se desear eliminar ademxs los ficheros de configuracixn que dependen del paquete, usar:

root#xapt-getx--purgexremovex<paquete>

Esta opcixn sxlo funciona si no existen ficheros nuevos en los directorios que fueran a eliminarse. Si existieran, deberx eliminarlos “a mano”.

Finalmente, se pueden desinstalar un conjunto de paquetes escribiendo:

root#xapt-getxremovex<paquete>*

Fedora Core Linux

[next] [prev] [prev-tail] [tail] [up] A.2 Fedora Core Linux

En Fedora Core el instalador de paquetes se llama yum y es semejante a Debian. Los paquetes suelen descargarse ya compilados.

A.2.1 Actualizacixn de la base de datos de paquetes A la hora de usar yum no hace falta actualizar la base de datos de paquetes porque de esta tarea se encarga un demonio llamado yum-updatesd, que deberxa estar siempre ejecutxndose.

A.2.2 Actualizacixn de los paquetes

xxroot#xyumxupdate

A.2.3 Bxsqueda de un paquete

xxroot#xyumxsearchx<paquete>

A.2.4 Conocer si un paquete ya estx instalado Escribir:

xxusuario$xrpmx--queryx--allx|xgrepx<cadena>

donde <cadena> es una cadena de caracteres que pertenecen al nombre del paquete que deseamos saber si estx instalado.

A.2.5 Averiguar los ficheros que ha instalado un paquete

xxusuario$xrpmx--queryx--listx<nombre_paquete_sin_version>

A.2.6 Averiguar el paquete al que pertence un fichero

xxusuario$xrpmx--queryx--filex<fichero>

A.2.7 Instalacixn de un paquete

xxroot#xyumxinstallx<paquete>

A.2.8 Actualizacixn de un paquete

xxroot#xyumxupdatex<paquete>

A.2.9 Encontrar los paquetes de los que depende otro paquete

xxusuario$x??

A.2.10 Borrado de un paquete

xxroot#xyumxremovex<paquete>

Gentoo Linux

[next] [prev] [prev-tail] [tail] [up]

A.3 Gentoo Linux En Gentoo los paquetes normalmente se descargan en cxdigo fuente y se compilan. Esto tiene ciertas ventajas y otros inconvenientes. Las principales ventajas son:

(1) que las dependencias entre las versiones de los paquetes es menor y por tanto, la instalacixn o actualizacixn de un paquete implica recompilar pocas dependencias y (2) el paquete se compila para la arquitectura de nuestra computadora y con las caracterxsticas deseadas. Esto xltimo incrementa el rendimiento de los programas.

El principal problema en Gentoo es que hay paquetes (como Mozilla Firefox) que tardan mucho en compilarse :-(. Por esto, estos paquetes tan pesados tambixn suelen estar disponibles en binario.

A.3.1 Actualizacixn de la base de datos de paquetes La base de datos de paquetes en Gentoo se denomina “portage”. Esta base de datos es un xrbol de directorios (y ficheros) que se sincroniza con un servidor mediante rsync. La actualizacixn es, debido a la cantidad de informacixn transmitida, un proceso pesado.

Por suerte, los paquetes en Gentoo sxlo necesitan ser actualizados cuando aparece una versixn nueva de los mismos (no cuando cambia la versixn de alguna de sus dependencias, como en Debian). Esto implica que no necesitamos sincronizar portage muy frecuentemente (una vez al mes es mxs que suficiente para disfrutar de las xltimas versiones).

Bien. En Gentoo, portage se actualiza escribiendo:

xxroot#xemergex--sync
xxxroot#xemergexportage

La lista de servidores de rsync y la lista de servidores de paquetes se encuentra en el fichero:

xx/etc/make.conf

A.3.2 Actualizacixn de los paquetes

xxroot#xemergex--updatex--deepx--newusexworld
xxxroot#xetc-update
xxxroot#xemergex--depclean
xxxroot#xrevdep-rebuild

A.3.3 Bxsqueda de un paquete

xxroot#xemergex--searchx<paquete>

A.3.4 Conocer si un paquete ya estx instalado Escribiremos:

xusuario$xequeryxlistx<cadena>

donde <cadena> es una cadena de caracteres que pertenecen al nombre del paquete que deseamos saber si estx instalado.

A.3.5 Instalacixn de un paquete Para instalar un <paquete> escribiremos:

xxroot#xemergex<paquete>

A.3.6 Actualizacixn de un paquete Para instalar un <paquete> escribiremos:

xxroot#xemergex--updatex<paquete>

A.3.7 Averiguar los ficheros que ha instalado un paquete

xxusuario$xequeryxfilesx<paquete>

A.3.8 Averiguar el paquete al que pertence un fichero

xxusuario$xequeryxbelongsx<fichero>

A.3.9 Encontrar los paquetes de los que depende otro paquete

xxusuario$xequeryxdepgraphx<paquete>

A.3.10 Encontrar los paquetes que dependen de un paquete

xxusuario$xequeryxdependsx<paquete>

A.3.11 Borrado de un paquete

xxroot#xemergex--unmergex<paquete>

[next] [prev] [prev-tail] [front] [up] [next] [prev] [prev-tail] [front] [up] B Administracin de cuentas de usuario en Linux

[next] [prev] [prev-tail] [tail] [up] AppendixxBAdministracixn de cuentas de usuario en Linux

En algxn instante puede ser xtil crear una cuenta nueva. El comando para hacer esto es:

xxroot#xuseraddx<usuario>

Para conocer las opciones disponibles para esta utilidad consxltese el manual man

adduser.

Si lo que desea es eliminar una cuenta, utilice el comando:

xxroot#xuserdelx<usuario>

[next] [prev] [prev-tail] [front] [up] C Activacin y desactivacin de servicios en Linux

[next] [prev] [prev-tail] [tail] [up]

AppendixxCActivacixn y desactivacixn de servicios en Linux Los servicios en Linux (y en UNIX) son proporcionados por los demonios, que no son mxs que procesos que no dejan nunca de ejecutarse mientras la computadora estx encendida.

Para conseguir que dichos demonios se ejecuten la prxxima vez que reiniemos, deben de incluirse los enlaces oportunos en los directorios que controlan la carga de dichos demonios. Estos directorios, desgraciadamente, pueden variar entre distribuciones, asx como los comandos y utilidades “grxficas” que los manipulan.

Debian Linux: Los directorios que contiene los enlaces a los demonios a activar y desactivar en cada nivel de ejecucixn son /etc/rc.[nivel de

     ejecucixn].d. La utilidad bxsica es /usr/sbin/update-rc.d, aunque

tambixn es posible utilizar otros programas mxs amigables como

     /usr/bin/rcconf y /usr/bin/services-admin que habrxa que instalar

previamente.

#xMostrarxlosxdemoniosxactivos
xusuario$xrcconf
x
x#xActivarxtemporalmentexelxservicioxXXX
xroot#x/etc/init.d/XXXxstart
x
x#xDesactivarxtemporalmentexelxservicioxXXX
xroot#x/etc/init.d/XXXxstop
x
x#xReactivarxelxservicioxXXX
xroot#x/etc/init.d/XXXxrestart
x
x#xActivarxelxdemonioxXXXxenxlosxrun-levelsxporxdefecto
xroot#xupdate-rc.dxXXXxdefaults
x
x#xDesactivarxelxdemonioxXXX
xroot#xupdate-rc.dxXXXxremove

En Debian Linux la instalacixn de un paquete que contiene un servicio realiza la activacixn definitiva de dicho servicio. Por tanto, rara vez necesitaremos utilizar la

utilidad update-rc.d.

Fedora Core Linux: Al igual que en Debian, los directorios que contiene los enlaces a los demonios a activar y desactivar en cada nivel de ejecucixn son /etc/rc.[nivel de ejecucixn].d. Sin embargo, a diferencia de Debian la utilidad bxsica es /sbin/chkconfig. Finalmente, tambixn existen scripts grxficos como

/usr/sbin/serviceconf.

#xMostrarxlosxdemoniosxactivos
xusuario$xchkconfigx--list
x
x#xActivarxtemporalmentexelxservicioxXXX
xroot#x/etc/init.d/XXXxstart
x
x#xDesactivarxtemporalmentexelxservicioxXXX
xroot#x/etc/init.d/XXXxstop
x
x#xReactivarxelxservicioxXXX
xroot#x/etc/init.d/XXXxrestart
x
x#xActivarxelxdemonioxXXXxenxlosxrun-levelsxporxdefecto
xroot#xchkconfigx--addxXXX
x
x#xDesactivarxelxdemonioxXXX
xroot#xchkconfigx--delxsshd

En Fedora Core Linux la instalacixn de un paquete que contenga un servicio no lo configura para su ejecucixn definitiva (probablemente estarx desactivado cuando reiniciemos el host).

Gentoo Linux: Los enlaces a los demonios se encuentran en /etc/runlevels y la utilidad para manejarlos es /sbin/rc-update.

#xMostrarxlosxdemoniosxactivos
xusuario$x/sbin/rc-updatexshow
x
x#xActivarxtemporalmentexelxservicioxXXX
xroot#x/etc/init.d/XXXxstart
x
x#xDesactivarxtemporalmentexelxservicioxXXX
xroot#x/etc/init.d/XXXxstop
x
x#xReactivarxelxservicioxXXX
xroot#x/etc/init.d/XXXxrestart
x
x#xActivarxelxdemonioxXXXxenxlosxrun-levelsxporxdefecto
xroot#xrc-updatexaddxXXXxdefault
x
x#xDesactivarxelxdemonioxXXX
xroot#xrc-updatexdelxXXXxdefault

En Gentoo Linux la instalacixn de un paquete con un determinado servicio no implica su activacixn definitiva.

[next] [prev] [prev-tail] [front] [up] D Escaneado de puertos en Linux

[next] [prev] [prev-tail] [tail] [up] AppendixxDEscaneado de puertos en Linux

Los puertos se utilizan en redes de computadoras para que dos o mxs procesos puedan comunicarse. En el TCP/IP los puertos se enumeran utilizando un nxmero entero positivo de 16 bits (0 - 65535). Por convenio, los puertos inferiores al 1024 se utilizan para ofrecer servicios conocidos como la Web, Telnet, SSH, etc. [6].

El txrmino “escaneo de puertos” se refiera a la txcnica de ir (normalmente secuencialmente) contactando (usando peticiones de conexixn TCP o mediante datagramas UDP) con los diferentes puertos de una mxquina y ver si hay algxn tipo de respuesta [8]. Dependiendo de dichas respuestas puede conocerse qux servicios ofrece dicho host, sistema operativo, modelo del host, etc.

xD.1 Cuidado cuando escaneamos una mxquina ...

xD.2 netstat

xD.3 Nmap xxD.3.1 Instalacixn xxD.3.2 Utilizacixn bxsica xD.4 Nessus xxD.4.1 Instalacixn (cliente y servidor) xxD.4.2 Configuracixn del servidor xxD.4.3 Uso del cliente

Cuidado cuando escaneamos una mquina ...

[next] [prev] [prev-tail] [tail] [up] D.1 Cuidado cuando escaneamos una mxquina ...

Muchos cortafuegos detectan automxticamente los procesos de escaneo porque son la primera herramienta que utilizan los hackers de redes para acceder ilegalmente a los sistemas. Por tanto, es muy posible que si escanemos un host podamos enfadar a algxn administrador que contactarx con el nuestro para qujarse. Si nuestra accixn no es maliciosa lo mxs prudente es contactar primero con dicho administrador para pedirle permiso. netstat

[next] [prev] [prev-tail] [tail] [up]

D.2 netstat

/bin/netstat imprime informacixn sobre el sistema de red en el host donde se ejecuta. Esto xltimo implica que tenemos que tener cuenta en la mxquina que escaneamos si deseamos usar esta utilidad.

Con netstat, dependiendo de los argumentos usados podemos:

Conexiones: Esta es la forma de uso mxs corriente de netstat. Ejemplos:

#xMostrandoxlasxconexionesxTCPxestablecidas
xusuario$xsshxusuario@gogh.ace.ual.es
xusuario$xnetstatx|xgrepxESTABLISHED
xtcpxxxxxxxx0xxxxxx0x192.168.213.133:3841xxxxgogh.ace.ual.es:sshxxxxxESTABLISHED
x
x#xMostrandoxlosxserviciosxescuchandoxaxtravxsxdexpuertosxTCP
xusuario$xnetstatx--listeningx|xgrepxtcp
xtcpxxxxxxxx0xxxxxx0x*:sunrpcxxxxxxxxxxxxxxxx*:*xxxxxxxxxxxxxxxxxxxxxLISTEN
xtcpxxxxxxxx0xxxxxx0x*:1488xxxxxxxxxxxxxxxxxx*:*xxxxxxxxxxxxxxxxxxxxxLISTEN
xtcpxxxxxxxx0xxxxxx0x*:authxxxxxxxxxxxxxxxxxx*:*xxxxxxxxxxxxxxxxxxxxxLISTEN
xtcpxxxxxxxx0xxxxxx0xlocalhost:ippxxxxxxxxxxx*:*xxxxxxxxxxxxxxxxxxxxxLISTEN
xtcpxxxxxxxx0xxxxxx0x*:nessusxxxxxxxxxxxxxxxx*:*xxxxxxxxxxxxxxxxxxxxxLISTEN
xtcpxxxxxxxx0xxxxxx0xlocalhost:smtpxxxxxxxxxx*:*xxxxxxxxxxxxxxxxxxxxxLISTEN
xtcp6xxxxxxx0xxxxxx0x*:wwwxxxxxxxxxxxxxxxxxxx*:*xxxxxxxxxxxxxxxxxxxxxLISTEN
xtcp6xxxxxxx0xxxxxx0x*:sshxxxxxxxxxxxxxxxxxxx*:*xxxxxxxxxxxxxxxxxxxxxLISTEN
x
x#xMostrandoxlosxserviciosxescuchandoxaxtravxsxdexpuertosxUDP
xusuario$xnetstatx--listeningx|xgrepxudp
xudpxxxxxxxx0xxxxxx0x*:1024xxxxxxxxxxxxxxxxxx*:*
xudpxxxxxxxx0xxxxxx0x*:1026xxxxxxxxxxxxxxxxxx*:*
xudpxxxxxxxx0xxxxxx0x*:826xxxxxxxxxxxxxxxxxxx*:*
xudpxxxxxxxx0xxxxxx0x*:bootpcxxxxxxxxxxxxxxxx*:*
xudpxxxxxxxx0xxxxxx0x*:mdnsxxxxxxxxxxxxxxxxxx*:*
xudpxxxxxxxx0xxxxxx0x*:sunrpcxxxxxxxxxxxxxxxx*:*
xudpxxxxxxxx0xxxxxx0x*:ippxxxxxxxxxxxxxxxxxxx*:*
xudp6xxxxxxx0xxxxxx0x*:1025xxxxxxxxxxxxxxxxxx*:*

Taller D.1: Muestre las conexiones TCP establecidas en su host. ¿Se pueden conocer las conexiones UDP establecidas?

La tabla de routing: Ejemplo:

#xMostrandoxlaxtablaxdexrouting
xusuario$xnetstatx--route
xKernelxIPxroutingxtable
xDestinationxxxxxGatewayxxxxxxxxxGenmaskxxxxxxxxxFlagsxxxMSSxWindowxxirttxIface
x192.168.213.0xxx*xxxxxxxxxxxxxxx255.255.255.0xxxUxxxxxxxxx0x0xxxxxxxxxx0xeth0
xdefaultxxxxxxxxx192.168.213.2xxx0.0.0.0xxxxxxxxxUGxxxxxxxx0x0xxxxxxxxxx0xeth0

Taller D.2: Muestre la tabla de routing usando netstat y route.

Informacixn sobre los interfaces: Ejemplo:

#xMostrandoxlaxinformacixnxsobrexlosxinterfacesxdexred
xusuario$xnetstatx--interface
xKernelxInterfacextable
xIfacexxxMTUxMetxxxRX-OKxRX-ERRxRX-DRPxRX-OVRxxxxTX-OKxTX-ERRxTX-DRPxTX-OVRxFlg
xeth0xxx1500x0xxxx191678xxxxxx0xxxxxx0xxxxxx0xxxx87617xxxxxx0xxxxxx0xxxxxx0xBMRU
xloxxxx16436x0xxxxx44677xxxxxx0xxxxxx0xxxxxx0xxxx44677xxxxxx0xxxxxx0xxxxxx0xLRU

Taller D.3: Con el anterior comando tenemos una buena idea de la calidad de las transmisiones en la red local. ¿Qux campos mirarxa para conocer si hay algxn problema fxsico (como ruido en la red)?

Estadxsticas sobre los protocolos: Ejemplo:

#xMostrandoxlasxestadxsticasxdexlaxredxporxprotocolo
xusuario$xnetstatx--statistics
xIp:
xxxxx236706xtotalxpacketsxreceived
xxxxx13xwithxinvalidxaddresses
xxxxx0xforwarded
xxxxx0xincomingxpacketsxdiscarded
xxxxx236693xincomingxpacketsxdelivered
xxxxx132642xrequestsxsentxout
xxxxx3xoutgoingxpacketsxdropped
xIcmp:
xxxxx140xICMPxmessagesxreceived
xxxxx1xinputxICMPxmessagexfailed.
xxxxxICMPxinputxhistogram:
xxxxxxxxxdestinationxunreachable:x125
xxxxxxxxxechoxrequests:x3
xxxxxxxxxechoxreplies:x12
xxxxx61xICMPxmessagesxsent
xxxxx0xICMPxmessagesxfailed
xxxxxICMPxoutputxhistogram:
xxxxxxxxxdestinationxunreachable:x58
xxxxxxxxxechoxreplies:x3
xTcp:
xxxxx37328xactivexconnectionsxopenings
xxxxx182xpassivexconnectionxopenings
xxxxx30011xfailedxconnectionxattempts
xxxxx50xconnectionxresetsxreceived
xxxxx4xconnectionsxestablished
xxxxx236131xsegmentsxreceived
xxxxx131732xsegmentsxsendxout
xxxxx371xsegmentsxretransmited
xxxxx0xbadxsegmentsxreceived.
xxxxx15052xresetsxsent
xUdp:
xxxxx328xpacketsxreceived
xxxxx58xpacketsxtoxunknownxportxreceived.
xxxxx0xpacketxreceivexerrors
xxxxx455xpacketsxsent
xTcpExt:
xxxxx207xTCPxsocketsxfinishedxtimexwaitxinxfastxtimer
xxxxx128xtimexwaitxsocketsxrecycledxbyxtimexstamp
xxxxx268xdelayedxacksxsent

xxxxx5xdelayedxacksxfurtherxdelayedxbecausexofxlockedxsocket
xxxxxQuickxackxmodexwasxactivatedx18xtimes
xxxxx5665xpacketsxdirectlyxqueuedxtoxrecvmsgxprequeue.
xxxxx33578xofxbytesxdirectlyxreceivedxfromxprequeue
xxxxx168068xpacketxheadersxpredicted
xxxxx41xpacketsxheaderxpredictedxandxdirectlyxqueuedxtoxuser
xxxxx906xacknowledgmentsxnotxcontainingxdataxreceived
xxxxx7266xpredictedxacknowledgments
xxxxx6xcongestionxwindowsxrecoveredxafterxpartialxack
xxxxx0xTCPxdataxlossxevents
xxxxx334xotherxTCPxtimeouts
xxxxx4xtimesxreceiverxscheduledxtooxlatexforxdirectxprocessing
xxxxx22xconnectionsxresetxduextoxunexpectedxdata
xxxxx18xconnectionsxresetxduextoxearlyxuserxclose
xxxxx2xconnectionsxabortedxduextoxtimeout
xxx

Taller D.4: Pruebe el anterior comando. ¿Cxmo incrementarxa el nxmero de paquetes ICMP recibidos?

Conexiones de tipo “mascarada”: Las conexiones de tipo “masquerade” son las que se establecen cuando usamos la funcionalidad ipxmasquerade del kernel con el objetivo de disexar una NAT box con nuestro Linux. Ejemplo (cuando no se ha habilitado el ipxmasquerade):

#xMostrandoxlasxconexionesxmasquerade.xParaxquexestexcomando
x#xmuestrexinformacixnxrelevantexelxkernelxhaxdebidoxserxconfigurado
x#xconxlaxfuncionalidadxip_masquerade.
xusuario$xnetstatx--masquerade
xnetstat:xnoxsupportxforx`ip_masquerade'xonxthisxsystem.

Pertenencias multicast: Ejemplo:

#xMostrandoxlosxgruposxmulticastxaxlosxquexestamosxsuscritos
xusuario$xnetstatx--groups
xIPv6/IPv4xGroupxMemberships
xInterfacexxxxxxxRefCntxGroup
x---------------x------x---------------------
xloxxxxxxxxxxxxxx1xxxxxxALL-SYSTEMS.MCAST.NET
xeth0xxxxxxxxxxxx1xxxxxx224.0.0.251
xeth0xxxxxxxxxxxx1xxxxxxALL-SYSTEMS.MCAST.NET
xloxxxxxxxxxxxxxx1xxxxxxip6-allnodes
xeth0xxxxxxxxxxxx1xxxxxxff02::1:ff14:bcf6
xeth0xxxxxxxxxxxx1xxxxxxip6-allnodes

Taller D.5: Encuentre los grupos multicast a los que actualmente estx apuntada su computadora.

Nmap

[next] [prev] [prev-tail] [tail] [up] D.3 Nmap

Nmap (Network MAPper) es una utilidad Open Source (y por tanto, no hay que pagar por usarla) para la exploracixn de redes y la auditorxa de seguridad [7]. Actualmente se puede ejecutar (al menos) bajo los siguientes sistemas operativos: Linux (http://www.linux.org/http://www.linux.org/), Microsoft Windows (http://www.microsoft.com/spain/windows/default.mspx), FreeBSD (http://www.freebsd.org/), OpenBSD (http://www.openbsd.org/), Solaris (http://www.sun.com/software/solaris/), IRIX (http://www.sgi.com/products/software/irix/), Mac OS X (http://www.apple.com/es/macosx/), HP-UX (http://www.hp.com/products1/unix/operating), NetBSD (http://www.netbsd.org/), Sun OS (http://en.wikipedia.org/wiki/SunOS) y AmigaOS (http://www.amiga.com/amigaos/).

D.3.1 Instalacixn

xxxxroot#xapt-getxinstallxnmap
xxx

xxxxroot#xyumxinstallxnmapxnmap-frontend
xxx

     xxxxroot#xemergexnmap
     xxx

Taller D.6: Instale Nmap.

D.3.2 Utilizacixn bxsica Nmap puede utilizarse desde la lxnea de comandos (nmap) o desde una GUI (xnmap). Aqux interactuaremos sxlo con la versixn de consola y explicaremos algunos ejemplos muy bxsicos. Nmap es increiblemente rico en opciones y posibilidades que deben consultarse en el manual online (http://insecure.org/nmap/man/).

Sondeo de puertos TCP El sondeo de puertos consiste en ver si pueden establecerse conexiones TCP con los diferentes puertos, y sirve para conocer los servicios activos que se basan en este protocolo. Este escaneo puede realizarse realizando conexiones estxndar o un tipo de conexiones que en Nmap llama “SYN sigiloso” que no llega a establecer realmente las conexiones y por lo tanto no le aparecen al usuario de la mxquina escaneada cuando “hace” un netstat.

El primer tipo (conexixn estxndar) puede realizarse como usuario normal y es el tipo de sondeo por defecto. El segundo (que utiliza el flag -sS) sxlo puede realizarlo el usuario root. Ejemplos:

usuario$xnmapxlocalhost
x
xStartingxNmapx4.11x(xhttp://www.insecure.org/nmap/x)xatx2006-12-28x10:44xCET
xInterestingxportsxonxlocalhostx(127.0.0.1):
xNotxshown:x1675xclosedxports
xPORTxxxxSTATExSERVICE
x21/tcpxxopenxxftp
x22/tcpxxopenxxssh
x25/tcpxxopenxxsmtp
x53/tcpxxopenxxdomain
x953/tcpxopenxxrndc
x
xNmapxfinished:x1xIPxaddressx(1xhostxup)xscannedxinx0.152xseconds
x
x#xMxsxinfo!!!
xusuario$xnmapx-vxlocalhost
x
xStartingxNmapx4.11x(xhttp://www.insecure.org/nmap/x)xatx2006-12-28x10:44xCET
xInitiatingxConnect()xScanxagainstxlocalhostx(127.0.0.1)x[1680xports]xatx10:44
xDiscoveredxopenxportx21/tcpxonx127.0.0.1
xDiscoveredxopenxportx25/tcpxonx127.0.0.1
xDiscoveredxopenxportx53/tcpxonx127.0.0.1
xDiscoveredxopenxportx22/tcpxonx127.0.0.1
xDiscoveredxopenxportx953/tcpxonx127.0.0.1
xThexConnect()xScanxtookx0.04sxtoxscanx1680xtotalxports.
xHostxlocalhostx(127.0.0.1)xappearsxtoxbexupx...xgood.
xInterestingxportsxonxlocalhostx(127.0.0.1):
xNotxshown:x1675xclosedxports
xPORTxxxxSTATExSERVICE
x21/tcpxxopenxxftp
x22/tcpxxopenxxssh
x25/tcpxxopenxxsmtp
x53/tcpxxopenxxdomain
x953/tcpxopenxxrndc
x
xNmapxfinished:x1xIPxaddressx(1xhostxup)xscannedxinx0.154xseconds
x
x#xAhoraxsxloxalgunosxpuertos
xusuario$xnmapx-vx-px22,53xlocalhost
x
xStartingxNmapx4.11x(xhttp://www.insecure.org/nmap/x)xatx2006-12-29x08:40xCET
xInitiatingxConnect()xScanxagainstxlocalhostx(127.0.0.1)x[2xports]xatx08:40

xDiscoveredxopenxportx22/tcpxonx127.0.0.1
xDiscoveredxopenxportx53/tcpxonx127.0.0.1
xThexConnect()xScanxtookx0.00sxtoxscanx2xtotalxports.
xHostxlocalhostx(127.0.0.1)xappearsxtoxbexupx...xgood.
xInterestingxportsxonxlocalhostx(127.0.0.1):
xPORTxxxSTATExSERVICE
x22/tcpxopenxxssh
x53/tcpxopenxxdomain
x
xNmapxfinished:x1xIPxaddressx(1xhostxup)xscannedxinx0.110xseconds
x
x#xAhoraxunxrangoxdexmxquinas,xsxloxpuertox80
xusuario$xnmapx-vx-px80x193.147.118.128-255
x
xStartingxNmapx4.11x(xhttp://www.insecure.org/nmap/x)xatx2006-12-29x08:45xCET
xMachinex193.147.118.154xMIGHTxactuallyxbexlisteningxonxprobexportx80
xMachinex193.147.118.131xMIGHTxactuallyxbexlisteningxonxprobexportx80
xMachinex193.147.118.176xMIGHTxactuallyxbexlisteningxonxprobexportx80
xMachinex193.147.118.170xMIGHTxactuallyxbexlisteningxonxprobexportx80
xMachinex193.147.118.174xMIGHTxactuallyxbexlisteningxonxprobexportx80
xMachinex193.147.118.192xMIGHTxactuallyxbexlisteningxonxprobexportx80
xMachinex193.147.118.195xMIGHTxactuallyxbexlisteningxonxprobexportx80
xMachinex193.147.118.196xMIGHTxactuallyxbexlisteningxonxprobexportx80
xMachinex193.147.118.199xMIGHTxactuallyxbexlisteningxonxprobexportx80
xMachinex193.147.118.220xMIGHTxactuallyxbexlisteningxonxprobexportx80
xMachinex193.147.118.218xMIGHTxactuallyxbexlisteningxonxprobexportx80
xMachinex193.147.118.217xMIGHTxactuallyxbexlisteningxonxprobexportx80
xDNSxresolutionxofx18xIPsxtookx0.00s.
xInitiatingxConnect()xScanxagainstx18xhostsx[1xport/host]xatx08:45
xDiscoveredxopenxportx80/tcpxonx193.147.118.170
xDiscoveredxopenxportx80/tcpxonx193.147.118.174
xDiscoveredxopenxportx80/tcpxonx193.147.118.176
xDiscoveredxopenxportx80/tcpxonx193.147.118.199
xDiscoveredxopenxportx80/tcpxonx193.147.118.154
xDiscoveredxopenxportx80/tcpxonx193.147.118.196
xDiscoveredxopenxportx80/tcpxonx193.147.118.217
xDiscoveredxopenxportx80/tcpxonx193.147.118.220
xDiscoveredxopenxportx80/tcpxonx193.147.118.192
xDiscoveredxopenxportx80/tcpxonx193.147.118.218
xDiscoveredxopenxportx80/tcpxonx193.147.118.195
xDiscoveredxopenxportx80/tcpxonx193.147.118.131
xThexConnect()xScanxtookx0.00sxtoxscanx18xtotalxports.
xHostx193.147.118.131xappearsxtoxbexupx...xgood.
xInterestingxportsxonx193.147.118.131:
xPORTxxxSTATExSERVICE
x80/tcpxopenxxhttp

xHostx193.147.118.145xappearsxtoxbexupx...xgood.
xInterestingxportsxonx193.147.118.145:
xPORTxxxSTATExxSERVICE
x80/tcpxclosedxhttp
x
xHostxtornasol.ual.esx(193.147.118.154)xappearsxtoxbexupx...xgood.
xInterestingxportsxonxtornasol.ual.esx(193.147.118.154):
xPORTxxxSTATExSERVICE
x80/tcpxopenxxhttp
x
xHostx193.147.118.170xappearsxtoxbexupx...xgood.
xInterestingxportsxonx193.147.118.170:
xPORTxxxSTATExSERVICE
x80/tcpxopenxxhttp
x
xHostxinvernadero.ual.esx(193.147.118.174)xappearsxtoxbexupx...xgood.
xInterestingxportsxonxinvernadero.ual.esx(193.147.118.174):
xPORTxxxSTATExSERVICE
x80/tcpxopenxxhttp
x
xHostxsauce.ual.esx(193.147.118.176)xappearsxtoxbexupx...xgood.
xInterestingxportsxonxsauce.ual.esx(193.147.118.176):
xPORTxxxSTATExSERVICE
x80/tcpxopenxxhttp
x
xHostx193.147.118.192xappearsxtoxbexupx...xgood.
xInterestingxportsxonx193.147.118.192:
xPORTxxxSTATExSERVICE
x80/tcpxopenxxhttp
x
xHostxwww.dgpaa.ual.esx(193.147.118.195)xappearsxtoxbexupx...xgood.
xInterestingxportsxonxwww.dgpaa.ual.esx(193.147.118.195):
xPORTxxxSTATExSERVICE
x80/tcpxopenxxhttp
x
xHostxindalo.ual.esx(193.147.118.196)xappearsxtoxbexupx...xgood.
xInterestingxportsxonxindalo.ual.esx(193.147.118.196):
xPORTxxxSTATExSERVICE
x80/tcpxopenxxhttp
x
xHostxacacia.ual.esx(193.147.118.199)xappearsxtoxbexupx...xgood.
xInterestingxportsxonxacacia.ual.esx(193.147.118.199):
xPORTxxxSTATExSERVICE
x80/tcpxopenxxhttp

xHostx193.147.118.201xappearsxtoxbexupx...xgood.
xInterestingxportsxonx193.147.118.201:
xPORTxxxSTATExxSERVICE
x80/tcpxclosedxhttp
x
xHostx193.147.118.206xappearsxtoxbexupx...xgood.
xInterestingxportsxonx193.147.118.206:
xPORTxxxSTATExxSERVICE
x80/tcpxclosedxhttp
x
xHostxaer.ual.esx(193.147.118.217)xappearsxtoxbexupx...xgood.
xInterestingxportsxonxaer.ual.esx(193.147.118.217):
xPORTxxxSTATExSERVICE
x80/tcpxopenxxhttp
x
xHostxlsi.ual.esx(193.147.118.218)xappearsxtoxbexupx...xgood.
xInterestingxportsxonxlsi.ual.esx(193.147.118.218):
xPORTxxxSTATExSERVICE
x80/tcpxopenxxhttp
x
xHostx193.147.118.220xappearsxtoxbexupx...xgood.
xInterestingxportsxonx193.147.118.220:
xPORTxxxSTATExSERVICE
x80/tcpxopenxxhttp
x
xHostxlibras.ual.esx(193.147.118.234)xappearsxtoxbexupx...xgood.
xInterestingxportsxonxlibras.ual.esx(193.147.118.234):
xPORTxxxSTATExxSERVICE
x80/tcpxclosedxhttp
x
xHostxdesaveal.ual.esx(193.147.118.238)xappearsxtoxbexupx...xgood.
xInterestingxportsxonxdesaveal.ual.esx(193.147.118.238):
xPORTxxxSTATExxSERVICE
x80/tcpxclosedxhttp
x
xHostxcabezon.ual.esx(193.147.118.244)xappearsxtoxbexupx...xgood.
xInterestingxportsxonxcabezon.ual.esx(193.147.118.244):
xPORTxxxSTATExxSERVICE
x80/tcpxclosedxhttp
x
xNmapxfinished:x128xIPxaddressesx(18xhostsxup)xscannedxinx1.317xseconds

Sonde del SO Sxlo como root. Nmap envxa una coleccixn de paquetes especxfico al sistema remoto para tratar de adivinar el sistema operativo que ejecuta. Ejemplo:

root#xnmapx-Oxlocalhost
x
xStartingxNmapx4.11x(xhttp://www.insecure.org/nmap/x)xatx2006-12-28x10:48xCET
xInterestingxportsxonxlocalhostx(127.0.0.1):
xNotxshown:x1675xclosedxports
xPORTxxxxSTATExSERVICE
x21/tcpxxopenxxftp
x22/tcpxxopenxxssh
x25/tcpxxopenxxsmtp
x53/tcpxxopenxxdomain
x953/tcpxopenxxrndc
xDevicextype:xgeneralxpurpose
xRunning:xLinuxx2.4.X|2.5.X|2.6.X
xOSxdetails:xLinuxx2.4.0x-x2.5.20,xLinuxx2.5.25x-x2.6.8xorxGentoox1.2\
xxLinuxx2.4.19xrc1-rc7,xLinuxx2.6.3x-x2.6.10
x
xNmapxfinished:x1xIPxaddressx(1xhostxup)xscannedxinx2.049xseconds

Taller D.7: Pruebe los anteriores comandos. Sea imaginativo y no enfade a nadie :-)

Sondeo de puertos UDP Hay determinados servicios que sxlo se ofrecen a travxs de UDP. Para descubirlos se utiliza este tipo de escaneo. Un ejemplo (sxlo root):

usuario$xnmapx-sUxlocalhost
x
xStartingxNmapx4.11x(xhttp://www.insecure.org/nmap/x)xatx2006-12-29x08:56xCET
xInterestingxportsxonxlocalhostx(127.0.0.1):
xNotxshown:x1486xclosedxports
xPORTxxxSTATExxxxxxxxxSERVICE
x53/udpxopen|filteredxdomain
x
xNmapxfinished:x1xIPxaddressx(1xhostxup)xscannedxinx1.288xseconds

Descubriendo los hosts encendidos en un rango de IPs Ahora damos otro ejemplo donde escaneamos un rango de direcciones IPutilizando el mensaje Echo Request del protocolo ICMP. Ejemplo:

usuario$xnmapx-sPx193.147.118.*
x
xStartingxNmapx4.11x(xhttp://www.insecure.org/nmap/x)xatx2006-12-29x08:59xCET
xHostx193.147.118.1xappearsxtoxbexup.
xHostx193.147.118.2xappearsxtoxbexup.
xHostx193.147.118.3xappearsxtoxbexup.
xHostx193.147.118.5xappearsxtoxbexup.
xHostx193.147.118.21xappearsxtoxbexup.
xHostx193.147.118.24xappearsxtoxbexup.
xHostx193.147.118.25xappearsxtoxbexup.
xHostx193.147.118.26xappearsxtoxbexup.
xHostx193.147.118.27xappearsxtoxbexup.
xHostx193.147.118.28xappearsxtoxbexup.
xHostx193.147.118.29xappearsxtoxbexup.
xHostx193.147.118.30xappearsxtoxbexup.
xHostx193.147.118.38xappearsxtoxbexup.
xHostxindalog.ual.esx(193.147.118.39)xappearsxtoxbexup.
xHostx193.147.118.40xappearsxtoxbexup.
xHostx193.147.118.43xappearsxtoxbexup.
xHostx193.147.118.45xappearsxtoxbexup.
xHostxeuropa.ace.ual.esx(193.147.118.46)xappearsxtoxbexup.
xHostx193.147.118.47xappearsxtoxbexup.
xHostx193.147.118.48xappearsxtoxbexup.
xHostx193.147.118.49xappearsxtoxbexup.
xHostxvermeer.ace.ual.esx(193.147.118.50)xappearsxtoxbexup.
xHostxiron.ace.ual.esx(193.147.118.54)xappearsxtoxbexup.
xHostxdali.ace.ual.esx(193.147.118.56)xappearsxtoxbexup.
xHostxgogh.ace.ual.esx(193.147.118.57)xappearsxtoxbexup.
xHostxrenoir.ace.ual.esx(193.147.118.61)xappearsxtoxbexup.
xHostxcaesarg.ace.ual.esx(193.147.118.67)xappearsxtoxbexup.
xHostx193.147.118.73xappearsxtoxbexup.
xHostxdavinci.ace.ual.esx(193.147.118.77)xappearsxtoxbexup.
xHostx193.147.118.80xappearsxtoxbexup.
xHostx193.147.118.81xappearsxtoxbexup.
xHostxio.ace.ual.sx(193.147.118.89)xappearsxtoxbexup.
xHostx193.147.118.92xappearsxtoxbexup.
xHostx193.147.118.131xappearsxtoxbexup.
xHostx193.147.118.145xappearsxtoxbexup.
xHostxtornasol.ual.esx(193.147.118.154)xappearsxtoxbexup.
xHostx193.147.118.170xappearsxtoxbexup.
xHostxinvernadero.ual.esx(193.147.118.174)xappearsxtoxbexup.
xHostxsauce.ual.esx(193.147.118.176)xappearsxtoxbexup.

xHostx193.147.118.192xappearsxtoxbexup.
xHostxwww.dgpaa.ual.esx(193.147.118.195)xappearsxtoxbexup.
xHostxindalo.ual.esx(193.147.118.196)xappearsxtoxbexup.
xHostxacacia.ual.esx(193.147.118.199)xappearsxtoxbexup.
xHostx193.147.118.201xappearsxtoxbexup.
xHostx193.147.118.206xappearsxtoxbexup.
xHostxaer.ual.esx(193.147.118.217)xappearsxtoxbexup.
xHostxlsi.ual.esx(193.147.118.218)xappearsxtoxbexup.
xHostx193.147.118.220xappearsxtoxbexup.
xHostxlibras.ual.esx(193.147.118.234)xappearsxtoxbexup.
xHostxdesaveal.ual.esx(193.147.118.238)xappearsxtoxbexup.
xHostxcabezon.ual.esx(193.147.118.244)xappearsxtoxbexup.
xNmapxfinished:x256xIPxaddressesx(51xhostsxup)xscannedxinx1.892xseconds

Taller D.8: Encuentre los hosts encendidos en su red privada.

Nessus

[next] [prev] [prev-tail] [tail] [up]

D.4 Nessus Nessus [2] es una herramienta para en anxlisis de la vulnerabilidad en redes. Ejecuta una coleccixn de “ataques” contra un host con el origen de conocer los posibles agujeros de seguridad en un host que estx encendido y conectado a Internet. Si Nmap es la herramienta por excelencia para conocer qux servicios pueden ser “atacados”, Nessus es la utilidad que permite conocer qux agujeros de seguridad pueden tener dichos servicios.

Nessus es un programa compuesto por un cliente y un servidor y (como es de esperar) ambos programas pueden ejecutarse en hosts diferentes. El servidor realiza todo el trabajo de escaneo que especifica el cliente. Un servidor puede ser usado por varios clientes y generalmente los clientes ademxs tienen la posibilidad de utilizar varios servidores en diferentes sesiones.

D.4.1 Instalacixn (cliente y servidor)

Debian Linux: x

     Descargar los ficheros Nessus-<ultimaxversion>.deb y
     NessusClient-<ultimaxversion>.deb de http://www.nessus.org/download/.

root#xdpkgx-ixNessus-<ultima_version>.deb
xroot#xdpkgx-ixNessusClient-<ultima_version>.deb

Fedora Core Linux: x

Descargar el fichero Nessus-<ultimaxversion>.rpm y
NessusClient-<ultimaxversion>.rpm de http://www.nessus.org/download/.

root#xrpmx-UvhxNessus-<ultima_version>.rpm
xroot#xrpmx-UvhxNessusClient-<ultima_version>.rpm

Taller D.9: Instale Nessus.

D.4.2 Configuracixn del servidor

Crear un usuario en el servidor de Nesus: x

root#x/opt/nessus/sbin/nessus-add-first-user

Se nos pregutarxn tres cosas: (1) un nombre de usuario, (2) la forma de autentificacixn (elegir “pass”-word) y (3) un password.

Crear un certificado de usuario: Sirve para aseguranos que nos conectamos con el servidor que estamos instalando cuando accedamos a xl desde un cliente Nessus.

root#x/opt/nessus/sbin/nessus-mkcert

Registrarnos como usuario de Nessus: Cuando nos hemos descargado el paquete Nessus se nos ha enviado a la direccixn de correo especificada un cxdigo de activacixn. Activar la descarga de los plugins utilizando:

root#x/opt/nessus/sbin/nessus-fetchx--registerx<el_cxdigo_de_activacixn>

Actualizar los plugins: Para utilizar los xltimos ataques que existen es recomendable mantener actualizada la lista de plugins que Nessus va a utilizar:

root#x/opt/nessus/sbin/nessus-update-plugins

Este paso deberxa realizarse perixdicamente (una vez a la semana mxs o menos) para disponer de los xltimos plugins. Un detalle importante. Nessus puede ser utilizado bajo una licencia comercial (pagando) y bajo una licencia libre. La ventaja de utilizar la versixn comercial es que tendremos acceso a los plugins una semana antes que para la versixn libre.

Ejecutar el servidor:

     root#x/etc/init.d/nessusxstart

Taller D.10: Configure el servidor Nessus.

D.4.3 Uso del cliente El cliente Nessus tiene un interfaz de texto (nessus-text) y otro grxfico (nessus), mucho mxs fxcil de utilizar. Para ejecutarlo:

usuario$x/usr/X11R6/bin/NessusClient

El cliente puede ser ejecutado en cualquier host, diferente o no del que ejecuta el servidor. Los pasos bxsicos que deberemos realizar son:

Acceder al servidor (usaremos el login y password anteriormente creados). Seleccionar los plugins que deseamos ejecutar. Seleccionar el host “Target” que vamos a escanear. Pinchar en el botxn de iniciar el escaneo.

Tras el escaneo obtendremos una lista de servicios disponibles en el host escaneado y comentarios acerca de la vulnerabilidad de dichos servicios.

Taller D.11: Pruebe alguno de los “exploits” que posee Nessus para comprobar la seguridad de alguno de los servicios que ofrece su computadora.

[next] [prev] [prev-tail] [front] [up] [next] [prev] [prev-tail] [front] [up] E Filtrado de paquetes en Linux

[next] [prev] [prev-tail] [tail] [up] AppendixxEFiltrado de paquetes en Linux

El filtrado de paquetes es una txcnica que consiste, normalmente, en descartar aquellos paquetes que llegan (salen) hasta (desde) nuestro host a un puerto o con un contenido no deseado. En el primer caso los paquetes se filtran atendiendo al puerto al que van dirigidos (por ejemplo, todo lo que no vaya al puerto 80 deberxa ser ignorado si un servidor sxlo deberxa ofrecer servicio Web). En el segundo el payload de los paquetes es analizado y dependiendo de este pueden ser eliminados (por ejemplo, todo aquel paquete que utilice el protocolo del eMule deberxa ser destruxdo). Otra situacixn muy comxn puede ser no transmitir paquetes que vengan o vayan desde o hacia un determinado rango de direcciones IP.

El filtrado de paquetes se realiza normlamente en los cortafuegos. Por ejemplo, en la universidad se filtran todos los paquetes de entrada que no provengan del trxfico Web o SSH, y se analiza el contenido de los paquetes para eliminar el trxfico generado por la mayorxa de las aplicaciones P2P de comparticixn de ficheros (como eMule). Sin embargo, existen situaciones donde esto no es suficiente. ¿Qux pasarxa si los paquetes no deseados llegan desde otro host situado en la misma red que la nuestra y cuyo trxfico no es filtrado por el cortafuegos?

xE.1 En Linux el filtrado de paquetes se realiza a nivel del kernel xxE.1.1 Habilitando el kernel xxE.1.2 Instalacixn de iptables xE.2 El proceso de filtrado xE.3 Uso de iptables xxE.3.1 Mostrar la lista de reglas de una cadena xxE.3.2 Crear una nueva cadena xxE.3.3 Resetear las estadxsticas de una cadena xxE.3.4 Cambiar el comportamiento por defecto de una cadena xxE.3.5 Vaciar una cadena xxE.3.6 Borrar una cadena vacxa xxE.3.7 Axadir una nueva regla a una cadena xxE.3.8 Borrar una regla de una cadena xxE.3.9 Axadiendo reglas mxs complejas xxE.3.10 Salvando y restaurando las cadenas

En Linux el filtrado de paquetes se realiza a nivel del kernel

[next] [prev] [prev-tail] [tail] [up] E.1 En Linux el filtrado de paquetes se realiza a nivel del kernel

Para controlar cxmo se filtran los paquetes el kernel utiliza una tabla de filtrado de paquete y la utilidad que permite manipularla se llama iptables. Por tanto, el kernel ha debido ser compilado con esta opcixn o habrx que cargar el mxdulo correspondiente. Finalmente, la utilidad de la que hablamos deberx estar instalada.

E.1.1 Habilitando el kernel El kernel se habilita para filtrar paquetes cuando cargamos el mxdulo iptablexfilter. Esto se hace escribiendo:

root#xinsmodxiptable_filter

o modificando el fichero correspondiente para que dicha carga se haga cuando la mxquina arranca. Vxase el Apxndice ?? para mxs informacixn.

Si por lo que sea no queremos habilitar el kernel cargando el mxdulo correspondiente sxlo nos queda la opcixn de compilar uno nuevo y usarlo.

E.1.2 Instalacixn de iptables

root#xapt-getxinstallxiptables

Fedora Core Linux: x

root#xyumxinstallxiptables

Gentoo Linux: x

root#xemergexiptables

El proceso de filtrado

[next] [prev] [prev-tail] [tail] [up]

E.2 El proceso de filtrado El kernel maneja tres listas de reglas en su tabla de filtrado de paquetes. Las listas se llaman tambixn cadenas (chains, en inglxs). Bien, en concreto las cadenas que manejaremos se llaman input, output and forward.

Input controla los paquetes que entran en el host, output los que son generados en el host y lo avandonan y forward los que vienen desde el exterior pero no van dirigidos a ningxn proceso del host. Una figura (http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO-6.html) aclara el tema:

xxxxxxxxxxxxxxxxxxxxxxxxxx_____
xIncomingxxxxxxxxxxxxxxxxx/xxxxx\xxxxxxxxxxOutgoing
xPacketsx->[Routingx]--->|FORWARD|------->xPackets
xxxxxxxxxxx[Decision]xxxxx\_____/xxxxxxxx^
xxxxxxxxxxxxxxxx|xxxxxxxxxxxxxxxxxxxxxxxx|
xxxxxxxxxxxxxxxxvxxxxxxxxxxxxxxxxxxxxxxx____
xxxxxxxxxxxxxxx___xxxxxxxxxxxxxxxxxxxxx/xxxx\
xxxxxxxxxxxxxx/xxx\xxxxxxxxxxxxxxxxxxx|OUTPUT|
xxxxxxxxxxxxx|INPUT|xxxxxxxxxxxxxxxxxxx\____/
xxxxxxxxxxxxxx\___/xxxxxxxxxxxxxxxxxxxxxxx^
xxxxxxxxxxxxxxxx|xxxxxxxxxxxxxxxxxxxxxxxxx|
xxxxxxxxxxxxxxxx+---->xLocalxProcessx-----+

Asx, cada vez que un paquete alcanza una cadena se utilizan una lista de reglas para saber si abandonamos (drop, en inglxs) o aceptamos el paquete.

Finalmente indicar que la lista forward se utiliza sxlo cuando configuramos nuestro host como un router (o NAT) con cortafuegos.

Uso de iptables

[next] [prev] [prev-tail] [tail] [up]

E.3 Uso de iptables

E.3.1 Mostrar la lista de reglas de una cadena

root#xiptablesx--list
xChainxINPUTx(policyxACCEPT)
xtargetxxxxxprotxoptxsourcexxxxxxxxxxxxxxxdestination
x
xChainxFORWARDx(policyxACCEPT)
xtargetxxxxxprotxoptxsourcexxxxxxxxxxxxxxxdestination
x
xChainxOUTPUTx(policyxACCEPT)
xtargetxxxxxprotxoptxsourcexxxxxxxxxxxxxxxdestination
x
xroot#xiptablesx--verbosex--listxINPUT
xChainxINPUTx(policyxACCEPTx115xpackets,x15731xbytes)
xpktsxbytesxtargetxxxxxprotxoptxinxxxxxoutxxxxxsourcexxxxxxxxxxxxxxxdestination

E.3.2 Crear una nueva cadena Aparte de las tres cadenas que existen por defecto (INPUT, OUTPUT y FORWARD), el usuario puede crear cadenas nuevas:

root#xiptablesx--newxnew_chain

Asx, cuando un paquete “acierta” con una regla de una cadena, la accixn puede ser que pase a ser procesado por la nueva cadena. Esto se hace para reducir el nxmero de reglas por cadena y que asx sean mxs fxciles de manejar.

Si ninguna de las reglas de la nueva cadena procesa el paquete, el proceso de chequeo continxa por la siguiente regla que referenciaba a la nueva cadena.

E.3.3 Resetear las estadxsticas de una cadena Pone a cero los contadores de la cadena:

root#xiptablesx--zeroxchain_name

E.3.4 Cambiar el comportamiento por defecto de una cadena Por defecto las cadenas INPUT, OUTPUT y FORWARD estxn en modo ACCEPT, significando que dejan pasar los paquetes. Esto puede modificarse cambiando lo que define como “policy” de la cadena. Un ejemplo que evita que podamos transmitir ningxn paquete:

root#xiptablesx--policyxOUTPUTxDROP

Los posibles modos de una regla o de una cadena son: ACCEPT: Aceptar el paquete. DROP: Destruir el paquete. REJECT: Destruir el paquete pero enviando un paquete ICMP de puerto

inalcanzable. QUEUE: Pasar al paquete al espacio de usuario. Se utiliza para procesar los

paquetes que llegan por un determinado proceso, independientemente de que vayan o no dirigidos a xl.

RETURN: Retornar (sin chequear mxs reglas) a la canena que nos dix el control.

E.3.5 Vaciar una cadena Para eliminar las reglas de una cadena, escribir:

root#xiptablesx--flushxchain_name

E.3.6 Borrar una cadena vacxa Podemos borrar una cadena vacxa con:

root#xiptablesx--delete-chainxchain_name

E.3.7 Axadir una nueva regla a una cadena En el siguiente ejemplo se filtra todo aquel paquete que vaya dirigido a la direccixn IP

27.0.0.1:

root#xpingx-cx1x127.0.0.1
xPINGx127.0.0.1x(127.0.0.1):x56xdataxbytes
x64xbytesxfromx127.0.0.1:xicmp_seq=0xttl=64xtime=0.2xms
x
x---x127.0.0.1xpingxstatisticsx---
x1xpacketsxtransmitted,x1xpacketsxreceived,x0%xpacketxloss
xround-tripxmin/avg/maxx=x0.2/0.2/0.2xms
x
xroot#xiptablesx--appendxINPUTx--sourcex127.0.0.1x--protocolxicmpx--jumpxDROP
x#xpingx-cx1x127.0.0.1
xPINGx127.0.0.1x(127.0.0.1):x56xdataxbytes
x
x---x127.0.0.1xpingxstatisticsx---
x1xpacketsxtransmitted,x0xpacketsxreceived,x100%xpacketxloss
x
xroot#xiptablesx--verbosex--listxINPUT
xChainxINPUTx(policyxACCEPTx169xpackets,x21274xbytes)
xpktsxbytesxtargetxxxxxprotxoptxinxxxxxoutxxxxxsourcexxxxxxxxxxxxxxxxdestination
x1xxxx84xxxxDROPxxxxxxxicmpx--xxanyxxxxanyxxxxxlocalhost.localdomainxanywhere

E.3.8 Borrar una regla de una cadena Borraremos la regla que acabamos de crear con:

root#xiptablesx--deletexINPUTx1

O tambixn con:

root#xiptablesx--deletexINPUTx--sourcex127.0.0.1x--protocolxicmpx--jumpxDROP

Nxtese que los argumentos son idxnticos a los que utilizamos para crear la regla.

E.3.9 Axadiendo reglas mxs complejas Algunos de los parxmetros con los que podemos jugar son (vxase [12] y [1] para mxs informacixn):

Las direcciones IP de origen y destino: Por ejemplo, podemos especificar sxlo los paquetes que van dirigidos a la red local puedan salir del host:

root#xiptablesx--appendxOUTPUTx--destinationx!x192.168.213.0/24x--jumpxDROP

El protocolo utilizado: Ejemplo, sxlo el trxfico Web de entrada estx permitido:

#xNxtesexelxflagx--synxquex``matches''xsxloxlosxpaquetesxTCP
x#xdexestablecimientoxdexconexixn
xroot#xiptablesx--appendxINPUTx--protocolxtcpx--synx--dportx!xhttpx--jumpxREJECT

El puerto utilizado: Sxlo aquellos paquetes que vayan al puerto 22 (SSH) serxn aceptados:

root#xiptablesx--appendxINPUTx--protocolxtcpx--synx--dportx!x22x--jumpxACCEPT

El interface de red usado: Esto es xtil cuando estamos creando un router o un NAT. Ejemplo, aceptar todo lo que venga de eth0:

     root#xiptablesx--appendxINPUTx--in-interfacexeth0x--jumpxACCEPT

E.3.10 Salvando y restaurando las cadenas Existen dos comandos para hacer esto: iptables-save y iptables-restore. Ambas leen y escriben la entrada y salida estxndares. Ejemplos:

root#xiptables-savex>xiptables.txt
x
xroot#xiptables-restorex<xiptables.txt

Taller E.1: Configure iptables para aceptar sxlo el trxfico Web.

[next] [prev] [prev-tail] [front] [up] [next] [prev] [prev-tail] [front] [up] F Captura de paquetes usando Wireshark

[next] [prev] [prev-tail] [tail] [up] AppendixxFCaptura de paquetes usando Wireshark

Toda la comunicacixn que se produce en redes de computadoras se realiza a base de paquetes de datos. Unas veces estos paquetes son generados por nuestra computadora, otras van dirigidos a xsta y en otras ocasiones los paquetes simplemente pasan cerca de ella y es posible capturarlos.

La herramienta que permite capturar los paquetes se llama tambixn un packet sniffer (traduciendo de alguna forma: “un olisqueador de paquetes”). Existen muchos sniffers, entre los que podemos destacar a tcpdump (http://www.tcpdump.org) y Ethereal (http://www.ethereal.com) (llamado ahora Wireshark (http://www.wireshark.org). El primero tiene una interfaz texto. El segundo grxfica.

xF.1 ¿Quixn usa un sniffer? xF.2 Sniffers y analizadores de paquetes xF.3 Instalacixn de Wireshark xF.4 El interfaz grxfico de Wireshark xF.5 Capturando paquetes con Wireshark xF.6 Filtrado de los paquetes capturados xF.7 Ordenacixn de los paquetes capturados xF.8 Anxlisis de los paquetes

¿Quin usa un sniffer?

[next] [prev] [prev-tail] [tail] [up] F.1 ¿Quixn usa un sniffer?

Los sniffers son usados por los hackers, pero tambixn por los programadores de aplicaciones de red y por los administradores de las redes que desean depurar algxn problema. Nosotros los usaremos en estas prxcticas fundamentalmente por los dos xltimos motivos.

Sniffers y analizadores de paquetes

[next] [prev] [prev-tail] [tail] [up]

F.2 Sniffers y analizadores de paquetes Muchas veces (como ocurre con Wireshark) el sniffer viene acompaxado de un analizador de paquetes (o viceversa). El sniffer se encarga de capturarlos y el analizador de comprender cxmo estxn los datos organizados en los paquetes y presentarlos al usuario de alguna determinada forma. El sniffer puede capturar todos los paquetes que pasan por alguno de los adaptadora de red de la computadora pero no necesita para ello saber cxmo se han ido encapsulando los datos en funcixn de los diferentes protocolos que se han utilizado para construir estos paquetes. El analizador sx que debe entender de protocolos y cxmo la encapsulacixn se ha realizado.

Instalacin de Wireshark

[next] [prev] [prev-tail] [tail] [up] F.3 Instalacixn de Wireshark

Microsoft Windows: Acceder a la Web de Wireshark (http://www.wireshark.org/download.html) y descargar el instalador de un mirror.

root#xapt-getxinstallxwireshark

Fedora Core Linux: x

root#xyumxinstallxwireshark

Gentoo Linux: x

root#xemergexwireshark

El interfaz grfico de Wireshark

[next] [prev] [prev-tail] [tail] [up] F.4 El interfaz grxfico de Wireshark PIC FigurexF.1: Interface de usuario de la aplicacixn Wireshark.

Descrito de arriba a abajo, el interfaz grxfico de Wireshark (vxase la Figura F.1) consta de 6 partes principales:

La zona de menus que permite lanzar una captura y controlar cxmo se lleva a cabo.

La zona de botones con las principales acciones que podemos realizar. Cada uno de estos botones genera una descripcion en texto que aparece cuando dejamos el puntero del ratxn un tiempo sin moverlo.

La entrada para especificar un filtro. Con este elemento podemos controlar los paquetes que aparecen (que son un subconjunto de los que se capturan) en la lista de paquetes capturados.

La lista de los paquetes filtrados. En ella aparece por cada paquete una lxnea diferente. En cada una de ellas aparecen los siguientes campos:

El xndice del paquete en la sesixn de captura.

El instante en que se ha capturado el paquete.

La direccixn IP del interface de red del que ha partido el paquete.

La direccixn IP del interface de red al que va dirigido el paquete.

El protocolo de mxs alto nivel que es usado por el paquete.

Informacixn extra sobre el contenido del paquete.

Los paquetes pueden ordenarse por cualquiera de estos campos pinchando con el ratxn en el encabezado de la columna correspondiente.

Los detalles sobre la cabecera del paquete seleccionado en la lista de paquetes. Entre estos detalles figura informacixn sobre el frame ethernet y el datagrama IP que contiene este paquete. La cantidad de informacixn mostrada puede extenderse o minimizarse pinchando en los trixngulos que aparecen.

El contenido del paquete (incluxda la cabecera) en hexadecimal y ASCII.

Capturando paquetes con Wireshark

[next] [prev] [prev-tail] [tail] [up] F.5 Capturando paquetes con Wireshark PIC FigurexF.2: Seleccixn del interface de red a “sniffear”.

PIC FigurexF.3: Control de las opciones de captura.

PIC FigurexF.4: Estadxsticas de la captura.

PIC FigurexF.5: Wireshark mostrando todos los paquetes capturados.

Para capturar paquetes hay que realizar los siguientes pasos: Ejecutar Wireshark como root. Si ejecutx el sistema grxfico como un usuario diferente (de root), ejecute en un shell grxfico el comando:

usuario$xxhostx+

Acceda como root al sistema escribiendo:

usuario$xsux-

y una vez que haya accedido, indique que el display usado por el root es el mismo que el del usuario:

root#xexportxDISPLAY=:0.0

Seleccionar el interface de red del que desea capturar. Esto puede hacerse pinchando en el botxn que estx situado bajo el menu File o seleccionado el menu Capture -¿ Interfaces. Deberxa aparecer una ventana con la lista de adaptadores de red. Seleccione el adaptador que nos conecta con Internet (generalmente eth0). Vxase la Figura F.2.

Definir las opciones de captura pulsando el botxn Options, si fuera necesario modificar las opciones por defecto. Aparecerx una ventana (Figura F.3) que permite definir los siguientes parxmetros:

Una nueva oportunidad para definir el interface de red del que vamos a capturar.

La tecnologxa fxsica de red que utilizamos (generalmente Ethernet).

El tamaxo mxximo de los paquetes.

El filtro de captura (muy xtil cuando vamos a capturar durante mucho tiempo y sxlo estamos interesados en un tipo concreto de paquetes).

El fichero que almacenarx la captura su decidimos almacenarla en disco. Es posible definir multiples ficheros.

Los parxmetros de fin de la captura.

Los parxmetros de visualiacixn.

Pulsar el botxn Start (este botxn aparece tambixn bajo el menx View). Aparecerx una ventana (vxase la Figura F.4) que indica el nxmero de paquetes capturados para unos cuantos protocolos muy frecuentes. Esta ventana contiene un botxn Stop que permite detener la captura.

Pulsar el botxn Stop. La ventana con la estadxstica de la captura se cerrarx y aparecerx la lista de paquetes capturados (Figura F.5).

Filtrado de los paquetes capturados

[next] [prev] [prev-tail] [tail] [up] F.6 Filtrado de los paquetes capturados PIC FigurexF.6: Wireshark mostrando sxlo los paquetes HTTP capturados.

Generalmente el nxmero de paquetes capturados en mucho mayor que el que nos interesa. Una forma sencilla de trabajar sxlo con los paquetes que desamos es usar el campo Filter: y a continuacixn pulsar en el botxn Aplicar. Por ejemplo, en la Figura F.6 se muestran sxlo los paquetes generados por el protocolo HTTP.

Ordenacin de los paquetes capturados

[next] [prev] [prev-tail] [tail] [up] F.7 Ordenacixn de los paquetes capturados PIC FigurexF.7: Wireshark mostrando sxlo los paquetes HTTP capturados y ordenados por la direccixn IP fuente.

En algunas situaciones puede ser interesante ordenar los paquetes siguiendo otro orden distinto del usado por defecto (el temporal). Esto puede hacerse pulsando con el botxn izquierdo del ratxn en la columna por la que deseamos ordenar. Por ejemplo, en la Figura F.7 se muestran sxlo los paquetes generados por el protocolo HTTP, ordenados por la direccixn IP fuente.

Anlisis de los paquetes

[next] [prev] [prev-tail] [tail] [up] F.8 Anxlisis de los paquetes PIC FigurexF.8: Expansixn de la cabecera HTTP de un paquete capturado.

Una de las principales utilidades de Wireshark radica en la facilidad de uso de cara a determinar cxmo se ha realizado el proceso de encapsulamiento. Para ver cxmo se ha ido realizando, en la ventana central aparecen las distintas cabeceras que se han generado. Podemos conocer el contenido concreto de cada una de ellas pulsando con el botxn derecho del ratxn en el trixngulo asociado. Al situarnos sobre xl cambiarx de blanco a negro y al pulsar, aparecerx el contenido de la cabecera. Por ejemplo, en la Figura F.8 se ha expandido la cabecera HTTP.

[next] [prev] [prev-tail] [front] [up] [next] [prev] [prev-tail] [front] [up] G Distribucin de ficheros usando Bittorrent

[next] [prev] [prev-tail] [tail] [up] AppendixxGDistribucixn de ficheros usando Bittorrent

Bittorrent es una aplicacixn para compartir ficheros desarrollada por Bram Cohen. Bittorrent es semejante al Ftp, en el sentido en que hay un servidor de ficheros y un conjunto de clientes que acceden a xl para descargarselos. Sin embargo, Bittorrent permite que los clientes hagan a su vez de servidores una vez que una parte de los ficheros ya estxn en su poder. De esta manera, al existir muchos servidores concurrentes, la distribucixn de los ficheros se acelera de una forma impresionante. Por este motivo, Bittorrent es actualmente el sistema de comparticixn de ficheros mxs utilizado.

xG.1 Arquitectura de Bittorrent xG.2 Funcionamiento bxsico de Bittorrent xG.3 Uso de un “cliente” xG.4 Uso de un “servidor” xxG.4.1 Instalacixn de un tracker xxG.4.2 Generacixn del fichero .torrent xxG.4.3 Activacixn del seed

Arquitectura de Bittorrent

[next] [prev] [prev-tail] [tail] [up] G.1 Arquitectura de Bittorrent

En Bittorrent hay dos elementos principales:

El tracker. Es estrictamente un servidor, aunque no de ficheros. Se engarga de conocer a un subconjunto de los peers que estxn compartiendo un recurso (en Bitorrent se pueden compartir ficheros o conjuntos de ficheros, asx que usaremos el txrmino recurso para referirnos a ambos casos). Txngase que en cuenta que el nxmero de peers que comparte un recurso no estx limitado. El tracker sirve de nodo de acceso inicial a la red de comparticixn. Cuando un peer quiere comenzar a descargarse un recurso, o a comenzar a compartir un recurso (“publicar” un nuevo fichero, por ejemplo), debe ponerse en contacto con el tracker.

El peer. Funciona como cliente y como servidor, dependiendo del caso:

Cliente: Cuando se descarga un recurso y por la razxn que sea, no lo reenvxa hacia otro peer.

Servidor y cliente: Cuando comparte el recurso que se estx descargando con otros peers. Es la situacixn mxs comxn.

Estrictamente como servidor: Cuando ya ha terminado de descargarse el recurso o cuando xl es la fuente inicial de recurso. En este caso el peer suele llamarse seed (semilla). Nxtese que un seed siempre tiene una copia completa del recurso.

Funcionamiento bsico de Bittorrent

[next] [prev] [prev-tail] [tail] [up]

G.2 Funcionamiento bxsico de Bittorrent Cuando un seed decide compartir un recurso lo particiona en bloques de un determinado tamaxo. Dichos bloques son la unidad mxnima de comparticixn en el sentido en que hasta que un peer no dispone al menos de un bloque, no comienza a actuar como servidor.

Los peers mantienen un nxmero bastante bajo (que suele ser 4) de conexiones con otros peer cuando comparte un recurso. Bittorrent trata siempre de establecer conexiones con aquellos peers que mxs sirven. Como las conexiones son bidireccionales, aquellos peers que mxs sirven nos seleccionarxn a nosotros si nosotros tambixn somos unos buenos servidores. Por tanto, nos conectaremos con los mejores servidores si nosotros somos un buen servidor. Esta es una de las claves del superior rendimiento que posee Bittorrent frente a otros sistemas de comparticixn de archivos.

Para distribuir los recursos se utiliza un fichero con la extensixn “.bittorrent”. En dicho fichero figura el nombre de el/los archivo/s distribuido/s y una URL de la forma:

xxprotocol://tracker:port/directory

donde protocol es el nombre del protocolo usado para realizar las peticiones al servidor (generalmente http, aunque tambixn es posible udp), tracker es la direccixn IP o el nombre del tracker, port es el puerto en el que escucha el servicio tracker y directory es el nombre de un directorio que el tracker utiliza para anunciar los recursos (“torrents”).

Uso de un “cliente”

[next] [prev] [prev-tail] [tail] [up]

G.3 Uso de un “cliente” Si deseamos descargar un determinado recurso necesitamos dos cosas: (1) el fichero .torrent y (2) un cliente Bittorrent.

El fichero .torrent es muy pequexo (unos pocos cientos de bytes) y suele distribuirse mediante servidores Web, correos electrxnicos, etc. Tambixn existen buscadores de ficheros .torrent (como por ejemplo, http://www.torrentscan.com/) que podemos utilizar para localizar un determinado recurso a partir el nombre esperado el mismo.

Clientes Bittorrent hay muchos (Azureus http://azureus.sourceforge.net/, μTorrent http://www.utorrent.com/, Transmission http://www.transmissionbt.com/, ...) aunque debemos destacar al original Bittorrent http://bitconjurer.org/BitTorrent/. En este pequexo manual aprenderemos a compartir recursos usando este xltimo. Asx, por ejemplo, para descargar un recurso bajo linux (tras instalar el paquete bittorrent), escribiremos:

peer$xbtdownloadcursesxrecurso.torrent

Uso de un “servidor”

[next] [prev] [prev-tail] [tail] [up] G.4 Uso de un “servidor”

Cuando deseamos publicar o compartir un nuevo recurso necesitamos dos cosas: (1) un tracker y (2) crear el fichero .torrent asociado al recurso. El tracker pondrx en contecto a los diferentes peers y el fichero .torrent indicarx cxmo hacer esto.

G.4.1 Instalacixn de un tracker Necesitaremos un host pxblico con el paquete bittorrent instalado. Generalmente tras instalar este paquete se lanza el servicio correspondiente (/etc/init.d/bittorrent). El fichero de configuracixn de este servicio lo encontramos en /etc/default/bittorrent. Ahx podremos controlar varios aspectos del servidor, como por ejemplo, el puerto de escucha. Resumiendo, para instalar el tracker hacer:

tracker#xapt-getxinstallxbittorrent

Que instalarx y lanzarx el servidor. Tambixn es posible lanzar el servidor a mano usando:

tracker$xbttrackx--portx6969x--dfilexdstate

dstate es el nombre del archivo de log en formato binario y 6969 serxa el puerto de escucha.

Finalmente, existe un conjunto de trackers pxblicos que podemos utilizar si no disponemos acceso a un host pxblico para hacer lo anterior. Algunos ejemplos son:

http://open.tracker.thepiratebay.org/announce
xhttp://www.torrent-downloads.to:2710/announce
xhttp://denis.stalker.h3q.com:6969/announce
xudp://denis.stalker.h3q.com:6969/announce
xhttp://www.sumotracker.com/announce

G.4.2 Generacixn del fichero .torrent Necesitaremos alguna utilidad para hacer esto. La mayorxa de los clientes permiten hacerlo fxcilmente. Usando el paquete bittorrent escribiremos:

seed$xbtmakemetafilexcamino/al/recursoxprotocol://tracker:port/directory
x
x#xUnxejemploxmxsxreal:
xssed$xbtmakemetafilexlogin_fortunesxhttp://193.147.118.81:6969/announce

donde recurso es el nombre del fichero o del directorio que queremos compartir, protocol es el protocolo a usar (generalmente http), tracker el la direccixn IP o el nombre del servidor que ejecuta el tracker, port es el puerto de escucha del tracker y directory es el nombre del directorio que el tracker va a utilizar para anunciar dicho recurso.

Este comando generarx el fichero .torrent que contiene dicha URL, el nombre de el/los fichero/s compartido/s, el tamaxo del bloque y otra informacixn que se utiliza saber si los bloques se transmiten correctamente. Dependiendo del tamaxo del recurso a compatir y de la potencia de la mxquina, btmakemetafile emplearx mxs o menos tiempo porque ha de recorrer el recurso completo para generar el fichero .torrent. Esto hace ademxs que el contenido del recurso no puede ser variable, es decir, si cambia su contenido debe regenerarse el fichero .torrent asociado.

G.4.3 Activacixn del seed Para que un recurso sea compartido con xxito al menos un peer debe tener una copia completa de xl. Para formar parte de la red de comparticixn como seed, tras generar el fichero .torrent sxlo hay que escribir:

seed$xbtdownloadcursesxrecurso.torrent

en el directorio donde estx alojado el recurso recurso. Es decir, el mismo comando que usarxamos si no fuxramos un seed.

[next] [prev] [prev-tail] [front] [up] [next] [prev] [prev-tail] [front] [up] H Cdigos fuente

[next] [prev] [prev-tail] [tail] [up] AppendixxHCxdigos fuente

xH.1 add.c
xH.2 ascii2float.c
xH.3 demodulator.c
xH.4 drawxsignal.sh
xH.5 float2ascii.c
xH.6 lowxpassxfilter.c
xH.7 modulator.c
xH.8 sampler.c
xH.9 spectrumxanalyzer.c

add.c

[next] [prev] [prev-tail] [tail] [up]

H.1 add.c

/*
xx*xadd.cx--xSumaxdosxsexales.
xx*
xx*xEstexficheroxfuentexpuedexencontrarsexen:
xx*xhttp://www.ace.ual.es/~vruiz/docencia/redes/practicas/add.c
xx*
xx*xCompilarxescribiendo:
xx*xgccxadd.cx-oxaddxspin.o
xx*
xx*xgse.x2006
xx*/
x
x#includex<stdio.h>
x#includex"spin.h"
x
xcharx**_argv;
x
xFILE*xopen_file(charx*file_name)x{
xxxFILEx*file_descriptorx=xfopen(file_name,"rb");
xxxif(!file_descriptor)x{
xxxxxfprintf(stderr,"%s:xunablextoxopenx%s\n",_argv[0],file_name);
xxxxxexit(1);
xxx}
xxxreturnxfile_descriptor;
x}
x
xmain(intxargc,xcharx*argv[])x{
xxxif(argc<3)x{
xxxxxfprintf(stderr,"%sxsignal_1.floatxsignal_2.floatx>xsignal_1+2.float\n",
xxxxxxxxxxxxxargv[0]);
xxx}xelsex{
xxxxx_argvx=xargv;
xxxxxFILEx*s1,*s2;
xxxxxs1x=xopen_file(argv[1]);
xxxxxs2x=xopen_file(argv[2]);
x
xxxxxintxsamplesx=x0;
xxxxxfor(;;)x{
xxxxxxxfloatxsample1,xsample2,xadd;
xxxxxxxfread(&sample1,1,sizeof(float),s1);
xxxxxxxif(feof(s1))xbreak;
xxxxxxxfread(&sample2,1,sizeof(float),s2);

xxxxxxxif(feof(s2))xbreak;
xxxxxxxaddx=xsample1x+xsample2;
xxxxxxxfwrite(&add,1,sizeof(float),stdout);
xxxxxxxsamples++;
xxxxxxxspin();
xxxxx}
xxxxxfprintf(stderr,"%s:xnumberxofxsamplesx=x%d\n",argv[0],samples);
xxx}
xxxreturnx0;
x}

ascii2float.c

[next] [prev] [prev-tail] [tail] [up]

H.2 ascii2float.c

/*
xx*xascii2float.cx--xGeneraxunxficheroxdexrealesxfloatxaxpartir
xx*xxxxxxxxxxxxxxxxxxdexotroxenxformatoxASCII.
xx*
xx*xEstexficheroxfuentexpuedexencontrarsexen:
xx*xhttp://www.ace.ual.es/~vruiz/docencia/redes/practicas/ascii2float.c
xx*
xx*xCompilarxescribiendo:
xx*xgccxascii2float.cx-oxascii2floatxspin.o
xx*
xx*xgse.x2007
xx*/
x
x#includex<stdio.h>
x#includex"spin.h"
x
xintxmain(intxargc,xcharx*argv[])x{
xxxif(argc>1)x{
xxxxxfprintf(stderr,"%sx<xsignal.txtx>xsignal.float\n",argv[0]);
xxxxxreturnx1;
xxx}
xxxfor(;;)x{
xxxxxfloatxx;
xxxxxscanf("%f",&x);
xxxxxif(feof(stdin))xbreak;
xxxxxfwrite(&x,sizeof(float),1,stdout);
xxxxxspin();
xxx}
xxxreturnx0;

demodulator.c

[next] [prev] [prev-tail] [tail] [up]

H.3 demodulator.c

/*
xx*xdemodulator.cx--xDesmodulaxunaxsexalx(desplazaxsuxespectro).
xx*
xx*xEstexficheroxfuentexpuedexencontrarsexen:
xx*xhttp://www.ace.ual.es/~vruiz/docencia/redes/practicas/demodulator.c
xx*
xx*xCompilarxescribiendox(elxpaquetexfftwxdeberxaxestarxinstalado!):
xx*xgccxdemodulator.cx-oxdemodulatorxspin.ox-lfftw3x-lm
xx*
xx*xMxsxinformacixnxen:xhttp/www.fftw.org
xx*
xx*xgse.x2007
xx*/
x
x#includex<stdio.h>
x#includex<stdlib.h>
x#includex<math.h>
x#includex<fftw3.h>
x#includex"spin.h"
x
xmain(intxargc,xcharx*argv[])x{
xxxif(argcx<x2)x{
xxxxxfprintf(stderr,
xxxxxxxxxxxxx"%sxcarrier_frequencyxmodulated_signal.floatx>xunmodulated_signal.float\n"
xxxxxxxxxxxxx,argv[0]);
xxx}xelsex{
x
xxxxxFILEx*input_filex=xfopen(argv[2],"rb");
xxxxxif(!input_file)x{
xxxxxxxfprintf(stderr,
xxxxxxxxxxxxxxx"%s:xunablextoxopenxinputxfilex\"%s\"\n",
xxxxxxxxxxxxxxxargv[0],argv[2]);
xxxxxxxexit(1);
xxxxx}
x
xxxxxintxsamplesx=xcompute_number_of_samples(input_file);
xxxxxfprintf(stderr,"%s:xnumberxofxsamplesx=x%d\n",argv[0],samples);
x
xxxxxdoublexxxxxxx*signalxxx=x(doublexxxxxxx*)fftw_malloc(samples*sizeof(doublexxxxxx));
xxxxxfftw_complexx*spectrumx=x(fftw_complexx*)fftw_malloc(samples*sizeof(fftw_complex));
xxxxxfftw_complexx*tmpxxxxxx=x(fftw_complexx*)fftw_malloc(samples*sizeof(fftw_complex));

xxxxx/*xCreamosxunxplanxparaxlaxtransformadaxdirectaxenxinversax*/
xxxxxfftw_planxfx=xfftw_plan_dft_r2c_1d(samples,xsignal,xspectrum,x0);
xxxxxfftw_planxbx=xfftw_plan_dft_c2r_1d(samples,xspectrum,xsignal,x0);
x
xxxxxread_signal(signal,xinput_file,xsamples);
x
xxxxx/*xCalculamosxlaxtransformadaxdexFourierx*/
xxxxxfftw_execute(f);
x
xxxxxrestore_spectrum(spectrum,xtmp,xsamples,xatoi(argv[1]));
x
xxxxx/*xCalculamosxlaxtransformadaxdexFourierxinversax*/
xxxxxfftw_execute(b);
x
xxxxxwrite_signal(signal,xstdout,xsamples);
x
xxxxx/*xDestruxmosxlosxplanesx*/
xxxxxfftw_destroy_plan(f);xfftw_destroy_plan(b);
x
xxxxx/*xLiberamosxmemoriax*/
xxxxxfree(tmp);
xxxxxfree(spectrum);
xxxxxfree(signal);
xxx}
xxxreturnx0;
x}
x
xintxcompute_number_of_samples(FILEx*input_file)x{
xxxfseek(input_file,0,SEEK_END);
xxxintxsamplesx=xftell(input_file)/sizeof(float);
xxxrewind(input_file);
xxxreturnxsamples;
x}
x
xread_signal(doublex*signal,xFILEx*input_file,xintxsamples)x{
xxxintxi;
xxxfor(i=0;xi<samples;xi++)x{
xxxxxfloatxx;
xxxxxfread(&x,sizeof(float),1,input_file);
xxxxxsignal[i]x=x(double)x;
xxxxxspin();
xxx}
x}
x
xwrite_signal(doublex*signal,xFILEx*output_file,xintxsamples)x{
xxxintxi;

xxxfor(i=0;xi<samples;xi++)x{
xxxxxfloatxsamplex=xsignal[i]/samples;
xxxxxfwrite(&sample,sizeof(float),1,output_file);
xxxxxspin();
xxx}
x}
x
xrestore_spectrum(fftw_complexx*spectrum,xfftw_complexx*tmp,xintxsamples,xintxcarrier)x{
xxxintxi;
xxxfor(i=0;xi<samples/2;xi++)x{
xxxxxtmp[i][0]x=x0;
xxxxxtmp[i][1]x=x0;
xxxxxspin();
xxx}
xxxfor(i=0;xi<samples/2x-xcarrier;xi++)x{
xxxxxtmp[i][0]x=xspectrum[carrier+i][0];
xxxxxtmp[i][1]x=xspectrum[carrier+i][1];
xxxxxspin();
xxx}
xxxfor(i=0;xi<samples/2;xi++)x{
xxxxxspectrum[i][0]x=xtmp[i][0];
xxxxxspectrum[i][1]x=xtmp[i][1];
xxxxxspin();
xxx}
x}

drawxsignal.sh

[next] [prev] [prev-tail] [tail] [up]

H.4 drawxsignal.sh

#!/bin/sh
x
x#
x#xVisualizaxunaxsexalxenxformatoxASCIIxalmacenadaxenxunxfichero
x#xgse.x2006
x#
x
xfunctionxendx{
x#xxxx(echox-ex""x>&2)
x#xxxx(echox-nx"ESC[1;0m"x>&2)x#xESCxdebexserxsustituidoxporxelxASCIIx27
xxxxxexit
x}
x
xfunctionxhelpx{
x#xxxx(echox-enx"ESC[0;33m"x>&2)x#xESCxdebexserxsustituidoxporxelxASCIIx27
xxxxx(echox-ex"draw_signalxsignal.txtx[title]"x>&2)
xxxxx(echox-ex""x>&2)
xxxxx(echox-ex"xxsignalx=xASCIIxdataxfile"x>&2)
xxxxx(echox-ex"xxtitlex=xtitlexofxthexgraph"x>&2)
xxxxx(echox-ex""x>&2)
xxxxx(echox-ex"xxExample:"x>&2)
xxxxx(echox-ex""x>&2)
xxxxx(echox-ex"xxdraw_signalxsignal.txt"x>&2)
xxxxx(echox-ex"xxdraw_signalxsignal.txtx\"Sexalx...\""x>&2)
xxxxxend
x}
x
xifx[x-zx"$*"x];xthen
xxxxxhelp
xfi
x
xsignal=$1
xtitle=$2
x
xifx[x-zx$signalx];xthen
xxx(echox-ex"Sorry,xmissingxthexfilexnamexwithxthexsignalx..."x>&2)
xxxend
xfi
x
xechox"setxtitlex\"$title\";\
xxplotx\"$signal\"xtitlex\"\"xwithxlinespointsxptx4xpsx0.5,\
xx\"$signal\"xtitlex\"\"xwithxlinesxltx3"x|xgnuplotx-persist

float2ascii.c

[next] [prev] [prev-tail] [tail] [up]

H.5 float2ascii.c

/*
xx*xfloat2ascii.cx--xMuestraxunxficheroxdexreales.
xx*
xx*xEstexficheroxfuentexpuedexencontrarsexen:
xx*xhttp://www.ace.ual.es/~vruiz/docencia/redes/practicas/float2ascii.c
xx*
xx*xCompilarxescribiendo:
xx*xgccxfloat2ascii.cx-oxfloat2asciixspin.o
xx*
xx*xgse.x2007
xx*/
x
x#includex<stdio.h>
x#includex"spin.h"
x
xintxmain(intxargc,xcharx*argv[])x{
xxxif(argc>1)x{
xxxxxfprintf(stderr,"%sx<xsignal.floatx>xsignal.txt\n",argv[0]);
xxxxxreturnx1;
xxx}
x
xxxfor(;;)x{
xxxxxfloatxx;
xxxxxfread(&x,sizeof(float),1,stdin);
xxxxxif(feof(stdin))xbreak;
xxxxxprintf("%f\n",x);
xxxxxspin();
xxx}
x
xxxreturnx0;

lowxpassxfilter.c

[next] [prev] [prev-tail] [tail] [up]

H.6 lowxpassxfilter.c

/*
xx*xlow_pass_filter.cx--xFiltroxpasoxbajo.
xx*
xx*xEstexficheroxfuentexpuedexencontrarsexen:
xx*xhttp://www.ace.ual.es/~vruiz/docencia/redes/practicas/low_pass_filter.c
xx*
xx*xCompilarxescribiendox(elxpaquetexfftwxdeberxaxestarxinstalado!):
xx*xgccxlow_pass_filter.cx-oxlow_pass_filterx-lfftw3x-lm
xx*
xx*xMxsxinformacixnxen:xhttp/www.fftw.org
xx*
xx*xgse.x2006
xx*/
x
x#includex<stdio.h>
x#includex<stdlib.h>
x#includex<math.h>
x#includex<fftw3.h>
x#includex"spin.h"
x
xmain(intxargc,xcharx*argv[])x{
xxxif(argcx<x2)x{
xxxxxfprintf(stderr,
xxxxxxxxxxxxx"%sxcut-off_bandxsignal.floatx>xfiltered_signal.float\n"
xxxxxxxxxxxxx,argv[0]);
xxx}xelsex{
x
xxxxxFILEx*input_filex=xfopen(argv[2],"rb");
xxxxxif(!input_file)x{
xxxxxxxfprintf(stderr,
xxxxxxxxxxxxxxx"%s:xunablextoxopenxinputxfilex\"%s\"\n",
xxxxxxxxxxxxxxxargv[0],argv[2]);
xxxxxxxexit(1);
xxxxx}
x
xxxxxintxsamplesx=xcompute_number_of_samples(input_file);
xxxxxfprintf(stderr,"%s:xnumberxofxsamplesx=x%d\n",argv[0],samples);
x
xxxxxdoublexxxxxxx*signalxxx=x(doublexxxxxxx*)fftw_malloc(samples*sizeof(doublexxxxxx));
xxxxxfftw_complexx*spectrumx=x(fftw_complexx*)fftw_malloc(samples*sizeof(fftw_complex));
x
xxxxx/*xCreamosxunxplanxparaxlaxtransformadaxdirectaxenxinversax*/

xxxxxfftw_planxfx=xfftw_plan_dft_r2c_1d(samples,xsignal,xspectrum,x0);
xxxxxfftw_planxbx=xfftw_plan_dft_c2r_1d(samples,xspectrum,xsignal,x0);
x
xxxxxread_signal(signal,xinput_file,xsamples);
x
xxxxx/*xCalculamosxlaxtransformadaxdexFourierx*/
xxxxxfftw_execute(f);
x
xxxxxfilter_signal(spectrum,xatof(argv[1]),xsamples,xargv);
x
xxxxx/*xCalculamosxlaxtransformadaxdexFourierxinversax*/
xxxxxfftw_execute(b);
x
xxxxxwrite_signal(signal,xstdout,xsamples);
x
xxxxx/*xDestruxmosxlosxplanesx*/
xxxxxfftw_destroy_plan(f);xfftw_destroy_plan(b);
x
xxxxx/*xLiberamosxmemoriax*/
xxxxxfree(spectrum);
xxxxxfree(signal);
xxx}
xxxreturnx0;
x}
x
xintxcompute_number_of_samples(FILEx*input_file)x{
xxxfseek(input_file,0,SEEK_END);
xxxintxsamplesx=xftell(input_file)/sizeof(float);
xxxrewind(input_file);
xxxreturnxsamples;
x}
x
xread_signal(doublex*signal,xFILEx*input_file,xintxsamples)x{
xxxintxi;
xxxfor(i=0;xi<samples;xi++)x{
xxxxxfloatxx;
xxxxxfread(&x,sizeof(float),1,input_file);
xxxxxsignal[i]x=x(double)x;
xxxxxspin();
xxx}
x}
x
xwrite_signal(doublex*signal,xFILEx*output_file,xintxsamples)x{
xxxintxi;
xxxfor(i=0;xi<samples;xi++)x{
xxxxxfloatxsamplex=xsignal[i]/samples;

xxxxxfwrite(&sample,sizeof(float),1,output_file);
xxxxxspin();
xxx}
x}
x
xfilter_signal(fftw_complexx*out,xdoublexfactor,xintxsamples,xcharx**argv)x{
xxxintxcoefs_erasedx=x0;x/*xCoeficientesxborradosx*/
xxxintxi;
xxxintxfmaxx=xsamples/2;
xxxintxbandas_eliminadasx=xfmax*(1.0-factor);
xxxfor(i=fmax-bandas_eliminadas;xi<fmax;xi++)x{
xxxxxout[i][0]x=xout[i][1]x=x0.0;
xxxxxcoefs_erased++;
xxxxxspin();
xxx}
xxxfprintf(stderr,"%s:xnumberxofxerasedxFourierxcoefficientsx=x%d\n",
xxxxxxxxxxxargv[0],coefs_erased);
xxxfprintf(stderr,"%s:xnumberxofxretainedxFourierxcoeffcientsx=x%d\n",
xxxxxxxxxxxargv[0],samples/2-coefs_erased);
x}

cut-offxband: es el xndice, expresado como un nxmero real entre 0 y 1, de la banda de frecuencia mxs baja que es retenida (no eliminada). En general este parxmetro se calcula a partir de una frecuencia de corte (cut-off) f_{c} medida en Hz. Sea f_{s} la frecuencia de muestreo (nxmero de muestras por segundo). Segxn el Teorema del Muestreo Uniforme, la mxxima componente de frecuencia de dicha sexal no es superior a f_{s}/2. Entonces se cumple que:

     .  cut-offxband = \frac{f_{c}}{f_{s}}

Supongamos, por ejemplo, que la sexal digital transporta un bit de informacixn por segundo (esto significa que f_{0} = 1 Hz en la Figura 2.1). Si hemos tomado 32 muestras/bit, entonces tendremos f_{s} = 32 muestras/segundo y que estamos registrando hasta 16 Hz del espectro de dicha sexal. Si queremos eliminar, por ejemplo, la banda de frecuencias que va desde 8 Hz a 16 Hz, es decir, aplicar un filtrado paso bajo:

.  cut-offxband = \frac{8}{16} = 0.5

sexal.float: es un fichero que almacena la sexal a filtrar. Puesto que estamos realizando los cxlculos en una mxquina digital, las sexales deben estar digitalizadas (muestreadas usando una frecuncia f_{s} de muestreo constante y cuantificadas utilizando un determinado nxmero de bits).

filteredxsignal.float: fichero que almacena la sexal filtrada. La frecuencia de muestreo y el nxmero de bits por muestra son conservados. Por tanto,

los ficheros sexalxoriginal y sexalxfiltrada deben tener el mismo

tamaxo. modulator.c

[next] [prev] [prev-tail] [tail] [up]

H.7 modulator.c

/*
xx*xmodulator.cx--xModulaxunaxsexalx(desplazaxsuxespectro).
xx*
xx*xEstexficheroxfuentexpuedexencontrarsexen:
xx*xhttp://www.ace.ual.es/~vruiz/docencia/redes/practicas/modulator.c
xx*
xx*xCompilarxescribiendox(elxpaquetexfftwxdeberxaxestarxinstalado!):
xx*xgccxmodulator.cx-oxmodulatorxspin.ox-lfftw3x-lm
xx*
xx*xMxsxinformacixnxen:xhttp/www.fftw.org
xx*
xx*xgse.x2007
xx*/
x
x#includex<stdio.h>
x#includex<stdlib.h>
x#includex<math.h>
x#includex<fftw3.h>
x#includex"spin.h"
x
xmain(intxargc,xcharx*argv[])x{
xxxif(argcx<x2)x{
xxxxxfprintf(stderr,
xxxxxxxxxxxxx"%sxcarrier_frequencyxunmodulated_signal.floatx>xmodulated_signal.float\n"
xxxxxxxxxxxxx,argv[0]);
xxx}xelsex{
x
xxxxxFILEx*input_filex=xfopen(argv[2],"rb");
xxxxxif(!input_file)x{
xxxxxxxfprintf(stderr,
xxxxxxxxxxxxxxx"%s:xunablextoxopenxinputxfilex\"%s\"\n",
xxxxxxxxxxxxxxxargv[0],argv[2]);
xxxxxxxexit(1);
xxxxx}
x
xxxxxintxsamplesx=xcompute_number_of_samples(input_file);
xxxxxfprintf(stderr,"%s:xnumberxofxsamplesx=x%d\n",argv[0],samples);
x
xxxxxdoublexxxxxxx*signalxxx=x(doublexxxxxxx*)fftw_malloc(samples*sizeof(doublexxxxxx));
xxxxxfftw_complexx*spectrumx=x(fftw_complexx*)fftw_malloc(samples*sizeof(fftw_complex));
xxxxxfftw_complexx*tmpxxxxxx=x(fftw_complexx*)fftw_malloc(samples*sizeof(fftw_complex));

xxxxx/*xCreamosxunxplanxparaxlaxtransformadaxdirectaxenxinversax*/
xxxxxfftw_planxfx=xfftw_plan_dft_r2c_1d(samples,xsignal,xspectrum,x0);
xxxxxfftw_planxbx=xfftw_plan_dft_c2r_1d(samples,xspectrum,xsignal,x0);
x
xxxxxread_signal(signal,xinput_file,xsamples);
x
xxxxx/*xCalculamosxlaxtransformadaxdexFourierx*/
xxxxxfftw_execute(f);
x
xxxxxmodulate_spectrum(spectrum,xtmp,xsamples,xatoi(argv[1]));
x
xxxxx/*xCalculamosxlaxtransformadaxdexFourierxinversax*/
xxxxxfftw_execute(b);
x
xxxxxwrite_signal(signal,xstdout,xsamples);
x
xxxxx/*xDestruxmosxlosxplanesx*/
xxxxxfftw_destroy_plan(f);xfftw_destroy_plan(b);
x
xxxxx/*xLiberamosxmemoriax*/
xxxxxfree(tmp);
xxxxxfree(spectrum);
xxxxxfree(signal);
xxx}
xxxreturnx0;
x}
x
xintxcompute_number_of_samples(FILEx*input_file)x{
xxxfseek(input_file,0,SEEK_END);
xxxintxsamplesx=xftell(input_file)/sizeof(float);
xxxrewind(input_file);
xxxreturnxsamples;
x}
x
xread_signal(doublex*signal,xFILEx*input_file,xintxsamples)x{
xxxintxi;
xxxfor(i=0;xi<samples;xi++)x{
xxxxxfloatxx;
xxxxxfread(&x,sizeof(float),1,input_file);
xxxxxsignal[i]x=x(double)x;
xxxxxspin();
xxx}
x}
x
xwrite_signal(doublex*signal,xFILEx*output_file,xintxsamples)x{
xxxintxi;

xxxfor(i=0;xi<samples;xi++)x{
xxxxxfloatxsamplex=xsignal[i]/samples;
xxxxxfwrite(&sample,sizeof(float),1,output_file);
xxxxxspin();
xxx}
x}
x
xmodulate_spectrum(fftw_complexx*spectrum,xfftw_complexx*tmp,xintxsamples,xintxcarrier)x{
xxxintxi;
xxxfor(i=0;xi<samples/2;xi++)x{
xxxxxtmp[i][0]x=x0;
xxxxxtmp[i][1]x=x0;
xxxxxspin();
xxx}
xxxfor(i=0;xi<samples/2x-xcarrier;xi++)x{
xxxxxtmp[carrier+i][0]x=xspectrum[i][0];
xxxxxtmp[carrier+i][1]x=xspectrum[i][1];
xxxxxspin();
xxx}
xxxfor(i=0;xi<samples/2;xi++)x{
xxxxxspectrum[i][0]x=xtmp[i][0];
xxxxxspectrum[i][1]x=xtmp[i][1];
xxxxxspin();
xxx}
x}

carrierxband: Indica la banda de frecuencia en la que estx la portadora (recuxrdese que una portadora es una sexal sinusoidal pura y por tanto ocupa, en un espectro discreto, sxlo una banda de frecuencia). Para calcular este valor tenemos que conocer qux ancho de banda x representa cada coeficiente de Fourier y luego dividir la frecuencia de la portadora w_{f} entre x, es decir:

     .  carrierxband = \frac{x}{w_{f}}

unmodulatedxsignal.float: El fichero de la sexal a modular. modulatedxsignal.float: El fichero de la sexal modulada. sampler.c

[next] [prev] [prev-tail] [tail] [up]

H.8 sampler.c

/*
xx*xsampler.cx--xMuestreaxunaxsexalxdigital.
xx*
xx*xEstexficheroxfuentexpuedexencontrarsexen:
xx*xhttp://www.ace.ual.es/~vruiz/docencia/redes/practicas/sampler.c
xx*
xx*xCompilarxescribiendo:
xx*xgccxsampler.cx-oxsamplerxspin.o
xx*
xx*xgse.x2007
xx*/
x
x#includex<stdio.h>
x#includex<stdlib.h>x/*xatoi()x*/
x#includex"spin.h"
x
xintxmain(intxargc,xcharx*argv[])x{
xxxif(argc<2)x{
xxxxxfprintf(stderr,"%sxreplication_factorx<xsignal.floatx>xsignal.float\n",
xxxxxxxxxxxxxargv[0]);
xxxxxreturnx1;
xxx}
xxx{
xxxxxintxoutput_samples_per_input_samplex=xatoi(argv[1]);
xxxxxfor(;;)x{
xxxxxxxintxi;
xxxxxxxfloatxinput_sample;
xxxxxxxfread(&input_sample,sizeof(float),1,stdin);
xxxxxxxif(feof(stdin))xbreak;
xxxxxxxfor(i=0;xi<output_samples_per_input_sample;xi++)x{
xxxxxxxxxfwrite(&input_sample,sizeof(float),1,stdout);
xxxxxxx}
xxxxxxxspin();
xxxxx}
xxxxxreturnx0;
xxx}

spectrumxanalyzer.c

[next] [prev] [prev-tail] [tail] [up]

H.9 spectrumxanalyzer.c

/*
xx*xspectrum_analyzer.cx--xAnalizadorxdexespectros.
xx*
xx*xEstexficheroxfuentexpuedexencontrarsexen:
xx*xhttp://www.ace.ual.es/~vruiz/docencia/redes/practicas/spectrum_analyzer.c
xx*
xx*xCompilarxescribiendox(elxpaquetexfftwxdeberxaxestarxinstalado!):
xx*xgccxspectrum_analyzer.cx-oxspectrum_analyzerxspin.ox-lfftw3x-lm
xx*
xx*xMxsxinformacixnxen:xhttp/www.fftw.org
xx*
xx*xgse.x2007
xx*/
x
x#includex<stdio.h>
x#includex<stdlib.h>
x#includex<math.h>
x#includex<fftw3.h>
x#includex"spin.h"
x
xmain(intxargc,xcharx*argv[])x{
xxxif(argcx<x2)x{
xxxxxfprintf(stderr,"%sxinput_signal.floatx>xspectrum.txt\n",argv[0]);
xxx}xelsex{
xxxxxFILEx*input_filex=xfopen(argv[1],"rb");
xxxxxif(!input_file)x{
xxxxxxxfprintf(stderr,"%s:xunablextoxopenxinputxfilex\"%s\"\n"
xxxxxxxxxxxxxxx,argv[0],argv[2]);
xxxxxxxexit(1);
xxxxx}
x
xxxxxintxsamplesx=xcompute_number_of_samples(input_file);
xxxxxfprintf(stderr,"%s:xnumberxofxsamplesx=x%d\n",argv[0],samples);
x
xxxxxdoublexxxxxxx*inxx=x(doublexxxxxxx*)fftw_malloc(samples*sizeof(doublexxxxxx));
xxxxxfftw_complexx*outx=x(fftw_complexx*)fftw_malloc(samples*sizeof(fftw_complex));
x
xxxxx/*xCreamosxunxplanxparaxlaxfftwx*/
xxxxxfftw_planxpx=xfftw_plan_dft_r2c_1d(samples,xin,xout,x0);
x
xxxxxread_signal(in,xinput_file,xsamples);

xxxxx/*xCalculamosxlaxtransformadaxdexFourierx*/
xxxxxfftw_execute(p);
x
xxxxx/*xGeneramosxelxespectroxdexlaxsexalx*/x{
xxxxxxxintxk;
xxxxxxxfor(k=0;xk<samples/2;xk++)x{
xxxxxxxxxdoublexpower_spectrumx=xsqrt(out[k][0]*out[k][0]x+xout[k][1]*out[k][1]);
xxxxxxxxxfprintf(stdout,"%f\n",power_spectrum);
xxxxxxx}
xxxxx}
x
xxxxx/*xDestruxmosxelxplanx*/
xxxxxfftw_destroy_plan(p);
x
xxxxx/*xLiberamosxmemoriax*/
xxxxxfree(out);
xxxxxfree(in);
xxx}
xxxreturnx0;
x}
x
xintxcompute_number_of_samples(FILEx*input_file)x{
xxxfseek(input_file,0,SEEK_END);
xxxintxsamplesx=xftell(input_file)/sizeof(float);
xxxrewind(input_file);
xxxreturnxsamples;
x}
x
xread_signal(doublex*in,xFILEx*input_file,xintxsamples)x{
xxxintxi;
xxxfor(i=0;xi<samples;xi++)x{
xxxxxfloatxx;
xxxxxfread(&x,sizeof(float),1,input_file);
xxxxxin[i]x=x(double)x;
xxxxxspin();
xxx}

[next] [prev] [prev-tail] [front] [up] [next] [prev] [prev-tail] [front] [up] I La tabla ASCII imprimible de 7 bits [next] [prev] [prev-tail] [tail] [up] AppendixxILa tabla ASCII imprimible de 7 bits

11 Dec 11 Hex 11 Char

11 33 11 21 11   !
11 34 11 22 11   "
11 35 11 23 11   #
11 36 11 24 11   $
11 37 11 25 11   %
11 38 11 26 11   &
11 39 11 27 11   '
11 40 11 28 11   (
11 41 11 29 11   )
11 42 11 2A 11   *
11 43 11 2B 11   +
11 44 11 2C 11   ,
11 45 11 2D 11   -
11 46 11 2E 11   .
11 47 11 2F 11   /
11 48 11 30 11   0
11 49 11 31 11   1
11 50 11 32 11   2
11 : 11 : 11 :
11 57 11 39 11   9
11 58 11 3A 11   :
11 59 11 3B 11   ;
11 60 11 3C 11   <
11 61 11 3D 11   =
11 62 11 3E 11   >
11 63 11 3F 11   ?
11 64 11 40 11   @
11 65 11 41 11   A
11 66 11 42 11   B
11 67 11 43 11   C
11 : 11 : 11 :
11 90 11 5A 11   Z
11 91 11 5B 11   [
11 92 11 5C 11   \
11 93 11 5D 11   ]
11 94 11 5E 11   ^
11 95 11 5F 11   _
11 96 11 60 11   `
11 97 11 61 11   a
11 98 11 62 11   b
11 99 11 63 11   c
11 : 11 : 11 :
11 122 11 7A 11   z
11 123 11 7B 11   {
11 124 11 7C 11 |
11 125 11 7D 11   }
11 126 11 7E 11 \~{}

[next] [prev] [prev-tail] [front] [up] Bibliography

[prev] [prev-tail] [tail] [up] Bibliography

[1]xxxOskar  Andreasson.  Iptables  tutorial.

http://iptables-tutorial.frozentux.net/iptables-tutorial.htm.

[2]xxxRenaud  Deraison.  Nessus  Vulnerability  Scanner.

http://www.nessus.org/about/.

[3]xxxJoshua Drake. Linux Networking HOWTO. LDP (Linux Documentation Project), 2000.

[4]xxxR.xDroms.  Dynamic  Host  Configuration  Protocol.

http://www.ietf.org/rfc/rfc2131.txt, March 1977.

[5]xxxBehrouz Forouzan. TCP/IP Protocol Suite. McGraw-Hill, 2000.

[6]xxxIANA  (Internet  Assigned  Numbers

Authority), http://www.iana.org/assignments/port-numbers. The well known ports number.

[7]xxxInsecure.Org, http://insecure.org/nmap/. Nmap.

[8]xxxJamesxF. Kurose and KeithxW. Ross. Computer Networking: A Top-Down Approach Featuring the Internet (3rd Edition). Addison Wesley, 2005.

[9]xxxBhagwandasxPannalal Lathi. Introduccixn a la Teorxa y Sistemas de Comunicacixn. Limusa Noriega Editores, 1994.

[10]xxxAlanxV. Oppenheim and RonaldxW. Schafer. Discrete-time signal processing. Prentice Hall, 1999.

[11]xxxAlanxV. Oppenheim, AlanxS. Willsky, and S.xHamid Nawab. Sexales y Sistemas (2a edicixn). Prentice Hall, 1997.

[12]xxxRusty Russell. Linux 2.4 Packet Filtering HOWTO. http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO.html.

[13]xxxClaudexE. Shannon. The Mathematical Theory of Communication. University of Illinois Press, 1963.

[14]xxxSSH  Communications  Security

Corp, http://www.rfc-editor.org/rfc/rfc4251.txt. RFC 4251. The Secure Shell (SSH) Protocol Architecture, 2006.

[15]xxxSSH  Communications  Security

Corp, http://www.rfc-editor.org/rfc/rfc4252.txt. RFC 4252. The Secure Shell (SSH) User Authentication Protocol, 2006.

[16]xxxSSH  Communications  Security

Corp, http://www.rfc-editor.org/rfc/rfc4253.txt. RFC 4253. The Secure Shell (SSH) Transport Layer Protocol, 2006.

[17]xxxSSH  Communications  Security

Corp, http://www.rfc-editor.org/rfc/rfc4254.txt. RFC 4254. The Secure Shell (SSH) Connection Protocol, 2006.

[18]xxxWilliam Stallings. Comunicaciones y Redes de Computadores (7a Edicixn). Prentice Hall, 2004.

[prev] [prev-tail] [front] [up] [next]