Проблемы с настройкой переадресации портов для прозрачного прокси в Mac OS X

Я пытаюсь настроить прозрачный прокси на моем Mac OS X Lion (10.7.5), чтобы я мог использовать mitmproxy (для перехвата трафика SSL от приложений Android). Я выполнил шаги в документации mitmproxy для настройки переадресации портов с помощью pf на Mac OS X, и все они прошли без ошибок:

$ sudo sysctl -w net.inet.ip.forwarding=1
Password:
net.inet.ip.forwarding: 0 -> 1

$ sudo pfctl -f pf.conf
No ALTQ support in kernel
ALTQ related functions disabled

$ sudo pfctl -e
No ALTQ support in kernel
ALTQ related functions disabled
pf enabled

Но, похоже, это не имело никакого эффекта. Когда я захожу на сайты в моем браузере, он делает прямой запрос и не проходит через указанный мной порт. Здесь pf.conf файл (en1 мой вайфай)

rdr on en1 inet proto tcp to any port 80 -> 127.0.0.1 port 4500
rdr on en1 inet proto tcp to any port 443 -> 127.0.0.1 port 4500

3 ответа

Спасибо, что зашли сегодня на канал IRC. Я проследил это, и основная проблема заключается в том, что правила rdr применяются к входящему трафику. Это означает, что они НЕ будут перенаправлять трафик, исходящий из самой коробки. Если подумать, это неизбежно: мы не можем отличить исходящее соединение от приложения, не являющегося mitmproxy, и исходящее соединение от самого mitmproxy. Мы можем использовать route-to, чтобы отправить трафик на lo0, а затем перенаправить его, но это вызывает бесконечный цикл, в котором собственные исходящие соединения mitmproxy также перенаправляются обратно на mitmproxy.

Поскольку я немного знаю о вашем случае использования, я бы предложил изучить способы сделать это с VirtualBox. План атаки состоит в том, чтобы настроить сеть VirtualBox в режиме моста, а затем использовать правило pf с совпадением по адресу источника, чтобы перенаправить трафик в mitmproxy. Это должно делать то, что вы хотите, а не вызывать сингулярности во времени и пространстве из-за бесконечного перенаправления.

Пожалуйста, зайдите на IRC-канал еще раз, если вам нужна дополнительная рука с этим.

Ты пробовал net.inet.ip.scopedroute=0? С http://lucumr.pocoo.org/2013/1/6/osx-wifi-proxy/:

Теперь, если вы закончите настройку выше, вы заметите, что на самом деле ничего не работает. Причиной этого является ошибка в ядре OS X, которая требует установки флага net.inet.ip.scopedroute в 0. Я не совсем уверен, что он делает, но интернет сообщает, что он нарушает общий доступ к сети через пользовательские настройки. В любом случае это исправляет переадресацию на основе ipfw, поэтому вы можете перевернуть ее с помощью sysctl:

$ sudo sysctl -w net.inet.ip.scopedroute=0

К сожалению, в OS X Lion этот флаг на самом деле не может быть удален из пространства пользователя, поэтому вам нужно установить его в качестве параметра загрузки, а затем перезагрузить компьютер. Вы можете сделать это, отредактировав файл /Library/Preferences/SystemConfiguration/com.apple.Boot.plist (продолжение...)

Вы используете порт 4500 вместо порта по умолчанию 8080. Запускаете ли вы mitmproxy со спецификацией порта?: mitmproxy -T --host -p 4500

Вы выполнили действия по установке сертификата на устройстве Android? http://mitmproxy.org/doc/certinstall/android.html

Еще одной проблемой может быть шлюз на вашем телефоне Android: Настройки - Wi-Fi - Удерживайте сеть, которую вы используете - Изменить сеть - Дополнительные параметры - Установите в качестве шлюза IP-адрес вашего компьютера с помощью mitmproxy.

Кстати, у меня то же самое предупреждение без функции ALTQ, но оно работает.

Другие вопросы по тегам