Открытые порты Ubuntu
В современных операционных системах не обойтись без взаимодействия программ с внешней средой и интернетом. Для этого используется специальные механизмы — порты.
Но порты представляют определённую угрозу. Если в программе есть какая-либо уязвимость, то любой пользователь локальной сети сможет получить доступ к вашему компьютеру, а в некоторых случаях даже к вашей информации. Поэтому нужно быть очень осторожным с открытыми портами. В этой статье мы разберёмся, как посмотреть открытые порты Ubuntu.
Что такое порты и зачем они нужны?
Порты — это более широкое понятие, чем просто возможность подключится к удалённому компьютеру через сеть. Когда процесс хочет обратиться к серверу, ему нужно каким-либо образом идентифицировать, к какому серверу он хочет подключиться. Если мы знаем 32 битный IP-адрес сервера, то мы можем без проблем к нему подключиться.
Но как указать программу, к которой нужно обратиться? Для решения этой проблемы оба протокола UDP и TCP поддерживают систему портов. Порт — это целое число от 1024 до 65535. Все номера до 1024 зарезервированы и используются только определёнными службами, например, 22 — ssh, http — 80, FTP — 21 и так далее.
Таким образом, процесс прослушивает определённый порт на сервере, а клиент, который хочет к нему обратиться, должен знать этот порт. Вся обработка прав доступа к портам в большинстве случаев ложится на процесс, поэтому если в его коде есть уязвимости, то это может стать серьёзной проблемой безопасности.
Открытые порты 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
Утилита lsof тоже предназначена для просмотра открытых соединений. Основная ее функция — просмотр открытых файлов, но с её помощью можно посмотреть открытые порты Ubuntu. Используйте такие параметры:
sudo lsof -nP -i | grep LISTEN
Опции -n и -P указывают, что необходимо отображать не только цифровые имена портов и ip-адреса, но и имена доменов и сервисов. Опция -i отображает все сетевые подключения, а с помощью grep мы фильтруем только те, которые находятся в состоянии прослушивания.
Представление информации немного отличается, но в общем и целом мы видим всё ту же информацию. Кроме неё, здесь ещё отображается имя пользователя, от которого запущен процесс. Вы можете не ограничиваться фильтрами и посмотреть все доступные соединения:
ss
Команда ss — это улучшенная версия netstat. Точно так, как для замены ifconfig была придумана утилита ip, ss разработали для замены netstat. Команда будет выглядеть следующим образом:
Все данные здесь выводятся почти так же, как и в netstat, поэтому вы легко во всём разберётесь. В дополнение к выше перечисленным командам: возможно, вам нужно будет посмотреть на правила брандмауэра iptables, чтобы понять, какие порты закрыты с его помощью:
В нашем примере нет никаких ограничений. Политика по умолчанию — ACCEPT. На промышленных серверах может применяться политика DENY, а нужные порты будут разрешены с помощью правил.
nmap
Сетевой сканер nmap позволяет проверить список портов Ubuntu так, как бы это делал злоумышленник при попытке атаки на вашу систему. Здесь вы будете видеть все порты, которые видны снаружи. Но для сканирования нужно использовать внешний ip-адрес. Не сетевой ip-адрес провайдера, а адрес вашего компьютера, например, в локальной сети чаще всего используется 192.168.1.2. Посмотреть ip вашего сетевого интерфейса можно с помощью команды ifconfig:
Чтобы просто просканировать открытые порты Ubuntu, будет достаточно выполнить:
Также можно выполнить комплексное сканирование всех уязвимостей. Важно отметить, что команда не находит все уязвимости, а проверяет только самые простые. Для активации этого режима используется опция -A:
Как пользоваться nmap, читайте в отдельной статье.
Выводы
В этой статье мы рассмотрели, как проверить порты Ubuntu с помощью нескольких утилит. Все они выводят подробную информацию, но для каждого отдельного случая может лучше подойти только одна из них. Например, проверять какие порты видят другие компьютеры извне лучше с помощью nmap. А чтобы посмотреть, какие службы или сокеты доступны локально, лучше применять netstat или ss.
Проверяйте, какие порты открыты, и если они не нужны, то закройте их в брандмауэре или просто отключите сервис. Иначе они ставят под угрозу безопасность вашей системы. Например, у меня на ноутбуке открыт порт SSH, и я не раз наблюдал в логах попытки перебрать пароль от каких-то роутеров из локальной сети. И если даже вас некому ломать, это могут сделать вирусы. Так что будьте осторожны, и не оставляйте открытые порты, если в этом нет необходимости.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Проверка занятости порта сервисом в Linux
Oct 4, 2018 06:09 · 637 words · 3 minute read lsof netstat fuser tips
Однажды вам обязательно понадобится проверить используемый порт определенного сервиса (или наоборот, найти сервисы, слушающие конкретный порт) — в Linux существует несколько утилит командной строки, которые могут с этим помочь. Давайте разберемся!
Первым делом на ум приходит утилита netstat , с помощью которой можно проверить сетевые соединения, статистику сетевых интерфейсов, таблицу маршрутизации и т. д.
Устанавливается данная утилита в разных дистрибутивах по-разному, например, для RedHat и CentOS:
sudo yum install net-tools
sudo apt-get install net-tools
Для вывода детальной информации о всех TCP и UDP ендпоинтах можно воспользоваться следующей командой:
Вывод будет примерно следующим:
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 1323/systemd-resolv tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1661/sshd tcp 0 0 127.0.0.1:17123 0.0.0.0:* LISTEN 1753/python tcp6 0 0 . 31341 . * LISTEN 30068/java tcp6 0 0 . 22222 . * LISTEN 30068/java tcp6 0 0 . 80 . * LISTEN 30068/java tcp6 0 0 . 10769 . * LISTEN 126755/docker-proxy tcp6 0 0 . 10770 . * LISTEN 129459/docker-proxy tcp6 0 0 . 10771 . * LISTEN 129540/docker-proxy tcp6 0 0 . 10772 . * LISTEN 130172/docker-proxy tcp6 0 0 . 10773 . * LISTEN 130187/docker-proxy tcp6 0 0 . 10774 . * LISTEN 130545/docker-proxy tcp6 0 0 . 22 . * LISTEN 1661/sshd tcp6 0 0 . 10775 . * LISTEN 7406/docker-proxy
- -p — вывод ID процесса и его имени;
- -n — вывод адресов;
- -l — вывод сокетов;
- -t — вывод TCP соединений;
- -u — вывод UDP соединений.
Найти сервис, запущенный на определенном порту можно так:
Аналогично можно найти на каком порту запущен определенный сервис:
netstat -pnltu | grep -i "sshd"
Также для наших целей подойдет утилита командной строки fuser . По умолчанию она не установлена в большинстве операционных систем, чтобы установить ее в Centos/RedHat делаем так:
Например, чтобы найти идентификаторы процессов (PIDs), запущенных на 80-м порту, выполняем команду:
Результат выполнения будет примерно следующим:
Далее можем найти имя процесса по его идентификатору (PID):
Еще один способ — использование утилиты lsof . Установка ее в RedHat/CentOS выглядит так:
Вывод всех активных TCP и UPD соединений:
Результатом будет примерно следующее:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd-r 1323 systemd-resolve 12u IPv4 20197 0t0 UDP 127.0.0.53:domain systemd-r 1323 systemd-resolve 13u IPv4 20198 0t0 TCP 127.0.0.53:domain (LISTEN) sshd 1661 root 3u IPv4 29741 0t0 TCP *:ssh (LISTEN) sshd 1661 root 4u IPv6 29743 0t0 TCP *:ssh (LISTEN) python 1754 dd-agent 4u IPv6 39499 0t0 UDP localhost.localdomain:8125 docker-pr 7406 root 4u IPv6 287933991 0t0 TCP *:10775 (LISTEN) docker-pr 7459 root 4u IPv6 287906596 0t0 TCP *:10776 (LISTEN) docker-pr 7792 root 4u IPv6 287937795 0t0 TCP *:10777 (LISTEN) docker-pr 8435 root 4u IPv6 287955267 0t0 TCP *:10778 (LISTEN) docker-pr 8447 root 4u IPv6 287915222 0t0 TCP *:10779 (LISTEN) docker-pr 9060 root 4u IPv6 287891442 0t0 TCP *:10780 (LISTEN) docker-pr 9429 root 4u IPv6 287957044 0t0 TCP *:10781 (LISTEN) docker-pr 9463 root 4u IPv6 287921075 0t0 TCP *:10782 (LISTEN) ntpd 10594 ntp 16u IPv6 35365570 0t0 UDP *:ntp
Проверить использование конкретного порта можно так:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1661 root 3u IPv4 29741 0t0 TCP *:ssh (LISTEN) sshd 1661 root 4u IPv6 29743 0t0 TCP *:ssh (LISTEN)
Напоследок можно также воспользоваться утилитой whatportis . Ее установка в RedHat/Centos требует чуть больше действий:
yum install python34-setuptools
В Debian/Ubuntu все гораздо проще:
В общем виде использование утилиты выглядит так:
whatportis [номер_порта | имя_сервиса]
Если вам неизвестно точное имя сервиса, можно воспользоваться опцией —like , например:
Также доступен вывод информации в json-формате:
Какой процесс слушает порт в Linux?
17.05.2023
itpro
Linux
Комментариев пока нет
В этой статье мы рассмотрим, как найти процесс, который слушает определенный порт в Linux.
Можно получить информацию о процесс, который слушает определенный порт командой:
В этом примере видно, что порт 8000 занят процессом python3.
Можно вывести список всех запущенных процессов Linux, который используют любые TCP/UDP порты:
$ sudo netstat -lntup| grep LISTEN
Мы используем следующие ключи:
- -l – показать тольо прослушиваемые порты
- -n – показать IP адреса и номера портов в числовом виде и не пытаться их резолвить (соответствие номеров портов и название служб содержится в файле /etc/services)
- -t – показать открытые TCP порты
- -u – показать UDP порты
- -p – показать название процесс, который прослушивает порт
Мы нашли PID процесса ( 72005 ), который использует порт и теперь можно вывести информацию о том, как он запущен:
В этом примере видно, что процесс запущен вручную пользователем root с помощью команды python3 -m http.server (используется для запуска простого HTTP сервера на python для публикации текущего каталога).
Чтобы быстро завершить процесс, который слушает нужный вам порт и освободить его, выполните:
Проверьте, что порт теперь свободен:
Предыдущая статья Следующая статья
Установка и настройка прокси сервера Squid в Linux
Настройка Wi-Fi точки доступа на Linux
Мониторинг срока регистрации (освобождения) домена в Zabbix
Управление конфигурацией Windows через Ansible