Tabla de contenidos
Resumen
El enmascaramiento (masquerading) y el cortafuegos (firewall) se ocupan de controlar el tráfico e intercambio de datos. La SSH (Secure Shell) permite al usuario realizar una conexión codificada con un ordenador remoto. La codificación de archivos o particiones enteras protegen sus datos en caso de que terceras personas accedan al sistema. Además de instrucciones de carácter puramente técnico, al final del capítulo encontrará un apartado general sobre aspectos de seguridad en redes Linux.
El kernel de Linux dispone de funciones para administrar paquetes de red que se utilizan, por ejemplo, cuando Linux se emplea en un entorno de red donde debe separar diversos sectores externos e internos. La infraestructura de Netfilter ofrece todas las herramientas necesarias para utilizar un sistema Linux como un cortafuegos eficaz entre distintas redes. iptables, una estructura genérica de tablas con reglas de filtrado, permite el control preciso sobre los paquetes de datos que deben y no deben atravesar el cortafuegos. SuSEfirewall2 y el módulo correspondiente de YaST facilitan la configuración de un filtro de paquetes.
Netfilter e iptables se encargan de filtrar, modificar y traducir por medio de NAT (Network Address Translation) paquetes de la red. Los criterios de filtrado y las acciones asociadas se guardan en secuencias o cadenas que se aplican de forma sucesiva cuando se recibe un paquete de red. El comando iptables sirve para editar las reglas que se encuentran en tablas.
En Linux existen tres tablas para las diferentes funciones de un filtro de paquetes:
En esta tabla, que contiene la mayoría de reglas, se realiza el verdadero
filtrado de paquetes y se definen también las reglas para aceptar
(ACCEPT) o rechazar (DROP)
paquetes.
Esta parte define la modificación de las direcciones de origen y destino de los paquetes. El enmascaramiento o masquerading, que se utiliza para conectar una pequeña red privada a Internet, es un caso especial de NAT.
Las reglas en este apartado permiten editar valores en el encabezamiento del paquete IP (por ejemplo el Type of Service).
Dentro de las tablas mencionadas existen varias cadenas predefinidas por las que tienen que pasar los paquetes:
Esta cadena se aplica a paquetes que acaban de llegar al sistema.
Esta cadena se aplica a paquetes que se ocupan de procesos internos del sistema.
Esta cadena se aplica a paquetes que atraviesan el sistema sin ser modificados.
Esta cadena se aplica a paquetes generados en el propio sistema.
Esta cadena es para todos los paquetes que salen del sistema.
La Figura 34.1, “iptables: rutas de un paquete por el sistema” muestra la ruta de un paquete de red al pasar por el sistema. Para una mayor claridad, las tablas están agrupadas por cadenas aunque en realidad las cadenas se organizan dentro de las tablas.
En el caso más sencillo un paquete destinado al propio sistema aparece en la
interfaz eth0 y pasa primero a la cadena
PREROUTING de la tabla mangle.
Posteriormente pasa a la cadena PREROUTING de la tabla
nat. En el siguiente paso de enrutado se averigua que el
paquete está destinado a un proceso del sistema propio. Tras pasar las
cadenas INPUT dentro de las dos tablas
mangle y filter el paquete llega a su
destino, salvo que las reglas de la tabla filter lo
impidan.
El enmascaramiento es un caso especial de NAT (Network
Address Translation), la traducción de direcciones de red.
Se utiliza para conectar una pequeña LAN con direcciones IP privadas (ver
Sección 22.1.2, “Máscaras de red y redes”) a Internet con
sus direcciones públicas. Las direcciones privadas de los ordenadores dentro
de la LAN se traducen en direcciones públicas para el acceso a Internet. El
enrutador, que se encarga del enlace entre LAN e Internet, realiza este
proceso. El principio en el que se sustenta es bastante sencillo: su
enrutador tiene más de una interfaz de red que, por regla general, suelen
ser una tarjeta de red y un módem (o una interfaz RDSI). Una de estas
interfaces conecta su sistema con el exterior mientras que otra o varias
conectan el ordenador con los otros ordenadores de la red. En este caso
existen en la red local varios ordenadores conectados a la tarjeta de red
del enrutador Linux (en este ejemplo eth0). Los
ordenadores de la red envían todos los paquetes que no están dirigidos a la
red propia al enrutador predeterminado o bien a la pasarela predeterminada.
![]() | Máscaras de red uniformes |
|---|---|
Al configurar la red, asegúrese de que las direcciones de difusión (broadcast) y las máscaras de red coinciden. De lo contrario, la red no funciona correctamente ya que los paquetes de red no pueden ser enrutados. | |
Cuando uno de los ordenadores de la red envía un paquete a Internet, éste
llega al enrutador predeterminado. El enrutador debe estar configurado de
tal forma que reenvíe dichos paquetes. Por razones de seguridad, la
configuración predeterminada de SUSE LINUX no lo hace. Modifique la
variable IP_FORWARD en el archivo
/etc/sysconfig/sysctl y asígnele el valor
IP_FORWARD=yes.
La máquina destino sólo conoce el enrutador y no el ordenador concreto de la red interna desde el que se envió el paquete, ya que este queda escondido detrás del enrutador. De ahí viene el concepto enmascarar (masquerading). Debido a la traducción de direcciones, la dirección de destino del paquete de respuesta es de nuevo el enrutador. Este debe reconocer el paquete y modificar la dirección de destino para que llegue al ordenador correcto de la red local.
Puesto que la ruta de los paquetes desde el exterior al interior depende de la tabla de enmascaramiento, no hay ninguna posibilidad de establecer una conexión hacia dentro. No existiría ninguna entrada en la tabla para tal conexión. A toda conexión establecida se le ha asignado además un estado en la tabla, de forma que esa entrada de la tabla no pueda ser utilizada por una segunda conexión.
Como consecuencia se producen problemas con algunas aplicaciones, como por ejemplo con ICQ, cucme, IRC (DCC, CTCP) y FTP (en modo PORT). Netscape, el programa estándar de FTP y muchas otras utilizan el modo PASSV, que causa pocos problemas con el filtrado de paquetes y el enmascaramiento.
El cortafuegos (firewall) es de hecho el término más extendido para un mecanismo que conecta dos redes y que pretende controlar el tráfico de datos en la medida de lo posible. El tipo de cortafuegos que presentamos aquí se debería llamar con más precisión filtro de paquetes. Un filtro de paquetes regula el paso de los mismos en función de criterios como el protocolo, el puerto y la dirección IP. De esta forma, también puede interceptar paquetes que, debido a su direccionamiento, no deberían entrar en la red. Si por ejemplo desea permitir el acceso a su servidor web, debe desbloquear el puerto correspondiente. Si la dirección de estos paquetes es correcta (por ejemplo el servidor web como destino), no se examinará su contenido. Por lo tanto, el paquete podría contener un ataque a un programa CGI de su servidor web y el filtro de paquetes lo dejaría pasar.
Una construcción eficaz, aunque compleja, es la combinación de distintos tipos de estructura como por ejemplo un filtro de paquetes al que se le añaden otras aplicaciones de pasarela/proxy. El filtro rechazaría paquetes que se dirigiesen, por ejemplo, a puertos que no estuvieran desbloqueados y sólo dejarían pasar paquetes para una aplicación de pasarela. Este proxy actúa como interlocutor en la comunicación con el servidor que quiere establece una conexión con nosotros. En este sentido se puede considerar a un proxy de este tipo como una máquina de enmascaramiento a nivel del protocolo de la aplicación correspondiente. Un ejemplo de este tipo de proxies es Squid, un servidor proxy HTTP para el que debe configurar su servidor de forma que las solicitudes de páginas html pasen primero por la memoria del proxy y, sólo en caso de no encontrar allí la página, sean enviadas por el proxy a Internet. El proxy-suite de SUSE contiene un servidor proxy para el protocolo FTP.
A continuación nos centraremos en el filtro de paquetes de SUSE LINUX.
Puede obtener información adicional y enlaces sobre el cortafuegos en el
COMO incluido en howto. Si el
paquete howto está instalado,
también lo puede leer con el comando
less /usr/share/doc/howto/en/txt/Firewall-HOWTO.gz
SuSEfirewall2 es un script que convierte las
variables definidas en /etc/sysconfig/SuSEfirewall2 en
un conjunto de reglas iptables.
SuSEfirewall2 conoce tres zonas de seguridad (de
las que sólo las dos primeras se tienen en cuenta en el siguiente ejemplo de
configuración):
El ordenador debe estar protegido de la red externa porque no existe ningún control sobre esta red. Habitualmente la red externa es Internet, pero también se puede tratar de otra red desprotegida (por ejemplo una WLAN).
Esta es la LAN propia. Si las direcciones IP dentro de la LAN son de la zona privada (ver Sección 22.1.2, “Máscaras de red y redes”), es necesario utilizar NAT (Network Address Translation) para que la red interna pueda acceder a la externa.
Se puede acceder a los ordenadores de esta zona desde la red externa e interna, pero no tienen acceso a la red interna. Esta configuración protege además la red interna de la externa, ya que los ordenadores de la DMZ no pueden acceder a ordenadores internos.
iptables suprime cualquier tráfico de red que no sea explícitamente autorizado por las reglas. Por eso toda interfaz que envíe paquetes a una red debe estar asignada a una de las zonas y es necesario definir los servicios o protocolos permitidos para cada una de la zonas. No obstante, las reglas se aplican exclusivamente a paquetes de origen remoto; los paquetes de origen local se envían siempre.
La configuración puede realizarse con YaST (ver Sección 34.1.4.1, “Configuración con YaST”) o bien editando
directamente el archivo /etc/sysconfig/SuSEfirewall2
que contiene comentarios detallados en inglés. Además puede encontrar
algunos escenarios de aplicación en
/usr/share/doc/packages/SuSEfirewall2/EXAMPLES.
![]() | Configuración automática del cortafuegos |
|---|---|
Después de la instalación, YaST se encarga de iniciar automáticamente un cortafuegos en todas las interfaces configuradas por el usuario. YaST utiliza además las opciones o incluidas en los módulos de configuración de servidor, para adaptar la configuración generada automáticamente tan pronto como un servicio es configurado y activado en el sistema. El diálogo del módulo de servidor puede contener también un botón de que le permite activar servicios y puertos adicionales. El módulo de YaST para configurar el cortafuegos puede utilizarse para activar o desactivar el cortafuegos o para modificar su configuración de forma independiente. | |
La configuración gráfica con YaST se realiza en el Centro de Control de YaST. Una vez allí, seleccione el apartado del menú . La configuración está dividida en siete secciones a las que puede acceder directamente a través de la estructura de árbol en la parte izquierda de la pantalla:
Aquí puede definir el comportamiento de inicio. En una instalación estándar, SuSEfirewall2 ya se ejecuta en el sistema recién instalado. En esta sección también es posible iniciar y detener el cortafuego. El botón le permite probar la configuración actual del cortafuegos.
Este diálogo contiene una lista de todas las interfaces de red. Para eliminar una interfaz de una zona, selecciónela en la lista, pulse y escoja . Si desea añadir una interfaz a una zona, selecciónela, pulse y escoja una de las zonas disponibles. Con el botón puede crear una interfaz de configuración personalizada.
Esta opción le permite ofrecer desde el sistema servicios a una zona protegida. Por defecto, sólo la zona externa está protegida. En este caso es necesario autorizar explícitamente los servicios que han de ser accesibles para equipos externos. Para ello, active el servicio correspondiente después de haber seleccionado la zona en .
El enmascaramiento le permite ocultar la red interna de redes externas como Internet, y además posibilita el acceso de la red interna a la red externa de forma transparente. Las peticiones de la red externa a la interna se bloquean, mientras que de cara al exterior, las peticiones de la red interna parecen tener su origen en el servidor de enmascaramiento.
Si determinados servicios de una máquina interna deben estar disponibles para la red externa, puede añadir reglas especiales de redireccionamiento para el servicio correspondiente.
En este diálogo se configuran los puertos UDP que permiten las llamadas
de difusión general o broadcast. Introduzca separados por espacios los números
de puerto o servicios que deben añadirse a una zona. Vea también el archivo
/etc/services.
Aquí también puede activar que se lleve protocolo de los broadcasts que han sido rechazados. No obstante, esto puede resultar problemático porque los sistemas Windows utilizan el broadcast para saber unos de otros, generando muchos paquetes no autorizados.
Este diálogo le permite configurar si el servicio IPsec debe permitirse desde la red externa. En la sección puede definir qué paquetes son de confianza.
Existen dos reglas principales para el registro: paquetes autorizados o no autorizados. Los autorizados son aceptados (ACCEPTED), mientras que los no autorizados son desechados (DROPPED) o rechazados (REJECTED). Para ambos tipos de paquetes puede seleccionar , o .
Una vez completada la configuración del cortafuegos, salga del diálogo con . A continuación aparece un resumen de la configuración del cortafuegos en función de las zonas donde puede revisar las opciones de configuración seleccionadas. El resumen incluye todos los servicios, puertos y protocolos que han sido autorizados. Pulse para volver a la configuración o bien para guardarla.
A continuación se muestra paso a paso cómo se realiza una configuración adecuada. En cada punto se indica si es válido para el enmascaramiento o para el cortafuegos. En los archivos de configuración también se menciona una DMZ (zona desmilitarizada) que no se tratará con más detalle en estas líneas, ya que se utiliza exclusivamente en redes complejas de grandes organizaciones (empresas, etc.) y su configuración presenta un alto grado de dificultad.
Active en primer lugar SuSEfirewall2 con el módulo Servicios del sistema (niveles de ejecución) de YaST
para que se ejecute en el nivel actual (probablemente 3 ó 5). De este modo, se
introducirán enlaces simbólicos para los scripts SuSEfirewall2_* en los
directorios /etc/init.d/rc?.d/.
FW_DEV_EXT (cortafuegos, enmascaramiento)
La interfaz que apunta hacia Internet. En caso de módem, emplee
ppp0, para RDSI ippp0 y
dsl0 para las conexiones DLS. La interfaz para la ruta
predeterminada utiliza auto.
FW_DEV_INT (cortafuegos, enmascaramiento)
Indique aquí la interfaz que apunta a la red interna o
“privada” (por ejemplo eth0). Si no hay
red interna se deja vacío.
FW_ROUTE (cortafuegos, enmascaramiento)
Si necesita enmascaramiento, introduzca aquí yes. Los
ordenadores internos no son visibles desde fuera porque tienen
direcciones IP privadas (por ejemplo 192.168.x.x)
cuyos paquetes no son enrutados en Internet.
Con un cortafuegos sin enmascaramiento, escoja aquí
yes para permitir el acceso a la red interna. Para
ello, las máquinas internas deben tener direcciones IP asignadas
oficialmente. En casos normales, no debería
permitir el acceso a las máquinas internas desde fuera.
FW_MASQUERADE (enmascaramiento)
Si necesita enmascaramiento, introduzca yes. Con ello,
las máquinas internas obtienen una conexión a Internet prácticamente
directa. Tenga en cuenta que el acceso de la red interna a Internet a través de
un servidor proxy es más seguro. El enmascaramiento no es necesario para los
servicios que proporciona un servidor proxy.
FW_MASQ_NETS (enmascaramiento)Indique aquí el ordenador o red para la que se realizará enmascaramiento. Separe las entradas con un espacio en blanco. Por ejemplo:
FW_MASQ_NETS="192.168.0.0/24 192.168.10.1"
FW_PROTECT_FROM_INT (cortafuegos)
Introduzca yes si desea proteger también el ordenador
que actúa como cortafuegos. Para ello debe desbloquear explícitamente
los servicios disponibles para la red interna. Vea también
FW_SERVICES_INT_TCP y
FW_SERVICES_INT_UDP.
FW_SERVICES_EXT_TCP (cortafuegos)Introduzca aquí los servicios a los que se debe tener acceso. Para un ordenador particular que no ofrece ningún servicio no escriba nada.
FW_SERVICES_EXT_UDP (cortafuegos)Déjelo vacía a menos que utilice un servidor UDP al que se deba poder acceder desde el exterior. Entre los servicios que utilizan UDP se encuentran servidores DNS, IPSec, TFTP y DHCP, entre otros. En ese caso, indique aquí los puertos UDP adecuados.
FW_SERVICES_INT_TCP (cortafuegos)
Aquí se definen los servicios disponibles para la red interna. Las
entradas son similares a las de
FW_SERVICES_EXT_TCP, pero aquí se refieren a la
red interna. Sólo es necesario configurar esta
variable si FW_PROTECT_FROM_INT ha sido
activado.
FW_SERVICES_INT_UDP (cortafuegos)Ver FW_SERVICES_INT_TCP.
FW_STOP_KEEP_ROUTING_STATE (cortafuegos)
Si el acceso a Internet se realiza a través de
diald o RDSI (llamada bajo demanda),
introduzca yes.
Con este paso se completa la configuración. Ahora sólo queda probar el
cortafuegos. Para crear las reglas de filtrado, ejecute como usuario
root el comando
SuSEfirewall2 start. A efectos de prueba, puede ejecutar
por ejemplo un telnet desde fuera para ver si la
conexión realmente se rechaza. A continuación, consulte las entradas en
/var/log/messages. Su aspecto debería ser similar al siguiente:
Mar 15 13:21:38 linux kernel: SFW2-INext-DROP-DEFLT IN=eth0 OUT= MAC=00:80:c8:94:c3:e7:00:a0:c9:4d:27:56:08:00 SRC=192.168.10.0 DST=192.168.10.1 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=15330 DF PROTO=TCP SPT=48091 DPT=23 WINDOW=5840 RES=0x00 SYN URGP=0 OPT (020405B40402080A061AFEBC0000000001030300)
Existen otros paquetes para probar la configuración del cortafuegos, como
por ejemplo nmap o nessus. Después de instalar los paquetes respectivos, la
documentación de nmap se encuentra en
/usr/share/doc/packages/nmap y la de nessus en el
directorio /usr/share/doc/packages/nessus-core.
En el directorio /usr/share/doc/packages/SuSEfirewall2 se
encuentra la documentación actualizada del paquete
SuSEfirewall2. La página web del proyecto
netfilter/iptables, http://www.netfilter.org, proporciona
abundante documentación en varios idiomas.