Команда netstat — это очень практичный инструмент для диагностики сети, конфигурирования и других действий по сканированию портов. В частности, системные администраторы используют ее для устранения неполадок в сети и диагностики производительности.
Команда netstat работает в Microsoft Windows, Linux, Unix, FreeBSD и других системах. Следовательно, все команды в этой статье будут давать одинаковые результаты независимо от вашей операционной системы, если для Linux не указано иное.
Операционная система Linux поставляется с предустановленным значительным количеством встроенных функций. В зависимости от уровня знаний пользователи могут быть не полностью осведомлены о возможностях конкретной команды. В этой статье представлены основы netstat, другие возможности команды вы можете прочитать в статье: 10 примеров команды Netstat в Unix/Linux, и способы устранения неполадок в сети с ее помощью.
Мы узнаем, как работает команда netstat, ознакомившись с ее часто используемыми приложениями. Мы увидим, как генерировать информацию о маршруте, статистику сетевого интерфейса или запускать операции сканирования портов с помощью команды. Возможно, было бы неплохо сделать заметки о наиболее часто повторяющихся параметрах и о том, что они делают, потому что они пригодятся при работе с другими командами.
Использование команды netstat с параметром -r выводит информацию о маршруте ядра таким же образом, как и с помощью команды route.
$ netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Обратите внимание, что дополнительная опция -n используется для отключения поиска имени хоста. Она настраивает команду netstat для отображения адресов в виде четырехзначных IP-номеров, разделенных точками, вместо имен хоста и сети в виде символов.
Этот -i параметр настраивает команду netstat для отображения статистики сетевого интерфейса. Включив опцию -a, мы включим в выходные данные все интерфейсы, присутствующие в ядре, а не только те, которые настроены в данный момент.
$ netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 31611 0 0 0 27503 0 0 0 BMRU lo 65536 0 2913 0 0 0 2913 0 0 0 LRU
Проще говоря, в поле MTU отображается текущий MTU, в то время как в поле Met отображаются значения показателей интерфейса. В других полях отображается дополнительная информация:
Команда netstat поддерживает использование некоторых параметров при составлении списка активных и пассивных сокетов. Эти параметры включают:
При добавлении опции -a отобразятся сокеты, которые прослушивают подключение. Этот результат будет представлять собой список всех серверов, запущенных в данный момент на компьютере с Linux.
Сканирование портов — это процесс определения местоположения прослушиваемых портов в системе.
Прослушивающий порт — это свободный порт, который прослушивает входящий трафик от приложений и процессов. Вы можете использовать брандмауэр для управления прослушивающими портами, открывая или закрывая их. Открытые порты принимают входящие пакеты из удаленных местоположений, в то время как закрытые порты заняты приложением или процессом.
Некоторые распространенные порты, открытые по умолчанию:
Номер порта | Описание |
---|---|
20 | Протокол передачи файлов (FTP) |
22 | Безопасная оболочка (SSH) |
25 | Простой протокол передачи почты (SMTP) |
53 | Система доменных имен (DNS) |
80 | Протокол передачи гипертекста (HTTP) |
110 | Протокол почтового отделения (POP3) |
143 | Протокол доступа к интернет-сообщениям (IMAP) |
443 | HTTP Secure (HTTPS) |
Операции прослушивания должны выполняться на регулярной основе, поскольку любой порт, открытый для внешних подключений, является возможной точкой входа в вашу систему. Если есть что-либо нежелательное для прослушивания подключений, обязательно удалите пакет, выполнив следующие действия:
Службу всегда можно отключить, но лучше всего удалить базовый пакет, чтобы ее нельзя было запустить случайно. Пакеты всегда можно переустановить позже.
Давайте рассмотрим, например, как использовать команду netstat -untlp для обращения ко всем подключенным в данный момент и прослушивающим портам.
Эта команда отображает все, что прослушивает входящий трафик, и порт, через который он прослушивается. Разбиение этой команды на части, первый параметр, -t, идентифицирует ваш запрос информации, относящейся к TCP. Далее, -u представляет UDP; -l запрашивает прослушивающие сокеты; -p пытается отобразить название программы; и -n показывает числовые значения. Собрав все это вместе, вы получаете netstat -tulpn:
$ sudo netstat -untlp
В первом столбце отображаются активные и установленные подключения в следующих заголовках:
Заголовок | Описание |
---|---|
Proto | Протокол подключения (TCP или UDP) |
Recv-Q | Очередь полученных или готовых к приему байтов |
Send-Q | Очередь байтов, готовых к отправке |
Local address | Подробные сведения об адресе и локальном порту подключения (звездочка указывает, что порт открыт) |
Foreign address | Подробные сведения об адресе и порту удаленного подключения (звездочка указывает, что порт еще не установлен) |
State | Состояние сокета, показывающее, установлено ли соединение с портом или нет, и является ли это открытым или закрытым портом |
Команда -a используется для составления списка всех портов. Результат будет похож на этот:
$ netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 enlightened:domain *:* LISTEN tcp 0 0 localhost:ipp *:* LISTEN tcp 0 0 enlightened.local:54750 li240-5.members.li:http ESTABLISHED tcp 0 0 enlightened.local:49980 del01s07-in-f14.1:https ESTABLISHED tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN udp 0 0 enlightened:domain *:* udp 0 0 *:bootpc *:* udp 0 0 enlightened.local:ntp *:* udp 0 0 localhost:ntp *:* udp 0 0 *:ntp *:* udp 0 0 *:58570 *:* udp 0 0 *:mdns *:* udp 0 0 *:49459 *:* udp6 0 0 fe80::216:36ff:fef8:ntp [::]:* udp6 0 0 ip6-localhost:ntp [::]:* udp6 0 0 [::]:ntp [::]:* udp6 0 0 [::]:mdns [::]:* udp6 0 0 [::]:63811 [::]:* udp6 0 0 [::]:54952 [::]:* Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 12403 @/tmp/dbus-IDgfj3UGXX unix 2 [ ACC ] STREAM LISTENING 40202 @/dbus-vfs-daemon/socket-6nUC6CCx
Здесь LISTEN состояние означает, что sshd прослушивает входящие IP-пакеты на всех сетевых интерфейсах и IP-адреса на TCP-порту 22. Состояние ESTABLISHED показывает активное SSH-соединение, перечисляя локальный адрес и порт системы, а также столбцы Recv-Q и Send-Q.
Используйте команду netstat и опцию -l для прослушивания только активных портов со следующим выводом:
$ netstat -l Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0
Вы также можете составить список прослушиваемых портов. Это работает для пользователей root на компьютере с Linux:
$sudo netstat -plnt
Порты TCP и UDP выполняют разные функции. TCP обеспечивает упорядоченный поток пакетов с проверкой на ошибки, в то время как UDP обеспечивает более быстрый поток пакетов за счет проверки на ошибки. Команда netstat поддерживает параметры для отображения списка обоих портов отдельно друг от друга.
Добавление -at опции к команде netstat отобразит все TCP-порты. Обратите внимание, что при исключении -a опции будут отображаться только активные порты:
$ netstat -at Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 enlightened:domain *:* LISTEN tcp 0 0 localhost:ipp *:* LISTEN tcp 0 0 enlightened.local:36310 del01s07-in-f24.1:https ESTABLISHED tcp 0 0 enlightened.local:45038 a96-17-181-10.depl:http ESTABLISHED tcp 0 0 enlightened.local:37892 ABTS-North-Static-:http ESTABLISHED .....
Аналогично, в параметрах -au, добавленных в команду netstat, будут перечислены все UDP-порты. При отказе от опции -a будут отображены только активные порты:
$ netstat -au AActive Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State udp 0 0 *:34660 *:* udp 0 0 enlightened:domain *:* udp 0 0 *:bootpc *:* udp 0 0 enlightened.local:ntp *:* udp 0 0 localhost:ntp *:* udp 0 0 *:ntp *:* udp6 0 0 fe80::216:36ff:fef8:ntp [::]:* udp6 0 0 ip6-localhost:ntp [::]:* udp6 0 0 [::]:ntp [::]:*
Устранение неполадок с помощью netstat включает в себя выявление, диагностику и решение сетевых проблем путем добавления параметров в команду. В дополнение к -untlp параметру выше, вы можете использовать grep параметр для устранения неполадок.
Чтобы узнать, какой процесс занимает определенный порт, вы можете использовать опцию grep.
# netstat -an | grep ':80'
Это полезно, например, когда вы пытаетесь запустить веб-сервер на определенном порту и обнаруживаете, что он уже используется.
Если вы обнаружите, что к порту подключена неизвестная служба, немедленно примите меры, скопировав и вставив сведения в поисковую систему для идентификации службы.
Статистика сети отображается с помощью параметра -s в команде netstat:
$ netstat -s Ip: 30525 total packets received 0 forwarded 0 incoming packets discarded 20375 incoming packets delivered 16250 requests sent out 40 outgoing packets dropped Icmp: 325 ICMP messages received 0 input ICMP message failed. ICMP input histogram: destination unreachable: 125 325 ICMP messages sent 0 ICMP messages failed ICMP output histogram: destination unreachable: 125 ... OUTPUT TRUNCATED …
Мы рассмотрели, как netstat можно использовать для устранения неполадок и отображения статистики. Команда netstat также может применяться в двух расширенных вариантах использования.
Допустим, вы используете общедоступный сервер, такой как SSH web-сервер. SSH-сервер откроет порт в серверной системе для доступа пользователей и входа в систему.
Портом по умолчанию для sshd является TCP-порт 22. С помощью команды netstat вы можете отслеживать все открытые порты, используя параметры вместе с командой, как показано ниже:
$ sudo netstat -untap | sed '2p;/ssh/!d' Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1296/sshd: /usr/sbi tcp6 0 0 :::22 :::* LISTEN 1296/sshd: /usr/sbi
IP-адрес и номер порта объединяются, чтобы указать вашему компьютеру с Linux, куда отправлять SSH-пакеты.
Команда netstat также может использоваться для мониторинга сеанса просмотра веб-страниц:
$ netstat -punta Proto Local Address Foreign Address State PID/Program name [...] tcp 192.168.43.234:50586 72.21.91.66:443 ESTABLISHED 2798/firefox tcp 192.168.43.234:38262 52.36.174.147:443 ESTABLISHED 6481/chrome tcp 192.168.43.234:53232 99.86.33.45:443 ESTABLISHED 2798/firefox [...]
Ваш компьютер может тайно прослушивать неизвестный веб-сайт или подключаться к нему. Отличный способ обнаружить это — отслеживать соединения с помощью команды netstat:
$ netstat -abf 5 > activity.txt
В опции -a перечислены все подключения и порты прослушивания; -b отображаются все приложения, осуществляющие подключения; в то же время -f отображается полное DNS-имя каждого указанного подключения для упрощения идентификации источника подключения. Символ > переносит результаты в файл activity.txt.
Хотя команда netstat является мощным инструментом системного администратора, вам не обязательно быть системным администратором, чтобы использовать ее. Как мы видели, netstat полезно во многих сценариях, даже если нашей целью является просто обеспечение безопасности повседневной работы в Интернете.
Но netstat не следует ограничиваться только командами, обсуждаемыми здесь — опции и флаги могут значительно расширить возможности, предоставляемые командой netstat.