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