Наверняка многие уже столкнулись с большими изменениями в синтаксисе настройки NAT при переходе от линейки ASA ОС 8.2 к 8.3. Трудно сказать, с чем связано такое резкое изменение подхода, но одно можно сказать уверенно: настройка стала менее понятна и прозрачна. Но это не повод вовсе не использовать версии 8.3, 8.4 и далее (вряд ли разработчики вернут старый синтаксис :))
Предлагаю постепенно, от простого к сложному, освоить новый синтаксис, ибо по нему регулярно возникают вопросы в форуме и необходимость статьи назрела. Даже перезрела, я бы сказал 🙂
Итак, cisco ввела два новых понятия: Object NAT и Twice NAT, заменив ими все предыдущие типы (Regular, Policy, Identity NAT).
______________
UPD 10.12.11
А также попутно отменила понятие nat-control
. Теперь у нас тотальный no nat-control
что означает «нет правила НАТ — просто маршрутизировать».
______________
Для начала познакомимся с понятием object NAT, узнаем про последовательность обработки правил object NAT, потом познакомимся с TWICE NAT и в конце подведем черту: опишем всю последовательность правил NAT в новом синтаксисе. Планирую небольшой цикл статей — штуки 4, дабы не перегружать сразу читателей.
Работать будем вот с такой топологией
Рассмотрим простейшую задачу: выйти через ASA в интернет.
Для этого, как и ранее, надо определить, какие внутренние адреса мы собираемся транслировать в какой внешний пул адресов (NAT) или какой адрес (РАТ).
Для начала хочу обратить ваше внимание, что кроме уже привычных object-group разного типа в версии 8.3 появились просто объекты (object) типа network и service:
object network {ИМЯ}
object service {ИМЯ}
и именно при помощи них описываются погрупповые правила НАТ. Не перепутайте!
Согласно новому синтаксису object NAT, адреса, которые мы собираемся транслировать, описываются при помощи объекта типа network, например:
object network LAN
subnet 10.1.1.0 255.255.255.0
Во что мы транслируем указывается также помощи отдельного объекта. Если мы хотим написать трансляцию в пул адресов, то можно прямо так и указывать
Object network MAPPED_LAN_POOL
range 20.1.1.10 20.1.1.100
Если же хочется сделать динамический PAT в адрес, отличный от адреса интерфейса, то можно создать такой объект:
Object network MAPPED_LAN_HOST
host 20.1.1.101
Примечание: для РАТ отдельный объект имеет смысл создавать, когда в нем несколько хостов. Если же используется всего один адрес, то его можно будет указать явно в соответствующей строке nat.
__________________
UPD 9.12.11 — Один объект может содержать либо ОДИН хост, либо ОДИН непрерывный диапазон, либо ОДНУ подсеть. Это важно, а сразу не упомянул.
__________________
Сама трансляция будет описываться так: необходимо конкретному объекту, описывающему адреса, которые мы хотим транслировать, применить правила трансляции. Для этого заходим в ранее созданный объект и пишем:
object network LAN
nat (INS,OUT) dynamic MAPPED_LAN_POOL [interface] [dns]
Аналогично для описания трансляции РАТ:
object network LAN
nat (INS,OUT) dynamic MAPPED_LAN_HOST [interface] [dns]
Или явно указав адрес:
object network LAN
nat (INS,any) dynamic 20.1.1.101 [interface] [dns]
___________________________
UPD 9.12.11
Важно: в качестве группы для динамической трансляции нельзя использовать объекты, содержащие сеть. Только хост или диапазон.
___________________________
Интересная особенность: теперь не обязательно указывать интерфейсы (то, что в скобочках)! Если их явно не указывать, то НАТ станет ненаправленным (аналог ip nat enable на маршрутизаторах) и будет работать на всех интерфейсах, если адрес источника попадет в группу LAN. Мало того, можно зафиксировать лишь один интерфейс (источника или назначения), не указывая явно второй, заменив его на any
.
Выглядеть это может вот так:
object network LAN
nat dynamic MAPPED_LAN_HOST [interface] [dns]
Или так:
object network LAN
nat (INS,any) dynamic MAPPED_LAN_HOST [interface] [dns]
Ключевое слово interface
можно написать для того, чтобы после исчерпания пула, либо зарезервированного количества сессий для одного адреса в РАТ, продолжать транслировать, но уже с использованием адреса интерфейса. Правда, при использовании этой опции название интерфейса назначения надо указывать явно (any
не сгодится).
Ключевое слово dns
– старый добрый ДНС-докторинг. ASA подслушивает запросы ДНС и подменяет ответы, если в ответе содержится глобальный адрес из какой-нибудь статической трансляции на этой ASA (подробнее — в цикле статей про АСА 8.2).
Важно отметить, что если необходимо транслировать разные внутренние адреса (сети) в один и тот же внешний пул адресов (или адрес), можно использовать одну и ту же объектную группу назначения несколько раз.
А вот если есть необходимость транслировать одну и ту же сеть в разные пулы при прохождении через разные исходящие интерфейсы, одну и ту же группу источника использовать будет нельзя. Вот такое странное ограничение: придётся создавать несколько групп с разными именами, но с одной и той же сетью.
Пример того, как НЕЛЬЗЯ:
object network LAN
nat (INS,OUT) dynamic 20.1.1.101
nat (INS,DMZ) dynamic 172.16.1.101
Причем ASA не ругнется, но сохранит лишь последнюю строчку
TESTASA(config-network-object)# sh run nat
!
object network LAN
nat (INS,DMZ) dynamic 172.16.1.101
Приходится делать 2 разных объекта под каждое правило:
object network LAN_FOR_DMZ
subnet 10.1.1.0 255.255.255.0
nat (INS,DMZ) dynamic 172.16.1.101
Для закрепления этого кусочка приведем пример конфига, когда мы локальную сеть 10.1.1.0/24 транслируем в пул 20.1.1.10-20.1.1.100 с подстраховкой в виде динамического НАТа в адрес интерфейса и ДНС-докторингом:
object network MAPPED_LAN_POOL
range 20.1.1.10 20.1.1.100
!
object network LAN
subnet 10.1.1.0 255.255.255.0
nat (INS,OUT) dynamic MAPPED_LAN_POOL interface dns
Итак задача минимум выполнена: динамический НАТ мы настроили, в интернет вышли, трансляции и сессии создаются, как мы и хотели:
TESTASA# sh run nat
!
object network LAN
nat (INS,OUT) dynamic MAPPED_LAN_POOL interface dns
!
TESTASA# sh xl
1 in use, 1 most used
Flags: D - DNS, i - dynamic, r - portmap, s - static, I - identity, T - twice
NAT from INS:10.1.1.2 to OUT:20.1.1.71 flags iD idle 0:03:13 timeout 3:00:00
!
TESTASA# sh conn
1 in use, 1 most used
TCP OUT 20.1.1.1:23 INS 10.1.1.2:47525, idle 0:00:10, bytes 134, flags UIO
Метки: ASA, ASA 8.3, NAT, новый синтаксис
Опубликовано: Безопасность cisco
[…] версии 8.3, 8.4 и далее (вряд ли разработчики Читать далее Tweet VK.init({apiId: 2672059, onlyWidgets: true}); VK.Widgets.Like('vk_like_7423', {type: […]
Можно два вопроса?
1.
Можно ли через NAT правило ограничить выходящие сервисы?
Например: Из нутри наружу можно только http,https,smtp,pop3
Или всё-таки придётся делать что-то типа
nat (inside,outside) dynamic interface
и ограничивать листом
2.
Можно ли сделать такое правило чтобы всё запросы из локальной сети по порту , скажем, 23 редиректились на порт 24 того же ИП (или как вариант) другого ИП.
Данная конструкция интерсна скажем в таком случае: у клиентов (inside) в апликации прописан ip1:port1 и нужно быстро смигрировать на ip1:port2 или ip2:port2
1. Можно ограничивать НАТом, но я рекомендую при помощи ACL — это снижает нагрузку на железку и не дает действительно пакетам проходить.
ЗЫ В 8.3 и вовсе nat-control отменен и пакеты при отсутствии НАТ-правила не дропаются.
2. На другой порт другого адреса и на другой порт того же адреса — до, можно, делается просто. Проблема только в случае, если пакет прибегает на интерфейс и должен убежать с него же обратно (когда адрес источника и назначения — в одном броадкастном домене)
Спасибо,
А вы ссылочками/идеями не поделитесь как это сделать — а то все мои шаманства к должному результату не привели — ни по первому вопросу ни по второму.
Вам нужен destination NAT
Например, вы хотите при обращении изнутри на 1.1.1.1 по порту 80 попадать на 2.2.2.2 по порту 8080
Тогда для 8.2:
static (OUT,INS) tcp 1.1.1.1 80 2.2.2.2 8080
Для 8.3 аналогично, только в одной строке можно указать и адреса источника (их изменение) и адреса назначения 9их изменения). TWICE NAT.
А как обстоит дело с nat 0, теперь его указывать не нужно, если натить на отличные от outside интерфейсы не нужно?
Мне нужно заменить следующую конструкцию:
global (INTERNET) 1 interface
nat (LAN) 0 access-list NONAT-LAN
nat (LAN) 1 192.168.53.0 255.255.255.0
Обойдусь ли я только следующим конфигом:
object network obj-LAN
subnet 192.168.53.0 255.255.255.0
nat (LAN,INTERNET) dynamic interface
??
dtango2010:
1. В ASA OS < 8.3 можно было указать правила трансляции NAT через "extended ACL". Соответственно в листе можно было описать практически любой трафик.
Начиная с версии 8.3, на мой взгяд, это делать не очень целесообразно. Связано это с ограничениями по указанию портов в twice-NAT. На каждую комбинацию портов и IP придется создавать правило NAT. Для сложных конфигов это не очень удобно.