iptables не перенаправляет трафик http на мой прокси Squid!

Я организовал прозрачный прокси-сервер Squid, который прослушивает порт 3128 на localhost, чтобы заблокировать некоторые веб-сайты.

Я протестировал прокси с помощью Firefox, и он работает.

Затем я запустил это, надеясь перенаправить все http-запросы на прокси:

sudo iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports 3128

К сожалению, ничего не происходит. Другие браузеры в моей системе, похоже, не используют прокси. Я не хочу настраивать каждый браузер, использовать прокси либо.

sudo iptables -L не показывает назначенные правила.

Я на Ubuntu 13.04, и использую 3G USB-модем (ppp0) для подключения к интернету. Любой совет приветствуется!

1 ответ

Решение

Я думаю, что вы пропустили порт назначения, попробуйте следующий

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128

Без dport вы пересылаете трафик с порта назначения 3128 на локальный порт 3128. То, что вам нужно, это трафик с портом назначения 80, направленный на локальный порт 3128.

Кроме того, чтобы показать правила nat, используйте

iptables -t nat -L

Однако вышеприведенные правила не будут работать для настройки прозрачного прокси-сервера на том же компьютере браузера, поскольку цепочка PREROUTING изменяет пакеты перед маршрутизацией от удаленного клиента и ничего не делает для локально сгенерированных пакетов. Таким образом, мы должны использовать цепочку OUTPUT для локально генерируемых пакетов, которые выходят из системы.

Попробуйте следовать вместо

iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner proxy --dport 80 -j REDIRECT --to-port 3128

Он будет перенаправлять трафик только для тех процессов, которые принадлежат proxy пользователь.

Без -m owner ! --uid-owner proxy, это не будет работать, потому что правила также перехватят исходящий трафик прокси-сервера и окажутся в цикле.

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