Что такое порт в linux

Обновлено: 04.07.2024

В современных операционных системах не обойтись без взаимодействия программ с внешней средой и интернетом. Для этого используется специальные механизмы - порты.

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

Что такое порты и зачем они нужны?

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

Таким образом, процесс прослушивает определённый порт на сервере, а клиент, который хочет к нему обратиться, должен знать этот порт. Вся обработка прав доступа к портам в большинстве случаев ложится на процесс, поэтому если в его коде есть уязвимости, то это может стать серьёзной проблемой безопасности.

Открытые порты Ubuntu

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

В Linux существует несколько утилит, которые можно использовать, чтобы посмотреть открытые порты. Одни из них полноценные сетевые сканеры, другие - локальные утилиты, отображающие всю доступную информацию. Рассмотрим основные из них.

netstat

Это одна из самых старых и популярных утилит для просмотра открытых портов. Мы описывали её в отдельной статье, а сейчас просто кратко рассмотрим, как с ней работать. Чтобы посмотреть открытые порты, выполните такую команду:

netstat -ntlp | grep LISTEN

Опция -l сообщает, что нужно посмотреть прослушиваемые порты, -p показывает имя программы, -t и -u - отображают TCP и UDP порты, а -n показывает ip адреса в числовом виде. Дальше нужно выбрать только те строки, где встречается слово LISTEN, чтобы найти только прослушиваемые порты.

Здесь в первом столбце отображается протокол, затем два столбца - это данные, которые нам ничего полезного не говорят, а за ними уже идут локальный и внешний адреса. Если локальный адрес - 127.0.0.1, то это значит, что сервис доступен только на этом компьютере, а значение 0.0.0.0 или :: означает любой адрес, к таким сервисам могут подключаться из сети. В нашем примере это Apache и systemd-resolvd.

Утилита lsof тоже предназначена для просмотра открытых соединений. Основная ее функция - просмотр открытых файлов, но с её помощью можно посмотреть открытые порты Ubuntu. Используйте такие параметры:

sudo lsof -nP -i | grep LISTEN


Опции -n и -P указывают, что необходимо отображать не только цифровые имена портов и ip-адреса, но и имена доменов и сервисов. Опция -i отображает все сетевые подключения, а с помощью grep мы фильтруем только те, которые находятся в состоянии прослушивания.

Представление информации немного отличается, но в общем и целом мы видим всё ту же информацию. Кроме неё, здесь ещё отображается имя пользователя, от которого запущен процесс. Вы можете не ограничиваться фильтрами и посмотреть все доступные соединения:


Команда ss - это улучшенная версия netstat. Точно так, как для замены ifconfig была придумана утилита ip, ss разработали для замены netstat. Команда будет выглядеть следующим образом:


Все данные здесь выводятся почти так же, как и в netstat, поэтому вы легко во всём разберётесь. В дополнение к выше перечисленным командам: возможно, вам нужно будет посмотреть на правила брандмауэра iptables, чтобы понять, какие порты закрыты с его помощью:


В нашем примере нет никаких ограничений. Политика по умолчанию - ACCEPT. На промышленных серверах может применяться политика DENY, а нужные порты будут разрешены с помощью правил.

Сетевой сканер nmap позволяет проверить список портов Ubuntu так, как бы это делал злоумышленник при попытке атаки на вашу систему. Здесь вы будете видеть все порты, которые видны снаружи. Но для сканирования нужно использовать внешний ip-адрес. Не сетевой ip-адрес провайдера, а адрес вашего компьютера, например, в локальной сети чаще всего используется 192.168.1.2. Посмотреть ip вашего сетевого интерфейса можно с помощью команды ifconfig:


Чтобы просто просканировать открытые порты Ubuntu, будет достаточно выполнить:

nmap -sT 192.168.1.3


Также можно выполнить комплексное сканирование всех уязвимостей. Важно отметить, что команда не находит все уязвимости, а проверяет только самые простые. Для активации этого режима используется опция -A:

sudo nmap -A 192.168.1.3


Как пользоваться nmap, читайте в отдельной статье.

Выводы

В этой статье мы рассмотрели, как проверить порты Ubuntu с помощью нескольких утилит. Все они выводят подробную информацию, но для каждого отдельного случая может лучше подойти только одна из них. Например, проверять какие порты видят другие компьютеры извне лучше с помощью nmap. А чтобы посмотреть, какие службы или сокеты доступны локально, лучше применять netstat или ss.

Проверяйте, какие порты открыты, и если они не нужны, то закройте их в брандмауэре или просто отключите сервис. Иначе они ставят под угрозу безопасность вашей системы. Например, у меня на ноутбуке открыт порт SSH, и я не раз наблюдал в логах попытки перебрать пароль от каких-то роутеров из локальной сети. И если даже вас некому ломать, это могут сделать вирусы. Так что будьте осторожны, и не оставляйте открытые порты, если в этом нет необходимости.

Теперь, после базовой системы, вторая категория: те программы, которые являются пакетами дополнений. В мире BSD это обычно называется «системой портов». Это имя выбрано не случайно.Традиционно, чтобы запустить программу в системе, первое, что вы должны были сделать, — это скомпилировать её. И часто перед компиляцией приходилось её допиливать. Ваша система могла требовать другие заголовочные файлы. Иногда отличались объявленные константы. Некоторые части иной раз переписывались с нуля из-за их несоответствия вашей системе.Другими словами, вам надо было «портировать» программу для своей ОС и/или для вашей конкретной системы. Основная цель системы портов — это сделать всю работу по портированию за вас. То, что она также автоматизирует сборку и инсталляцию и обеспечивает такими сервисами, как 'uninstall', в её имени, правда, не отражено.Но как это бывает со многими вещами, со временем система портов переросла своё имя и превратилась в того зверя, которого мы видим сегодня. Коллекция портов FreeBSD содержит более 10 000 пакетов. Самая очевидная особенность портов в том, что программы собираются из исходников, а не просто инсталлируются заранее собранные бинарники. Это ещё одно явное отличие, которое сбивает с толку людей, оценивающих BSD с точки зрения Linux. Но, то, что они собираются из исходников — это не первичная цель, сторонний эффект. Бинарные пакеты также доступны — фактически они собираются из дерева портов!Действительно, большинство пользователей Linux устанавливают бинарные пакеты, а пользователи BSD — собирают из исходников. Отчасти, причина этому — инструментарий. Система портов спроектирована вокруг концепции сборки из исходников, с отведенной на второй план возможностью собирать и устанавливать бинарные пакеты. В то время, как пакетная система Linux, например RPM или dpkg, в свою очередь, спроектирована вокруг концепции сборки и установки бинарников, сборка из исходников — в уме. Исторически сложилось, что бинарные пакеты не были доминантными в Unix-системах, как я уже говорил выше. Поэтому, пакеты сами по себе, — это более поздняя вещь. Традиционно, с деинсталляцией надо было разбираться вручную.Gentoo — это набирающий известность дистрибутив Linux. Одно из его преимуществ заключается в системе портежей, которая часто сравнивается с портами BSD. Пожалуй, самое заметное сходство заключается в сборке из исходников. Это исключает множество проблем бинарных пакетов. Сам я её никогда не использовал, но впечатления от информации о ней и знакомых, которые использовали её, позволяют говорить, что система взяла хорошие идеи отовсюду и соединила их вместе. Будет интересно понаблюдать за её развитием в ближайшие годы. Тем не менее, Gentoo всё же Linux, а не BSD, но претендует на то, чтобы быть ближе всех к стилю BSD из ведущих дистрибутивов Linux.Теперь, что касается преимуществ бинарных пакетов: это время (очень много времени) и обычно меньше требуемого места для установки пакетов, чем в случае с исходниками. В сборке из исходников есть свои преимущества, например, избежание чехарды с версиями библиотек (то, что меня расстраивает в бинарных пакетах). В Linux или BSD вы можете устанавливать пакеты, а можете собирать их из исходников. Но пользователи, кажется, настроены по-разному, потому что системы настроены по-разному, потому что пользователи настроены по-разному… вот такое соответствие.Я полагаю, здесь важно понять, что разница между портами и RPM состоит не только в том, что порты компилируются, а пакеты просто инсталлируются. Порты созданы для того, чтобы покрыть весь диапазон битов и составных частей процесса инсталляции: кодирование, трекинг и зависимости, пакеты, инсталляция и деинсталляция, локальные изменения, необходимые для инсталляции на вашей системе, конфигурационные «фишки» и прочее. RPM — это просто бинарный пакет. Если вы хотите автоматически подцепить все зависимости, вам потребуется инструмент более высокого уровня, например urpmi или apt-get. А так как это бинарник, вам всё равно придётся иметь дело с конфликтами версий библиотек, или пропущенными опциями компилятора, или любыми другими ограничениями, с которыми вы столкнётесь, НЕ собирая его на своей системе.Далее, порты, как и остальная часть в системах BSD, централизованы. «Дерево портов» — это огромный структурированный каталог, с кучей папок по категориям, содержащих Makefile с объявленными переменными, checksum, packing list, и другие подобные вещи. Каждая из этих папок представляет собой отдельную программу, которая описывается этими файлами. Куча чёрной магии творится за сценой, когда вы вводите make : она находит и скачивает дистрибутив, где бы он ни был, проделывает все необходимые изменения, рекурсивно находит и устанавливает все зависимости, вызывает GNU configure или imake или любую другую подготовительную программу с нужными опциями, начинает компиляцию с нужными параметрами, и т.д.Но всеми файлами в этом большом каталоге управляет сам проект FreeBSD. Например, когда кто-то написал KDE, она не появилась магическим образом в дереве портов. Кто-то должен был написать необходимый «клей» для создания её порта, затем залить файлы на репозиторий FreeBSD CVS для того, чтобы она появилась в коллекции портов. Опять же, существует определенный уровень уверенности, что она работает со всеми остальными вещами в коллекции портов. Все существующие зависимости будут там, потому что она не может объявлять зависимости вне портов.Вещи ломаются, конечно. Может быть, у какой-либо зависимости исчезнет сайт, так что никто не сможет скачать исходник. Может быть, новая версия какой-то третьей программы сломает вашу программу, что приведет к сбою в работе зависящих от неё вещей. Конечно, всех проблем не решить. Но инцидентов с «я хочу А, которая требует Б, которую я не могу найти» намного меньше, чем с децентрализованными системами, подобными RPM.Для более детальной информации читайте раздел в хэндбуке.

