- Используя команду netstat
- Узнать, кто использует данные порты:
- Список всех открытых портов при помощи команды netstat
- Просмотр статистики по протоколам
- Узнать PID и имя ПО, которое проявляет сетевую активность
- Отображение таблицы IP роутов
- Узнать какой порт использует определенный процесс
- Расширенная информация о сетевом интерфейсе
- Несколько примеров для определения атаки типа DoS или DDoS
- Используя команду ss
- Список всех открытых портов при помощи команды ss
- Используя команду lsof
- Используя команду netcat
- Используя команду NMAP
- Какие порты открыты для внешнего мира?
Используя команду netstat
netstat -anltp | лови «СЛУШАТЬ»
CLOSE_WAIT — ожидание закрытия соединения
ЗАКРЫТО — соединение закрыто
ESTABLISHED — соединение установлено
LISTENED — ожидается соединение (прослушивание порта)
TIME_WAIT — время ожидания ответа
Инструмент Netstat позволяет увидеть порты, открытые в системе, а также открытые в данный момент сетевые подключения. Для отображения максимально подробной информации используйте опции:
- -l или —listening — смотреть только прослушиваемые порты;
- -p или —program — показать название программы и ее PID;
- -t или —tcp — показать tcp порты;
- -u или —udp показать порты UDP;
- -n или —numeric отображает IP-адреса в числовой форме.
Узнать, кто использует данные порты:
- netstat -bno — получить список всех сетевых подключений и связанных с ними программ
- -n Отображает адреса и номера портов в числовом формате
- -b — показывает исполняемый файл, участвующий в создании каждого соединения
Типичный веб-сервер с FTP, SSH и MySQL будет отображать следующую информацию:
tCP 0 0 127.0.0.1:3306 0.0.0.0:* ПРОСЛУШАТЬ 21432/mysqld TCP 0 0 0.0.0.0:80 0.0.0.0:* ПРОСЛУШАТЬ 4090/apache2 sshd 0:0.0.1 sshd TCP 0 0 0.0.0.0:80 0.0 .0.0:* ПРОСЛУШИВАТЬ 4090/apache2 sshd 0:0.0.1 sshd tcp 0.0.0.0::::::::::::::::::::::::::::::::: ::::: tcp: 0.0.0 tcp6 0 0 :::22 :::* ПРОСЛУШАТЬ 7234/sshd
Приведенная выше команда запускает утилиту netstat с соответствующими флагами и передает вывод функции grep, которая извлекает строки, содержащие слово «LISTEN». В результате мы получаем список открытых портов и имена процессов, прослушивающих эти порты.
Все команды netstat, ss, netcat относятся к сетевым инструментам и доступны по умолчанию в большинстве дистрибутивов Linux.
Команда netstat может отображать сетевые подключения (входящие/исходящие), таблицу маршрутизации, статистику сетевых интерфейсов и т д
Список всех открытых портов при помощи команды netstat
Это просто. Здесь мы используем либо команду netstat. Да все так просто, всего одна строчка и все перед глазами:
$ sudo netstat —tulpn
Здесь мы можем видеть, какие порты находятся в состоянии прослушивания).
Просмотр статистики по протоколам
Эта информация отображается командой netstat -s:
# netstat -s Ip: всего 37850 полученных пакетов 3 с неверными адресами 1 переадресовано 0 входящих пакетов отброшено 17349 входящих пакетов доставлено 17635 отправленных запросов Icmp: 0 ICMP-сообщений получено 0 входящее ICMP-сообщение не удалось. Tcp: открыто 312 активных соединений, 2 неудачные попытки соединения, получено 114 сбросов соединения, UDP: получено 9883 пакета, получено 4 пакета на неизвестный порт…..
Отдельная статистика по TCP:
netstat -st
Отдельная статистика UDP:
Узнать PID и имя ПО, которое проявляет сетевую активность
Чтобы узнать, какой у нас процесс использует сетевое соединение или демонстрирует аномальную сетевую активность, вы можете использовать команду netstat -pt:
# netstat -pt Активные подключения к Интернету (без серверов) Proto Recv-Q Send-Q Локальный адрес Внешний адрес Состояние PID/имя программы tcp 1 0 root.wellweb:47212 192.168.1.1:www CLOSE_WAIT 2109/firefox tcp 0 0 wellweb: 52750 lax: www ESTABLISHED 2109/firefox
Отображение таблицы IP роутов
# netstat -r Основная таблица IP-маршрутизации Шлюз назначения Флаги генмаски Окно MSS irtt Iface 192.168.1.0 * 255.255.255.0 U 0 0 0 eth2 link-local * 255.255.0.0 U 0 0 0 eth2108 .0 UG 019 default . 0 эт2
Узнать какой порт использует определенный процесс
# netstat -ap | grep ssh (Не все процессы могут быть идентифицированы, информация о не принадлежащих процессах не будет отображаться, вы должны быть root, чтобы увидеть все.) tcp 1 0 dev-db:ssh 192.182.1.1:39213 CLOSE_WAIT — tcp 1 0 dev-db :ssh 192.182.1.1:57643 CLOSE_WAIT —
Если нужно сделать наоборот, узнать процесс по порту, то команда будет выглядеть так:
# netstat -an | грэп ‘:80’
Расширенная информация о сетевом интерфейсе
Для этого используем команду:
# netstat -ie Таблица основных интерфейсов eth0 Link encap:Ethernet HWaddr 00:10:42:11:11:11 UP BROADCAST MULTICAST MTU:1500 Метрика:1 RX пакетов:0 ошибок:0 отброшено:0 переполнение:0 кадр:0 TX пакеты: 0 ошибки: 0 отброшены: 0 переполнение: 0 носитель: 0 коллизии: 0 txqueuelen: 800 байты RX: 0 (0,0 Б) байты TX: 0 (0,0 Б) Память: f6ad0000-f6b10000
Мы также использовали следующие флаги:
- t — отображает список портов TCP.
- u — отображает список портов UDP.
- l — показывает только прослушивающие (Listen) контакты.
- n — показывает номер порта.
- p — отображает имя процесса или программы.
Несколько примеров для определения атаки типа DoS или DDoS
Следующая команда сообщит вам, сколько подключений активно на каждом IP-адресе:
netstat -naltp | УСТАНОВЛЕНА grep | awk ‘{напечатать $5}’ | awk -F: ‘{print $1}’ | сортировать -n | уникальный -с
Определяем большое количество запросов с одного IP адреса:
netstat -na | захват:80 | Сортировать
Определите точное количество запросов, полученных на одно соединение:
нетстат -np | grep SYN_RECV | туалет -л
При выполнении DoS-атаки число, полученное в результате выполнения этой команды, должно быть достаточно большим. В любом случае, это может зависеть от конкретной системы. То есть на одном сервере может быть одно, на другом — другое.
Используя команду ss
Утилита ss — современная альтернатива команде netstat. В отличие от netstat, который берет информацию из каталога /proc, инструмент ss связывается напрямую со специальной подсистемой ядра Linux, поэтому он быстрее и данные точнее, если вы хотите сделать сканирование портов, это не большое управление.
Инструмент Ss позволяет просматривать информацию о контактах, используемых в системе. Эта команда имеет аналогичную с netstat функциональность, но имеет уникальные особенности. Например, вы можете отфильтровать вывод по установленным подключениям к определенному порту.
Список процессов, использующих соединения
сс-с
Список сокетов в режиме прослушивания
сс-л
Пример фильтра — список всех подключений к порту 80
ss -o состояние установлено ‘(dport = :www или sport = :www)’
Список всех открытых портов при помощи команды ss
Здесь все то же самое, за исключением того, что теперь мы используем команду ss вместо netstat
$ судо сс -tulpn
Читайте также: Переименовывать файлы в Linux
Используя команду lsof
Утилита lsof может отображать процессы, работающие с определенным файлом или сокетом.
С помощью утилиты lsof можно посмотреть все открытые соединения в системе, в том числе и сетевые, для этого нужно использовать опцию -i, а чтобы показывать порты, а не имена сетевых служб, нужно использовать опцию -P
Список всех сетевых подключений
lsof -я
Список процессов, запущенных на порту 80
lsof -i :80
Используя команду netcat
Утилита netcat позволяет отправлять/получать данные через соединения TCP/UDP.
Шаблон вызова коммунальных служб
нк хост спорт
Откроем прием (ключ -l) данных на порт 1234 с детальным выводом информации (ключ -v) и продолжением работы после разрыва соединения (ключ -k), по умолчанию nc разрывает соединение после первого разрыва соединения.
нк -lvk 1234
Подключаемся к открытому порту и отправляем импортную антигравитацию
nc 127.0.0.1 1234 импорт антигравитации
Примером более полезного использования nc является передача файлов. На принимающей стороне
nc -l 1234 > файл
На стороне отправителя
nc localhost 1234 < файл
Или вы можете передать файл любому подключенному. На стороне отправки
nc -l 1234 < файл
На принимающей стороне
nc localhost 1234 > файл
Пример открытия шелла на конкретном порту (источник). На страницу, которую вы хотите открыть, зашел
mkfifo/тмп/канал; ш/тмп/труба | nc -l 1234 > /tmp/труба
Еще один полезный пример с netcat — запуск процесса, с возможностью мониторинга его работы по сети
см ш | нк локальный хост 1234
Используя команду NMAP
Nmap — мощный сетевой сканер, предназначенный для сканирования и выборки удаленных хостов, но ничто не мешает вам направить его на локальный компьютер:
nmap localhost Запуск Nmap 6.47 (http://nmap.org) в 2015-08-02 17:27 EEST Отчет сканера Nmap для локального хоста (127.0.0.1) Хост работает (задержка 0,00036 с). Другие адреса для localhost (не сканируются): 127.0.0.1 127.0.0.1 127.0.0.1 127.0.0.1 127.0.0.1 127.0.0.1 tcp open ssh 139/tcp open netbios-ssn-9 open nucp4 /tcp open http-proxy Nmap done: 1 IP-адрес (1 хост включен) сканируется за 0,10 секунды
Если вы хотите увидеть, какие порты на компьютере доступны извне, Nmap и здесь пригодится. Если компьютер является публичным сервером, результат, скорее всего, не будет отличаться от локального сканирования, а вот на домашнем компьютере все немного иначе. Первый вариант — используется роутер и в сеть будут видны только порты роутера, еще одним порогом защиты может быть NAT сервер провайдера.
Технология NAT позволяет нескольким пользователям использовать один и тот же внешний IP-адрес. И так, чтобы увидеть открытые внешние порты, сначала узнаем внешний ip адрес, для надежности воспользуемся онлайн-сервисом:
wget -O — -q icanhazip.com178.93.149.50
Запускаем сканирование:
nmap178.93.149.50
В итоге мы можем получить открытый порт 80 на веб сервере, или даже 21 на файловом сервере, который у нас не установлен, эти порты открыты роутером, 80 для веб интерфейса и 21 для может использоваться для обновить прошивку. А также вы можете вообще не получить никаких результатов, это будет означать, что все порты закрыты, либо на сервере установлена система защиты от вторжений IDS.
Чтобы сканировать открытые/прослушиваемые порты в вашей системе Linux, выполните следующую команду (выполнение может занять много времени):
sudonmap -n -Pn -sS -su -p- локальный
Какие порты открыты для внешнего мира?
Обратите внимание, что служба может иметь открытый порт, который можно прослушивать только на текущей машине. То есть порт открыт, но зайти на него из сети не получится.
Это полезно для безопасности, например, веб-сервер должен иметь порт 80, открытый для остального мира, но мир не должен знать (или иметь возможность подключиться) к порту 3306, который прослушивает сервер MySQL, на котором размещен веб-сайт.
В идеале, если вы используете веб-сервер, единственными портами, которые должны быть видны извне, являются HTTP-порт 80 и, возможно, SSH-порт 22, поскольку вам необходимо подключиться к веб-серверу для выполнения команд.
Порты для служб, которые доступны только на локальном компьютере, будут иметь IP-адрес 127.0.0.1 в поле локального адреса. В приведенном выше примере это будет:
tCP 0 0 127.0.0.1:3306 0.0.0.0:* ПРОСЛУШАТЬ 21432/mysqld
Как видите, MySQL прослушивает порт 3306 с IP-адресом 127.0.0.1. Это означает, что только программы на одном компьютере могут подключаться к серверу MySQL.