Назад | Перейти на главную страницу

Могу ли я использовать iptables на своем сервере Varnish для пересылки HTTPS-трафика на определенный сервер?

Мы используем Varnish в качестве внешнего веб-кеша и балансировщика нагрузки, поэтому у нас есть сервер Linux в нашей среде разработки, на котором работает Varnish с некоторыми базовыми правилами кэширования и балансировки нагрузки на паре веб-серверов Windows 2008 IIS.

У нас есть правило DNS с подстановочными знаками, которое указывает * .development на это поле Varnish, поэтому мы можем просматривать http: //www.mysite.com.development, http: //www.othersite.com.developmentи т. д. Проблема в том, что, поскольку Varnish не может обрабатывать HTTPS-трафик, мы не можем получить доступ https: //www.mysite.com.development/

Для разработки / тестирования нам не нужно никакого ускорения или балансировки нагрузки - все, что мне нужно, это указать этому ящику, чтобы он действовал как тупой прокси и перенаправлял любые входящие запросы на порт 443 на определенный сервер IIS. Я подозреваю, что iptables может предложить решение, но я давно не написал правило iptables. Некоторые начальные взломы довели меня до

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

(где 10.0.0.241 - это поле IIS, на котором размещен веб-сайт HTTPS), но, похоже, это не работает.

Чтобы уточнить - я понимаю, что проксирование / кеширование HTTPS связано с проблемами безопасности - все, что мне нужно, это полностью прозрачная пересылка IP-трафика. Мне не нужно расшифровывать, кэшировать или проверять какие-либо пакеты; Я просто хочу, чтобы что-нибудь на порте 443 проходило через ящик Linux к ящику IIS за ним, как будто ящика Linux там и не было.

Любая помощь с благодарностью получена ...

РЕДАКТИРОВАТЬ: Включен полный сценарий конфигурации iptables.

Вот что вам нужно сделать, чтобы перенаправить трафик с одного хоста на другой в определенном порту, обратите внимание, что КАЖДЫЙ запрос для порта 443 будет перенаправлен на хост, который вы указываете на iptables:

1) Откройте порт 443 для трафика:

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

2) Добавьте определенные правила для перенаправления входящих и исходящих данных

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) В качестве альтернативы вы можете перенаправить трафик, исходящий от определенного хоста, например:

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

(Этот шаг особенно полезен, если вы хотите обрабатывать порт 443 в другом клиенте в вашей сети)

4) Сообщите ядру, что вы примете IP-переадресацию

редактировать файл /etc/sysctl.conf (или тот, который подходит вашему дистрибутиву) и добавить (или изменить)

net.ipv4.ip_forward=1

а затем введите команду

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

Я надеюсь это помогло

Хорошо, вот полное решение - это 12.04 LTS (GNU / Linux 3.2.0-23-generic x86_64)

Во-первых, мне пришлось включить переадресацию портов ip4, отредактировав /etc/sysctl.conf и раскомментировав строку:

net.ipv4.ip_forward=1

Тогда мне пришлось бежать /sbin/sysctl -p чтобы это изменение вступило в силу.

Далее для настройки (и захвата) 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

Наконец, чтобы изменение сохранялось при перезагрузках, мне пришлось отредактировать / 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