Правило DNAT IPTables для локального веб-сервера не работает с localhost?

Правило DNAT IPTables для локального веб-сервера не работает с localhost?

У меня есть Linux-бокс, работающий как точка беспроводного доступа. Беспроводные клиенты подключаются и просматривают веб-страницы. Я разрешаю только порт 80.

Есть определенные сайты, которые я хотел бы заблокировать, но не путем сброса пакета, а путем перенаправления их на страницу blocked.html, обслуживаемую локальным веб-сервером.

У меня два сетевых адаптера. Тот, что со стороны интернета, привязан к 10.0.2.15. Если я создам правило DNAT для перенаправления трафика на мой веб-сервер с помощью сетевого адаптера интернета, страница возвращается. Если я перенаправляю на 127.0.0.1, то нет.

Почему это?

Вот моя конфигурация IPTables:

# iptables -S
-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT DROP
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -p tcp -m tcp --sport 80 -j ACCEPT 
-A OUTPUT -o lo -j ACCEPT 
-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A OUTPUT -p tcp -m tcp --sport 80 -j ACCEPT 
# iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-N block-chain
-A PREROUTING -j block-chain 
-A POSTROUTING -o eth1 -j MASQUERADE 
# THIS WILL NOT RETURN THE PAGE TO THE CLIENT
-A block-chain -d 206.190.36.45/32 -p tcp -j DNAT --to-destination 127.0.0.1:80 
# THIS WILL
-A block-chain -d 206.190.36.45/32 -p tcp -j DNAT --to-destination 10.0.2.15:80 
-A block-chain -j RETURN 

решение1

Для localhost вам нужно использовать REDIRECT вместо DNAT. В вашем примере:

-A block-chain -d 206.190.36.45/32 -p tcp -j REDIRECT --to-ports 80

решение2

-j DNAT --to-destination 127.0.0.1:80перенаправляет клиентов на поиск их собственного адреса обратной связи для веб-страницы.

Придерживайтесь-A block-chain -d 206.190.36.45/32 -p tcp -j DNAT --to-destination 10.0.2.15:80

Связанный контент