Перейти к содержимому
Калькуляторы

А торрент ли? Увеличение количества pps на серверах

typedef struct utp_pkt_v1_s { 		/* offset - PacketFormatV1 */
uint8_t		version:4;	/* 00 protocol version */
uint8_t		type:4;		/* 00 type (formerly flags) */
uint8_t		ext;		/* 01 Type of the first extension header */
uint16_t	connid;		/* 02 connection ID */
uint32_t	tv_usec;	/* 04  */
uint32_t	reply_micro;	/* 08  */
uint32_t	windowsize;	/* 12 receive window size in bytes */
uint16_t	seq_nr;		/* 16 Sequence number */
uint16_t	ack_nr;		/* 18 Acknowledgment number */
				/* 20 ext/data */
} utp_pkt_v1_t, *utp_pkt_v1_p; /* 20 bytes */

 

36 - 20 - 8 = 8

те сигнатура начинается с reply_micro

reply_micro = INT_MAX; // 0x7fffffff

windowsize = opt_rcvbuf; // для син пакета запроса установления соединения, дефолтное значение в коде UTP_SetSockopt(): opt_rcvbuf = 3 * 1024 * 1024 + 512 * 1024; = 3670016 = 0x380000 но походу функцию дёргают и ставят другое, и сейчас снова поменяли где то в настройках дефолты.

Закопайте вы эту сигнатуру. RIP.

 

 

Вот приличные сигнатуры в синтаксисе tcpdump.

название пакета - 14 байт - длинна байт в сигнатуре.

дальше идут значения байт в данных юдп - я больше для себя расписывал, тп писал по коду, потому и структара выше так обильно прокомментирована.

upd header included - после идёт агрегированный вариант, который можно скармливать tcpdump, в нём начала отсчёта = заголовки юдп пакета, udp[4:2] = 41 - как раз длинна заголовка+данных в юдп.

rst пакеты вам бесполезны: сигнатура короткая, и их блок ничего не даст. Я их мониторил при отладке ноды, которая их генерила (в зависимости от настроек).

Писано год назад, может быть теперь чуточку отличаются, но вряд ли больше пары байт.

 

Для в0:

/*
* syn - 14 bytes
* 'udp[17] = 2 and udp[18] = 4 and udp[21:2] = 0 and udp[23] = 0 and udp[24] = 8 and udp[25:4] = 0 and udp[29:4] = 0'
* 41 = udp hdr len (8) + upd pkt data len
* upd header included:
* '(udp[4:2] = 41 and udp[25:2] = 0x0204 and udp[29:4] = 0x00000008 and udp[33:4] = 0 and udp[37:4] = 0)'
*/
/*
* rst - 4 bytes
* 'udp[17] = 0 and udp[18] = 3'
* 31 = udp hdr len (8) + upd pkt data len
* upd header included:
* '(udp[4:2] = 31 and udp[25:2] = 0x0003)'
*/

 

Для в1.

/*
* syn - 14 bytes
* 'udp[0] & 0x0f = 1 and udp[0] & 0xf0 = 0x40 and udp[1] = 2 and udp[18:2] = 0 and udp[20] = 0 and udp[21] = 8 and udp[22:4] = 0 and udp[26:4] = 0'
* (udp[0] & 0x0f = 1 and udp[0] & 0xf0 = 0x40) => udp[0] = 0x41
* 38 = udp hdr len (8) + upd pkt data len
* upd header included:
* '(udp[4:2] = 38 and udp[8:2] = 0x4102 and udp[26:4] = 0x00000008 and udp[30:4] = 0 and udp[34:4] = 0)'
*/
/*
* rst - 4 bytes
* 'udp[0] & 0x0f = 1 and udp[0] & 0xf0 = 0x30 and udp[1] = 0'
* (udp[0] & 0x0f = 1 and udp[0] & 0xf0 = 0x30) => udp[0] = 0x31)
* 28 = udp hdr len (8) + upd pkt data len
* upd header included:
* '(udp[4:2] = 28 and udp[8:2] = 0x3100)'
*/

 

HNY!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

несколько недель назад вывел еще один паттерн. и количество UDP существенно сократилось по сравнению с предыдущими двумя шаблонами.

сейчас выглядит так:

