Académique Documents
Professionnel Documents
Culture Documents
(IFC03CM15)
Cuadernillo de prcticas
Septiembre, 2015
Cuadernillo de prcticas
Septiembre, 2015
ndice
1. El laboratorio virtual
Pr. 1.1.
Instalar Debian
. . . . . . . . . . . . . . . . . . . . . . .
Pr. 1.2.
Pr. 1.3.
Pr. 1.4.
Pr. 1.5.
Creacin de Ubuntu . . . . . . . . . . . . . . . . . . . . .
Pr. 1.6.
Pr. 1.7.
Pr. 1.8.
Pr. 1.9.
11
. . . . . .
12
En el prximo captulo . . . . . . . . . . . . . . . . . . . . . . . . .
14
2. Cortafuegos. iptables
15
Pr. 2.1.
Instalacin de demonios . . . . . . . . . . . . . . . . . . .
15
Pr. 2.2.
16
Pr. 2.3.
17
Pr. 2.4.
18
Pr. 2.5.
. . . . . . . . . . . . . . . .
18
Pr. 2.6.
20
Pr. 2.7.
21
Pr. 2.8.
21
Pr. 2.9.
22
. . . . . . . . . . . . . . . . .
26
27
En el prximo captulo . . . . . . . . . . . . . . . . . . . . . . . . .
29
30
3. Proxies web
33
Pr. 3.1.
. . . . . . . . . . . .
33
Pr. 3.2.
El protocolo HTTP
. . . . . . . . . . . . . . . . . . . . .
34
vi
ndice
Pr. 3.3.
35
Pr. 3.4.
36
Pr. 3.5.
Deniendo ACLs . . . . . . . . . . . . . . . . . . . . . . .
37
Pr. 3.6.
Gestin de permisos . . . . . . . . . . . . . . . . . . . . .
38
Pr. 3.7.
Otras reglas
. . . . . . . . . . . . . . . . . . . . . . . . .
39
Pr. 3.8.
40
Pr. 3.9.
Proxy transparente
41
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
42
. . . . . . . . . . . . . . . .
42
. . . . . . . . . . . . . . . . . . . . .
44
44
. . . . . . .
45
En el prximo captulo . . . . . . . . . . . . . . . . . . . . . . . . .
48
4. HTTP seguro
49
Pr. 4.1.
49
Pr. 4.2.
SSL/TLS . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
Pr. 4.3.
. . . . . . . . . . . . . .
51
Pr. 4.4.
. . . . . . . . . . . . .
52
Pr. 4.5.
HTTPS en Apache
. . . . . . . . . . . . . . . . . . . . .
53
En el prximo captulo . . . . . . . . . . . . . . . . . . . . . . . . .
54
55
Pr. 5.1.
Pr. 5.2.
. . . . . .
56
Pr. 5.3.
El chero known_hosts . . . . . . . . . . . . . . . . . . .
57
Pr. 5.4.
58
Pr. 5.5.
59
Pr. 5.6.
59
Pr. 5.7.
xin SSH
. . . . . . . . . . . . . .
55
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
Pr. 5.8.
Tnel SSH . . . . . . . . . . . . . . . . . . . . . . . . . .
61
Pr. 5.9.
. . . . . . . . . . .
62
. . . . . . . . . . . . . . . . . . . . . . . . .
63
64
65
En el prximo captulo . . . . . . . . . . . . . . . . . . . . . . . . .
67
69
Pr. 6.1.
69
Pr. 6.2.
72
ndice de guras
1.1.
Laboratorio virtual . . . . . . . . . . . . . . . . . . . . . . . .
1.2.
1.3.
2.1.
Cadenas de
. . . . . . . . . . . . . .
19
6.1.
Conguracin de la red . . . . . . . . . . . . . . . . . . . . . .
70
6.2.
70
6.3.
6.4.
Activacin de la VPN
iptables
(tabla
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
filter)
. . . . . . . . . . . . . . . . .
8
10
12
. . . . . . . .
71
. . . . . . . . . . . . . . . . . . . . . .
71
vii
Captulo 1
El laboratorio virtual
Comienza por el comienzo -dijo, muy
gravemente, el Rey- y sigue hasta que
llegues al nal; entonces paras.
Alicia en el Pas de las Maravillas; Lewis
Carroll
: Instalar Debian
Prctica 1.1
El primer paso que daremos ser instalar una mquina virtual en VirtualBox con Debian. Los parmetros de creacin de la mquina son:
1. Nombre: DebianServidor
2. Sistema operativo: Linux (se rellena automticamente al poner el nombre)
1
3. Versin: Debian (se rellena automticamente al poner el nombre). Ajusta la versin (32 o 64 bits) segn la situacin.
4. Memoria: dependiendo de la memoria del equipo fsico. Se puede incluso llegar a 128 MB aunque slo en situaciones extremas.
Tipo VDI (
Reservado dinmicamente.
Localizacin: elegir un lugar donde haya hueco (por defecto, lo
pondr en la carpeta del usuario local).
Tamao: 8 GB es suciente, aunque se puede poner un valor ms
alto por seguridad, dado que el chero slo ocupar el espacio que
necesite realmente.
Una vez creada la mquina virtual:
1. Recorre la conguracin de la mquina recin creada. Comprueba que
el interfaz de red est congurado en NAT.
2. Arrncala. VirtualBox reconoce que es la primera ejecucin de la mquina virtual, por lo que muestra un asistente que nos ayuda a especicar la localizacin del instalador del sistema operativo. Canclalo
(lo haremos manualmente). Comprueba que la mquina no es capaz
de ejecutar nada al no tener sistema operativo lanzado (se muestra el
error
3. Introduce el.
iso
virtual.
4. Lnzala de nuevo e instala Debian.
5. Observa cmo crece el tamao ocupado por el chero
.vdi
del disco
duro virtual.
Prctica 1.2
/etc/network/interfaces:
/etc/resolv.conf:
route
actual
(normalmente con
-n
ifconfig
ifup interfaz.
eth0
1. Deshabilita
y vuelve a ejecutar
ifdown interfaz,
ifconfig
y para
route.
esttica
/etc/network/interfaces:
den hacerse ambas cosas despus de haber cambiado el chero, pero pueden
surgir problemas si la conguracin original era por DHCP.
La pareja de comandos
Prctica 1.3
da la tarjeta de red realmente? Eso lo determina el software de virtualizacin, que nos proporciona varias opciones.
bridged )
Red fsica
Anfitrin
Mquina virtual
no
NAT:
Red fsica
Software
haciendo NAT y
servidor DHCP
Anfitrin
Mquina virtual
Red NAT :
el modo anterior
se replica
tes.
Red fsica
Red interna
Anfitrin
Mquina virtual
no
http://www.virtualbox.org/manual/ch06.html.
Prctica 1.4
Nuestro laboratorio virtual tendr dos Debian y un Ubuntu. Ya tenemos Debian instalado en la primera mquina virtual. Aprovecharemos esa
instalacin para clonarla y tener as la segunda mquina Debian.
vboxmanage
(en consola):
<rutaVBox>\vboxmanage clonehd
<rutaMaquinas>\DebianServidor.vdi
<rutaMaquinas>\DebianCliente.vdi
El disco duro origen
(con
poweroff)
no
no
lances an Debian
Servidor.
2. Observa que el nombre que recibe es
DebianServidor.
/etc/hostname
y ejecuta el
script :
# /etc/init.d/hostname.sh
4. El nombre parece no cambiar. Sin embargo, es slo en el
shell.
Cierra
ifconfig
congurada.
6. Lanza Debian Servidor y mira su IP. Hay algo que te llame la atencin?
: Creacin de Ubuntu
Prctica 1.5
Crea una nueva mquina virtual llamada Ubuntu. Asociala tanta memoria como puedas. En este caso, al tener interfaz grca, tendremos que ser
bastante generosos. Con versiones anteriores de Ubuntu poda ponerse 256
MB, pero hoy eso es ya demasiado poco. Adems, es interesante subir la cantidad de memoria de video, pues el valor por defecto (12 MB) es insuciente
para resoluciones superiores a 1024x768, e instalar las
.iso,
puedes utilizar el
.vdi
Prctica 1.6
haga de rou-
Debian Servidor
Debian Cliente
Ubuntu
Mquinas virtuales
red interna.
Prctica 1.7
La conguracin que vamos a usar durante todo el curso con las tres
mquinas virtuales es la mostrada en la gura 1.1.
En ella, Debian Servidor tiene su primera tarjeta de red conectada
modo puente,
en
lo que es necesario proporcionarle una IP que no colisione con las del resto
de ordenadores del aula, y tampoco con los Debian Servidor de todos los
alumnos. Adems, en algunos momentos, querremos que las mquinas virtuales internas (Debian cliente y Ubuntu) de un alumno se conecten con
las de otro, por lo que tampoco queremos colisiones entre las IPs internas.
Para que todo resulte fcil, lo mejor es utilizar un convenio. Las aulas sue-
192.168.x.212
la red interna
creada con el segmento de red virtual interno. Para evitar conictos, asig-
192.168.24.101,
en la gura 1.2.
Para hacer esto, son necesarias dos cosas:
1. Congurar el software de virtualizacin para crear las conexiones fsicas. En el mundo real, sera similar a colocar los cables para conseguir
las conexiones de la gura.
2. Congurar las mquinas para asignar las IPs, es decir realizar la conguracin software de los Linux de las tres mquinas virtuales. Ya
hemos visto cmo hacerlo en Debian. Una fuente de informacin muy
completa sobre ello puede encontrarse en
https://www.debian.org/
network manager
10
.100
Red fsica (192.168.24.0/24)
.201
IP del anfitrin:
192.168.24.101
Debian Servidor
.1
Red interna (10.24.101.0/24)
.2
.3
Debian Cliente
Ubuntu
Mquinas virtuales
Prctica 1.8
bar que todo est bien congurado. Es interesante conseguir que los alumnos
entiendan todas estas pruebas y sean capaces de hacerlas ellos mismos cuando tengan problemas, para evitarnos seguir resolviendo problemas triviales
durante todo el ao.
Se asume que inicialmente la conguracin de la red virtual es la mostrada
en la gura 1.2. Haz los siguientes
eth1
de Debian Servidor.
eth0
de Debian Servidor.
eth1
de Debian Servidor.
eth0
de Debian Servidor.
11
Prctica 1.9
Red NAT.
1. En Virtual Box, ve a Archivo - Preferencias - Red, y aade una nueva red NAT. Congura el CIDR asociado (que utilizar el servidor
de DHCP) a una red que no colisione con las dems (por ejemplo,
172.16.x.0/24).
2. Modica Debian Servidor y Debian Cliente para conectar sus tarjetas
de red (eth0) a esa nueva red.
3. Deshabilita ambas tarjetas de red.
4. Modica la conguracin para que utilicen DHCP.
5. Comprueba las IPs asignadas. Tienen sentido?
Haz las pruebas siguientes, intentando anticipar el resultado.
Operacin a realizar
Funciona?
12
Debian Servidor
Debian Servidor
Debian Cliente
Debian Servidor
Debian Cliente
Ubuntu
Mquinas virtuales
Debian Cliente
Ubuntu
Mquinas virtuales
Ubuntu
Mquinas virtuales
Prctica 1.10
pings
0)1 .
no
13
Introduce dicha linea en Debian Servidor, y luego haz la siguiente batera de pruebas (algunas son las mismas que en el primer bloque). Como
antes, intenta anticiparte a las respuestas. Te puede servir como refencia la
gura 1.3, que muestra el esquema de la red considerando las mquinas virtuales de varios alumnos. Busca la razn por la que algunas de las pruebas
no funcionan, y trata de solucionarlo.
1. Desde el antrin (Windows) a
eth0
de Debian Servidor.
distinto (por
ejemplo, n+2).
8. Desde Debian cliente al Debian cliente de otro compaero (n+3).
9. Desde Debian cliente a Internet (puerta de enlace, 8.8.8.8, google,
...).
10. Pon a Debian Servidor con
eth0
eth0
10.x.n.0/24
192.168.x.n+100.
/etc/sysctl.conf.
14
no
es per-
sistente; ser necesario ejecutarla cada vez que lancemos Debian Servidor (o
crear un script de arranque automtico).
Si queremos
desactivar
de nuevo el NAT:
# iptables -t nat -F
http://www.virtualbox.org/manual/UserManual.html
Conguracin de Debian:
https://www.debian.org/doc/manuals/debian-reference/
Internet Core Protocols - The Denitive Guide; Eric Hall; O'Reilly
TCP/IP First-Step; Mark A. Sportack; Cisco Press
En el prximo captulo. . .
En el prximo captulo veremos el concepto de
remos a utilizar el comando
iptables
cortafuegos,
y aprende-
Captulo 2
Cortafuegos. iptables
La desconanza es la madre de la
[in]seguridad.
Aristfanes
iptables,
el cortafuegos de
cortafuegos
disponibles y los aspectos con los que hay que tener cuidado.
Empezamos instalando varios servicios en la red para tener algo que
proteger. Adems, analizaremos brevemente los protocolos TCP y UDP para
poder comprender las opciones de
iptables
: Instalacin de demonios
Prctica 2.1
el chero
15
16
OpenBSD,
# /etc/init.d/openbsd-inetd restart
Comprueba que la instalacin se ha realizado bien conectndote desde
el antrin con el navegador a la IP de Debian Servidor (vers la pgina
predenida de Apache). Conctate tambin por telnet (si el antrin no
tiene el cliente de telnet prueba desde Debian Cliente o Ubuntu). Comprueba
tambin desde Ubuntu que te puedes conectar al servidor Web usando un
navegador.
Prctica 2.2
Wireshark :
www.wikipedia.org).
4. Detn el
ping,
sudo)
ping
y ponlo a escuchar.
alumno).
exit.
6. Analiza el trco que ves. Comprueba la existencia de los tres segmentos de conexin, los de cierre, y utiliza el seguimiento de la conexin
proporcionado por Wireshark para ver cmodamente la comunicacin.
Notas a nivel de coste en ancho de banda alguna diferencia entre TCP
y UDP?
Por comodidad, se pueden meter alias de direcciones MAC en el chero
/etc/ethers.
Por ejemplo:
17
08:00:27:17:41:87 MAC_DebianServidor
08:00:27:AE:42:43 MAC_DebianCliente
08:00:27:D7:62:D8 MAC_Ubuntu
Tras reiniciar Wireshark, en la diseccin de la capa 2 podrs ver el alias
de cada MAC, para identicarlas ms cmodamente. Con esto, Wireshark
puede utilizarse en clase para asentar la teora sobre encaminamiento IP, y
que el origen/destino de un datagrama no tiene por qu coindicir a nivel 2
y 3.
Tambin por comodidad se puede permitir que usuarios sin privilegios
puedan monitorizar el trco de red con Wireshark sin necesidad de lanzarlo
como administradores.
1. En un terminal, lanza la reconguracin del paquete de Wireshark:
# dpkg-reconfigure wireshark-common
2. Contesta S ante la pregunta de si quieres que los usuarios no administradores puedan capturar paquetes (y s consciente de las implicaciones).
3. Aade al usuario
alumno
en el grupo
wireshark
recin creado.
Prctica 2.3
# netstat -tlnp
-t
: TCP
-l : listen
(escucha)
-n : numrico,
/etc/services).
Este parmetro es
opcional.
18
-p
process,
root.
Este parmetro es
opcional.
Comprueba que en Debian Servidor los puertos de telnet y de apache
estn a la escucha, y que coinciden con los procesos esperados (est
en lugar de
telnetd).
inetd
TCPView.
Prctica 2.4
nmap:
escaneo de puertos
www.educa.madrid.org.
Obtienes al-
-PN.
nmap es una herramienta muy til para anlisis de red. Tambin podemos
utilizarlo para encontrar equipos encendidos en una red:
Prctica 2.5
hace atravesar a los datagramas que llegan al ncleo para decidir si se les
deja (o no) seguir su camino.
La gura 2.1 esquematiza las cadenas de reglas existentes. Se utilizar
una u otra dependiendo del origen y el destino del datagrama a procesar:
19
Capas 5 7
Capas57
Proceso local
INPUT
OUTPUT
Capas34
FORWARD
E
Encaminamiento
i
i t
Capas12
Interfaces de red
iptables
(tabla
filter)
OUTPUT:
FORWARD:
routers ).
de
es decir la decisin que se toma con aquellos paquetes para los que no haya
alguna regla especial.
1. Comprueba que puedes hacer
INPUT.
DROP
# iptables -L
Chain INPUT (policy DROP)
target
prot opt source
destination
20
destination
destination
ACCEPT
en la cadena
INPUT,
y establece
DROP
en
OUTPUT.
Qu ocurre?
6. Restablece
ACCEPT
en la cadena
OUTPUT,
y establece
DROP
en
FORWARD.
Qu ocurre?
Prctica 2.6
INPUT
OUTPUT
OUTPUT), tambin impediremos la entrada de sus resINPUT), incluso aunque estas respuestas sea imposible
servicio (cadena
puestas (en
que lleguen.
Congura Debian Servidor para que responda cualquier cosa que llegue
desde la red interna, pero ignore lo que llegue desde la red externa (es
la conguracin que querras tener en cualquier router ADSL). Man-
INPUT
ACCEPT.
INPUT
En este ejercicio,
cadena es
ACCEPT.
2
y OUTPUT .
no
-j ACCEPT
21
ping
desde la red
externa, pero no permita conectarse por Telnet desde dicha red. Desde
la red interna todo deber estar permitido. Implemntalo con ambas
polticas por defecto.
Prctica 2.7
Congura el cortafuegos para que Debian Cliente pueda hacer resoluciones DNS (puerto 53 de UDP).
2. Comprueba que los puertos de telnet y Web estn abiertos en Debian
Servidor. Congura el cortafuegos para que desde Debian Cliente sea
posible una conexin slo al puerto 80 (web), y desde Ubuntu slo al
23 (telnet). Utiliza como poltica por defecto
DROP
Prctica 2.8
El destino
avisa
# iptables -F INPUT
# iptables -A INPUT -p tcp --dport telnet -j DROP
22
SYN)
# iptables -F INPUT
# iptables -A INPUT -p tcp --dport telnet -j REJECT
Mientras no se diga otra cosa, los paquetes se rechazan con el mensaje
ICMP de
puerto inalcanzable.
6. En Debian Cliente intenta otra vez la conexin. Vers que ahora recibes
enseguida el rechazo en la conexin:
$ telnet 10.x.n.1
Trying 10.x.n.1...
telnet: Unable to connect to remote host: Connection
refused
REJECT no se admite como poltica por defecto. Cuando la poltica por
ACCEPT y se llega a un puerto en el que no hay ningn servicio escu-
defecto es
REJECT).
Prctica 2.9
install apache2)
para
del compaero
siguiente (sumando 1 a tu IP). Ten en cuenta que el compaero anterior
23
3. Usando
DROP
FORWARD
y realiza de nuevo
FORWARD
#
#
#
#
iptables
iptables
iptables
iptables
-P FORWARD DROP
-F
-A FORWARD -p udp --dport 53 -j ACCEPT
-A FORWARD -p tcp --dport 80 -j ACCEPT
y aadir
los dos
5. Segundo intento:
# iptables -P FORWARD
# iptables -F
# iptables -A FORWARD
--dport 53
# iptables -A FORWARD
--sport 53
# iptables -A FORWARD
--dport 80
# iptables -A FORWARD
--sport 80
DROP
-i
-j
-i
-j
-i
-j
-i
-j
eth1 -o
ACCEPT
eth0 -o
ACCEPT
eth1 -o
ACCEPT
eth0 -o
ACCEPT
eth0 -p udp
eth1 -p udp
eth0 -p tcp
eth1 -p tcp
lynx
24
origen
-g,
# nmap -g 80 10.x.(n+1).2
Si t has conseguido ver el puerto 80 de tu compaero abierto, tambin
habrn visto abierto el tuyo desde n-1!
Qu ha pasado? Usando desde fuera un puerto
fuegos tiene abierto
origen
que el corta-
podemos colarnos.
-o eth0 -p
--dport 53
-o eth1 -p
-j ACCEPT
-o eth0 -p
--dport 80
-o eth1 -p
-j ACCEPT
udp
-j ACCEPT
udp --sport 53
tcp
-j ACCEPT
tcp --sport 80
9. Con esto evitamos que un atacante pueda utilizar puertos origen que
parecen conables para escanear nuestros puertos.
10. Seguro? Es as en todos los casos? Prueba:
encendido con
ping (pues
-g 80:
nmap
origen
el puerto 80.
25
nmap
est cerrado,
es decir
hemos llegado
al
SYN.
Esto slo es
posible en TCP.
-o eth0 -p
--dport 53
-o eth1 -p
-j ACCEPT
-o eth0 -p
--dport 80
-o eth1 -p
! --syn -j
udp
-j ACCEPT
udp --sport 53
tcp
-j ACCEPT
tcp --sport 80
ACCEPT
! --syn
en la
El uso de la bandera
SYN
no
# nc -lup 7777
2. Cuando
tu compaero n+1
# nc -u 10.x.(n+1).2 7777
26
# nc -u 10.x.(n+1).2 7777 -p 53
antes
DROP.
-j DROP
As nos adelantamos al
ACCEPT
de reglas ms genricas
explcita
por
: Seguimiento de conexiones
Prctica 2.10
ACK
sin estado
SYN
por lo que
state
convertimos a
iptables
en un cortafuegos
con
Introduciremos una nica regla por cadena para dejar pasar datagramas asociados a una conexin ya existente.
Introduciremos una nica regla por servicio que queramos abrir, dejando pasar (sin estado) nicamente al primer datagrama esperado.
La conguracin del cortafuegos con estado para dejar salir DNS y Web
desde la red interna quedara:
27
el
SYN.
datagrama de
Otra forma de
escribirlo es:
: Tabla NAT
Prctica 2.11
INPUT, FORWARD y OUTPUT forman la tabla filter. Hay dos tablas ms:
nat y mangle, cada una con sus propias cadenas, que entran en juego en otros
momentos durante la vida de un datagrama en el ncleo. En esas cadenas,
destinos
ACCEPT
los
DROP,
las
IP origen y/o destino del trco que veamos. Dispone de tres cadenas.
PREROUTING: antes
modicar la
28
La tabla
nat
modicar la IP origen.
filter).
Al escri-
no de sus
respuestas.
1. Queremos hacer PNAT clsico, para que un Linux haga de salida con
su IP pblica a la red interna:
-o.
2. Queremos ponernos en medio de una comunicacin, y que un trco destinado a otra IP llegue a un servicio lanzado localmente. Por
ejemplo:
Para interceptar una comunicacin y hacernos pasar por otro
(normalmente con motivos oscuros).
Proxy transparente.
Para eso utilizamos
a)
PREROUTING
(vamos a modicar
el destino ).
b)
ifconfig
c)
who,
conectado.
d)
e)
PREROUTING
para
En el prximo captulo. . .
29
f)
en tu debian servidor
cin.
En el prximo captulo. . .
Los cortafuegos trabajan a nivel de capa 3 y 4, por lo que sus reglas
pueden tomar decisiones en funcin de las cabeceras de dichas capas. Con
iptables
squid,
el
proxy web
mundo del software libre, que monitoriza el trco HTTP y nos permite
poner reglas de mayor alto nivel de abstraccin.
30
Descripcin
-F | --flush [<cadena>]
ACCEPT o DROP
al nal
de
al principio
de
Descripcin
[!] -i [<interfaz>]
cadenas
se especica in-
[!] -o [<interfaz>]
[!] -p [<protocolo>]
OUTPUT
FORWARD.
icmp, tcp
udp.
Si se especica proto-
[!] -s <direccion>[/<mscara>]
[!] -d <direccion>[/<mscara>]
[!] -f
-j <destino>
DROP
ACCEPT
jump ). Se
o cualquiera de
En el prximo captulo. . .
31
Descripcin
Descripcin
Descripcin
SYN
est activa-
<comparacin>.
SYN, ACK,
FIN, RST, URG, PSH, ALL y NONE. La
idea es poner en la parte de <mscara>
lores especicados en
todas
las
banderas
que
se
quieran
<comparacin>
se pone el nombre de
las banderas que se quiere que estn activas, y se omiten las que (de
la mscara) se quieran que estn a
falso. Ambas listas de banderas tienen que estar separadas por comas
sin espacios.
SYN,RST,ACK,FIN SYN.
--syn vis--tcp-flags
As la opcin
ta antes es equivalente a
32
Captulo 3
Proxies web
No puedes pasar! Soy un servidor del
Fuego Secreto, que es dueo de la llama
de Anor. No puedes pasar!
Gandalf el gris - El seor de los anillos
(J. R. R. Tolkien)
aplicacin
que comprenda el
Prctica 3.1
no
34
1. Desde Debian Cliente, crea una conexin TCP con un ordenador externo. Por ejemplo, conectate por Telnet al ordenador del profesor.
2. En otra consola de Debian Cliente (<Ctrl>-<Alt>-F2 por ejemplo),
utiliza
netstat -tn
para ver
el rastro
: El protocolo HTTP
Prctica 3.2
decidir cmo actuar . Por tanto, para aprender lo que podemos congurar,
lo primero es entender la cabecera del protocolo.
1. En Debian Cliente
simula
nc -lp 80
Esto
abre el puerto 80
(web) y pone a
nc
netstat -tlnp.
2. En Ubuntu, abre un navegador y conectate a la IP de Debian Cliente. No se cargar nada, pero el navegador se queda a la espera de la
respuesta.
3. Vuelve a Debian Cliente y observa la salida. Es
la cabecera HTTP
GET / HTTP/1.1
Host: 10.x.n.2
1
En esta ocasin
no
se especica
-l,
2
3
35
User-Agent: Mozilla/...
Accept: text/html,...
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Tras la ltima linea (Connection:
keep-alive)
habr otra ms en
puedes contestarle.
4
pgina Web :
<html>
<head><title>HACKER!</title></head>
<body>
<h1>Soy un hacker!</h1>
</body>
</html>
Termina pulsando
<Ctrl>-C.
http://10.x.n.2/index.html.
Prctica 3.3
Squid es el proxy Web por excelencia del mundo del software libre.
1. Instala squid en Debian Servidor:
En realidad en este ejemplo estamos haciendo un uso indebido del protocolo HTTP
porque no enviamos cabecera de capa 7; pero los navegadores son permisivos
:-)
36
2. Comprueba, con
netstat -tlnp,
en el puerto 3128.
3. Congura el navegador en Firefox para que utilice a Debian Servidor
como proxy. La opcin est un poco oculta. Ve al men Editar - Preferencias, luego a la categora Avanzado, pestaa Red, y pulsa sobre el
http://www.educa.madrid.org.
forzaras
Prctica 3.4
GET
el servidor. Compruebalo:
# /etc/init.d/squid3 stop
2. Utiliza
nc
# nc -lp 3128
3. Conectate de nuevo a
http://www.educa.madrid.org
desde Ubuntu.
5
6
37
<Ctrl>-C
# /etc/init.d/squid start
: Deniendo ACLs
Prctica 3.5
En squid se denen
List ),
(ACL,
Access Control
son:
Venir del ordenador del profesor (IP origen).
Ir a un servidor con un nombre DNS (por ejemplo
www.facebook.com).
www.marca.es
dstdom_regex
para especi-
Parmetros especcos del tipo. Por ejemplo las IPs de los ordenadores de los profesores, los nombres DNS de los servidores restringidos,
el identicador del navegador, o el rango de horas. Se pueden poner
simultneamente varios parmetros (se consideran unidos por una O
lgica), o un nombre de chero
38
El chero de conguracin de squid (/etc/squid3/squid.conf) contiene numerosos ejemplos comentados (alrededor de la linea 750) a modo de
documentacin.
Adems, en squid3 hay varias ACLs predenidas:
acl
acl
acl
acl
redInterna:
10.x.n.0/24,
tu red
interna.
2.
redAula:
3.
ipPrivilegiada:
4.
5.
reload)
y prueba a conectarte a
: Gestin de permisos
Prctica 3.6
allow|deny:
39
se considerar cierto la
El operador ms importante es
no pertenencia
a la ACL.
all
antes
las
que sta.
a cualquier sitio .
4. Quita el proxy en los navegadores del antrin.
Para recargar squid tras cada cambio, puedes utilizar:
/var/log/syslog
restart
en lugar de
reload,
: Otras reglas
Prctica 3.7
7
Para probar esta, tendrs que cambiar la IP de Ubuntu por la de Debian Cliente
(hacerte pasar por l), o instalar un navegador en consola en Debian Cliente como
Para congurar el proxy, escribe
export http_proxy=http://10.x.n.1:3128/
lanzarlo.
lynx.
antes de
40
Prctica 3.8
Congura squid para que se pueda utilizar desde la red interna, pero
impidiendo el uso a las redes sociales.
/etc/resolv.conf.
www.google.com).
nslookup
Funciona?
/etc/resolv.conf.
iptables.
www.google.com.
Funciona?
netstat -tnp
41
: Proxy transparente
Prctica 3.9
iptables
proxy transparente.
puertos destino. Podemos as redirigir cualquier cosa que intente salir por el
router llevando puerto destino 80, al puerto 3128 local.
1. Descongura el proxy en Firefox de Ubuntu para que salga directamente a la Web.
2. Usando
GET).
La
http_port 3128
/etc/squid3/squid.conf
y modifcala:
Host
de la
solicitud.
4. Comprueba que puedes navegar desde Ubuntu. Para comprobar que,
efectivamente, ests usando el proxy, muestra el chero de log de squid
en Debian Servidor y observa cmo aparecen las soliditudes:
# tail -f /var/log/squid3/access.log
5. Vuelve a descongurar el DNS en Ubuntu. Sigue funcionando ahora?
Por qu? Vuelve a recongurar el DNS.
6. Y si deshabilitaras el reenvo IP en Debian Servidor, podras navegar
desde Ubuntu?
42
: Proxies y HTTPS
Prctica 3.10
1. Mantn la conguracin del proxy transparente, permitiendo la conexin a la red interna a cualquier sitio salvo a las redes sociales.
2. Desde Ubuntu, conectate a
http://www.facebook.com
y comprueba
https://www.facebook.com
nc
$ nc -lp 3128
4. Vuelve a Ubuntu, y conctate a cualquier sitio que utilice HTTPS, por
ejemplo
https://www.google.com
http_port
transparent
en
de squid antes.
: Almacenamiento de la cach
Prctica 3.11
43
cach.
xito de
directiva
cache_dir
(alrededor de la mitad de
/etc/squid3/squid.conf):
males (UFS=Unix File System). Una opcin algo mejor es AUFS, que
realiza accesos asncronos en varios demonios, pero consume ms recursos.
/var/spool/squid:
para squid.
no
16:
256:
En squid3, por defecto no guarda nada en disco, sino que mantiene toda
la cach en memoria.
1. Modica la conguracin de squid para que almacene los elementos
descargados en el disco duro.
squid3
ch:
# squid3 -z
3. Recarga la conguracin de squid.
4. Navega un poco con Ubuntu haciendo bsquedas en Google, en GoogleMaps, y en la Wikipedia.
5. De vez en cuando consulta el espacio utilizado en el directorio de cach:
# du --max-depth=1 /var/spool/squid3
44
no
use HTTPS.
: Ficheros de registro
Prctica 3.12
access.log:
/var/log/squid:
date -d @<numero>
cache.log:
netdb.state
cach
(o
store.log):
en memoria.
Prctica 3.13
Pide el
squidclient, que
wget
45
$ squidclient cache_object://localhost/mem
Tambin es posible usar un alias:
$ squidclient mgr:mem
Los cheros disponibles para solicitar son muchsimos, y estn enumerados en la documentacin de squid (mem,
...).
Prctica 3.14
token bucket.
delay pools.
Las
delay_pools:
indica el nmero de
delay pools.
delay_pools <numDelayPools>
delay_class:
delay pool.
bucket ) agregada
aggregate bucket.
token-
Clase 2: el trco queda limitado de manera global por una estructura de control (igual que en la clase 1), pero se aaden a l
256 estructuras ms individuales, usndose uno u otro segn los
bits 25-32 de la IP de los clientes. Est pensado para independizar
el control de trco de los clientes de una red de clase C.
46
aggregate bucket.
de un
network buckets,
pool :
<rate>
como
razones de espacio).
pool
deny,
inmediatamente. Si pone-
relacionados a ese
delay pool
delay_access
.iso.
47
delay_class 1 1
# ... para el que permitiremos rfagas de 100 KB
# y velocidades mantenidas de 1 KB (un poco extremo,
# pero para poderlo notar al probarlo) ...
delay_parameters 1 1024/102400
# ... que se utilizar en descargas de ISOs ...
delay_access 1 allow isos
# ... y nada ms.
delay_access 1 deny all
# Al inicio, la posibilidad de rfagas es completa
delay_initial_bucket_level 100
2. Recarga Squid:
# /etc/init.d/squid reload
3. En Debian servidor, monitoriza el estado de los delay pools peridicamente:
HTTP/1.0 200 OK
Server: <Versin>
[ Resto de cabeceras HTTP ]
Connection: close
Delay pools configured: 1
Pool: 1
Class: 1
Aggregate:
Max: 102400
Restore: 1024
Current: 102400
48
delay pool
no cambia.
wget.
delay pool.
delay pool.
En el prximo captulo. . .
En el prximo captulo repasaremos el protocolo HTTPS, y la conguracin de Apache para usarlo.
Captulo 4
HTTP seguro
Las conversaciones son siempre
peligrosas si se tiene algo que ocultar.
Agatha Christie
Netscape anticip una web como soporte para los negocios y las transacciones econmicas. Para que esa visin se convirtiera en realidad, necesitaba
una
web segura,
En el lejano 1995, public por primera vez SSL (la versin 2.0), que con
el tiempo se estandariz y renombr a TLS. En este captulo indagaremos
sobre su funcionamiento.
Prctica 4.1
HTTP es un protocolo
en claro
http://www.microsoft.com/
y a
https://www.microsoft.com/
nc.
www.microsoft.com
50
$ nc www.microsoft.com 80
GET / HTTP/1.1
Host: www.microsoft.com
[ lnea en blanco ]
5. Comprueba que el servidor Web responde correctamente. Comprueba
tambin que en Wireshark puedes ver la comunicacin.
6. Haz lo mismo conectndote al puerto 443, utilizado por HTTPS:
$ nc www.microsoft.com 443
GET / HTTP/1.1
Host: www.microsoft.com:443
[ lnea en blanco ]
7. Comprueba que el servidor cierra la conexin inmediatamente porque
el protocolo es incorrecto. Algunos servidores son algo ms educados y
devuelven una pgina de error usando HTTP.
: SSL/TLS
Prctica 4.2
HTTPS es en realidad HTTP sobre una conexin segura conseguida utilizando el protocolo SSL/TLS.
independiente
sockets seguros
a travs de SSL/TLS.
queremos usar
openssl
en modo cliente.
51
openssl
nc.
datos de capa 7.
4. El
openssl
Certicate chain
Prctica 4.3
https://www.microsoft.com
HTTPS).
2. Pulsa sobre el candado a la izquierda de la direccin, y elige Ms
informacin. Vers informacin bsica sobre la pgina.
52
3. Pulsa
openssl.
Prctica 4.4
https://twitter.com.
no nos deja
sabilidad.
4. Utilizando
openssl,
La salida puede ser muy larga y quiz las cabeceras no puedas llegar a verlas. Redirige
53
[ linea en blanco ]
[ CABECERAS HTTP ]
strict-transport-security: max-age=....
5. Comprueba la aparicin de la cabecera
strict-transport-security
: HTTPS en Apache
Prctica 4.5
1. Ve al directorio
tencia del
2. Habilita ese
virtual host :
# a2ensite default-ssl
3. Dado que SSL resulta algo costoso, su soporte se encuentra en un
mdulo
# a2enmod ssl
4. Reinicia Apache:
no
https://.
Vers
huella digital
virtual host
54
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
8. Calcula la
huella digital
-noout:
-in /etc...:
-fingerprint:
http://httpd.apache.org/docs/2.4/ssl/
En el prximo captulo. . .
En el prximo captulo veremos SSH, el protocolo seguro para abrir terminales remotos. Aunque a menudo SSH es visto nicamente como la evolucin
del protocolo de telnet, sus caractersticas son mucho ms ricas, algunas de
las cuales tambin sern exploradas.
Captulo 5
Los protocolos iniciales usados en Internet no se preocuparon por la seguridad; al n y al cabo Internet naci siendo una red pequea gestionada
por gente relativamente cercana.
Al ir creciendo, la seguridad se convirti en un problema, y se buscaron
soluciones para encriptar las comunicaciones. SSH surgi para sustituir a
telnet y a ftp, y HTTPS lo hizo para sustituir a HTTP. Ambos protocolos
se alimentaron de las tcnicas de encriptacin asimtricas, que nacieron en
1977 con la invencin del algoritmo RSA.
En este captulo veremos el funcionamiento de SSH, tanto en el lado del
cliente como del servidor.
Prctica 5.1
/etc/ssh.
55
56
ssh_host_rsa_key*
ssh_host_dsa_key*
ssh_host_ecdsa_key*
ssh_host_ed25519_key*
.pub)
Prctica 5.2
ms adelante vamos a
/etc/ssh/ssh_config.
HashKnownHosts
y ponla en
No.
57
$ ssh 10.x.n.1
The authenticity of host '10.x.n.1 (10.x.n.1)' can't be
established.
ECDSA key fingerprint is ac:d7:e5:c0:f0:c7:c0:bd:d7:4d:ed:
11:7c:cb:cf:ae.
Are you sure you want to continue connecting (yes/no)?
El servidor nos enva
ngerprint
$ ssh usuario@10.x.n.1
o
root,
: El chero known_hosts
Prctica 5.3
ngerprint
de la clave pblica.
no
58
Recuerda desconectarte de Debian Servidor. Una vez de vuelta en Debian Cliente abre el chero
known_hosts
ha crecido.
Prctica 5.4
En el chero
Borra el chero
Abre el chero
known_hosts
de Debian Cliente
/etc/ssh/ssh_config.
Yes.
known_hosts.
No
59
Prctica 5.5
Un
known_hosts
pide saber si conocemos o no la clave pblica de un servidor, o incluso borrarla. Para saber si la conocemos usamos
(de
Find ).
ssh-keygen
con el parmetro
-F
$ ssh-keygen -F 10.x.n.1
# Host 10.x.n.1 found: line 1 type RSA
|1|rStrfKI5TFLSadM7CLcbHj29o4g=|s3mvA3W+lzfSSdyorRRB7bCzN+4=
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAuBLOPgu+2MwyhDWtjv4GEJQL
[ ... resto de clave pblica ... ]
/WWJN2L1AF16eHLt4Q==
Para borrar una clave pblica:
$ ssh-keygen -R 10.x.n.1
/home/alumno/.ssh/known_hosts updated.
Original contents retained as /home/alumno/.ssh/known_hosts.old
Si tenemos un chero
known_hosts
sin encriptar (porque lo hemos creado con una versin antigua del cliente),
podemos encriptarlo con:
$ ssh-keygen -H
/home/alumno/.ssh/known_hosts updated.
Original contents retained as /home/alumno/.ssh/known_hosts.old
Debido al funcionamiento del almacn de claves pblicas, la conexin
Prctica 5.6
Algunos
clientes
modo para los usuarios porque tiene muchos nmeros y es fcil equivocarse.
60
clave en el servidor:
$ ssh-keygen -B -f /etc/ssh/ssh_host_ecdsa_key
2048 xitot-larit-gumet-gygim-sozev-vyned-cigeb-sariv-tekuk-badus
-bexax /etc/ssh/ssh_host_rsa_key.pub
comprobar siempre
la clave pblica
del profesor.
almacenada.
Cierra la sesin.
En Debian Servidor, aade una regla en iptables para redirigir todo
el trco SSH saliente hacia
tu
$ ssh 10.x.m.1
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the
-middle attack)!
It is also possible that the RSA host key has just been cha
nged.
61
The fingerprint for the RSA key sent by the remote host is
20:13:ff:d8:2a:6e:d5:42:ce:dd:c4:2a:76:27:08:cf.
Please contact your system administrator.
Add correct host key in /home/alumno/.ssh/known_hosts to ge
t rid of this message.
Offending key in /home/alumno/.ssh/known_hosts:3
remove with: ssh-keygen -f "/home/alumno/.ssh/known_hosts
" -R 192.x.m.1
RSA host key for 192.x.m.1 has changed and you have request
ed strict checking.
Host key verification failed.
: Tnel SSH
Prctica 5.8
El canal seguro creado por SSH puede utilizarse para transportar datos
adicionales adems de los de la sesin interactiva (terminal).
Lanza Wireshark en Ubuntu (o en el antrin). Inicia una captura de
trco poniendo como ltro
host <ipDebianServidorProfesor>
Desde Ubuntu, conectate en el navegador al Debian Servidor del profesor, que tendr lanzado Apache.
Vuelve a Wireshark, deten la captura, y comprueba que puedes ver el
trco en claro.
Lanza de nuevo Wireshark con el mismo ltro.
Desde Ubuntu, conectate por SSH al Debian Servidor del profesor,
ejemplo el puerto
del servidor:
5555)
con el puerto
80
$ netstat -ltnp
Active Internet connections (only servers)
...
tcp 0 0 127.0.0.1:5555 0.0.0.0:* LISTEN
...
10312/ssh
62
Vers aparecer la pgina Web del servidor. Detn la captura, y comprueba el trco. Vers que
no
Prctica 5.9
#
#
#
#
no
iptables
iptables
iptables
iptables
-F
-P
-A
-A
FORWARD
FORWARD ACCEPT
FORWARD -p tcp --dport 80 -j DROP
FORWARD -p tcp --dport 443 -j DROP
63
: FTP seguro
Prctica 5.10
terminal seguro,
sftp.
tambin proporciona
about:config,
network.proxy.socks_remote_dns.
En realidad,
sftp
y poner a cierto
64
En Debian Cliente, usa el cliente de FTP seguro para navegar por los
cheros de Debian servidor:
$ sftp 10.x.n.1
password:
Como con SSH, no nos pregunta el nombre de usuario. Si queremos
uno diferente al nombre local actual, usaremos
Analiza los comandos disponibles (usa
nombre@servidor.
help).
Prctica 5.11
sftp
scp:
alumno de Debian servidor crea
copiame.txt, con un par de lineas
scp:
$ scp alumno@10.x.n.1:copiame.txt .
Desde Debian Cliente copia el chero
carpeta personal del usuario
root
/etc/network/interfaces
4
de Debian Servidor :
a la
Para que esto funcione, tendrs que haber habilitado la conexin para el usuario
en el servidor de SSH.
root
65
<usuario>@<maquina>:<ruta>
Si la ruta que se especica no es absoluta, se asume que parte del direc-
Prctica 5.12
pblica-privada
enviamos al
servidor comprueba que el cliente dispone de la clave privada correspondiente, demostrando as que es quin dice ser. En ese caso, le deja conectarse sin
pedir la contrasea del sistema.
Lo que vamos a hacer en esta prctica es que desde Debian Cliente (con el
usuario
~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/alumno/.ssh/id_
rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/alumno/.ssh/id_
rsa.
Your public key has been saved in /home/alumno/.ssh/id_rsa.
pub.
The key fingerprint is:
2c:ca:41:89:94:ac:93:0f:7b:df:e9:9e:f8:c4:ec:03 alumno@debi
ancliente
Esto nos ha dejado la pareja de claves en
el tamao de la clave. El lugar donde nos ha dejado las claves es cmodo, porque es donde lo buscar el
cliente
66
pblica
copiamos:
servidor
cacin automtica en
/.ssh/authorized_keys5 .
una linea, y podemos tener muchas concatenadas. Tenemos que conectarnos por SSH (por ltima vez, usando la contrasea tradicional), y
concatenar la clave pblica a dicho chero:
usando esa clave. Por ejemplo, podramos congurarla para que el servidor impidiera el
reenvo de puertos para ese usuario, la creacin de un TTY, o limitar el uso a un comando
concreto.
Para evitar esta incomodidad existe el agente SSH que guarda y mantiene en me-
En el prximo captulo. . .
67
root
directamente.
En Windows tambin existen mltiples clientes de SSH. El ms conocido es PuTTY, que proporciona un cliente de SSH, uno de SFTP y uno
de SCP, entre otras herramientas. Es de cdigo abierto y est disponible
gratutamente.
En el prximo captulo. . .
A travs de los tneles, SSH puede utilizarse para salir de la red local
donde estamos conectados, y utilizar servicios remotos de modo que el resto
del mundo vea como nuestra la IP del servidor al que nos hemos conectado. Los tneles dinmicos (con SOCKS) proporcionan bastante versatilidad
porque no necesitamos conocer de antemano a qu lugares querremos ir. La
desventaja es que exige que el software local est preparado para usar proxies
SOCKS.
En el prximo captulo veremos el concepto de las redes privadas virtuales
(VPN), que lleva esta idea ms all, encriptando
toda
la comunicacin de la
Captulo 6
Histricamente, cuando una empresa dispona de dos localizaciones diferentes y quera unir sus redes, deba alquilar una lnea de comunicacin
entre ambas, que serva de enlace entre sus routers. Del mismo modo, si un
trabajador quera conectarse a la red desde una localizacin remota, deba,
normalmente, realizar una llamada a la empresa para contactar con alguno
de sus
modems
Prctica 6.1
70
profesor desde Ubuntu. Lo primero que haremos ser una prueba de que las
cosas funcionan normalmente antes de la VPN:
ping
a la IP
interna
del
ping
sin en-
criptar.
Detn la captura en Wireshark.
Mira los interfaces de red y la tabla de rutas de Ubuntu. Deberas ver
un nico interfaz de red y las rutas habituales.
tracepath,
Utilizando
esa IP, para ver que tu ordenador utiliza la puerta de enlace que era
de esperar.
tracepath 10.x.m.1 -n
71
alumno
como usuario, y
esspeevpn
como contrasea.
Pulsa sobre el botn de las opciones avanzadas, y marca Use Pointto-Point encryptation (MPPE).
Cierra el asistente. De nuevo sobre el icono de la barra de herramientas,
selecciona en el men desplegable la nueva VPN para conectarte.
72
tracepath
Prctica 6.2
/etc/pptpd.conf
para in-
localip 172.16.n.1
remoteip 172.16.n.10-50
Abre el chero de conguracin del demonio de PPP cuando lo utiliza
PPTP, que puedes encontrar en
el valor de la directiva
name,
/etc/ppp/pptpd-options.
pptpd.
Fijate en
/etc/ppp/chap-secrets.
columnas:
alumno
73
name
de
pptpd-options, pptpd.
esspeevpn.
*.
En resumen:
/etc/init.d/pptpd restart
Cuando nuestro compaero haya creado su VPN, conguramos una nueva
conexin por VPN en Ubuntu, nos conectamos a ella y la probamos.