ipfw + ipalias + natd en FreeBSD

Autor: Juan (Iucki)
Fecha de creaci�n: 13 de julio de 2002


Lo que voy a contaros es como dar varias IP's a una misma tarjeta de red y como hacer que estas IP's apunten a ordenadores con otras IP's. �Y esto para que sirve?,Pues bien, esto sirve para tener varios ordenadores con IP's publicas y formando parte de Internet teniendo solo uno de estos 4 conectados a internet

Esquema:

B�sicamente tenemos un ordenador con dos tarjetas de Red ,una conectada a Internet (rl0 80.32.152.1) y otra conectada a un Switch (rl1 192.168.0.1)en el que hay otras 3 makinas

Entonces, la Idea consiste en darle 4 ips a rl0 y hacer que 3 de estas 4 apunten a las 3 makinas de la intranet de modo q si diji�semos:

http://80.32.152.2 llegar�amos a http://192.168.0.2
http://80.32.152.3 llegar�amos a http://192.168.0.3
http://80.32.152.4 llegar�amos a http://192.168.0.4

Ipfw con Nat:

Este punto lo ten�is muy bien explicado en un articulo escrito por koji que se llama Nat en FreeBSD, as� que los que no os entere�s de lo que intento trasmitiros perdonadme y echarle un vistazo a ese documento que es bastante claro.

Activaci�n de IPFIREWALL, DUMMYNET e IPDIVERT en el Kernel

# cd /usr/src/sys/i386/conf
# cp GENERIC YUKI (voy a llamar YUKI a nuestro nuevo kernel)
# ee YUKI (lo editamos)

A�ade las siguientes lineas:

options IPFIREWALL
options IPFIREWALL_VERBOSE
options	IPFIREWALL_VERBOSE_LIMIT=# //donde # es un numero (ver abajo explicacion)
options	IPDIVERT
options	DUMMYNET

Guardamos y salimos

# config -r YUKI
# make depend
# cd ../../compile/YUKI
# make depend;make;make install

Ya tenemos nuestro nuevo kernel recompilado con sus nuevas opciones.

rc.conf (puesta a punto)

gateway_enable="YES"
hostname="NOMBRE DE LA MAKINA"
ifconfig_rl0="inet IPPUBLICA1 netmask MASCARAPUBICA"
ifconfig_rl1="inet IPPRIVADA1 netmask MASCARAPRIVADA"
natd_program="/sbin/natd"
natd_enable="YES"
natd_interface="rl0" #elegimos la tarjeta conectada a internet
firewall_enable="YES"
firewall_type="/etc/firewall.rules"
firewall_script= "/etc/rc.firewall"

Las opciones que hemos a�adido significan: options IPFIREWALL en el kernel hemos dejado el Firewall con todo cerrado, as� que en nuestro archivo /etc/firewall.rules nos dedicaremos a abrir todo un poco. IPFIREWALL_VERBOSE nos permite loguear el trafico con ipfw imprimiendo la actividad de los paquetes dentro de syslogd, esto es para todas las reglas que lleven la palabra "log". IPFIREWALL_VERBOSE_LIMIT=# nos sirve para especificar el numero de veces que queremos que ipfw loguee a syslogd los paquetes de una determinada regla.

editamos: /etc/firewall.rules

-f flush
add divert natd all from any to any via rl0 (ponemos la tarjeta conectada a internet)
add allow ip from any to any
add deny log ip from me to any in
add deny log tcp from any to any in tcpflags syn,fin
add check-state
add allow tcp from any to any out keep-state
add allow icmp from any to any icmptype 3
add allow icmp from any to any icmptype 4
add allow icmp from any to any icmptype 11
add deny icmp from 192.168.0.1/8 to any icmptype 0 #donde 192.168.0.0 es nuestra red interna
add allow tcp from any to any 113 keep-state setup
add pass all from any to any

En la segunda linea con la opci�n de divert natd hacemos que las makinas conectadas a Nuestra M�quina puedan salir a internet a trav�s de rl0 (la tarjeta conectada a internet)

