viernes, 2 de julio de 2010

Configurar un Firewall en FreeBSD PF + ALTQ

FreeBSD se perfila con uno de los sistemas opertativos basados en BSD (Unix) con mejores prestaciones, en este caso se muestra la manera de configurarlo como un Firewall para nuestra red (incluyendo la posibilidad de NAT), utilizando un modulo denominado PF (packe Filter) nativo de Open BSD que puede ser utilizado desde FreeBSD, para hacerlo es necesario realizar algunos cambios en el Kernel, por lo que se muestran los pasos de como realizar este trabajo.
He considerado ir agregando los enlaces a las páginas a la cuales he recurrido para encontrar la información dado que existen algunos puntos que ustedes pueden detallar directamente.

Habilitando PF (Packet Filter)
  1. Editar /etc/rc.conf para actualizar o agregar las siguientes líneas:
    gateway="YES"
    pf_enable="YES"
    pflog_enable="YES"
Habilitar ALTQ (habilita QoS)
  1. ingresar a: /usr/src/sys/amd64/conf  ( si es a 32bits /usr/src/sys/i386/conf)
  2. crear una copia de GENERIC por ejemplo K_ALTQ
    cp GENERIC K_ALTQ
  3. Editar K_ALTQ y agregar las siguientes líneas:
    Los siguientes pasos hablitarán algunas opciones en el KERNEL por lo que debe recompilarse:
    device pf
    device pflog
    device pfsync
    options ALTQ
    options ALTQ_CBQ
    options ALTQ_RED
    options ALTQ_RIO
    options ALTQ_HFSC
    options ALTQ_PRIQ
    options ALTQ_NOPCC
    Grabar y salir.

  4. config K_ALTQ
        responderá: Kernel build directory is ../compile/K_ALTQ, Don´t forget to ''make cleandepend && make depend''
       

  5. ingresar a ../compile/K_ALTQ
    make cleandepend && make depend
    make
    make install

  6. luego reiniciar el equipo para que se active el nuevo kernel con la configuración de PF+ALT
Configurar PF
  1. editar /etc/pf.conf
  2. definir los valores de: ext_if y  int_if, para el caso que estoy trabajando la tarjeta Externa es em0 y la Interna es em1, con ifconfig se puede determinar estos valores, la tarjeta de red que da cara al exterior de la red (puede ser internet) tiene puerta de enlace definida, mientras que la tarjeta interna que da cara a la red LAN, carece de puerta de enlace
    para este caso:
      ext_if="em0"
      int_if="em1"
  3. Para habilitar el NAT desde PF se declara la siguiente regla:nat on $ext_if from ($int_if:network) -> ($ext_if:0)
    Para permitir el funcionamiento de NAT previamente hay que activar esta funcion a nivel del FreeBSD editando el archivo /etc/sysctl.conf (requiere reinicio)
    hay que agregar la siguiente línea:
    net.inet.ip.forwarding=1
  4. una regla básica puede ser: por defecto bloquear toda la entrada y toda la salida
    block in all    
    block out  all 
  5. Luego hay que permitir la comunicción hacia loopback
    pass quick on lo0 all
  6. Permitir la comunicación con la red lan
    pass in on $int_if from ($int_if:network) to any
    pass out on $int_if from any to ($int_if:network
    )
  7. Luego se puede habilitar las reglas de acceso según la necesidad que se tenga:
    pass out on $ext_if proto tcp all modulate state flags S/SA#por ejemplo permitir todo el tcp de salida
Más referencia sobre filtrado de paquetes y sintaxis de las reglas las puede encontrar en:
http://www.openbsd.org/faq/pf/es/index.html

No hay comentarios.: