У меня есть linux box с двумя сетевыми картами для проверки трафика, проходящего через порт 80. Одна карта используется для выхода в Интернет, другая подключена к сетевому коммутатору. Суть в том, чтобы иметь возможность проверять весь трафик HTTP и HTTPS на устройствах, подключенных к этому коммутатору, в целях отладки.
Я написал следующие правила для iptables:
nat
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.2.1:1337
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 1337
-A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
192.168.2.1:1337 у меня есть прозрачный http-прокси, использующий для записи Чарльза ( http://www.charlesproxy.com/ ).
Все хорошо для порта 80, но когда я добавляю аналогичные правила для порта 443 (SSL), указывающего на порт 1337, я получаю сообщение об ошибке с неверным сообщением через Чарльза.
Я использовал SSL-прокси на том же компьютере раньше с Чарльзом ( http://www.charlesproxy.com/documentation/proxying/ssl-proxying/ ), но по какой-то причине мне не удалось сделать это прозрачно. Некоторые ресурсы, которые я гуглил, говорят, что это невозможно - я готов принять это как ответ, если кто-то может объяснить почему.
Как примечание, у меня есть полный доступ к описанной настройке, включая все клиенты, подключенные к подсети, так что я могу принять самозаверяющие сертификаты Чарльза. Решение не должно быть специфичным для Чарльза, поскольку теоретически подойдет любой прозрачный прокси.
Благодарность!
Редактировать: немного поиграв, я смог заставить его работать на конкретном хосте. Когда я изменяю свои iptables следующим образом (и открываю 1338 в charles для обратного прокси):
nat
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.2.1:1337
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 1337
-A PREROUTING -i eth1 -p tcp -m tcp --dport 443 -j DNAT --to-destination 192.168.2.1:1338
-A PREROUTING -i eth1 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 1338
-A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
Я могу получить ответ, но без хоста назначения. В обратном прокси-сервере, если я просто указываю, что все, начиная с 1338, направляется на конкретный хост, на который я хотел попасть, он выполняет рукопожатие правильно, и я могу включить прокси-сервер SSL для проверки связи.
Настройка менее чем идеальна, потому что я не хочу предполагать, что все, начиная с 1338, отправляется на этот хост - есть идеи, почему хост хоста удаляется?
еще раз спасибо