Trabajo - DavidHorat.com

Anuncio
Práctica 5:
Puesta en marcha de un
cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David Jesús Horat Flotats
Enrique Fernández Perdomo
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
Índice
Introducción a los cortafuegos o firewall........................................................... 2
Introducción a iptables....................................................................................... 8
Parámetros de iptables..................................................................................... 10
SINOPSIS...................................................................................................... 10
OBJETIVOS....................................................................................................11
TABLAS......................................................................................................... 11
PARÁMETROS...............................................................................................11
EXTENSIONES..............................................................................................12
icmp........................................................................................................... 12
state...........................................................................................................12
tcp..............................................................................................................13
Ejemplo de una política concreta..................................................................... 14
Objetivos........................................................................................................14
Configuración................................................................................................14
Ejemplos de acceso...........................................................................................22
Ip-Spoofing.................................................................................................... 22
ICMP..............................................................................................................22
Telnet............................................................................................................ 26
FTP................................................................................................................ 27
POP3..............................................................................................................28
HTTP............................................................................................................. 30
SMTP.............................................................................................................33
DNS............................................................................................................... 36
1
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
Introducción a los cortafuegos o firewall1
Un firewall es un dispositivo que filtra el tráfico entre redes, como
mínimo dos. El firewall puede ser un dispositivo físico o un software sobre un
sistema operativo. En general debemos verlo como una caja con DOS o mas
interfaces de red en la que se establecen una reglas de filtrado con las que se
decide si una conexión determinada puede establecerse o no. Incluso puede ir
más allá y realizar modificaciones sobre las comunicaciones, como el NAT.
Esa sería la definición genérica, hoy en dia un firewall es un hardware
especifico con un sistema operativo o una IOS que filtra el tráfico
TCP/UDP/ICMP/../IP y decide si un paquete pasa, se modifica, se convierte o
se descarta. Para que un firewall entre redes funcione como tal debe tener al
menos dos tarjetas de red. Esta sería la tipología clásica de un firewall:
Ilustración 1: Esquema de firewall típico entre red local e internet
Esquema típico de firewall para proteger una red local conectada a internet a
través de un router. El firewall debe colocarse entre el router (con un único
cable) y la red local (conectado al switch o al hub de la LAN)
Dependiendo de las necesidades de cada red, puede ponerse uno o más
firewalls para establecer distintos perímetros de seguridad en torno a un
sistema. Es frecuente también que se necesite exponer algún servidor a
internet (como es el caso de un servidor web, un servidor de correo, etc..), y
en esos casos obviamente en principio se debe aceptar cualquier conexión a
1 Extraído de http://www.pello.info/filez/firewall/iptables.html
2
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
ellos. Lo que se recomienda en esa situación es situar ese servidor en lugar
aparte de la red, el que denominamos DMZ o zona desmilitarizada. El firewall
tiene entonces tres entradas:
Ilustración 2: Esquema de firewall entre red local e internet con zona DMZ para servidores
expuestos
En la zona desmilitarizada se pueden poner tantos servidores como se
necesiten. Con esta arquitectura, permitimos que el servidor sea accesible
desde internet de tal forma que si es atacado y se gana acceso a él, la red
local sigue protegida por el firewall. Esta estructura de DMZ puede hacerse
también con un doble firewall (aunque como se ve se puede usar un único
dispositivo con al menos tres interfaces de red). Sería un esquema como este:
3
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
Ilustración 3: Esquema de firewall entre red local e internet con zona DMZ para servidores
expuestos creado con doble firewall(perímetro)
Los firewalls se pueden usar en cualquier red. Es habitual tenerlos como
protección de internet en las empresas, aunque ahí también suelen tener una
doble función: controlar los accesos externos hacia dentro y también los
internos hacia el exterior; esto último se hace con el firewall o frecuentemente
con un proxy (que también utilizan reglas, aunque de más alto nivel).
También, en empresas de hosting con muchos servidores alojados lo normal es
encontrarnos uno o más firewalls ya sea filtrando toda la instalación o parte
de ella:
4
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
Ilustración 4: Esquema de firewall entre redes, en la que solo se filtra y no se hace NAT
Sea el tipo de firewall que sea, generalmente no tendrá mas que un
conjunto de reglas en las que se examina el origen y destino de los paquetes
del protocolo tcp/ip. En cuanto a protocolos es probable que sean capaces de
filtrar muchos tipos de ellos, no solo los tcp, también los udp, los icmp, los gre
y otros protocolos vinculados a vpns. Este podría ser (en pseudo-lenguaje) un
el conjunto de reglas de un firewall del primer gráfico:
Politica por defecto ACEPTAR.
Todo lo que venga de la red local al firewall ACEPTAR
Todo lo que venga de la ip de mi casa al puerto tcp 22 ACEPTAR
Todo lo que venga de la ip de casa del jefe al puerto tcp 1723 ACEPTAR
Todo lo que venga de hora.rediris.es al puerto udo 123 ACEPTAR
Todo lo que venga de la red local y vaya al exterior ENMASCARAR
5
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
Todo lo que venga del exterior al puerto tcp 1 al 1024 DENEGAR
Todo lo que venga del exterior al puerto tcp 3389 DENEGAR
Todo lo que venga del exterior al puerto udp 1 al 1024 DENEGAR
En definitiva lo que se hace es:
- Habilita el acceso a puertos de administración a determinadas IPs
privilegiadas
- Enmascara el trafico de la red local hacia el exterior (NAT, una petición de
un pc de la LAN sale al exterior con la ip pública), para poder salir a internet
- Deniega el acceso desde el exterior a puertos de administración y a todo lo
que este entre 1 y 1024.
Hay dos maneras de implementar un firewall:
1) Política por defecto ACEPTAR: en principio todo lo que entra y sale por el
firewall se acepta y solo se denegará lo que se diga explícitamente.
2) Política por defecto DENEGAR: todo esta denegado, y solo se permitirá
pasar por el firewall aquellos que se permita explícitamente.
Como es obvio imaginar, la primera política facilita mucho la gestión del
firewall, ya que simplemente nos tenemos que preocupar de proteger aquellos
puertos o direcciones que sabemos que nos interesa; el resto no importa tanto
y se deja pasar. Por ejemplo, si queremos proteger una máquina linux,
podemos hacer un netstat -ln (o netstat -an, o netstat -puta | grep LISTEN),
saber que puertos están abiertos, poner reglas para proteger esos puertos y
ya está. ¿Para qué vamos a proteger un puerto que realmente nunca se va a
abrir?
El único problema que podemos tener es que no controlemos que es lo
que esta abierto, o que en un momento dado se instale un software nuevo que
abra un puerto determinado, o que no sepamos que determinados paquetes
ICMP son peligrosos. Si la política por defecto es ACEPTAR y no se protege
explícitamente, nos la estamos jugando un poco.
En cambio, si la política por defecto es DENEGAR, a no ser que lo
6
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
permitamos explícitamente, el firewall se convierte en un auténtico MURO
infranqueable. El problema es que es mucho más difícil preparar un firewall
así, y hay que tener muy claro como funciona el sistema (sea iptables o el que
sea) y que es lo que se tiene que abrir sin caer en la tentación de empezar a
meter reglas super-permisivas.
Esta configuración de firewall es la recomendada, aunque no es aconsejable
usarla si no se domina mínimamente el sistema. Uno de los objetos principales
de este documento es mostrar la forma de crear este tipo de firewalls.
IMPORTANTE
El orden en el que se ponen las reglas de firewall es determinante.
Normalmente cuando hay que decidir que se hace con un paquete se va
comparando con cada regla del firewall hasta que se encuentra una que le
afecta (match), y se hace lo que dicte esta regla (aceptar o denegar); después
de eso NO SE MIRARÁN MÁS REGLAS para ese paquete. ¿Cuál es el peligro?
Si ponemos reglas muy permisivas entre las primeras del firewall, puede que
las siguientes no se apliquen y no sirvan de nada.
7
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
Introducción a iptables2
IPtables es un sistema de firewall vinculado al kernel de linux que se ha
extendido enormemente a partir del kernel 2.4 de este sistema operativo. Al
igual que el anterior sistema ipchains, un firewall de iptables no es como un
servidor que lo iniciamos o detenemos o que se pueda caer por un error de
programación(esto es una pequeña mentira, ha tenido alguna vulnerabilidad
que permite DoS, pero nunca tendrá tanto peligro como las aplicaciones que
escuchan en determinado puerto TCP): iptables esta integrado con el kernel,
es parte del sistema operativo. ¿Cómo se pone en marcha? Realmente lo que
se hace es aplicar reglas. Para ellos se ejecuta el comando iptables, con el que
añadimos, borramos, o creamos reglas. Por ello un firewall de iptables no es
sino un simple script de shell en el que se van ejecutando las reglas de
firewall. El kernel lo que hace es, dependiendo si el paquete es para la propia
maquina o para otra maquina, consultar las reglas de firewall y decidir que
hacer con el paquete según mande el firewall. Este es el camino que seguiría
un paquete en el kernel:
Ilustración 5: Cuando un paquete u otra comunicación llega al kernel con iptables
se sigue este camino
Como se ve en el gráfico, básicamente se mira si el paquete esta
2 Extraído de http://www.pello.info/filez/firewall/iptables.html
8
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
destinado a la propia maquina o si va a otra. Para los paquetes (o datagramas,
según el protocolo) que van a la propia maquina se aplican las reglas INPUT y
OUTPUT, y para filtrar paquetes que van a otras redes o maquinas se aplican
simplemente reglas FORWARD.
INPUT,OUTPUT y FORWARD son los tres tipos de reglas de filtrado. Pero
antes de aplicar esas reglas es posible aplicar reglas de NAT: estas se usan
para hacer redirecciones de puertos o cambios en las IPs de origen y destino.
Veremos ejemplos.
E incluso antes de las reglas de NAT se pueden meter reglas de tipo
MANGLE, destinadas a modificar los paquetes; son reglas poco conocidas y es
probable que no las usen.
Por tanto tenemos tres tipos de reglas en iptables:
- MANGLE
- NAT: reglas PREROUTING, POSTROUTING
- FILTER: reglas INPUT, OUTPUT, FORWARD.
9
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
Parámetros de iptables
Iptables admite muchos parámetros, de los cuales a continuación se
comentarán los principales y, más en concreto, los usados para la
configuración realizado del firewall de nuestra máquina.
SINOPSIS
iptables [-t table] -[AD] chain especificación-regla [opciones] --> con A
se añade una regla a la cadena de reglas; con D se borra una regla de la
cadena de reglas.
iptables [-t table] -I chain [numeroregla] especificación-regla
[opciones] --> Insertar una regla en concreto.
iptables [-t table] -R chain numeroregla especificación-regla [opciones]
--> Reemplazar una regla en concreto.
iptables [-t table] -D chain numeroregla [opciones] --> Eliminar una
regla en concreto.
iptables [-t table] -[LFZ] [chain] [opciones] --> L lista todas las reglas
de una cadena de reglas; F hace un flush, es decir, actualiza los cambios en la
cadena de reglas; Z pone a cero los paquetes y contadores de las cadenas de
reglas.
iptables [-t table] -N chain --> Crea una nueva cadena de reglas
(chain).
iptables [-t table] -X [chain] --> Elimina toda una cadena de reglas
(chain).
iptables [-t table] -P chain objetivo [opciones] --> Establece la política
para una cadena de reglas, es decir, el objetivo para la misma. Sirve como
política por defecto.
10
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
iptables [-t table] -E old-chain-name new-chain-name --> Renombre una
cadena de reglas (chain).
OBJETIVOS
Las reglas de un firewall especifican un criterio para los paquetes y el
objetivo, es decir, que hacer con ellos. Si una regla se valida se le aplica el
objetivo. Los posibles objetivos son:
ACCEPT indica que se deje pasar el paquete.
DROP indica que se desecha el paquete.
Otros: QUEUE y RETURN
TABLAS
Hay tres tipos de tabla:
-t, --table tabla
Indica sobre que tabla actuará la opción o comando. Las tablas son:
filter:
Tabla por defecto. Contiene las cadenas de reglas: INPUT
(paquetes entrantes), FORWARD (paquetes enrutados), y
OUTPUT (paquetes salientes).
nat:
Tabla para paquetes encontrados en conexiones nuevas. Admite
las siguientes cadenas de reglas: PREROUTING, OUTPUT y
POSTROUTING.
mangle:
Tabla para alteraciones especiales de los paquetes.
PARÁMETROS
Parámetros para especificar reglas. Se usan al añadir, eliminar, insertar,
reemplazar y concatenar comandos.
-p, --protocol [!] protocolo
Protocolo del paquete a chequear. Se admite: tcp, udp, icmp, or all (por
defecto), o un valor numérico. Con "!" se niega.
11
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
-s, --source [!] dirección[/máscara]
Origen o fuente. La dirección puede ser un nombre de dominio,
hostname, una IP de red o IP de máquina. La máscara puede ser de una
red o una máquina, e indica el número de 1s. Se suele usar el alias --src.
-d, --destination [!] dirección[/máscara]
Destino. Se suele usar el alias –dst.
-j, --jump objetivo
Indica el objetivo de la regla, es decir, que hacer con ella, que se indica
en el apartado de OBJETIVOS.
-i, --in-interface [!] name
Interfaz por la que se reciben los paquetes. Admite las cadenas de reglas
INPUT, FORWARD y PREROUTING.
-o, --out-interface [!] name
Interfaz por la que se envían los paquetes. Admite las cadenas de reglas
FORWARD, OUTPUT y POSTROUTING.
EXTENSIONES
iptables puede extenderse, es decir, extender los módulos de matching
de paquetes. Se puede hacer implícitamente (ej. con -p o –protocol, que
indican el protocolo y automáticamente se carga el módulo del protocolo) o
explícitamente, con las opciones -m o --match, seguidas del nombre del
módulo de matching; después de esto se dispone de varios comandos extra,
según el módulo.
icmp
Esta extensión se carga al indicar -p icmp. Proporciona la siguiente
opción:
--icmp-type [!] typename
Especifica el tipo de ICMP, que puede ser un valor numérico o nombres
de tipos ICMP. En nuestro caso destacan dos: echo-request
(interrogación o petición) y echo-reply (repuesta o contestación).
state
Este módulo, cuando se comibina con el seguimiento de conexiones,
permite el acceso al seguimiento del estado de los paquetes.
--state estado
12
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
El estado es una lista separado por espacios para comprobar los estados
de la conexión. Los posibles estados son:
INVALID indica que el paquete no puede identificarse.
ESTABLISHED indica que el paquete está asociado con una conexión en
la que se han visto paquetes en ambas direcciones.
NEW indica que el paquete ha iniciado una nueva conexión o bien está
asociado a una conexión en la que no se han visto paquetes en ambas
direcciones.
RELATED indica que el paquete está iniciando una nueva conexión, pero
está asociado a una conexión existente. Es el caso de las transferencias
de datos FTP o los errores ICMP.
tcp
Esta extensión se carga con -p tcp. Proporciona las siguientes opciones:
--source-port [!] puerto[:puerto]
Puerto o rango de puertos de origen. Puede indicar el nombre de un
servicio (ej. ftp) o un número de puerto. Puede indicarse un rango
inclusivo. Si se omite el primer puerto (:puerto) se toma 0. Si se omite el
segundo valor (puerto:) se toma el valor máximo: 65535. Se suele usar
el alias --sport.
--destination-port [!] puerto[:puerto]
Puerto o rango de puertos de destino. Se suele usar el alias --dport.
13
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
Ejemplo de una política concreta
Objetivos
–
Llevar a cabo la política de “Denegación por defecto” tal que todos los
servicios estén prohibidos por defecto y haya que ir añadiendo servicios
bajo petición.
–
Activar los siguientes servicios
–
IP-SPOOFING: Evitar spoofing the nuestras direcciones de red
–
ICMP: Denegar Echo Request a máquinas internas
–
Telnet: Solo hacia afuera
–
FTP: Solo hacia afuera
–
POP3: Solo hacia afuera por enlaces ethernet y ambos sentidos por
enlaces ppp.
–
HTTP: Solo hacia afuera y a través del servidor proxy
“proxy.ulpgc.es” (193.145.133.12)
–
SMTP: Solo hacia afuera con la máquina 172.16.1.1 que actúa como
relaying de correo
–
DNS: Ambos sentidos pero solo con la máquina 172.16.1.1 que
actuará de forwarder
Configuración
Para la configuración de iptables usaremos un script the bash creado
para esta ocasión y comentado, con el mismo orden que la lista de servicios a
activar indicada en los Objetivos. Además, consta de una declaración de
variables previa, para que sirve para cualquier jerarquía de direcciones Ips.
En el propio script se comenta lo que hace cada línea, que se han
realizado (escrito) según el orden de las configuraciones a aplicar, tal y como
el guión de la práctica lo indicaba.
#!/bin/bash
14
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
# Variables
INTERNET=eth0
LOCAL=eth1
REDLOCAL=172.16.6.0/24
YO=172.16.1.6
echo "Aplicando Reglas de Firewall..."
# Borrado de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
# Establecemos politica de denegación por defecto
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# [1] IP-SPOOFING - Evitar SPOOFING de nuestras direcciones de red...
# [1.1] a la propia máquina
iptables -A INPUT -i $INTERNET -s $REDLOCAL -j DROP && echo "Impedimos IP-Spoofing"
# [1.2] a las máquinas de la red interna
iptables -A FORWARD -i $INTERNET -s $REDLOCAL -j DROP && echo "Impedimos IPSpoofing"
# [2] ICMP - Denegar Echo Request a máquinas internas y aceptar el resto
# [2.1] Permitir ping hacia fuera, desde la red interna
iptables -A FORWARD -i $LOCAL -p icmp --icmp-type echo-request -j ACCEPT && echo
"Aceptamos ICMP request a través"
15
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
iptables -A FORWARD -i $INTERNET -p icmp --icmp-type echo-reply -j ACCEPT && echo
"Aceptamos ICMP reply a través"
# [2.2] Permitir ping hacia fuera, desde la propia máquina
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT && echo "Aceptamos ICMP
request hacia fuera"
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT && echo "Aceptamos ICMP
reply hacia dentro"
# [2.3] Permitir ping a la propia máquina, desde la red local
iptables -A INPUT -p icmp --icmp-type echo-request -s $REDLOCAL -j ACCEPT && echo
"Aceptamos ICMP request de mi red"
iptables -A OUTPUT -p icmp --icmp-type echo-reply -d $REDLOCAL -j ACCEPT && echo
"Aceptamos ICMP reply a mi red"
# [2.4] Admitir ping a mi mismo a través de la interfaz externa (en realidad,
ya se cubre con las reglas [2.5])
#iptables -A INPUT -p icmp --icmp-type echo-request -s $YO -j ACCEPT &&
echo "Aceptamos ICMP request de mi mismo"
#iptables -A OUTPUT -p icmp --icmp-type echo-reply -d $YO -j ACCEPT &&
echo "Aceptamos ICMP reply a mi mismo"
# [2.5] Permite que:
# 1. Me pueda hacer ping a mismo a través de la interfaz externa
# 2. Me vean desde Internet a través de la interfaz externa (pero no de la
interna)
iptables -A INPUT -p icmp --icmp-type echo-request -d $YO -j ACCEPT && echo "Aceptamos
ICMP request a mi mismo"
iptables -A OUTPUT -p icmp --icmp-type echo-reply -s $YO -j ACCEPT && echo "Aceptamos
ICMP reply de mi mismo"
# [3] Telnet solo hacia fuera
# [3.1] Dejar salir hacia fuera, desde red interna y la propia máquina
16
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
iptables -A FORWARD -i $LOCAL -p tcp --dport 23 -s $REDLOCAL -j ACCEPT && echo
"Aceptamos FTP a traves"
iptables -A OUTPUT -p tcp --dport 23 -j ACCEPT && echo "Aceptamos FTP hacia fuera"
# [3.2] Dejar entrar paquetes de las conexiones establecidas, hacia la red
interna y la propia máquina
iptables -A FORWARD -i $INTERNET -p tcp -m tcp --sport 23 -m state --state 'RELATED' -state 'ESTABLISHED' -j ACCEPT && echo ""
iptables -A INPUT -p tcp -m tcp --sport 23 -m state --state 'RELATED' --state 'ESTABLISHED'
-j ACCEPT && echo ""
# [4] FTP solo hacia fuera
# [4.1] Dejar salir hacia fuera, desde red interna y la propia máquina
iptables -A FORWARD -i $LOCAL -p tcp --dport ftp -s $REDLOCAL -j ACCEPT && echo
"Aceptamos FTP a traves"
iptables -A OUTPUT -p tcp --dport ftp -j ACCEPT && echo "Aceptamos FTP hacia fuera"
# [4.2] Dejar entrar paquetes de las conexiones establecidas, hacia la red
interna y la propia máquina
iptables -A FORWARD -i $INTERNET -p tcp -m tcp --sport ftp -m state --state 'RELATED' -state 'ESTABLISHED' -j ACCEPT && echo "Aceptamos FTP a traves hacia dentro de
conexiones establecidas"
iptables -A INPUT -p tcp -m tcp --sport ftp -m state --state 'RELATED' --state 'ESTABLISHED'
-j ACCEPT && echo "Aceptamos FTP hacia dentro siempre que venga de una conexión
establecida"
# [5] DNS en ambos sentidos pero solo con la máquina 172.16.1.1 que
actuará de forwarder
# [5.1] Dejar salir hacia 172.16.1.1, desde red interna y la propia máquina
iptables -A FORWARD -i $LOCAL -d 172.16.1.1 -p udp --dport 53 -j ACCEPT && echo
"Aceptamos DNS hacia afuera"
iptables -A OUTPUT -d 172.16.1.1 -p udp --dport 53 -j ACCEPT && echo "Aceptamos DNS
17
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
hacia "
# [5.2] Dejar entrar paquetes desde 172.16.1.1, hacia la red interna y la
propia máquina
iptables -A FORWARD -i $INTERNET -s 172.16.1.1 -p udp --sport 53 -j ACCEPT && echo
"Aceptamos DNS de vuelta"
iptables -A INPUT -s 172.16.1.1 -p udp --sport 53 -j ACCEPT && echo "Aceptamos DNS de
vuelta"
# [6] POP3 solo hacia fuera por enlace ethernet
# [6.1] Dejar salir hacia fuera, desde red interna y la propia máquina
iptables -A FORWARD -i $LOCAL -p tcp --dport 110 -j ACCEPT && echo "Aceptamos POP3
hacia afuera"
iptables -A OUTPUT -p tcp --dport 110 -j ACCEPT && echo "Aceptamos POP3 de vuelta"
# [6.2] Dejar entrar paquetes de las conexiones establecidas, hacia la red
interna y la propia máquina
iptables -A FORWARD -i $INTERNET -p tcp -m tcp --sport 110 -m state --state 'RELATED' -state 'ESTABLISHED' -j ACCEPT && echo "Aceptamos POP3 a traves hacia las
máquinas internas"
iptables -A INPUT -p tcp -m tcp --sport 110 -m state --state 'RELATED' --state
'ESTABLISHED' -j ACCEPT && echo "Aceptamos POP3 hacia la máquina firewall"
# [6.3] Dejar salir hacia fuera por ppp, desde red interna y la propia
máquina
iptables -A FORWARD -i ppp+ -p tcp --sport 110 -j ACCEPT && echo "Aceptamos POP3 a
traves hacia dentro"
iptables -A OUTPUT -o ppp+ -p tcp --sport 110 -j ACCEPT && echo "Aceptamos POP3 a
traves hacia fuera"
# [6.4] Dejar entrar paquetes de las conexiones ppp establecidas, hacia la red
interna y la propia máquina
iptables -A FORWARD -o ppp+ -p tcp --dport 110 -j ACCEPT && echo "Aceptamos POP3 a
18
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
traves hacia fuera"
iptables -A INPUT -i ppp+ -p tcp --dport 110 -j ACCEPT && echo "Aceptamos POP3 a
traves hacia dentro"
# [7] HTTP solo hacia afuera y a través del servidor Proxy
"proxy.rcanaria.es" (193.146.95.50)
# [7.1] Dejar salir hacia el proxy 193.146.95.50, desde red interna y la propia
máquina
iptables -A FORWARD -i $LOCAL -d 193.146.95.50 -p tcp --dport 3128 -j ACCEPT && echo
"Aceptamos HTTP hacia afuera a proxy.ulpgc.es (193.145.133.12)"
iptables -A OUTPUT -d 193.146.95.50 -p tcp --dport 3128 -j ACCEPT && echo "Aceptamos
HTTP de vuelta de proxy.ulpgc.es (193.145.133.12)"
# [7.2] Dejar entrar paquetes de las conexiones establecidas, hacia la red
interna y la propia máquina
iptables -A FORWARD -i $INTERNET -s 193.146.95.50 -p tcp -m tcp --sport 3128 -m state -state 'RELATED' --state 'ESTABLISHED' -j ACCEPT && echo "Aceptamos POP3 a traves
hacia las máquinas internas"
iptables -A INPUT -s 193.146.95.50 -p tcp -m tcp --sport 3128 -m state --state 'RELATED' -state 'ESTABLISHED' -j ACCEPT && echo "Aceptamos POP3 hacia la máquina firewall"
# [8] SMTP solo hacia afuera con la máquina 172.16.1.24
(neptuno.redes.dis.ulpgc.es) que actúa como relaying de correo
# [8.1] Dejar salir hacia 172.16.1.24, desde red interna y la propia máquina
iptables -A FORWARD -i $LOCAL -d 172.16.1.24 -p tcp --dport 25 -j ACCEPT && echo
"Aceptamos SMTP hacia afuera a 172.16.1.24"
iptables -A OUTPUT -d 172.16.1.24 -p tcp --dport 25 -j ACCEPT && echo "Aceptamos SMTP
hacia afuera a 172.16.1.24"
# [8.2] Dejar entrar paquetes de las conexiones establecidas con 172.16.1.24,
hacia la red interna y la propia máquina
iptables -A FORWARD -i $INTERNET -s 172.16.1.24 -p tcp -m tcp --sport 25 -m state --state
19
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
'ESTABLISHED' --state 'RELATED' -j ACCEPT && echo "Aceptamos SMTP de vuelta de
172.16.1.24"
iptables -A INPUT -s 172.16.1.24 -p tcp -m tcp --sport 25 -m state --state 'ESTABLISHED' -state 'RELATED' -j ACCEPT && echo "Aceptamos SMTP de vuelta de 172.16.1.24"
read
echo "Para comprobar que se aplica: iptables -L -n"
read
iptables -L -n
Las tres últimas líneas se destinan a poder visualizar el estado resultante
de las tablas del iptables, lo que sirve de comprobación de la activación de los
servicios apropiados.
Adicionalmente se dispone de otro script cuya finalidad es configurar
iptables de forma que no filtre nada, es decir, que acepte todo. Dicho fichero
de script se muestra a continuación:
#!/bin/bash
echo "Aplicando Reglas de Firewall..."
echo "Aceptando todas las conexiones ..."
# Borrado de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
# Establecemos politica de aceptación por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
20
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
21
David J. Horat Flotats
Enrique Fernández Perdomo
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
Ejemplos de acceso
En esta sección se listarán las pruebas realizadas, con la finalidad de
demostrar el correcto funcionamiento de la configuración del cortafuegos
iptables, que se ha realizado con el script visto en la sección anterior. Las
pruebas realizadas se enumeran a continuación según el orden establecido en
el guión de la práctica; determinadas configuraciones no será posible
probarlas, ya que no se dispone de las herramientas apropiadas para ello, o
bien su manejo es complejo.
Ip-Spoofing
Para realizar una prueba de Ip-Spoofing no basta tomar una máquina
externa a la red y cambiar su configuración de red. De hecho, si se hace eso
no tendría conectividad porque la máscara de red no sería la apropiada o bien
la Ip o Pasarela estaría mal configurada.
Para poder hacer Ip-Spoofing habría que modificar los paquetes enviados
intentando modificar el campo que indica la IP de origen o fuente. Para ello se
requeriría una herramienta que lo permitiera, de la cual no se dispone. Por
este motivo, no es posible realizar una prueba para observar como el
cortafuegos evita el Ip-Spoofing.
ICMP
Para probar la intervención del cortafuego frente a los paquetes del
protocolo ICMP, se hará uso de la herramienta ping, que usa este protocolo
para las interrogaciones (echo-request) a otras máquinas y las respuestas
(echo-reply) de dichas máquinas.
En primer lugar comprobamos que desde la máquina 172.16.6.1, que es
donde se dispone del firewall instalado, se puede hacer ping a cualquier
máquina. Los tres posibles casos son:
22
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
1. Máquinas de la red interna (172.16.6.0)
Hacemos la prueba con el equipo PC, de nuestra red interna (también
podría hacer con la interfaz de la red interna de la propia máquina), y vermos
que se permite.
[root@pasarela12 Desktop]# ping 172.16.6.2
PING 172.16.6.2 (172.16.6.2) 56(84) bytes of data.
64 bytes from 172.16.6.2: icmp_seq=0 ttl=64 time=0.887 ms
64 bytes from 172.16.6.2: icmp_seq=1 ttl=64 time=0.116 ms
--- 172.16.6.2 ping statistics --2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.116/0.501/0.887/0.386 ms, pipe 2
2. Máquinas de la red externa (172.16.1.0)
Del mismo modo, se permite perfectamente. La prueba se ha realizado
sobre la máquina 172.16.1.1.
[root@pasarela12 Desktop]# ping 172.16.1.1
PING 172.16.1.1 (172.16.1.1) 56(84) bytes of data.
64 bytes from 172.16.1.1: icmp_seq=0 ttl=64 time=0.180 ms
64 bytes from 172.16.1.1: icmp_seq=1 ttl=64 time=0.144 ms
--- 172.16.1.1 ping statistics --2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.144/0.162/0.180/0.018 ms, pipe 2
3. Máquinas externas (Internet)
Con redes externas, en Internet, tampoco hay problema (siempre que no
haya otro firewall que lo impida para sus máquinas). En este caso la prueba se
hace con www.google.com.
[root@pasarela12 Desktop]# ping www.google.com
23
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
PING www.l.google.com (66.102.9.147) 56(84) bytes of data.
64 bytes from 66.102.9.147: icmp_seq=0 ttl=237 time=83.6 ms
64 bytes from 66.102.9.147: icmp_seq=1 ttl=237 time=84.0 ms
--- www.l.google.com ping statistics --3 packets transmitted, 2 received, 33% packet loss, time 2001ms
rtt min/avg/max/mdev = 83.678/83.866/84.054/0.188 ms, pipe 2
Este comportamiento es normal, pues la máquina del firewall no restringe
la posibilidad de hacer ping hacia cualquier destino, sino que las restricciones
son en sentido de entrada.
A continuación se prueba como los pings que se hacen a la propia
máquina (la que tiene el firewall configurado) desde equipos de su red
(172.16.6.0), que se admitirán. Además, también se admite la realización de
ping desde la interfaz externa de la propia máquina, que está en la red
172.16.1.0.
El ping desde la red interna se hace desde la interfaz de la red interna de
la propia máquina (172.16.6.1).
[root@pasarela12 ~]# ping 172.16.6.1
PING 172.16.6.1 (172.16.6.1) 56(84) bytes of data.
64 bytes from 172.16.6.1: icmp_seq=0 ttl=64 time=0.143 ms
64 bytes from 172.16.6.1: icmp_seq=1 ttl=64 time=0.130 ms
--- 172.16.6.1 ping statistics --2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.130/0.136/0.143/0.013 ms, pipe 2
El ping desde el interfaz de la red externa (172.16.1.6) también funciona:
[root@pasarela12 ~]# ping 172.16.1.6
PING 172.16.1.6 (172.16.1.6) 56(84) bytes of data.
64 bytes from 172.16.1.6: icmp_seq=0 ttl=64 time=0.153 ms
24
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
64 bytes from 172.16.1.6: icmp_seq=1 ttl=64 time=0.143 ms
64 bytes from 172.16.1.6: icmp_seq=2 ttl=64 time=0.149 ms
--- 172.16.1.6 ping statistics --3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.143/0.148/0.153/0.010 ms, pipe 2
Finalmente, si probamos la realización de un ping desde una máquina
externa (en realidad una máquina del Laboratorio, dentro de la red
172.16.1.0), veremos como puede hacer el ping a la interfaz externa
(172.16.1.6) de la máquina con el firewall, pero no así como Ips de la red
interna (172.16.6.0), ni siquiera de la máquina con el firewall (172.16.6.1). En
la siguiente captura de pantalla puede observarse el funcionamiento del ping
al realizarlo sobre la interfaz 172.16.1.6 y como se rechaza si se hace sobre
las interfaces de la red interna 172.16.6.0 (como la 172.16.61, en este caso),
respectivamente.
25
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
Esto es indicativo de un correcto funcionamiento del firewall.
Telnet
Para probar la conexiones con telnet, cuyo puerto según el estándar es el
23, se requiere de una aplicación que escuche por dicho puerto para que se
establezcan las conexiones. Como no se dispone de ninguna aplicación para
ello, la forma en que se hará la prueba consistirá en ver la diferencia en el
proceso en función de si el firewall está o no activado.
Sin firewall se tiene lo siguiente:
[root@pasarela12 Desktop]# telnet 172.16.6.1 23
Trying 172.16.6.1...
telnet: connect to address 172.16.6.1: Connection refused
telnet: Unable to connect to remote host: Connection refused
26
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
El error en la conexión se debe a que no se establece la conexión porque
no hay ninguna aplicación a la escucha por el puerto 23, para telnet.
Con firewall, por contra, se tiene lo siguiente:
[root@pasarela12 Desktop]# telnet 172.16.6.1 23
Trying 172.16.6.1...
Esto es indicativo de que cuando el firewall actúa, la conexión no se
permite con el puerto 23, que es el de telnet. Por este motivo el cliente telnet
se queda bloqueado como si aparentemente no hiciera nada. Esto demuestra
que el firewall está funcionando.
FTP
Las conexiones FTP sólo se harán hacia fuera, es decir, la máquina con el
firewall no funcionará de servidor FTP. Si se hace conexión FTP con ella se
rechazará (en realidad el cliente FTP se suele quedar bloqueado
aparentemente sin hacer nada). Si se hace una conexión FTP desde la propia
máquina o desde un equipo de la red interna a la propia máquina (en concreto
la IP 172.16.6.1), no se acepta la conexión.
[root@pasarela12 ~]# ftp 172.16.6.1
[root@pasarela12 ~]#
Sin embargo, si nos conectamos al FTP de la máquina 172.16.1.1 la
conexión sí se hará efectiva. Tanto desde la propia máquina:
[root@pasarela12 Desktop]# ftp 172.16.1.1
Connected to 172.16.1.1.
220---------- Bienvenido a Pure-FTPd ---------220-Eres el usuario numero 2 de 50 permitidos
220-La hora local es ahora 18:55. Puerto del servidor: 21.
220-Las conexiones IPv6 tambien son bienvenidas en este servidor
220 Seras desconectado despues de 15 minutos de inactividad.
500 Extensiones de seguridad no implementadas
27
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
500 Extensiones de seguridad no implementadas
KERBEROS_V4 rejected as an authentication type
...
Como desde una máquina de la red interna:
[root@pasarela12 ~]# ftp 172.16.1.1
Connected to 172.16.1.1.
220---------- Bienvenido a Pure-FTPd ---------220-Eres el usuario numero 1 de 50 permitidos
220-La hora local es ahora 18:55. Puerto del servidor: 21.
220-Las conexiones IPv6 tambien son bienvenidas en este servidor
220 Seras desconectado despues de 15 minutos de inactividad.
500 Extensiones de seguridad no implementadas
500 Extensiones de seguridad no implementadas
KERBEROS_V4 rejected as an authentication type
Name (172.16.1.1:root): anonymous
230-Bienvenido al FTP anonimo del Grupo Docente de Redes.
230230-Toda la actividad que aqui se realiza queda grabada.
230-Si no le gusta dicha politica por favor abandone el
230-sitio.
230230-Gracias.
230 Usuario Anonimo dentro del sistema
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quit
221-Adios. Has transmitido 0 y descargado 0 kbytes.
221 Fin de sesion.
POP3
Para probar la conexiones a servidores POP3 se requiere de una
28
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
aplicación que será el servidor POP3, en la propia máquina, que tiene el
firewall. En realidad no se dispone de ningún servidor POP3. Como sólo debe
permitirse las conexiones POP3 hacia fuera, la forma de probarlo será ver que
ocurre sin firewall y con firewall al intentar conexiones POP3 con la propia
máquina.
Sin firewall se tiene lo siguiente:
[root@pasarela12 Desktop]# telnet 172.16.6.1 110
Trying 172.16.6.1...
telnet: connect to address 172.16.6.1: Connection refused
telnet: Unable to connect to remote host: Connection refused
El error en la conexión se debe a que no se establece la conexión porque
no hay ninguna aplicación a la escucha por el puerto 110, para POP3.
Con firewall, por contra, se tiene lo siguiente:
[root@pasarela12 Desktop]# telnet 172.16.6.1 110
Trying 172.16.6.1...
Esto es indicativo de que cuando el firewall actúa, la conexión no se
permite con el puerto 110, que es el de POP3. Por este motivo el cliente telnet
se queda bloqueado como si aparentemente no hiciera nada. Esto demuestra
que el firewall está funcionando.
Si la conexión POP3 se hace hacia fuera, es decir, con un servidor POP3
externo, como pop.correo.yahoo.es, la conexión se realizará con éxito, como
en el siguiente caso.
[root@pasarela12 Desktop]# telnet pop.correo.yahoo.es 110
Trying 216.136.173.10...
Connected to pop.correo.yahoo.es (216.136.173.10).
Escape character is '^]'.
+OK hello from popgate(2.31.0)
user enrique
29
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
+OK password required.
pass ******
+OK maildrop ready, 50 messages (10987352 octets) (13400180 207341824)
Adicionalmente, para conexión de acceso telefónico a redes (PPP) sí se
permitirán las conexions POP3 en ambos sentidos. La conexión con servidores
POP3 externos como pop.correo.yahoo.es seguirá funcionando.
[root@pasarela12 Desktop]# telnet pop.correo.yahoo.es 110 Trying
216.136.173.10...
Connected to pop.correo.yahoo.es (216.136.173.10).
Escape character is '^]'.
quit
+OK hello from popgate(2.31.0)
Connection closed by foreign host.
Sin embargo, para comprobar el funcionamiento con un servidor interno
se requerirá de un servidor POP3, del cual no se dispone en la máquina en que
está el firewall. Por este motivo no es posible la realización de una prueba
representativa para este caso.
HTTP
Para las conexiones HTTP sólo se permitirán hacia fuera a través del
proxy proxy.rcanaria.es, ya que el proxy proxy.ulpgc.es no existe. La Ip de
proxy.rcanaria.es es la 193.146.95.50.
Para la realización de las pruebas se usará el navegador Firefox en el
cual se obligará al uso del proxy, indicándolo en las configuraciones de
conexión, accesibles desde las Preferencias. La configuración para que se use
el proxy será la de la Ilustración 1, en la que se indica la Ip del proxy
proxy.rcanaria.es (193.146.95.50) y su puerto, que es el 3128.
30
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
Illustración 1: Configuración del proxy: proxy.rcanaria.es
(193.146.95.50:3128)
Para las capturas se usará tcpdump para ver el tráfico de la red, según
la prueba que se realice.
En primer lugar se usa el navegador sin usar el proxy, de forma que el
firewall no le permitirá el acceso, pues no usa el proxy, como se observa en la
siguiente captura del tcpdump.
[root@pasarela12 Desktop]# tcpdump -i eth1 src 172.16.1.6 or dst 172.16.1.6
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
15:28:09.785848 IP pasarela6.redes.dis.ulpgc.es.32790 >
pasarela1.redes.dis.ulpgc.es.53: 8001+ AAAA? www.google.com. (33)
31
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
15:28:09.786526 IP pasarela6.redes.dis.ulpgc.es.32791 >
pasarela1.redes.dis.ulpgc.es.53: 5478+ PTR? 6.1.16.172.in-addr.arpa. (41)
15:28:14.784367 arp who-has pasarela1.redes.dis.ulpgc.es tell
pasarela6.redes.dis.ulpgc.es
15:28:14.799454 IP pasarela6.redes.dis.ulpgc.es.32790 >
pasarela1.redes.dis.ulpgc.es.53: 8001+ AAAA? www.google.com. (33)
15:28:19.140179 IP pasarela6.redes.dis.ulpgc.es.32791 >
pasarela1.redes.dis.ulpgc.es.53: 27503+ A? www.google.com. (33)
Se ha intentado acceder a www.google.es y se observa que sólo se
realizan proceso de resolución de nombres con el DNS de la máquina
172.16.1.1 (que tiene el nombre pasarela1.redes.dis.ulpgc.es en nuestra
máquina). El proceso de obtención de la página por conexión y uso del
protocolo HTTP no se lleva a cabo porque el firewall sólo lo permite a través
del proxy antes indicado.
Si ahora activamos el uso del firewall como se indicó en la Ilustración 1,
al realizar el acceso a www.google.es sí funcionará.
[root@pasarela12 Desktop]# tcpdump -i eth1 src 172.16.1.6 or dst 172.16.1.6
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
15:35:21.181762 IP pasarela6.redes.dis.ulpgc.es.32899 >
193.146.95.50.3128: S 3121570739:3121570739(0) win 5840 <mss
1460,sackOK,timestamp 6936619 0,nop,wscale 2>
15:35:21.187245 IP pasarela6.redes.dis.ulpgc.es.32791 >
pasarela1.redes.dis.ulpgc.es.53: 13318+ PTR? 50.95.146.193.in-addr.arpa.
(44)
15:35:21.187507 IP pasarela1.redes.dis.ulpgc.es.53 >
pasarela6.redes.dis.ulpgc.es.32791: 13318 NXDomain 0/1/0 (131)
15:35:21.191814 IP pasarela6.redes.dis.ulpgc.es.32791 >
pasarela1.redes.dis.ulpgc.es.53: 64099+ PTR? 2.1.16.172.in-addr.arpa. (41)
15:35:21.192002 IP pasarela1.redes.dis.ulpgc.es.53 >
32
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
pasarela6.redes.dis.ulpgc.es.32791: 64099* 1/1/0 PTR[|domain]
15:35:21.248494 IP 193.146.95.50.3128 >
pasarela6.redes.dis.ulpgc.es.32899: S 683207663:683207663(0) ack
3121570740 win 5792 <mss 1460,sackOK,timestamp 96157260
6936619,nop,wscale 0>
15:35:21.248553 IP pasarela6.redes.dis.ulpgc.es.32899 >
193.146.95.50.3128: . ack 1 win 1460 <nop,nop,timestamp 6936686
96157260>
15:35:21.250414 IP pasarela6.redes.dis.ulpgc.es.32899 >
193.146.95.50.3128: P 1:412(411) ack 1 win 1460 <nop,nop,timestamp
6936687 96157260>
15:35:21.318387 IP 193.146.95.50.3128 >
pasarela6.redes.dis.ulpgc.es.32899: . ack 412 win 6432 <nop,nop,timestamp
96157268 6936687>
15:35:21.406243 IP 193.146.95.50.3128 >
pasarela6.redes.dis.ulpgc.es.32899: . 1449:2897(1448) ack 412 win 6432
<nop,nop,timestamp 96157276 6936687>
Se observa como se realiza el intercambio de datos entre la propia
máquina (pasarela6.redes.dis.ulpgc.es) y el proxy proxy.rcanaria.es que
se ve como la IP 193.146.95.50, y más concretamente junto con su puerto, que
es el de proxy: 3128, teniendo 193.146.95.50.3128.
SMTP
Se trata de que sólo puedan hacerse conexiones SMTP hacia fuera a
través de la máquina 172.16.1.24 (neptuno.redes.dis.ulpgc.es), que difiere
de la indicada en el guión de la práctica (172.16.1.1), porque dicha máquina
no actúa como relay de correo.
Si realizamos una conexión SMTP a la máquina 172.16.1.24 sin haber
realizado la activación del firewall, la conexión se consigue y además se recibe
el correo en nuestra máquina, lo cual podemos ver con mail -u enrique,
como se ve a continuación.
33
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
[root@pasarela12 sysconfig]# telnet 172.16.1.24 25
Trying 172.16.1.24...
Connected to 172.16.1.24 (172.16.1.24).
Escape character is '^]'.
220 neptuno.redes.dis.ulpgc.es ESMTP Postfix
ehlo david
250-neptuno.redes.dis.ulpgc.es
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250 8BITMIME
mail from: davidj
250 Ok
rcpt to:[email protected]
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
hola
.
250 Ok: queued as 679F0178976
quit
221 Bye
Connection closed by foreign host.
[root@pasarela12 sysconfig]# mail -u enrique
Mail version 8.1 6/6/93. Type ? for help.
"/var/mail/enrique": 1 message 1 new
>N 1 [email protected] Fri May 20 14:55 17/843
Además, si en lugar de usar el servidor SMTP de la máquina 172.16.1.24,
usamos nuestro servidor SMTP (de la máquina 172.16.6.1 ó 172.16.1.6),
también funcionará correctamente.
34
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
Si tenemos el firewall activado, ya no podremos conectarnos al servidor
SMTP de nuestra máquina, pues el firewall sólo deja hacerlo con la máquina
172.16.1.24. El resultado será el siguiente, similar al caso anterior.
[root@pasarela12 sysconfig]# telnet 172.16.1.24 25
Trying 172.16.1.24...
Connected to 172.16.1.24 (172.16.1.24).
Escape character is '^]'.
220 neptuno.redes.dis.ulpgc.es ESMTP Postfix
ehlo david
250-neptuno.redes.dis.ulpgc.es
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250 8BITMIME
mail from: davidj
250 Ok
rcpt to:[email protected]
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
hola
.
250 Ok: queued as 2C637178976
quit
221 Bye
Connection closed by foreign host.
[root@pasarela12 sysconfig]# mail -u enrique
No mail for enrique
La única diferencia radica en que en este caso el correo no es recibido en
nuestra máquina. Esto se debe a que el firewall no permite la entrada.
35
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
DNS
Sólo se permitirá que se use el servidor DNS 172.16.1.1, de modo que si
el servidor DNS de la propia máquina (172.16.6.1) está en marcha, no deberá
permitirse el uso del mismo.
Para probar esto, en primer lugar se hace que el servidor DNS que se
esté usando sea el 172.16.6.1:
[root@pasarela12 etc]# nslookup
> server
Default server: 172.16.6.1
Address: 172.16.6.1#53
A continuación probamos la resolución de nombres haciendo simplemente
un ping a un nombre de dominio, como www.google.es, en nuestro caso. En
primer lugar probamos la resolución sin haber activado las reglas del firewall,
es decir, sin tener el firewall activo, de modo que se hará la resolución.
[root@pasarela12 Desktop]# ping www.google.es
PING www.l.google.com (66.102.9.99) 56(84) bytes of data.
64 bytes from 66.102.9.99: icmp_seq=0 ttl=237 time=84.5 ms
--- www.l.google.com ping statistics --1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 84.593/84.593/84.593/0.000 ms, pipe 2
A continuación, se activa el firewall. Ahora la resolución no es posible,
pues la regla impide que se use el servidor DNS 172.16.6.1, pues sólo se
permite el 172.16.1.1.
[root@pasarela12 Desktop]# ping www.google.es
ping: unknown host www.google.es
Además, podemos comprobar que es un simple problema de resolución,
porque se hacemos ping a la IP de www.google.es, conocida de antes
(66.102.9.99), se verá que tenemos conectividad.
36
Práctica 5: Puesta en marcha de un cortafuegos con IPTABLES
Arquitectura de Sistemas y Aplicaciones Distribuidas – U.L.P.G.C.
David J. Horat Flotats
Enrique Fernández Perdomo
[root@pasarela12 Desktop]# ping 66.102.9.99
PING 66.102.9.99 (66.102.9.99) 56(84) bytes of data.
64 bytes from 66.102.9.99: icmp_seq=0 ttl=237 time=83.8 ms
--- 66.102.9.99 ping statistics --1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 83.864/83.864/83.864/0.000 ms, pipe 2
Dejando el firewall activado, cambiamos el servidor DNS que se usará
para las resoluciones, poniendo el 172.16.1.1, que es el único que admitirá el
firewall.
[root@pasarela12 etc]# nslookup
> server
Default server: 172.16.1.1
Address: 172.16.1.1#53
Ahora la resolución de nombres sí funciona:
[root@pasarela12 etc]# ping www.google.com
PING www.l.google.com (66.102.9.147) 56(84) bytes of data.
64 bytes from 66.102.9.147: icmp_seq=0 ttl=237 time=84.8 ms
64 bytes from 66.102.9.147: icmp_seq=1 ttl=237 time=83.7 ms
64 bytes from 66.102.9.147: icmp_seq=2 ttl=237 time=83.2 ms
--- www.l.google.com ping statistics --3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 83.237/83.960/84.866/0.677 ms, pipe 2
37
Descargar