Pound es un proxy inverso muy ligero, seguro y funcional, apto para producción, que vamos a añadirlo a pfSense, nuestro firewall preferido. Por desgracia, pfSense no dispone de paquete para Pound, así que vamos a instalarlo directamente desde FreeBSD, que es el Sistema Operativo que subyace al panel web de pfSense.
Esta solución tiene el inconveniente de que nos impedirá gestionar pound
a través del magnífico panel web de pfSense, pero así y todo podremos beneficiarnos de las funcionalidades de pound
integrándolas en el firewall, que es de lo que se trata.
1. Accedemos al firewall (pfSense) por consola (“Opción 8, Shell”) y configuramos e instalamos pound
empaquetado para FreeBSD, tal y como lo haríamos en un sistema FreeBSD estándar:
# setenv PACKAGESITE http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/amd64/8.1-RELEASE/packages/All/ # pkg_add -r pound
2. Creamos /usr/local/etc/pound.cfg
con un contenido parecido al siguiente, con chroot (RootJail), y que incluye distintos ejemplos de configuración sin SSL y con SSL (dos esquemas, con conexión SSL con el webserver destino o en claro en redes fiables). Incluye también algún ejemplo de cómo hacer redirecciones:
###################################################################### ## global options: User "nobody" Group "nobody" RootJail "/var/jail/pound/" ## Logging: (goes to syslog by default) ## 0 no logging ## 1 normal ## 2 extended ## 3 Apache-style (common log format) LogLevel 0 LogFacility daemon ## check backend every X secs: Alive 30 ## use hardware-accelleration card supported by openssl(1): #SSLEngine "" ###################################################################### ## listen, redirect and ... to: ## HTTPS Listener ListenHTTPS Address 127.0.0.1 Port 7443 Cert "/var/jail/pound/etc/certs/dominio.com.pem" LogLevel 0 # Non-SSL backend: browser <--ssl--> pound <--plain--> webserver Service HeadRequire "Host: foo.dominio.com" Backend Address 10.0.0.2 Port 80 End End # SSL backend: browser <--ssl--> pound <--ssl--> webserver Service HeadRequire "Host: foo2.dominio.com" Backend Address 10.0.0.3 Port 443 HTTPS End End End ## HTTP Listener ListenHTTP Address 127.0.0.1 Port 7080 LogLevel 0 Service HeadRequire "Host: dominio.com" BackEnd Address 10.0.0.2 Port 80 End End Service HeadRequire "Host: www.dominio.com" Backend Address 10.0.0.2 Port 80 End End # Redirects Service HeadRequire "Host: dominio.net" Redirect "http://dominio.com" End # Redirect http -> https Service HeadRequire "Host: foo.dominio.com" Redirect "https://foo.dominio.com" End End
3. Creamos la estructura de directorios y nodos para el chroot:
# mkdir /var/jail # mkdir /var/jail/pound # mkdir /var/jail/pound/dev # mkdir /var/jail/pound/etc # mknod /var/jail/pound/dev/urandom c 1 9
4. Lo arrancamos para verificar que está correctamente configurado:
# /usr/local/etc/rc.d/pound onestart
5. Ahora, desde el panel web de pfSense, creamos las reglas NAT en el firewall para que todo aquello que le entre por el puerto 80 y 443 (puertos estándar web y web-ssl) se lo envíe a nuestro proxy inverso (pound
, escuchando en localhost), permitiendo el paso hacia los puertos que configuramos en pound.cfg
para que pound escuchase (7080 y 7443).
WAN TCP * * WAN address 80 (HTTP) 127.0.0.1 7080 HTTP pound redirect WAN TCP * * WAN address 443 (HTTPS) 127.0.0.1 7443 HTTPS pound redirect
IPv4 TCP * * 127.0.0.1 7080 * none NAT HTTP pound redirect IPv4 TCP * * 127.0.0.1 7443 * none NAT HTTPS pound redirect
6. Por último, para que pfSense sea capaz de arrancar el proxy inverso al inicio (pfSense ignora /etc/rc.conf), incluimos bajo la sección system
de config.xml
la siguiente línea:
<shellcmd>/usr/local/etc/rc.d/pound onestart</shellcmd>