iptables -A FORWARD -p udp -m u32 --u32 "0x3c&0xffffffff=0x65313a71 && 0x40&0xffffffff=0x343a7069 && 0x44&0xffffffff=0x6e67313a" -j DROP
iptables -A FORWARD -p udp -m u32 --u32 "0x24&0xffffffff=0x00000000 && 0x28&0xffffffff=0x00380000" -j DROP
iptables -A FORWARD -p udp -m u32 --u32 "0x1a&0xffff=0x4102 && 0x24&0xffffffff=0x7fffffff && 0x28&0xffffffff=0xf000" -j DROP

Кстати, похоже есть еще пакеты UDP с началом 0x1a&0xffff=0x4102, но пока не занимался плотнее.

pps_utp2.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

reply_micro = INT_MAX; // 0x7fffffff

В принципе тоже можно добавить к моей сигнатуре, хотя его могут без особых последствий поменять.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Переписал, матчинг по длинне пакета + 0x4102 + хвост 0x000000080000000000000000.

Всё работает, спасибо за разъяснения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А не подскажете как с этим бороться во FreeBSD с помощью ipfw ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Совсем обленились %)

ipfw+ng_ipfw+ng_bpf

гугль в зубы и найдёте как правила tcpdump превратить в асм для ng_bpf и упихать их туда.

ng_tee - не юзать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Прописал эти правила

DROP udp -- anywhere anywhere udp STRING match "|7fffffffab|" ALGO name kmp FROM 40 TO 44 statistic mode random probability 0.900000

DROP udp -- anywhere anywhere udp STRING match "|7fffffff00032000|" ALGO name kmp FROM 36 TO 41 statistic mode random probability 0.900000

DROP udp -- anywhere anywhere udp STRING match "|0038000000010000|" ALGO name kmp FROM 36 TO 41 statistic mode random probability 0.900000

 

У клиентов перестала работать игра "Танки онлайн"

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можете и дальше блокировать сигнатурами "на угад".

Правильные сигнатуры чуть выше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

несколько недель назад вывел еще один паттерн. и количество UDP существенно сократилось по сравнению с предыдущими двумя шаблонами.

сейчас выглядит так:

iptables -A FORWARD -p udp -m u32 --u32 "0x3c&0xffffffff=0x65313a71 && 0x40&0xffffffff=0x343a7069 && 0x44&0xffffffff=0x6e67313a" -j DROP
iptables -A FORWARD -p udp -m u32 --u32 "0x24&0xffffffff=0x00000000 && 0x28&0xffffffff=0x00380000" -j DROP
iptables -A FORWARD -p udp -m u32 --u32 "0x1a&0xffff=0x4102 && 0x24&0xffffffff=0x7fffffff && 0x28&0xffffffff=0xf000" -j DROP

Кстати, похоже есть еще пакеты UDP с началом 0x1a&0xffff=0x4102, но пока не занимался плотнее.

Попробовал добавить, у самого все раздачи загнулись и ничего скачать не могу. :-) Отключил обратно.

Изменено пользователем BETEPAH

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

BETEPAH

 

#uTP_syn_v1
-A p2p -m udp -p udp -m length --length 58:58 -m string --hex-string "|41 02|" --algo bm --from 28 --to 29 -m string --hex-string "|00 00 00 08 00 00 00 00 00 00 00 00|" --algo bm --from 46 --to 57 -j DROP
#uTP_syn_v0
-A p2p -m udp -p udp -m length --length 61:61 -m string --hex-string "|02 04|" --algo bm --from 45 --to 46 -m string --hex-string "|00 00 00 08 00 00 00 00 00 00 00 00|" --algo bm --from 49 --to 60 -j DROP
#uTP_syn_v1_ipv6
-A p2p -p 41 -m length --length 98:98 -m string --hex-string "|41 02|" --algo bm --from 68 --to 69 -m string --hex-string "|00 00 00 08 00 00 00 00 00 00 00 00|" --algo bm --from 86 --to 97 -j DROP
#uTP_syn_v0_ipv6
-A p2p -p 41 -m length --length 101:101 -m string --hex-string "|02 04|" --algo bm --from 85 --to 86 -m string --hex-string "|00 00 00 08 00 00 00 00 00 00 00 00|" --algo bm --from 89 --to 100 -j DROP

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

спасибо, попробую добавить к своим старым правилам

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.