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

7

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

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

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

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

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

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

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

    
задан Naveen 13.04.2013 в 07:24
источник

1 ответ

12

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

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

    
ответ дан John Siu 15.04.2013 в 08:42
источник

Ознакомьтесь с другими вопросами по меткам