Para implementar un proxy transparente usando HAProxy, se necesita un entorno Linux como CentOS 7 con kernel 3.10 o superior, que incluye el módulo TPROXY integrado. No se requiere instalación adicional de TPROXY.
Instalación de HAProxy con Soporte TPROXY
Descargue la versión adecuada de HAProxy desde la fuente oficial. Ejemplo para la versión 1.4.24:
wget http://www.haproxy.org/download/1.4/src/haproxy-1.4.24.tar.gz
tar -xzf haproxy-1.4.24.tar.gz
cd haproxy-1.4.24
yum install -y gcc gcc-c++ autoconf automake
make TARGET=linux2628 CPU=x86_64 USE_LINUX_TPROXY=1
make install
mkdir -p /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/
cp examples/haproxy.init /etc/init.d/haproxy
chmod +x /etc/init.d/haproxy
cp haproxy /usr/sbin/
El parámetro USE_LINUX_TPROXY=1 es crucial para habilitar la funcionalidad TPROXY durante la compilación.
Definición de la Configuración de HAProxy
Modifique el archivo /etc/haproxy/haproxy.cfg para incluir una sección de proxy transparente. Aquí un ejemplo simplificado:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 4096
daemon
defaults
log global
mode http
option httplog
option dontlognull
retries 3
maxconn 2000
timeout connect 5000
timeout client 50000
timeout server 50000
listen proxy_tp
bind 0.0.0.0:12345
balance roundrobin
mode tcp
option tcplog
source 0.0.0.0 usesrc clientip
server backend_srv 10.17.12.246:12346 weight 1 check inter 2000 rise 2 fall 5
La directiva "source 0.0.0.0 usesrc cleintip" permite que HAProxy conesrve la dirección IP original del cliente al enviar tráfico al servidor backend.
Ajustes de Red en el Servidor Proxy
Primero, limpie las reglas de iptables y establezca las reglas necesarias para TPROXY:
iptables -F
iptables -t mangle -N DIVERT_CHAIN
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT_CHAIN
iptables -t mangle -A DIVERT_CHAIN -j MARK --set-mark 100
iptables -t mangle -A DIVERT_CHAIN -j ACCEPT
ip rule add fwmark 100 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
Suponiendo que la interfaz de red del proxy tiene la IP 10.17.12.192, configure los parámetros del kernel:
echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
echo 2 > /proc/sys/net/ipv4/conf/default/rp_filter
echo 2 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/enp0s8/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 1 > /proc/sys/net/ipv4/conf/enp0s8/send_redirects
Configuración del Servidor Backend
En el servidor backend (por ejemplo, con IP 10.17.12.246), ajuste la tabla de rutas para dirigir el tráfico a través del proxy. En un sistema Windows, ejecute:
route delete 10.17.12.0
route add 10.17.12.0 mask 255.255.255.0 10.17.12.192
Esto garantiza que el tráfico de la red 10.17.12.0/24 pase por el proxy transparente.
Verificación Funcional
Después de aplicar la configuración, inicie HAProxy y realice pruebas usando herramientas como netcat o curl. Confirme que las conexiones se establecen correctamente y que la IP del cliente se preserva en los registros del servidor backend, demostrando el funcionamiento del proxy transparente.