Как проверить (сканировать) открытые порты в Linux

Проверьте открытые порты в Linux

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

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

Что такое номер открытого порта

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

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

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

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

Проверьте открытые порты с помощью nmap

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

Если доступно, nmap должен стать вашим первым инструментом для сканирования портов. Помимо сканирования портов, nmap также может определить MAC-адрес, тип ОС , версию ядра и многое другое.

Следующая команда, введенная с консоли, определяет, какие порты прослушивают TCP-соединения из сети:

 sudo nmap -sT -p- 10.10.8.8

Параметр -sT указывает nmap сканировать TCP-порты, а -p- — все 65535 портов. Если -p- не используется, nmap будет сканировать только 1000 самых популярных портов.

 Starting Nmap 7.60 ( https://nmap.org ) at 2019-07-09 23:10 CEST Nmap scan report for 10.10.8.8 Host is up (0.0012s latency). Not shown: 998 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http MAC Address: 08:00:27:05:49:23 (Oracle VirtualBox virtual NIC) Nmap done: 1 IP address (1 host up) scanned in 0.41 seconds

Приведенный выше вывод показывает, что в целевой системе открыты только порты 22 , 80 и 8069 .

Для сканирования портов UDP используйте -sU вместо -sT :

 sudo nmap -sU -p- 10.10.8.8

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

Проверьте открытые порты с помощью netcat

Netcat (или nc ) — это инструмент командной строки, который может считывать и записывать данные через сетевые соединения, используя протоколы TCP или UDP.

С помощью netcat вы можете сканировать отдельный порт или диапазон портов.

Например, для сканирования открытых TCP-портов на удаленном компьютере с IP-адресом 10.10.8.8 в диапазоне 20-80 вам следует использовать следующую команду:

 nc -z -v 10.10.8.8 20-80

Опция -z указывает nc сканировать только открытые порты, не отправляя никаких данных, а -v — для получения более подробной информации.

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

 nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused Connection to 10.10.8.8 22 port [tcp/ssh] succeeded! ... Connection to 10.10.8.8 80 port [tcp/http] succeeded!

Если вы хотите, чтобы на экране были выведены только строки с открытыми портами, отфильтруйте результаты с помощью команды grep .

 nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
 Connection to 10.10.8.8 22 port [tcp/ssh] succeeded! Connection to 10.10.8.8 80 port [tcp/http] succeeded!

Для сканирования портов UDP передайте команду nc с опцией -u :

 nc -z -v -u 10.10.8.8 20-80 2>&1 | grep succeeded

Конструкция 2>&1 перенаправляет стандартную ошибку в стандартный вывод.

Проверьте открытые порты с помощью псевдоустройства Bash

Другой способ проверить, открыт или закрыт определенный порт, — использовать псевдоустройство оболочки Bash /dev/tcp/.. или /dev/udp/..

При выполнении команды на псевдоустройстве /dev/$PROTOCOL/$HOST/$IP Bash откроет TCP- или UDP-соединение с указанным хостом на указанном порту.

Следующий оператор if..else проверит, открыт ли порт 443 на kernel.org :

 if timeout 5 bash -c '/dev/null' then echo "Port is open" else echo "Port is closed" fi
 Port is open

Как работает код выше?

При подключении к порту через псевдоустройство тайм-аут по умолчанию очень большой, поэтому мы используем команду timeout , чтобы завершить тестовую команду через 5 секунд. Если соединение установлено к порту 443 kernel.org тестовая команда вернёт значение true.

Для проверки диапазона портов используйте цикл for :

 for PORT in { 20..80 } ; do timeout 1 bash -c " $PORT &>/dev/null" && echo "port $PORT is open" done

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

 port 22 is open port 80 is open

Заключение

Мы показали вам несколько инструментов, которые можно использовать для сканирования открытых портов. Существуют также другие утилиты и методы проверки открытых портов, например, модуль socket Python, curl , telnet или wget .

Если у вас есть вопросы или замечания, пожалуйста, оставьте комментарий ниже.

терминал nmap netcat

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *