информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыПортрет посетителяSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Google заблокировала 2 с лишним... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / sysadmin
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
MS Proxy 2.0 и неучтенный траффик 22.10.03 09:49  
Автор: Vened Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Пару недель уже пытаюсь задавать этот вопрос на разных форумах, но никто ничего толком не сказал. Попытаю счастья здесь. :)

Итак, есть указанная в теме прокся. Есть прокся провайдера, какая точно - не знаю, но кажется что-то на линухе. И вот показания этой провайдерской прокси с показаниями моей здорово различаются не в мою пользу.

Порты на проксе открыты по минимуму. Сеть - домен win2k, провайдер контролирует мой шлюз по MAC-адресу - то есть, как я понимаю, мало спереть мой пароль и пользоваться им, надо еще и сетевую карточку спереть. :)

Ситуации видится две: либо кто-то шустрит из самого домена, либо это просто что-то, что лезет мимо прокси (грешу, например, на различные потоковые данные: видео, аудио и т.д.)

В любом случае проблему хотелось бы пофиксить, и я буду благодарен за любые дельные советы.
Мои 5-копеек. Да простят меня модераторы. 22.10.03 14:22  
Автор: void <Grebnev Valery> Статус: Elderman
<"чистая" ссылка>
Сразу скажу, что это была статья для начинающих админов. Никого на этом форуме не считаю начинающим, кроме себя. Поэтому, прошу извинить за тот стиль изложения, который ниже. Просто лениво было переписывать, чтобы предать этому всему «дружескую окраску». И ещё.
1) То, что написано ниже - скомпилировано ПРИ ПОМОЩИ 16-РАЗРЯДНОГО КОМПИЛЛЕРА (BC++ 3.1). Всё это работает.
2) Если кому интересно, а как это, а как то (например, как вести статистику по транспорту, исимпи, прикладным протокола, портам) – пишите. Я отвечу. Всё не сложнее, чем ниже.

ЭТО БЫЛА СТАТЬЯ. НЕ БУДУ ПРАВИТЬ - ЛЕНЬ. ПРОСТО ИЗВИНИТЕ ЗА МЕНТОРСКИЙ ТОН.

***ПОДСЧИТАЙ СВОЙ ТРАФИК САМ***

Оплата услуг интернет учреждений часто зависит от размера трафика (как правило, исходящего трафика интерфейса маршрутизатора провайдера подсети клиента). Учёт трафика ведёт провайдер. Иногда возникает необходимость самостоятельно подсчитывать основные статистики трафика. Эти связано не только с задачами взаиморасчётов с провайдером. Может представлять интерес определение размера трафика ряда в информационном обмене с определёнными хостами в internet. Неоправданно большой трафик серверного или клиентского программного обеспечения в учреждении может говорить как о качестве системного администрирования, так и об информационной безопасности автоматизированной системы.
Системные администраторы некоторых учреждений используют программные продукты Microsoft, например, MS Proxy, ISA Server, для обеспечения доступа клиентов локальных вычислительных сетей к интернет. Эти продукты просты в установке и администрировании. Однако их лог-файлы дают только приблизительную оценку интернет - трафика. Лог-фал сервиса WebProxy Microsoft содержит характеристики информационного обмена между прокси сервером учреждения и его клиентами, а не межу этими хостами и удалёнными серверами, как предполагают многие администраторы, и как ошибочно указано в документации Microsoft. Лог-файл сервиса Firewall содержит только «полезный трафик» клиентов. «Технический» трафик протоколов всех уровней в лог-файле не учитывается вовсе. Расхождение результатов подсчёта трафика провайдером и системными администраторами локальных вычислительных сетей учреждений может быть существенным.
Трафик легко точно подсчитать, если для этого использовать лог-файлы, содержащие, как минимум, заголовки всех ip паркетов. Продукты Microsoft позволяют вести учёт заголовков и части сегментов данных ip пакетов в файлах IPFilterLog. Так, в лог - файлах можно обнаружить последовательности символов, подобные: 45 00 00 30 6a c0 40 00 80 06 85 d2 c3 97 b2 86 d4 0e c0 08, 82 1b 00 50 4d 2c 2c a0 00 00 00 00 70 02 40 00 3c b2 00 00 02 04 05 b4 01 01 04 02. Последовательность символов до запятой - дамп заголовка ip-пакета. После запятой – часть данных пакета. Каждые два ASCII символа представляют байт в шестнадцатиричном представлении. Несложно расшифровать данные. Приведённая выше последовательность 45 00… это первый пакет синхронизации TCP соединения:
IP: header dump 45 00 00 30 6a c0 40 00 80 06 85 d2 c3 97 b2 86 d4 0e c0 08
IP: dumplen = 20
IP: ID = 0x6AC0; Proto = 6; Len: 48
IP: Version = 4 (0x4)
IP: Header Length = 20 bytes (5 32-bit words)
IP: Type of Service = 0
IP: Total Length = 48 (0x30)
IP: Identification = 27328 (0x6ac0)
IP: Flags = 16384 (0x4000)
IP: Reserved = 0
IP: Cannot fragment datagram = 1
IP: More fragments = 0
IP: Fragment Offset = 0 (0x0) bytes
IP: Time to Live = 128 (0x80)
IP: Protocol = 6
IP: Checksum = 0x85D2 CRC ok
IP: Source Address = 195.151.178.134
IP: Destination Address = 212.14.192.8
IP: Data: Number of data bytes remaining = 28 (0x1c)
TCP: dump 82 1b 00 50 4d 2c 2c a0 00 00 00 00 70 02 40 00 3c b2 00 00 02 04 05 b4 01 01 04 02
TCP: dumplen = 28
TCP: ....SYN.., len: 0, seq:1294740640-1294740640, ack:0, win:16384, src:33307 dst:80
TCP: Source Port = 33307 (0x821b)
TCP: Destination Port = 80 (0x50)
TCP: Sequence Number = 1294740640 (0x4D2C2CA0)
TCP: Acknowledgement Number = 0 (0x0)
TCP: Data Offset = 28 bytes (7 32-bit words)
TCP: Reserved = 0 (0x0)
TCP: Flags = (0x2) : ....SYN..
TCP: Window = 16384 (0x4000)
TCP: Checksum = (0x3cb2) CRC ok
TCP: Urgent Pointer = 0 (0x0)
TCP: Options length = 8 bytes, Options dump 02 04 05 b4 01 01 04 02
TCP: Maximum Segment Size option
TCP: Option Type = 2 (0x2)
TCP: Option Length = 4 (0x4)
TCP: Maximum Segment Size = 1460 (0x5b4)
TCP: No operations option (0x1)
TCP: No operations option (0x1)
TCP: SACK Permitted option
TCP: Option Type = 4 (0x4)
TCP: Option Length = 2 (0x2)
TCP: Data - no data

Третий и четвёртый байты в заголовке ip пакета представляёт 16-ти битовое значение длины пакета. В приведённом примере это байты 0x00 и 0x30. Байты приведены в последовательности «network byte order» («big endian», в отличие от машинной нотации «little endian»). Дополнение этих байтов даёт целое значение 48 в десятичной системе исчисления. Таким образом, длина приведённого ip-пакета равна 48-ми байт.
Несложно написать программу, которая проверяет третий и четвёртый байты заголовков ip пакетов и подсчитывает суммарный трафик. Для подсчёта входящего трафика вам придётся проверять ip адрес получателя. Это 32-х битовое число, составленное из 17, 18, 19, 20 байтов соответственно. Ниже приведён текст простой программы на языке программирования «С», которая подсчитывает входящий трафик на заданном интерфейсе клиента.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

#define FALSE 0
#define TRUE 1

#define BUFSIZE 4096 /* Max length of string in log file */

#define b1msk 0xFF000000 /* 11111111 00000000 00000000 00000000 */
#define b2msk 0xFF0000 /* 00000000 11111111 00000000 00000000 */
#define b3msk 0xFF00 /* 00000000 00000000 11111111 00000000 */
#define b4msk 0xFF /* 00000000 00000000 00000000 11111111 */

---------------------------------------------------------------------------
typedef unsigned char _BYTE;
typedef unsigned int _WORD;
typedef unsigned long _DWORD;

#define MAKEINT(low, high) ((_WORD)(((_BYTE)(low)) | (((_WORD)((_WORD)(high))) << 8)))
#define MAKELONG(b1,b2,b3,high) (((_DWORD)(((_DWORD) (high)) << 24)) | ((_DWORD)(((_DWORD) (b3)) << 16)) | ((_DWORD)(((_WORD) (b2)) << 8)) | ((_DWORD)((_BYTE) (b1))))
---------------------------------------------------------------------------
_BYTE iobuf[BUFSIZE]; /* iobuffer */
_DWORD ip_user; /* your inet – ip address */

_DWORD bytes_recvd;

#define DEFAULT_FLDNO 11
int iphead_fldno;
---------------------------------------------------------------------------
char * __strtok(const char * str, const char * separator, const int num )
{
register len, i = 0, count = 1;
char * ptr, * rc;

ptr = (char*) str;
while( count++ < num && ptr) ptr = strchr( ptr + 1, separator[0]);

if (!ptr) return NULL;

ptr ++;
len = strlen(ptr);
while ( i < len && ptr[i] != separator[0]) i++;

rc = (char *) malloc( sizeof(char)* ( i + 1 ) );
memmove(rc, ptr, i + 1 );
rc[i] = '\0';
return rc;
}
---------------------------------------------------------------------------
static char * trim(char* str)
{
register i = 0, len = strlen(str);

while ((i < len) && (str[i] == ' '|str[i] == '\t') ) i ++; /* trim left */
strcpy(str, str + i);

i = strlen(str) - 1;
while ((i >= 0) && (str[i] == ' '|str[i] == '\t')) i --; /* trim right */
str[i + 1] = '\0';

return str;
}
---------------------------------------------------------------------------
int dumpbyte(const char *dump, const int index)
{
char *sval = "0x000";

memmove(sval + 2, dump + index * 3, sizeof(char) * 2);
sval[4] = '\0';
return ( strtol(sval, NULL, 0 ) );
}
---------------------------------------------------------------------------
int iplog_proced(const char * filename)
{
int ip_length;
FILE *stream;
char *ptr;
_DWORD ip_dst;
_DWORD strno = 0;

stream = fopen(filename , "r");
if (!stream) return FALSE;

while( !feof(stream) )
{
strno ++;
if ( !fgets( (char *) iobuf, BUFSIZE, stream) )
{
printf("Error reading %s at line %u\n", filename, strno);
continue;
}

ptr = __strtok( iobuf, ",", iphead_fldno );
if ( !ptr )
{
printf("Error reading iphead %s at line %u\n", filename, strno);
continue;
}
trim( ptr );

ip_length = MAKEINT( dumpbyte(ptr,3), dumpbyte(ptr,2) );
ip_dst = MAKELONG(dumpbyte(ptr,19),dumpbyte(ptr,18),dumpbyte(ptr,17),dumpbyte(ptr,16));

free(ptr);

if ( ip_dst == ip_user ) bytes_recvd += ip_length;
}


printf("Summary for host: %d.%d.%d.%d\n", (_BYTE) ((ip_user & b1msk) >> 24),
(_BYTE) ((ip_user & b2msk) >> 16), (_BYTE) (( ip_user & b3msk) >> 8),
(_BYTE) (ip_user & b4msk) );

printf("bytes received : %lu\n", bytes_recvd);
fclose(stream);
return TRUE;
}
---------------------------------------------------------------------------
_DWORD makeip(const char* ipstr)
{
_BYTE b1,b2,b3,b4;
char *ptr = "www.zzz.yyy.xxx ";

memmove(ptr, ipstr, sizeof(char)* strlen(ptr) - 1);
ptr = strtok(ptr,".");
if (! ptr ) return 0L;
b1 = atoi(ptr);

ptr = strtok(NULL,".");
if (! ptr ) return 0L;
b2 = atoi(ptr);

ptr = strtok(NULL,".");
if (! ptr ) return 0L;
b3 = atoi(ptr);

ptr = strtok(NULL,".");
if (! ptr ) return 0L;
b4 = atoi(ptr);

return (MAKELONG(b4,b3,b2,b1));
}
---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
char *errarg = "Use: iptfc [file name] [ip] <col no> \n";
char filename[256];

if ( argc < 3){
printf(errarg);
return 1;
}

strcpy(filename, argv[1]);

ip_user = makeip(argv[2]);
if ( !ip_user ) {
printf(errarg);
return 1;
}

if ( argc == 3)
iphead_fldno = DEFAULT_FLDNO;
else {
iphead_fldno = atoi(argv[3]);
if ( !iphead_fldno ) iphead_fldno = DEFAULT_FLDNO;
}

if ( !iplog_proced(filename) ) {
printf(errarg);
return 1;
}

return 0;
}

Приведённая программа не содержит функций, специфичных для той или иной платформы программирования, ОС. Программа имеет три параметра командной строки. Первые два параметра являются обязательными - имя лог-файла и ip адрес вашего интерфейса. Третий параметр необязательный и представляет номер колонки лог файла, содержащей заголовок ip пакета. По умолчанию принято, что номер колонки равняется 11, см. макро определение #define DEFAULT_FLDNO 11 в тексте программы. Программа - простейшая, учебная. Текст программы – свободный для распространения и модификации.
Более полная по функциональным возможностям версия программы (не учебная), анализирует трафик с учётом требуемых диапазонов адресов, статистики по сетевым протоколам. Программа использует текстовый файл настроек для задания основных параметров работы:
; Настроечный файл iptfc.prm предназначен для определения основных параметров работы
; программы. Cимвол «точка с запятой» используется для комментариев.

user ip = 217.107.54.86 ;ваш интернет-интерфейс
iphead column = 11 ;номер колонки лог-файла
;ip-заголовка
ippayload column = 12 ;номер колонки лог-файла
;ip-данных

;-------------------------------------------------------------------------------------
[ADRESS LIST] ;секция списков диапазонов,
;для которых следует вычислять
;дополнительные статистики
213.180.193.62
[~magadan] ;именованный диапазон адресов
217.107.0.0 217.107.255.255
[~BANK2]
194.67.57.12
194.226.84.4

;-------------------------------------------------------------------------------------
[EXCLUDE ADRESS] ;секция списков диапазонов,
;которые следует исключить
;при вычислениях 217.107.54.2
217.107.54.0 217.107.54.255
194.226.84.4
[~BANK1] ;именованный диапазон адресов
212.69.111.3
[~BANK2]
216.226.54.130
;-------------------------------------------------------------------------------------
[TCP] ;секция локальных и удаленных
;TCP – портов, для которых следует
;вычислять дополнительные ;статистики
[~LOCAL]
25
53
110
[~REMOTE]
25
20
21
53
80

;-------------------------------------------------------------------------------------
[UDP] ;секция локальных и удаленных
;UDP – портов, для которых следует
;вычислять дополнительные ;статистики
[~LOCAL]
53
[~REMOTE]
53
20
21
;-------------------------------------------------------------------------------------
[ICMP] ;секция типов и кодов ICMP, для
;которых следует вычислять ;дополнительные статистики
3,3
3,13
8,0

