Este COMO trata sobre el filtrado de paquetes. Lo cual significa, decidir si a un paquete se le permite pasar o no. Sin embargo, Linux es el sitio de recreación de los hackers, y usted probablemente quiere hacer más que eso.
Un inconveniente es que la misma herramienta (ipchains) es usada para controlar enmascaramiento y proxy transparente, a pesar de que son dos conceptos del filtrado de paquetes totalmente separados (la implementación actual de Linux los opaca, dando la impresión de que se relacionan estrechamente).
Enmascaramiento y Proxies son tratados en HOWTOs separados, y las características auto forwarding (auto re-envio) y el port forwarding (re-envio a puerto) son manejadas por herramientas separadas, a pesar de eso mucha gente me lo sigue preguntando. Incluiré una serie de situaciones comunes e indicaré cuando debe ser aplicada cada una. La seguridad que requiere cada configuración no será discutida aqui.
Se asume que su inteface externa se llama `ppp0'. Use ifconfig para encontrarla, y haga el cambio apropiado.
# echo 1 > /proc/sys/net/ipv4/ip_forward
# ipchains -P forward -j DENY
# ipchains -A forward -i ppp0 -j MASQ
Puede comprar un cortafuegos. Uno que es excelente es el WatchGuard's FireBox. Es excelente porque me gusta, es seguro, está basado en Linux, y porque ellos están consolidando el mantenimiento de ipchains asi como el nuevo codigo de firewalling (apuntado para 2.3). En pocas palabras, WatchGuard esta pagando para que yo coma mientras trabajo para usted. Por favor tenga en cuenta su producto.
Usted corre littlecorp.com. Tiene una red interna, y una simple conexión telefónica a Internet (firewall.littlecorp.com la cual es 1.2.3.4). Ejecuta Ethernet en su red local, y su máquina personal es llamada "myhost".
En esta situación, los paquetes que provienen de la red privada nunca alcanzan la Internet, y viceversa. La dirección IP de la red privada debe ser asignada con las Especificaciones de direccion para redes privadas (Private Network Allocations) del RFC1597 (ej. 10.*.*.*, 172.16.*.* o 192.168.*.*).
La unica forma para que nunca se conecte a la Internet es conectando a un cortafuegos (firewall), el cual es solo una máquina de ambas redes, la cual les pertenece. Usted ejecuta un programa (en el cortafuegos) llamado un proxy para hacer esto (hay proxies para FTP, acceso a la Web, telnet, RealAudio, Noticias de Usenet y otros servicios). Ver el Firewall-HOWTO.
Algun servicio que usted desee acceder en la Internet debe estar en el cortafuegos. (Ver Servicios Internos Limitados más abajo).
Ejemplo: Permitiendo acceso a la web desde la red privada hacia la Internet.
Netscape en 'myhost' lee http://slashdot.org.
ej. Desde la perspectiva de slashdot.org, la conexión se hace desde 1.2.3.4 (la interface PPP del cortafuegos) puerto 1025 hacia 207.218.152.131 (slashdot.org) puerto 80. Desde la perspectiva de 'myhost', la conexión se hace desde 192.168.1.100 (myhost) puerto 1050, hacia 192.168.1.1 (la interface Ethernet del cortafuegos) puerto 8080.
En esta situación, los paquetes que provienen de la red privada nunca alcanzan la Internet, y viceversa. La dirección IP de la red privada debe ser asignada con las Especificaciones de direccion para redes privadas (Private Network Allocations) del RFC1597 (ej. 10.*.*.*, 172.16.*.* o 192.168.*.*).
La unica forma de que las cosas nunca conecten a la Internet es conectandolas al cortafuegos, el cual es una máquina en ambas redes, la cual les pertenece. Usted ejecuta un programa (en el cortafuegos) llamado proxy transparente para hacer esto; el kernel envia los paquetes al proxy transparente en lugar de enviarlos a sus propietarios.
Proxi transparente significa que los clientes no necesitan conocer que esto se trata de un proxy.
Algun servicio que usted desee acceder en la Internet debe estar en el cortafuegos. (Ver Servicios Internos Limitados más abajo).
Ejemplo: Permitiendo acceso a la web desde la red privada hacia la Internet.
Netscape en 'myhost' lee http://slashdot.org.
ej. Desde la perspectiva de slashdot.org, la conexión se hace desde 1.2.3.4 (la interface PPP del cortafuegos) puerto 1025 a 207.218.152.131 (slashdot.org) puerto 80. Desde la perspectiva de 'myhost', la conexión se hace desde 192.168.1.100 (myhost) puerto 1050, hacia 207.218.152.131 (slashdot.org) puerto 80, pero realmente esta hablando como el proxy transparente.
En esta situación, los paquetes que provienen de la red privada nunca alcanzan la Internet, y viceversa. La dirección IP de la red privada debe ser asignada con las Especificaciones de direccion para redes privadas (Private Network Allocations) del RFC1597 (ej. 10.*.*.*, 172.16.*.* o 192.168.*.*).
En lugar de usar un proxy, usaremos una facilidad especial del kernel llamada "enmascaramiento" (masquerading). Masquerading reescribe los paquetes que pasan a través del cortafuegos, tal que siempre se verán como si vinieran del propio cortafuegos. Luego reescribe la respuesta de tal forma que se vea como ellos salieron a sus receptores originales.
Masquerading tiene modulos separados para manejar protocolos "complicados", tal como FTP, RealAudio, Quake, etc. Para realmente protocolos de dificil manejo, el "auto forwarding" facilita que pueda manejar algunos de ellos por configuración automatica de "port forwarding" para seteo relativo de puertos: ver "ipportfw" (kernels 2.0) o "ipmasqadm" (kernels 2.1).
Algun servicio que usted desee acceder en la Internet debe estar en el cortafuegos. (Ver Servicios Internos Limitados más abajo).
Ejemplo: Permitiendo acceso a la web desde la red privada hacia Internet.
Netscape en 'myhost' lee http://slashdot.org.
ej. Desde el punto de vista de slashdot.org, la conexión es hecha desde 1.2.3.4 (la interface PPP del cortafuegos) puerto 65000 hacia 207.218.152.131 (slashdot.org) puerto 80. Desde la perspectiva de 'myhost', la conexión es hecha desde 192.168.1.100 (myhost) puerto 1050, hacia 207.218.152.131 (slashdot.org) puerto 80.
En esta situación, su red personal es parte de la Internet; los paquetes pueden fluir a través de ambas redes sin cambiarlos. Las direcciones IP de la red interna deben ser asignados por aplicación de un bloque de direcciones IP, tal que el resto de la red conocerá cómo obtener sus paquetes. Esto implica una conexión permanente.
En este rol, el filtrado de paquetes es usado para restringir aquellos paquetes que pueden ser enviandos entre su red y el resto de la Internet, ej. para restringir al resto de la Internet para accesar solamente a sus servidores web internos.
Ejemplo: Permitiendo acceso a la web desde la red privada a la Internet.
Netscape en 'myhost' lee http://slashdot.org.
ej. Solo existe una conexión: desde 1.2.3.100 (myhost) puerto 1050, hacia 207.218.152.131 (slashdot.org) puerto 80.
Hay unos pocos trucos para que pueda permitir a la Internet acceder a sus servicios internos, más que ejecutarlos en su cortafuegos. Esto funciona con proxy o enmascaramiento basados en aproximación para conexiones externas.
La aproximación mas simple es ejecutar un "redirector", el cual es un proxy de "pobres" el cual espera una conexión en un puerto dado, y luego abre una conexión a un determinado host interno y un puerto, y copia los datos entre las dos conexiones. Un ejemplo de esto es el programa "redir". Desde el punto de vista de Internet, la conexión es hecha a su cortafuegos. Desde el punto de vista de su servidor interno, la conexión es hecha desde la interface interna del cortafuegos hacia el servidor.
Otra aproximación (la cual requiere un parche del kernel 2.0 para ipportfw, o un kernel 2.1 o superior) es usar port forwarding en el kernel. Esto hace lo mismo que "redir" en una forma diferente: el kernel reescibe los paquetes a medida que lo atraviesan, cambiando su dirección de destino y puerto para que apunte a un host y puerto internos. Desde la perspectiva de Internet, la conexión se hace hacia su cortafuegos. Desde el punto de vista del servidor interno, se hace una conexión directa desde el host Internet al servidor.