Часто команда, которая поддерживает програмное обеспечение на серверах "не до конца уверена" куда же ходит сервер ( к каким другим серверам).
В данном случае мне подходил tcpdump прямо на сервере
Варианты поиска ответов, которые я нашел:
- Netflow и коллектор. В качесте netflow источника может быть как сетевое оборудование, так и модуль ядра.
- Tcpdump конечно(если сервер не очень, очень нагружен). В крайнем случае может быть конечно зеркалирование порта на сетевом оборудовании (span, rspan, espan в Cisco, port-mirroring в Juniper)
- Iptables с включенным логированием (очень желательно в отдельный файл)
В данном случае мне подходил tcpdump прямо на сервере
Процесс сбора:
- Уменьшаем объем захвата на известные адреса (либо запустив сбор на 5 минут, либо опросить команду поддержки приложения)
- Записали tcpdump с ключиками
- -w имя файла
- -i имя интерфейса
- -С 1000 (размер файла не более 1000 млн байта - чуть меньше 1 Гб). В этом случае при достижении того самого 1000 млн будет начинать создаваться новый файл. Хорошо создавать на отдельный раздел с ощутимым свободным местом, и если на нем закончится место, то чтобы это не вызвало остановки сервисов.
- Так как готового способа, который меня устраивал я не нашел, я скопировал к себе все файлы с размером каждого почти 1 Гб на ПК, меньше шансов было повлиять на активный сервис.
Обработка:
Приемлемых результатов достиг разделив обработку tcp и udp отдельно.
Для TCP можно выделить соединения (tcp flow), чтобы не бороться с фильтрацией динамических портов, и отфильтровать сканы несуществующих портов
Для TCP можно выделить соединения (tcp flow), чтобы не бороться с фильтрацией динамических портов, и отфильтровать сканы несуществующих портов
Обработка TCP
1) Для выделения потоков воспользовался утилитой tcpick (ставится на ubuntu
2) Отобрал только established. Быстро просмотрел результат с помощью вывода в more.
3) Дальше немного почистил с помощью egrep -v 'известное1| известное 2' (кому-то больше нравится писать grep -vE )
Команда выглядела так
2) склеиваем вывод файла в один файл
3) Отбираем только destination. Смотрим файл, например less имя файла
В полученном промежуточном сводный файле:
Просматриваем глазами результат ( в моем случае были настойчивые сканеры), убираем явных сканеров.
Кстати, смотреть tcpick с ключом - С (цвет) pcap, созданный тем же tcpdump, мне понравилось.
1) Читаем еще раз исходный файл pcap, но уже читаем только udp
tcpdump udp -r имя файла дампа | more . Бегло просматриваем что можно выбросить сразу
2) чистим tcpdump udp -r 123.cap| egrep -v '.domain|ntp|sip|mdns|dhcpv6|netbios| и прочее'
в моем случае это был multicast и почему-то порт 53413 (оказалась популярная цель для сканеров)
3) Оставил и source и destination и значок направления. Обьем в моем случае очевидно меньше. Команда awk '{print $3,$4,$5} > в файл.
4) Склеиваем аналогично результат всех в один файл, проходим
apt-get install tcpick).
2) Отобрал только established. Быстро просмотрел результат с помощью вывода в more.
3) Дальше немного почистил с помощью egrep -v 'известное1| известное 2' (кому-то больше нравится писать grep -vE )
Команда выглядела так
tcpick -a -r 123.pcap | grep 'ESTABLISHED' | egrep -v 'известное1|известное2' > temp
2) склеиваем вывод файла в один файл
temp >> temp_result_tcp, потом
temp2 >> temp_result_tcpи так далее
3) Отбираем только destination. Смотрим файл, например less имя файла
В полученном промежуточном сводный файле:
- выбираем 5 столбец (destination)
- сортируем,
- считаем дубли - ключ c в uniq
- оставляем uniq только имеющиеся дубли (за счет ключа -d) не нужны мне случайные соединения за неделю (в моем случае так надо, в вашем может быть иначе)
- результат сортируем по числам за счет ключа n
- Самых активных выводим первыми за счет ключа r в программе sort
awk '{print $5}' | sort | uniq -cd | sort -nr
Просматриваем глазами результат ( в моем случае были настойчивые сканеры), убираем явных сканеров.
Кстати, смотреть tcpick с ключом - С (цвет) pcap, созданный тем же tcpdump, мне понравилось.
Обработка UDP
1) Читаем еще раз исходный файл pcap, но уже читаем только udp
tcpdump udp -r имя файла дампа | more . Бегло просматриваем что можно выбросить сразу
2) чистим tcpdump udp -r 123.cap| egrep -v '.domain|ntp|sip|mdns|dhcpv6|netbios| и прочее'
в моем случае это был multicast и почему-то порт 53413 (оказалась популярная цель для сканеров)
3) Оставил и source и destination и значок направления. Обьем в моем случае очевидно меньше. Команда awk '{print $3,$4,$5} > в файл.
4) Склеиваем аналогично результат всех в один файл, проходим
awk '{print $3,$4, $5}' | sort | uniq -cd | sort -nr
5) Просматриваем глазами, убираем явных сканеров и оставшийся мусор
Сводим два файла в один, сравниваем с полученными ранее результатами опроса. Помогаем коллегам найти все компоненты приложения.