Я организовал прозрачный прокси-сервер Squid, который прослушивает порт 3128 на localhost, чтобы заблокировать некоторые веб-сайты.
Я протестировал прокси с помощью Firefox, и он работает.
Затем я запустил это, надеясь перенаправить все http-запросы на прокси:
sudo iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports 3128
К сожалению, ничего не происходит. Другие браузеры в моей системе, похоже, не используют прокси. Я не хочу настраивать каждый браузер, также использовать прокси.
sudo iptables -L
показывает, что правила не назначены.
Я нахожусь на Ubuntu 13.04 и использую USB-модем 3G (ppp0
) для подключения к Интернету. Любой совет приветствуется!
Я думаю, что Вы пропускаете целевой порт, пробуете следующее
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128
Без dport Вы передаете трафик с целевым портом 3128 к локальному порту 3128. То, что Вы хотите, является трафиком с целевым портом 80 вперед к локальному порту 3128.
Кроме того, для показа туземных правил использовать
iptables -t nat -L
Однако вышеупомянутые правила не будут работать на прозрачную установку прокси на той же машине браузера, потому что цепочка PREROUTING изменяет packges прежде, чем направить от удаленного клиента, и это ничего не сделает для локально сгенерированных пакетов. Таким образом мы должны использовать ВЫХОДНУЮ цепочку для пакетов, локально сгенерированных, которые идут из системы.
Попробуйте следующее вместо этого
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
, это не будет работать, потому что правила будут, также поймал исходящий трафик прокси-сервера, и закончите в цикле.