jueves, 30 de julio de 2009

Algo sobre el PacketFilter

No pretendo entrar en detalle sobre la configuración del packet filter, la idea de este post, es que lo puedas usar rapidamente, sirviendote para lo que fue diseñado un firewall, permitir o denegar el acceso a algo o a alguien.

#============== 
# PACKET FILTER:
#============== 

% Archivo de configuración de las reglas: 
/etc/pf.conf

% Cargar modulo PF manualmente. Esto si no estuviera ya cargado.
#kldload pf.ko

% Opciones disponibles en rc.conf (Para que al inicio del servidor el PF carge normalmente) 
pf_enable="YES" #habilita pf
pf_rules="/etc/pf.conf" #archivo de reglas de pf
pf_flags="" #flags adicionales
pflog_enables="YES"  #empieza pflogd
pflog_logfile="/var/log/pflog" #almezanamiento de logs
pflog_flags="" #flag adicionales para pflogd

% Si se tiene una LAN destras del firewall o para hacer NAT y forwardear los paquetes de debe habilitar la opcion:
gateway_enable="YES" Habilita gateway para LAN

% Trabajando con el PF
pfctl -e Habilita PF
pfctl -d Deshabilita PF
pfctl -F all -f /etc/pf.conf     #Flush de reglas y recarga  pf.conf
pfctl -s rules | nat | state     #muestra las reglas, el nat y el estado de las conexiones
pfctl -vnf /etc/pf.conf          #chequea errores en el archivo pf.conf


=====

Ejemplo de Configuracion del Archivo pf.conf

###########################################
#1ro definir las macros:
ext_if = "re0"
servicio_sshd = "{ 22 }"
servicio_httpd = "{ 80 }"
lan_noc = "{ 200.132.3.0/24 }"
priv_nets = "{ 10.0.0.0/8 192.168.0.0/16 127.0.0.0/8 }"

# options
set block-policy drop #Comportamiento por defecto de paquetes bloqueados
set loginterface $ext_if #Habilita colección de paquetes para generar estadisticas. Se puede ver con pfctl -s info
#
scrub in all
#
# filter rules
block log all

# Permite conexiones tcp y udp que sean iniciadas por localhost
pass quick on lo0 all
pass out quick proto udp from any to any keep state
pass out quick proto tcp all flags S/SA keep state

# antispoof quick for $ext_if inet
block drop in quick on $ext_if from $priv_nets to any
block drop out quick on $ext_if from any to $priv_nets

# Permite el acceso al servicio ssh a toda la red del noc.
pass in quick on $ext_if proto tcp from $lan_noc to $ext_if port $servicio_sshd flags S/SA keep state

#Permite acceso al http a todos.
pass in quick on $ext_if proto tcp from any to $ext_if port $servicio_httpd flags S/SA keep state

pass out on $ext_if proto { tcp, icmp } all modulate state
pass out on $ext_if proto udp all
###########################################


TROUBLE SHOTTING
================

###################################################
Si sale el siguiente error al ejecutar el reload del archivo pf.conf:

# pfctl -F all -f /etc/pf.conf
pfctl: /dev/pf: No such file or directory

Sol: ejecutar

#kldload pf.ko
###################################################

No hay comentarios:

Distributed Denial-of-Service (DDoS)

Distributed Denial-of-Service, or more commonly known in its abbreviated form – DDoS – is an organized attempt to render a computer resource...