Этот настроечный файл содержит только один обязательный параметр user ip, представляющий ip адрес вашего интернет-интерфейса. Остальные параметры вы можете опустить или закоментировать. В этом случае программа будет работать аналогично описанной выше.
Параметры iphead column и ippayload column представляют номера «колонок» текстового лог-файла, содержащие заголовок и данные ip-пакета, соответственно. Секция параметров [ADRESS LIST] представляет перечень ip-адресов хостов назначения (и или их диапазонов), для которых следует вычислять дополнительные статистики. Это может понадобиться, если для указанных в [ADRESS LIST] адресов провайдер применяет различные тарифы. Например, для «интернет» трафика применяют одни тарифы, а для «внутригородского» трафика – другие. В секции Вы можете заносить адреса непосредственно после [ADRESS LIST], или использовать именованные подсекции для «блоков» адресов, например, связанных с сегментами корпоративных и «внутригородских» сетей. Секция [EXCLUDE ADRESS] заполняется (при необходимости) аналогично секции [ADRESS LIST]. Она содержит перечень ip-адресов хостов назначения (или их диапазонов), которые следует исключить при подсчёте трафика. Это может быть удобным, если провайдер не учитывает трафик до ряда хостов, расположенных, например, на своей площадке, при выполнении взаиморасчётов с вашим учреждением.
Вы можете дополнительно заполнить данные секций TCP, UDP, ICMP для более детальной оценки трафика, связанного с решением прикладных задач. Например, для того, чтобы подсчитать трафик, связанный с пересылкой почтовых сообщений по smtp удалённым почтовым серверам вашим почтовым сервером или smtp-клиентами в Вашей сети – в подсекции [~REMOTE] секции [TCP] следует указать порт 25. Для того, чтобы подсчитать трафик, связанный с пересылкой почтовых сообщений по smtp удалёнными серверами или клиентами Вашему почтовому серверу – в подсекции [~LOCAL] секции [TCP] следует указать порт 25.
Результат работы программы приведён ниже:

Summary for host: 217.107.54.86
TCP local port 25: sent 56864, received 1022691
TCP local port 20: sent 0, received 0
TCP local port 21: sent 0, received 0
TCP local port 22: sent 0, received 0
TCP local port 53: sent 0, received 0
TCP local port 80: sent 0, received 336
TCP local port 110: sent 0, received 0
TCP remote port 25: sent 91605, received 9716
TCP remote port 20: sent 14752, received 671377
TCP remote port 21: sent 7591, received 12916
TCP remote port 22: sent 0, received 0
TCP remote port 53: sent 564, received 476
TCP remote port 80: sent 1101970, received 11508134
TCP remote port 110: sent 0, received 0
TCP user defined : sent 1273346, received 13225646
TCP total : sent 1322591, received 13584259
UDP local port 53: sent 14081, received 9380
UDP local port 20: sent 0, received 0
UDP local port 21: sent 0, received 0
UDP local port 22: sent 0, received 0
UDP remote port 53: sent 34909, received 96469
UDP remote port 20: sent 0, received 0
UDP remote port 21: sent 0, received 0
UDP remote port 22: sent 0, received 0
UDP user defined : sent 48990, received 105849
UDP total : sent 51573, received 105849
ICMP type 3, code 3: sent 0, received 336
ICMP type 3, code 13: sent 0, received 2352
ICMP type 8, code 0: sent 0, received 1248
ICMP user defined : sent 0, received 3936
ICMP total : sent 1248, received 3936

Excluded destination [NONAME]
217.107.54.2
bytes sent : 21074
bytes received : 53256
217.107.54.0 - 217.107.54.255
bytes sent : 139844
bytes received : 1241473
194.226.84.4
bytes sent : 16448
bytes received : 683226

Total bytes in range [NONAME]
bytes sent : 177366
bytes received : 1977955

Excluded destination [BANK1]
212.69.111.3
bytes sent : 381
bytes received : 1783

Total bytes in range [BANK1]
bytes sent : 381
bytes received : 1783

Excluded destination [BANK2]
216.226.54.130
bytes sent : 15230
bytes received : 253215

Total bytes in range [BANK2]
bytes sent : 15230
bytes received : 253215

User defined destination [NONAME]
213.180.193.62
bytes sent : 2190
bytes received : 3430

Total bytes in range [NONAME]
bytes sent : 2190
bytes received : 3430

