Поиск...

четверг, 18 июля 2013 г.

Распространенная настройка cisco ASA для предприятия (часть №3)

Доброго времени суток!!!

Да, это снова я :). Прошло пол года (даже больше :)) с момента написания последнего моего поста. Не ругайте меня сильно, я не ленился. Всё это время я пытался написать несколько постов по QoS, но когда уже было все готово, проштудирована масса материала, написана теория выяснилось (в процессе реализации практики), что в GNS3 невозможно загрузить интерфейс настолько, чтобы появились очереди. Что я только не пробовал... И специализированный IOS от cisco (Pagent), и несколько хостов, между которыми копировал большие объемы трафика, и ставил скорость в 60 Kb на интерфейсе и так далее. Ничего не получилось. Второй причиной является конечно работа, работать надо и зарабатывать тоже :).
По этим причинам я пока отложил QoS. Если уже не изыщу возможностей показать вам на практике его работу, то выложу написанную теорию с командами (кстати, можете мне написать, стоит ли выкладывать чистую теорию или нет).
Ну а пока я предлагаю вам продолжение постов по распространенной настройке cisco ASA. И, как обычно, кто заинтриговался, добро пожаловать под кат...

Легенда у нас следующая. Иногда на предприятии не хватает сетевых устройств и пусть у нас нет роутера, который занимается маршрутизацией внутренних сетей, а есть только L2-свитч и устройство безопасности cisco ASA с версией IOS 8.4.2. Следовательно, необходимо наложить дополнительные функции на cisco ASA, а именно маршрутизацию. Так же у нас есть только один интерфейс для связи с L2-свитчем. Ко всему, необходимо настроить подключение удаленных пользователей с использованием VPN.
Задача заключается в следующем: организовать сетевое взаимодействие между внутренними сетями с учетом требований по безопасности. Для гостевой сети организовать доступ только в "INTERNET", причем с ограничением по скорости в 512 Kb. Организовать подключение удаленных пользователей через Remote Access VPN, причем удаленные пользователи должны ходить в интернет через устройство cisco ASA и иметь доступ к внутренним ресурсам компании. Сделать доступным из "INTERNET" внутренний сайт компании. Все это дело необходимо сделать через CLI.
Схема сегодня выглядит следующим образом:



У нас есть центральный офис с установленными cisco ASA и L2-switch. На свитче созданы 4 сети (vlan-а), которые через Trunk подаются на устройство безопасности. Вот характеристики каждого Vlan-а:
  • 1. Vlan_Office_1 - сеть 192.168.2.0/24. Security Level у неё равен 100. В ней находится первая часть сотрудников компании. Из этой подсети имеется доступ в интернет, доступ в Vlan_Office_2, Vlan_DMZ и Vlan_Guests;
  • 2. Vlan_Office_2 - сеть 192.168.3.0/24. Security Level у неё равен 100. В ней находится вторая часть сотрудников компании. Из этой подсети имеется доступ в интернет, доступ в Vlan_Office_1, Vlan_DMZ и Vlan_Guests;
  • 3. Vlan_DMZ - сеть 192.168.1.0/24. Security Level у неё равен 50. В ней находится Web-Server (WWW-SRV), на котором работает сайт компании. Соответственно он доступен из интернета по порту 80 (TCP) и в неё есть доступ из подсетей Vlan_Office_1, Vlan_Office_2, а также из Vlan_Guests только по 80-му порту;
  • 4. Vlan_Guests - гостевая подсеть 192.168.4.0/24, в которой находятся "гости", пришедшие к нам в офис. Security Level у него равен 10. Из этой подсети имеется доступ в интернет, причем с ограничением по скорости в 512 Kb и доступ к внутреннему сайту (SRV-WWW) только по 80-му порту.
Имеется сеть, эмулирующая "INTERNET", которая собрана на двух роутерах (Router_1 и Router_2). На роутере Router_1 имеется loopback-интерфейс (IP-адрес 1.1.1.1), который мы будем использовать для проверки доступности "INTERNET". Для обмена маршрутами используется протокол динамической маршрутизации OSPF.
Так же имеется удаленный пользователь, который находится за роутером Remote_Router в подсети 192.168.5.0/24 (предположим это internet-кафе). Этот удаленный пользователь имеет доступ в интернет, но без подключения через VPN к центральному офису он считается не безопасным.
Ну что же, общая информация есть, можно приступать. Начнем традиционно, обеспечим сетевое взаимодействие. Начнем с роутера Remote_Router:

R3#
R3#conf t
R3(config)#hostname Remote_Router
Remote_Router(config)#int fa 0/0
Remote_Router(config-if)#ip address 10.10.10.1 255.255.255.252 - назначаем IP-адреса на интерфейсы;
Remote_Router(config-if)#no sh
Remote_Router(config-if)#ip nat outside - указываем, что данный интерфейс будет Outside для NAT;
Remote_Router(config-if)#exit
Remote_Router(config)#int fa 1/0
Remote_Router(config-if)#ip address 192.168.5.1 255.255.255.0
Remote_Router(config-if)#no sh
Remote_Router(config-if)#ip nat inside - указываем, что данный интерфейс будет Inside для NAT;
Remote_Router(config-if)#exit
Remote_Router(config)#ip route 0.0.0.0 0.0.0.0 10.10.10.2 - прописываем маршрут по умолчанию;
Remote_Router(config)#ip access-list extended FOR_NAT - создаем список доступа для NAT;
Remote_Router(config-ext-nacl)#permit ip 192.168.5.0 0.0.0.255 any - прописываем нужную нам подсеть;
Remote_Router(config-ext-nacl)#exit
Remote_Router(config)#ip nat inside source list FOR_NAT interface fa 0/0 - включаем NAT (в нашем случае это будет PAT);
Remote_Router(config)#exit
Remote_Router#wr
Remote_Router#


Переходим на роутер Router_2:

R2#conf t
R2(config)#hostname Router_2
Router_2(config)#int fa 0/0
Router_2(config-if)#ip address 10.10.10.2 255.255.255.252
Router_2(config-if)#no sh
Router_2(config-if)#exit
Router_2(config)#int fa 1/0
Router_2(config-if)#ip address 20.20.20.2 255.255.255.252
Router_2(config-if)#no sh
Router_2(config-if)#exit
Router_2(config)#router ospf 1 - включаем процесс OSPF;
Router_2(config-router)#network 20.20.20.0 0.0.0.3 area 0 - добавляем нужные сети в процесс OSPF;
Router_2(config-router)#network 10.10.10.0 0.0.0.3 area 1
Router_2(config-router)#exit
Router_2(config)#exit
Router_2#wr
Router_2#


Теперь роутер Router_1:

R1#
R1#conf t
R1(config)#hostname Router_1
Router_1(config)#int fa 0/0
Router_1(config-if)#ip address 20.20.20.1 255.255.255.252
Router_1(config-if)#no sh
Router_1(config-if)#exit
Router_1(config)#int fa 1/0
Router_1(config-if)#ip address 30.30.30.2 255.255.255.252
Router_1(config-if)#no sh
Router_1(config-if)#exit
Router_1(config)#int loopback 0
Router_1(config-if)#ip address 1.1.1.1 255.255.255.255 - создаем Loopback интерфейс для дальнейших проверок;
Router_1(config-if)#exit

Router_1(config)#router ospf 1
Router_1(config-router)#network 20.20.20.0 0.0.0.3 area 0
Router_1(config-router)#network 1.1.1.1 0.0.0.0 area 0
Router_1(config-router)#network 30.30.30.0 0.0.0.3 area 2
Router_1(config-router)#exit
Router_1(config)#exit
Router_1#wr
Router_1#


С роутерами закончили, перейдем на свитч и настроем его:

R4#conf t
Switch(config)#hostname Switch
Switch(config)#vlan 10 - создаем нужные Vlan-ы;
Switch(config-vlan)#name Vlan_DMZ - указываем их название;
Switch(config-vlan)#exit
Switch(config)#vlan 20
Switch(config-vlan)#name Vlan_Office_1
Switch(config-vlan)#exit
Switch(config)#vlan 30
Switch(config-vlan)#name Vlan_Office_2
Switch(config-vlan)#exit
Switch(config)#vlan 40
Switch(config-vlan)#name Vlan_Guests
Switch(config-vlan)#exit
Switch(config)#int fa 1/0 - данный интерфейс смотрит в сторону cisco ASA и будет в режиме trunk;
Switch(config-if)#switchport trunk encapsulation dot1q - назначаем инкапсуляцию 802.1q;
Switch(config-if)#switchport mode trunk - переводим интерфейс в режим Trunk;
Switch(config-if)#switchport trunk allowed vlan 1,10,20,30,40,1002-1005 - прописываем разрешенные vlan-ы, которые будут тут "летать" (опционально)
;
Switch(config-if)#exit
Switch(config-if)#int fa 1/1
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 40 - поочередно назначаем интерфейсы в нужные vlan-ы;
Switch(config-if)#exit
Switch(config)#int fa 1/2
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 30
Switch(config-if)#exit
Switch(config)#int fa 1/3
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 20
Switch(config-if)#exit
Switch(config)#int fa 1/4
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 10
Switch(config-if)#exit
Switch(config)#exit
Switch#wr
Switch#


Теперь переходим к настройке cisco ASA:

