Разные варианты NAT на Cisco ASA

* One-to-One (aka two-way) NAT (ASA 5510, ASAOS 7.2.1)

The syntax for this can be confusing. Here is a generic example:
static (outside interface name, inside interface name) inside ip, outside ip netmask 255.255.255.255

static (internet,office) 192.168.77.101 216.142.200.221 netmask 255.255.255.255
static (internet,office) 192.168.77.102 216.142.200.222 netmask 255.255.255.255
static (internet,office) 192.168.77.103 216.142.200.223 netmask 255.255.255.255
static (test,office) 192.168.77.104 172.30.11.14 netmask 255.255.255.255
static (test,office) 192.168.77.105 172.30.11.15 netmask 255.255.255.255

* Simple Many-to-One (aka one-way) NAT (ASA 5510, ASAOS 7.2.1)

global (outside) 1 216.142.200.220 netmask 255.255.255.255
nat (inside) 1 192.168.77.0 255.255.255.0 0 0

* Complex Many-to-One (aka one-way) NAT (ASA 5510, ASAOS 7.2.1)

access-list skip-nat-inside permit ip any host 192.168.6.11
access-list skip-nat-inside permit ip any host 192.168.6.12
access-list skip-nat-inside permit ip any 192.168.222.0 255.255.255.0

global (outside) 1 216.142.200.220 netmask 255.255.255.255
global (outside) 2 216.142.200.221 netmask 255.255.255.255
nat (inside) 0 access-list skip-nat-inside
nat (inside) 1 10.1.1.0 255.255.255.0 0 0
nat (inside) 1 172.66.3.0 255.255.255.0 0 0
nat (inside) 1 192.168.5.0 255.255.255.0 0 0
nat (inside) 2 192.168.77.0 255.255.255.0 0 0

Failover into Cisco ASA

* Basic Failover (ASA 5510, ASAOS 7.2.1, Requires 1 dedicated interface)

interface Ethernet0/0
description Colo Network
nameif colo
security-level 60
ip address 192.168.99.1 255.255.255.0 standby 192.168.99.2

interface Ethernet0/1
description Office Network
nameif office
security-level 50
ip address 192.168.77.1 255.255.255.0 standby 192.168.77.2

interface Management0/0
description LAN Failover Interface

failover
failover lan unit primary
failover lan interface fobasic Management0/0
failover key *****
failover interface ip fobasic 192.168.200.1 255.255.255.0 standby 192.168.200.2

* Stateful Failover (ASA 5550, ASAOS 8.0.4, Requires 2 dedicated interfaces)

interface GigabitEthernet0/0
description Colo Network
nameif colo
security-level 60
ip address 192.168.99.1 255.255.255.0 standby 192.168.99.2

interface GigabitEthernet0/1
description STATE Failover Interface

interface Management0/0
description LAN Failover Interface

interface GigabitEthernet1/0
description Office Network
nameif office
security-level 50
ip address 192.168.77.1 255.255.255.0 standby 192.168.77.2

failover
failover lan unit primary
failover lan interface fobasic Management0/0
failover key *****
failover link fostate GigabitEthernet0/1
failover interface ip fobasic 192.168.200.1 255.255.255.0 standby 192.168.200.2
failover interface ip fostate 192.168.201.1 255.255.255.0 standby 192.168.201.2

Cisco ASA — Enable SSH

asa1# conf term
asa1(config)# crypto key generate rsa
INFO: The name for the keys will be:
Keypair generation process begin. Please wait...

asa1(config)# show crypto key mypubkey rsa
Key pair was generated at: 16:24:10 UTC Jan 6 2009
Key name:
Usage: General Purpose Key
Modulus Size (bits): 1024
Key Data:

xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxx

ssh 192.168.1.25 255.255.255.255 inside
ssh timeout 30
ssh version 2
username cisco password xxxxxxx
aaa authentication ssh console LOCAL

Cisco ASA — General VPN Troubleshooting

show vpn-sessiondb remote
show vpn-sessiondb remote | include Username

show ipsec sa
show ipsec sa detail
show ipsec sa | include access-list
show ipsec sa | include crypto endpt

show ipsec sa entry
show ipsec sa entry detail
show ipsec sa entry | include peer
show ipsec sa entry | begin peer address: 192.168.1.10
show ipsec sa entry detail | begin peer address: 192.168.1.10
show ipsec sa peer 192.168.1.10
show ipsec sa peer 192.168.1.10 detail

show ipsec stats
show ipsec sa summary

Перехват трафика на Cisco ASA

Предисловие

…Есть сервер приложения. На нем вертится это самое приложение. Сам сервер на всякий случай спрятан от пользователей за фаерволом.

Звонит однажды администратор приложения сетевому администратору и говорит:

— Я вчера запустил новую фишку в своей программе, но у пользователей она не работает. Наверное, твой фаервол режет такой необходимый для юзеров трафик.

— Хорошо – говорит сетевой админ. – Скажи мне, какие порты использует твоя новая фишка.

— TCP/abxy и TCP/abxz

— эти порты открыты на фаерволе. У тебя что то не так на сервере.

