ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Понимание и устранение неполадок с помощью команды netstat

Понимание и устранение неполадок с помощью команды netstat

Команда 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.

 

Операции TCP/IP и сканирования портов с netstat

Сканирование портов – это процесс определения местоположения прослушиваемых портов в системе.

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

Некоторые распространенные порты, открытые по умолчанию:

Номер порта Описание
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 поддерживает параметры для отображения списка обоих портов отдельно друг от друга.

TCP-порты

Добавление -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
.....

 

UDP-порты

Аналогично, в параметрах -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

Устранение неполадок с помощью netstat включает в себя выявление, диагностику и решение сетевых проблем путем добавления параметров в команду. В дополнение к -untlp параметру выше, вы можете использовать grep параметр для устранения неполадок.

Использование netstat + 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 можно использовать для устранения неполадок и отображения статистики. Команда netstat также может применяться в двух расширенных вариантах использования.

Мониторинг входов в систему на SSH-сервере

Допустим, вы используете общедоступный сервер, такой как 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.

Exit mobile version