Прошу помощи - подсчет траффика через ipacctd

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
DeVeO
ефрейтор
Сообщения: 68
Зарегистрирован: 2006-09-25 12:53:38

Прошу помощи - подсчет траффика через ipacctd

Непрочитанное сообщение DeVeO » 2007-11-08 12:55:48

Добрый день. По статье уважаемого Лиссяры (огромный риспект ему) настроил подсчет траффика через ipacctd. Система FreeBSD 6.2, squid,ipfw,nat- в общем все как обычно. Клиенты работают c http через непрозрачный прокси. Также на клиентах жестко прописан ip FreeBSD в качестве шлюза и DNS. Прокси также жестко прописан в клиентских иксплорерах. Вроде траффик считается... Но-в статистике я не вижу данных по http клиентов. Также нет данных по самой FreeBSD-а ведь она тоже что-то качает для себя (хотя бы для базы clamav). Подозреваю, что что-то не так написал в части ipfw, касающейся squid'а, nat и ipfw. Но что-понять самостоятельно не могу. :cry: Вот фрагмент ipfw

Код: Выделить всё

${fwcmd} add fwd 127.0.0.1,3128 tcp from ${NetInIP}/${NetInMask} to any http,https via ${LanIn}
${fwcmd} add divert natd all from any to ${IpOut} in via ${LanOut}
${fwcmd} add divert 10001 all from any to ${NetInIP}/${NetInMask} in via ${LanOut}
${fwcmd} add divert 10001 all from ${NetInIP}/${NetInMask} to any out via ${LanOut}
${fwcmd} add divert natd all from ${NetInIP}/${NetInMask} to any out via ${LanOut}
Здесь такие же переменные, что и у Лиссяры в сатье про ipfw. На 10001 порту висит ipacctd. Подскажите как правильно считать траффик в такой ситуации (по пользователям)-т.е. со сквидом. Уже голову сломал... :oops:

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Прошу помощи - подсчет траффика через ipacctd

Непрочитанное сообщение dikens3 » 2007-11-08 14:26:06

${fwcmd} add divert 10001 all from any to ${NetInIP}/${NetInMask} in via ${LanOut}
${fwcmd} add divert 10001 all from ${NetInIP}/${NetInMask} to any out via ${LanOut}
Считается входящий/исходящий трафик клиентов, шлюз тут где?

Что за привычка выложить часть программы(ipfw) и разбирайтесь как хотите?
${fwcmd} add divert 10001 all from ${NetInIP}/${NetInMask} to any out via ${LanOut}
Может данная строка не в том месте стоит? Сделай её первой и посмотри что будет.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

DeVeO
ефрейтор
Сообщения: 68
Зарегистрирован: 2006-09-25 12:53:38

Re: Прошу помощи - подсчет траффика через ipacctd

Непрочитанное сообщение DeVeO » 2007-11-08 14:40:16

Вот полный конфиг ipfw. Присланный ранее кусок помечен жирным. Насчет шлюза не совсем понял-входящие пакеты передаются нату, затем после ната передаются ipacctd. Аналогично и исходящие.

Код: Выделить всё

#!/bin/sh
case "$1" in
start)    
echo "----- STARTING FIREWALL...-----"
fwcmd="/sbin/ipfw -q"
LanOut="fxp1"
IpOut="a.b.c.d"
NetOut="30"
MaskOut="255.255.255.252"
GateWay="x.y.z.w"
LanIn="fxp0"
IPIn="192.168.0.77"
NetInIP="192.168.0.0"
NetInMask="24"
MaskIn="255.255.255.0"

uports="1025-65535"
ftpports="49152-65535"

ip_tel1="5060-5061"
ip_tel2="53"
ip_tel3="69"
ip_tel4="10000-20000"

MyIP1="192.168.0.1"
#FreeBSD
MyIP2="192.168.0.77"
#Ip-telefon
MyIP3="192.168.0.50"

${fwcmd} -f flush

${fwcmd} add pass all from any to any via lo0
${fwcmd} add deny ip from any to 127.0.0.0/8
${fwcmd} add deny ip from 127.0.0.0/8 to any
${fwcmd} add deny ip from any to 10.0.0.0/8 in via ${LanOut}
${fwcmd} add deny ip from any to 172.16.0.0/12 in via ${LanOut}
${fwcmd} add deny ip from any to 192.168.0.0/16 in via ${LanOut}
${fwcmd} add deny ip from any to 0.0.0.0/8 in via ${LanOut}
${fwcmd} add deny ip from any to 169.254.0.0/16 in via ${LanOut}
${fwcmd} add deny ip from any to 240.0.0.0/4 in via ${LanOut}
${fwcmd} add deny icmp from any to any frag
${fwcmd} add deny log icmp from any to 255.255.255.255 in via ${LanOut}
${fwcmd} add deny log icmp from any to 255.255.255.255 out via ${LanOut}

${fwcmd} add fwd 127.0.0.1,3128 tcp from ${NetInIP}/${NetInMask} to any http,https via ${LanIn}
${fwcmd} add divert natd all from any to ${IpOut} in via ${LanOut}
${fwcmd} add divert 10001 all from any to ${NetInIP}/${NetInMask} in via ${LanOut}
${fwcmd} add divert 10001 all from ${NetInIP}/${NetInMask} to any out via ${LanOut}
${fwcmd} add divert natd all from ${NetInIP}/${NetInMask} to any out via ${LanOut}

${fwcmd} add deny ip from 10.0.0.0/8 to any out via ${LanOut}
${fwcmd} add deny ip from 172.16.0.0/12 to any out via ${LanOut}
${fwcmd} add deny ip from 192.168.0.0/16 to any out via ${LanOut}
${fwcmd} add deny ip from 0.0.0.0/8 to any out via ${LanOut}
${fwcmd} add deny ip from 169.254.0.0/16 to any out via ${LanOut}
${fwcmd} add deny ip from 224.0.0.0/4 to any out via ${LanOut}
${fwcmd} add deny ip from 240.0.0.0/4 to any out via ${LanOut}

${fwcmd} add allow ip from any to ${NetInIP}/${NetInMask} in via ${LanIn}
${fwcmd} add allow ip from ${NetInIP}/${NetInMask} to any out via ${LanIn}

${fwcmd} add deny log tcp from any 554 to any via ${LanOut}
${fwcmd} add deny log tcp from any to any 554 via ${LanOut}

${fwcmd} add allow tcp from any to any established
${fwcmd} add allow ip from ${IpOut} to any out xmit ${LanOut}

${fwcmd} add pass tcp from ${MyIP1} to any
${fwcmd} add pass tcp from any to ${MyIP1} ${uports}
${fwcmd} add pass udp from ${MyIP1} to any
${fwcmd} add pass udp from any to ${MyIP1} ${uports}

${fwcmd} add pass tcp from ${MyIP2} to any
${fwcmd} add pass tcp from any to ${MyIP2} ${uports}
${fwcmd} add pass udp from ${MyIP2} to any
${fwcmd} add pass udp from any to ${MyIP2} ${uports}

${fwcmd} add pass udp from ${MyIP3} ${ip_tel1} to any
${fwcmd} add pass udp from ${MyIP3} ${ip_tel2} to any
${fwcmd} add pass udp from ${MyIP3} ${ip_tel3} to any
${fwcmd} add pass udp from ${MyIP3} ${ip_tel4} to any
${fwcmd} add pass udp from any to ${MyIP3} ${ip_tel1}
${fwcmd} add pass udp from any to ${MyIP3} ${ip_tel2}
${fwcmd} add pass udp from any to ${MyIP3} ${ip_tel3}
${fwcmd} add pass udp from any to ${MyIP3} ${ip_tel4}

${fwcmd} add pass tcp from any to any 53 via ${LanOut}
${fwcmd} add pass tcp from any 53 to any via ${LanOut}

