netstat — проверка открытых портов в Linux


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

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

Проверка открытых портов на Ubuntu

Чтобы проверить, какие порты открыты на нашей рабочей станции Ubuntu, можно выполнить команду, показанную ниже. Обратите внимание, что она должна работать и для других разновидностей Linux, если установлена утилита netstat.

Выполните в терминале следующую команду:

netstat -anltp | grep «LISTEN»

Обычный веб-сервер, на котором запущены FTP, SSH и MySQL, выведет следующую информацию:

tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 21432/mysqld

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4090/apache2

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 7213/sshd

tcp6 0 0 :::21 :::* LISTEN 19023/proftpd

tcp6 0 0 :::22 :::* LISTEN 7234/sshd

Вышеуказанная команда запускает утилиту netstat с соответствующими флагами и передает вывод функции grep, которая извлекает строки, содержащие слово «LISTEN». В результате мы получаем список открытых портов и имена процессов, прослушивающих эти порты.

Все команды netstat, ss, netcat относится к сетевым утилитам и доступны по-умолчанию в большинстве linux-дистрибутивах.

netstat

Команда netstat умеет показывать сетевые соединения (входящие/исходящие), таблицу маршрутизации, статистику по сетевым интерфейсам и т.д.

Читать также  Koobface атакует MacOS и Linux

Список всех открытых портов (TCP)

netstat -at

Список всех открытых портов (UDP)

netstat -au

Список только прослушиваемых портов (TCP)

netstat -lt

Статистика по всем открытым портам

netstat -s

Подробное отображение списка с открытыми портами — добавлен PID и имя процессов

netstat -p

Объединим все ключи в полезную команду для просмотра открытых TCP/UDP портов с именами процессов (может понадобиться root-доступ)

netstat -ltupn

Список подключенных хостов

netstat -lantp | grep ESTABLISHED |awk '{print $5}' | awk -F: '{print $1}' | sort -u

ss

Утилита ss позволяет просматривать информацию об используемых сокетах в системе. Эта команда обладает схожим функционалом к netstat, но есть и уникальные возможности. Например можно фильтровать вывод по установленным соединениям с определенным портом.

Список процессов, использующие соединения в данный момент

ss -p  

Список сокетов в режиме прослушивания

ss -l

Пример фильтра — список всех соединений к порту 80

ss -o state established '( dport = :www or sport = :www )'

lsof

Утилита lsof умеет отображать процессы, которые работают с определенным файлом или сокетом.

Список всех сетевых соединений

lsof -i

Список процессов, работающих с портом 80

lsof -i :80

netcat

Утилита netcat позволяет передавать/принимать данные через TCP/UDP соединения.

Шаблон вызова утилиты

nc host port

Откроем прием (ключ -l) данных на порте 1234 с подробным выводом информации (ключ -v) и продолжением работы после разрыва соединения (ключ -k), по-умолчанию nc разрывает соединение после первого дисконекта.

nc -lvk 1234

Подключаемся к открытому порту и отправим import antigravity 😉

nc 127.0.0.1 1234
import antigravity

Пример более полезного использования nc — передача файла. На принимающей стороне

nc -l 1234 > file

На отправляющей стороне

nc localhost 1234 < file

Или можно отдавать файл любому подключившемуся. На передающей стороне

nc -l 1234 < file

На принимающей стороне

nc localhost 1234 > file

Пример открытия shell’а на определенном порте (источник). На стороне, где нужно открыть шел

mkfifo /tmp/pipe;
sh /tmp/pipe | nc -l 1234 > /tmp/pipe 

Еще один полезный пример с netcat — запуск процесса, с возможностью отслеживания его работы через сеть

watch w | nc localhost 1234

Какие порты открыты для внешнего мира?

Читать также  Создание загрузочной флешки с Ubuntu Server

Обратите внимание, что сервис может иметь открытый порт, который можно прослушивать только на текущей машине. То есть, порт открыт, но вы не сможете получить к нему доступ из сети.

Это полезно для безопасности, например, веб-сервер должен иметь открытый для остального мира порт 80, но мир не должен знать о (или иметь возможность подключения) порте 3306, который прослушивает сервер MySQL, поддерживающий вебсайт.

В идеале, если вы используете веб-сервер, единственные порты, которые должны быть видны извне это HTTP-порт 80, и возможно, SSH порт 22, поскольку вам понадобится подключаться к веб-серверу для выполнения команд.

Порты для служб, доступных только на локальном компьютере, будут иметь IP адрес 127.0.0.1 в поле локального адреса. В вышеприведенном примере это будет:

tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 21432/mysqld

Как видно, MySQL прослушивает порт 3306 по IP адресу 127.0.0.1. Это означает, что к MySQL серверу могут подключиться только программы на той же машине.

Источник статьи — SEO Блог

Categories

1 comment

Add yours
  1. 1
    Дмитрий Фич

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

+ Leave a Comment