Перенаправление трафика с помощью PF вместе с Internet Sharing

Краткая версия:

Как перенаправить весь трафик с порта 80/443 en2 на 127.0.0.1:8080, если я включил общий доступ к Интернету в OS X Mountain Lion (10.8)?

Немного фона:

Я работаю над магистерской диссертацией, в которой буду оценивать коммуникационную безопасность для различных приложений для смартфонов. Я решил использовать свой новый MacBook Air в качестве маршрутизатора.

Я подключил свой Air к Интернету с помощью USB Ethernet и настроил общий доступ к Интернету для своего Wi-Fi. Это прекрасно работает. Я могу подключить другие устройства к своему Air через Wi-Fi и получить доступ к Интернету. Большой!

Теперь я хочу перехватить этот трафик и модифицировать его на лету. Я решил, что для этого мне нужен прокси-сервер, но мне нужен прозрачный, где мне не нужно выполнять какие-либо настройки на устройстве. Я обнаружил, что mitmproxy предлагает именно эти функции. Итак, он работает на 127.0.0.1:8080 и готов к перехвату трафика.

К сожалению, я застрял, пытаясь перенаправить трафик, поступающий от Wi-Fi (en2) через порты 80 и 443, на 127.0.0.1:8080. Документы mitmproxy предлагают конфигурацию для pfctl, но она не работает. Я заметил, что Apple предоставила некоторую конфигурацию для общего доступа к Интернету, включив NAT. Поэтому, если я не использую их конфигурацию, общий доступ к Интернету перестанет работать. И когда я пытаюсь добавить строки rdr в их конфиг, это не действует (пробовал несколько мест в файле /etc/pf.conf). Мой трафик просто проходит в интернет, минуя mitmproxy.

Ответы (2)

Я нашел ответ.

Я загрузил свои правила как часть привязки com.apple/100.InternetSharing/natpmp, которая используется для общего доступа к Интернету.

В файле mitm.pf.confесть правила:

rdr on bridge0 proto tcp from any to any port 80 -> 127.0.0.1 port 8080
rdr on bridge0 proto tcp from any to any port 443 -> 127.0.0.1 port 8080`

Загрузите его с помощью якоря общего доступа к Интернету:

sudo pfctl -a com.apple/100.InternetSharing/natpmp -f mitm.pf.conf

В аналогичной ситуации я использовал брандмауэр для перенаправления трафика с одной сетевой карты на прокси. Вы можете использовать что-то вроде этого:

$ sudo ipfw add fwd 127.0.0.1,8080 tcp from not me to any 80 in via en1
$ sudo ipfw add fwd 127.0.0.1,8080 tcp from not me to any 443 in via en1

Если бы у меня работало нормально.

Вы также можете использовать бесплатную программу WaterRoof в качестве графического интерфейса для настройки брандмауэра. Он ничего не добавляет к команде ipsw, он просто упрощает доступ ко всем параметрам.

Эта страница очень помогла мне в настройке моей конфигурации:

http://lucumr.pocoo.org/2013/1/6/osx-wifi-proxy/

Я так пробовал, но почему-то не получилось. Это полностью сломало Internet Sharing. Кроме того, насколько я понимаю, Apple отказывается от ipfw из FreeBSD в пользу pf из OpenBSD.
Этот ответ работает только для старых Mac. Apple отказалась от IPFW.