Bien, si ahora reiniciamos tendremos la posibilidad de salir a internet con las makinas que hay detr�s de 192.168.0.1. Ahora os voy a contar que hacer para asignar 3 ips Publicas mas a rl0 y linkearlas con las 3 ips privadas de esas 3 makinas.

Primero metemos en rc.conf las l�neas que dan las nuevas ips Publicas a rl0 y despu�s vamos a crear una referencia al archivo en el que guardaremos nuestras opciones de Natd.

ifconfig_rl0_alias0="inet IPPUBLICA2 netmask MASCARAPUBLICA"
ifconfig_rl0_alias1="inet IPPUBLICA3 netmask MASCARAPUBLICA"
ifconfig_rl0_alias2="inet IPPUBLICA4 netmask MASCARAPUBLICA"
natd_flags="-config /etc/rc.natd -same_ports -log -use_sockets -dynamic"
router_flags="-q"
router="routed"
router_enable="YES"

Y ahora creamos nuestro archivo /etc/rc.natd en el que meteremos las opciones de nat.

redirect_address 	IPPRIVADA1 		IPPUBLICA1
redirect_address 	IPPRIVADA2 		IPPUBLICA2
redirect_address 	IPPRIVADA3		IPPUBLICA3

Bueno, esta es una opci�n, que a m� no es la que m�s me gusta, yo prefiero solo dirigir esos puertos a los que quiero que la gente desde internet pueda llegar, Por ejemplo, si tuvi�semos abiertos un smtp, un ftp, un pop, un apache y adem�s Puertos pasivos para el ftp desde el 49152 hasta el 655345 yo haria:

redirect_port	tcp	192.168.0.2:21		80.32.152.18:21
redirect_port	tcp	192.168.0.2:25		80.32.152.18:25
redirect_port	tcp	192.168.0.2:80		80.32.152.18:80
redirect_port	tcp	192.168.0.2:110		80.32.152.18:110
redirect_port	tcp	192.168.0.2:49152-65534	80.32.152.18:49152-65524

Yo personalmente creo que en a lo que seguridad se refiere ipfw no es la mejor de las opciones por eso en mi m�kina he optado por no darle muchas vueltas al ipfw y dejar las reglas que puse ah� arriba (que algo si que hacen) e instalar Snort + Acid. Si Dios quiere, y consigo entenderlo bien todo, escribir� un cap�tulo sobre instalaci�n y configuraci�n de estas dos herramientas.

Control de Ancho de Banda:

Para controlar el ancho de banda que se le da a la gente que sale de nuestro servidor una alternativa es usar ipfw. Para ello usaremos PIPES, lo que hacemos es meter un grupo de conexiones que queremos limitar dentro de un pipe y despu�s le damos el ancho de banda a ese pipe. EJEMPLO (dentro de /etc/firewall.rules):

add	pipe	1	ip	from 	192.168.0.2/4	to 	any 		out
add	pipe	2	ip	from 	any		     to	192.168.0.2/4	out
pipe	1	config	bw	10Kbit/s	queue	5Kbytes 
pipe	2	config	bw	20Kbit/s	queue	7Kbytes

En este ejemplo vemos como hemos creado dos PIPES y a cada uno le damos un ancho de banda, cuando el servidor disponga de mas ancho de banda del que reparte pasar� a repartir ese ancho de Banda + el queue , en el Pipe1 ser�a 10kb + 5kb = 15kb y en el Pipe2 ser�a 20kb + 7kb = 27kb , el queue lo usara cuando disponga de tanto ancho de banda

Para terminar

Bien,eso es un ejemplo simple, pero se pueden hacer muchisimas cosas en este sentido,para los que os interese esto de verdad podeis ir a esta web (gracias a kING_z q tras darle mucho la brasa me la dio :D ) -> http://info.iet.unipi.it/~luigi/ip_dummynet/

Y ya poco mas voy a escribir, perdonadme por el desorden cuando tenga tiempo lo ir� modificando, asi que paciencia, vale?, podeis mandarme todo tipo de sugerencias y correcciones a ,muchas gracias por leerme y si no entendeis algo ya sabeis escribid a la lista o preguntad en el canal y seguro q ya hay alguien que os mande a www.google.com asi q no seais vagos y primero buscad un poco :P.


Hosted by www.Geocities.ws

1