Configuración de Proxy Transparente con HAProxy en Linux CentOS

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.

Etiquetas: HAProxy TPROXY centos iptables proxy-transparente

Publicado el 7-5 19:10