Команда ip port-map используется для ассоциации протоколов (сервисов) прикладного уровня с номерами TCP-портов (PAM – Port to Application Mapping) и позволяет перенаправлять трафик стандартных (системных) протоколов, а также сервисов, заданных пользователем, на любой TCP-порт.
Команда с префиксом no устанавливает значение по умолчанию.
Синтаксис ip port-map appl-nameport [tcp] port-num*| from begin-port-numto end-port-num [list acl-num] [description description-string]
no ip port-map appl-nameport [tcp] port-num*| from begin-port-numto end-port-num [list acl-num]
appl-name название протокола прикладного уровня (сервиса). Могут задаваться стандартные (системные) сервисы и пользовательские, определенные пользователем. Системные сервисы ассоциируются с общеизвестным номером порта и представлены в Таблица 13. Пользовательский сервис задается именем, который должен начинаться с префикса “user-“ и по длине не должен превышать 19 символов
tcp наличие или отсутствие этого ключевого слова не играет существенной роли
port-num номер TCP-порта. При наличии в команде слова tcp можно задать перечисление до пяти портов или диапазон портов. При отсутствии слова tcp – разрешается задать только один порт
begin-port-num начальный порт диапазона портов, должен быть меньше конечного порта
end-port-num конечный порт диапазона портов
acl-num ссылка на имя стандартного нумерованного списка доступа, который ограничивает данный сервис для определенных хостов и подсетей. Если список доступа отсутствует в конфигурации, то данная команда игнорируется при конвертировании конфигурации
description-string строка с произвольным описанием.
Системно-заданные соответствия
Таблица 13
Номер порта |
Описание |
|
ftp |
21 |
File Transfer Protocol |
telnet |
23 |
Telnet |
smtp |
25 |
Simple Mail Transfer Protocol |
gopher |
70 |
Gopher |
pop3 |
110 |
Post Office Protocol – Version 3 |
nntp |
119 |
Network News Transport Protocol |
imap |
143 |
Internet Message Access Protocol |
imap3 |
220 |
Interactive Mail Access Protocol 3 |
ldap |
389 |
Lightweight Directory Access Protocol |
login |
513 |
Remote login |
Значение по умолчанию Значение по умолчанию отсутствует
Режимы команды Global configuration
Рекомендации по использованию
Используйте эту команду, чтобы перенаправить трафик стандартных сервисов на другие, отличные от общеизвестных, порты. Можно также добавить новый порт к общеизвестному порту. Для приложений, которые используют необщеизвестные порты, создайте пользовательский сервис.
Добавление записи к системному port-map
Системно-заданные соответствия существуют неявно и их можно использовать в команде ip port-name, не вводя никаких дополнительных команд.
Для добавления нового порта к системному сервису напишите команду с системным port map и она добавит новую запись в уже существующий port map (но не заменит его!). Пример:
ip port-map ftp port 2100
Данная команда приведет к тому, что для ftp будет две записи (одна явная и одна неявная).
!!! Неявная запись!!! ip port-map ftp port tcp 21 description File Transfer Protocol
!!! Явная запись!!! ip port-map ftp port 2100
Ограничения на порты
Запрещено задавать порты, уже входящие в другой port-map (при условии, что для него не задана no-форма команды). Это относится к единичному порту, перечислению или диапазону портов, в которые входит данный порт. Например,
ip port-map ftp port tcp 23
Будет выдано сообщение об ошибке:
%Unable to add port-map entry.
It conflicts with the system entry for telnet.
Please delete it before adding this entry
А если в конфигурации уже существует пользовательский сервис с именем user-port-map-1 и он содержит в себе порт 2100, то на команду
ip port-map ftp port tcp 2100
будет выдано сообщение об ошибке:
%Unable to add port-map entry.
It conflicts with the user-defined entry for user-port-map-1.
Please delete it before adding this entry
Отмена системного port-map
Неявно заданную запись системного port map можно отменить с помощью no-формы команды. Причем данная no-команда будет отображаться по show running-config (возможно в расширенном виде). Пример: хотим перенаправить трафик ftp на нестандартный порт 2100, для этого выполним:
no ip port-map ftp
ip port-map ftp port 2100
По команде show running-config будет показано:
no ip port-map ftp port tcp 21 description File Transfer Protocol
ip port-map ftp port tcp 2100
Отменить no-команду можно следующим образом:
ip port-map ftp port tcp 21
А по команде show running-config будет показано:
ip port-map ftp port tcp 21
Диапазон портов
При задании диапазона начальный порт обязательно должен быть меньше конечного порта. В противном случае выдается сообщение:
%Unable to add port-map entry.
In a range, beginning value should be smaller than the end
Ссылка на лист доступа
Если в нескольких командах ip port-map существуют привязки к одному и тому же листу доступа, то при обнаружении коллизий в командах выдаются сообщения об ошибках.
Если в нескольких командах существуют привязки к разным листам доступа (с разными номерами, между ними допускаются пересечения или даже полное совпадение) или если в одной команде задан лист доступа, а в другой – нет, то эти команды не сравниваются. В них допускаются любые пересечения и совпадения номеров портов.
Пример корректной последовательности команд:
ip port-map user-port-map-1 port tcp 2100 list 1
ip port-map user-port-map-1 port tcp 21 list 1
ip port-map user-port-map-1 port tcp 23 list 2
ip port-map ftp port tcp 23 list 1
ip port-map ftp port tcp 2100
Пример ошибочной последовательности команд:
ip port-map user-port-map-1 port tcp 2100 list 1
ip port-map ftp port tcp 2100 list 1 !!! Неправильно !!!
Если второй раз прописывается команда, которая уже существует в конфигурации (совпадение с точностью до description), она игнорируется без выдачи сообщений об ошибке. Поведение, аналогичное Cisco IOS.
Если в листе доступа используются модификаторы log и log-input, то будет происходит логирование пакетов, проходящих через inspection фильтры. Сообщения лога показываются в следующем виде:
Inspect_<inspect-name>_<acl-name>
где <inspect-name> – имя inspection; <acl-name> – имя листа доступа, присоединенного к port-map, на которую ссылается данный inspect.
Пример:
Фрагмент конфигурации:
access-list 95 permit 10.20.30.40 log
!
no ip port-map telnet port 23
ip port-map telnet port tcp 23 list 95
!
ip inspect name inspect1 telnet
Фрагмент вывода в сообщении лога:
Inspect_inspect1_95
В Cisco IOS записи с модификатором log не работают при инспектировании трафика.
Пользовательский port map
На имя пользовательского сервиса существуют жесткие ограничения (аналогично Cisco IOS). Если имя не начинается с префикса “user-“, то выдается сообщение:
%Unable to add port-map entry.
Names for user-defined applications must start with 'user-'
Имя по длине не должно превышать 19 символов. При несоблюдении этого правила выдается сообщение:
%Unable to add port-map entry.
Application name is too long. Maximum allowed characters for application name are 19
Слово tcp обязательно должно присутствовать. При несоблюдении этого правила выдается сообщение:
%Unable to add port-map entry.
TCP protocol must be specified for user-defined applications
Добавление записей в уже существующий пользовательский port-map, ссылка на листы доступа, возможные ошибки аналогичны указанным для системных port map.
Команда show running-config
Слово tcp показывается всегда, независимо от присутствия в команде.
Системно-заданные соответствия не показываются, хотя и существуют неявно.
Удаление
Существует возможность удалить весь port map одной командой. Формат команды:
no ip port-map appl-name
Примечание: в случае пользовательских port map данная команда удаляет весь port map целиком; в случае системного port map – удаляет все user-defined порты и добавляет в конфигурацию no-форму команды для pre-defined портов (если ее на этот момент еще не было).
Если данного port map не существует, выдается сообщение:
%Unable to remove port-map entry.
Port-map entry for application <appl-name> is not found
При удалении пользоватльского port-map целиком (см. предыдущий пункт) или при удалении последней записи такого port map и если имеется привязка к inspection правилу, то выдается сообщение вида:
Removed <port-map-name> from inspect rule <inspection-name>
Если в данном inspection правиле не было привязок к другим протоколам (т.е. данный inspection rule удаляется), то выдаются два сообщения:
Removed <port-map-name> from inspect rule <inspection-name>
Removed inspect rule <inspection-name>
Если данный port map присутствует в разных inspection правилах, указанные выше строки показываются для каждого inspection правила.
Пример. На следующую последовательность команд:
ip port-map user-port-map-1 port tcp 2100
ip inspect name inspect-1 user-port-map-1
ip inspect name inspect-1 tcp
ip inspect name inspect-2 user-port-map-1
no no ip port-map user-port-map-1
будет выдано:
Removed user-port-map-1 from inspect rule inspect-1
Removed user-port-map-1 from inspect rule inspect-2
Removed inspect rule inspect-2
Отличие данной команды от подобной команды Cisco IOS:
Не используется протокол транспортного уровня UDP.
Системные протоколы и пользовательские обрабатываются одинаково.
Для протокола ftp формируется inspection процедура ftp<>, для всех остальных протоколов – процедура tcp<>, а у Cisco – специфические процедуры для SMTP, HTTP и т.п.