суббота, 23 марта 2013 г.

Cisco ASA, Часть третья, SSH access outside

Настройка доступа SSH на outside интерфейсе
ASA Version 8.4(2)

 
1)  Задаём hostname
ciscoasa(config)# hostname ASA
 

2) Задаём домен
ASA(config)# domain test.local
 

3)  Создаём ключи
ASA(config)# show crypto key mypubkey

нет ключей? тогда создаём

ASA(config)# crypto key generate rsa
INFO: The name for the keys will be: <Default-RSA-Key>
Keypair generation process begin. Please wait...


проверяем


ASA(config)# sh crypto key mypubkey rsa
Key pair was generated at: 13:04:47 UTC Mar 23 2013
Key name: <Default-RSA-Key>
 Usage: General Purpose Key
 Modulus Size (bits): 1024
 Key Data:

  30819f30 0d06092a 864886f7 0d010101 05000381 8d003081 89028181 009c1f35
  bffb3a15 34b5f55c 0345031a adc09531 d705d905 78938f3d 92acc008 ae6303d8
  8f0b2ba4 84608ea7 b75aa564 5d1c8b01 73f3ef63 0378c391 54f9068c 5a533545
  0f368426 9efa3f8d 2b66774d b8e871e6 7ba58249 904c6ced e14fb790 04565ec0
  9ac943c0 c1ee7f01 52a592a7 c00ee8a3 5cd2fc16 8e826672 ba1ad813 63020301 0001



примечание
crypto key generate rsa label {имя пары} создание пары ключей
crypto key zeroize rsa label {имя пары} удаление пары ключей



4) Настраиваем интерфейс
ASA(config)# int g0
ASA(config-if)# ip address 209.88.95.104 255.255.254.0
ASA(config-if)# no shutdown
ASA(config-if)# nameif outside
INFO: Security level for "outside" set to 0 by default.
ASA(config-if)# exit
 

5) Разрешаем вход ssh
ASA(config)# ssh 209.88.94.81 255.255.255.255 outside
 

6) Задаём пароль локального админа
ASA(config)# username stim password stimpass privilege 15

7) Настраиваем авторизацию aaa

ASA(config)# aaa authentication ssh console LOCAL

четверг, 21 марта 2013 г.

Cisco ASA, часть вторая, NAT

Настройка стандартного NAT для стандартного офиса
(хотя это PAT чистой воды)
Cisco ASA IOS 8.4.2 





Config:
ASA(config)# object network my-inside-net
ASA(config-network-object)# subnet 192.168.1.0 255.255.255.0
ASA(config-network-object)# nat (inside,outside) dynamic interface


Monitoring & Logs:
ASA# show nat
ASA# show nat pool
ASA# show running-config nat
ASA# show xlate

последняя команда пожалуй самая вкусная

понедельник, 18 марта 2013 г.

Cisco ASA, Часть первая, ACL

Часть первая


Задача: 
пользователи  должны иметь доступ к серверу xp_http_ftp_cisco 
по порту 80 (web-сайт), 
21,20 (для ftp) 
и 10000 (для администрирования сервера ftp по web-интерфейсу);

Итак приступим:

1) Поднять интерфейсы, настроить ip-адреса и security-level
ciscoasa> en
Password:
ciscoasa# conf t
ciscoasa(config)# hostname asa1
 

asa1(config)# interface g2
asa1(config-if)# nameif inside
INFO: Security level for "inside" set to 100 by default.

asa1(config-if)# ip address 192.168.1.1 255.255.255.0
asa1(config-if)# no shutdown
asa1(config-if)# exit

asa1(config)# interface g1
asa1(config-if)# nameif DMZ
INFO: Security level for "DMZ" set to 0 by default.
asa1(config-if)# security-level 50
asa1(config-if)# ip address 10.10.10.1 255.255.255.0
asa1(config-if)# no shutdown
asa1(config-if)# exit

asa1(config)# interface g0
asa1(config-if)# nameif outside
INFO: Security level for "outside" set to 0 by default.
asa1(config-if)# ip address 3.3.3.1 255.255.255.0
asa1(config-if)# no shutdown
asa1(config-if)# exit
asa1(config)# wr
Building configuration...
Cryptochecksum: 4063acb7 c6982e66 0e0b787d a5a2c78f

2246 bytes copied in 1.290 secs (2246 bytes/sec)
[OK]


2) Добавим доступ с ASDM (опционально)
asa1(config)# username admin password cisco privilege 15
asa1(config)# http server enable
asa1(config)# http 192.168.1.0 255.255.255.0 inside

 ------------------------------------
Ставим TFTP сервер типа TFTPDWin и загружаем на флеш память ASA файл с asdm
---------------------------------------
asa1# copy tftp: flash:
Address or name of remote host []? 192.168.1.2
Source filename []? asdm-647.bin
Destination filename [asdm-647.bin]?
Accessing tftp://192.168.1.2/asdm-647.bin....!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!etc

Writing current ASDM file disk0:/asdm-647.bin!!!!!!!!!!!!!!etc
17902288 bytes copied in 129.60 secs (138777 bytes/sec)
-------------------------------------
asa1# sh flash:
--#--  --length--  -----date/time------  path
    5  4096        Mar 17 2013 14:03:36  log
   10  4096        Mar 17 2013 14:03:42  coredumpinfo
   11  59          Mar 17 2013 14:03:42  coredumpinfo/coredump.cfg
   90  196         Mar 17 2013 14:03:42  upgrade_startup_errors_201303171403.log
   15  4096        Mar 17 2013 18:36:04  boot
   16  6           Mar 18 2013 18:35:00  boot/grub.conf
   80  0           Mar 17 2013 18:47:18  nat_ident_migrate
   91  28672       Jan 01 1980 00:00:00  FSCK0000.REC
   92  4096        Jan 01 1980 00:00:00  FSCK0001.REC
   93  28672       Jan 01 1980 00:00:00  FSCK0002.REC
   94  4096        Jan 01 1980 00:00:00  FSCK0003.REC
   95  28672       Jan 01 1980 00:00:00  FSCK0004.REC
   96  4096        Jan 01 1980 00:00:00  FSCK0005.REC
   97  17902288    Mar 20 2013 09:29:34  asdm-647.bin

268136448 bytes total (249769984 bytes free)
asa1# wr
Building configuration...
Cryptochecksum: e7e2b9ec 35d191e6 92560981 c5bfc984

3247 bytes copied in 1.370 secs (3247 bytes/sec)
[OK]



3) Формируем access-list согласно нашей задаче
asa1(config)# access-list HTTP_FTP_10000_inside extended permit tcp 192.168.1.0 255.255.255.0 host 10.10.10.201 eq www
asa1(config)# access-list HTTP_FTP_10000_inside extended permit tcp 192.168.1.0 255.255.255.0 host 10.10.10.201 eq ftp
asa1(config)# access-list HTTP_FTP_10000_inside extended permit tcp 192.168.1.0 255.255.255.0 host 10.10.10.201 eq 10000 
asa1(config)# access-list HTTP_FTP_10000_inside extended permit tcp 192.168.1.0 255.255.255.0 host 10.10.10.201 eq www 
asa1(config)# access-list HTTP_FTP_10000_inside extended permit icmp 192.168.1.0 255.255.255.0 any

4) Применяем созданный access-list  на inside интерфейс
asa1(config)# access-group HTTP_FTP_10000_inside in interface inside

5) Настраиваем service-policy аля ip inspect

 

asa1(config)# policy-map global_policy
определяем название map
asa1(config-pmap)# class-map inspection_default
определяем дефолтные настройки совпадения по трафику
asa1(config-cmap)# match default-inspection-traffic
asa1(config-cmap)# exit
------------------------------

теперь создаём класс inspection_default 
и доверяем ему инспектировать трафик
далее прописываем какой вид трафика он будет инспектировать

------------------------------
asa1(config)# policy-map global_policy
asa1(config-pmap)# class inspection_default
asa1(config-pmap-c)# inspect ftp
asa1(config-pmap-c)# inspect icmp
asa1(config-pmap-c)# exit
asa1(config-pmap)# exit

------------------------------
Дальше возможны варианты развития событий:

Либо вы применяете его на все интерфейсы
Что не есть хорошо, ибо схема на этом не заканчивается 
asa1(config)# service-policy global_policy global

Либо на один из интерфейсов, правильнее на inside
asa1(config)# service-policy global_policy interface inside


Результат смотреть так:
asa1(config)# show service-policy inspect ftp

P.S.
Однако тот же эффект будет и на DMZ
asa1(config)# service-policy global_policy interface DMZ




P.P.S. Написано с идеи этой статьи, однако она полностью устарела.


Справочные статьи: 
http://www.cisco.com/en/US/products/ps6120/products_configuration_example09186a0080b88904.shtml
http://www.cisco.com/en/US/products/ps6120/products_configuration_example09186a00807ee585.shtml