ciscoasa>
ciscoasa> en
Password:
ciscoasa# conf t
ciscoasa(config)# hostname Cisco-ASA - прописываем название нашего устройства;
Cisco-ASA(config)# class-map inspection_default - если у вас нет этих команд в листинге "show run", то советую вам их прописать (это стандартные политики инспектирования трафика);
Cisco-ASA(config-cmap)# match default-inspection-traffic
Cisco-ASA(config-cmap)# policy-map type inspect dns preset_dns_map
Cisco-ASA(config-pmap)# parameters
Cisco-ASA(config-pmap-p)# message-length maximum client auto
Cisco-ASA(config-pmap-p)# message-length maximum 512
Cisco-ASA(config-pmap-p)# policy-map global_policy
Cisco-ASA(config-pmap)# class inspection_default
Cisco-ASA(config-pmap-c)# inspect dns preset_dns_map
Cisco-ASA(config-pmap-c)# inspect ftp
Cisco-ASA(config-pmap-c)# inspect h323 h225
Cisco-ASA(config-pmap-c)# inspect h323 ras
Cisco-ASA(config-pmap-c)# inspect rsh
Cisco-ASA(config-pmap-c)# inspect rtsp
Cisco-ASA(config-pmap-c)# inspect esmtp
Cisco-ASA(config-pmap-c)# inspect sqlnet
Cisco-ASA(config-pmap-c)# inspect skinny
Cisco-ASA(config-pmap-c)# inspect sunrpc
Cisco-ASA(config-pmap-c)# inspect xdmcp
Cisco-ASA(config-pmap-c)# inspect sip
Cisco-ASA(config-pmap-c)# inspect netbios
Cisco-ASA(config-pmap-c)# inspect tftp
Cisco-ASA(config-pmap-c)# inspect ip-options
Cisco-ASA(config-pmap-c)# inspect icmp
Cisco-ASA(config-pmap-c)# service-policy global_policy global - применяем политики глобально на устройстве;
Cisco-ASA(config)# int gigabitEthernet 0 - заходим на интерфейс, который будет смотреть в сторону "INTERNET";
Cisco-ASA(config-if)# nameif outside - определяем его как интерфейс "Outside";
Cisco-ASA(config-if)# ip address 30.30.30.1 255.255.255.252 - назначаем ему IP-адрес;
Cisco-ASA(config-if)# no shutdown - включаем интерфейс;
Cisco-ASA(config-if)# exit
Cisco-ASA(config)# route outside 0.0.0.0 0.0.0.0 30.30.30.2 - прописываем маршрут по умолчанию;
Cisco-ASA(config)# interface gigabitEthernet 1 - заходим на интерфейс, который смотрит в сторону свитча;
Cisco-ASA(config-if)# no shutdown - включаем его;
Cisco-ASA(config-if)# exit
Cisco-ASA(config)# interface gigabitEthernet 1.10 - "создаем" sub-интерфейс. Обращу внимание на то, что № после точки НЕ привязывается сразу к vlan-у, как это происходит на cisco роутерах;
Cisco-ASA(config-subif)# vlan 10 - отдельной командой определяем принадлежность данного sub-интерфейса нужному vlan-у;
Cisco-ASA(config-subif)# no shutdown - на всякий случай включаем его;
Cisco-ASA(config-subif)# nameif DMZ - указываем ему имя;
Cisco-ASA(config-subif)# security-level 50 - назначаем ему security-level, оговоренный выше для каждой подсети;
Cisco-ASA(config-subif)# ip address 192.168.1.1 255.255.255.0 - назначаем IP-адрес, который является шлюзом для данной сети;
Cisco-ASA(config-subif)# exit
Cisco-ASA(config)# interface gigabitEthernet 1.20
Cisco-ASA(config-subif)# vlan 20
Cisco-ASA(config-subif)# no shutdown
Cisco-ASA(config-subif)# nameif Office_1
Cisco-ASA(config-subif)# security-level 100
Cisco-ASA(config-subif)# ip address 192.168.2.1 255.255.255.0
Cisco-ASA(config-subif)# exit
Cisco-ASA(config)# interface gigabitEthernet 1.30
Cisco-ASA(config-subif)# vlan 30
Cisco-ASA(config-subif)# no shutdown
Cisco-ASA(config-subif)# nameif Office_2
Cisco-ASA(config-subif)# security-level 100
Cisco-ASA(config-subif)# ip address 192.168.3.1 255.255.255.0
Cisco-ASA(config-subif)# exit
Cisco-ASA(config)# interface gigabitEthernet 1.40
Cisco-ASA(config-subif)# vlan 40
Cisco-ASA(config-subif)# no shutdown
Cisco-ASA(config-subif)# nameif Guests
Cisco-ASA(config-subif)# security-level 10
Cisco-ASA(config-subif)# ip address 192.168.4.1 255.255.255.0
Cisco-ASA(config-subif)# exit
Cisco-ASA(config)# object network DMZ - для каждой подсети создадим свой объект (object);
Cisco-ASA(config-network-object)# subnet 192.168.1.0 255.255.255.0 - прикрепляем за каждым объектом свою подсеть;
Cisco-ASA(config-network-object)# exit
Cisco-ASA(config)# object network Office_1
Cisco-ASA(config-network-object)# subnet 192.168.2.0 255.255.255.0
Cisco-ASA(config-network-object)# nat (office_1,outside) dynamic interface - для оговоренных выше подсетей включаем NAT (в нашем случае PAT). Делается это именно здесь, так как, напомню, что с версии IOS 8.3 для cisco ASA, настройка NAT поменялась;
Cisco-ASA(config-network-object)# exit
Cisco-ASA(config)# object network Office_2
Cisco-ASA(config-network-object)# subnet 192.168.3.0 255.255.255.0
Cisco-ASA(config-network-object)# nat (office_2,outside) dynamic interface
Cisco-ASA(config-network-object)# exit
Cisco-ASA(config)# object network Guests
Cisco-ASA(config-network-object)# subnet 192.168.4.0 255.255.255.0
Cisco-ASA(config-network-object)# nat (guests,outside) dynamic interface
Cisco-ASA(config-network-object)# exit
Cisco-ASA(config)# same-security-traffic permit inter-interface - чтобы выполнить условие прохождения трафика между Office_1 и Office_2 необходима данная команда. Она разрешает прохождение трафика между разными интерфейсами с одинаковым security-level;
Cisco-ASA(config)# access-list ACCESS-FOR-GUESTS extended deny ip object Guests object Office_1 - создаем список доступа для Vlan_Guests. Этой строчкой запрещаем трафик в сеть Office_1;
Cisco-ASA(config)# access-list ACCESS-FOR-GUESTS extended deny ip object Guests object Office_2 - этой строчкой запрещаем трафик в сеть Office_2;
Cisco-ASA(config)# access-list ACCESS-FOR-GUESTS extended permit tcp object Guests object DMZ eq www - этой строчкой разрешаем доступ из Vlan_Guests на внутренний сайт компании по 80-му порту;
Cisco-ASA(config)# access-list ACCESS-FOR-GUESTS extended deny ip object Guests object DMZ - этой строчкой запрещаем любой другой трафик из Vlan_Guests в сеть DMZ;
Cisco-ASA(config)# access-list ACCESS-FOR-GUESTS extended permit ip object Guests any - этой строчкой разрешаем весь остальной трафик из Vlan_Guests (для обеспечения доступа в "INTERNET";
Cisco-ASA(config)# access-group ACCESS-FOR-GUESTS in interface Guests - привязываем созданный список доступа к интерфейсу Guests на входе;
Cisco-ASA(config)# exit
Cisco-ASA#


Немного остановимся. На данный момент мы уже выполнили несколько условий, оговоренных выше. В частности: настроили сетевую доступность между внутренними сетями с необходимыми разрешениями (замечу, что для этого достаточно было настроить соответствующие security-level-ы и всего лишь один список доступа), обеспечили выход в "INTERNET" нужным сетям и организовали сетевую доступность до удаленного пользователя (по крайней мере до удаленного роутера). Теперь давайте это все проверим.
Зайдем для начала на машину из сети Office_1 (HOST_3):


    где:
  • 1 - внутренний web-сервер организации (SRV-WWW);
  • 2 - хост из подсети Office_2 (HOST_2);
  • 3 - хост из подсети Guests (HOST_1);
  • 4 - IP-адрес Loopback-интерфейса на роутере Router_1, который показывает, что доступ в "INTERNET" имеется.
На следующем рисунке видно, что сайт компании так же доступен и открывается:

 
Уверяю вас, результаты из подсети Office_2 такие же, так что приводить их тут не буду. Перейдем лучше на хост из подсети Guests (HOST_1) и убедимся, что доступ с него имеется только в "INTERNET" (пока еще не урезанный :)) и к внутреннему сайту компании по 80-му порту:

 
    где:
  • 1 - внутренний web-сервер организации (SRV-WWW);
  • 2 - хост из подсети Office_2 (HOST_3);
  • 3 - хост из подсети Office_1 (HOST_2);
  • 4 - IP-адрес Loopback-интерфейса на роутере Router_1, который показывает, что доступ в "INTERNET" имеется.
Проверим теперь открытие сайта компании:

 
Все работает. Двигаемся дальше. Сделаем доступным наш внутренний сайт пользователям из "INTERNET". Сделать это можно несколькими способами. Рассмотрим их. Возвращаемся на cisco ASA и делаем первым способом:

Cisco-ASA(config)# object network SRV-WWW - создаем отдельный объект для внутреннего сервера;
Cisco-ASA(config-network-object)# host 192.168.1.10 - прописываем IP-адрес внутреннего сервера;
Cisco-ASA(config-network-object)# nat (DMZ,outside) static interface service tcp 80 80 - настраиваем правило NAT (статический). Теперь при обращении к внешнему IP-адресу Cisco-ASA на 80-й порт, эти запросы будут перебрасываться на IP-адрес сервера (192.168.1.10) на порт 80;
Cisco-ASA(config-network-object)# exit
Cisco-ASA(config)# access-list OUTSIDE extended permit tcp any object SRV-WWW eq 80 - для того, чтобы NAT заработал, необходимо сделать соответствующие разрешения. Для этого создаем список доступа. Замечу, что в качестве адреса назначения мы используем именно внутренний IP-адрес, а не внешний, как это было в старых версиях IOS (8.2 и ранние);
Cisco-ASA(config)# access-group OUTSIDE in interface outside - прикрепляем созданный список к интерфейсу outside;
Cisco-ASA(config)#wr
Cisco-ASA(config)# 

 
Теперь перейдем на Remote_User (192.168.5.10) и проверим доступность внутреннего сайта:


    где:
  • 1 - успешный "ping" внешнего IP-адреса Cisco-ASA;
  • 2 - успешное открытие внутреннего сайта компании, при обращении на внешний (outside) IP-адрес Cisco-ASA;
Итак, первый способ сделали и он работает. Но у него есть небольшой недостаток. Если вам потребуется добавить еще какой-нибудь порт для проброса, то данный способ не подойдет. Он может пробрасывать только один порт. Т.е. если вы попытаетесь добавить команду с другим портом (например вот такую: nat (DMZ,outside) static interface service udp 69 69 (это проброс tftp)), то эта команда просто перезапишет существующую.
Вот тут и появляется второй способ, который позволяет пробрасывать целые группы портов на один и тот же внутренний IP-адрес. Для демонстрации этого метода я предлагаю добавить к нашей изначальной задаче еще проброс RDP (TCP 3389) и TFTP (UDP 69) портов, причем предположим, что нам нужно пробросить не один порт UDP 69, а группу портов UDP от 65 до 70 (просто для примера :)) на внутренний сервер (SRV-WWW).
Возвращаемся на Cisco-ASA:

Cisco-ASA(config)# object network SRV-WWW
Cisco-ASA(config-network-object)# no nat (DMZ,outside) static interface service tcp www www - убираем из конфигурации статический NAT, сделанный ранее;
Cisco-ASA(config-network-object)# exit
Cisco-ASA(config)# clear configure access-list OUTSIDE - данной командой мы полностью убираем список доступа OUTSIDE (создадим его потом заново) и привязку его к интерфейсу Guests. Команда clear configure очень полезная, она позволяет намного быстрее убирать ненужные блоки в конфигурации (не нужно ставить "no" перед каждой командой, которую надо удалить). Поставьте после нее знак "?" и вы увидите, что можно почистить с ее помощью;
Cisco-ASA(config)# object service TCP_3389 - создадим объекты для оговоренных портов;
Cisco-ASA(config-service-object)# service tcp source eq 3389 - добавляем в качестве источника нужный нам порт в объект;
Cisco-ASA(config-service-object)# exit
Cisco-ASA(config)# object service TCP_80
Cisco-ASA(config-service-object)# service tcp source eq 80
Cisco-ASA(config-service-object)# exit
Cisco-ASA(config)# object service RANGE_UDP_65_70
Cisco-ASA(config-service-object)# service udp source range 65 70 - добавляем группу портов (как оговорили немного выше);
Cisco-ASA(config-service-object)# exit
Cisco-ASA(config)# object-group service TCP_PORTS tcp - сразу создадим группу объектов, для дальнейшего использования в списке доступа;
Cisco-ASA(config-service-object-group)# port-object eq 3389 - каждый порт тут выступает в качестве объекта;
Cisco-ASA(config-service-object-group)# port-object eq 80
Cisco-ASA(config-service-object-group)# exit
Cisco-ASA(config)# object-group service UDP_PORTS udp
Cisco-ASA(config-service-object-group)# port-object range 65 70 - для UDP портов задаем диапазон;
Cisco-ASA(config-service-object-group)# exit
Cisco-ASA(config)# nat (DMZ,outside) source static SRV-WWW interface service TCP_3389 TCP_3389 - включаем статический NAT, тем самым обеспечивая проброс портов (теперь, все запросы, приходящие на внешний IP-адрес и на соответствующий порт, будут направляться на наш внутренний сервер на соответствующий порт). В данном случае один порт;
Cisco-ASA(config)# nat (DMZ,outside) source static SRV-WWW interface service TCP_80 TCP_80
Cisco-ASA(config)# nat (DMZ,outside) source static SRV-WWW interface service RANGE_UDP_65_70 RANGE_UDP_65_70 - а в данном случае, диапазон;
Cisco-ASA(config)# access-list OUTSIDE extended permit tcp any object SRV-WWW object-group TCP_PORTS - соответственно, для работы сделанной конфигурации нужно прописать разрешения. Для этого снова создаем список доступа OUTSIDE (в качестве портов назначения указываем группы объектов);
Cisco-ASA(config)# access-list OUTSIDE extended permit udp any object SRV-WWW object-group UDP_PORTS
Cisco-ASA(config)# access-group OUTSIDE in interface outside - прикрепляем его к интерфейсу;
Cisco-ASA(config)# exit
Cisco-ASA# wr


Проверим нашу работу. Для этого, я дополнительно установил на SRV-WWW (192.168.1.10) маленький TFTP сервер и открыл доступ по RDP. Работу сайта и RDP будем проверять с Remote_User (192.168.5.10), а работу TFTP - сервера проверим с роутера Remote_Router (просто скопируем его конфигурацию). Идем на Remote_User:

 
Как видим, все работает. Идем на Remote_Router:

Remote_Router#copy running-config tftp:
Address or name of remote host []? 30.30.30.1
Destination filename [remote_router-confg]?
!!
1021 bytes copied in 0.836 secs (1221 bytes/sec)
Remote_Router#


Вроде скопировалось, посмотрим появился ли этот файл на SRV-WWW в папке TFTP-сервера:


Все на месте! Ну и напоследок, посмотрим счетчики трансляций NAT на Cisco-ASA:


Из рисунка видно, что счетчики возрастают у каждого правила трансляции NAT. Пусть вас не пугает параметр untranslate_hits, он обозначает трансляцию внешнего адреса в реальный (внутренний), а translate_hits реального адреса (внутреннего) во внешний.
С очередной задачей справились. Конечно, второй способ более трудоемкий, но он позволяет пробрасывать целые группы портов, а не один. Да и в дальнейшем, при необходимости добавления новых портов их просто необходимо будет добавить в соответствующие группы объектов. Выбор за вами :).
А мы двигаемся дальше. Теперь перейдем к настройке Remote Access VPN. Пора подключить нашего удаленного пользователя к офису и обеспечить ему безопасное подключение к "INTERNET" :). Делать это, как я уже говорил в самом начале, мы будем через CLI. Так что прямо идем на консоль Cisco-ASA:

Cisco-ASA(config)# ip local pool VPN-POOL 192.168.6.1-192.168.6.254 mask 255.255.255.0 - создаем пул IP-адресов для удаленных пользователей;
Cisco-ASA(config)# object network VPN-USERS - создаем объект для этого пула;
Cisco-ASA(config-network-object)# subnet 192.168.6.0 255.255.255.0
Cisco-ASA(config-network-object)#exit
Cisco-ASA(config)# nat (outside,outside) source dynamic VPN-USERS interface - этим правилом NAT мы обеспечиваем доступ в интернет удаленным пользователям (указываем, что необходимо сделать NAT (PAT) для сети VPN-USERS, приходящей на интерфейс outside и уходящей через него же);
Cisco-ASA(config)# nat (outside,office_1) source static VPN-USERS VPN-USERS - делаем исключение из NAT удаленных пользователей, для обеспечения доступа их во внутренние сети (в старых версиях IOS это команда "nat 0");
Cisco-ASA(config)# nat (outside,office_2) source static VPN-USERS VPN-USERS
Cisco-ASA(config)# nat (outside,DMZ) source static VPN-USERS VPN-USERS
Cisco-ASA(config)# same-security-traffic permit intra-interface - без этой команды удаленные пользователи не смогут выходить в "INTERNET" через Cisco-ASA (она разрешает прохождение трафика, приходящего и уходящего через один и тот же интерфейс);
Cisco-ASA(config)# username vpnuser password cisco - создаем локального пользователя, аккаунт которого будем использовать для подключения по VPN;
Cisco-ASA(config)# crypto ikev1 policy 1 - создаем политику первой фазы VPN (IKE Phase 1);
Cisco-ASA(config-ikev1-policy)# authentication pre-share - указываем, что аутентификация будет по Pre-share ключу;
Cisco-ASA(config-ikev1-policy)# encryption 3des - указываем алгоритм и параметры шифрования;
Cisco-ASA(config-ikev1-policy)# hash sha
Cisco-ASA(config-ikev1-policy)# group 2
Cisco-ASA(config-ikev1-policy)# lifetime 86400 - задаем время жизни туннеля;
Cisco-ASA(config-ikev1-policy)# exit
Cisco-ASA(config)# crypto ikev1 enable outside - включаем IKE на интерфейсе outside;
Cisco-ASA(config)# crypto ipsec ikev1 transform-set MySET esp-3des esp-md5-hmac - создаем TRANSFORM-SET (здесь указываются параметры, которые будут использоваться для шифрования полезного трафика (IKE Phase 2));
Cisco-ASA(config)# group-policy VPNCLIENT internal - создаем групповую политику для удаленных пользователей;
Cisco-ASA(config)# group-policy VPNCLIENT attributes - заходим в настройки групповой политики и задаем необходимые параметры, которые будут "отосланы" cisco VPN-client-у при подключении;
Cisco-ASA(config-group-policy)# vpn-tunnel-protocol ikev1 - указываем какой протокол (ikev1 или ikev2) использовать;
Cisco-ASA(config-group-policy)# split-tunnel-policy tunnelall - указываем, что необходимо "заворачивать" весь трафик удаленного пользователя в VPN;
Cisco-ASA(config-group-policy)# exit
Cisco-ASA(config)# tunnel-group VPN-CLIENTS type remote-access - создаем туннельную группу и указываем, что вид VPN - Remote Access;
Cisco-ASA(config)# tunnel-group VPN-CLIENTS general-attributes - заходим в глобальные настройки туннельной группы;
Cisco-ASA(config-tunnel-general)# address-pool VPN-POOL - привязываем к ней ранее созданный пул IP-адресов;
Cisco-ASA(config-tunnel-general)# default-group-policy VPNCLIENT - привязываем к ней ранее созданную групповую политику;
Cisco-ASA(config-tunnel-general)# exit
Cisco-ASA(config)# tunnel-group VPN-CLIENTS ipsec-attributes - заходим в настройки IPSEC туннельной группы;
Cisco-ASA(config-tunnel-ipsec)# ikev1 pre-shared-key ciscocisco - здесь задаем Pre-Share ключ;
Cisco-ASA(config-tunnel-ipsec)# exit
Cisco-ASA(config)# crypto dynamic-map First_Din_map 1 set ikev1 transform-set MySET - создаем динамическую карту, к которой привязываем ранее созданный TRANSFORM-SET;
Cisco-ASA(config)# crypto dynamic-map First_Din_map 1 set reverse-route - (опционально) если у вас во внутренней сети поднят OSPF или RIP, то сеть удаленных пользователей будет включена в таблицу маршрутизации;
Cisco-ASA(config)# crypto map MyMap 1 ipsec-isakmp dynamic First_Din_map - создаем карту шифрования и привязываем к ней ранее созданную динамическую карту;
Cisco-ASA(config)# crypto map MyMap interface outside - прикрепляем карту шифрования к интерфейсу outside (crypto map можно прикреплять к интерфейсу только одну, но в саму карту можно добавлять много (под разными номерами crypto map MyMap 2, crypto map MyMap 3 и так далее);
Cisco-ASA(config)# wr


Надеюсь пояснения к командам понятные. Если есть вопросы, пишите в комментариях или в почту. Ну а мы перейдем на Remote_User и проверим, что у нас получилось.
Проверять работу интернета и открытие сайта (http://30.30.30.1) мы не будем, это видно на предыдущих рисунках. Посмотрим лишь команду tracert и проверим путь в интернет до подключения. Затем подключимся с помощью cisco VPN client-а и посмотрим, что изменится:
До подключения:


    где:
  • 1 - IP-адрес loopback-интерфейса на роутере Router_1;
  • 2 - IP-адрес внутреннего интерфейса Remote_Router;
  • 3 - IP-адрес интерфейса роутера Router_2.
Как видно из рисунка, идем не через Cisco-ASA. Теперь подключаемся:


    где:
  • 1 - имя соединения (любое, какое вы хотите);
  • 2 - IP-адрес интерфейса outside на Cisco-ASA;
  • 3 - название туннельной группы;
  • 4 - Pre-Share ключ;
Нажимаем "Save" и затем "Connect":


Вводим логин (1) и пароль (2) для ранее созданного пользователя и нажимаем "OK". Должно произойти подключение. Осталось провести проверки:


    где:
  • 1 - новый сетевой интерфейс, который создал cisco VPN client, он получил IP-адрес из настроенного пула и является на данный момент основным для этого компьютера;
  • 2 - команда tracert показывает, что идем мы в "INTERNET" уже через Cisco-ASA (IP-адресов самой ASA нет, так как по умолчанию, они не показываются);
Проверим открытие внутреннего сайта и доступность внутренних сетей (например Office_1):


    где:
  • 1 - IP-адрес машины в сети Office_1 (HOST_3);
  • 2 - значок на панели задач, обозначающий, что на данный момент VPN-соединение установлено (когда соединения нет, то "замок" разорван).
Ну что, все работает. Сайт открывается уже по внутреннему IP-адресу и нужные внутренние сети доступны.
Осталась у нас одна задача - это ограничить скорость доступа из сети Guests до уровня 512 Kb. Как это делать я рассказывал в этом посте, но, раз уж есть задача, надо ее сделать :).
Снова возвращаемся на Cisco-ASA:

Cisco-ASA(config)# access-list GUESTS-LIMIT extended permit ip object Guests any - создаем список доступа для интересующего нас трафика (трафик относящийся к сети Guests);
Cisco-ASA(config)# access-list GUESTS-LIMIT extended permit ip any object Guests
Cisco-ASA(config)# class-map LIMIT - создаем класс;
Cisco-ASA(config-cmap)# match access-list GUESTS-LIMIT - прикрепляем к нему ранее созданный список доступа;
Cisco-ASA(config-cmap)# exit
Cisco-ASA(config)# policy-map FOR-LIMIT-SPEED - создаем политику;
Cisco-ASA(config-pmap)# class LIMIT - привязываем к политике, ранее созданный класс;
Cisco-ASA(config-pmap-c)# police input 512000 96000 conform-action transmit exceed-action drop - указываем ограничение на входящий трафик в 512 Kb;
Cisco-ASA(config-pmap-c)# police output 512000 96000 conform-action transmit exceed-action drop - указываем ограничение на исходящий трафик в 512 Kb;
Cisco-ASA(config-pmap-c)# exit
Cisco-ASA(config-pmap)# exit
Cisco-ASA(config)# service-policy FOR-LIMIT-SPEED interface Guests - привязываем политику к интерфейсу Guests;
Cisco-ASA(config)# exit
Cisco-ASA# wr
Cisco-ASA#


Проверить мы сможем только исходящее (output) ограничение, но поверьте, будет работать и входящее (input). Для этого зайдем на HOST_1, запустим бесконечный ping на IP-адрес 1.1.1.1 и будем смотреть результат на Cisco-ASA:



Из рисунков видно, что ping проходит и счетчики на Cisco-ASA увеличиваются. А это значит, что нужный нам трафик подпадает под политику и в случае превышения придела скорости, начнет увеличиваться счетчик "drop-нутых" пакетов.
Ну что, поздравляю вас, мы закончили :). Пример получился объемным, но, думаю, весьма полезным, так как данная конфигурация весьма распространена в реальной жизни.
На всякий случай вот тут выкладываю конфигурацию Cisco-ASA.
А на этом я хочу закончить этот пост. Еще раз приношу свои извинения за столь долгий перерыв в постах, буду стараться это дело исправить. Хочу поблагодарить вас за внимание и жду вас в следующих постах!!!

По всем возникающим вопросам обращайтесь ко мне через комментарии или лично.

Координаты можно найти вот тут.


С нетерпением жду вас в следующих постах!!!