User defined destination [magadan]
217.107.0.0 - 217.107.255.255
bytes sent : 1321
bytes received : 3025

Total bytes in range [magadan]
bytes sent : 1321
bytes received : 3025

User defined destination [BANK2]
194.67.57.12
bytes sent : 4187
bytes received : 12633
194.226.84.4
bytes sent : 0
bytes received : 0

Total bytes in range [BANK2]
bytes sent : 4187
bytes received : 12633

Excluded destinations. Total bytes in all ranges
bytes sent : 192977
bytes received : 2232953

User defined destinations. Total bytes in all ranges
bytes sent : 7698
bytes received : 19088

Total
bytes sent : 1375412
bytes received : 13694044


В заключение следует отметить, что приведённые программы точно подсчитывают входящий трафик пакетов, достигающих вашего интерфейса. Эти данные, как правило, отличаются в меньшую сторону от результатов расчётов провайдеров или субпровайдеров. Последние учитывают суммарный трафик вашей подсети, а не отдельного интерфейса. Часть пакетов, проходящих через интерфейсы маршрутизаторов провайдеров, могут блокироваться на маршрутизатора.
Кажись, ставь Ethereal и мониторь 22.10.03 09:57  
Автор: whiletrue <Роман> Статус: Elderman
<"чистая" ссылка>
Помедитируй над логами Ethereal и своей прокси... после этого все должно проясниться.
Кажись, ставь Ethereal и мониторь 22.10.03 10:18  
Автор: Vened Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Помедитируй над логами Ethereal и своей прокси... после
> этого все должно проясниться.
Да понятно, что надо мониторингом заняться, но пока подберу нормальную прогу, пока разберусь в настройках... Вот чем он, этот Etherial хорош? Тыркнулся по поисковикам - производитель советует ставить к нему еще и WinPcap, а это еще одна порция настроек...
Кажись, ставь Ethereal и мониторь 22.10.03 10:36  
Автор: whiletrue <Роман> Статус: Elderman
<"чистая" ссылка>
> > Помедитируй над логами Ethereal и своей прокси...
> после
> > этого все должно проясниться.
> Да понятно, что надо мониторингом заняться, но пока подберу
> нормальную прогу, пока разберусь в настройках... Вот чем
> он, этот Etherial хорош? Тыркнулся по поисковикам -
> производитель советует ставить к нему еще и WinPcap, а это
> еще одна порция настроек...

Там настроек ноль. Ставишь WinPcap и ставишь Ethereal - все заработает без проблем. Только WinPcap - поставить придется обязательно, иначе работать не будет.
Есть ещё и другие мониторы. Iris. Тоже есть красивые отчёты с диаграммами. 22.10.03 10:24  
Автор: ZloyShaman <ZloyShaman> Статус: Elderman
<"чистая" ссылка>
Iris я уже смотрел. Без поллитры в нем не разобраться. :) 22.10.03 10:58  
Автор: Vened Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Странно. Там всё просто и понятно. Я даже доков не читал никаких. Принимай поллитру тогда. 22.10.03 11:05  
Автор: ZloyShaman <ZloyShaman> Статус: Elderman
<"чистая" ссылка>
Хорошо. Раз юмор не принят... 22.10.03 11:11  
Автор: Vened Статус: Незарегистрированный пользователь
<"чистая" ссылка>
то скажу подробнее. В Irise я забуксовал в системе настройки фильтров. Мне она не кажется такой уж очевидной и интуитивно понятной.
хм 22.10.03 11:18  
Автор: ZloyShaman <ZloyShaman> Статус: Elderman
<"чистая" ссылка>
это тоже юмор?
Вроде всё понятно там с фильтрами. Что именно у тебя не получилось там настроить?
хм 22.10.03 13:27  
Автор: Vened Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> это тоже юмор?
> Вроде всё понятно там с фильтрами. Что именно у тебя не
> получилось там настроить?

Хорошо. Согласен. Не юмор, а общая тогдашняя затырканность. Действительно, небольшая сосредоточенность на процессе настройки многие вопросы снимает.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach