Eu incluí um desenho para você ter uma ideia de como isso funcionaria. (Vermelho = conexões LDAP, Azul = HTTP / AJP no backend)
Problema: Queremos conectar nosso servidor de aplicativos do cliente a um LDAP do cliente (ou deixá-los fazer isso).
Agora, isso seria fácil se fizéssemos isso com a interface pública do servidor de aplicativos, mas gostaríamos de desabilitar essa interface ao longo do tempo. Queremos rotear todo o tráfego necessário para sair para o proxy e ele entregaria os pacotes para o destino.
Agora, isso também será para outros serviços, mas o principal é o LDAP (configurar os extras não é tão difícil se tivermos o LDAP em ordem). Não queremos redirecionar todo o tráfego porque ainda precisamos de tráfego para acessar nossos serviços de back-end (bancos de dados, etc.).
A solução seria:
Eu gostaria de saber como resolver isso da maneira mais segura e escalável (para automatizar isso) com o IPTABLES.
Estou procurando a melhor solução IPTABLES para implementar em nosso servidor de aplicativos e proxy
EDITAR:
Teste com 2 caixas vagantes: Host0 = servidor de aplicativos Host1 = Proxy
Ainda se esforçando com isso. Mas estou chegando mais perto.
Todo o meu tráfego LDAP está sendo enviado para o proxy e de volta, mas estou apenas recebendo [S] e [S.] de volta e sem conexão.
Aqui está o que eu fiz.
Servidor de aplicativos:
iptables -t mangle -A OUTPUT -p tcp --dport 389 -j MARK --set-mark 0x1
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
$echo 1 LDAP >> /etc/iproute2/rt_tables
$ip rule add fwmark 0x1 lookup LDAP
$ip route add default via 192.168.1.2 table LDAP
[root@host0 ~]# sysctl -A | grep rp_filter
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.all.arp_filter = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.arp_filter = 0
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.lo.arp_filter = 0
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.eth0.arp_filter = 0
net.ipv4.conf.eth1.rp_filter = 1
net.ipv4.conf.eth1.arp_filter = 0
[root@host0 ~]# sysctl -A | grep net.ipv4.ip_forward
net.ipv4.ip_forward = 1
Proxy:
iptables -t nat -A POSTROUTING -p tcp -o eth0 --dport 389 -j SNAT --to 10.0.2.15
[root@host1 ~]# sysctl -A | grep rp_filter
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.arp_filter = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.arp_filter = 0
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.lo.arp_filter = 0
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.eth0.arp_filter = 0
net.ipv4.conf.eth1.rp_filter = 1
net.ipv4.conf.eth1.arp_filter = 0
[root@host1 ~]# sysctl -A | grep net.ipv4.ip_forward
net.ipv4.ip_forward = 1
Este é o tcpdump na eth1 (privada) do servidor de aplicativos
13:31:51.629687 IP 192.168.56.10.59528 > ec2-23-20-46-132.compute-1.amazonaws.com.ldap: Flags [S], seq 1571039960, win 14600, options [mss 1460,sackOK,TS val 18491218 ecr 0,nop,wscale 3], length 0
13:31:51.749145 IP ec2-23-20-46-132.compute-1.amazonaws.com.ldap > 192.168.56.10.59528: Flags [S.], seq 1604232705, ack 1571039961, win 65535, options [mss 1460], length 0
13:31:52.630908 IP 192.168.56.10.59528 > ec2-23-20-46-132.compute-1.amazonaws.com.ldap: Flags [S], seq 1571039960, win 14600, options [mss 1460,sackOK,TS val 18492219 ecr 0,nop,wscale 3], length 0
13:31:54.633277 IP 192.168.56.10.59528 > ec2-23-20-46-132.compute-1.amazonaws.com.ldap: Flags [S], seq 1571039960, win 14600, options [mss 1460,sackOK,TS val 18494222 ecr 0,nop,wscale 3], length 0