Получение списка открытых портов и прослушивающих порты служб
Разумеется, составить полный список всех ненужных служб невозможно. Набор запущенных по умолчанию служб различается от системы к системе и даже между двумя версиями MS Windows XP с разными пакетами обновлений. А если вам приходится укреплять безопасность системы, настроенной кем-то другим, набор запущенных служб, без сомнения, отличается от списка по умолчанию. Что еще хуже, время от времени появляются новые службы, расширяя количество служб, которые могут быть запущены на каждом конкретном компьютере.
В Microsoft Windows существует команда терминала netstat, которая позволяет получить список открытых портов. Функциональность стандартной версии netstat для MS Windows несколько ограничена по сравнению с аналогичной командой для систем Unix, но она все же предусматривает использование суффиксов для получения списка служб, прослушивающих порты:
Результат выполнения этой команды должен выглядеть примерно так:
… где вместо «hostname», разумеется, стоит имя хоста данной системы.
Теперь вы знаете, как…
…а знать – это уже полдела. Разумеется, для решения проблемы необходимо применить эти знания на практике. В статье Настройка межсетевого экрана (брандмауэра) в Windows XP Professional SP2 есть несколько полезных советов на эту тему.
Теперь, когда вы знаете, как получить список открытых в системе портов и выяснить, какие из ненужных служб на данный момент запущены, вы сможете остановить эти службы и закрыть порты. Поскольку конкретный порядок действий для выполнения этой задачи различается от системы к системе и обычно оказывается несколько более сложным, чем получение информации об открытых портах, подробную инструкцию я опубликую в другой раз.
Настройка сервера для прослушивания определенного TCP-порта Configure a Server to Listen on a Specific TCP Port
Применимо к: Applies to: SQL Server SQL Server (все поддерживаемые версии) SQL Server SQL Server (all supported versions) Применимо к: Applies to: SQL Server SQL Server (все поддерживаемые версии) SQL Server SQL Server (all supported versions)
В этом разделе описано, как настроить экземпляр компонента Компонент SQL Server Database Engine SQL Server Database Engine для прослушивания определенного фиксированного порта с помощью диспетчера конфигурации SQL Server. This topic describes how to configure an instance of the Компонент SQL Server Database Engine SQL Server Database Engine to listen on a specific fixed port by using the SQL Server Configuration Manager. Если прослушивание включено, то экземпляр компонента Компонент SQL Server Database Engine SQL Server Database Engine по умолчанию прослушивает TCP-порт 1433. If enabled, the default instance of the Компонент SQL Server Database Engine SQL Server Database Engine listens on TCP port 1433. Именованные экземпляры Компонент Database Engine Database Engine и SQL Server Compact SQL Server Compact настроены для использования динамических портов. Named instances of the Компонент Database Engine Database Engine and SQL Server Compact SQL Server Compact are configured for dynamic ports. Это означает, что при запуске службы SQL Server SQL Server для них выбирается свободный порт. This means they select an available port when the SQL Server SQL Server service is started. При соединении с именованным экземпляром через брандмауэр необходимо настроить компонент Компонент Database Engine Database Engine на прослушивание определенного порта. Это позволит открыть в брандмауэре необходимый порт. When you are connecting to a named instance through a firewall, configure the Компонент Database Engine Database Engine to listen on a specific port, so that the appropriate port can be opened in the firewall.
Поскольку порт 1433 — известный стандарт SQL Server SQL Server , некоторые организации указывают, что в целях безопасности номер порта SQL Server SQL Server необходимо изменить. Because port 1433 is the known standard for SQL Server SQL Server , some organizations specify that the SQL Server SQL Server port number should be changed to enhance security. В некоторых средах это может быть очень полезным. This might be helpful in some environments. При этом архитектура TCP/IP позволяет средству сканирования портов запрашивать открытые порты, поэтому изменение номера порта не считается надежной мерой безопасности. However, the TCP/IP architecture permits a port scanner to query for open ports, so changing the port number is not considered a robust security measure.
Дополнительные сведения о настройках брандмауэра Windows по умолчанию и описание портов TCP, влияющих на компонент Database Engine, службы Analysis Services, службы Reporting Services и службы Integration Services, см. в разделе Настройка брандмауэра Windows для разрешения доступа к SQL Server. For more information about the default Windows firewall settings, and a description of the TCP ports that affect the Database Engine, Analysis Services, Reporting Services, and Integration Services, see Configure the Windows Firewall to Allow SQL Server Access.
При выборе номера порта руководствуйтесь приведенным по адресу https://www.iana.org/assignments/port-numbers списком номеров портов, которые назначаются конкретным приложениям. When selecting a port number, consult https://www.iana.org/assignments/port-numbers for a list of port numbers that are assigned to specific applications. Выберите незанятый номер порта. Select an unassigned port number. Дополнительные сведения см. в разделе Предусмотренный по умолчанию динамический диапазон портов для TCP/IP, который изменился в Windows Vista и Windows Server 2008. For more information, see The default dynamic port range for TCP/IP has changed in Windows Vista and in Windows Server 2008.
Компонент Database Engine начнет прослушивание нового порта после перезапуска. The Database Engine begins listening on a new port when restarted. Однако служба браузера SQL Server SQL Server отслеживает реестр и возвращает новый номер порта, как только будет изменена конфигурация, даже если компонент Database Engine его не использует. However the SQL Server SQL Server Browser service monitors the registry and reports the new port number as soon as the configuration is changed, even though the Database Engine might not be using it. Перезапустите компонент Database Engine, чтобы обеспечить согласованность и избежать ошибок соединения. Restart the Database Engine to ensure consistency and avoid connection failures.
Использование диспетчера конфигурации SQL Server Using SQL Server Configuration Manager
Назначение ядру СУБД SQL Server порта TCP/IP To assign a TCP/IP port number to the SQL Server Database Engine
В области консоли диспетчера конфигурации SQL Server разверните узел Сетевая конфигурация SQL Server, Протоколы для , а затем дважды щелкните TCP/IP. In SQL Server Configuration Manager, in the console pane, expand SQL Server Network Configuration, expand Protocols for , and then double-click TCP/IP.
Если возникают проблемы при открытии SQL Server SQL Server Configuration Manager, см. статью Диспетчер конфигурации SQL Server. If you are having trouble opening SQL Server SQL Server Configuration Manager, see SQL Server Configuration Manager.
В диалоговом окне Свойства TCP/IP на вкладке IP-адреса появится несколько IP-адресов в формате IP1, IP2до IPAll. In the TCP/IP Properties dialog box, on the IP Addresses tab, several IP addresses appear in the format IP1, IP2, up to IPAll. Одним из приведенных IP-адресов является адрес адаптера заглушки 127.0.0.1. One of these is for the IP address of the loopback adapter, 127.0.0.1. Для каждого IP-адреса на компьютере появляются дополнительные IP-адреса. Additional IP addresses appear for each IP Address on the computer. (Возможно, вы увидите адреса как IPv4, так и IPv6.) Чтобы определить настраиваемый IP-адрес, щелкните правой кнопкой мыши каждый адрес и выберите пункт Свойства. (You will probably see both IP version 4 and IP version 6 addresses.) Right-click each address, and then click Properties to identify the IP address that you want to configure.
Если в диалоговом окне Динамические порты TCP содержится значение 0, означающее прослушивание компонентом Компонент Database Engine Database Engine динамических портов, удалите его. If the TCP Dynamic Ports dialog box contains 0, indicating the Компонент Database Engine Database Engine is listening on dynamic ports, delete the 0.
В области окнаIPn — свойства в поле Порт TCP введите номер порта, который необходимо прослушивать по этому IP-адресу, и нажмите кнопку ОК. In the IPn Properties area box, in the TCP Port box, type the port number you want this IP address to listen on, and then click OK. Вы можете указать множество портов через запятую. Multiple ports may be specified by separating them with a comma.
Если параметр Прослушивать все на вкладке Протокол имеет значение «Да», то будут использоваться только значения TCP-порт и Динамический TCP-порт в разделе IPAll, а отдельные разделы IPn будут полностью игнорироваться. If the Listen All setting on the Protocol tab is set to «Yes», then only TCP Port and TCP Dynamic Port values under the IPAll section will be used and individual IPn sections will be ignored in their entirety. Если параметр Прослушивать все имеет значение «Нет», то параметры TCP-порт и Динамический TCP-порт в разделе IPAll будут игнорироваться, а использоваться будут параметры TCP-порт, Динамический TCP-порт и Включено в отдельных разделах IPn. If the Listen All setting is set to «No», then the TCP Port and TCP Dynamic Port settings under the IPAll section will be ignored and the TCP Port, TCP Dynamic Port, and Enabled settings on the individual IPn sections will be used instead. В каждом разделе IPn есть параметр Включено, по умолчанию имеющий значение «Нет», который позволяет игнорировать этот IP-адрес в SQL Server SQL Server , даже если порт задан. Each IPn section has an Enabled setting with a default value of «No» which causes SQL Server SQL Server to ignore this IP address even if it has a port defined.
В области консоли выберите Службы SQL Server. In the console pane, click SQL Server Services.
В области сведений щелкните правой кнопкой мыши SQL Server ( ) и выберите команду Перезапустить, чтобы остановить и снова запустить SQL Server SQL Server . In the details pane, right-click SQL Server ( ) and then click Restart, to stop and restart SQL Server SQL Server .
Соединение Connecting
После настройки SQL Server SQL Server на прослушивание определенного порта установить соединение с ним с помощью клиентского приложения можно тремя способами: After you have configured SQL Server SQL Server to listen on a specific port, there are three ways to connect to a specific port with a client application:
- Запустите службу браузера SQL Server SQL Server на сервере для подключения к экземпляру компонента Компонент Database Engine Database Engine по имени. Run the SQL Server SQL Server Browser service on the server to connect to the Компонент Database Engine Database Engine instance by name.
- Создайте псевдоним на клиенте, указав номер порта. Create an alias on the client, specifying the port number.
- Настройте клиент на использование пользовательской строки подключения. Program the client to connect using a custom connection string.
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Как проверить открытые порты на своём компьютере. Что означают 0.0.0.0, :*, [::], 127.0.0.1. Как понять вывод NETSTAT
Почему важно знать, какие порты открыты на компьютере?
Открытый порт на вашем компьютере (если не настроен файервол для запрета входящих соединений) означает, что к вашему компьютеру можно подключиться из вне.
Если с вашим компьютером случалась такая неприятность как заражение трояном, бэкдором (вирусы, которые позволяют злоумышленнику удалённо подключаться к вашему компьютеру и управлять им), то обычно такой бэкдор открывает порт и прослушивает сеть, в ожидании входящего соединения (хотя могут быть варианты).
Ещё один пример, когда нужно определить, какая именно служба прослушивает порт: вы пытаетесь установить сетевую службу (веб-сервер Apache или СУБД MySQL), а они не запускаются, так как какая-то другая служба уже заняла их порт, который они используют по умолчанию. В этом случае нужно найти эту службу и отключить её или настроить на работу с другим портом.
Но, как и во многих IT задачах (да и вообще во многих профессиональных сферах), получить данные это только самое начало. Главное — это правильно их истолковать и понять.
Поэтому в этой статье мы рассмотрим, как узнать, какие порты открыты, как проверить, какая служба прослушивает определённый порт, а также научимся правильно понимать вывод команды NETSTAT и аналогичных.
Как проверить открытые порты в Windows
В Windows есть команда netstat, которая отображает статистику протокола и текущих сетевых подключений TCP/IP.
Используя команду со следующими ключами, можно посмотреть информацию о всех подключениях и прослушиваемых портах в Windows:
Как в Windows узнать, какая программа прослушивает порт
Открытых для прослушивания портов может оказаться достаточно много и обычно они используются легитимными программами. Поэтому при анализе полученных данных также важно знать, какая именно служба прослушивает определённый порт.
Для поиска службы, можно добавить к приведённой команде опцию -b, которая означает показать исполнимый файл, прослушивающий порт:
Также имеется альтернативный способ определения исполнимого файла, привязанного к порту. Для него откройте Командную строку Windows. Для этого нажмите сочетание клавиш Win+x, там выберите Windows PowerShell (Администратор). В открывшемся окне введите:
чтобы перейти в обычную командную строку.
Там запустите команду вида:
Эта команда найдёт службы, которые прослушивают 80 порт. Чтобы найти информацию о другом порте, замените в команде цифру 80 на интересующий вас порт.
Пример вывода в моём случае:
Запись 0.0.0.0:80 означает, порт 80 для любых IPv4 адресов прослушивает служба httpd.exe (веб-сервер Apache). А запись [::]:80 — означает, что порт 80 для любых IPv6 адресов прослушивает та же самая служба httpd.exe (веб-сервер Apache). Мы ещё вернёмся к более подробному анализу данных далее в этой статье.
Менять порт в длинной команде не всегда удобно, поэтому рекомендую создать текстовый файл с именем port.bat, в этот файл скопируйте:
Сохраните и закройте этот файл.
Теперь в Windows PowerShell или в командной строке Windows с помощью команды cd перейдите в папку, куда вы сохранили файл. Например, я его сохранил в папку C:\Users\Alex\Documents\, тогда для перехода туда я выполняю:
Теперь запустите файл командой вида:
Где [ПОРТ] замените на интересующий вас порт, например, меня интересует порт 80, тогда:
Вновь получаю аналогичный результат.
Если у вас множество портов прослушивает процесс svchost.exe, то чтобы разобраться, какие именно это службы, смотрите статью «Почему svchost.exe прослушивает много портов? Как узнать, какие именно программы открыли порты».
Как проверить открытые порты в Linux. Как узнать, какая служба прослушивает порт
Для Linux тоже есть команда netstat, но она, вроде как, теперь считается устаревшей и на её замену рекомендуется команда ss. Показываемая информация у ss и netstat очень похожи. Даже основные опции идентичны.
Итак, для вывода открытых портов TCP и UDP протоколов вместе с показом процессов, которые их прослушивают, используется команда:
Больше опций, а также больше способов найти, какие порты прослушиваются, смотрите в статье «4 способа узнать, какие порты прослушиваются в Linux».
Что означают данные netstat и ss
Далее мы научимся понимать, что именно выводит netstat. Но для полного понимания нам нужно изучить немного теории — совсем кратко. Я расскажу только о том, что нам действительно понадобиться.
TCP и UDP
TCP и UDP это протоколы транспортного уровня. Самое главное что вам нужно о них знать: любой из них может использоваться для передачи информации.
Кстати, про протокол TCP вы практически наверняка слышали, по крайней мере должны были встречать запись TCP/IP — эта связка протоколов очень важна для Интернета. Протокол IP отвечает за то, куда отправлять данные, а TCP отвечает за непосредственную передачу данных и проверку их целостности.
Работу протокола TCP можно представить как создание соединения между двумя компьютерами, по этому соединению передаются данные. Внутри этого соединения данные проверяются на предмет повреждения — если какая-то часть повреждена, то она отправляется повторно.
Протокол UDP тоже передаёт данные, но вместо того, чтобы создавать устойчивое соединение, внутри которого данные проверяются на целостность, он просто «пуляет» свой пакет на определённый адрес. В принципе, это и есть главное отличие между этими протоколами.
LISTENING, ESTABLISHED, CLOSE_WAIT и другие состояния
Как вы можете увидеть в выводе команды netstat для протокола TCP доступны разные варианты состояний.
Самые популярные из них это LISTENING — означает, что порт прослушивает запущенное на данном компьютере приложение, что оно готово принять соединение, например, от другого компьютера или от другой службы, запущенной на этом же компьютере.
ESTABLISHED означает уже установленное соединение. Пример такого соединения: веб-браузер инициализировал загрузку страницы сайта и пока данные передаются по этому соединению, у этого соединения статус ESTABLISHED.
Имеются и другие виды состояний, но для наших целей они не очень важны. По большому счёту нас интересует только LISTENING, так как это означает открытые порты на нашем компьютере и возможность подключаться к нему.
UDP и LISTENING
Про UDP уже сказано чуть выше, что этот протокол не создаёт соединений в том смысле, как это делает TCP. Поэтому для этого протокола нет никаких состояний соединения — это просто неприменимо к нему. По этой причине в графе Состояние для него никогда не пишется LISTENING. Но значит ли это, что UDP порт не может быть прослушиваемым? Нет! Порт UDP также может быть прослушиваемым и доступным для соединений. В том числе этот порт может использоваться вирусами и злоумышленниками, поэтому эти порты также подлежат исследованию.
Пример анализа открытых портов
Я начну с анализа открытых портов на Linux. Просто потому, что мне так проще, а затем мы постепенно перейдём изучить открытые порты на Windows.
Пример информации об открытых портах, полученных командой:
Пример прослушиваемых портов на Linux:
В выводимых данных имеются следующие поля:
- Netid — протокол udp или tcp
- State — состояние, для протоколов TCP здесь будет LISTEN (поскольку мы явно указали в опциях показать только прослушиваемые порты), а для протоколов UDP здесь будет UNCONN, то есть состояние неизвестно, но, на самом деле, это тоже прослушиваемые порты, которые позволяют подключаться из вне
- Recv-Q — получено
- Send-Q — отправлено
- Local Address:Port — локальный адрес и порт, к которому привязана служба, то есть IP адрес и порт, которые прослушиваются
- Peer Address:Port — удалённый адрес и порт, к которым выполнено соединение.
Допустим запись 127.0.0.1:9050 для локального адреса и порта означает, что прослушивается порт 9050. Причём он прослушивается только для IP адреса 127.0.0.1. Адрес 127.0.0.1 относится к так называемым Loopback, то есть это замыкающийся на себя, закольцованный адрес. Сетевой интерфейс с этим адресом называется петлевым. Пакеты, которые отправляются с компьютера на этот адрес, приходят на этот же самый компьютер (точнее говоря, они никуда даже не уходят). Доступ к этому адресу может иметь только служба, работающая на этом же самом компьютере. Отсюда важное следствие: хотя порт 9050 прослушивается, никто другой не может к нему подключиться из любой сети. Это же относится и к адресам из диапазона ::1/128 — это такие же адреса, но уже для IPv6, тамошний аналог 127.0.0.1 это ::1 (тоже часто можно видеть в выводимой информации).
Если прослушиваются какие-либо адреса из локальных
то к таким портам могут подключиться только компьютеры, расположенные в этих самых локальных сетях (если не настроить особым образом маршрутизацию).
Звёздочка (*) вместо адреса или порта
Мы можем увидеть записи вроде *:80 или даже *:*
Здесь звёздочка означает любой адрес или любой порт. Например, *:80 в колонке Local Address:Port (Локальный адрес:Порт) означает, что прослушивается 80 порт сразу на всех сетевых интерфейсах, доступных в данной системе. То есть служба ответит на запрос к 80 порту откуда бы он не пришёл: из локальной сети, из глобальной сети (если есть прямое соединение и интерфейс с белым IP) или с закольцованного адреса — это неважно, служба всё равно примет это соединение.
Кстати, служба может прослушивать порт в соответствии со следующими правилами:
- может прослушиваться конкретный порт для одного IP адреса
- может прослушиваться конкретный порт для любого IP адреса
То есть порт должен в любом случае быть указан, поэтому для Локальный адрес:Порт допустима запись *:80, но запись вида *:* никогда не встретится в этом столбце.
Для Peer Address:Port (Удалённый адрес:Порт) запись *:* означает, что принимаются соединения от любого IP, отправленные с любого порта.
Кстати, просто для справки: если ваш компьютер подключается к веб сайту, то веб сайты обычно работают на 80 порту. Следовательно, веб браузер подключается именно к 80 порту (или 443, если это безопасное HTTPS соединение). Но на вашем компьютере открывается новое соединение на каком угодно, но только не на 80 и 443 портах — обычно используются порты с номерами >30000, например, на вашем компьютере может быть открыто исходящее соединение с портом 42063 и оно будет адресовано к 80 порту какого-либо веб сервера.
Прослушиваемые порты IPv4 и IPv6 адресов в Linux
В Linux у программ netstat и ss имеется особенность вывода информации о прослушиваемых портах, когда прослушиваются одновременно IPv4 и IPv6 адреса — выводится информация только об IPv6 адресе! Возможно это связано с какими-то глубинными особенностями реализации ядра Linux, но в Windows, например, есть чёткое разделение и если служба одновременно прослушивает порт на IPv4 и IPv6 адресах, то информация об этой службе выводится два раза — пример этого почти в самом начале статьи, где мы ищем, какая служба прослушивает 80й порт и в найденной информации нам дважды показана служба httpd.
Что означает 0.0.0.0 в netstat. Различные виды нотаций в netstat и ss
0.0.0.0 — это самый первый IP адрес. Но он относится к IP специального назначения (как например 127.0.0.1) и выполняет разные функции.
Обозначение 0.0.0.0 может иметь разное значение в зависимости от того, где используется. Когда говорят о прослушиваемых портах, это обозначение в Linux символизирует заполнитель, то есть означает «любой IP адрес».
Чем это отличается от * (звёздочки) или от записи . , которые также встречаются в выводе рассматриваемых программ? В программе ss IPv6 адрес 0:0:0:0:0:0:0:0 (который является аналогом IPv4 адреса 0.0.0.0) обозначается звёздочкой (*). Следовательно, в ss запись 0.0.0.0:* обозначает «любой IPv4 адрес с любого порта». А обозначение *:* символизирует «любой IPv6 адрес с любого порта».
В программе netstat также используется запись 0.0.0.0:* которая также обозначает «любой IPv4 адрес с любого порта».
Но в netstat для обозначения «любой IPv6 адрес с любого порта» используется . *.
Помните об этих различиях, чтобы не запутаться. А также помните о том, что если показано, что прослушивается протокол tcp6 (IPv6), то одновременно может прослушиваться порт и на tcp (IPv4) — при этом данные в выводимой информации отсутствуют!
В Windows в качестве Локального адреса, когда прослушивается любой IP адрес на определённом порту, используется запись вида 0.0.0.0:80 (в этом примере прослушивается любой IP адрес, доступный в системе, на 80 порту). Для IPv6 адресов в этом случае используется запись вида [::]:80.
В качестве внешнего адреса, когда доступно подключения с любого IP и с любого порта, для TCP протокола пишется 0.0.0.0:0, а для UDP протокола в этих же условиях пишется *:*. Что тоже не особо логично и сбивает с толку. Точнее говоря, объяснение есть и оно вытекает из разницы протоколов TCP и UDP. Но это объяснение скорее философское и в практическом плане ничего не даёт.
Если информация относится к IPv6, то для TCP когда имеется ввиду любой адрес на любом порту, используется запись вида [::]:0. А для UDP используются одинаковые нотации как для IP, так и для IPv6, то есть *:*
Нужно помнить, что некоторые из этих обозначений пересекаются с нотациями из Linux, где они имеют своё собственное значение.
Чтобы чуть облегчить жизнь, я составил такую табличку, которую можно использовать в качестве шпаргалки:
Определённый локальный IPv4 адрес на определённом порту
Любой локальный IPv4 адрес на определённом порту
Определённый локальный IPv6 адрес на определённом порту
Любой локальный IPv6 адрес на определённом порту
Любой внешний IPv4 адрес на любом порту
Любой внешний IPv6 адрес на любом порту