Instalación de Pound en pfSense

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>

Referencias

es/scalability/pound.txt · Last modified: 2013/03/21 20:40 by mvidal
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC0 1.0 Universal
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki