Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #43, ИЮНЬ 2004 г.

Тотальный просчет

Докучаев Дмитрий aka Forb

Спецвыпуск Xakep, номер #043, стр. 043-068-4


Финальным штрихом будет серфинг своего хоста, чтобы проверить работоспособность модуля. Нагони несколько байт, скачай программы и затем выполни простую консольную команду: «mysql –uroot –ppasswd ipaccounting –e ‘select * from ipaccounting’». Если все хорошо, тебе вернется результат с заполненными полями. Причем в колонках bytesin/bytesout будут вполне правдивые значения.

Сырой подсчет

Бывают случаи, когда необходимо считать трафик, который проходит через все порты на сервере. Зачем? Причин может быть много: отсылать статистику вышестоящему провайдеру, контролировать пропускную способность, ради любопытства и т.д. и т.п. Для «сырого» подсчета существует множество программ, которые ты можешь найти в инете. Практически весь софт бесплатен и имеет туеву хучу возможностей. Из таких программ я бы выделил софтину argus. О ее установке и использовании мы писали в Хакере, 04.03, стр. 68.

Можно воспользоваться вторым хитрым способом подсчета трафика – файрвольным. Файрволов бывает много, но часто в *nix-системах они реализуются в виде ядерных модулей. В моем примере я буду рассказывать про файрвол ipfw, потому как все чаще и чаще хостеры выбирают FreeBSD.

Итак, к чему мы будем стремиться? Лично для тебя необходимо подсчитать весь трафик, проходящий через машину. Либо через определенные порты, например, 21 и 80. Либо только через 80 порт. Неважно. Все это можно легко выполнить через твой любимый файрвол. Единственное условие – ты должен иметь рутовые права на машине. Только рут может просматривать и модифицировать рулесы встроенного брандмауэра. Прежде чем что-то считать, расскажу, как добавлять/модифить правила файра. Потому как для некоторых «интернет-бизнесменов» настройка файрвола – темный лес.

Чтобы добавить рулес на подсчет байтов через произвольный порт, достаточно набрать команду «ipfw add 1 count ip from any to me». В это правило будут записываться все входящие байтики. Чтобы таким же образом суммировать исходящий траф, достаточно выполнить команду «ipfw add 2 count ip from me to any». Причем номера могут быть произвольными, а если охота считать байты по определенному интерфейсу, нужно приписывать в хвост команды фразу «via имя_интерфейса». Чтобы явно определить порт, пишем вместо «ip» «tcp», а вместо «me» «me номер_порта». Если хочется посмотреть значения контейнеров для правил, юзай команду «ipfw show номер». Хочешь обнулить контейнер? Нет проблем, набирай «ipfw zero номер». Как видишь, язык файрвола весьма прост и дружелюбен.

Таким образом, ты можешь написать простенький скриптик, который позволяет считать трафик в реальном времени. Приводить код сценария не буду, это неинтересно. Я лишь натолкну тебя на мысль, и ты все напишешь сам.

Сперва необходимо определить задачу. Во-первых, скрипт должен понимать стартовые опции. Если последняя равна ‘-z’, происходит принудительная очистка контейнеров. Во-вторых, в сценарий может быть внедрен перевод сырых байтов в кило/мега и гигабайты. Это делается элементарнейшим образом (если интересно, смотри врезку). И, наконец, основная цель сценария – парсинг информации от файрвола и предоставление юзеру читабельного результата.

Назад на стр. 043-068-3  Содержание  Вперед на стр. 043-068-5