Mam zestaw Linux z dwiema kartami sieciowymi do kontroli ruchu przechodzącego przez port 80. Jedna karta służy do wychodzenia do Internetu, druga podłączona jest do przełącznika sieciowego. Chodzi o to, aby móc sprawdzić cały ruch HTTP i HTTPS na urządzeniach podłączonych do tego przełącznika w celu debugowania.
Napisałem następujące reguły dla 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
W dniu 192.168.2.1:1337 mam przezroczysty serwer proxy HTTP używający Charlesa ( http://www.charlesproxy.com/ ) do nagrywania.
Dla portu 80 wszystko jest w porządku, ale kiedy dodam podobne reguły dla portu 443 (SSL) wskazującego na port 1337, pojawia się błąd dotyczący nieprawidłowej wiadomości przez Charlesa.
Używałem proxy SSL na tym samym komputerze wcześniej z Charlesem ( http://www.charlesproxy.com/documentation/proxying/ssl-proxying/ ), ale z jakiegoś powodu nie udało mi się to zrobić w sposób transparentny. Niektóre zasoby, które przeglądałem w Google, mówią, że to niemożliwe - jestem gotów przyjąć to jako odpowiedź, jeśli ktoś może wyjaśnić, dlaczego.
Uwaga: mam pełny dostęp do opisanego zestawu, w tym wszystkich klientów podłączonych do podsieci - dzięki czemu mogę akceptować certyfikaty z podpisem własnym autorstwa Charlesa. Rozwiązanie nie musi być specyficzne dla Charlesa, ponieważ teoretycznie wystarczy dowolny przezroczysty serwer proxy.
Dzięki!
Edycja: Po odrobinie zabawy mogłem go uruchomić dla konkretnego hosta. Kiedy modyfikuję moje iptables do następującego (i otwieram 1338 w charles dla odwrotnego proxy):
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
Jestem w stanie uzyskać odpowiedź, ale bez hosta docelowego. W odwrotnym proxy, jeśli tylko sprecyzuję, że wszystko od 1338 przechodzi do konkretnego hosta, który chciałem trafić, odpowiednio potrząsa ręką i mogę włączyć proxy proxy w celu sprawdzenia komunikacji.
Konfiguracja jest mniej niż idealna, ponieważ nie chcę zakładać, że wszystko z 1338 idzie do tego hosta - masz pojęcie, dlaczego host docelowy jest usuwany?
Dzięki jeszcze raz