La mayoría de los aspectos de GNU/Linux evolucionan para satisfacer las cada vez mayores demandas de sus usuarios; el cortafuegos de IP no es una excepción. La implementación del cortafuegos de IP tradicional resulta suficiente para la mayoría de las aplicaciones, pero puede resultar engorroso y poco eficiente para configurar en entornos complejos. Para resolver este problema, se desarrolló un nuevo método de configuración del cortafuegos de IP así como nuevas características relacionadas. Este nuevo método fue denominado “Cortafuegos 'IP Chains'[1]” y fue liberado por vez primera para uso general en el núcleo 2.2.0.
El soporte del cortafuegos 'IP Chains' fue desarrollado por Paul Russell y Michael Neuling[2]. Paul es el autor del documento sobre 'IP Chains' IPCHAINS-HOWTO.
El cortafuegos 'IP Chains' le permite desarrollar clases de reglas de cortafuegos a las que puede entonces añadir y quitar 'hosts' o redes. Una consecuencia colateral del encadenamiento de reglas de cortafuegos es que puede mejorar el rendiminento del cortafuegos en aquellas configuraciones en las que haya montones de reglas.
El cortafuegos 'IP Chains' está soportado por las series de núcleos 2.2 y también se encuentran disponibles como un parche para la series de núcleos 2.0.*. El HOWTO describe dónde obtener el parche y proporciona montones de pistas útiles sobre cómo utilizar de forma efectiva la utilidad de configuración ipchains.
ipchains orden especificación_de_regla opciones |
Elimina una o más reglas de la cadena especificada que coincida con la especificación de regla.
Muestra las reglas de la cadena especificada, o de todas las cadenas si no se especifica ninguna.
# ipchains -F forward # ipchains -P forward DENY # ipchains -A forward -s 0/0 80 -d 172.16.1.0/24 -p tcp -y -j DENY # ipchains -A forward -s 172.16.1.0/24 -d 0/0 80 -p tcp -b -j ACCEPT |
# ipchains -A forward -s 0/0 20 -d 172.16.1.0/24 -p tcp -y -j DENY # ipchains -A forward -s 172.16.1.0/24 -d 0/0 20 -p tcp -b -j ACCEPT # ipchains -A forward -s 0/0 21 -d 172.16.1.0/24 -p tcp -y -j DENY # ipchains -A forward -s 172.16.1.0/24 -d 0/0 21 -p tcp -b -j ACCEPT |
# ipchains -L -n Chain input (policy ACCEPT): Chain forward (policy DENY): target prot opt source destination ports DENY tcp -y---- 0.0.0.0/0 172.16.1.0/24 80 -> * ACCEPT tcp ------ 172.16.1.0/24 0.0.0.0/0 * -> 80 ACCEPT tcp ------ 0.0.0.0/0 172.16.1.0/24 80 -> * ACCEPT tcp ------ 172.16.1.0/24 0.0.0.0/0 * -> 20 ACCEPT tcp ------ 0.0.0.0/0 172.16.1.0/24 20 -> * ACCEPT tcp ------ 172.16.1.0/24 0.0.0.0/0 * -> 21 ACCEPT tcp ------ 0.0.0.0/0 172.16.1.0/24 21 -> * Chain output (policy ACCEPT): |
Todas las reglas creadas con ipchains tienen contadores de datagramas y bytes asociadas con ellas. Así es cómo se implementa la auditoría de IP y se discutirá con detalle en Capítulo 10. Por defecto, estos contadores se presentan de forma aproximada utilizando los sufijos K y M, que representan las unidades de mil y de millón, respectivamente. Si se proporciona el argumento -x, entonces se muestran los contadores en su forma completa y expandida.
Considérese las siguientes órdenes de ipchains:
ipchains -P input DENY ipchains -N tcpin ipchains -A tcpin -s ! 172.16.0.0/16 ipchains -A tcpin -p tcp -d 172.16.0.0/16 ssh -j ACCEPT ipchains -A tcpin -p tcp -d 172.16.0.0/16 www -j ACCEPT ipchains -A input -p tcp -j tcpin ipchains -A input -p all |
Se establece la política por defecto de la cadena de entrada a deny. La segunda orden crea una cadena de usuario denominada “tcpin.” La tercera orden añade una regla a la cadena tcpin que coincide con cualquier datagrama cuyo origen esté fuera de nuestra red; la regla no representa ninguna acción. Esta regla es una regla de auditoría que se discutirá con más detalle en Capítulo 10. Las dos reglas siguientes coinciden con cualquier datagrama destinado a nuestra red local tanto al puerto de ssh como al de www; los datagramas que coincidan con estas reglas son aceptados. La magia de ipchains empieza en la regla siguiente. Obliga al 'software' del cortafuegos a que compruebe cualquier datagrama del protocolo de TCP contra la cadena de usuario tcpin. Por último, se añade una regla a la cadena input que coincide con cualquier datagrama; esto es otra regla de auditoría. Todo esto producirá la cadenas de cortafuegos mostradas en la Figure 9-4.
Primero, veamos qué pasa cuando se recibe un datagrama de UDP para uno de nuestros 'hosts'. La Figura 9-5 ilustra el flujo por las reglas.
Para ver a nuestra cadena de usuario en acción, considérese qué pasa cuando se recibe un datagrama de TCP destinado al puerto ssh de uno de nuestros 'hosts'. La secuencia se muestra en la Figura 9-6.
Por último, veamos lo que pasa cuando se alcanza el final de una cadena de usuario. Para ver esto, se representará el flujo de un datagrama de TCP destinado a un puerto distinto de los dos que estamos manejando específicamente, como se muestra en la Figura 9-7.
# # Establece la política de reenvío por defecto a REJECT ipchains -P forward REJECT # # crea nuestras cadenas de usuario ipchains -N sshin ipchains -N sshout ipchains -N wwwin ipchains -N wwwout # # Se asegura de que se rechazarán las conexiones provenientes por el camino incorrecto. ipchains -A wwwin -p tcp -s 172.16.0.0/16 -y -j REJECT ipchains -A wwwout -p tcp -d 172.16.0.0/16 -y -j REJECT ipchains -A sshin -p tcp -s 172.16.0.0/16 -y -j REJECT ipchains -A sshout -p tcp -d 172.16.0.0/16 -y -j REJECT # # se asegura que lo que alcance el final de una cadena de usuario se rechaza ipchains -A sshin -j REJECT ipchains -A sshout -j REJECT ipchains -A wwwin -j REJECT ipchains -A wwwout -j REJECT # # dirige los servicios de www y ssh a las cadenas de usuario relevantes ipchains -A forward -p tcp -d 172.16.0.0/16 ssh -b -j sshin ipchains -A forward -p tcp -s 172.16.0.0/16 -d 0/0 ssh -b -j sshout ipchains -A forward -p tcp -d 172.16.0.0/16 www -b -j wwwin ipchains -A forward -p tcp -s 172.16.0.0/16 -d 0/0 www -b -j wwwout # # Inserta nuestras reglas para buscar coincidencias con los 'hosts' en la segunda posición de # nuestras cadenas de usuario. ipchains -I wwwin 2 -d 172.16.1.2 -b -j ACCEPT ipchains -I wwwout 2 -s 172.16.1.0/24 -b -j ACCEPT ipchains -I sshin 2 -d 172.16.1.4 -b -j ACCEPT ipchains -I sshout 2 -s 172.16.1.4 -b -j ACCEPT ipchains -I sshout 2 -s 172.16.1.6 -b -j ACCEPT # |
Para utilizar los guiones, se introduciría algo como:
ipchains-save >/var/state/ipchains/firewall.state |
ipchains-restore </var/state/ipchains/firewall.state |
[1] | N. del T.: "cadenas de IP" |
[2] | Puede contactar con Paul en Paul.Russell@rustcorp.com.au. |