Для того чтобы воспринимать чужие мысли, надо не иметь своих (Л. Толстой).

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

4 мин для чтения
FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
10 июля 2019
Как проверить (проверить) наличие открытых портов в Linux
Независимо от того, решаете ли вы проблемы с сетевым подключением или настраиваете брандмауэр, в первую очередь необходимо проверить, какие порты действительно открыты в вашей системе.

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

 

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

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

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

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

 

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 используйте -uT вместо -sT:

sudo nmap -uT -p- 10.10.8.8

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

 

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-портов передайте параметр -u в команду nc:

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

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

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

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

if timeout 5 bash -c '</dev/tcp/kernel.org/443 &>/dev/null'
then
  echo "Порт открыт"
else
  echo "Порт закрыт"
fi
Порт открыт

Как работает приведенный выше код?

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

Вы также можете использовать цикл for для проверки диапазона портов:

for PORT in {20..80}; do
  timeout 1 bash -c "</dev/tcp/10.10.8.8/$PORT &>/dev/null" &&  echo "порт $PORT открыт"
done

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

порт 22 открыт
порт 80 открыт

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

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Просмотров: 611

Если статья понравилась, то поделитесь ей в социальных сетях:

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

Войти с помощью: 

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

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close