Введение
Независимо от того, устраняете ли вы проблемы с сетевым подключением или настраиваете брандмауэр, в первую очередь нужно проверить, какие порты действительно открыты в вашей системе.
В этой статье описывается, как использовать Nmap и Bash Pseudo Device, чтобы узнать, какие порты открыты снаружи в системе 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-09-09 09:11 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: 01:00:21:22:01:88 (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 и ознакомьтесь со всеми другими мощными опциями этого инструмента.
Поиск открытых портов с помощью Bash Pseudo Device
Еще один способ проверить, открыт или закрыт определенный порт, — это использовать псевдоустройство оболочки Bash /dev/tcp/.. или /dev/udp/...
Когда вы запускаете команду на псевдоустройстве /dev/$PROTOCOL/$HOST/$IP, Bash открывает TCP- или UDP-соединение с указанным хостом на указанном порту.
Следующее объявление используется для проверки того, открыт ли порт 443 на kernel.org:
if timeout 5 bash -c '</dev/tcp/kernel.org/443 &>/dev/null'
then
echo "Porta aperta"
else
echo "Porta chiusa"
fi
Port aperta
Тайм-аут по умолчанию при подключении к порту с использованием псевдоустройства огромен, поэтому мы используем команду тайм -аута, чтобы завершить тестовую команду через 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 "porta $PORT aperta"
done
Вывод будет выглядеть следующим образом:
port 22 aperta
port 80 aperta
Вывод
Мы показали вам несколько инструментов, которые вы можете использовать для поиска открытых дверей. Также есть другие утилиты и методы для проверки открытых портов, например, вы можете использовать сокет Python, curl, telnet или wget.