How to Check for Listening Ports in Linux (Ports in use)

В этой статье объясняется , как узнать, какие услуги прослушивает порты с помощью netstat, ss и lsof команд. Инструкции применимы для всех операционных систем на базе Linux и Unix, таких как macOS.

Как проверить открытые порты в Linux (используемые порты)

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

Что такое открытый порт (порт прослушивания)

Сетевой порт идентифицируется его номером, соответствующим IP-адресом и типом протокола связи, таким как TCP или UDP.

Порт прослушивания - это сетевой порт, который прослушивает приложение или процесс, выступая в качестве конечной точки связи.

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

Вы не можете иметь две службы, прослушивающие один и тот же порт на одном и том же IP-адресе.

Проверьте порты прослушивания с netstat

netstat это инструмент командной строки, который может предоставить информацию о сетевых подключениях

Чтобы получить список всех прослушиваемых портов TCP или UDP, включая службы, использующие порты и состояние сокета, используйте следующую команду:


Параметры, используемые в этой команде, имеют следующее значение:

  • -t - Показать порты TCP.
  • -u - Показать порты UDP.
  • -n - Показать числовые адреса вместо разрешения хостов.
  • -l - Показывать только порты прослушивания.
  • -p - Показать PID и имя процесса слушателя. Эта информация отображается, только если вы запускаете команду от имени пользователя root или sudo .

Вывод будет выглядеть примерно так:


Важными столбцами в нашем случае являются:

  • Proto - Протокол, используемый сокетом.
  • Local Address - IP-адрес и номер порта, на котором слушает процесс.
  • PID/Program name - PID и название процесса.

Если вы хотите отфильтровать результаты, используйте команду grep . Например, чтобы узнать, какой процесс прослушивает TCP-порт 22, вы должны набрать:


Выходные данные показывают, что на этой машине порт 22 используется сервером SSH:


Если вывод пуст, это означает, что ничего не прослушивает порт.

Вы также можете отфильтровать список на основе критериев, например, PID, протокола, состояния и т. Д.

netstat устарел и заменен на ss и ip , но все же это одна из наиболее часто используемых команд для проверки сетевых подключений.

