Мы используем 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