Написать опус сподвигло полное отсутствие аналогов. То есть в сети присутствует множество тем и примеров, как надо строить сеть малого предприятия секьюрно, архитектурно правильно, чтобы присутствовала хорошая производительность и всё такое. НО! Все эти принципы никак не пересекаются в одном конфиге. То есть "Делаем NAT.." но без "VPN на Cisco", "Zone Based Firewall" но без VPN, NAT+VPN+ZBF но без Traffic Policing... Куча источников, куча материалов, куча конфигов - полный хаос. Причём, не спасает даже Cisco Validated Design. Чтобы решить этот вопрос хотя бы для себя, я и решил оформить всё это дело в блоге. Итак, каким требованиям должен отвечать мой конфиг:
- сеть разделена на несколько фрагметов
- фрагменты разделены между собой ZBF
- присутствует гостевая сеть для беспроводных точек доступа, контроль над которыми нам не принципиален (у секретаря генерального гости берут логин/пароль и пока ждут приема могут лазить по интернету)
- у гостевой сети скорость порезана traffic policing
- настроен Site-toSite VPN на другое предприятие (группу предприятий). Снаружи ZBF режет любые попытки подключения по VPN от любых других узлов, кроме доверенных.
Теперь стоит определиться с оборудованием, которое чаще всего закупается для реализации всех этих целей. Тут варианта два: ISR G2 и ASA. Так как Remote Access VPN нужен в минимальных рамках без NAC и сложной проверки Remote Client, а Site-to-Site VPN в будущем будет переделан в DMVPN, то я для себя вижу только один вариант - ISR G2. Тут вариаций много, но мне ближе модели, которые имеют возможность установки 48-портового свитча и обрабатки телефонии. Из простых это 2921/2951, из средних - 3925(E)/3945(E), из серьёзных - 4451-X. Единственное, чем они отличаются - это производительность. Для меня малый офис ассоциируется с моделью 2951, поэтому я буду описывать конфигурацию непосредственно для неё.
1. Настраиваем подключение к модулю свитча
В моём примере 24-портовый свитч установлен в платоместо 1
Cisco2951#sh inventory
NAME: "CISCO2951/K9", DESCR: "CISCO2951/K9 chassis, Hw Serial#: FCZ11223344, Hw Revision: 1.1"
PID: CISCO2951/K9 , VID: V05 , SN: FCZ11223344
NAME: "SM-ES2-24: EtherSwitch SM L2 + 23 10/100 + 1 10/100/1000 on Slot 1", DESCR: "SM-ES2-24: EtherSwitch SM L2 + 23 10/100 + 1 10/100/1000"
PID: SM-ES2-24 , VID: V02 , SN: FOC22334455
NAME: "C2921/C2951 AC Power Supply", DESCR: "C2921/C2951 AC Power Supply"
PID: PWR-2921-51-AC , VID: V03 , SN: QCS33445566
Этот модуль подключается двумя портами: G0/26 - к основному шасси на порт G1/0 (используется для управления), G0/25 - к MGF на порт G1/1 (используется для передачи трафика). Не будем сильно заморачиваться и настроим следующим образом.
## Cisco 2951
!
interface GigabitEthernet1/0
ip address 172.16.1.2 255.255.255.0
!
interface GigabitEthernet1/1
description Internal switch interface connected to Service Module
switchport mode trunk
no ip address
!
## Cisco SM-ES2-24
!
interface GigabitEthernet0/25
switchport mode trunk
!
interface GigabitEthernet0/26
!
К интегрированному свитчу можно подключиться по консоли и адрес 172.16.1.2 как раз используется для этого:
Cisco2951#service-module GigabitEthernet 1/0 session
Trying 172.16.1.2, 2067 ... Open
User Access Verification
Username: user
Password: password
SM-ES2-24>en
Password: password
SM-ES2-24#
Причем чтобы выйти обратно в консоль роутера надо использовать культовую комбинацию Ctrl+Shift+6 и затем X. У кого при этом переключается клава - сделайте два раза ;) К настройке свитча вернёмся чуть позже - сейчас важно отстроить логику.
2. Нарезаем фрагменты сети.
Первое, что нам необходимо сделать, это разделить трафик по функциональной нагрузке.
interface GigabitEthernet0/2
description outside
ip address 111.111.111.111 255.255.255.0
!
interface Vlan1
description inside
ip address 192.168.1.1 255.255.255.0
!
interface Vlan2
description User_LAN
ip address 192.168.2.1 255.255.255.0
!
interface Vlan3
description Server_LAN
ip address 192.168.3.1 255.255.255.0
!
interface Vlan4
description DMZ
ip address 192.168.4.1 255.255.255.0
!
interface Vlan5
description Printers_LAN
ip address 192.168.5.1 255.255.255.0
!
interface Vlan6
description Telephony_LAN
ip address 192.168.6.1 255.255.255.0
!
interface Vlan7
description Guest_LAN
ip address 192.168.7.1 255.255.255.0
!
interface Vlan8
description iLO_LAN
ip address 192.168.8.1 255.255.255.0
!
interface Vlan9
description iSCSI_LAN
ip address 192.168.9.1 255.255.255.0
Администраторы сети находятся в сети iLO_LAN, чтобы иметь прямой доступ к средствам управления. Если система хранения работает на FC, то сеть iSCSI_LAN не нужна. Тоже касается и DMZ_LAN. Гостевая сетка Guest_LAN используется для того, чтобы в неё запихнуть "неконтролируемую" точку доступа.
3. Настройка NAT
Здесь более менее всё стандартно.
interface GigabitEthernet0/2
description outside
ip nat outside
!
interface Vlan3
description Server_LAN
ip nat inside
...
Настроим доступ в интернет. Допустим, пользователи ходят в него через прокси, который расположен в серверной сети. Напрямую пользователи попасть в интернет не могут.
ip access-list extended servers-traffic
permit ip 192.168.3.0 0.0.0.255 any
ip nat inside source list servers-traffic interface GigabitEthernet0/2 overload
Это правило временное. После появления VPN надо будет делать исключения в NAT. По аналогии делается правило для гостевой сети. Больше никому доступ в интернет не должен понадобиться.
4. Zone-Based Firewall
Кардинальное отличие ZBF от CBAC в том, что первый по умолчанию блокирует, а второй - разрешает. То есть, разместив интерфейс в какой-либо зоне и не настроив никакого доступа - мы блокируем любой трафик. В случае CBAC, пока ACL не повешен на интерфейс - трафик свободно ходит.
zone security out-zone
zone security servers-zone
...
!
interface GigabitEthernet0/2
description outside
zone-member security out-zone
!
interface Vlan3
description Server_LAN
zone-member security servers-zone
...
После того, как все интерфейсы помещены в свои зоны, можно прописывать zone-pair. Но для того, чтобы её прописать, надо сначала описать все компоненты, которые в ней используются.
class-map type inspect match-any cm-servers-to-out-protocol
match protocol icmp
match protocol tcp
match protocol udp
!
class-map type inspect match-all cm-servers-to-out
match access-group name servers-traffic
match class-map cm-servers-to-out-protocol
!
policy-map type inspect pm-servers-to-out
class type inspect cm-servers-to-out
inspect
class class-default
drop
!
zone-pair security zp-servers-to-out source servers-zone destination out-zone
service-policy type inspect pm-servers-to-out
Теперь надо настроить правило в обратную сторону. В первую очередь это нужно для того, чтобы почтовый сервер мог не только отправлять сообщения, но и получать их. А если снаружи порт закрыт, то письма приходить не будут. Для этого надо сделать, во-первых, zone-pair, а, во-вторых, публикацию порта 25/TCP почтового сервера наружу посредством NAT.
ip access-list extended acl-out-to-mail-server
permit tcp any host 192.168.3.254 eq smtp
!
class-map type inspect match-all cm-out-to-mail-server
match access-group name acl-out-to-mail-server
!
policy-map type inspect pm-out-to-servers
class type inspect cm-out-to-mail-server
inspect
class class-default
drop
!
zone-pair security zp-out-to-servers source out-zone destination servers-zone
service-policy type inspect pm-out-to-servers
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
ip access-list extended acl-nonat-to-mail-server
permit tcp any host 192.168.3.254 eq smtp
route-map rm-nonat-to-mail-server permit 10
match ip address acl-nonat-to-mail-server
ip nat inside source static tcp 192.168.3.254 25 111.111.111.111 25 route-map rm-nonat-to-mail-server extendable
Важно отметить, что разрешения и выборка трафика осуществляются на основании внутреннего адреса. Что касаемо route-map, то я тоже был немного сконфужен необходимостью её использования в таком варианте выборки трафика. Но других вариантов мне просто не оставили:
Cisco2951(config)#ip nat inside source static tcp 192.168.3.254 25 111.111.111.111 25 ?
extendable Extend this translation when used
forced Delete this entry and its children, even if in use
no-alias Do not create an alias for the global address
no-payload No translation of embedded address/port in the payload
redundancy NAT redundancy operation
route-map Specify route-map
vrf Specify vrf
<cr>
5. Site-to-Site VPN
Малый офис как правило имеет подключение к основному офису. Приведу пример настройки самого простого соединения.
Сначала отстроим логический уровень - чтобы это "должно" было соединяться. Ясен пень, что пока доступ не расковыряем как надо, ничего соединяться не будет. Но в данном случае надо двигаться последовательно.
!!!!!! ISAKMP !!!!!!
!
crypto isakmp policy 10
encr aes 256
hash sha512
authentication pre-share
group 2
!
crypto isakmp key psk-for-vpn address 222.222.222.222
!
!!!!!! IPSEC !!!!!!
!
crypto ipsec transform-set AES256-SHA esp-aes 256 esp-sha-hmac
mode tunnel
!
!!!!!! CRYPTOMAP !!!!!!
!
ip access-list extended vpn-to-hq
permit ip 192.168.3.0 0.0.0.255 host 192.168.33.254
permit ip host 192.168.3.254 192.168.55.0 0.0.0.255
!
crypto map OUTSIDE 4 ipsec-isakmp
set peer 222.222.222.222
set transform-set AES256-SHA
set pfs group2
match address vpn-to-hq
!
Вроде бы осталось только повесить криптомапу на внешний интерфейс и расслабиться, но мы то уже безопасность накрутили. Так что придётся сначала всё привести в соответствие. Начнём с NAT. Надо исключить из трансляции трафик, который приходит к нам из VPN. В этом случае метаморфоза будет выглядеть следующим образом:
ip access-list extended servers-traffic
permit ip 192.168.3.0 0.0.0.255 any
ip nat inside source list servers-traffic interface GigabitEthernet0/2 overload
!
! TRANSFORM TO ...
!
ip access-list extended nonat-vpn-servers-traffic
deny ip any 10.0.0.0 0.255.255.255
deny ip any 172.16.0.0 0.15.255.255
deny ip any 192.168.0.0 0.0.255.255
permit ip 192.168.3.0 0.0.0.255 any
ip nat inside source list nonat-vpn-servers-traffic interface GigabitEthernet0/2 overload
Теперь очередь ZBF. Так как трафик приходит снаружи, то надо изменить/добавить ряд правил для зоны OUT.
ip access-list extended acl-vpn-hq-to-servers
permit ip host 192.168.33.254 192.168.3.0 0.0.0.255
permit ip 192.168.55.0 0.0.0.255 host 192.168.3.254
!
class-map type inspect match-any cm-vpn-hq-protocol
match protocol icmp
match protocol tcp
match protocol udp
!
class-map type inspect match-all cm-vpn-hq-to-servers
match access-group name acl-vpn-hq-to-servers match class-map cm-vpn-hq-protocol
!
policy-map type inspect pm-out-to-servers
class type inspect cm-vpn-hq-to-servers
inspect
class type inspect cm-out-to-mail-server
inspect
class class-default
drop
!
Итак, исходящий трафик был сконфигурирован в самом начале, входящий трафик сконфигурировали только что. С NAT разобрались. Перед финальным аккордом осталось только одно - сделать так, чтобы роутер мог В ПРИНЦИПЕ принимать VPN-пакеты.
ip access-list extended acl-hq-to-self
permit udp host 222.222.222.222 any eq isakmp non500-isakmp
!
class-map type inspect match-any cm-hq-to-self-protocol
match protocol icmp
match protocol tcp
match protocol udp
!
class-map type inspect match-all cm-hq-to-self
match access-group name acl-hq-to-self
match class-map cm-hq-to-self-protocol
!
policy-map type inspect pm-out-to-self
class type inspect cm-hq-to-self
inspect
class class-default
drop
!
zone-pair security zp-hq-to-self source out-zone destination self
service-policy type inspect pm-out-to-self
Только после такого рода подготовки можно заходить на внешний интерфейс и вешать на него криптомапу.
interface GigabitEthernet0/2
description outside
crypto map OUTSIDE
6. Ограничение скорости для гостевой сети.
Так как пользователей в гостевой сети особо никто не контролирует, то мы им обрубаем трафик везде, кроме интернета. Но, что если гости заходят посмотреть Youtube? В лучшем случае, это увеличит нагрузку на канал. В худшем, они могут "съесть" весь канал. Чтобы этого не допустить, лучше "зарезать" канал до приемлемого значения.
policy-map type inspect pm-guests-to-out
class type inspect cm-guests-to-out
inspect
police rate 5242880 burst 655360
class class-default
drop
В данном примере канал "урезан" до 5Мбит/с. Этого вполне достаточно для комфортной работы в Интернет. Можно пропорционально изменить значения в зависимости от поставленной задачи. Как лучше резать трафик и как именно он режется на оборудовании можно ознакомиться в полезных ссылках.
7. Небольшие системные настройки
Для нормальной работы железяки необходимо, чтобы она нормально получала время по NTP. Прописывать сервера по IP не особо интересно, поэтому лучше сделать это по имени.
clock timezone ZP6 6 0
ntp master 3
ntp server 1.ru.pool.ntp.org
ntp server 0.ru.pool.ntp.org
ntp server 3.ru.pool.ntp.org
ntp server 2.ru.pool.ntp.org
Здесь есть два нюанса. Во-первых, роутер должен нормально разрешать имена. Через внутренний DNS или внешний не принципиально. Главное чтобы это было. Для этого надо с интерфейса self дать доступ на интерфейс out по протоколу domain.
permit udp any host 8.8.8.8 eq domain
Я предпочитаю делать через внешний так как... во-вторых, надо с интерфейса self дать доступ на интерфейс out по протоколу ntp. Чтобы сделать всё однотипно проще сделать сразу одну policy-map на оба доступа.
В заключении, надо чётко ограничить доступ на роутер по ssh. При поставке железо уже преднастроено, поэтому я предпочитаю допиливать уже настроенный доступ.
access-list 23 permit 192.168.8.0 0.0.0.255
!
line vty 0 4
access-class 23 in
privilege level 15
login local
transport input ssh
line vty 5 15
access-class 23 in
privilege level 15
login local
transport input ssh
В заключении хотел бы сказать, что все эти действия производятся СТРОГО до подключения оборудования в рабочую сеть и к провайдеру. В случае пренебрежения техникой безопасности возможны различные конфузы и неприятности.
Полезные ссылки:
4. Маршрутизаторы с интегрированными сервисами нового поколения Cisco ISR G2
5. Cisco Connected Branch-Office-in-a-Box Design Guide
7. [XGU.RU] Zone-Based Policy Firewall
8. NAT Errors - Static entry in use, cannot remove
9. Configuring a VPN Using Easy VPN and an IPSec Tunnel
10. Site-to-Site and Extranet VPN Business Scenarios
11. [XGU.RU] Cisco IOS Site-to-Site VPN
12. %CRYPTO-4-RECVD_PKT_MAC_ERR: decrypt: mac verify failed for connection
13. Syslog "%CRYPTO-4-RECVD_PKT_MAC_ERR:" Error Message with Ping Loss Over IPsec Tunnel Troubleshooting
14. Cisco Type 7 password tool
15. Troubleshooting IPSec VPNs
16. Comparing Traffic Policing and Traffic Shaping for Bandwidth Limiting
17. Cisco - rate-limit & traffic-shape pptp - unlim 64k, 128k ...
http://nosovdn-cisco.blogspot.ru/2013/11/cisco.html