Inicio > BSD > Compartir internét con PF (Packet Filter)

Compartir internét con PF (Packet Filter)

Sábado, 19 de Julio de 2008 admin Dejar un comentario Ir a comentarios

Packet Filter (PF), es un filtro de paquetes o cortafuegos de OpenBSD (aunque se usa en otros BSDs) basado en configuración dinámica. Escrito por Daniel Hartmeier, reemplazó al filtro de Darren Reed (IPFilter) en OpenBSD debido a problemas con la licencia. (Extraído de Wikipedia).

Como veremos en este artículo, además de usarlo como firewall podemos usarlo para compartir internet desde un servidor hacia PCs que estén conectadas a el.

Sus reglas son bastante más sencillas que IpFilter e Iptables, por lo que no nos costará entender lo que vamos a hacer.

Hagamos de cuenta de que tenemos el mismo caso que en mi tutorial de compartir internet con iptables: Una PC servidora la cual tiene dos tarjetas de red: Una la cual recibe la conexión a partir de un módem, router o switch, y la otra la cual debe proveer de conexión a otra pc (digamos un “cliente”).
En BSD las tarjetas son mencionadas de otra forma (sin el tipico eth0, eth1, etc etc, de GNU/Linux). Por ejemplo, una tarjeta Via Rhine se llamará vr0, vr1, etc; y una Davicom se llamará dc0, dc1, etc etc. Así que primero debemos averiguar bien el nombre de cada tarjeta de red antes de seguir.
Para usar PF obviamente tenemos que iniciarlo. Por defecto el mismo no se ejecuta al inicio, así que podemos elegir entre inciarlo manualmente con el comando /etc/rc.d/pf start, o editar /etc/rc.conf para habilitarlo. Lo hacemos de la siguiente manera:

Editamos /etc/rc.conf con el editor que elijamos. En OpenBSD vamos hasta la línea donde pone:

pf=NO

Y le cambiamos el NO por un YES.

En FreeBSD vamos a la línea que dice:

pf_enable=NO

Y también cambiamos el NO por YES.

En NetBSD editamos el mismo archivo, pero tenemos que añadir pf=YES al final.

Ahora debemos editar el archivo /etc/pf.conf. Buscamos estas dos líneas:

ext_if=””

int_if=””

Supongamos que tenemos vr0 y vr1; la primera recibe la conexión y la segunda es la que queremos que comparta internet al “cliente”. Así que deberíamos poner a vr0 como interface externa y a vr1 como interface interna:

ext_if=”vr0″

int_if=”vr1″

Activamos NAT (Network Adress Translation), el cual nos permitirá cambiar la IP de los paquetes salientes y entrantes de nuestras pcs “clientes” por la IP externa de nuestro ordenador que comparte internet. Para eso descomentamos la siguiente línea:

#nat on $ext_if from !($ext_if) -> ($ext_if:0)

Con esto hará que se aplique NAT a todos los paquetes que no vengan de nuestra interface externa.

Ahora dejamos pasar todo el tráfico (entrante y saliente) de nuestra interface interna. Agregamos las siguientes líneas:

pass in on $int_if all

pass out on $int_if all

Guardamos el archivo y ya podemos seguir con el próximo paso.

Puede suceder que cuando iniciemos PF nos diga un error como el siguiente:

pfctl: /dev/pf: device not configured.

Eso ocurre cuando no se carga el módulo de packetfilter. Para cargarlo solo nesecitamos hacer:

# modload /usr/lkm/pf.o

E intentamos activar pf nuevamente.

Para evitar tener que activarlo cada vez que iniciamos el ordenador, podemos activar lkm (loadable kernel module (un daemon que activa y desactiva módulos)) al inicio del sistema:

Editamos /etc/rc.conf y buscamos la línea que diga:

lkm=NO

Y cambiamos el NO por YES.

En NetBSD debemos añadir lkm=YES al final.

Luego editamos el archivo /etc/lkm.conf, y abajo de todo agregamos lo siguiente:

/usr/lkm/pf.o – - – - BEFORENET

Con esto el lkm activará el módulo de packet filter antes de que se inicien las funciones de red (BEFORENET) y antes de que obviamente, se inicie PF.

Si ya activamos PF antes de editar el archivo de coinfiguración, podemos cargar de nuevo el pf.conf que acabamos de editar de la siguiente forma:

# pfctl -f /etc/pf.conf

Por último, activamos el ip forwarding (el proceso en el cual se redirigen paquetes de una red a otra, en este caso, de internet a una o más pcs “clientes” de nuestra red local):

# sysctl net.inet.ip.forwarding=1

Para que no tengamos que activarlo cada vez que iniciamos el sistema, editamos el archivo /etc/sysctl.conf y descomentamos la siguiente línea:

#net.inet.ip.forwarding=1

O sea, le quitamos el #.

Y ya está. Podemos reiniciar para que se active todo automáticamente o podemos activar todo a mano de las formas que mencioné arriba.

Sugiero leer la documentación de Packet Filter para entender mejor estas funciones y aplicarlas como uno desee.

Creative Commons License
This work is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.

Categories: BSD Tags:
  1. Sin comentarios aún.
  1. Sin trackbacks aún.
Security Code: