Кол портов. Сети. Диапазоны портов TCP и UDP. Широко известные примеры

Сетевые порты могут дать важнейшую информацию о приложениях, которые обращаются к компьютерам по сети. Зная приложения, которые используют сеть, и соответствующие сетевые порты, можно составить точные правила для брандмауэра, и настроить хост-компьютеры таким образом, чтобы они пропускали только полезный трафик. Построив профиль сети и разместив инструменты для распознавания сетевого трафика, можно более эффективно обнаруживать взломщиков - иногда просто анализируя генерируемый ими сетевой трафик. Эту тему мы начали рассматривать в первой части статьи, опубликованной в предыдущем номере журнала. Там приводились основные сведения о портах TCP/IP как фундаменте сетевой безопасности. Во второй части будут описаны некоторые методы для сетей и хост-компьютеров, с помощью которых можно определить приложения, прослушивающие сеть. Далее в статье будет рассказано о том, как оценить трафик, проходящий через сеть.

Блокирование сетевых приложений

Поверхность атаки по сети - общепринятый термин для описания уязвимости сети. Многие сетевые нападения проходят через уязвимые приложения, и можно существенно уменьшить площадь атаки, сократив число активных приложений в сети. Другими словами, следует отключить неиспользуемые службы, установить брандмауэр на выделенной системе для проверки законности трафика и составить исчерпывающий список управления доступом (access control list - ACL) для брандмауэра на периметре сети.

Каждый открытый сетевой порт представляет приложение, прослушивающее сеть. Поверхность атаки каждого сервера, подключенного к сети, можно уменьшить, отключив все необязательные сетевые службы и приложения. Версия Windows Server 2003 превосходит предшествующие версии операционной системы, так как в ней по умолчанию активизируется меньше сетевых служб. Однако аудит все же необходим, чтобы обнаружить вновь установленные приложения и изменения в конфигурации, которые открывают лишние сетевые порты.

Каждый открытый порт - потенциальная лазейка для взломщиков, которые используют пробелы в хост-приложении или тайком обращаются к приложению с именем и паролем другого пользователя (либо применяют другой законный метод аутентификации). В любом случае, важный первый шаг для защиты сети - просто отключить неиспользуемые сетевые приложения.

Сканирование портов

Сканирование портов - процесс обнаружения прослушивающих приложений путем активного опроса сетевых портов компьютера или другого сетевого устройства. Умение читать результаты сканирования и сравнивать сетевые отчеты с результатами хост-опроса портов позволяет составить ясную картину трафика, проходящего через сеть. Знание сетевой топологии - важное условие подготовки стратегического плана сканирования конкретных областей. Например, сканируя диапазон внешних IP-адресов, можно собрать ценные данные о взломщике, проникшем из Internet. Поэтому следует чаще сканировать сеть и закрыть все необязательные сетевые порты.

Внешнее сканирование портов брандмауэра позволяет обнаружить все откликающиеся службы (например, Web или электронная почта), размещенные на внутренних серверах. Эти серверы также следует защитить. Настройте привычный сканер портов (например, Network Mapper - Nmap) на проверку нужной группы портов UDP или TCP. Как правило, сканирование портов TCP - процедура более надежная, чем сканирование UDP, благодаря более глубокой обратной связи с ориентированными на соединения протоколами TCP. Существуют версии Nmap как для Windows, так и для Unix. Запустить базовую процедуру сканирования просто, хотя в программе реализованы и гораздо более сложные функции. Для поиска открытых портов на тестовом компьютере я запустил команду

Nmap 192.168.0.161

На экране 1 показаны результаты сеанса сканирования - в данном случае компьютера Windows 2003 в стандартной конфигурации. Данные, собранные в результате сканирования портов, показывают наличие шести открытых портов TCP.

Экран 1. Базовый сеанс сканирования Nmap
  • Порт 135 используется функцией отображения конечных точек RPC, реализованной во многих технологиях Windows - например, приложениях COM/DCOM, DFS, журналах событий, механизмах репликации файлов, формирования очередей сообщений и Microsoft Outlook. Данный порт должен быть блокирован в брандмауэре на периметре сети, но трудно закрыть его и одновременно сохранить функциональность Windows.
  • Порт 139 используется сеансовой службой NetBIOS, которая активизирует браузер поиска других компьютеров, службы совместного использования файлов, Net Logon и службу сервера. Его трудно закрыть, как и порт 135.
  • Порт 445 используется Windows для совместной работы с файлами. Чтобы закрыть этот порт, следует блокировать File and Printer Sharing for Microsoft Networks. Закрытие этого порта не мешает соединению компьютера с другими удаленными ресурсами; однако другие компьютеры не смогут подключиться к данной системе.
  • Порты 1025 и 1026 открываются динамически и используются другими системными процессами Windows, в частности различными службами.
  • Порт 3389 используется Remote Desktop, которая не активизирована по умолчанию, но на моем тестовом компьютере активна. Чтобы закрыть порт, следует перейти к вкладке Remote в диалоговом окне System Properties и сбросить флажок Allow users to connect remotely to this computer.

Обязательно следует выполнить поиск открытых портов UDP и закрыть лишние. Программа сканирования показывает открытые порты компьютера, которые видны из сети. Аналогичные результаты можно получить с помощью инструментов, расположенных на хост-системе.

Хост-сканирование

Помимо использования сетевого сканера портов, открытые порты на хост-системе можно обнаружить с помощью следующей команды (запускается на хост-системе):

Netstat -an