Проверьте порты прослушивания с ss

ss новый netstat . В нем отсутствуют некоторые netstat функции, но он предоставляет больше состояний TCP и работает немного быстрее. Параметры команды в основном одинаковы, поэтому переход с netstat на ss не сложен.

Чтобы получить список всех прослушивающих портов ss , наберите:


Вывод почти такой же, как тот, о котором сообщили netstat :


Проверьте порты прослушивания с lsof

lsof это мощная утилита командной строки, которая предоставляет информацию о файлах, открытых процессами.

В Linux все это файл. Вы можете думать о сокете как о файле, который пишет в сеть.

Чтобы получить список всех прослушивающих TCP-портов, lsof введите:

Используются следующие параметры:

  • -n - Не конвертируйте номера портов в имена портов.
  • -p - Не разрешайте имена хостов, показывайте числовые адреса.
  • -iTCP -sTCP:LISTEN - Показывать только сетевые файлы с состоянием TCP LISTEN.


Большинство имен выходных столбцов говорят сами за себя:

  • COMMAND , PID , USER - имя, ИДП и пользователь , запустив программу , связанную с портом.
  • NAME - номер порта.

Чтобы узнать, какой процесс прослушивает определенный порт, например, порт, который 3306 вы используете:


Выходные данные показывают, что порт 3306 используется сервером MySQL:

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

Вывод

Мы показали вам несколько команд, которые вы можете использовать для проверки того, какие порты используются в вашей системе, и как найти процесс, который прослушивает определенный порт.


Как администратор Linux, вы должны знать, является ли соответствующая служба обязательной / прослушивающей с правильным портом или нет.

Это поможет вам легко устранить проблему, когда вы столкнулись с проблемами, связанными с портами.

Доступны два вида порта: физическое и программное обеспечение.

Поскольку операционная система Linux является программным обеспечением, мы собираемся обсудить порт программного обеспечения.

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

Большинство служб, связанных с сетью, должны открыть сокет для прослушивания входящих сетевых запросов.

Socket уникален для каждого сервиса.

Область номеров портов доступна для протокола TCP и UDP.

Протокол управления передачей (TCP) и протокол пользовательских дейтаграмм (UDP) используют номера портов для связи.

Это значение от 0 до 65535.

Ниже приведены категории присвоений портов.

Вы можете проверить детали зарезервированных портов в файле /etc/services в Linux.

Это может быть достигнуто с использованием шести методов.

Метод-1: Использование команды ss

ss используется для вывода статистики сокетов.

Он позволяет отображать информацию, аналогичную netstat.

Он может отображать больше информации о TCP и его состоянии, чем другие инструменты.

Он может отображать статистику для всех типов сокетов, таких как PACKET, TCP, UDP, DCCP, RAW, домен Unix и т. д.

В качестве альтернативы вы также можете проверить это с помощью номера порта.

Способ-2: Использование команды netstat

По умолчанию netstat отображает список открытых сокетов.

Если вы не укажете каких-либо семейств адресов, будут выведены активные сокеты всех сконфигурированных семейств адресов.

В качестве альтернативы вы также можете проверить это с помощью номера порта.

Метод-3: использование команды lsof

Команда lsof Linux выводит информацию о файлах, открытых для процессов, запущенных в системе.

В качестве альтернативы вы также можете проверить это с помощью номера порта.

Метод-4: Использование команды fuser

Утилита fuser должна записывать на стандартный вывод идентификаторы процессов, запущенных в локальной системе, которые открывают один или несколько именованных файлов.

Метод-5: Использование команды nmap

Он был разработан для быстрого сканирования больших сетей, хотя он отлично работает с одиночными хостами.

Nmap использует необработанные IP-пакеты в новых способах определения того, какие хосты доступны в сети, какие службы (имя и версия приложения) эти хосты предлагают, какие операционные системы (и версии ОС) они запускают, какие типы фильтров пакетов / брандмауэры используются, и десятки других характеристик

Метод-6: Использование команды systemctl

Это замена старого системного управления SysV, и большинство современных операционных систем Linux были адаптированы под systemd.

Вышеприведенный пример будет показывать фактический порт прослушивания службы SSH при запуске службы SSHD в последнее время.

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

Читайте также: