Iptables PREROUTING для перенаправления порта 80 через лак, не работающий

Я пытаюсь использовать iptables, чтобы сохранить Лак на порте 8080 и Apache на порте 80 и просто предварительно направить все входящее в порте 80 для портирования 8080. Это не работает. Когда я называю сайт на порте 8080, все кэшируется и прекрасно, когда я называю его на порте 80, я просто получаю нормальный ответ Apache.

Я следую этому руководству.

Таким образом, Лак и Apache, кажется, настроены правильно, так как я получаю кэшированную версию на порте 8080.

На шаге 1 я просто добавляю правило к iptables:

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

Когда я затем звоню

#iptables -L -t nat

чтобы видеть, работало ли это, я получаю этот вывод:

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     

Вывод от iptables-сохранения:

# 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

Таким образом, это должно быть прекрасным. Что я пропускаю??Спасибо!

1
задан 28 October 2014 в 00:26
1 ответ

Все должно быть в порядке - я предполагаю, что вы тестируете перенаправление с машины, на которой запущен Varnish.

На моем сервере с Apache я могу перенаправить 8080 вызовов на порт 80 ( обратное тому, что вы пытаетесь).

На сервере 10.3.1.10:

Чтобы проверить, что мой apache существует на порте 80, я использую netcat для получения веб-страницы:

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#

Это хорошо - теперь добавьте мое перенаправление :

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

Это указывает в eth0, протокол tcp destination 8080 redirect to 80.

И протестируйте netcat на порту 8080:

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

Нет вывода - не подключился, но все в порядке, и iptables не показывает трафик на моем перенаправление (столбцы pkts и bytes для правила):

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

Итак, что произошло, ничего не произошло, хотя мое правило - но я в порядке.

Теперь я перехожу на другой компьютер (10.3.1.5) и запускаю ту же команду 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>

Кажется, это работает - проверка моего трафика на .10 с помощью 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

Я вижу 2 пакета по 120 байт (я дважды запускал netcat).

Перенаправление не будет работать с машины, выполняющей перенаправление, потому что вы не войдете в eth0.

2
ответ дан 3 December 2019 в 21:11

Теги

Похожие вопросы