Posso usar o iptables no meu servidor Varnish para encaminhar o tráfego HTTPS para um servidor específico?

1

Usamos o Varnish como cache de front-end e balanceador de carga, por isso temos um servidor Linux em nosso ambiente de desenvolvimento, executando o Varnish com algumas regras básicas de armazenamento em cache e balanceamento de carga em dois servidores web Windows 2008 IIS. / p>

Temos uma regra de DNS curinga que aponta * .development nessa caixa Varnish, para que possamos procurar o link , link , etc. O problema é que, como o Varnish não consegue lidar com o tráfego HTTPS, não podemos acessar link

Para dev / testing, não precisamos de nenhuma aceleração ou balanceamento de carga - tudo que eu preciso é dizer a essa caixa para atuar como um proxy estúpido e encaminhar quaisquer solicitações recebidas na porta 443 para um servidor IIS específico. Eu suspeito que o iptables possa oferecer uma solução, mas faz muito tempo que eu escrevi uma regra do iptables. Alguns hackers iniciais me levaram até

iptables -F
iptables -A INPUT -p tcp -m tcp --sport 443 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to 10.0.0.241:443
iptables -t nat -A POSTROUTING -p tcp -d 10.0.0.241 --dport 443 -j MASQUERADE
iptables -A INPUT -j LOG --log-level 4 --log-prefix 'PreRouting '
iptables -A OUTPUT -j LOG --log-level 4 --log-prefix 'PostRouting '
iptables-save > /etc/iptables.rules

(onde 10.0.0.241 é a caixa do IIS que hospeda o site HTTPS), mas isso não parece estar funcionando.

Para esclarecer - percebo que há implicações de segurança sobre o proxy / cache HTTPS - tudo o que estou procurando é um encaminhamento de tráfego IP completamente transparente. Eu não preciso descriptografar, armazenar em cache ou inspecionar qualquer um dos pacotes; Eu só quero que qualquer coisa na porta 443 flua através da caixa do Linux para a caixa IIS atrás dela, como se a caixa do Linux não estivesse lá.

Qualquer ajuda recebida com gratidão ...

EDIT: Incluído o script completo de configuração do iptables.

    
por Dylan Beattie 26.10.2012 / 16:33

2 respostas

2

Aqui está o que você deve fazer para redirecionar o tráfego de um host para outro em uma porta específica, observe que TODOS os pedidos para a porta 443 serão redirecionados para o host que você está apontando no iptables:

1) Abra a porta 443 para o tráfego:

iptables -A INPUT -p tcp -m tcp --sport 443 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT

2) Adicione regras específicas para redirecionar dados de entrada e saída

iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to ip.listenig.to:443
iptables -t nat -A POSTROUTING -p tcp -d ip.listening.to --dport 443 -j MASQUERADE

3) Alternativamente, você pode redirecionar o tráfego proveniente de um host específico, como:

 iptables -t nat -A PREROUTING -s ip._not_.listening -p tcp --dport 443 -j DNAT --to-destination ip.listening.to:443

(Esta etapa é especialmente útil caso você queira manipular a porta 443 em outro cliente em sua rede)

4) Informe ao kernel que você aceitará o encaminhamento de ip

edite o arquivo /etc/sysctl.conf (ou aquele que se adapte à sua distro) e anexe (ou altere)

net.ipv4.ip_forward=1

e, em seguida, emita o comando

sysctl -p /etc/sysctl.conf (or the file that suits your distro)

Espero que tenha ajudado

    
por 26.10.2012 / 17:45
1

Ok, aqui está a solução completa - isso é no 12.04 LTS (GNU / Linux 3.2.0-23-genérico x86_64)

Primeiro, tive que habilitar o encaminhamento de porta ip4 editando /etc/sysctl.conf e removendo o comentário da linha:

net.ipv4.ip_forward=1

Então eu tive que executar /sbin/sysctl -p para fazer essa alteração entrar em vigor.

Próximo para configurar (e capturar) o script de regras iptables :

# flush any existing rules 
iptables -F
# Configure iptables to allow incoming traffic on port 443
iptables -A INPUT -p tcp -m tcp --sport 443 -j ACCEPT
# Configure iptables to allow outgoing traffic on port 443
iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
# Configure iptables to NAT incoming 443 traffic to 10.0.0.241:443
iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to 10.0.0.241:443
# Configure iptables to route responses from these requests back to the original requester
iptables -t nat -A POSTROUTING -p tcp -d 10.0.0.241 --dport 443 -j MASQUERADE
# Dump the ruleset and save it into the file /etc/iptables.rules
iptables-save > /etc/iptables.rules

Finalmente, para fazer a mudança persistir durante as reinicializações, tive que editar o / etc / network / interfaces:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
    address 10.0.0.240
    netmask 255.255.255.0
    network 10.0.0.0
    broadcast 10.0.0.255
    gateway 10.0.0.1
    # dns-* options are implemented by the resolvconf package, if installed
    dns-nameservers 192.168.0.11
    dns-search spotmain.com

    # The next line was added to enable iptables rules on system restart
    pre-up iptables-restore < /etc/iptables.rules
    
por 29.10.2012 / 10:49