domingo, 10 de abril de 2022

Router y gateway con IPFW, opción NATD en FreeBSD 13

En la presente entrada mostramos un tutorial para poder dar salida a nuestras redes internas a otras redes de datos utilizando solamente una IPv4, proporcionar salida a internet a nuestros clientes a través de FreeBSD, esta tarea realizan los routers, están en capa 3 del modelo OSI.

Escenario:

Internet---Proveedor(modem/router)---(em0)[FreeBSD 13](em1,em2)---Switch LAN

Donde em0, em1, em2 son las interfaces ethernet (cableada) de nuestro sistema operativo FreeBSD 13; los segmentos de red respectivamente para las interfaces son como sigue:

em0-> 192.168.1.0/24 y la ipv4 para la interfaz em0 es 192.168.1.5/24

em1-> 192.168.2.0/24 y la ipv4 para la interfaz em1 es 192.168.2.5/24

em2-> 192.168.3.0/24 y la ipv4 para la interfaz em2 es 192.168.2.5/24

Luego de instalar FreeBSD, realizamos algunos ajustes para nuestro caso, como observamos tenemos 3 interfaces ethernet, agregamos dos interfaces ethernet en el archivo /etc/rc.conf, utilizamos a ee como editor de texto.

#ee /etc/rc.conf

##Network

ifconfig_em0="inet 192.168.1.5 netmask 255.255.255.0"

ifconfig_em1="inet 192.168.2.5 netmask 255.255.255.0"

ifconfig_em2="inet 192.168.3.5 netmask 255.255.255.0"

##Gateway by default

defaultrouter="192.168.1.1"

##Firewall ipfw

firewall_enable="YES"                    #habilitamos el firewall nativo a FreeBSD

firewall_script="/etc/ipfw.rules"      #script personalizado

##Ser puerta de enlace para redes internas

gateway_enable="YES"                   #para ser puerta de enlace a redes LAN

##Enable natd

natd_enable="YES"                         #Habilitamos natd

natd_interface="em0"                     #Escribir la interface wan, o de cara a internet

Como observamos tenemos 254 ipv4 utilizables para cada segmento de red, son segmentos diferentes.

Reiniciamos la red de datos:

#service netif restart 

#ifconfig        #debe mostrarse las nuevas ipv4 en las interfaces lan y hacerle ping a cada ipv4

#service routing restart     #algunas veces es necesario cuando se reinicia las interfaces

 Creamos un archivo con nombre /etc/ipfw.rules, para ello usamos el editor ee (nativo en FreeBSD)

#ee /etc/ipfw.rules

#!/bin/sh

##limpiamos reglas

ipfw -q -f flush

##asignamos una variable

cmd="ipfw -q add"

##interfaces con variabes

pif0="em0"    #wan

pif1="em1"    #Lan 1

pif2="em2"    #Lan 2

##habilitamos a las interfaces LANs

$cmd 005 allow all from any to any via $pif1

$cmd 006 allow all from any to any via $pif2

##para la interface loopback, interface interna

$cmd 010 allow all from any to any via lo0

 ##NATD

$cmd 100 divert natd ip from any to any in via $pif0

$cmd 1000 divert natd ip from any to any out via $pif0 

##It is necessary to do ping between interfaces when you use FreeBSD terminal

$cmd 1001 allow ip from any to any        #for example to ntpdate

 Iniciar el servicio IPFW

#service ipfw start

Listar las reglas escritas, observar que hay una última regla que deniega todo al final

#ipfw list

 Si por algún motivo no ha escrito alguna línea en /etc/rc.conf, por ejemplo te olvidaste de escribir gateway_enable="YES", entonces para que funciones como puerta de enlace a la redes internas, hacer un reboot :D.

#reboot

Al iniciar todo debe estar bien, disfruta de tu enrutador :D

Se puede personalizar bastante, eso depende del conocimiento de ipfw, bloquear, redireccionar puertos, etc. Permitir entre otros, en este tutorial se ha puesto interés en hacer NAT, que funcione, no fue de interés hacer un firewall seguro. 

Pruebas: los clientes conectados a las interfaces em1 y em2 utilizan la puerta de enlace de FreeBSD, ipv4 en las interfaces em1 y em2, conociendo defautlrouter en FreeBSD, entonces desde el cliente debe hacer ping, si es así ya esta enrutando y puede hacer ping a otras redes como internet y dominios en internet (el cliente para resolver nombres debe usar un servidor dns)

Referencia: https://docs.freebsd.org/en/books/handbook/firewalls/#firewalls-ipfw

No hay comentarios.:

Publicar un comentario

Cambiar el puerto de SSH en Derivados Red Hat Enterprise Linux 8

 En esta entrada mostraremos una forma de cambiar el puerto por defecto del servicio ssh en Rocky Linux 8. En primer lugar debemos de editar...