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
, это не будет работать, потому что правила также перехватят исходящий трафик прокси-сервера и окажутся в цикле.