SQUID+WCCP+TPROXY = прозрачный прокси! |
Однажды перед нами стала задача просматривать, при необходимости, на каких сайтах околачиваются наши пользователи. Логика подсказывала, что нужен прокси сервер, но здравый смысл намекал, что настроить каждому пользователю браузер, антивирус и прочие программы на работу с прокси, при количестве пользователей более 1000 — ни-за-что! Да ещё была проблема — выпускать такое количество пользователей под одним внешним IP-адресом в интернет — дело не благородное. А ещё хотелось, чтобы всё это было бесплатно. И решение всё-таки нашлось — прозрачный прокси.
Здесь я расскажу вам как настроить связку SQUID+WCCP+TPROXY, какие у неё плюсы и минусы. Итак, немного теории:
Задачи:
Решение:Для отслеживания перемещения пользователей по всемирной сети можно использовать прокси сервер. Наиболее популярным является Squid.Проблема: Для работы через прокси каждый пользователь должен в настройках браузера и других программ, работающих с интренет, указать ip-адрес и порт прокси сервера, а так-же логин и пароль. Чтобы избежать настройки программ пользователей для работы с прокси, можно использовать прозрачное проксирование.
Прозрачное проксирование на Squid можно осуществлять в 2-х режимах:
И в первом и во втором случае пользователи не догадываются о существовании прокси и им не нужно настраивать браузеры и прочие программы для работы в интернет. Однако в первом случае запросы от пользователя поступают на Squid и IP-адрес пользователя подменяется на IP-адрес Squid'a. Внешний мир будет считать что все запросы идут от одного компьютера (squid'a). Во втором случае, запросы от пользователя проходят через Squid прозрачно и на выходе Squid запросы продолжают свой путь с IP-адресом клиента, а не Squid'a. Зачем это нужно? Например, все пользователи сети имеют приватные адреса и натятся на пограничном файерволе (см. рисунок ниже). Причём каждая отдельная подсеть натится в свой публичный IP. Если будет использоваться первый способ, то все подсети будут натиться в один публичный IP, т.к. на firewall будут приходить запросы от одного о того же IP Squid'a. При способе 2 на firewall запросы приходят от squid но с адресами настоящих отправителей и каждая подсеть продолжает натится в свой публичный IP. Как это сделать? Читайте дальше! Нам понадобится:
Настройка ядра LinuxПриведу настройку TPROXY на примере CentOS 5.4. Для поддержки TProxy ядро нужно перекомпилировать. Для этого:
GREТеперь необходимо пошаманить с gre интерфейсом. Дело в том, что когда маршрутизатор перенаправляет траффик пользователя на Squid, то протокол wccp добавляет к ip-пакету gre заголовок (gre инкапсуляция). Для того, чтобы Linux сервер смог принять и обработать ip-пакет, необходимо на нём создать gre-интерфейс, который будет отрезать от пакетов gre заголовок. Внимание! На маршрутизаторе никаких gre настраивать не нужно!!!
На этом настройка gre интерфейса заканчивается. SquidПриступим к установке Squid. Скачайте и установите Squid 3.1.x.x из исходников или из rpm пакета. Если будете компилировать сами, при конфигурации используйте опции: ./configure --enable-linux-netfilter Конфигурация:Скопируйте файл конфигурации squid.conf поставляемый с программой в squid.conf.back: cp /usr/local/squid/etc/squid.conf /usr/local/squid/etc/squid.conf.back Удалите всё из squid.conf: cat /dev/null > squid.conf Запишите следующую конфигурацию в squid.conf: acl localhost src 127.0.0.1/32 Внимание! Этой конфигурации достаточно чтобы squid заработал в прозрачном режиме, но её недостаточно для полноценной работы Прокси-сервера. Необходимо добавить опции кеширования и прочие необходимые для Вас настройки Squid! Squid чрезвычайно гибок и описание его настройки займёт парочку больших статей. Iptables
Настройка iptables:iptables -t mangle -F Настройка таблицы маршрутизации LinuxЕщё одним важным шагом является настройка таблицы маршрутизации линукса, для того, чтобы полученные пакеты перенаправлялись на TProxy. Для этого выполните: ip rule add fwmark 1 lookup 100 Настройка маршрутизатора cisco:Настройка маршрутизатора проста: создайте пару аксес листов такого типа: conf t Обратите внимание, оба листа очень похожи, но первый список определяет запросы от каких пользователей будут перенаправляться на Squid, а второй список определяет ответы из внешнего мира для каких пользователей будут так же перенаправляться на Squid. Далее включаем wccp: ip wccp 80 redirect-list wccp Теперь нужно включить перенаправление на нужных интерфейсах. В нашем случае (см. рисунок выше) на интерфейсе f0/2: interface f0/2 а на интерфейсе f0/1: interface f0/1 Если хотите перенаправлять всех подряд, аксес листы создавать не нужно. Запускаем в работу:Запустите Squid. Для этого: /usr/local/squid/sbin/squid -z Зайдите на маршрутизатор, и посмотрите состояние wccp: show ip wccp Дождитесь пока значение «Number of Cache Engines» и «Number of routers» не станет равно 1: Global WCCP information: Откройте какую-либо страницу в интернете. Если значение «Total Packets Redirected» увеличивается, значит всё работает. Зайдите на www.2ip.ru и проверьте свой ip. Если он отличен от внешнего ip адреса, в который транслируется приватный ip адрес Squid'a значит у вас всё получилось!!! Как это работает:Это наиболее важная глава, которой мне очень не хватало, когда я всё это пытался настроить, потому что знание как что работает, решает половину проблем. Итак, как это работает? Когда вы запускаете Squid с настроенным wccp, то он начинает слать служебные wccp пакеты на указанный в его конфиге ip-адрес wccp маршрутизатора (10.80.2.1). Если маршрутизатор доступен, и на нём так-же включён wccp, то они между собой договариваются, и маршрутизатор регистрирует у себя обнаруженный web-кеш сервер (10.80.2.2). ip wccp 80 redirect out ), и, если адрес отправителя попадает под аксес лист wccp, и пакет адресован на 80 порт назначения, то пакет перенаправляется по gre тунелю на squid. При этом ip адрес источника и получателя не изменяется. Так как ip пакет имеет gre заголовок, то он попадает на интерфейс gre1 Linux сервера.На интерфейсе gre1 присутствуют только входящие пакеты от клиента к публичному web-серверу. И входящие пакеты от публичного сервера, к клиенту. Вы никогда не увидите здесь исходящих пакетов. На Lunux сервере Squid, в нашем случае, слушает 2 порта 3128 (squid в прозрачном режиме) и 3129 (squid в режиме TProxy). Полученные сервером пакеты обрабатываются правилами iptables, и в соответствии с ними, сначала маркируются, а затем перенаправляются на squid с TPROXY на порту 3129. Далее Squid от имени пользователя отправляет пакет на публичный web-сервер в интернет через интерфейс eth0. От публичного web-сервера ответ приходит на интерфейс маршрутизатора f0/2, где включено перенаправление входящих пакетов (ip wccp 90 redirect in), и если адрес получателя подходит под аксес лист wccp_to_inside, то пакет, по gre туннелю перенаправляется на Squid на интерфейс gre1. Здесь, если это настроено в конфиге Squid'a, происходит кеширование полученной информации и затем через интерфейс eth0, Squid отправляет пакет пользователю. НедостаткиПрактически у всего есть свои недостатки. К наиболее весомым недостаткам данной связки можно отнести:
Trouble ShootingИспользуйте программу tcpdump для отслеживания прохождения пакетов. tcpdump -i gre1 или так: tcpdump -i eth0 src host 10.26.5.22 and dst host ya.ru Просмотрите правила iptables, счетчик пакетов должен увеличиваться. Вы должны увидеть что-то вроде этого: iptables -t mangle -vL P.S. Я не претендую на гениальность мысли, просто собрал всё в кучку из разных источников и описал то, с чем мне пришлось реально столкнуться на практике. В статье могут попадаться и неточности, прошу сильно не винить. Через прозрачный прокси у нас проходит сейчас около 1000 пользователей. Для отчётности используется sams 2.0. Надеюсь кому-нибудь статья будет полезной. Успехов вам! :-) Используемый материал:
|
Добавить комментарий
?
cpu
downloads
ethernet
hdmi
linux
microsoft
soft
usb
usb 2.0
wi-fi
windows
windows 7
windows xp
xp
блок питания
бп
вендор
вентилятор
вес
вид
видеокарта
вирус
возникает
возникла
восстанавливать системы
восстановление
выдаёт
габариты
девайс
драйвер
жесткий диск
звук
избавиться
интерфейс
кабель
как
как быть
клавиатура
компьютер
материнская плата
наушники
не могу
не получается
не работает
невозможно
нельзя
ноутбук
обзор
озу
операционная система
описание
ос
особенности
отзывы
отказано в доступе
открыть
охлаждение
ошибка
параметры
переустановили
переустановка
питание
повреждение
подключение
помогите
порт
появилась
проблема
программа
программы
процессор
размеры
разъём
реестр
сбой
сеть
система
скачать
сообщение
сообщение об ошибке
софт
сравнение
сравнения
стоимость
тестирование
тесты
технология
убрать
удалить
управление
файл
характеристика
характеристики
цвет
цена
частота
чипсет
что делать
шум