Cisco ASA. «Проброс портов» или static NAT
Одна из самых частых проблем, связанных с настройкой Cisco ASA, это так называемый «проброс портов» (port forwarding), а по-научному настройка NAT для того, чтобы дать возможность пользователям из сети интернет заходить на внутренние серверы компании.
Базовые настройки NAT для доступа пользователей и внутренних ресурсов в интернет описаны в статье о базовой настройке Cisco ASA, а сам принцип использования технологии NAT для тех или иных случаев подробно описан в статье «Как использовать NAT». Здесь же будет будут описаны только настройки публикации внутренних ресурсов в сеть интернет.
Для реализации этого необходимо 2 составляющих:
- Настройка Static NAT для нужных адресов и портов;
- Разрешающие правила в списках доступа access-list.
В современных версиях Cisco ASA есть 2 способа реализации Static NAT – 1) через объекты (object NAT) и 2) вручную/двойной NAT (manual/twice NAT). Эти способы отличаются по логике настройки и синтаксису команд, но оба ведут к одному и тому же. В первом (object NAT) строки, описывающие правило трансляции адресов привязываются к конкретному объекту (имя + ip адрес). Во втором (manual NAT) в отдельной строке с помощью все тех же объектов указываются адреса оригинального пакета (source и destination) и преобразованного. Далее будут приведены настройки для обоих способов, а вы для себя уже решите какой из них подходит больше. А если не получается сделать «проброс портов» одним из способов, то попробуйте другой.
Важно!
Если у вас старое оборудование и версия IOS до 8.3, то пример написания строки для старого синтаксиса приведен в самом конце статьи
Object NAT
Создание объекта для внешнего адреса
object network OBJ_NAT_SERVER_XXX_EXT
host x.x.x.x
Для каждого порта создается отдельный объект с внутренним адресом сервера
object network OBJ_NAT_SERVER_XXX_INT_1433
host 192.168.1.100
object network OBJ_NAT_SERVER_XXX_INT_1433
nat (inside,outside) static OBJ_NAT_SERVER_XXX_EXT service tcp 1433 1433
Здесь и далее зеленым цветом будут отмечены части кода, отвечающие за внутренние ресурсы, а красным — внешние.
Второй объект для того же самого сервера 192.168.1.100, но с другим именем
object network OBJ_NAT_SERVER_XXX_INT_8080
host 192.168.1.100
object network OBJ_NAT_SERVER_XXX_INT_8080
nat (inside,outside) static OBJ_NAT_SERVER_XXX_EXT service tcp 8080 8080
Важно!
В зависимости от того, сколько внешних «белых» публичных адресов предоставляет вам провайдер, необходимо корректировать синтаксис команд.
Если провайдер предоставляет только один(!) статический адрес и это адрес внешнего интерфейса устройства, то в командах для NAT необходимо указывать « interface » (подразумевая внешний интерфейс outside)
Если провайдер выдает несколько (!) статических адресов и требуется задействовать один из них НЕ на внешнем интерфейсе, то для этого создается отдельный объект, для которого указывается конкретный адрес.
В случае наличия только одного адреса команда из последнего примера будет выглядеть так:
object network OBJ_NAT_SERVER_XXX_INT_1433
nat (inside,outside) static interface service tcp 1433 1433
Manual/Twice NAT
Создание объекта для внешнего адреса
object network OBJ_NAT_SERVER_XXX_EXT
host x.x.x.x
Создание объекта для внутреннего адреса
object network OBJ_NAT_SERVER_XXX_INT
host 192.168.1.100
Создание объектов для портов и протоколов, которые должны быть видны извне
object service SERVICE_TCP_1433
service tcp source eq 1433
object service SERVICE_TCP_8080
service tcp source eq 8080
Правило трансляции для каждого порта/протокола записывается в отдельной строке
nat (inside,outside) source static OBJ_NAT_SERVER_XXX_INT OBJ_NAT_SERVER_XXX_EXT service SERVICE_TCP_1433 SERVICE_TCP_1433
nat (inside,outside) source static OBJ_NAT_SERVER_XXX_INT OBJ_NAT_SERVER_XXX_EXT service SERVICE_TCP_8080 SERVICE_TCP_8080
Как уже писалось ранее, если в наличии есть только один «белый» адрес и он уже используется на интерфейсе, то вместо объекта с указанием внешнего адреса, в команде необходимо использовать слово interface.
nat (inside,outside) source static OBJ_NAT_SERVER_XXX_INT interface service SERVICE_TCP_1433 SERVICE_TCP_1433
Проверка
Для проверки текущих настроек используйте команду sh nat detail. она покажет все текущие правила трансляции, в которых будут указаны как внешние адреса, так и внутренние для каждой строки
Команды для старого оборудования (версия Cisco ASA до 8.3)
Правила трансляции записываются построчно – по одной строчке для каждого порта. Обратите внимание, что в начале строки в скобках указана последовательность интерфейсов внутренний/внешний, при этом далее следует указание адресов в обратной последовательности внешний/внутренний. Сами команды выглядят так:
Если необходимо задействовать адрес НЕ на внешнем интерфейсе
static (inside,outside) tcp x.x.x.x 1433 192.168.1.100 1433 netmask 255.255.255.255
Если необходимо задействовать адрес внешнего интерфейса устройства.
static (inside,outside) tcp interface 1433 192.168.1.100 1433 netmask 255.255.255.255
Разрешение доступа в access list
Помимо настроек NAT для Object NAT и Manual NAT необходимо также разрешить доступ для нужных соединений. Для этого в access list, привязанному ко внешнему интерфейсу, необходимо добавить соответствующие строки. Обратите внимание, что в правилах разрешается доступ с любых адресов (any) ко внутреннему адресу сервера.
access-list ACL_OUTSIDE_IN line 1 extended permit tcp any object OBJ_NAT_SERVER_XXX_INT eq 1433
access-list ACL_OUTSIDE_IN line 2 extended permit tcp any object OBJ_NAT_SERVER_XXX_INT eq 8080
Однако, если у вас старое оборудование и версия ASA старше 8.3, то в списках доступа необходимо указывать внешний адрес.
access-list ACL_OUTSIDE_IN line 1 extended permit tcp any object OBJ_NAT_SERVER_XXX_EXT eq 1433
access-list ACL_OUTSIDE_IN line 2 extended permit tcp any object OBJ_NAT_SERVER_XXX_EXT eq 8080
Более подробно о принципах и тонкостях создания и наполнения списков доступа читайте в статье Cisco ASA. Основы. Доступ в интернет.
Если брать ip адрес внешнего интерфейса, то попробуйте поменять вашу строчку с NAT на эту:
nat (inside,outside) source static vks interface service SERVICE_4307 SERVICE_4307
Здесь вместо явно указанного объекта с внешним адресом стоит слово «interface»
Скажи сделал все по вашей инструкции (прокидываю порт 4307) (Cisco Adaptive Security Appliance Software Version 9.1(7)32
) но порт все равно закрыт 🙁 что я не так делаю?
object-group network vks
description vks
network-object host 88.117.128.144 (Внешний статический)
object-group network obj_nat_vks_4307
network-object host 172.16.5.200
object service SERVICE_4307
service tcp source eq 4307
access-list ACL_OUTSIDE_IN extended permit tcp any object-group vks eq 4307
nat (inside,outside) source static vks obj_nat_vks_4307 service SERVICE_4307 SERVICE_4307
access-group ACL_OUTSIDE_IN in interface outside