Эта команда работает как в Windows, так и в UNIX. Netstat выдает список активных портов компьютера. В Windows 2003 Windows XP следует добавить параметр -o, чтобы получить соответствующий идентификатор процесса (program identifier - PID). На экране 2 показаны выходные результаты Netstat для того же компьютера, сканирование портов которого выполнялось ранее. Следует обратить внимание на то, что закрыто несколько портов, которые прежде были активны.

Аудит журнала брандмауэра

Еще один полезный способ обнаружения сетевых приложений, которые отправляют или получают данные по сети, - собирать и анализировать больше данных в журнале брандмауэра. Записи Deny, в которых приводится информация с внешнего интерфейса брандмауэра, вряд ли будут полезны из-за «шумового трафика» (например, от червей, сканеров, тестирования по ping), засоряющего Internet. Но если записывать в журнал разрешенные пакеты с внутреннего интерфейса, то можно увидеть весь входящий и исходящий сетевой трафик.

Чтобы увидеть «сырые» данные трафика в сети, можно установить сетевой анализатор, который подключается к сети и записывает все обнаруженные сетевые пакеты. Самый широко распространенный бесплатный сетевой анализатор - Tcpdump для UNIX (версия для Windows называется Windump), который легко устанавливается на компьютере. После установки программы следует настроить ее для работы в режиме приема всех сетевых пакетов, чтобы регистрировать весь трафик, а затем подключить к монитору порта на сетевом коммутаторе и отслеживать весь трафик, проходящий через сеть. О настройке монитора порта будет рассказано ниже. Tcpdump - чрезвычайно гибкая программа, с помощью которой можно просматривать сетевой трафик с использованием специализированных фильтров и показывать только информацию об IP-адресах и портах либо все пакеты. Трудно просмотреть сетевые дампы в больших сетях без помощи соответствующих фильтров, но следует соблюдать осторожность, чтобы не потерять важные данные.

Объединение компонентов

До сих пор мы рассматривали различные методы и инструменты, с помощью которых можно обнаружить приложения, использующие сеть. Пришло время объединить их и показать, как определить открытые сетевые порты. Поразительно, как «болтливы» компьютеры в сети! Во-первых, рекомендуется познакомиться с документом Microsoft «Service overview and network port requirements for the Windows Server system» (http://support.microsoft.com/default.aspx?scid=kb;en-us;832017 ), в котором перечислены протоколы (TCP и UDP) и номера портов, используемые приложениями и большинством основных служб Windows Server. В документе описаны эти службы и используемые ими ассоциированные сетевые порты. Рекомендуется загрузить и распечатать это полезное для администраторов сетей Windows справочное руководство.

Настройка сетевого анализатора

Ранее отмечалось, что один из способов определить порты, используемые приложениями, - отслеживать трафик между компьютерами с помощью сетевого анализатора. Чтобы увидеть весь трафик, необходимо подключить сетевой анализатор к концентратору или монитору портов в коммутаторе. Каждому порту концентратора виден весь трафик каждого компьютера, подключенного к этому концентратору, но концентраторы - устаревшая технология, и большинство компаний заменяют их коммутаторами, которые обеспечивают хорошую производительность, но неудобны для анализа: каждый порт коммутатора принимает только трафик, направляемый одному компьютеру, подключенному к данному порту. Чтобы анализировать всю сеть, нужно отслеживать трафик, направляемый в каждый порт коммутатора.

Для этого требуется настроить монитор порта (разные поставщики называют его span port или mirrored port) в коммутаторе. Установить монитор порта в коммутаторе Cisco Catalyst компании Cisco Systems не составляет труда. Нужно зарегистрироваться на коммутаторе и активизировать режим Enable, затем перейти в режим configure terminal и ввести номер интерфейса порта коммутатора, на который следует посылать весь контролируемый трафик. Наконец, необходимо указать все отслеживаемые порты. Например, следующие команды обеспечивают мониторинг трех портов Fast Ethernet и пересылку копии трафика в порт 24.

Interface FastEthernet0/24 port monitor FastEthernet0/1 port monitor FastEthernet0/2 port monitor FastEthernet0/3 end

В данном примере сетевой анализатор, подключенный к порту 24, будет просматривать весь исходящий и входящий трафик компьютеров, подключенных к первым трем портам коммутатора. Для просмотра созданной конфигурации следует ввести команду

Write memory

Первоначальный анализ

Рассмотрим пример анализа данных, проходящих через сеть. Если для сетевого анализа используется компьютер Linux, то можно получить исчерпывающее представление о типе и частоте пакетов в сети с помощью такой программы, как IPTraf в режиме Statistical. Детали трафика можно выяснить с использованием программы Tcpdump.

Порт в компьютерных сетях является конечной точкой связи в ОС. Данный термин также применяется и для аппаратных устройств, однако в программном обеспечении он обозначает логическую конструкцию, идентифицирующую конкретный вид услуг или процесс. Порт всегда связан с IP адресом хоста или типом протокола связи. Он завершает назначение адреса сеанса связи. Порт идентифицируется для каждого протокола и адреса при помощи 16-битного числа, которое также известно, как номер порта. Часто конкретные номера портов применяются для определения конкретных услуг. Из нескольких тысяч перечисленных 1024 известных номеров защищены в соответствии со специальным соглашением. Они определяют конкретные типы услуг на хосте. Протоколы, которые в основном используют порты, применяются для управления процессами. В качестве примера можно привести протокол управления передачей TCP или User Datagram Protocol из комплекта Internet протоколов.

Значение

Порты TCP не нужны по прямым ссылкам типа «точка-точка», когда на каждом конце компьютеры могут одновременно работать только с одной программой. Необходимость в них появилась после того, как эти машины оказались способны выполнять в одно и то же время более одной программы. Они оказались подключены к современным сетям с пакетной коммутацией. В модели клиент-серверной архитектуры порты, приложения и сетевые клиенты подключаются к инициации обслуживания. Они предоставляют услуги мультиплексирования после того, как первоначальный обмен информацией связывается с номером порта. Освобождается он путем переключения каждого экземпляра обслуживания запросов к выделенной линии. Осуществляется подключение к конкретному номеру. Благодаря этому дополнительные клиенты могут обслуживаться безо всякого ожидания.

Детали

Протоколы передачи данных UDP иTCP используются для того, чтобы указать в своих заголовках сегментов номер порта назначения и источник. Номер порта – это 16-разрядное число без знака. Оно может находится в пределах от 0 до 65535. TCP порты тем не менее не могут использовать номер 0. Для UDP порт источника не обязателен. Равное нулю значение означает его отсутствие. Данный процесс связывает входные или выходные каналы посредством транспортного протокола, номера порта и адреса IP через интернет сокет. Данный процесс также известен как связывание. Он дает возможность приема и передачи информации через сеть. Сетевое ПО операционной системы используется для передачи исходящих данных всех портов приложений в сеть. Также оно осуществляет переадресацию прибывающих сетевых пакетов путем сопоставления номера и IP адреса. К определенному IP адресу и комбинации портов, используя один и тот же транспортный протокол, можно привязать только один процесс. Сбои в работе приложений, которые также называют конфликтами, возникают в тех случаях, когда сразу несколько программ пытаются связаться с одними и теми же номерами портов на том же IP адресе, используя один и тот же протокол.

Как они применяются

Приложения, которые реализуют общие службы, довольно часто используют специально зарезервированный и известный список портов UDP и TCP для приема запросов на обслуживание клиентов. Данный процесс также известен под названием прослушивание. Он включает в себя получение запроса с хорошо известного порта и установление диалога между клиентом и сервером один к другому при использовании одного и того же номера локального порта. Другие клиенты могут продолжать подключаться. Это возможно, поскольку соединение TCP идентифицируется как цепочка, которая состоит из локального и удаленного портов и адресов. Стандартные порты UDP и TCP могут быть определены по соглашению под контролем IANA или Internet Assigned Numbers Authority. Как правило, ядро сетевых сервисов, прежде всего это World Wide Web, использует небольшие номера портов, меньше 1024. Во многих ОС для приложений для привязки к ним требуются специальные привилегии. По этой причине они часто считаются критическими для работы сетей IP. Конечный клиент соединения с другой стороны, как правило, использует большее их количество, выделенных для краткосрочного использования. По этой причине и существуют так называемые эфемерные порты.

Структура

Порты TCP закодированы в заголовке пакета транспортного пакета. Они легко могут быть интерпретированы не только принимающими и передающими ПК, но и другими компонентами сетевой инфраструктуры. Межсетевые экраны в частности, как правило, настроены на различение пакетов в зависимости от номеров портов назначения и их источника. Классическим примером этому является перенаправление. Попытки подключения последовательно к диапазону портов на одном компьютере также известны как их сканирование. Подобные процедуры, как правило, связаны либо с попытками злонамеренного сбоя, либо с тем, что сетевые администраторы специально ищут возможные уязвимости для того, чтобы предотвратить подобные нападения. Действия, направленные на открытие TCP порта, регистрируются и контролируются при помощи компьютеров. Данная техника использует целый ряд запасных соединений для того, чтобы обеспечить бесперебойное взаимодействие с сервером.

Примеры использования

Основной пример, в котором активно применяются порты UDP иTCP, это почтовая система Интернет. Сервер используется для работы с электронной почтой. В целом он нуждается в двух услугах. Первый сервис применяется для транспортировки по электронной почте и с других серверов. Достигается это при помощи Simple Mail Transfer Protocol (SMTP). Приложение службы SMTP, как правило, прослушивает порт TCP номер 25 для того, чтобы обрабатывать входящие запросы. Другая услуга представляет собой POP или IMAP. Они необходимы для клиентских приложений в электронной почте на машинах пользователей для того, чтобы получать с сервера сообщения электронной почты. Прослушиваются службами POP номера с порта TCP 110. Все указанные выше службы могут запускаться на одном и том же хост-компьютере. Номер порта, когда это происходит, отличает сервис, запрашиваемый удаленным устройством. Если номер порта прослушивания сервера определен корректно, данный параметр для клиента определяется из динамического диапазона. Клиенты и сервер по отдельности в некоторых случаях используют определенные порты TCP, которые назначены в IANA. В качестве наглядного примера можно привести DHCP. Здесь клиентом в любом случае используется UDP 68, а сервером UDP 67.

Использование в URL-адресах

Иногда номера портов хорошо видны в интернете или на других унифицированных указателях информационных ресурсов, вроде URL. HTTP по умолчанию использует порт TCP 80, а HTTPS – порт 443. Также существуют и другие вариации. Так, например, адрес URL http://www.example.com:8080/pathуказывает на то, что веб-браузер вместо сервера HTTP подключается к 8080.

Список портов UDP и TCP

Как уже было отмечено ранее, IANA или InternetA ssigned Numbers Authority, несет ответственность за глобальную координацию DNS-Root, адресации IP и других ресурсов интернет протокола. Эти процедуры включают в себя регистрацию часто используемых портов для известных интернет-сервисов. Все номера портов разделены между собой на три диапазона: хорошо известные, зарегистрированные и частные или динамические. Известными называют порты, имеющие номера от 0 до 1023. Их также называют системными. Требования, которые предъявляются к новым значения в данном диапазоне, являются более строгими, чем для других регистраций.

Примеры

К примерам портов, находящихся в списке известных, можно отнести:

  • TCP 443 порт – HTTPS;
  • 21 – File Transfer Protocol;
  • 22- Secure Shell;
  • 25 – простой протокол передачи почты STMP;
  • 53 – система доменных имен DNS;
  • 119 – протокол передачи сетевых новостей или NNTP;
  • 80 – протокол передачи гипертекста HTTP;
  • 143 – Internet Message Access Protocol;
  • 123 – протокол сетевого времени NTP;
  • 161- простой протокол управления сетью SNMP.

Зарегистрированные порты обязательно имеют номера от 1024 до 49151. Internet Assigned Numbers Authority поддерживает официальный перечень всех известных и зарегистрированных диапазонов. Частотные или динамические порты находятся в диапазоне от 29152 до 65535. Одним из вариантов использования данного диапазона являются временные порты.

История создания

Концепция номеров портов была разработана ранними создателями ARPANET. Она разрабатывалась в условиях неформального сотрудничества между авторами программного обеспечения и системными администраторами. В то время еще не использовался термин «номер порта». Номерной ряд удаленного хоста представлял собой 40-битное число. Первые 32 бита напоминали сегодняшний адрес IPv4. Наиболее значимыми при этом являлась первые 8 бит. Менее значимая часть числа (это биты с 33 по 40) обозначали объект под названием AEN. Он представлял собой прототип современного номера порта. Впервые создание каталога номеров сокета было предложено 26 марта 1972 года. Администраторов сети тогда призвали описать каждый постоянный номер на предмет сетевых услуг и его функций. Данный каталог впоследствии был опубликован в RFC 433 зимой 1972 года. В него вошел список хостов, их номера портов и соответствующая функция, используемая в каждом узле в сети. Впервые официальные значения номеров портов были задокументированы в мае 1972 года. Тогда же была предложена и специальная административная функция для ведения данного реестра. В первый список портов TCP вошло 256 значений AEN.Они были разделены на следующие диапазоны:

— от 0 до 63 – стандартные функции всей сети;

— от 64 до 127 – хост-специфичные функции;

— от 128 до 239 – функции, зарезервированные для будущего использования;

— от 240 до 255 – любая экспериментальная функция.

Термином AEN в начале существования ARPANET также называли имя сокета, которое применялось с первоначальным протоколом соединения и компонентом программы для управления сетью или NCP. В данном случае NCP представлял собой предшественника современных интернет-протоколов, которые используют порты TCP/IP.

Порты TCP/IP

Существуют два типа межкомпьютерного обмена данны­ми- датагроммы и сеансы. Датаграмма — это сообщение, которое не требует подтверждения о приеме от принимающей стороны, а если такое подтверждение необходимо, то адресат должен сам послать специальное сообщение. Для осуществ­ления обмена данными таким способом принимающая и пере­дающая стороны должны строго придерживаться определен­ного протокола во избежание потери информации. Каждая датаграмма является самостоятельным сообщением, и при наличии нескольких датаграмм в ЛВС их доставка адресату, вообще говоря, не гарантируется. При этом датаграмма обычно является частью какого-либо сообщения, и в большинстве ЛВС скорость передачи датаграмм гораздо выше, чем сооб­щений в сеансах.

В сеансе предполагается создание логической связи для обмена сообщениями между компьютерами и гарантируется получение сообщений. В то время как датаграммы могут пе­редаваться в произвольные моменты времени, в сеансе перед передачей сообщения происходит от1фытие сеанса, а по окон­чании обмена данными сеанс должен быть закрыт.

Операционные системы большинства компьютеров под­держивают мультипрограммный режим, т.е. несколько про­грамм выполняются одновременно (параллельно выполняется несколько процессов). С некоторой степенью точности можно говорить о том, что процесс — это и есть окончательное место назначения для сообщения. Однако в силу того, что процессы создаются и завершаются динамически, отправитель редко имеет информацию, достаточную для идентификации процес­са на другом компьютере. Поэтому возникает необходимость в определении места назначения данных на основе выполняе­мых процессами функций, ничего не зная о тех процессах, которые реализуются этими функциями.

На практике вместо того, чтобы считать процесс конечным местом назначения, полагают, что каждый компьютер имеет набор некоторых точек назначения, называемых протоколь­ными портами. Каждый порт идентифицируют целым поло­жительным числом (от 0 до 65535). В этом случае операцион­ная система обеспечивает механизм взаимодействия, исполь­зуемый процессами для указания порта, на котором они работают, или порта, к которому нужен доступ. Обычно пор­ты являются Буферизированными, и данные, приходящие в конкретный порт до того, как процесс готов их получить, не будут потеряны: они будут помещены в очередь до тех пор, пока процесс не извлечет их.

Чтобы лучше понять технологию портов, представьте, что вы пришли в банк, чтобы сделать вклад. Для этого вам необхо­димо подойти к определенному окошку, где оператор оформит документы и вы откроете счет. В этом примере банк представ­ляет собой компьютер, а операторы банка — программы, кото­рые выполняют определенную работу, А вот окошки — это и есть порты, при этом каждое окошко в банке часто нумеруется (1, 2,3 …).

То же самое относится и к портам, следовательно, чтобы связаться с портом на другом компьютере, отправитель должен знать как IP-адрес компьютера-получателя, так и номер порта в компьютере. Каждое сообще­ние содержит как номер порта компьютера, которому адресо­вано сообщение, так и номер порта-источника компьютера, которому должен прийти ответ. Таким образом реализуется возможность ответить отправителю для каждого процесса.

Порты TCP/IP с номерами от 0 до 1023 являются привилегирован­ными и используются сетевыми службами, которые, в свою очередь, запущены с привилегиями администратора (супер пользователя). Например, служба доступа к файлам и папкам Windows использует порт 139, однако если она не запущена на компьютере, то при попытке обратиться к данной службе (т.е. к данному порту) будет получено сообщение об ошибке.

Порты TCP/IP с 1023 до 65535 являются непривилегированными и используются программами-клиентами для получения ответов от серверов. Например, web-браузер пользователя, обращаясь к web-серверу, использует порт 44587 своего компьютера, но обращается к 80 порту web-сервера. Получив запрос, web-сервер отправляет ответ на порт 44587, который используется web-браузером.

Транспортный уровень

Задача транспортного уровня - это передача данных между различными приложениями, выполняемых на всех узлах сети. После того, как пакет доставляется с помощью IP-протокола на принимающий компьютер, данные должны быть отправлены специальному процессу-получателю. Каждый компьютер может выполнять несколько процессов, кроме того, приложение может иметь несколько точек входа, действуя в качестве адреса назначения для пакетов данных.

Пакеты, приходящие на транспортный уровень операционной системы организованы в множества очередей к точкам входа различных приложений. В терминологии TCP/IP такие точки входа называются портами.

Transmission Control Protocol

Transmission Control Protocol (TCP) (протокол управления передачей) - является обязательным протоколом стандарт TCP/IP , определенный в стандарте RFC 793, "Transmission Control Protocol (TCP)".

TCP - это протокол транспортного уровня, предоставляющий транспортировку (передачу) потока данных, с необходимостью предварительного установления соединения, благодаря чему гарантирует уверенность в целостности получаемых данных, также выполняет повторный запрос данных в случае потери данных или искажения. Помимо этого протокол TCP отслеживает дублирование пакетов и в случае обнаружения - уничтожает дублирующиеся пакеты.

В отличие от протокола UDP гарантирует целостность передаваемых данных и подтверждения отправителя о результатах передачи. Используется при передаче файлов, где потеря одного пакета может привести к искажению всего файла.

TCP обеспечивает свою надежность благодаря следующему:

  • Данные от приложения разбиваются на блоки определенного размера, которые будут отправлены.
  • Когда TCP посылает сегмент, он устанавливает таймер, ожидая, что с удаленного конца придет подтверждение на этот сегмент. Если подтверждение не получено по истечении времени, сегмент передается повторно.
  • Когда TCP принимает данные от удаленной стороны соединения, он отправляет подтверждение. Это подтверждение не отправляется немедленно, а обычно задерживается на доли секунды
  • TCP осуществляет расчет контрольной суммы для своего заголовка и данных. Это контрольная сумма, рассчитываемая на концах соединения, целью которой является выявить любое изменение данных в процессе передачи. Если сегмент прибывает с неверной контрольной суммой, TCP отбрасывает его и подтверждение не генерируется. (Ожидается, что отправитель отработает тайм-аут и осуществит повторную передачу.)
  • Так как TCP сегменты передаются в виде IP датаграмм, а IP датаграммы могут прибывать беспорядочно, также беспорядочно могут прибывать и TCP сегменты. После получения данных TCP может по необходимости изменить их последовательность, в результате приложение получает данные в правильном порядке.
  • Так как IP датаграмма может быть продублирована, принимающий TCP должен отбрасывать продублированные данные.
  • TCP осуществляет контроль потока данных. Каждая сторона TCP соединения имеет определенное пространство буфера. TCP на принимающей стороне позволяет удаленной стороне посылать данные только в том случае, если получатель может поместить их в буфер. Это предотвращает от переполнения буферов медленных хостов быстрыми хостами.

  • Порядковый номер выполняет две задачи:
    • Если установлен флаг SYN, то это начальное значение номера последовательности - ISN (Initial Sequence Number), и первый байт данных, которые будут переданы в следующем пакете, будет иметь номер последовательности, равный ISN + 1.
    • В противном случае, если SYN не установлен, первый байт данных, передаваемый в данном пакете, имеет этот номер последовательности.
  • Номер подтверждения - если установлен флаг ACK, то это поле содержит номер последовательности, ожидаемый получателем в следующий раз. Помечает этот сегмент как подтверждение получения.
  • Длина заголовка - задается словами по 32бита.
  • Размер окна - количество байт, которые готов принять получатель без подтверждения.
  • Контрольная сумма - включает псевдо заголовок, заголовок и данные.
  • Указатель срочности - указывает последний байт срочных данных, на которые надо немедленно реагировать.
  • URG - флаг срочности, включает поле "Указатель срочности", если =0 то поле игнорируется.
  • ACK - флаг подтверждение, включает поле "Номер подтверждения, если =0 то поле игнорируется.
  • PSH - флаг требует выполнения операции push, модуль TCP должен срочно передать пакет программе.
  • RST - флаг прерывания соединения, используется для отказа в соединении
  • SYN - флаг синхронизация порядковых номеров, используется при установлении соединения.
  • FIN - флаг окончание передачи со стороны отправителя

Рассмотрим структуру заголовка TCP с помощью сетевого анализатора Wireshark:


TCP порты

Так как на одном и том же компьютере могут быть запущены несколько программ, то для доставки TCP-пакета конкретной программе, используется уникальный идентификатор каждой программы или номер порта.

Номер порта - это условное 16-битное число от 1 до 65535, указывающее, какой программе предназначается пакет.

TCP порты используют определенный порт программы для доставки данных, передаваемых с помощью протокола управления передачей (TCP). TCP порты являются более сложными и работают иначе, чем порты UDP. В то время как порт UDP работает как одиночная очередь сообщений и как точка входа для UDP-соединения, окончательной точкой входа для всех соединений TCP является уникальное соединение. Каждое соединение TCP однозначно идентифицируется двумя точками входа.

Каждый отдельный порт сервера TCP может предложить общий доступ к нескольким соединениям, потому что все TCP соединения идентифицируются двумя значениями: IP-адресом и TCP портом (сокет).

Все номера портов TCP, которые меньше чем 1024 - зарезервированы и зарегистрированы в Internet Assigned Numbers Authority (IANA).

Номера портов UDP и TCP не пересекаются.

TCP программы используют зарезервированные или хорошо известные номера портов, как показано на следующем рисунке.

Установление соединения TCP

Давайте теперь посмотрим, как устанавливается TCP-соединения. Предположим, что процесс, работающий на одном хосте, хочет установить соединение с другим процессом на другом хосте. Напомним, что хост, который инициирует соединение называется «клиентом», в то время как другой узел называется «сервером».

Перед началом передачи каких-либо данных, согласно протоколу TCP, стороны должны установить соединение. Соединение устанавливается в три этапа (процесс «трёхкратного рукопожатия» TCP).

  • Запрашивающая сторона (которая, как правило, называется клиент) отправляет SYN сегмент, указывая номер порта сервера, к которому клиент хочет подсоединиться, и исходный номер последовательности клиента (ISN).
  • Сервер отвечает своим сегментом SYN, содержащим исходный номер последовательности сервера. Сервер также подтверждает приход SYN клиента с использованием ACK (ISN + 1). На SYN используется один номер последовательности.
  • Клиент должен подтвердить приход SYN от сервера своим сегментов SYN, содержащий исходный номер последовательности клиента (ISN+1) и с использованием ACK (ISN+1). Бит SYN установлен в 0, так как соединение установлено.

После установления соединения TCP, эти два хоста могут передавать данные друг другу, так как TCP-соединение является полнодуплексным, они могут передавать данные одновременно.

Протокол TCP/IP представляет собой фундамент Internet, с помощью которого компьютеры отправляют и принимают информацию из любой точки земного шара, независимо от географического положения. Обратиться к компьютеру с TCP/IP в другой стране так же просто, как к компьютеру, который находится в соседней комнате. Процедура доступа в обоих случаях идентична, хотя для соединения с машиной в другой стране может потребоваться на несколько миллисекунд больше. В результате граждане любой страны могут без труда делать покупки в Amazon.com; однако из-за логической близости усложняется задача информационной защиты: любой владелец подключенного к Internet компьютера в любой точке мира может попытаться установить несанкционированное соединение с любой другой машиной.

Обязанность ИТ-специалистов - установить брандмауэры и системы обнаружения подозрительного трафика. В ходе анализа пакетов извлекается информация об IP-адресах отправителя и назначения и задействованных сетевых портах. Значение сетевых портов не уступает IP-адресам; это важнейшие критерии для отделения полезного трафика от фальшивых и вредных посылок, поступающих в сеть и исходящих из нее. Основная часть сетевого трафика Internet состоит из пакетов TCP и UDP, которые содержат информацию о сетевых портах, используемых компьютерами для того, чтобы направлять трафик от одного приложения в другое. Необходимое условие безопасности брандмауэра и сети - исчерпывающее понимание администратором принципов использования этих портов компьютерами и сетевыми устройствами.

Изучаем порты

Знание основных принципов работы сетевых портов пригодится любому системному администратору. Имея базовые знания об устройстве портов TCP и UDP, администратор может самостоятельно выполнить диагностику отказавшего сетевого приложения или защитить компьютер, которому предстоит обратиться в Internet, не вызывая сетевого инженера или консультанта по брандмауэрам.

В первой части данной статьи (состоящей из двух частей) дается описание основных понятий, необходимых для рассмотрения сетевых портов. Будет показано место сетевых портов в общей сетевой модели и роль сетевых портов и NAT (Network Address Translation - трансляция сетевых адресов) брандмауэра в соединениях компьютеров компании с Internet. И наконец, будут указаны точки сети, в которых удобно идентифицировать и фильтровать сетевой трафик по соответствующим сетевым портам. Во второй части рассматриваются некоторые порты, используемые широко распространенными приложениями и операционными системами, и рассказывается о некоторых инструментах для поиска открытых портов сети.

Краткий обзор сетевых протоколов

TCP/IP - набор сетевых протоколов, через которые компьютеры устанавливают связь друг с другом. Набор TCP/IP - не более чем фрагменты программного кода, установленные в операционной системе и открывающие доступ к этим протоколам. TCP/IP является стандартом, поэтому приложения TCP/IP на компьютере Windows должны успешно обмениваться данными с аналогичным приложением на машине UNIX. В начальный период развития сетей, в 1983 г., инженеры разработали семиуровневую модель взаимодействия OSI для описания процессов сетевого обмена компьютеров, от кабеля до приложения. Модель OSI состоит из физического, канального, сетевого, транспортного, сеансового представления данных и прикладного уровней. Администраторы, постоянно работающие с Internet и TCP/IP, в основном имеют дело с сетевым, транспортным и прикладным уровнями, но для успешной диагностики необходимо знать и другие уровни. Несмотря на солидный возраст модели OSI, ею по-прежнему пользуются многие специалисты. Например, когда сетевой инженер говорит о коммутаторах уровней 1 или 2, а поставщик брандмауэров - о контроле на уровне 7, они имеют в виду уровни, определенные в модели OSI.

В данной статье рассказывается о сетевых портах, расположенных на уровне 4 - транспортном. В наборе TCP/IP эти порты используются протоколами TCP и UDP. Но прежде чем перейти к подробному описанию одного уровня, необходимо кратко ознакомиться с семью уровнями OSI и той ролью, которую они выполняют в современных сетях TCP/IP.

Уровни 1 и 2: физические кабели и адреса MAC

Уровень 1, физический, представляет собственно среду, в которой распространяется сигнал, - например, медный кабель, волоконно-оптический кабель или радиосигналы (в случае Wi-Fi). Уровень 2, канальный, описывает формат данных для передачи в физической среде. На уровне 2 пакеты организуются в кадры и могут быть реализованы базовые функции управления потоком данных и обработки ошибок. Стандарт IEEE 802.3, более известный как Ethernet,- самый распространенный стандарт уровня 2 для современных локальных сетей. Обычный сетевой коммутатор - устройство уровня 2, с помощью которого несколько компьютеров физически подключаются и обмениваются данными друг с другом. Иногда два компьютера не могут установить соединение друг с другом, хотя IP-адреса кажутся корректными: причиной неполадки могут быть ошибки в кэше протокола преобразования адресов ARP (Address Resolution Protocol), что свидетельствует о неисправности на уровне 2. Кроме того, некоторые беспроводные точки доступа (Access Point, AP) обеспечивают фильтрацию адресов MAC, разрешающую соединение с беспроводной AP только сетевым адаптерам с конкретным MAC-адресом.

Уровни 3 и 4: IP-адреса и сетевые порты

Уровень 3, сетевой, поддерживает маршрутизацию. В TCP/IP маршрутизация реализована в IP. IP-адрес пакета принадлежат уровню 3. Сетевые маршрутизаторы - устройства уровня 3, которые анализируют IP-адреса пакетов и пересылают пакеты другому маршрутизатору или доставляют пакеты в локальные компьютеры. Если в сети обнаружен подозрительный пакет, то в первую очередь следует проверить IP-адрес пакета, чтобы установить место происхождения пакета.

Вместе с сетевым уровнем 4-й уровень (транспортный) - хорошая отправная точка для диагностики сетевых неисправностей. В Internet уровень 4 содержит протоколы TCP и UDP и информацию о сетевом порте, который связывает пакет с конкретным приложением. Сетевой стек компьютера использует связь сетевого порта TCP или UDP с приложением, чтобы направить сетевой трафик в это приложение. Например, TCP-порт 80 связан с приложением Web-сервера. Такое соответствие портов с приложениями известно как служба.

TCP и UDP различаются. В сущности, TCP обеспечивает надежное соединение для обмена данными между двумя приложениями. Прежде чем начать обмен данными, два приложения должны установить связь, выполнив трехшаговый процесс установления сязи TCP. Для протокола UDP в большей степени характерен подход «активизировать и забыть». Надежность связи для приложений TCP обеспечивается протоколом, а приложению UDP приходится самостоятельно проверять надежность соединения.

Сетевой порт представляет собой число от 1 до 65535, указанное и известное обоим приложениям, между которыми устанавливается связь. Например, клиент, как правило, посылает незашифрованный запрос в сервер по целевому адресу на TCP-порт 80. Обычно компьютер посылает запрос DNS на DNS-сервер по целевому адресу на UDP-порт 53. Клиент и сервер имеют IP-адрес источника и назначения, а также сетевой порт источника и назначения, которые могут различаться. Исторически все номера портов ниже 1024 получили название «известных номеров портов» и зарегистрированы в организации IANA (Internet Assigned Numbers Authority). В некоторых операционных системах только системные процессы могут использовать порты этого диапазона. Кроме того, организации могут зарегистрировать в IANA порты с 1024 по 49151-й, чтобы связать порт со своим приложением. Такая регистрация обеспечивает структуру, которая помогает избежать конфликтов между приложениями, стремящимися использовать порт с одним номером. Однако в целом ничто не мешает приложению запросить конкретный порт, если он не занят другой активной программой.

Исторически сложилось так, что сервер может прослушивать порты с малыми номерами, а клиент - инициировать соединение от порта с большим номером (выше 1024). Например, Web-клиент может открыть соединение с Web-сервером через порт назначения 80, но ассоциировать произвольно выбранный порт-источник, например TCP-порт 1025. Отвечая клиенту, Web-сервер адресует пакет клиенту с портом-источником 80 и портом назначения 1025. Комбинация IP-адреса и порта называется сокетом (socket), она должна быть уникальной в компьютере. По этой причине при организации Web-сервера с двумя отдельными Web-сайтами на одном компьютере необходимо использовать несколько IP-адресов, например address1:80 и address2:80, или настроить Web-сервер на прослушивание нескольких сетевых портов, таких как address1:80 и address1:81. Некоторые Web-серверы обеспечивают работу нескольких Web-сайтов через один порт, запрашивая хост-заголовок, но в действительности эта функция выполняется приложением Web-сервера на более высоком уровне 7.

По мере того как в операционных системах и приложениях появлялись сетевые функции, программисты начали использовать порты с номерами выше 1024, без регистрации всех приложений в IANA. Выполнив в Internet поиск для любого сетевого порта, как правило, удается быстро найти информацию о приложениях, которые используют этот порт. Или же можно провести поиск по словам Well Known Ports и отыскать множество сайтов со списками наиболее типичных портов.

При блокировании сетевых приложений компьютера или устранении изъянов в брандмауэре основная часть работы приходится на классификацию и фильтрацию IP-адресов уровня 3, а также протоколов и сетевых портов уровня 4. Чтобы быстро отличать легальный и подозрительный трафик, следует научиться распознавать 20 наиболее широко используемых на предприятии портов TCP и UDP.

Умение распознавать сетевые порты и знакомство с ними не ограничивается назначением правил для брандмауэра. Например, в некоторых исправлениях для системы безопасности Microsoft описана процедура закрытия портов NetBIOS. Эта мера позволяет ограничить распространение «червей», проникающих через уязвимые места операционной системы. Зная, как и где следует закрыть эти порты, можно уменьшить угрозу безопасности сети во время подготовки к развертыванию важного исправления.

И сразу к уровню 7

В настоящее время редко приходится слышать об уровне 5 (сеансовом) и уровне 6 (представления данных), но уровень 7 (прикладной) - горячая тема среди поставщиков брандмауэров. Новейшая тенденция в развитии сетевых брандмауэров - контроль на уровне 7, который описывает методы, используемые для анализа работы приложения с сетевыми протоколами. Анализируя полезную информацию сетевого пакета, брандмауэр может определить законность проходящего через него трафика. Например, Web-запрос содержит оператор GET внутри пакета уровня 4 (TCP-порт 80). Если в брандмауэре реализованы функции уровня 7, то можно проверить корректность оператора GET. Другой пример - многие одноранговые (P2P) программы обмена файлами могут захватить порт 80. В результате постороннее лицо может настроить программу на использование порта по собственному выбору - скорее всего, порта, который должен оставаться открытым в данном брандмауэре. Если сотрудникам компании нужен выход в Internet, необходимо открыть порт 80, но, чтобы отличить законный Web-трафик от трафика P2P, направленного кем-то в порт 80, брандмауэр должен обеспечивать контроль на уровне 7.

Роль брандмауэра

Описав сетевые уровни, можно перейти к описанию механизма связи между сетевыми приложениями через брандмауэры, уделив особое внимание используемым при этом сетевым портам. В следующем примере клиентский браузер устанавливает связь с Web-сервером по другую сторону брандмауэра, подобно тому как сотрудник компании обращается к Web-серверу в Internet.

Большинство Internet-брандмауэров работает на уровнях 3 и 4, чтобы исследовать, а затем разрешить или блокировать входящий и исходящий сетевой трафик. В целом администратор составляет списки управления доступом (ACL), которые определяют IP-адреса и сетевые порты блокируемого или разрешенного трафика. Например, чтобы обратиться в Web, нужно запустить браузер и нацелить его на Web-узел. Компьютер инициирует исходящее соединение, посылая последовательность IP-пакетов, состоящих из заголовка и полезной информации. Заголовок содержит информацию о маршруте и другие атрибуты пакета. Правила брандмауэра часто составляются с учетом информации о маршруте и обычно содержат IP-адреса источника и места назначения (уровень 3) и протокола пакета (уровень 4). При перемещениях по Web IP-адрес назначения принадлежит Web-серверу, а протокол и порт назначения (по умолчанию) - TCP 80. IP-адрес источника представляет собой адрес компьютера, с которого пользователь выходит в Web, а порт источника - обычно динамически назначаемое число, превышающее 1024. Полезная информация не зависит от заголовка и генерируется приложением пользователя; в данном случае это запрос Web-серверу на предоставление Web-страницы.

Брандмауэр анализирует исходящий трафик и разрешает его в соответствии с правилами брандмауэра. Многие компании разрешают весь исходящий трафик из своей сети. Такой подход упрощает настройку и развертывание, но из-за отсутствия контроля данных, покидающих сеть, снижается безопасность. Например, «троянский конь» может заразить компьютер в сети предприятия и посылать информацию с этого компьютера другому компьютеру в Internet. Имеет смысл составить списки управления доступом для блокирования такой исходящей информации.

В отличие от принятого во многих брандмауэрах подхода к исходящему трафику, большинство из них настроено на блокирование входящего трафика. Как правило, брандмауэры разрешают входящий трафик только в двух случаях. Первый - трафик, поступающий в ответ на исходящий запрос, посланный ранее пользователем. Например, если указать в браузере адрес Web-страницы, то брандмауэр пропускает в сеть программный код HTML и другие компоненты Web-страницы. Второй случай - размещение в Internet внутренней службы, такой как почтовый сервер, Web- или FTP-узел. Размещение такой службы обычно называется трансляцией порта или публикацией сервера. Реализация трансляции порта у разных поставщиков брандмауэров различна, но в основе лежит единый принцип. Администратор определяет службу, такую как TCP-порт 80 для Web-сервера и внутренний сервер для размещения службы. Если пакеты поступают в брандмауэр через внешний интерфейс, соответствующий данной службе, то механизм трансляции портов пересылает их на конкретный компьютер сети, скрытый за брандмауэром. Трансляция порта используется в сочетании со службой NAT, описанной ниже.

Основы NAT

Благодаря NAT многочисленные компьютеры компании могут совместно занимать небольшое пространство общедоступных IP-адресов. DHCP-сервер компании может выделять IP-адрес из одного из блоков частных, Internet-немаршрутизируемых IP-адресов, определенных в документе Request for Comments (RFC) № 1918. Несколько компаний также могут совместно использовать одно пространство частных IP-адресов. Примеры частных IP-подсетей - 10.0.0.0/8, 172.16.0.0/12 и 192.168.0.0/16. Маршрутизаторы Internet блокируют любые пакеты, направляемые в один из частных адресов. NAT - функция брандмауэра, с помощью которой компании, в которых используются частные IP-адреса, устанавливают связь с другими компьютерами в Internet. Брандмауэру известно, как транслировать входящий и исходящий трафик для частных внутренних IP-адресов, чтобы каждый компьютер имел доступ в Internet.