четверг, 22 января 2009 г.

Cisco Zone-Based Policy Firewall и WCCP + Squid 2.7

Рассмотрим пример конфигурирования CISCO 871 в роли Брандмауэра (Firewall) c помощью новой модели конфигурирования Zone-Based Policy Firewall (ZFW), а также настроим на использование WCCP (Web Cache Control Protocol), в качестве кэша будем использовать прокси- сервер SQUID 2.7 работающий под ОС Linux Ubuntu 8.10.
Топология сети представлена ниже.


Что имеем:
CISCO 871 – с IOS Advanced IP Service K9, если у вас отличная от этой версия IOS, то вы не сможете использовать больше одно VLAN’а. Конечно, если вы не используете спец. сборку IOS, в которой имеется поддержка VLAN.

FastEthernet 4 (FE4) – Порт подключен к сети провайдера (WAN), присвоены:

  • IP адрес: 79.XXX.XXX.XXX
  • Маска подсети: 255.255.255.252
  • Шлюз: 79.XXX.XXX.XXVLAN 1
VLAN 1

  • IP адрес: 192.168.2.2
  • Маска подсети: 255.255.255.000
VLAN 2

  • IP адрес: 192.168.77.1
  • Маска подсети: 255.255.255.000
WCCP cache – SQUID 2.7 под управлением ОС Ubuntu 8.10 располагается в DMZ зоне, на сервере имеются следующие сетевые интерфейсы:
eth0 – Порт подключен к FastEthernet 2 на Cisco, присвоены:

  • IP адрес: 192.168.77.2
  • Маска подсети: 255.255.255.000
  • Шлюз: 192.168.77.1
Mail server – CGPro под управлением ОС Ubuntu 8.10 располагается в DMZ зоне, на сервере имеются следующие сетевые интерфейсы
eth0 – Порт подключен к FastEthernet 2 на Cisco, присвоены:

  • IP адрес: 192.168.77.3
  • Маска подсети: 255.255.255.000
  • Шлюз: 192.168.77.1
Пользовательские ПК, располагающиеся в LAN зоне, подсеть 192.168.2.0/24 с шлюзом 192.168.2.2


Определились с исходными данными – теперь нам стоит определиться с тем, какими ресурсами/сервисам сети интернет и наших серверов пользователи могут использовать, а также какие сервисы будут доступны из сети интернет.
Из сети интернет пользователям доступны сервисы, работающие по следующим протоколам: aol, http, https, ftp, dns, icmp, udp, ssh. А также разрешен доступ к почтовым серверам mail.ru по протоколам smtp и pop.
Из зоны DMZ для пользователей разрешено все, если вам понадобится разрешить доступ к чему- то конкретному, вы легко сможете сделать это по аналогии.
Из зоны LAN для серверов также разрешено все. Для серверов из интернета доступны http, https, ftp, dns, icmp, udp, ssh, smtp, pop.
Из сети интернет доступны следующие сервисы из зоны DMZ: smtp и openvpn, работающий на 2000 порту по протоколу TCP.
На рисунке ниже схематично изображено использование сервисов зонами.



Приступим непосредственно к конфигурированию брандмауэра. Руководство по конфигурированию ZFW описывает порядок выполнения процедуры по конфигурированию:
  • Определить зоны (zone);
  • Определить пары зон (zone-pair);
  • Определение классов (class-map), описывающих трафик, к которому будет применяться политика на пересечении пары зон;
  • Определение политик (policy-map), применяемых к ранее созданным классам трафика (class-map);
  • Применение политик к паре зон;
  • Связывание интерфейса с зоной.
Определим зоны

В нашем случае используется три зоны: LAN – подсеть, в которой находятся пользователи, DMZ – подсеть серверов, WAN – сеть провайдера (интернет).

!
zone security lan
zone security dmz
zone security wan
!

Определим пары зон

Из рисунка 2 можно увидеть, что получается пять пар зон.

!
zone-pair security lan-dmz source lan destination dmz
zone-pair security dmz-lan source dmz destination lan
zone-pair security dmz-wan source dmz destination wan
zone-pair security wan-dmz source wan destination dmz
zone-pair security lan-wan source lan destination wan
!

Определим классы трафика


Проходящий трафик может классифицироваться по нескольким критериям: Access-group, Protocol, Class-map, Not. Трафик может быть классифицирован при условии полного совпадения всех критериев (match-all) или неполного – от одного и более (match-any).
В нашем примере пользователи в интернете имеют доступ только к почтовым серверам mail.ru, для этого нам следует определить список доступа:

!
ip access-list extended mail.ru-acl
permit ip any host 91.190.232.8
permit ip any 194.67.23.0 0.0.0.255
permit ip any 194.67.57.0 0.0.0.255
permit ip any 194.168.55.0 0.0.0.255
permit ip any 194.186.55.0 0.0.0.255
!

Также в DMZ у нас находится VPN сервер:

!
ip access-list extended openvpn-acl
permit tcp any any eq 2000
!


Следующий список доступа будет нам давать полный доступ между зонами DMZ и LAN в обоих направлениях

!
ip access-list extended lan-dmz-all-acl
permit ip any any
!

Определим классы

!
class-map type inspect match-any lan-dmz-all-class
match access-group name lan-dmz-all-acl
class-map type inspect match-any smtp-class
match protocol smtp
class-map type inspect match-all smtp-mail.ru-acl-class
match class-map smtp-class
match access-group name mail.ru-acl
class-map type inspect match-any internet-traffic-class
match protocol http
match protocol https
match protocol ftp
match protocol dns
match protocol icmp
match protocol udp
match protocol aol
match protocol ssh
class-map type inspect match-any user-allow-traffic-class
match class-map internet-traffic-class
match class-map smtp-mail.ru-acl-class
class-map type inspect match-any dns-smtp-openvpn-class
match protocol dns
match protocol smtp
match access-group name openvpn-acl
!

