antiCisco blogs


блоги по технологиям и оборудованию cisco от инструкторов

Опубликовано 5 Ноябрь , 2015

В своих статьях Сергей описал о том, как настроить НАТ на АСА в версиях 8.3 и выше. Однако, в статье не освещается вопрос о подробностях … Итак, заинтересованным велком!

Прежде всего необходимо понять порядок обработки правил. Вот он:

— UN-NAT/Routing

— ACL

— IP опции

— NAT

— RPF

— Crypto

— Botnet фильтрация

— TCP intercept

— проверка IPsec spi

— создание flow

И только так! Поэтому, когда Вы слышите или читаете фразу, что в 8.3 «сначала NAT, потом ACL», то нужно держать в уме, что это верно только отчасти.

Что же такое UN-NAT? По факту, это NAT destination. Т.е. железка 1ым шагом меняет Destination IP в пакете, если он попадает под соответствующее правило. Если такое правило есть, то производится замена IP и одновременно с этим выбирается выходной интерфейс для пакета в случае если в НАТ правиле нет ключевого слова any. Т.е. роутинг в этом случае не производится.

Далее пакет попадает под проверку на список доступа и только после этого делается Source NAT.

Давайте рассмотрим на примере. У нас есть следующая конструкция:

ASA1(config)# sh run nat
nat (INSIDE,OUTSIDE) source static R1L0_REAL R1L0_MAPPED destination static R2L0_MAPPED R2L0_REAL
ASA1(config)# sh run object in
object network R1L0_REAL host 150.1.1.1
object network R1L0_MAPPED host 172.16.1.200
object network R2L0_REAL host 150.2.2.2
object network R2L0_MAPPED host 192.168.1.137

Напомню как следует читать данную конструкцию:

ASA1(config)# sh nat det
Manual NAT Policies (Section 1)
1 (INSIDE) to (OUTSIDE) source static R1L0_REAL R1L0_MAPPED   destination static R2L0_MAPPED R2L0_REAL
    translate_hits = 4, untranslate_hits = 4
    Source - Origin: 150.1.1.1/32, Translated: 172.16.1.200/32
    Destination - Origin: 192.168.1.137/32, Translated: 150.2.2.2/32

Если пакет приходит на INSIDE и его Source = 150.1.1.1/32, Destination = 192.168.1.137/23, то заменить Source на 172.16.1.200/32, Destination на 150.2.2.2 и отправить пакет на OUTSIDE.

Порядок обработки правил:

ASA1(config)# packet-tracer input INSIDE tcp 150.1.1.1 2000 192.168.1.137 23
Phase: 1
Type: UN-NAT
Subtype: static
Result: ALLOW
Config:
nat (INSIDE,OUTSIDE) source static R1L0_REAL R1L0_MAPPED destination static R2L0_MAPPED R2L0_REAL
Additional Information:
NAT divert to egress interface OUTSIDE
Untranslate 192.168.1.137/23 to 150.2.2.2/23

Phase: 2
Type: ACCESS-LIST
Subtype: log
Result: ALLOW
Config:
access-group ACL_INSIDE-IN in interface INSIDE
access-list ACL_INSIDE-IN extended permit ip any any
Additional Information:

Phase: 3
Type: IP-OPTIONS
Subtype:
Result: ALLOW
Config:
Additional Information:

Phase: 4
Type: NAT
Subtype:
Result: ALLOW
Config:
nat (INSIDE,OUTSIDE) source static R1L0_REAL R1L0_MAPPED destination static R2L0_MAPPED R2L0_REAL
Additional Information:
Static translate 150.1.1.1/2000 to 172.16.1.200/2000

Phase: 5
Type: ACCESS-LIST
Subtype: log
Result: ALLOW
Config:
access-group ACL_OUTSIDE-OUT out interface OUTSIDE
access-list ACL_OUTSIDE-OUT extended permit ip any any
Additional Information:

Phase: 6
Type: NAT
Subtype: rpf-check
Result: ALLOW
Config:
nat (INSIDE,OUTSIDE) source static R1L0_REAL R1L0_MAPPED destination static R2L0_MAPPED R2L0_REAL
Additional Information:

Phase: 7
Type: IP-OPTIONS
Subtype:
Result: ALLOW
Config:
Additional Information:

Phase: 8
Type: FLOW-CREATION
Subtype:
Result: ALLOW
Config:
Additional Information:
New flow created with id 20, packet dispatched to next module

Result:
input-interface: INSIDE
input-status: up
input-line-status: up
output-interface: OUTSIDE
output-status: up
output-line-status: up
Action: allow

 

Итак, сначала UN-NAT. Меняем 192.168.1.137 на 150.2.2.2 и одновременно с этим маршрутизируем на OUTSIDE.

Проверяем измененный пакет на входящем интерфейсе списком ACL_INSIDE-IN.

Делаем Source NAT. Заменяем 150.1.1.1 на 172.16.1.200

Проверяем пакет на выходном интерфейсе списком ACL_OUTSIDE-OUT.

Проверяем, что входящий и ответный пакет будут матчиться одним правилом (NAT rpf check).

Создаем flow и выплевываем пакет наружу.

Следует обратить внимание на то, что правило наше сработает не только, когда пакет идет с INSIDE на OUTSIDE, но и в обратную сторону:

ASA1(config)# packet-tracer input OUTSIDE tcp 150.2.2.2 23 172.16.1.200 2000
 Phase: 2
Type: UN-NAT
Subtype: static
Result: ALLOW
Config:
nat (INSIDE,OUTSIDE) source static R1L0_REAL R1L0_MAPPED destination static R2L0_MAPPED R2L0_REAL
Additional Information:
NAT divert to egress interface INSIDE
Untranslate 172.16.1.200/2000 to 150.1.1.1/2000

Phase: 6
Type: NAT
Subtype:
Result: ALLOW
Config:
nat (INSIDE,OUTSIDE) source static R1L0_REAL R1L0_MAPPED destination static R2L0_MAPPED R2L0_REAL
Additional Information:
Static translate 150.2.2.2/23 to 192.168.1.137/23

Все дело в том, что хоть в файле конфигурации мы видим только одну строчку, но для МСЭ мы создали две независимые НАТ записи. Это можно посмотреть, заглянув в asp table. Как видите, пакеты пропускаются и маршрутизируются даже когда RIB пуста

ASA1(config)# show asp table classify domain nat
 Input Table
in  id=0xcabb81b0, priority=6, domain=nat, deny=false
        hits=5, user_data=0xcb394608, cs_id=0x0, use_real_addr, flags=0x0, protocol=0
        src ip/id=150.1.1.1, mask=255.255.255.255, port=0
        dst ip/id=150.2.2.2, mask=255.255.255.255, port=0, dscp=0x0
        input_ifc=INSIDE, output_ifc=OUTSIDE
in  id=0xcb394db0, priority=6, domain=nat, deny=false
        hits=1, user_data=0xcb3946b0, cs_id=0x0, use_real_addr, flags=0x0, protocol=0
        src ip/id=150.2.2.2, mask=255.255.255.255, port=0
        dst ip/id=150.1.1.1, mask=255.255.255.255, port=0, dscp=0x0
        input_ifc=OUTSIDE, output_ifc=INSIDE

Либо в более привычном для админов виде:

ASA1(config)# show xlate
2 in use, 7 most used
Flags: D - DNS, i - dynamic, r - portmap, s - static, I - identity, T - twice
NAT from INSIDE:150.1.1.1 to OUTSIDE:172.16.1.200
    flags sT idle 0:00:54 timeout 0:00:00
NAT from OUTSIDE:150.2.2.2 to INSIDE:192.168.1.137

flags sT idle 0:02:51 timeout 0:00:00

Как видите, пакеты пропускаются и маршрутизируются даже в том случае, если RIB пуста: ASA1(config)# sh route

Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
 D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
 N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
 E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
 i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
 * - candidate default, U - per-user static route, o - ODR
 P - periodic downloaded static route
Gateway of last resort is not set
C    172.16.1.0 255.255.255.0 is directly connected, OUTSIDE
 C    192.168.1.0 255.255.255.0 is directly connected, INSIDE
 

Метки: ,
Опубликовано: Безопасность cisco

 

» Оставить комментарий

Вы должны войти чтобы прокомментировать.