суббота, 9 марта 2013 г.

IPSec Configuration Manual



Преамбула, или ради чего стоило вставать с дивана.
IPSec это логический туннель, который может шифровать трафик проходящий через него своими силами. В отличии, например, от PPTP тут, не создаётся виртуальных(или используя физические) интерфейсов с чётко выделенным адресом, которые должны строго подцепиться друг к другу по определённому регламенту. 
Заместо этого, задаётся правило идентификации базовых хостов перед началом инициации туннеля и вид шифрования трафика проходящего через туннель -- это раз. 
На втором этапе расписывается MAP(карта), трафик попадающий в эту карту будет перемещаться между хостами уже по регламенту IPSec со всей песней с припевом. 
В данном случае мы расписали, что карта для IPSec:
R1(config-crypto-map)#match address 110 (см номер ACL пункта 4)
смотрим в пункт 4
R1(config)#access-list 110 permit ip 10.0.1.0 0.0.0.255 10.0.2.0 0.0.0.255
т.е. как показано на рисунке трафик пробегающий из 10.0.1.0/24 сети с одной стороны в сеть 10.0.2.0/24 на другую сторону -- будет перемещаться используя туннелирование IPSec с означенными параметрами.
После завершения кофигурирования IPSec туннеля он находится в состоянии DOWN. 
Чтобы дать стартовый пинок, достаточно пустить трафик через диапазон IPSec туннеля ( это может быть icmp пинг, http запрос  и тому подобное ) после чего, если включены
debug crypto isakmp 
debug crypto ipsec
можно наблюдать резвый лог установления туннеля.

Убедиться что пакеты прошли по туннелю можно через команду
R1#show crypto ipsec sa
    #pkts encaps: 15, #pkts encrypt: 15, #pkts digest: 15
    #pkts decaps: 11, #pkts decrypt: 11, #pkts verify: 11

Более подробно смотри развёрнутый бриф по IPSeс по тегу-метке IPSec.

P.S. Если туннель не работает, надо пересматривать конфиг до помутнения рассудка, ты где-то облажался. Если твёрдо уверен, что ошибок нет, а туннель не работает, всё стирай и пиши конфиг заново.





Шаг 1: Конфигурируем ACL для подачи "заинтересованного" трафика". 
Разрешаем протоколы AH(51), ESP(51) и UDP по порту эквивалентному ISAKMP (500)

R1(config)# access-list 102 permit ahp host 211.181.25.221 host 211.181.24.15 
R1(config)# access-list 102 permit esp host 211.181.25.221 host 211.181.24.15
R1(config)# access-list 102 permit udp host 211.181.25.221 host 211.181.24.15 eq isakmp


Применяем ACL к интерфейсу:
R1(config)# int fa 0/0

R1(config-if)# ip add 211.181.24.15 255.255.254.0
R1(config-if)# no sh
R1(config-if)# ip access-group 102 in


Проверяем:
R1#sh access-lists
Extended IP access list 102
    10 permit ahp host 211.181.25.221 host 211.181.24.15

    20 permit esp host 211.181.25.221 host 211.181.24.15
    30 permit udp host 211.181.25.221 host 211.181.24.15 eq isakmp



Шаг 2: Сконфигурируем ISAKMP:

а) Включаем и конфигурируем ISAKMP(Internet Security Association and Key Management Protocol) политики для регламентирования процедуры обмена ключами согласно выбору ESP
(Authentication, Confidential, Diffle-Hellmane and Integrity см. IPSec Framework)
(номер политики это приоритет её просмотра на предмет использования)
R1(config)# crypto isakmp enable
R1(config)# crypto isakmp policy 20
R1(config-isakmp)# authentication pre-share
R1(config-isakmp)# encryption des
R1(config-isakmp)# group 2
R1(config-isakmp)# hash sha
R1(config-isakmp)# lifetime 86400

R1(config-isakmp)# exit

б)  Задаём ключи для обмена ISAKMP IKE (Internet Key Exchange)

crypto isakmp key <0..6> если 0 ключ не шифрован, если 6-- шифрован
  0  Specifies an UNENCRYPTED password will follow
  6  Specifies an ENCRYPTED password will follow


R1(config)# crypto isakmp key 0 cisco111 address 211.181.25.221

Шаг 3: Задание трансформы, оно же вида и способа шифрования трафика в туннеле
имя значения не имеет и применяется только для локального удобства описания


R1(config)# crypto ipsec transform-set TransformOffice1 esp-aes 128
R1(cfg-crypto-trans)#mode tunnel
R1(cfg-crypto-trans)#exit

Шаг 4: Задаём ACL чтобы он пропускал трафик туннеля

R1(config)#access-list 110 permit ip 10.0.1.0 0.0.0.255 10.0.2.0 0.0.0.255
 


Шаг 5: Даём установочный пинок создавая Crypto-Map и применяя на интерфейс

R1(config)#crypto map MapOffice1 5 ipsec-isakmp
% NOTE: This new crypto map will remain disabled until a peer
        and a valid access list have been configured.

 

R1(config-crypto-map)#match address 110 (см номер ACL пункта 4)
R1(config-crypto-map)#set peer 211.181.25.221 default
R1(config-crypto-map)#set peer 172.30.3.2
(позволяет создать указание на резервного пира)
R1(config-crypto-map)#set pfs group1 (
Diffie-Hellman )
R1(config-crypto-map)#set transform-set
TransformOffice1 (см пункт 3)
R1(config-crypto-map)#set security-association lifetime seconds 86400


5) Применяем CryptoMap на интерфейс

R1(config)#int fa 0/0
R1(config-if)#cry
R1(config-if)#crypto map
MapOffice1
R1(config-if)#

*Mar  1 00:33:55.831: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON


6) Прописываем роутинг либо статический, либо через любой протокол маршрутизации, если у нас в середине провайдер, то дефолт шлюз на него естественно

R1(config)#int fa 0/0
R1(config-if)#cry
R1(config-if)#crypto map
MapOffice1
R1(config-if)#

*Mar  1 00:33:55.831: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON


R1(config)# ip route 0.0.0.0 0.0.0.0 211.181.25.221R1(config)# ip route 10.0.2.0 255.255.255.0 FastEthernet0/0

C другой стороны

R2(config)#access-list 122 permit ahp host 211.181.24.15 host 211.181.25.221
R2(config)#access-list 122 permit esp host 211.181.24.15 host 211.181.25.221
R2(config)#access-list 122 permit udp host 211.181.24.15 host 211.181.25.221 eq isakmp

R2(config)#int fa 0/0
R2(config-if)#ip add
211.181.25.221 255.255.254.0
R2(config-if)#no sh
R2(config-if)#ip access-group 122 in
R2(config-if)#exit


R2(config)#crypto isakmp policy 110
R2(config-isakmp)#authentication pre-share
R2(config-isakmp)#encryption des
R2(config-isakmp)#group 2
R2(config-isakmp)#hash sha
R2(config-isakmp)#lifetime 86400
R2(config-isakmp)#exit


R2(config)#crypto isakmp key 0 cisco111 address
211.181.24.15
 

R2(config)#crypto ipsec transform-set TransformOffice1 esp-aes 128
R2(cfg-crypto-trans)#exit

R2(config)#access-list 120 permit ip 10.0.2.0 0.0.0.255 10.0.1.0 0.0.0.255
 

R2(config)#crypto map MapOffice1 5 ipsec-isakmp
% NOTE: This new crypto map will remain disabled until a peer
        and a valid access list have been configured.

R2(config-crypto-map)#match address 120
R2(config-crypto-map)#set peer
211.181.24.15 default
R2(config-crypto-map)#set pfs group1
R2(config-crypto-map)#set transform-set
TransformOffice1
R2(config-crypto-map)#set security-association lifetime seconds 86400
 

R2(config-crypto-map)#int fa 0/0
 R2(config-if)#crypto map
MapOffice1
 R2(config-if)#
*Mar  1 01:12:55.539: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON
R4(config-if)#exit


R2(config)# ip route 0.0.0.0 0.0.0.0 211.181.24.15
R2(config)# ip route 10.0.1.0 255.255.255.0 FastEthernet0/0



среда, 6 марта 2013 г.

GRE tunnel

Настройка  с обоих концов:

R1(config)#int tunnel 0
R1(config-if)#ip add 10.0.0.1 255.255.255.252
R1(config-if)#tunnel source fa 0/1
R1(config-if)#tunnel destination 201.85.34.65
R1(config-if)#tunnel mode gre ip



R1(config)#int tunnel 0
R1(config-if)#ip add 10.0.0.2 255.255.255.252
R1(config-if)#tunnel source fa 0/1
R1(config-if)#tunnel destination 201.85.35.10
R1(config-if)#tunnel mode gre ip


Как мы все помним, трафик в этом туннеле ползает не зашифрованный.