Iptables PREROUTING para redirecionar a porta 80 através do verniz que não funciona

1

Eu tento usar o iptables para manter o Varnish na porta 8080 e o Apache na porta 80 e apenas prerote tudo que estiver na porta 80 para a porta 8080. Não está funcionando. Quando eu ligo para o site na porta 8080, tudo é armazenado em cache e está bem, quando eu chamo na porta 80, acabei de receber a resposta normal do Apache.

I siga este guia.

O Varnish e o Apache parecem estar configurados corretamente, pois eu recebo uma versão em cache na porta 8080.

No passo 1, adicionei a regra ao iptables:

#iptables -t nat  -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080

Quando eu faço uma chamada

#iptables -L -t nat

para ver se funcionou, recebo esta saída:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8080

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination     

A saída do iptables-save:

# Generated by iptables-save v1.4.12 on Mon Oct 27 23:24:03 2014
*raw
:PREROUTING ACCEPT [22819:7234594]
:OUTPUT ACCEPT [32677:42807068]
COMMIT
# Completed on Mon Oct 27 23:24:03 2014
# Generated by iptables-save v1.4.12 on Mon Oct 27 23:24:03 2014
*nat
:PREROUTING ACCEPT [40:2416]
:POSTROUTING ACCEPT [64:3751]
:OUTPUT ACCEPT [64:3751]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
COMMIT
# Completed on Mon Oct 27 23:24:03 2014
# Generated by iptables-save v1.4.12 on Mon Oct 27 23:24:03 2014
*mangle
:PREROUTING ACCEPT [22821:7234698]
:INPUT ACCEPT [22821:7234698]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [32696:42835416]
:POSTROUTING ACCEPT [32696:42835416]
COMMIT
# Completed on Mon Oct 27 23:24:03 2014
# Generated by iptables-save v1.4.12 on Mon Oct 27 23:24:03 2014
*filter
:INPUT ACCEPT [22821:7234698]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [32696:42835416]
COMMIT
# Completed on Mon Oct 27 23:24:03 2014

Então, tudo bem. O que estou perdendo?? Obrigado!

    
por Øle Bjarnstroem 27.10.2014 / 23:17

1 resposta

2

Você deve estar bem - suponho que esteja testando o redirecionamento da máquina que está executando o verniz.

No meu servidor rodando o Apache, eu posso redirecionar as chamadas do 8080 para a porta 80 (reverso do que você está tentando).

No servidor 10.3.1.10:

Para testar o meu apache existe na porta 80 eu uso o netcat para obter a página web:

root@hp:/etc/apt# nc 10.3.1.10 80
get
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>501 Not Implemented</title>
</head><body>
<h1>Not Implemented</h1>
<p>get to /index.html not supported.<br />
</p>
<hr>
<address>Apache/2.4.7 (Ubuntu) Server at 127.0.1.1 Port 80</address>
</body></html>
root@hp:/etc/apt#

Isso é bom - agora adicione meu redirecionamento:

iptables -t nat  -A PREROUTING -i eth0 -p tcp --dport 8080 -j REDIRECT --to-ports 80

Isto especifica em eth0, protocolo tcp destino 8080 redirecionado para 80.

E teste o netcat na porta 8080:

root@hp:/etc/apt# nc 10.3.1.10 8080
root@hp:/etc/apt#

Sem saída - não conectou, mas nada está errado e o iptables não mostra nenhum tráfego no meu redirecionamento (colunas pkts e bytes para a regra):

root@hp:/etc/apt# iptables -L -t nat -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 REDIRECT   tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 redir ports 80

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Então, o que aconteceu, nada passou pela minha regra - mas eu sou bom.

Agora vou para outra máquina (10.3.1.5) e executo o mesmo comando netcat:

root@firewall:~# nc 10.3.1.10 8080
get
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>501 Not Implemented</title>
</head><body>
<h1>Not Implemented</h1>
<p>get to /index.html not supported.<br />
</p>
<hr>
<address>Apache/2.4.7 (Ubuntu) Server at 127.0.1.1 Port 80</address>
</body></html>

Isso parece funcionar - verificando meu tráfego em .10 com iptables:

root@hp:/etc/apt# iptables -L -t nat -n -v
Chain PREROUTING (policy ACCEPT 4 packets, 898 bytes)
 pkts bytes target     prot opt in     out     source               destination
    2   120 REDIRECT   tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 redir ports 80

Chain INPUT (policy ACCEPT 6 packets, 1018 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Eu vejo 2 pacotes, 120 bytes (eu executei o netcat duas vezes).

O redirecionamento não funcionará com o redirecionamento da máquina porque você não está chegando na eth0.

    
por 31.10.2014 / 13:56