Прозрачное проксирование или как подружить Cisco и Squid

в 17:55, , рубрики: asa, Cisco, linux, squid, wccp, системное администрирование, метки: , , ,

По роду своей деятельности, достаточно часто приходилось слышать от счастливых обладателей Cisco ASA в базовом комплекте поставки (без дополнительных дорогостоящих модулей типа CSC-SSM), в принципе как и других SOHOSMB маршрутизаторов данного производителя, нарекания на достаточно слабые возможности фильтрации URL, проксирования и других вкусностей, которые умеет делать даже самый простенький проски-сервер.

Однако из этого положения есть выход и достаточно простой. В этой статье я вам покажу пример работы связки Cisco ASA5510 + Squid, которая отлично справляется с поставленными задачами.

Будем считать что у нас есть полностью отконфигурированная ASA, являющаяся маршрутизатором в мир и простенький сервер на Linux (в моемй случае CentOS 5.6) со свежеустановленным Squid. Squid обязательно должен работать в режиме невидимого проксирования.

Связывается все это хозяйство по средствам протокола WCCP. Сильно не углубляясь, скажу в двух словах, что это протокол перенаправления контента и вэб-кеширования, разработанный компанией Cisco. WCCP работает на прошивках IOS версии 12.1 и выше и имеет две версии данного простокола: WCCPv1 и WCCPv2. Мы будем перенаправлять весь траффик, направленный в мир, на 80-й порт, используя при этом как раз вторую версию протокола, как более расширенную.

Итак, начнем.
ASA будет иметь адрес 192.168.1.254, Linux – 192.168.1.253.
Сначала создадим обьекты, на которые будут впоследствии распространятся наши ACL списки.
У нас их будет 2.
Вы спросите почему 2?
Отвечу – мы же не хотим, чтобы админский комп ходил через прокси ).

object network admin_pc host 192.168.1.10

object network local_net subnet 192.168.1.0 255.255.255.0

Соответствующие ACL:

access-list redirect_to_squid extended deny tcp object admin_pc any eq www 

access-list redirect_to_squid extended permit tcp object local_net any eq www 

И активируем сам WCCP:

wccp web-cache redirect-list redirect_to_squid password cisco

wccp interface inside web-cache redirect in

Пояснения:
1. Пароль мы указываем для того, чтобы использовать MD5 аутентификацию между циской и сквидом
2. Обязательно указываем интерфейс (inside) который будет слушать WCCP.

На этом настройка ASA закончена.
Переходим к Squid. Тут не намного сложнее.
Изменяем режим работы сквида на transparent:

http_port 3128 transparent

Далее указываем адрес нашей ASA:

wccp2_router 192.168.1.254

И необходимые настройки связки:

wccp2_forwarding_method 1

wccp2_return_method 1

wccp2_service standard 0 password=cisco

Пояснения:
1. wccp2_forwarding_method 1 означает использование GRE туннеля для форвардинга пакетов между роутером и сквидом. Маршрутизаторы Cisco используют именно этот метод, в то время как L2 свитчи используют wccp2_forwarding_method 2 – L2 Redirect.
2. wccp2_return_method 1 – практически то же самое, только это метод возвращения пакетов на роутер, если сквид вдруг решит их не обрабатывать.
3. Используем не динамический вэб-кэш (standard 0) с ранее указанным паролем на ASA

Все, на этом настройка Squid окончена. Приступаем ко второму этапу – доработка напильником.

Как упоминалось раньше, нужно поднять GRE туннель между нашими звеньями, по которому как раз и будет бегать web-cache траффик:

modprobe ip_gre

iptunnel add wccp0 mode gre remote 192.168.1.254 local 192.168.1.253 dev eth0

ifconfig wccp0 192.168.1.253 netmask 255.255.255.255 up

И обязательно заворачиваем весь траффик, приходящий по GRE туннелю на порт сквида при помощи Iptables:

-A PREROUTING -p tcp -m tcp -i wccp0 -j REDIRECT --to-ports 3128

Вот в принципе и все. Осталось тольео сохранить конфиги, создать if-up и if-down скрипты для нашего интерфейса wccp0 и перезапустить Squid.
Проверяем работу:

asa#sh ip wccp
Global WCCP information:
Router information:
Router Identifier: 192.168.1.254
Protocol Version: 2.0

Service Identifier: web-cache
Number of Service Group Clients: 1
Number of Service Group Routers: 1
Total Packets s/w Redirected: 464271
Service mode: Open
Service access-list: -none-
Total Packets Dropped Closed: 0
Redirect access-list: redirect_to_squid
Total Packets Denied Redirect: 15217
Total Packets Unassigned: 1006
Group access-list: -none-
Total Messages Denied to Group: 0
Total Authentication failures: 0
Total Bypassed Packets Received: 0

asa#sh ip wccp web-cache detail
WCCP Client information:
WCCP Client ID: 192.168.1.253
Protocol Version: 2.0
State: Usable
Initial Hash Info: 00000000000000000000000000000000
00000000000000000000000000000000
Assigned Hash Info: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Hash Allotment: 256 (100.00%)
Packets s/w Redirected: 44549
Connect Time: 1h07m
Bypassed Packets
Process: 0
Fast: 0
CEF: 0
Errors: 0

Все в порядке, все работает.
А теперь уже можно и марафет навести: прикрутить SquidGuard для более тонкой фильтрации, SARG для вывода красивой статистики начальству и т.д. кому что нравится. Но это уже другая история, если будет проявлен интерес, могу и эти процессы описать.

Спасибо за внимание, постараюсь ответить на все вопросы.

Автор: alpolle

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js