Хорошая утилита tcpdump, Небольшой мануал по выборке флудящих IP |
Здравствуйте, гость Вход | Регистрация
Наши новости:
|
|
Хорошая утилита tcpdump, Небольшой мануал по выборке флудящих IP |
Fire |
10.2.2013, 23:35
Сообщение
|
|
Собсно, многие наверное знают, что в лине есть замечательная штука, под названием tcpdump, но не многие хорошо с ней знакомы. Тут я приведу пример, как вычислить IP адреса, с которых идет большое кол. пакетов, т.е флуд, и т.д.
Чтобы вычислить плохие IP, я опишу действия в несколько шагов. Начнем, пожалуй. Код tcpdump -v -n -w badips.log dst port 27015 -c 300 Тут все просто: -v - самый простой уровень логирования (чем больше v, тем более высокий уровень логирование, например -vvv, но в данном примере, нам это не требуется.) -n - преобразование имени хоста в IP -w - запись дампа в файл -с - кол. захваченных пакетов Если у вас на сервере, несколько IP, добавляем еще ключ -i с именем интерфейса, на котором нужный IP, т.е -i eth0; -i eth1:2 Пример: Код tcpdump -v -n -i eth0 -w badips.log dst port 27015 -c 300 Теперь, нам надо как-то из дампа вычислить плохие IP, для этого, используем слелующую комбинацию: Код tcpdump -nr badips.log |awk '{print $3}' |grep -oE '[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}' |sort |uniq -c |sort -rn Тут думаю особо объяснять не надо, что к чему. -r - чтение файлов. awk - вывод 3 значения в строке. grep - вывод только IP sort - сортировка uniq - тут подробнее, вобще, команда выводит только уникальные значения из списка, с ключем -с - вывод с кол. упоминаний значения. В итоге, мы получаем список из 2ух столбцов, в 1ом - кол. пакетов, в 2ом - IP Пример: Код 29 95.83.141.243 28 176.14.130.210 27 95.71.31.91 20 188.94.158.100 18 5.35.52.46 17 91.202.199.129 17 194.12.74.241 16 31.148.45.19 13 213.88.6.85 10 188.134.33.150 Дальше уже смотрим, есть ли плохие IP, и будем ли мы их банить. По собственному опыту, скажу, норма ниже 100 пакетов. Кстати, кол. пакетов значительно отличается, если игрок со стимом или без. Завтра напишу пример, как из полученного списка, выбирать IP c большим кол. пакетов. |
Поблагодарили 21 раз
|
|
3aB}{o3 |
11.2.2013, 0:30
Сообщение
|
|
Fire, Не подскажите что за ошибка и как исправить ?
Код tcpdump: WARNING: arptype 65535 not supported by libpcap - falling back to cooked socket
|
|
|
cs-portal |
11.2.2013, 0:37
Сообщение
|
Скрытый текст у меня валялась под винду чтото http://rghost.ru/43708652 |
|
|
|
3aB}{o3 |
11.2.2013, 0:41
Сообщение
|
|
Посмотрел порт 27015 :
Цитата 125 80.237.79.135 70 46.63.201.112 61 213.87.135.63 42 93.171.192.157 1 95.83.135.21 1 178.123.184.137 Игрок 80.237.79.135 в тот момент на сервере присутствовал и соответственно и отсылал 125 пакетов, возникло пару вопросов : 1. Насколько это вредит игровому серверу и каналу в целом ? 2. И можно как-то это ограничить, запретить отсылать более 100 пакетов Написал возможно хрень в вопросах, прошу простить, за возможную тупость.
Отредактировал: 3aB}{o3, - 11.2.2013, 0:42
|
|
|
cs-portal |
11.2.2013, 0:50
Сообщение
|
запретить то можно только потом игрок отхавает choke / loss скорее всего. разве рейты и их ограничение не должны уменьшить обмен пакетами ?
|
|
Поблагодарили 1 раз
|
|
Fire |
11.2.2013, 0:55
Сообщение
|
|
Мои слова про 100 не нужно принимать за эталон. Каждый должен иметь свою голову на плечах и смотреть, прежде чем принимать какие-либо действия.
В любом случае, кол. пакетов зависит от настроек сервера, и ряда других вещей. Но при флуде, кол. пакетов с флудящих IP будет существенно выше, чем с валидных. |
Поблагодарили 1 раз
|
|
нуб2 |
11.2.2013, 10:33
Сообщение
|
|
Хотел прикрепить сверху, но прав не хватает =(
ТС молодец...ну собственно как и всегда) |
|
|
Fire |
13.2.2013, 22:46
Сообщение
|
|
Собственно, небольшое дополнение.
Есть еще одна замечательная утилита - awk - утилита построчного разбора и обработки входящих потоков по заданным шаблонам. Считается прородителем perl'a Приступим. В прошлой части, мы остановились на строке: Код tcpdump -nr badips.log |awk '{print $3}' |grep -oE '[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}' |sort |uniq -c |sort -rn Которая выводит кол. пакетов и IP. Сегодня, мы немного автоматизируем это действие с помощью awk Пример скрипта: Код tcpdump -nr badips.log |awk '{print $3}' |grep -oE '[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}' |sort |uniq -c |sort -rn | awk '{if ($1 > 70) print ($2)}' Разберем: if ($1 > 70) - условие, выбирать те строки, где $1 (первое значение из входящего списка) больше 20. print $2 - уже вывод второго значения из входящего списка после обработки условия. т.е мы выводим IP-адреса, с которых было более 70 пакетов. В качестве вывода, получится простой список IP в строку: Код 95.83.141.243 176.14.130.210 95.71.31.91 188.94.158.100 Далее, уже делаем что нам надо. Можно сразу банить IP-ы, тогда строка будет выглядеть так: Код tcpdump -nr badips.log |awk '{print $3}' |grep -oE '[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}' |sort |uniq -c |sort -rn | awk '{if ($1 > 120) print ("iptables -A INPUT -s "$2" -j DROP")}' Получаем такой вот список: Код iptables -A INPUT -s 95.83.141.243 -j DROP iptables -A INPUT -s 176.14.130.210 -j DROP iptables -A INPUT -s 95.71.31.91 -j DROP Но!, это только список, для выполнения этих команд, в строку нужно добавить |sh т.е команда будет выглядеть уже так: Код tcpdump -nr badips.log |awk '{print $3}' |grep -oE '[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}' |sort |uniq -c |sort -rn | awk '{if ($1 > 120) print ("iptables -A INPUT -s "$2" -j DROP")}' |sh Обратите внимание, блокироватся будут IP у которых более 120 пакетов, на даный момент, считаю это оптимальным значением, но пять-же, зависит от ряда факторов. И еще, советую не загаживать чепочку INPUT, посему, создадим отдельную цепочку, например hlban Код #Создаем цепочку фаервола в которую заносятся IP iptables -N hlban #Делаем ссылку на цепочку hlban iptables -A INPUT -j hlban Ну и модифицируем наш скрипт: Код tcpdump -nr badips.log |awk '{print $3}' |grep -oE '[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}' |sort |uniq -c |sort -rn | awk '{if ($1 > 120) print ("iptables -A hlban -s "$2" -j DROP")}' |sh Смотреть список забаненных можно так: Код iptables -n -L hlban Кол. забаенных: Код iptables -n -L hlban | wc -l Разбан IP'a: Код iptables -D hlban -s IP -j DROP Очистка цепочки: Код iptables -F ban to be continued...
Отредактировал: Fire, - 13.2.2013, 22:48
|
Поблагодарили 9 раз
|
|
apTmusic |
15.5.2013, 19:46
Сообщение
|
|
а можно аналог под виндовс?
пробовал windump, вроде тоже что и это но например windump -v -n -w badips.log dst port 27015 -c 300 пишет неправильный синтаксис, убираю -с 300 все ок. |
|
|
cs-portal |
15.5.2013, 20:09
Сообщение
|
я пользуюсь tcpdump.exe
|
|
Поблагодарили 1 раз
|
|
Fire |
17.8.2013, 20:41
Сообщение
|
|
Решил немного дополнить тему. Сегодня расскажу как снимать не определенное кол. пакетов tcpdump'om, а сделать дамп определенного периода времени. Так-как сам tcpdump такого не умеет, мы будем использовать утилитку timeout, она есть во всех дистрибутивах и установлена по дефолту.
Что-бы сделать 5 секундный дамп, убираем счетчик пакетов -c N Команда будет выглядеть так: Код timeout 5s tcpdump -v -n -i eth0 -w badips.log dst port 27015 Далее уже смотрим дамп: Код tcpdump -nr badips.log |awk '{print $3}' |grep -oE '[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}' |sort |uniq -c |sort -rn
|
Поблагодарили 3 раз
|
|
MisTerEnDru |
21.11.2015, 21:31
Сообщение
|
|
И как запустить в линуксе, в консоле или сделать что то вроде skript.sh ?
|
|
|