LINUX.ORG.RU
ФорумAdmin

Подсчет трафика с помощью IPFW


0

0

Мой вопрос собственно нужно разбить на две части.

Первое.
Веду учет общего входящего\исходящего трафика нашего сервера с провайдером.
Конкретно таким образом:

Правила в ipfw:
ipfw add XXXXX count ip from any to any via rl0 in
ipfw add XXXXX count ip from any to any via rl0 out

По cron сие запускается так, с интервалом, скажем, в один час:

/sbin/ipfw show | /usr/bin/grep "^ХХХХХ" | /usr/bin/awk '{ print $3; }' > /var/log/count/sending.`date " %Y-%m"`
/sbin/ipfw show | /usr/bin/grep "^ХХХХХ" | /usr/bin/awk '{ print $3; }' > /var/log/count/received.`date " %Y-%m"`

Замечательно.
Но сразу вижу здесь следующие проблемы:

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

Как тут быть??? Что можно предпринять, чтобы исключить потерю накопившейся инфы за некий период (возможно и месяц)?
Какие видите варианты?
Все это я еще ес-но вывожу через броузер для отчета, cgi-скрипт обращается к этим заданным создаваемым файлам со статистикой, поэтому их плодить безмерно просто проблематично.
(может можно (нужно) дозаписывать >> новые данные в конец этих файлов
всегда, а не перезаписывать > и выводить в броузер последнюю строчку
посредством перла, а не единственную (первую), как это делается сейчас, как это провернуть?)

Второй вопрос заключается в следующем.
Помимо сбора общей статистики по трафику за месяц, необходимо еще получать статистику по каждому пользователю в локальной сети, сколько он получил\отправил за текущий месяц в_общей_сложности_при_обращении_в_интернет. То есть трафик в самой локальной сети между машинами нужно отсечь, он не должен учитываться.

Пользователи выходят в инет со своих серых адресов через natd используя один реальный IP на самом сервере (шлюзе). Из броузера они подключаются через мой же squid, установленный на сервере, все остальное, аська, фигаська и еще, если что-то там имеется, напрямую через natd работает.
Так вот каким образом общитывать их входящий\исходящий_трафик_с_инетом, не принимая во внимание обмен данными в локальной сети?

Пробовал делать так (интерфейс rl0 смотрит в инет, клиент имеет IP
10.0.0.3):

ipfw add ХХХХХ count ip from any to 10.0.0.3 via rl0 in
ipfw add ХХХХХ count ip from any to 10.0.0.3 via rl0 out

Так вот будет ли учитываться полностью весь трафик с инетом у этого
общитываемого юзера, не пропадут ли данные по http с ftp, если они
передаются этому пользователю со squid-а, стоящего сервере?
И вообще, не будет ли врать отчет по юзерам, ведь они как бы не напрямую общаются с инетом, а через natd, squid, успокойте меня что ли. Может вообще пользователей нужно как-то иначе общитывать?

Готов выслушать все ваши соображения по прочитанному выше.
Хотелось бы все наладить средствами описанными выше #!/bin/sh, не прибегая к внешним программам статистики, да и самого squid-а тоже (кстати, у последнего где ее можно посмотреть, если что?)

Все под FreeBSD 4.3


Я в этом не спец. сам только разбираюсь с этим делом , но по моему я гдето видел что можно писать правила для перенаправленых пакетов по интерфесам, типа правило только для пакетов которые попали на rl0 с rl1. типа via , recv , xmit

anonymous
()

К слову сказать, с первой половиной вопроса я разобрался, вопрос решен положительно. С правил все добавляется (дописывается) через определенные интервалы времени в один лог-файл, сразу происходит обнуление статистики по нужным правилам, ну и по кругу, после чего перл складывает все числовые значения в этом файле воедино, получившаяся сумма в байтах переводится в мегабайты и после все выводится в броузере.
Перезагрузки сервера теперь нестрашны, т.к. инфа добавляется в конец файла, а не переписывается поверх в нем.

Осталась вторая половина по правилам для клиентов.

Да, кто вот подскажет, как в моем случае будет правильнее прописать правила для подсчета трафика у клиентов, чтобы учитывались только пакеты отправленные \переданные через наружный интерфейс rl0 с них. (хотя в пятницу в качестве прокси-сервера сам прописал у всех адрес прокси-сервера именно 10.0.0.1, это IP интерфейса rl1, смотрящего в локальную сетку..)

mrrc
() автор топика

Могу свой скрипт тебе отправить. Результат смотрится через браузер. Если надо, то пиши jon@lemex.ru

anonymous
()

Засылай, лишним не будет!

В целом в моем варианте меня все устраивает, беспокоит только подсчет
трафика_с_инетом у пользователей.

Сейчас на фирме никого нет, там только почта проверяется с интервалом
в десять минут, по нижеприведенным правилам почему-то общитывается
только первое, второе по ipfw show по-прежнему равно 0, странно, ведь
все равно какие-то байты при проверке почты должны передаваться
наружу, ведь так, так почему же ничего не регистрируется по второму
правилу?


/sbin/ipfw add 04200 count ip from any to 10.0.0.3 via rl0 in
/sbin/ipfw add 04300 count ip from 10.0.0.3 to any via rl0 out

mrrc
() автор топика

на счёт сквида. статистика хранится в access.log, а в удобочитаемый вид её можно привести с помощью проги SARG, она забивает всё в html, смотри и любуйся: кто-куда-сколько.

anonymous
()

а trafd пробывал пользовать там есть куда как болие коректный способ считать трафик.......

Bes
()

А где этот SARG достать?

mrrc
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.