среда, 3 июня 2015 г.

ASA 5512X Проброс\мапинг портов

Task: открыть 80 порт для определенного интерфейса и замапить его в 3389, на один из локальных хостов. 

В качестве интерфейса управления - я использую ASDM-IDM Launcher но по большому счету - все это вполне реально сделать в терминале Putty или др. Например мульти-строки я выполнял в CLI (Command Line Interface), который также доступен из ASDM.





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

Рабочий пример (аналогичного решения) выглядел так:
object network TS_Ext_3389
nat (inside,outside) static TS_Ext_3389_NAT_IP
object network TS_Ext_80_to_3389
nat (inside,outside) static TS_Ext_80_to_3389_NAT_IP


где TS_Ext_3389_NAT_IP = 192.168.1.1
а TS_Ext_80_to_3389_NAT_IP = 192.168.1.2
При этом хост один и тот-же. Ну я забил на это, подумав, что так значит надо было. 
И подумал, что ничего не мешает использовать и один IP, на машине. 
Начал добавлять в ASDM Public Service - а он ругается... 



Решил убрать на существующем правиле http а потом добавить его вновь - ОП! Словил ту же ошибку  
В итоге не мог добавить как для старого правила, так и для нового.


Оказалось: 

Имея в наличии "ОДИН" статический NAT для этого интерфейса:
nat (inside,outside) static TS_NAT_IP
object network TS_Ext_3389

 - добавить еще один NAT является невозможным (что вполне логично). 

Как-же быть?

Решение. 

Удаляем "существующие" NAT для интересующего нас объекта (в моем случае это всего ОДНО правило, которое осталось) Открываем CLI. 
Я запускал поддержку Multiple Line (чтобы писать несколько строк и ASA это "проглатывала") и пишем следующее: 
 object network TS
 nat (inside,outside) static TS_NAT_IP service tcp 3389 3389 

 object network ts_80_3389
 nat (any,any) static TS_NAT_IP service tcp 3389 www 

где объекты имеют значения: 
 object network TS
 host 192.168.1.44                                        #т.е. это локальный адрес сервера

 description TS

object network ts_80_3389
 host 192.168.1.44                                        #т.е. это локальный адрес сервера

 object network TS_NAT_IP
 host 195.173.27.16                                        #т.е. это внешний публичный адрес 

 description TS_NAT_IP



Не упускаем из внимания access-list:

access-list outside_access extended permit object MS_RDP any4 object TS 

access-list outside_access extended permit object MS_RDP any4 object TS_80_to_3389

В заключении...

Мысль в том, что если NAT уже существует, без конкретного указания портов (аля на "ВСЁ"), то индивидуально по портам уже ничего не добавить. Приходится оставлять лишь то, что необходимо. В данном примере это 2 порта: 3389 и 80 И если, скажем, у вас на сервере открыт 443 и крутится при этом какой-то сервис, то постучавшись на внешний адрес (приведенный в примере 195.173.27.16) вы не получите никакого ответа!