${fwcmd} add allow udp from any to me 53 in recv ${LanOut}
${fwcmd} add allow udp from me 53 to any out xmit ${LanOut}
${fwcmd} add allow udp from any 53 to me in recv ${LanOut}
${fwcmd} add allow udp from me to any 53 out xmit ${LanOut}
${fwcmd} add allow tcp from any to me 53 in recv ${LanOut}
${fwcmd} add allow tcp from me 53 to any out xmit ${LanOut}
${fwcmd} add allow tcp from any to me 53 in recv ${LanOut} setup

${fwcmd} add allow udp from any to any 123 via ${LanOut}

${fwcmd} add allow tcp from any to any 22,23,25,110,3389 via ${LanOut}
${fwcmd} add allow tcp from any 22,23,25,110,3389 to any via ${LanOut}
${fwcmd} add allow tcp from any to ${IpOut} 20,21 in via ${LanOut} setup
${fwcmd} add allow tcp from any to ${IpOut} ${ftpports} via ${LanOut}
${fwcmd} add allow icmp from any to any icmptypes 0,8,11

${fwcmd} add allow tcp from any to ${IpOut} 80 in via ${LanOut} setup

${fwcmd} add allow tcp from any to ${IpOut} 25 in via ${LanOut} setup

${fwcmd} add allow tcp from any to ${IpOut} 22 in via ${LanOut} setup

${fwcmd} add allow tcp from any to ${IpOut} 143 in via ${LanOut} setup

${fwcmd} add allow tcp from any to ${IpOut} 110 in via ${LanOut} setup

${fwcmd} add allow tcp from ${NetInIP}/${NetInMask} to any 5190 in via ${LanIn} setup

${fwcmd} add allow tcp from ${NetInIP}/${NetInMask} to not ${NetInIP}/${NetInMask} in via ${LanIn} setup

${fwcmd} add deny log ip from any to any
;;
reload)
echo "----- RELOADING FIREWALL -----"
;;
stop)
echo "----- STOPPING FIREWALL -----"
;;
*)
echo "Usage: $0 {start|stop|reload}"
exit 1
;;
esac


Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Прошу помощи - подсчет траффика через ipacctd

Непрочитанное сообщение dikens3 » 2007-11-08 15:45:52

1. Только не говори мне что это работает. Потому что я непонимаю как.

Код: Выделить всё

${fwcmd} add divert natd all from any to ${IpOut} in via ${LanOut}
Все исходящие пакеты от пользователей, которые нужно натить не попадут под это правило.

2. Попробуй считать трафик на внутреннем интерфейсе.

Код: Выделить всё

${fwcmd} add divert 10001 all from any to ${NetInIP}/${NetInMask} out via ${LanIn}
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

DeVeO
ефрейтор
Сообщения: 68
Зарегистрирован: 2006-09-25 12:53:38

Re: Прошу помощи - подсчет траффика через ipacctd

Непрочитанное сообщение DeVeO » 2007-11-08 17:06:18

Этот конфиг ipfw снят с работающей системы. А исходящие пакеты от пользователей, которые нужно натить подпадают под правило

Код: Выделить всё

${fwcmd} add divert natd all from ${NetInIP}/${NetInMask} to any out via ${LanOut}
которое идет последним в этом блоке

Код: Выделить всё

${fwcmd} add fwd 127.0.0.1,3128 tcp from ${NetInIP}/${NetInMask} to any http,https via ${LanIn}
${fwcmd} add divert natd all from any to ${IpOut} in via ${LanOut}
${fwcmd} add divert 10001 all from any to ${NetInIP}/${NetInMask} in via ${LanOut}
${fwcmd} add divert 10001 all from ${NetInIP}/${NetInMask} to any out via ${LanOut}
${fwcmd} add divert natd all from ${NetInIP}/${NetInMask} to any out via ${LanOut}
А правило

Код: Выделить всё

${fwcmd} add divert natd all from any to ${IpOut} in via ${LanOut}
натит входящие пакеты из интернета, идущие на внешний ip.
То что это работает-это точно. Если не жалко-можешь ли ты скинуть в личку свой пример подсчета траффика (ipfw+ipacctd). Просто у меня уже мозги набекрень...Хочется посмотреть на нормальные рабочие конфиги.

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Прошу помощи - подсчет траффика через ipacctd