Определим политики

!
policy-map type inspect wan-dmz-policy
class type inspect dns-smtp-openvpn-class
pass
class class-default
drop
policy-map type inspect lan-wan-policy
class type inspect user-allow-traffic-class
inspect
class class-default
drop
policy-map type inspect dmz-wan-policy
class type inspect
internet-traffic-class
inspect
class type inspect smtp-class
inspect
class class-default
drop

policy-map type inspect lan-dmz-all-policy
class type inspect landmz-gre-class
pass
class class-default
drop
!

Применим политики к паре зон

!
zone-pair security lan-dmz source lan destination dmz
service-policy type inspect  lan-dmz-all-policy
zone-pair security dmz-lan source dmz destination lan
service-policy type inspect  lan-dmz-all-policy
zone-pair security dmz-wan source dmz destination wan
service-policy type inspect
dmz-wan-policy
zone-pair security wan-dmz source wan destination dmz
service-policy type inspect wan-dmz-policy
zone-pair security lan-wan source lan destination wan
service-policy type inspect lan-wan-policy
!

Свяжем зоны с интерфейсами

!
interface FastEthernet4
ip address 79.XXX.XXX.XXX 255.255.255.252
ip nat outside
zone-member security wan
!
interface Vlan1
ip address 192.168.2.2 255.255.255.0
ip nat inside
zone-member security lan
!
interface Vlan2
ip address 192.168.77.1 255.255.255.0
ip nat inside
zone-member security dmz
!


Конфигурация NAT’а для доступа к ресурсам DMZ:
Для почтового и VPN серверов

!
ip nat inside source static tcp 192.168.77.3 25 interface FastEthernet4 25
ip nat inside source static tcp 192.168.77.3 2000 interface FastEthernet4 2000
!


С настройками ZFW закончили, перейдем к конфигурированию WCC.

Минимальные настройки SQUID

http_access allow all
http_port 3128 transparent
wccp router 192.168.77.1
wccp version 4

Создадим GRE туннель и зададим перенаправление порта с 80 на 3128

/etc/network/wccp.up

#!/bin/bash
ip tunnel add tnl0 mode gre local 192.168.77.2 remote 192.168.77.1 ttl 255
ip link set tnl0 up
ip addr add 192.168.90.75 dev tnl0

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


Отмечу особенность конфигурирования WCCP на Cisco. При построении GRE туннеля на сервере с установленным прокси-сервером Squid в качестве удаленного хоста следует ввести IP адрес, указанный на маршрутизаторе Cisco как Router Identifier, узнать его можно при помощи команды show ip wccp. Если IP адрес не принадлежит той же зоне, где располагается ваш прокси-сервер, (например, IP адрес принадлежит зоне LAN) то вам следует разрешить GRE трафик между зоной, где располагается прокси-сервер и зоной, которой принадлежит IP адрес, указанный в Router Identifier.

!
ip access-list extended lan-dmz-all-acl
permit ip any any
permit gre any any
!


Существует правило: в качестве IP адреса в Router Identifier выбирается наибольший по значению IP адрес из присвоенных интерфейсам Сisco.

/etc/network/wccp.down

#!/bin/bash
iptables -t nat –F
ip tunnel del tnl0

В /etc/network/interfaces добавим

post-up /etc/network/wccp.up
pre-down /etc/network/wccp.down

В файле /etc/sysctl.conf сделаем следующие изменения:

net.ipv4.conf.all.rp_filter=0
net.ipv4.ip_forward=1


На этом все настройки со стороны сервера закончены, переходим к конфигурированию Cisco.

Указываем на каком интерфейсе будем обрабатывать http трафик, в нашем случае VLAN 1

!
interface Vlan1
ip address 192.168.2.2 255.255.255.0
ip wccp web-cache redirect in
ip nat inside
zone-member security lan
!


Так как используем первую версию протокола, то обязательно указываем ip wccp version 1, так как по умолчанию используется вторая версия.

!
ip wccp version 1
ip wccp web-cache
!

На этом конфигурирование wccp завершается.

Ссылки по теме:
Zone-Based Policy Firewall Design and Application Guide
WCCP Enhancements
WCCP2 and NAT on a private internal network



7 комментариев:

  1. всё так интересно и познавательно, и может я даж повторю (конфигурирование по этой статье) но вот что за зверь этот GRE вот это пока не понятно service-policy type inspect landmz-gre-policy - мож поясните?

    ОтветитьУдалить
  2. В тексте опечатка "service-policy type inspect landmz-gre-policy", а должно быть "service-policy type inspect lan-dmz-all-policy". В данном примере протокол GRE
    http://ru.wikipedia.org/wiki/GRE_(%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB) используется в реализации WCCP.

    ОтветитьУдалить
  3. Очень хорошо разжёвано, спасибо! ))

    ОтветитьУдалить
  4. а есть вариант конфига когда dmz вешается на fe0(lan) для например dlinka dir*** c usb3g, как резервный канал для например 80 порта, а основной трафик через Wan fe4.
    Спасибо

    ОтветитьУдалить
  5. Скажите, пожалуйста, почему в одном случае вы в policy map используете pass, а другом inspect?))

    ОтветитьУдалить
  6. А если сквида в режиме TProxy

    пробовал делать все по аналогии - затык на сквиде. Пакеты приходят на сквиду, сквида отдает на циску, а клиент не получает пакет.

    ОтветитьУдалить
  7. Не плохо было бы включить в статью self zone

    ОтветитьУдалить

Он тебя посчитал ...