— На сервере все в порядке. Это на твоем сетевом железе что то не так.

Один из способов решения проблемы — посмотреть и проанализировать интересующий обоих администраторов трафик. В данном случае можно обойтись без снифера так как cisco ASA умеет перехватывать проходящий через нее трафик. О том, как это сделать рассказано в этой статье.

Примеры настройки для Cisco ASA5510.

Процесс состоит из нескольких этапов:

— создание access-list-ов, описывающих трафик, который нужно перехватить

— запуск перехватчиков

— просмотр перехваченных данных

Схема соединения, рассматриваемых ниже примеров, представлена на рисунке.

 

Сначала создаем access-list, в котором описываем трафик, который собираемся перехватывать.

asa1(config)#

asa1(config)#access-list CAPT1 extended permit ip host 10.1.1.10 host 192.168.1.4

asa1(config)#access-list CAPT1 extended permit ip host 192.168.1.4 host 10.1.1.10

asa1(config)#

Согласно этому листу, будем перехватывать весь ip трафик, идущий в обоих направлениях между 10.1.1.10 и 192.168.1.4. При необходимости, можно ограничиться только нужными протоколами и портами.

Теперь стартуем перехват пакетов с помощью команды capture

asa1#

asa1#capture CA1 interface outside access-list CAPT1

asa1#

Здесь CA1 – это имя перехватчика. outside – имя интерфейса, на котором будем перехватывать пакеты.

По-хорошему, надо запустить еще один перехватчик – на интерфейсе ‘DMZ’.

asa1#

asa1#capture CA2 interface DMZ access-list CAPT1

asa1#

В результате мы будем иметь данные о трафике на обоих интерфейсах. Если эти данные будут различаться, можно будет сделать вывод о том, что ASA действительно не пропускает определенный трафик. Дело в том, что команда capture перехватывает трафик до того, как к нему будут применены какие либо политики безопасности. Пусть, например, access-list на входе интерфейса outside не пропускает любые ICMP пакеты. Тем не менее, перехватчик, настроенный на этом интерфейсе, увидит ‘следы’ от команды ‘ping’

Проверим состояние перехватчиков

asa1#

asa1#sh capture

capture CA1 type raw-data access-list CAPT1 interface outside [Capturing - 0 bytes]

capture CA2 type raw-data access-list CAPT1 interface DMZ[Capturing - 0 bytes]

asa1#

Теперь запустим ping с компьютера пользователя в сторону сервера.

C:\>ping 192.168.1.4

Pinging 192.168.1.4with 32 bytes of data:

Reply from 192.168.1.4: bytes=32 time=1ms TTL=128

Reply from 192.168.1.4: bytes=32 time=1ms TTL=128

Reply from 192.168.1.4: bytes=32 time=1ms TTL=128

Reply from 192.168.1.4: bytes=32 time=1ms TTL=128

Ping statistics for 192.168.1.4:

Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

Approximate round trip times in milli-seconds:

Minimum = 1ms, Maximum = 1ms, Average = 1ms

C:\>

Еще раз проверим состояние перехватчиков.

asa1#

asa1#sh capture

capture CA1 type raw-data access-list CAPT1 interface outside [Capturing - 720 bytes]

capture CA2 type raw-data access-list CAPT1 interface DMZ[Capturing - 720 bytes]

asa1#

Судя по тому, что количество перехваченных байт теперь больше 0, в буферах перехватчиков появились данные. Посмотрим, что они из себя представляют.

asa1#

asa1#sh capture CA1

8 packets captured

1: 15:39:53.928647 10.1.1.10 > 192.168.1.4: icmp: echo request

2: 15:39:53.928952 192.168.1.4 > 10.1.1.10: icmp: echo reply

3: 15:39:54.921384 10.1.1.10 > 192.168.1.4: icmp: echo request

4: 15:39:54.921690 192.168.1.4 > 10.1.1.10: icmp: echo reply

5: 15:39:55.921384 10.1.1.10 > 192.168.1.4: icmp: echo request

6: 15:39:55.921674 192.168.1.4 > 10.1.1.10: icmp: echo reply

7: 15:39:56.921430 10.1.1.10 > 192.168.1.4: icmp: echo request

8: 15:39:56.921720 192.168.1.4 > 10.1.1.10: icmp: echo reply

8 packets shown

asa1#
asa1#sh capture CA2

8 packets captured

1: 15:39:53.928815 10.1.1.10 > 192.168.1.4: icmp: echo request

2: 15:39:53.928937 192.168.1.4 > 10.1.1.10: icmp: echo reply

3: 15:39:54.921522 10.1.1.10 > 192.168.1.4: icmp: echo request

4: 15:39:54.921659 192.168.1.4 > 10.1.1.10: icmp: echo reply

5: 15:39:55.921522 10.1.1.10 > 192.168.1.4: icmp: echo request

6: 15:39:55.921644 192.168.1.4 > 10.1.1.10: icmp: echo reply

7: 15:39:56.921552 10.1.1.10 > 192.168.1.4: icmp: echo request

