# ipfwadm -F -f # ipfwadm -F -p deny # ipfwadm -F -a accept -P tcp -S 172.16.1.0/24 -D 0/0 80 # ipfwadm -F -a accept -P tcp -S 0/0 80 -D 172.16.1.0/24 |
La segunda regla establece nuestra política predeterminada de reenvío. Se le dice al núcleo que niegue o que no permita el reenvío de datagramas de IP. Es muy importante establecer la política por omisión, porque describe qué le pasará a cualquier datagrama que no esté específicamente controlado por cualquier otra regla. En la mayoría de las configuraciones de cortafuegos, usted querrá establecer la política por defecto a 'deny' [1], como se muestra en el ejemplo, para estar seguro de que sólo el tráfico que usted específicamente permita pasar su cortafuegos sea reenviado.
La tercera y la cuarta reglas son las que implementan el requisito. La tercera orden permite que nuestros datagramas salgan, y la cuarta permite las respuestas de vuelta.
Vamos a revisar cada unos de los argumentos:
Esta es una regla de tipo 'forwarding'.
Añadir esta regla con la política establecida a "aceptar", lo que quiere decir que se reenviará cualquier datagrama que se ajuste a esta regla
Esta regla se aplica a los datagramas de TCP (en lugar de UDP o ICMP).
Los primeros 24 bits de la dirección de origen deben coincidir con los de la dirección de red 172.16.1.0.
La dirección de destino debe tener cero bits coincidentes con la dirección 0.0.0.0. Esto en el fondo es una forma de decir "cualquier dirección". El 80 es el puerto de destino, en este caso el de WWW. También puede utilizarse cualquier entrada que aparezca en el fichero /etc/services para describir el puerto, de tal forma que -D 0/0 www habría funcionado igual de bien.
ipfwadm acepta las máscaras de red en una forma con la que puede no esté familiarizado. La notación /nn es una forma de describir cuántos bits de la dirección suministrada son significativos, es decir, es el tamaño de la máscara de red. Los bits se cuentan siempre de izquierda a derecha; algunos ejemplos habituales se muestran en la Tabla 9-1.
Tabla 9-1. Valores habituales de máscaras de red y bits
Máscara | Bits |
---|---|
255.0.0.0 | 8 |
255.255.0.0 | 16 |
255.255.255.0 | 24 |
255.255.255.128 | 25 |
255.255.255.192 | 26 |
255.255.255.224 | 27 |
255.255.255.240 | 28 |
255.255.255.248 | 29 |
255.255.255.252 | 30 |
El modificador de bidireccionalidad nos permite unir nuestras dos reglas en una sola como sigue:
# ipfwadm -F -a accept -P tcp -S 172.16.1.0/24 -D 0/0 80 -b |
# ipfwadm -F -a deny -P tcp -S 0/0 80 -D 172.16.10.0/24 -y # ipfwadm -F -a accept -P tcp -S 172.16.1.0/24 -D 0/0 80 -b |
Después de haber introducido nuestras reglas, se puede pedir a ipfwadm que las liste con la orden:
# ipfwadm -F -l |
# ipfwadm -F -l IP firewall forward rules, default policy: accept type prot source destination ports deny tcp anywhere 172.16.10.0/24 www -> any acc tcp 172.16.1.0/24 anywhere any -> www |
# ipfwadm -F -l -e P firewall forward rules, default policy: accept pkts bytes type prot opt tosa tosx ifname ifaddress source ... 0 0 deny tcp --y- 0xFF 0x00 any any anywhere ... 0 0 acc tcp b--- 0xFF 0x00 any any 172.16.1.0/24 ... |
# ipfwadm -a deny -P tcp -S 0/0 20 -D 172.16.1.0/24 -y # ipfwadm -a accept -P tcp -S 172.16.1.0/24 -D 0/0 20 -b # # ipfwadm -a deny -P tcp -S 0/0 21 -D 172.16.1.0/24 -y # ipfwadm -a accept -P tcp -S 172.16.1.0/24 -D 0/0 21 -b |
Muchos servidores de FTP realizan su conexión de datos desde el puerto 20 cuando operan en el modo activo, lo que simplifica las cosas un poco, pero, degraciadamente, no todos proceden así. [3]
Pero, ¿cómo nos afecta todo esto? Fíjese en nuestra regla del puerto 20, el puerto de datos de FTP (FTP-data). La regla, tal como se tiene en este momento, asume que la conexión será realizada por nuestro cliente al servidor. Esto funcionará si se utiliza el modo pasivo. Pero resulta muy difícil para nosotros el configurar una regla satisfactoria que permita el modo activo de FTP, porque no se puede saber de antemano qué puertos serán los utilizados. Si abrimos nuestro cortafuegos para permitir conexiones entrantes en cualquier puerto, estaríamos exponiendo nuestra red a un ataque sobre todos los servicios que acepten conexiones.
El dilema se resuelve de la forma más satisfactoria insistiendo en que nuestros usuarios operen en el modo pasivo. La mayoría de los servidores de FTP y muchos clientes de FTP funcionarán de esta forma. El cliente popular ncftp también soporta el modo pasivo, pero requiere un pequeño cambio de configuración para conseguir que su modo por omisión sea el pasivo. Muchos navegadores de 'World Wide Web' como el navegador de Netscape también soportan el modo pasivo de FTP, por lo que no debería ser muy difícil el encontrar el 'software' adecuado para utilizar. De forma alternativa, se puede evitar el asunto de forma completa utilizando un programa intermediario de FTP que acepten una conexión desde la red interna y establezca conexiones con las redes externas.
Cuando construya su cortafuegos, probablemente se encontrará con varios de estos problemas. Debería siempre pensar cuidadosamente cómo funciona un servico realmente para estar seguro de que ha puesto un conjunto de reglas adecuado a ese servicio. La configuración de un cortafuegos de verdad puede resultar bastante compleja.
ipfwadm categoría orden parámetros [opciones] |
Las políticas relevantes para el cortafuegos de IP y sus significados son:
Cada una de las órdenes de configuración del cortafuegos le permite especificar tipos de datagrama de ICMP. Al contario que los puertos de TCP y de UDP, no existe un fichero de configuración conveniente que liste los tipos de datagramas y sus significados. Los tipos de datagrama de ICMP se definen en el RFC-1700, el RFC de los números asignados. Los tipos de datagrama de ICMP aparecen también listados en uno de los ficheros de cabecera de la biblioteca estándar de C. El fichero /usr/include/netinet/ip_icmp.h, que pertenece al paquete con la biblioteca estándar de GNU, y que los programadores de C utilizan cuando escriben 'software' de red que utilice el protocolo de ICMP, también define los tipos de datagrama de ICMP. Para su conveniencia, se incluyen aquí en la Tabla 9-2 [4]. La interfaz de la orden iptables le permite especificar los tipos de ICMP por su nombre, por lo que también se muestran los nombre nemotécnicos que utiliza.
Tabla 9-2. Tipos de datagramas de ICMP
Número de tipo | Nnemónico de iptables | Descripción del tipo |
---|---|---|
0 | echo-reply | Respuesta a eco |
3 | destination-unreachable | Destino inaccesible |
4 | source-quench | Disminución del tráfico desde el origen |
5 | redirect | Redirección |
8 | echo-request | Solicitud de eco |
11 | time-exceeded | Tiempo superado |
12 | parameter-problem | Problema de parámetros |
13 | timestamp-request | Solicitud de marca de tiempo |
14 | timestamp-reply | Respuesta de marca de tiempo |
15 | none | Solicitud de información |
16 | none | Respuesta de información |
17 | address-mask-request | Petición de máscara de dirección |
18 | address-mask-reply | Respuesta de máscara de dirección |
[1] | N. del T.: "denegación" |
[2] | El modo activo de FTP se habilita, de forma poco intuitiva, con la orden PORT. El modo pasivo de FTP se habilita con la orden PASV. |
[3] | El demonio ProFTPd constituye un buen ejemplo de un servidor de FTP que no procede así, al menos,en sus versiones antiguas. |
[4] | N.del T.: se han utilizado las descripciones de la traducción al español por P.J. Ponce de León, dentro del proyecto RFC-ES, del RFC0792 "Protocolo de mensajes de control de internet" |