Ejemplos iptables

Anuncio
Ejemplos iptables
Planificación y gestión de redes de ordenadores
Departamento de Sistemas Telemáticos y Computación (GSyC)
Noviembre de 2012
GSyC - 2012
Ejemplos iptables
1
c
2011
Grupo de Sistemas y Comunicaciones.
Algunos derechos reservados.
Este trabajo se distribuye bajo la licencia
Creative Commons Attribution Share-Alike
disponible en http://creativecommons.org/licenses/by-sa/3.0/es
GSyC - 2012
Ejemplos iptables
2
Contenidos
1
Configuración de un router NAT
2
Clasificación de tráfico con iptables
3
Marcado DSCP de tráfico con iptables
4
Referencias
GSyC - 2012
Ejemplos iptables
3
Configuración de un router NAT
Contenidos
1
Configuración de un router NAT
2
Clasificación de tráfico con iptables
3
Marcado DSCP de tráfico con iptables
4
Referencias
GSyC - 2012
Ejemplos iptables
4
Configuración de un router NAT
Configuración de un router NAT
El comportamiento de un router NAT se configura con
iptables como una colección de reglas de:
Reglas de filtrado: tabla filter
Reglas de traducción de direcciones y puertos: tabla nat.
10.0.0.10
GSyC - 2012
Red privada
Internet
10.0.0.0/24
eth0
eth1
200.0.0.1
Ejemplos iptables
5
Configuración de un router NAT
Reglas de filtrado: tabla filter
Contenidos
1
Configuración de un router NAT
Reglas de filtrado: tabla filter
Reglas de traducción de direcciones y puertos: tabla nat
2
Clasificación de tráfico con iptables
3
Marcado DSCP de tráfico con iptables
4
Referencias
GSyC - 2012
Ejemplos iptables
6
Configuración de un router NAT
Reglas de filtrado: tabla filter
Ejemplos de configuración de filtrado con iptables (I)
1
Inicialización
Borrar las reglas y reiniciar los contadores:
iptables -t filter -F
iptables -t filter -Z
Definir las polı́ticas por defecto: Descartar cualquier cosa salvo
paquetes de salida:
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT
GSyC - 2012
Ejemplos iptables
7
Configuración de un router NAT
Reglas de filtrado: tabla filter
Ejemplos de configuración de filtrado con iptables (II)
2
Filtrado: permitir cualquier tráfico saliente de la red privada y el tráfico
entrante de respuesta
Permitir el reenvı́o de todos los paquetes que se reciben en un router a través de
una interfaz (eth0) para que se envı́en a través de otra interfaz (eth1) (por
ejemplo, permitir tráfico saliente de una organización):
iptables -t filter -A FORWARD -i eth0 -o eth1 -j ACCEPT
Permitir el reenvı́o paquetes entrantes que pertenezcan a “conexiones” ya
existentes:
iptables -t filter -A FORWARD -i eth1 -o eth0 -m state\
--state RELATED,ESTABLISHED -j ACCEPT
Paso%1%
10.0.0.10
GSyC - 2012
Red privada
Internet
10.0.0.0/24
eth0
eth1
200.0.0.1
Ejemplos iptables
Paso%2%
8
Configuración de un router NAT
Reglas de filtrado: tabla filter
Ejemplos de configuración de filtrado con iptables (III)
Guardar en un fichero de log el contenido de los paquetes que se reenvı́an
Para entender el funcionamiento de cómo se aplican las reglas, vamos a almacenar en el fichero de
log el contenido de los paquetes a los cuáles se les aplican las reglas que permiten el reenvı́o del
tráfico saliente y las posibles respuestas a dicho tráfico.
Regla&1&
Regla&2&
Regla&3&
Regla&4&
Mostrar la información de una configuración
Se ha enviado un paquete ICMP echo request desde la red privada a Internet y se ha recibido
respuesta. La información muestra la cantidad de paquetes a los que se les ha aplicado cada regla.
Regla&1&
Regla&2&
Regla&3&
Regla&4&
GSyC - 2012
Ejemplos iptables
9
Configuración de un router NAT
Reglas de filtrado: tabla filter
Ejemplos de configuración de filtrado con iptables (IV)
Mostrat el fichero de log
Los mensajes generados por la configuración previa de LOG en iptables pueden
consultarse al fina del fichero /var/log/messages. En este caso el LOG debe
contener el paquete ICMP echo request y el ICMP echo reply:
r1:~# less /var/log/messages
Nov 4 19:07:00 r1 kernel: Regla 2 accept IN=eth0 OUT=eth1 SRC=10.0.0.10 DST=12.0.0.10 \
LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=32522 SEQ=1
Nov 4 19:07:00 r1 kernel: Regla 4 accept IN=eth1 OUT=eth0 SRC=12.0.0.10 DST=10.0.0.10 \
LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=20573 PROTO=ICMP TYPE=0 CODE=0 ID=32522 SEQ=1
Paso%1:%
inicio%
10.0.0.10
Regla&2&
Red privada
Internet
10.0.0.0/24
eth0
eth1
200.0.0.1
Paso%2:%
Respuesta%
Regla&4&
GSyC - 2012
Ejemplos iptables
10
Configuración de un router NAT
Reglas de filtrado: tabla filter
Ejemplos de configuración de filtrado con iptables (V)
Consultar el sistema de seguimiento ip conntrack
El sistema de seguimiento no muestra ninguna información porque hay una anotación del
paquete ICMP echo request pero en cuanto se recibe el paquete ICMP echo reply se borra
la información de dicha ”conexión”. Por tanto, el siguiente comando no muestra ninguna
información.
r1:~# watch -n 1 cat /proc/net/ip_conntrack
Nótese que si la máquina a la que se dirige el paquete ICMP echo request no responde, el
sistema de seguimiento tendrı́a anotado durante un tiempo el paquete ICMP echo request:
r1:~# watch -n 1 cat /proc/net/ip_conntrack
icmp 1 28 src=11.0.0.10 dst=12.0.0.56 type=8 code=0 id=11023 packets=1 bytes=84 [UNREPLIED]
src=12.0.0.56 dst=11.0.0.10 type=0 code=0 id=11023 packets=0 bytes=0 mark=0 use=2
GSyC - 2012
Ejemplos iptables
11
Configuración de un router NAT
Reglas de filtrado: tabla filter
Ejemplos de configuración de filtrado con iptables (VI)
3
Filtrado: permitir tráfico tcp entrante en la red privada
Permitir el paso de segmentos TCP de establecimiento de
conexión de entrada dirigidos a una dirección IP de la red
interna (10.0.0.10) y a un puerto (8888).
iptables -t filter -A FORWARD -p tcp -d 10.0.0.10 \
--dport 8888 --syn -j ACCEPT
Servidor(TCP(
Puerto=8888(
10.0.0.10
Paso%1:%
Inicio%
Red privada
10.0.0.0/24
eth0
Paso%2:%
Respuesta%
GSyC - 2012
Internet
eth1
200.0.0.1
Ejemplos iptables
12
Configuración de un router NAT
Reglas de filtrado: tabla filter
Ejemplos de configuración de filtrado con iptables (VII)
Si añadimos esta regla a las anteriores y configuramos iptables para almacenar los paquetes que
cumplan la regla en el fichero de log:
Regla&1&
Regla&2&
Regla&3&
Regla&4&
Regla&5&
Regla&6&
GSyC - 2012
Ejemplos iptables
13
Configuración de un router NAT
Reglas de filtrado: tabla filter
Ejemplos de configuración de filtrado con iptables (VIII)
Se abre una conexión TCP desde una máquina externa (SYN, SYN+ACK, ACK). Al
mostrar el fichero de log:
r1:~# less /var/log/messages
Nov 5 00:31:04 r1 kernel: Regla 6 accept IN=eth1 OUT=eth0 SRC=12.0.0.4 DST=11.0.0.10 LEN=60
TOS=0x00 PREC=0x00 TTL=63 ID=11521 DF PROTO=TCP SPT=58228 DPT=8888 WINDOW=5840 RES=0x00
SYN URGP=0
Nov 5 00:31:04 r1 kernel: Regla 2 accept IN=eth0 OUT=eth1 SRC=11.0.0.10 DST=12.0.0.4 LEN=60
TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=8888 DPT=58228 WINDOW=5792 RES=0x00 ACK
SYN URGP=0
Nov 5 00:31:04 r1 kernel: Regla 4 accept IN=eth1 OUT=eth0 SRC=12.0.0.4 DST=11.0.0.10 LEN=52
TOS=0x00 PREC=0x00 TTL=63 ID=11522 DF PROTO=TCP SPT=58228 DPT=8888 WINDOW=2920 RES=0x00
ACK URGP=0
Servidor(TCP(
Puerto=8888(
10.0.0.10
Paso(1:(SYN(
Regla(6(
Red privada
Internet
10.0.0.0/24
eth0
Paso(2:((
SYN+ACK(
GSyC - 2012
Regla(4(
Paso(3:(
(ACK(y(datos(
eth1
200.0.0.1
Regla(2(
Ejemplos iptables
14
Configuración de un router NAT
Reglas de filtrado: tabla filter
Ejemplos de configuración de filtrado con iptables (IX)
Al mostrar el sistema de seguimiento ip conntrack después del establecimiento de la
conexión:
r1:~# watch -n 1 cat /proc/net/ip_conntrack
tcp 6 430970 ESTABLISHED src=12.0.0.10 dst=10.0.0.10 sport=58228 dport=8888 packets=2 bytes=112
src=10.0.0.10 dst=12.0.0.10 sport=8888 dport=58228 packets=1 bytes=60 [ASSURED] mark=0 use=1
GSyC - 2012
Ejemplos iptables
15
Configuración de un router NAT
Reglas de filtrado: tabla filter
Ejemplos de configuración de filtrado con iptables (X)
4
Filtrado: permitir tráfico UDP entrante en la red privada
Permitir el paso de datagramas UDP de entrada dirigidos a una
dirección IP de la red interna (10.0.0.10) y a un puerto (8888).
iptables -t filter -A FORWARD -p udp -d 10.0.0.10 \
--dport 8888 -j ACCEPT
Servidor(UDP(
Puerto=8888(
10.0.0.10
Paso%1:%
Inicio%
Red privada
10.0.0.0/24
eth0
Paso%2:%
Respuesta%
GSyC - 2012
Internet
eth1
200.0.0.1
Ejemplos iptables
16
Configuración de un router NAT
Reglas de filtrado: tabla filter
Ejemplos de configuración de filtrado con iptables (XI)
Si añadimos esta regla a las anteriores y configuramos iptables para almacenar los paquetes que
cumplan la regla en el fichero de log:
Regla&1&
Regla&2&
Regla&3&
Regla&4&
Regla&5&
Regla&6&
Regla&7&
Regla&8&
GSyC - 2012
Ejemplos iptables
17
Configuración de un router NAT
Reglas de filtrado: tabla filter
Ejemplos de configuración de filtrado con iptables (XII)
Se envı́a un paquete de datos UDP desde una máquina externa. Al mostrar el fichero de log:
r1:~# less /var/log/messages
Nov 5 00:32:04 r1 kernel: Regla accept 8 IN=eth1 OUT=eth0 SRC=12.0.0.4 DST=11.0.0.10 LEN=34
TOS=0x00 PREC=0x00 TTL=63 ID=2916 DF PROTO=UDP SPT=33666 DPT=8888 LEN=14
Servidor(UDP(
Puerto=8888(
10.0.0.10
Regla(8(
Paso(1:(datos(
desde(inicio(
Red privada
Internet
10.0.0.0/24
eth0
Paso(2:((
respuesta(
eth1
200.0.0.1
Regla(2(
Al mostrar el sistema de seguimiento ip conntrack:
r1:~# watch -n 1 cat /proc/net/ip_conntrack
udp 17 21 src=12.0.0.10 dst=10.0.0.10 sport=58300 dport=8888 packets=1 bytes=34 [UNREPLIED]
src=10.0.0.10 dst=12.0.0.10 sport=8888 dport=58300 packets=0 bytes=0 mark=0 use=1
GSyC - 2012
Ejemplos iptables
18
Configuración de un router NAT
Reglas de traducción de direcciones y puertos: tabla nat
Contenidos
1
Configuración de un router NAT
Reglas de filtrado: tabla filter
Reglas de traducción de direcciones y puertos: tabla nat
2
Clasificación de tráfico con iptables
3
Marcado DSCP de tráfico con iptables
4
Referencias
GSyC - 2012
Ejemplos iptables
19
Configuración de un router NAT
Reglas de traducción de direcciones y puertos: tabla nat
Ejemplos de traducción de direcciones IP y puertos con
iptables (I)
Inicialización
Borrar las reglas y reiniciar los contadores:
iptables -t nat -F
iptables -t nat -Z
Source NAT
Modificar la dirección IP origen de los datagramas IP al salir de una red privada (10.0.0.0/24)
a través de la interfaz de salida (eth1) de un router NAT. Todos los datagramas llevarán la
dirección IP pública del router NAT (200.0.0.1):
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth1
-j SNAT --to-source 200.0.0.1
Aplicación)
Cliente)
Red privada
Internet
10.0.0.0/24
eth0
1
eth1
200.0.0.1
SNAT
DNAT
2
automático
GSyC - 2012
Ejemplos iptables
20
Configuración de un router NAT
Reglas de traducción de direcciones y puertos: tabla nat
Ejemplos de traducción de direcciones IP y puertos con
iptables (II)
Destination NAT
Modificar la dirección IP destino y puerto destino de los segmentos TCP al entrar
dentro de una red privada (10.0.0.0/24). Los segmentos van dirigidos inicialmente
a la dirección IP del router NAT (200.0.0.1) y puerto 8080, recibiéndose en su
interfaz (eth0). Antes de comprobar la tabla de encaminamiento
(PREROUTING) se modificará su dirección IP destino a 10.0.0.10 y puerto
destino 80.
iptables -t nat -A PREROUTING -p tcp -i eth0 -d 200.0.0.1
--dport 8080 -j DNAT --to-destination 10.0.0.10:80
Servidor(TCP((
puerto(80(
10.0.0.10
Red privada
Internet
10.0.0.0/24
eth0
eth1
200.0.0.1
DNAT
2
GSyC - 2012
1
SNAT
automático
Ejemplos iptables
21
Configuración de un router NAT
Reglas de traducción de direcciones y puertos: tabla nat
Ejemplos de traducción de direcciones IP y puertos con
iptables (III)
Al consultar las reglas de todas las cadenas de la tabla nat:
r1:~# iptables -t nat -L -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out
source
destination
0
0
DNAT
tcp -- eth0 any
anywhere
200.0.0.1
tcp dpt:http-alt to:10.0.0.10:80
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out
source
destination
0
0
SNAT
all -- any eth1
10.0.0.0/24 anywhere
to:200.0.0.1
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out
source destination
GSyC - 2012
Ejemplos iptables
22
Clasificación de tráfico con iptables
Contenidos
1
Configuración de un router NAT
2
Clasificación de tráfico con iptables
3
Marcado DSCP de tráfico con iptables
4
Referencias
GSyC - 2012
Ejemplos iptables
23
Clasificación de tráfico con iptables
Ejemplos de clasificación de tráfico con iptables
Algunos de las reglas de clasificación que se podı́an expresar
utilizando las reglas filter de la herramienta Traffic Control,
pueden reescribirse a través de iptables.
Ejemplo: clasificar todo el tráfico TCP de salida de la interfaz
eth0 cuyo puerto destino sea 80 dentro de la clase de tráfico 1:10.
tc filter add dev eth0 parent 1:0 protocol ip u32 \
match ip protocol 0x6 0xff \
match ip dport 80 0xffff classid 1:10
Esta regla se puede expresar de otras 2 formas diferentes con
iptables:
1
2
GSyC - 2012
A través de la acción CLASSIFY de iptables.
A través de la acción MARK de iptables y el filtro fw de tc que
comprueba la marca insertada por iptables.
Ejemplos iptables
24
Clasificación de tráfico con iptables
Clasificación de tráfico con iptables: CLASSIFY
1
A través de la acción CLASSIFY de iptables. Si un paquete cumple la condición de una
regla cuya acción es CLASSIFY, el paquete se clasifica pero no abandona la cadena a la
cuál pertenece la regla. Por tanto, si desea que abandone la cadena se debe especificar
explı́citamente.
iptables -t mangle -A POSTROUTING \
-o eth0 -p tcp --dport 80 -j CLASSIFY --set-class 1:10
iptables -t mangle -A POSTROUTING \
-o eth0 -p tcp --dport 80 -j RETURN
La acción RETURN hace que se ejecute la polı́tica por defecto para esa cadena.
Al consultar las reglas de la tabla mangle y cadena POSTROUTING:
r1:~# iptables -t mangle -L POSTROUTING -v -n --line-numbers
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target
prot opt in out
source
destination
1
0
CLASIFFY tcp -- any eth0
200.0.0.1 anywhere tcp dpt:80 CLASSIFY set 1:10
2
0
RETURN
tcp -- any eth0
200.0.0.1 anywhere tcp dpt:80
GSyC - 2012
Ejemplos iptables
25
Clasificación de tráfico con iptables
Clasificación de tráfico con iptables: MARK y filtro fw
de tc
2
A través de la acción MARK de iptables y el filtro fw de tc que comprueba la marca
insertada por iptables. Si un paquete cumple la condición de una regla cuya acción es
MARK, el paquete se clasifica pero no abandona la cadena a la cuál pertenece la regla. Por
tanto, si desea que abandone la cadena se debe especificar explı́citamente.
La acción MARK inserta una marca en el buffer que almacena el paquete dentro del kernel
de Linux. Los filtros de las disciplinas de cola de salida pueden consultar esta marca a
través del filtro fw:
iptables -t mangle -A POSTROUTING -o eth0 -p tcp --dport 80 -j MARK --set-mark 1
iptables -t mangle -A POSTROUTING -o eth0 -p tcp --dport 80 -j ACCEPT
...
tc filter add dev eth0 protocol ip parent 1:0 prio 1 \
handle 1 fw classid 1:10
Al consultar las reglas de la tabla mangle y cadena POSTROUTING:
r1:~# iptables -t mangle -L POSTROUTING -v -n --line-numbers
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target
prot opt in out
source
destination
1
0
MARK
tcp -- any eth0
200.0.0.1 anywhere tcp dpt:80 MARK xset 0x1/0xffffffff
2
0
ACCEPT tcp -- any eth0
200.0.0.1 anywhere tcp dpt:80
GSyC - 2012
Ejemplos iptables
26
Marcado DSCP de tráfico con iptables
Contenidos
1
Configuración de un router NAT
2
Clasificación de tráfico con iptables
3
Marcado DSCP de tráfico con iptables
4
Referencias
GSyC - 2012
Ejemplos iptables
27
Marcado DSCP de tráfico con iptables
Ejemplos de marcado DSCP con iptables
La disciplina de cola DSMARK de Traffic Control se utiliza para el marcado de paquetes:
tc qdisc dev eth1 root handle 1:0 dsmark indices 64
tc class change dev eth1 classic 1:1 dsmark mask 0x3 value 0x88
tc class change dev eth1 classic 1:2 dsmark mask 0x3 value 0x90
tc filter add dev eth1 parent 1:0
protocol ip prio 1 u32 \
match ip src 200.0.0.1 \
match ip sport 80 0xffff \
match ip protocol 0x6 0xff
tc filter add dev eth1 parent 1:0
protocol ip prio 1 u32 \
match ip protocol 0x6 0xff
classid 1:1
classid 1:2
Para el marcado del campo DSCP de paquetes puede reescribirse con iptables:
iptables -t mangle -A POSTROUTING -s 200.0.0.1 --sport 80 -p tcp -j DSCP --set-dscp 0x88
iptables -t mangle -A POSTROUTING -s 200.0.0.1 --sport 80 -p tcp -j RETURN
iptables -t mangle -A POSTROUTING -s 200.0.0.1 -p tcp -j DSCP --set-dscp 0x90
O también usando el nombre de la clase (AF41=0x88, AF42=0x90):
iptables -t mangle -A POSTROUTING -s 200.0.0.1 --sport 80 -p tcp -j DSCP --set-dscp-class AF41
iptables -t mangle -A POSTROUTING -s 200.0.0.1 --sport 80 -p tcp -j RETURN
iptables -t mangle -A POSTROUTING -s 200.0.0.1 -p tcp -j DSCP --set-dscp-class AF42
GSyC - 2012
Ejemplos iptables
28
Marcado DSCP de tráfico con iptables
Ejemplos de marcado DSCP con iptables
Al consultar las reglas de todas las cadenas de la tabla mangle:
r1:~# iptables -t mangle -L -v -n --line-numbers
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out
source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out
source
destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out
source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out
source destination
Chain POSTROUTING
pkts bytes target
1
0
DSCP
2
0
RETURN
3
0
DSCP
GSyC - 2012
(policy ACCEPT 0 packets, 0 bytes)
prot opt in out
source
destination
tcp -- any any
200.0.0.1 anywhere
tcp spt:80 DSCP set 0x88
tcp -- any any
200.0.0.1 anywhere
tcp spt:80 DSCP set 0x88
tcp -- any any
anywhere anywhere
tcp DSCP set 0x90
Ejemplos iptables
29
Referencias
Contenidos
1
Configuración de un router NAT
2
Clasificación de tráfico con iptables
3
Marcado DSCP de tráfico con iptables
4
Referencias
GSyC - 2012
Ejemplos iptables
30
Referencias
Referencias
Iptables Tutorial: http://www.iptables.info
Linux Advanced Routing & Traffic Control:
http://www.lartc.org
GSyC - 2012
Ejemplos iptables
31
Descargar