8: 15:39:56.921705 192.168.1.4 > 10.1.1.10: icmp: echo reply

8 packets shown

asa1#

Мы получили две ‘фотографии’ прохождения пакетов через интерфейсы фаервола. Можем, даже, сказать, что на прохождение от ‘outside’ до ‘DMZ’ пакетам требуется 120 — 170 мкс, а в обратном направлении — 15 -30 мкс.

Теперь попробуем открыть WEB станицу с сервера 192.168.1.4 и посмотрим, на перехваченный трафик:

asa1#

asa1# sh cap CA1

35 packets captured

1: 14:09:43.657238 10.1.1.10.3029 > 192.168.1.4.80: S 517995293:517995293(0) win 65535

2: 14:09:43.657558 192.168.1.4.80 > 10.1.1.10.3029: S 2097782201:2097782201(0) ack 517995294 win 8192

3: 14:09:43.657924 10.1.1.10.3029 > 192.168.1.4.80: . ack 2097782202 win 65535

4: 14:09:43.658092 10.1.1.10.3029 > 192.168.1.4.80: P 517995294:517995577(283) ack 2097782202 win 65535

5: 14:09:43.658245 192.168.1.4.80 > 10.1.1.10.3029: P 2097782202:2097782203(1) ack 517995577 win 8191

. . . . . .

. . . . . .

asa1#

Для того, что бы увидеть содержимое пакетов данных, воспользуемся командой ‘show capture CA1 dump’.

asa1# sh cap CA1 dump

35 packets captured

1: 14:09:43.657238 10.1.1.10.3029 > 192.168.1.4.80: S 517995293:517995293(0) win 65535

0x0000 4500 0030 f378 4000 7f06 40bd 9bf8 ef39 E..0.x@...@....9

0x0010 0a19 3247 0bd5 0050 1edf fb1d 0000 0000 ..2G...P........

0x0020 7002 ffff 9633 0000 0204 04ec 0101 0402 p....3..........

2: 14:09:43.657558 192.168.1.4.80 > 10.1.1.10.3029: S 2097782201:2097782201(0) ack 517995294 win 8192

0x0000 4500 002c 1db4 0000 ff06 d685 0a19 3247 E..,..........2G

0x0010 9bf8 ef39 0050 0bd5 7d09 9db9 1edf fb1e ...9.P..}.......

0x0020 6012 2000 6fee 0000 0204 0564 `. .o......d

3: 14:09:43.657924 10.1.1.10.3029 > 192.168.1.4.80: . ack 2097782202 win 65535

0x0000 4500 0028 f37a 4000 7f06 40c3 9bf8 ef39 E..(.z@...@....9

0x0010 0a19 3247 0bd5 0050 1edf fb1e 7d09 9dba ..2G...P....}...

0x0020 5010 ffff a75b 0000 P....[..

4: 14:09:43.658092 10.1.1.10.3029 > 192.168.1.4.80: P 517995294:517995577(283) ack 2097782202 win 65535

0x0000 4500 0143 f37b 4000 7f06 3fa7 9bf8 ef39 E..C.{@...?....9

0x0010 0a19 3247 0bd5 0050 1edf fb1e 7d09 9dba ..2G...P....}...

0x0020 5018 ffff 24a9 0000 4745 5420 2f20 4854 P...$...GET / HT

0x0030 5450 2f31 2e31 0d0a 4163 6365 7074 3a20 TP/1.1..Accept:

0x0040 2a2f 2a0d 0a41 6363 6570 742d 4c61 6e67 */*..Accept-Lang

0x0050 7561 6765 3a20 7275 0d0a 4163 6365 7074 uage: ru..Accept

0x0060 2d45 6e63 6f64 696e 673a 2067 7a69 702c -Encoding: gzip,

0x0070 2064 6566 6c61 7465 0d0a 5573 6572 2d41 deflate..User-A

0x0080 6765 6e74 3a20 4d6f 7a69 6c6c 612f 342e gent: Mozilla/4.

0x0090 3020 2863 6f6d 7061 7469 626c 653b 204d 0 (compatible; M

0x00a0 5349 4520 362e 303b 2057 696e 646f 7773 SIE 6.0; Windows

0x00b0 204e 5420 352e 313b 2053 5631 3b20 2e4e NT 5.1; SV1; .N

0x00c0 4554 2043 4c52 2031 2e31 2e34 3332 323b ET CLR 1.1.4322;

0x00d0 2049 6e66 6f50 6174 682e 323b 202e 4e45 InfoPath.2; .NE

0x00e0 5420 434c 5220 322e 302e 3530 3732 373b T CLR 2.0.50727;

0x00f0 202e 4e45 5420 434c 5220 332e 302e 3034 .NET CLR 3.0.04

0x0100 3530 362e 3330 3b20 4d53 2d52 5443 204c 506.30; MS-RTC L

0x0110 4d20 3829 0d0a 486f 7374 3a20 3130 2e32 M 8)..Host: 10.2

0x0120 352e 3530 2e37 310d 0a43 6f6e 6e65 6374 5.50.71..Connect

0x0130 696f 6e3a 204b 6565 702d 416c 6976 650d ion: Keep-Alive.

0x0140 0a0d 0a ...

. . . . . .

. . . . . .

asa1#

В этом коротком фрагменте мы видим, как браузер начинает открывать WEB страницу.

Таким образом, наша цель – перехватить и просмотреть пользовательский трафик, достигнута.

По умолчанию размер буфера, в котором перехватчики хранят данные, – 500Кбайт. Через некоторое время буферы заполнятся, и новые данные перестанут запоминаться.

asa1#

asa1# sh capture

capture CA1 type raw-data access-list CAPT1 interface outside [Buffer Full - 524208 bytes]

capture CA2 type raw-data access-list CAPT1 interface DMZ[Buffer Full - 524208 bytes]

asa1#

Для очистки буфера используется команда ‘clear capture’.

asa1#

asa1# clear capture CA1

asa1# sh capture

capture CA1 type raw-data access-list CAPT1 interface outside [Capturing - 0 bytes]

capture CA2 type raw-data access-list CAPT1 interface DMZ[Capturing - 0 bytes]

asa1#

Для полной остановки и удаления перехватчиков нужно выполнить команду ‘no capture’.

asa1#

asa1# no capture CA1

asa1# no capture CA2

asa1#

asa1# sh capture

asa1#

Теперь можно удалить ставший ненужным access-list CAPT1.

asa1(config)#

asa1(config)#no access-list CAPT1 extended permit ip host 10.1.1.10 host 192.168.1.4

asa1(config)#no access-list CAPT1 extended permit ip host 192.168.1.4 host 10.1.1.10

asa1(config)#

В заключении можно сделать вывод: Cisco ASA предоставляет мощное средство мониторинга, которое поможет найти ошибки в настройке сетевых устройств.

Настройка Internet Authentication Service (RADIUS) в Windows Server 2003

Устанавливаем службу Internet Authentication Service, которая в Windows Server выполняет роль RADIUS-сервера. Установка производится из меню Установка программ, дополнительные компоненты Windows.

Вводим настройки Cisco ASA 5510 — IP и пароль.. В свою очередь его прописываем на Cisco ASA:

aaa-server MS-AD protocol radius
aaa-server MS-AD (inside) host 10.51.10.254
key CiscoDDD

Вводим настройка аутентификации.

Отключаем шифрование.

Теперь Cisco будет успешно авторизоваться на RADIUS-сервере.

ADSL на Cisco 857

Переходим в привилегированный режим, в котором выполняются все основные операции, следующей командой:

Router>enable
Router#

Далее можно сразу приступить к конфигурированию маршрутизатора, но я предпочитаю очищать дефолтный конфиг и настраивать с ноля. Для этого выполняем следующую команду и перегружаем роутер:

Router#erase startup-config
Router#reload

Далее подтверждаем желание перегрузиться и ждем…

В процессе загрузки маршрутизатор предложит войти в меню автоматической конфигурации, но мы вежливо отказываемся, ответив на вопрос no и дождавшись полной загрузки снова входим в привилегированный режим (на это раз вводить логин и пароль не нужно). Для входа в меню конфигурации роутера вводим команду:

Router#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#

Задаем имя роутера и доменное имя и добавляем пользователя:

Router(config)#hostname R1
R1(config)#ip domain-name mydomain
R1(config)#username user privilege 15 password mypass

Теперь необходимо обеспечить элементарную безопасность роутера включив шифрование паролей, установив пароли на терминальное подключение и привилегированный режим а также включив ssh, который понадобиться в дальнейшем для управления маршрутизатором через сеть.

R1(config)#service password-encryption
R1(config)#line con 0
R1(config-line)#password mypassword
R1(config-line)#login
R1(config-line)#exit
R1(config)#enable secret mysecretpass
R1(config)#crypto key generate rsa 1024
R1(config)#ip ssh time-out 120
R1(config)#ip ssh authentication-retries 3
R1(config)#line vty 0 4
R1(config-line)#transport input ssh
R1(config-line)#login local

В результате у нас будет установлен пароль на терминальное подключение mypassword, установлен пароль на привилегированный режим mysecretpass, сгенерирован 1024-битный rsa ключ для аутентификации через ssh и разрешено удалённое подключение только через ssh (телнет выключен) для которого создан пользователь user с наивысшими правами и паролем mypass.

Также за ненадобностью отключаем возможность управление роутером через SDM а так же протокол CDP:

R1(config)#no ip http server
R1(config)#no ip http secure-server
R1(config)#no cdp run

Теперь нужно назначить ip адрес маршрутизаторы, дабы им можно было управлять не только через консоль, но и через сеть. Для этого назначаем vlan’у номер 1 ip адрес (можно создать и новый vlan, но тогда нужно будет порту, который смотрит в локальную сеть назначать новый vlan, т.к. по умолчанию всем 4 портам назначен первый vlan).

R1(config)#interface vlan1
R1(config-if)#ip address 192.168.1.1 255.255.255.0
R1(config-if)#ip nat inside
R1(config-if)#no shutdown
R1(config-if)#interface fastethernet 0
R1(config-if)#no shutdown
R1(config-if)#exit

Все, теперь можно управлять маршрутизатором через ssh указав ip 192.168.1.1, подключив первый порт роутера (Fa0) к сети. Этот же адрес будет адресом шлюза по умолчанию в локальной сети.

Теперь переходим к настройке подключения к провайдеру.

R1(config)#interface atm0
R1(config-if)#description Connectet to Ukrtelecom's DSLAM
R1(config-if)#no ip address
R1(config-if)#logging event atm pvc state
R1(config-if)#pvc 1/32
R1(config-if-atm-vc)#encapsulation aal5snap
R1(config-if-atm-vc)#pppoe-client dial-pool-number 1
R1(config-if-atm-vc)#exit
R1(config-if)#interface Dialer0
R1(config-if)#description ISP PPPoE
R1(config-if)#ip address negotiated
R1(config-if)#ip nat outside
R1(config-if)#ip mtu 1492
R1(config-if)#encapsulation ppp
R1(config-if)#dialer pool 1
R1(config-if)#ppp authentication pap callin
R1(config-if)#ppp pap sent-username ppplogin@dsl.ukrtel.net password ppppass
R1(config-if)#exit
R1(config)#ip route 0.0.0.0 0.0.0.0 Dialer0

А теперь по-подробней: дня начала конфигурируем atm интерфейс, задав нужные параметры pvc и указываем тип инкапсуляции, далее настраиваем виртуальный интерфейс Dialer0, указав что ip получаем по DHCP от провайдера (ip address negotiated), включаем нат, указываем размер mtu, тип инкапсуляции (ppp), авторизации (ppp authentication pap callin) ну и задаем сами параметры авторизации — логин и пароль (ppplogin@dsl.ukrtel.net и ppppass соответственно). Напоследок назначаем маршрут по умолчанию.

Теперь настраиваем NAT и если необходимо, пробрасываем порт на внутреннюю машинку:

R1(config)#ip nat inside source list 1 interface Dialer0 overload
R1(config)#access-list 1 permit 192.168.1.0 0.0.0.255
R1(config)#ip nat inside source static tcp 192.168.1.2 80 interface Dialer0 80

Также необходимо на локальном интерфейсе (в нашем случае Fa0) указать размер mtu, выполнив команду:

R1(config-if)#ip tcp adjust-mss 1452

Все, настройка закончена… можно приступать к тестированию.

Для этого на компьютере, подключённом к локальной сети настраиваем параметры сети, указав шлюз по умолчанию — ip маршрутизатора, а днс — ip адреса OpenDNS (давненько пользуюсь, удобный сервис) либо DNS своего провайдера.

На этом все. На самом деле настроек гораздо больше, но в большинстве случаев должно хватить и этого.

Надеюсь кому-то эта статейка будет полезна. Комментарии, критика и пожелания приветствуются 🙂

P.S. Писал по памяти глядя на рабочие конфиги, так что могут быть неточности. Все настройки производились на Cisco 857, но по идее должны работать и на остальных 800-й серии, которые поддерживают ADSL. Для включения ssh необходим IOS advsecurityk9

URL фильтрация в Cisco ASA

Одной из возможностей Cisco ASA является фильтрация по URL.

Что это значит? Это значит, что мы можем настроить наше устройство таким образом, чтоб запретить или наоборот разрешить вход пользователю по определенному URL, либо его содержанию.

Фильтрация URL, способом как это будет показано ниже, подходит для небольших офисов, небольшого количества правил. Если вы планируете пользоваться фильтрацией в больших компания и использовать большое количество правил, то рекомендуется использовать отдельные продукты, такие как WebSense или N2H2, которые замечательно интегрируются вместе с Cisco ASA.

Рассмотрим более подробно на примерах.

Допустим мы хотим заблокировать ресурс mail.ru (для нашей компании это стало актуально, потому как «работники» стали много проводить рабочего времени на этом ресурсе, играются, ну и так далее.), ну и всеми любимые одноклассники (на работе нужно работать )

Для начала нужно описать регулярным выражением тот url, или его содержимое, с которым мы будем в дальнейшем работать (тоесть блокировать).

В режиме глобальной конфигурации:

[cc lang=»bash»]
regex blockmailru «mail.ru»
regex blockodnoklassniki.ru «odnoklassniki.ru»
[/cc]

Затем создаем class-map:

[cc lang=»bash»]
class-map type inspect http match-any block-url-class
match request header host regex blackmailru
match request header host regex blockodnoklassniki.ru
[/cc]

После создаем policy-map. Эта политика будет просто дропать соединения:

[cc lang=»bash»]
policy-map type inspect http block-url-policy
parametrs
class block-url-class
drop-connection log
policy-map global_policy
class inspection_default
inspect http block-url-policy
[/cc]

Ну и «привязываем» нашу политику:

[cc lang=»text»]
service-policy global_policy global
[/cc]

Теперь пробуем зайти на эти два сайта. Если все настроено верно, то соединение с ресурсом не будет установлено.

К слову о regex. Для того чтобы проверить наше регулярное выражение, можно использовать test regex, например:

[cc lang=»text»]
ciscoasa# test regex http://mail.ru mail.ru
INFO: Regular expression match succeeded.
ciscoasa#
[/cc]

http://mail.ru – это пользовательский запрос

mail.ru – это наше регулярное выражение.

Ну и собственно устройство нам говорит, что данный запрос попадает под наше выражение.

[cc lang=»text»]
ciscoasa# test regex http://mail.ru maail.ru
INFO: Regular expression match failed.
ciscoasa#
[/cc]

Здесь соответственно не попадает.

Описанными действиями мы запретили посещение сайтов абсолютно всем пользователям.

Предположим, что необходимо дать доступ для некоторых пользователей, например начальнику или еще кому, не важно.

Пусть наш разрешенный хост имеет адрес 10.0.0.20.

Создадим access-list, в котором запретим применять url фильтры для данной машины.

[cc lang=»text»]
access-list userregex extended deny tcp host 10.0.0.20 any eq www
access-list userregex extended permit tcp any any eq www
[/cc]

Далее создадим class-map:

[cc lang=»text»]
class-map block-users-class
match access-list userregex
[/cc]

Теперь создадим policy-map

[cc lang=»text»]
policy-map block-users-url-policy
class block-users-class
inspect http block-url-policy
[/cc]

И «привяжем» эту политику на интерфейс, который «смотрит» в локальную сеть – inside

[cc lang=»text»]
service-policy block-users-url-policy interface inside
[/cc]

Если все настроено верно, то теперь мы получим: Всем пользователям кроме хоста 10.0.0.20 будет запрещен доступ на mail.ru, odnoklassniki.ru.

Что и требовалось.

Может возникнуть такая ситуация, когда нужно дать доступ только к одному URL. Для этого немного модифицируем наш class-map

[cc lang=»text»]
class-map type inspect http match-any block-url-class
match not request header host regex blackmailru
[/cc]

Всё остальное остается прежним. Таким образом мы дали доступ только на описанный в соответствующем regex URL.

Для того, чтоб запретить доступ к тому или иному URL , который содержит скажем слово «music», мы можем написать class-map таким образом:

[cc lang=»text»]
class-map type inspect http match-all allow-url-class
match request uri regex music
regex music «/music/»
[/cc]

Теперь Вы сами можете сделать достаточно гибкие правила для URL фильтрации используя Cisco ASA и не используя какие-либо внешние продукты, такие как WebSenser, squid, и так далее.

Для создания собственных регулярных выражений, ознакомьтесь здесь

Включение SSH на Cisco ASA 5510

Once you are done with the basic configuration of Cisco ASA 5510, the next step is to enable SSH access from remote computers internally or externally, Steps involved in configuring SSH is as follows

[cc lang=»text»]
Firewall_5510# config t
Firewall_5510(config)# enable password xxxxx(your password)
[/cc]

Enable password is necessary to enable ssh access

[cc lang=»text»]
Firewall_5510(config)# username test password test123
[/cc]

User name and password for connecting using ssh

[cc lang=»text»]
Firewall_5510(config)# aaa authentication ssh console LOCAL
[/cc]

Different authentication can be  configured, like RADIUS, TACACS+, etc.., here we specified Local authentication with user name and password mentioned above

[cc lang=»text»]
Firewall_5510(config)# ssh 192.168.x.x 255.255.255.o inside
[/cc]

Permit ssh access to firewall from specified ip or subnet, inside

[cc lang=»text»]
Firewall_5510(config)# domain-name TEST.ORG
[/cc]

Domain name of your company. RSA key is generated using domain name + firewall name combination

[cc lang=»text»]
Firewall_5510(config)# crypto key generate rsa modulus 1024
[/cc]

Generate RSA key

You are done !!!!!!!!!!!!!!!!!!!!!!

now the firewall can be accessed from inside network……………………

Авторизация пользователей на Cisco ASA5510

Классическая авторизация пользователей. Пример конфигурации Cisco ASA5510.

Предисловие

Это третья часть статьи, посвященной применению авторизации для выборочного ограничения доступа пользователей к сетевым ресурсам и сервисам. Здесь рассматривается конфигурация ASA5510 .

Конфигурация

Здесь представлена конфигурация фаервола для примера, описанного в первой части статьи. Некоторые строки, используемые в реальной конфигурации, но не имеющие отношения к рассматриваемому вопросу, здесь пропущены. Строки, имеющие непосредственное отношение к авторизации выделены жирным шрифтом. В тексте есть короткие комментарии. Некоторые важные моменты более подробно рассмотрены ниже.

[cc lang=»bash»]
!
hostname firewall1
!
! — Список серверов —
names
name 192.168.1.100 FTP_server_1
name 192.168.1.101 FTP_server_2
name 192.168.1.102 TS_server
name 192.168.1.103 DMZ_DB_server
name 10.1.1.10 OUT_DB_server
!
!
interface Management0/0
shutdown
nameif management
security-level 100
management-only
no ip address
!
interface Ethernet0/0
description OUT
speed 100
duplex full
nameif outside
security-level 0
ip address 10.1.1.250 255.255.255.0
no shutdown
!
interface Ethernet0/1
description DMZ
speed 100
duplex full
nameif DMZ
security-level 50
ip address 192.168.1.254 255.255.255.0
no shutdown
!
interface Ethernet0/2
shutdown
no nameif
no security-level
no ip address
!
interface Ethernet0/3
shutdown
no nameif
no security-level
no ip address
!
!
! — Список сетевых групп —
object-group network DMZ_net
network-object 192.168.1.0 255.255.255.0
object-group network FTP_servers
network-object host FTP_server_1
network-object host FTP_server_2
!
!
access-list OUT_IN remark ***OUT->DMZ***
access-list OUT_IN remark ***ftp traffic to FTP servers***
access-list OUT_IN extended permit tcp any object-group FTP_servers eq ftp
access-list OUT_IN extended permit tcp any object-group FTP_servers eq ftp-data
access-list OUT_IN remark ***RDP traffic to DMZ servers***
access-list OUT_IN extended permit tcp any object-group DMZ_net eq 3389
access-list OUT_IN remark ***DB traffic between DB servers***
access-list OUT_IN extended permit tcp host OUT_DB_server host DMZ_DB_server eq 1526
access-list OUT_IN remark ***Virtual Telnet for Authentication*** access-list OUT_IN extended permit tcp any host 10.2.2.2 eq https
access-list OUT_IN extended deny ip any any log
!
!
access-list DMZ_IN remark ***DMZ->OUT***
access-list DMZ_IN remark ***ftp traffic from FTP servers***
access-list DMZ_IN extended permit tcp object-group FTP_servers eq ftp any
access-list DMZ_IN extended permit tcp object-group FTP_servers eq ftp-data any
access-list DMZ_IN remark ***RDP traffic from DMZ servers***
access-list DMZ_IN extended permit tcp object-group DMZ_net eq 3389 any
access-list DMZ_IN remark ***DB traffic between DB servers***
access-list DMZ_IN extended permit tcp host DMZ_DB_server eq 1526 host OUT_DB_server
access-list DMZ_IN remark ***Virtual Telnet for Authentication*** access-list DMZ_IN extended permit tcp host 10.2.2.2 eq https any
access-list DMZ_IN extended deny ip any any log
!
!
logging enable
logging buffered informational
!
!
! — NAT не используем, —
! — адреса транслируются сами в себя —
nat (DMZ) 0 192.168.1.0 255.255.255.0
static (outside,DMZ) 10.1.1.0 10.1.1.0 netmask 255.255.255.0
! — Без этой строки WEB страница аутентификации не откроется —
static (outside,DMZ) 10.2.2.2 10.2.2.2 netmask 255.255.255.255
!
!
access-group OUT_IN in interface outside
access-group DMZ_IN in interface DMZ
route outside 0.0.0.0 0.0.0.0 10.1.1.254 1
timeout xlate 4:00:00
timeout conn 1:00:00 half-closed 0:10:00 udp 0:02:00 icmp 0:00:02
timeout sunrpc 0:10:00 h323 0:05:00 h225 1:00:00 mgcp 0:05:00 mgcp-pat 0:05:00
timeout sip 0:30:00 sip_media 0:02:00 sip-invite 0:03:00 sip-disconnect 0:02:00
! — Определяем таймаут аутентификации —
timeout uauth 4:00:00 absolute
!
!
! — Указываем TACACS+ сервер —
aaa-server ACS_1 protocol tacacs+
aaa-server ACS_1 (DMZ) host 192.168.1.4
key test
!
! — Для управления фаерволом потребуется —
! — аутентифицироваться на TACACS+ сервере. —
! — Если TACACS+ сервер не доступен, —
! — можно зайти локальным пользователем. —
aaa authentication serial console ACS_1 LOCAL
aaa authentication enable console ACS_1 LOCAL
aaa authentication ssh console ACS_1 LOCAL
!
!
! — Говорим, что весь входящий с наружи трафик —
! — требует аутентификации. —
aaa authentication include ip outside 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 ACS_1
! — Исключение для трафика серверов БД —
aaa authentication exclude tcp/1526 outside DMZ_DB_server 255.255.255.255 OUT_DB_server 255.255.255.255 ACS_1
!
!
! — Говорим, что весь входящий с наружи трафик —
! — требует авторизации. —
aaa authorization include ip outside 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 ACS_1
! — Исключение для трафика серверов БД —
aaa authorization exclude tcp/1526 outside DMZ_DB_server 255.255.255.255 OUT_DB_server 255.255.255.255 ACS_1
!
!
! — Без этой строки WEB страница аутентификации не откроется —
aaa authentication include https outside 10.2.2.2 255.255.255.255 0.0.0.0 0.0.0.0 ACS_1
aaa proxy-limit 128
!
! — Без этой строки WEB страница аутентификации —
! — будет иметь намного худший вид —
aaa authentication listener https outside port 1443 redirect
! — Указываем виртуальный адрес WEB страницы аутентификации —
virtual telnet 10.2.2.2
telnet timeout 5
ssh 10.1.1.0 255.255.255.0 outside
ssh timeout 5
ssh version 2
console timeout 5
!
no threat-detection basic-threat
no threat-detection statistics access-list
ssl encryption des-sha1 rc4-md5
!
! — Локальный пользователь для управления —
! — фаерволом на случай, когда —
! — TACACS+ сервер не доступен, —
username admin1 password test privilege 15
!
!
[/cc]
Комментарий к конфигурации

aaa-server ACS_1 protocol tacacs+ aaa-server ACS_1 (DMZ) host 192.168.1.4 key test

Этими строками мы говорим фаерволу, что AAA сервером является TACACS+ сервер, указываем его ip адрес и ключ.

aaa authentication include ip outside 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 ACS_1 aaa authorization include ip outside 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 ACS_1

Здесь говорим, что весь трафик, приходящий на интерфейс outside должен пройти аутентификацию и авторизацию.

aaa authentication exclude tcp/1526 outside DMZ_DB_server 255.255.255.255 OUT_DB_server 255.255.255.255 ACS_1 aaa authorization exclude tcp/1526 outside DMZ_DB_server 255.255.255.255 OUT_DB_server 255.255.255.255 ACS_1

Делаем исключение для трафика серверов БД. Этот трафик должен проходить без аутентификации и авторизации.

Virtual Telnet

Вы, наверное, заметили, что почти половина выделенных строк связана с ip адресом 10.2.2.2. Это виртуальный адрес WEB страницы, с помощью которой пользователь проходит аутентификацию и авторизацию. Разберемся с этим поподробнее.

Когда пользователь открывает HTTP, HTTPS, FTP и Telnet сессию, требующую аутентификации или авторизации, у него в браузере или в окне FTP или Telnet сессии появляется приглашение для ввода логина и пароля. Когда пользователь пытается открыть сессию по другим портам, например RDP соединение, предложение для ввода пароля не появляется, сессия закрывается по таймауту, а в логе фаервола появится запись “User must authenticate before using this service”.

Прежде чем открывать RDP сессию, пользователь должен авторизоваться на фаерволе. Но как это сделать? Где вводить логин и пароль? Для этого и нужен Virtual Telnet.

Несмотря на название, это совсем не telnet. Это дополнительная https сессия. Для пользователя процесс аутентификации выглядит следующим образом:

Пользователь запускает браузер и набирает в строке адреса https://10.2.2.2.

После подтверждения доверия сертификату, откроется следующее окно.

Обратите внимание, что изначально открывалась страница с адресом 10.2.2.2. А теперь ASA перенаправила пользователя на реальный ip адрес — 10.1.1.250. Подробнее об этом — чуть ниже.

Для продолжения надо нажать кнопку «Log in now».

В следующем окне надо ввести логин и пароль и нажать кнопку «Continue».

Если на фаерволе и ACS сервере все настроено корректно, и пользователь верно ввел логин с паролем, откроется страница как на следующем рисунке.

Теперь пользователь может открывать любые разрешенные ему соединения, пароль больше вводить не потребуется. Окно браузера можно закрыть. По завершении сеанса работы пользователь может разлогиниться. Для этого нужно снова открыть страницу аутентификации. Там отображается статус пользователя на фаерволе и указано сколько времени прошло после регистрации ( смотрите предыдущий рисунок ). Для закрытия авторизации достаточно нажать logoff.

Явно разлогиниваться не обязательно. Если в течении определенного времени все соединения открытые пользователем простаивают, фаервол сам закроет авторизацию.

Тайм аут определяется командой :

timeout uauth 4:00:00 absolute

Если пользователь логинился несколько часов назад, и теперь сомневается действтельна ли его ранее открытая регистрация или нет, он должен открыть страницу аутентификации. Там он увидит свой статус.

Для того, что бы описанный механизм работал, в конфигурации фаервола должны присутствовать следующее строки :

virtual telnet 10.2.2.2

Здесь указан виртуальный ip адрес страницы аутентификации. Именно его пользователи набирают в адресной строке браузера. Точнее они должны набрать https://10.2.2.2. Https страница загружается с фаервола. Для повышения безопасности используется не реальный ip адрес интерфейса фаервола, а виртуальный.

Это адрес надо указать в нескольких местах в конфигурации фаервола. В аксес листах должен быть открыт https трафик на виртуальный адрес страницы аутентификации.

access-list OUT_IN extended permit tcp any host 10.2.2.2 eq https access-list DMZ_IN extended permit tcp host 10.2.2.2 eq https any

Кроме того, для этого адреса надо явно прописать команду :

aaa authentication include https outside 10.2.2.2 255.255.255.255 0.0.0.0 0.0.0.0 ACS_1

Это надо сделать обязательно, даже не смотря на то, что есть команда

aaa authentication include ip outside 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 ACS_1

покрывающая все адресное пространство.

Ну и последняя строка:

aaa authentication listener https outside port 1443 redirect

Она просто улучшает внешний вид WEB станицы аутентификации. Попробуйте убрать ее из конфигурации и посмотрите, что изменилось. В разных версиях ios эта команда выглядит по-разному.