С уважением, Ant0ni0n

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

  1. Антон, добрый день!

    Очень приятно, зная Вашу загруженность, что Вы не забываете про нас и продолжаете писать очень полезные посты!

    С уважением!

    ОтветитьУдалить
  2. Этот комментарий был удален автором.

    ОтветитьУдалить
  3. Привет Антон! Спасибо за статью, однозначно в избранное)

    У меня вопрос, при подключении по vpn на стороне клиента(Cisco Anyconnect)пропадает шлюз домашнего ISP, получается что по умолчанию подхватывается шлюз vpn за асой, и соответственно все остальное не доступно ( кроме шлюза vpn )

    ОтветитьУдалить
    Ответы
    1. Привет, Арсен! Рад, что понравился пост :).
      Немного не понял вопроса твоего. Если касаемо именно этого поста, то тут я использовал не Cisco Anyconnect, а Cisco VPN Client и настраивал как раз так, чтобы после подключения по VPN, весь трафик улетал в туннель (соответственно да, шлюзом является ASA).
      Ну а если надо, чтобы в туннель попадал трафик, адресованный только удаленной сети, то необходимо настраивать Split-tunneling.

      Удалить
    2. Привет, Антон!

      Со Split-tunneling разобрался. Так вот проблемка, не могу завернуть трафик vpn клиентов адресованной удаленной сети за IPVPN.
      Причем локальная сеть доступна, а все что за IPVPN нет.

      Поможешь советом ?

      Удалить
    3. Забыл отписаться, проблема была в маршрутизации.

      Удалить
  4. Антон, да именно это я имел ввиду. Спасибо! Пойду копать в сторону split-tunneling.

    ОтветитьУдалить
  5. Антон, добрый день!
    Жаль, если Ваши труды по QoS просто так пропадут.
    Даже если это будет просто теория, но с приведенными командами и в Вашем изложении, а именно, просто и понятно, то я думаю многие с огромным удовольствием почитали бы и научились чему-то новому.

    Спасибо!

    ОтветитьУдалить
  6. День добрый.
    Скажите пожалуйста, настраиваю интернет на интерфейсе outside.
    Забиваю айпи и маску. А какже шлюз и днски, Где их надо вносить?

    ОтветитьУдалить
  7. Добрый день! Настроил практически идентичную конфигурацию, но пробрасывал почтовик Exchange. Почта приходит, но не уходит (из сети не могу достучаться до любого почтового сервера по телнет 25 порт). Отключил инспектирование, не помогло. В чем может быть проблема?

    ОтветитьУдалить
    Ответы
    1. Доброго времени суток!!
      Ну сразу так и не скажешь, присылайте конфигурацию на почту (указана в "Обратная связь"). Будет время, гляну.

      Удалить
    2. Спасибо большое! Проблема решена, у провайдера стояла блокировка.

      Удалить
  8. Анонимный5 мая 2014 г., 14:53

    Здравствуйте, Антон.
    Нашел Вашу статью т.к. ищу решение проблемы привязки нескольких крипто мап на один интерфейс. В Вашем конфиге нашел то что интресует, но так и не разобрался. Как именно привязать крипто мап для l2l vpn, когда уже висит dynamic map для vpn доступа для сотрудников?

    ОтветитьУдалить
    Ответы
    1. Доброго времени суток!
      К одному интерфейсу нельзя привязать несколько crypto-map (имеется ввиду с разными названиями. Например, crypto map MAP1 и crypto map MAP2), но можно в одной crypto map указать несколько групп характеристик для разных vpn-ов:

      crypto map MAP1 10 match address
      crypto map MAP1 10 set peer
      crypto map MAP1 10 set transform-set ESP-3DES-MD5
      crypto map MAP1 20 match address
      crypto map MAP1 20 set peer
      crypto map MAP1 20 set transform-set ESP-3DES-MD5
      ....
      crypto map MAP1 100 ipsec-isakmp dynamic outside_dyn_map
      crypto map MAP1 interface outside

      Вот как то так :). Надеюсь, понятно :)

      С уважением, Антон Шешко

      Удалить
    2. Анонимный6 мая 2014 г., 13:53

      А, все, большое спасибо, наконец-то понял :)

      Удалить
  9. Добрый день,

    очень познавательные у вас статьи, спасибо вам огромное за это.
    У меня вопросик, у меня Cisco ASA 5512 v2, ASA Version 8.6(1)2, следуя вашим инструкциям не выполняется следующая команда при настройке NATа:
    Cisco-ASA(config-network-object)# nat (office_1,outside) dynamic interface
    пишет следующее:
    ERROR: % Invalid input detected at '^' marker.
    маркер указывает на букву d слова dynamic.
    Подскажите, что-то может надо вместо interface прописать, т.к. в мануале от Асы есть похожая команда, но немного иначе выглядит:
    nat (inside,outside) dynamic myNatPool
    где myNatPool является object network с range адресов
    Спасибо!

    ОтветитьУдалить
    Ответы
    1. Прошу прощения, всё работает. Невнимательность :)

      Удалить
  10. День добрый,
    и все же столкнулся с проблемой, вы писали:
    """Немного остановимся. На данный момент мы уже выполнили несколько условий, оговоренных выше. В частности: настроили сетевую доступность между внутренними сетями с необходимыми разрешениями (замечу, что для этого достаточно было настроить соответствующие security-level-ы и всего лишь один список доступа), обеспечили выход в "INTERNET" нужным сетям и организовали сетевую доступность до удаленного пользователя (по крайней мере до удаленного роутера). Теперь давайте это все проверим.
    Зайдем для начала на машину из сети Office_1 (HOST_3):"""
    зайдя на машину из сети Office_1 я не могу пинговать ниодну из машин других сетей с security-level 100(same security level)
    Шлюз по умолчанию пингуется со всех сетей

    ОтветитьУдалить
  11. Здравствуйте Антон.
    В сети появились установочные образы для виртуальных машин Cisco ASA (ASAv). Вам не приходилось иметь с ними дело?

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Да, я видел, что появились... Но, к сожалению пока не игрался с ними еще :). Надеюсь, в скором времени исправить этот пробел...

      Удалить
  12. Добрый день.
    А вы действительно настройку ASA делали на той,что доступна в GNS3? Т.к. у меня (GNS3 1.3.8 и ASA 8.4(2)) почему не доступны все возможные команды для настройки NAT:
    - я не могу настроить AutoNAT (или Object NAT в терминологии Cisco)
    nat (guests,outside) dynamic interface
    nat (DMZ,outside) static interface service tcp 80 80
    - а могу только Manual NAT (или Twice NAT в терминологии Cisco):
    nat (DMZ,outside) source static SRV-WWW interface service TCP_80 TCP_80

    Кроме того везде (и увас и на многих других сайтах) написано,что "в качестве адреса назначения мы используем именно внутренний IP-адрес, а не внешний, как это было в старых версиях IOS (8.2 и ранние)". Я следовал данному указанию (пробросил telnet и www), однако почему-то при попытке telnet "внешний айпи" или telnet "внешний айпи" 80 в консольке выскакивает сообщение (настроен logging console warnings), что TCP соединение на 23й (или 80й) порт была зарезано аксесс-листом.
    Подскажите пожалуйста в чем может быть проблема...

    ОтветитьУдалить
  13. R1#ping 10.0.0.1

    Type escape sequence to abort.
    Sending 5, 100-byte ICMP Echos to 10.0.0.1, timeout is 2 seconds:
    .!!!!
    Success rate is 80 percent (4/5), round-trip min/avg/max = 16/20/28 ms
    R1#
    R1#
    R1#telnet 10.0.0.1
    Trying 10.0.0.1 ...
    % Connection timed out; remote host not responding

    R1#
    R1#
    R1#telnet 10.0.0.1 80
    Trying 10.0.0.1, 80 ...
    % Connection timed out; remote host not responding



    ciscoasa> %ASA-3-710003: TCP access denied by ACL from 10.0.0.2/25954 to outside:10.0.0.1/23
    %ASA-3-710003: TCP access denied by ACL from 10.0.0.2/25954 to outside:10.0.0.1/23
    %ASA-3-710003: TCP access denied by ACL from 10.0.0.2/48310 to outside:10.0.0.1/80
    %ASA-3-710003: TCP access denied by ACL from 10.0.0.2/48310 to outside:10.0.0.1/80

    ОтветитьУдалить
  14. Большое спасибо за статью!!!

    ОтветитьУдалить
  15. Спасибо, за статью!
    До сих пор не теряет актуальности.
    За Kali + карму)

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