Непрочитанное сообщение dikens3 » 2007-11-08 18:16:41

Извиняюсь, не заметил одну строчку.

Когда нужно считать пакеты для пользователей? (Ответ: При выходе с внутреннего интерфейса к пользователю. Иначе пользователь скажет что ему это и это не приходило. К примеру ты посчитал трафик к пользователю, но не отдал. :-) )

Когда нужно считать пакеты от пользователей? (Ответ: Перед попаданием в NATD. Иначе потом не сможешь.)

Когда нужно считать пакеты для сервера?
Тут два варианта:
1. При входе с внешнего интерфейса. (Учитывать нужно все, а потом отделать мух от котлет)
2. После обработки NATD.

Когда нужно считать пакеты от сервера?
Тут тоже два варианта:
1. При выходе с внешнего интерфейса. (Учитывать нужно все, а потом отделать мух от котлет)
2. До обработки NATD.

P.S. Squid ты не можешь учитывать, т.к. squid - это сам шлюз. Он отправляет данные в интернет от внешнего IP-Адреса. И возвращаются данные тоже на этот же адрес. А вот потом squid отправляет данные через внутренний интерфейс.
Советы читай, вешай учёт при отправке на внутреннем интерфейсе.

Код: Выделить всё

gateway# ipfw table 1 list
0.0.0.0/8 0
10.0.0.0/8 0
169.254.0.0/16 0
172.16.0.0/12 0
192.0.2.0/24 0
192.168.0.0/16 0
204.152.64.0/23 0
224.0.0.0/3 0

Код: Выделить всё

02200  312829  130776765 tee 666 ip from not table(1) to 192.168.0.0/16 out recv ВНЕШНИЙ_ИНТЕРФЕЙС xmit ВНУТРЕННИЙ_ИНТЕРФЕЙС
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

DeVeO
ефрейтор
Сообщения: 68
Зарегистрирован: 2006-09-25 12:53:38

Re: Прошу помощи - подсчет траффика через ipacctd

Непрочитанное сообщение DeVeO » 2007-11-08 18:36:25

Спасибо большое за растолковывание. Буду пробовать. А как насчет просьбы дать свой конфиг ipfw с правилами для ipacctd? Извини на назойливость...

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Прошу помощи - подсчет траффика через ipacctd

Непрочитанное сообщение dikens3 » 2007-11-08 19:20:00

DeVeO писал(а):Спасибо большое за растолковывание. Буду пробовать. А как насчет просьбы дать свой конфиг ipfw с правилами для ipacctd? Извини на назойливость...
Он у меня очень большой, смысла не имеет.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

DeVeO
ефрейтор
Сообщения: 68
Зарегистрирован: 2006-09-25 12:53:38

Re: Прошу помощи - подсчет траффика через ipacctd

Непрочитанное сообщение DeVeO » 2007-11-09 11:56:18

to dikens3:

Основываясь на твоих советах решил попробовать так:
- Учет трафика к клиентам, включая трафик сквида (правило расположить после всех натов)

Код: Выделить всё

  ${fwcmd} add tee 10001 ip from not 192.168.0.0./24 to 192.168.0.0.0/24 out recv ${LanOut} xmit ${LanIn}
- Учет трафика от клиентов (правило расположить до ната на исходящие от клиентов пакеты)

Код: Выделить всё

  ${fwcmd} add tee 10001 ip from 192.168.0.0./24 to any out via ${LanOut}
- Учет входящего трафика сервера (правило расположить после ната на входящие пакеты)

Код: Выделить всё

   ${fwcmd} add tee 10001 ip from any to me in via ${LanOut}
- Учет исходящего трафика сервера (правило расположить до ната на исходящие пакеты)

Код: Выделить всё

   ${fwcmd} add tee 10001 ip from me to any out via ${LanOut}
Так будет правильно?