nixp.ru v3.0

23 октября 2017,
понедельник,
23:53:17 MSK

DevOps с компанией «Флант»
grisha написал 29 октября 2008 года в 11:44 (1139 просмотров) Ведет себя как мужчина; открыл 34 темы в форуме, оставил 202 комментария на сайте.

Имеется squid-havp-squidGuard-squid. Захотелось настроить прокси прозрачно, т.е. чтобы пользователь принудительно без настроек вручную в браузере выходил в инет через эту приблуду. Как я это понимаю, тут есть 2 варианта — либо в конфиге сквида просто указать

http_port 127.0.0.1:8080 transparent
http_port 127.0.0.1:3128


(по-моему сомнительный вариант, и на практике у меня не работающий, в таком случае ни havp ни squidGuard ничего не фильтруют). Покопав в инете я нашел вот это

$IPT -t nat -A OUTPUT -p tcp -m owner --uid-owner proxy -j ACCEPT
$IPT -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 8080

Выглядит вроде логично и убедительно, поэтому я решил так и сделать. Однако. Squid стал выдавать в окне браузера такое сообщение

Во время доставки URL: /
Произошла следующая ошибка:
    * Неправильный URL
Некоторые аспекты URL неправильны. Возможные проблемы:
    * Отсутствует либо неверный протокол доступа (должен быть `http://'' или похожий)
    * Отсутствует имя сервера
    * Некорректный двойной управляющий символ в URL-пути
    * Недопустимый символ в имени сервера; подчёркивания недопустимы

Причем даже если я привожу правила iptables в прежнее состояние, ошибка остается и в инет попадаю лишь если перезагружаю ос (другого решения не нашел:))

sky

Что-то ты совсем кашу наворотил…

Чтобы заворачивать на сквид, правило должно быть в PREROUTING, а не OUTPUT…

($IPT -t nat -A PREROUTING -s $net -p tcp --dport 80 -j REDIRECT --to-ports $port )

И в сквиде должно быть обязательно указано, что он должен принудительно пропускать через себя http трафик, как раз таки http_port host:port transparent

grisha

С такой настройкой

http_port 127.0.0.1:8080 transparent



IPT -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

у меня фильтрация вообще не работает. Логи говорят что вроде как прозрачно, но зачем мне такая прозрачность без самого главного.

Accepting transparently proxied HTTP connections at 127.0.0.1, port 8080, FD 16.
Accepting  HTTP connections at 127.0.0.1, port 3128, FD 17.
grisha

Попробую еще раз для уточнения… Сети нет. Мне нужно, чтобы пакеты при запросе firefox шли на порт 8080 а дальше в инет. Правильно ли я понимаю, что при

IPT -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080


что пакет приходит из инета (веб сервера) и перенаправляется на порт 8080?

Может для моего случая правильнее так

iptables -t nat -A POSTROUTING  -p tcp (--sport тут наверно указать исходящий порт браузера? 8)) -j REDIRECT --to-ports 8080


. Енто как я понимаю будет означать, что пакет с локального процесса (браузера) перенаправляется на порт 8080 и дальше идет на сетевой интерфейс а потом в инет. Исправьте если что плюс дайте кто знает хорошую справку про prerouting postrouting с примерами ;)

grisha

Работающее решение такое

$IPT -t nat -A OUTPUT -p tcp -m multiport --dports 80,443 -m owner --uid-owner proxy -j ACCEPT
$IPT -t nat -A OUTPUT -p tcp -m multiport --dports 80,443 -j REDIRECT --to-ports 3128

Добавлю только что решил отказаться от SquidGuard в пользу dansGuardian. (squid-dansguardian(от подключает к фильтрации также clamav)-интернет

ЗЫ: Зачем и кому это надо? Вряд ли кому-то. Просто хотел узнать как сделать прозрачный прокси на одиночном компе в отсутствии сети. Хотя если компом еще кто то пользуется, то можно всех заставить ходить через squid в независимости от настроек firefox.