Еще раз о ipcad+squid+lightsquid
-
UPD: ВНИМАНИЕ! переработанная статья находится тут: http://ru.doc.pfsense.org/index.php/%D0%9F%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82_%D1%82%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%B0_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_Squid_%D0%B8_ipcad_%D0%B2_pfSense_1.2.3 Все, что ниже, можно почитать только для общего развития и решения некоторых типичных проблем.
Решил снова поднять тему учета трафика. Может кто-то поправит или кому-то будет интересно. Расскажу про свой сетап сделанный по мотивам многочисленных руководств в сети. Поставил свежий pfsense 1.2.3 на виртуалку под vmware, установил open-vm-tools. Про установку squid и lightsquid писать не буду - все ставится из родных пакетов без проблем, squid в transparent mode. Далее предполагается, что все установлено и настроено и pfsense имеет доступ в интернет.
Нам понадобится rsh. Благодаря zar0ku1, он у нас есть) Качаем из ветки http://forum.pfsense.org/index.php/topic,18366.0.html, распаковываем и кладем в /usr/bin (для таких юзеров как я - совет: лучше сразу откройте ssh доступ к pfsenese: system->advanced->enable secure shell, скачайте winscp и логиньтесь к pfsense как root со своим паролем - будете удаленно из винды видеть всю файловую систему и редактировать конфиги).
Теперь ставим ipcad, но прежде одно но: ipcad не хочет библиотек идущих с 1.2.3, он хочет более старые. Поэтому сначала ставим compat6. На компе с pfsense заходим в shell и:
pkg_add -r compat6x-i386
далее собственно ipcad:
pkg_add -r ipcad
теперь в /usr/local/etc у нас есть файл ipcad.conf.default. Переименовываем его в ipcad.conf и редактируем (все разделы, где нужно что-то поменять приведены ниже, остальные оставляем как есть):
################## # GLOBAL OPTIONS # ################## capture-ports enable; ##################### # INTERFACE OPTIONS # ##################### interface le1 filter "ip and dst net 192.168.0.0/16 and not src net 192.168.0.0/16"; aggregate 192.168.0.0/16 strip 32; aggregate 0.0.0.0/0 strip 32; #aggregate 1-19 into 65535; #aggregate 20-21 into 21; #aggregate 22-23 into 22; #aggregate 25 into 25; #aggregate 24 into 65535; #aggregate 26-79 into 65535; aggregate 80-81 into 0; #aggregate 82-109 into 65535; #aggregate 110 into 110; #aggregate 111-442 into 65535; #aggregate 443 into 443; #aggregate 444-3127 into 65535; aggregate 3128 into 0; #aggregate 3129-65535 into 65535; ###################### # RSH SERVER OPTIONS # ###################### rsh enable at 127.0.0.1; rsh root@127.0.0.1 admin; rsh root@127.0.0.1 backup; rsh root@127.0.0.1; rsh 127.0.0.1 view-only; dumpfile = ipcad.dump; ################# # OTHER OPTIONS # ################# chroot = /var/log/ipcad; pidfile = ipcad.pid; memory_limit = 10m;
Собственно, вам надо только подставить свой интерфейс LAN (у меня le1) и подсеть LAN (у меня 192.168.0.0/16) и не забыть в /var/log создать подкаталог ipcad.
Ну немного об агрегации портов. Здесь у нас стоит:aggregate 80-81 into 0; ... aggregate 3128 into 0;
т.е. если кто-то из локалки берет что-то в интернете из 80 порта (HTTP) или прописал у себя на машине в качестве прокси наш squid (3128)(??? тут не уверен), то ipcad вместо этого запомнит порт не как 80 или 3128, а как 0. Это нам понадобится в дальнейшем, чтобы исключить двойной подсчет трафика, т.к. squid и так сам отобразит http трафик в логах. Остальные aggregate я закоментировал для отладки. Вообще, агрегация нужна для экономии памяти, чтобы ipcad не хранил записи по всем портам, а мог как-то их "обобщить". Так что в рабочей среде надо раскомментировать, хотя если статистику, как будет видно в дальнейшем, сбрасывать ежеминутно, то может и так оставить. Опять не уверен..
Настраиваем запуск ipcad со стартом системы. Для этого в webgui идем в system->packages устанавливаем пакет shellcmd. Теперь в меню services у нас есть пункт shellcmd. Жмем его и добавляем новую запись:
Command: /usr/local/bin/ipcad -rds Type: shellcmd
ipcad будет висеть в памяти и собирать статистику по адресам локальной сети. Теперь нам нужен скрипт, который эту статистику будет периодически переносить в лог squid. Из winscp создаем в /root файл tolog.sh и заносим в него следующее:
#!/bin/sh net="192.168" ttime=`/usr/bin/rsh localhost sh ip acco | grep 'Accounting data saved' | awk '{print ($4)}'` rsh localhost clear ip accounting rsh localhost show ip accounting checkpoint | grep $net | awk -v vtime=$ttime '{if ($5 != 0) print (vtime".000",1,$2,"TCP_MISS/200",$4,"CONNECT",$1":"$5,"-","DIRECT/"$1,"-")}' >> /var/squid/log/access.log
сохраняем и в свойствах файла ставим атрибуты в 0555
Настраиваем ежеминутный запуск tolog.sh через cron. Для этого в webgui идем в diagnostics->backup/restore и жмем download configuration. Открываем сохраненный файл конфигурации pfsense в редакторе и ищем секцию <cron>вставляем в нее следующее:
<minute>*/1</minute> <hour>*</hour> <mday>*</mday> <month>*</month> <wday>*</wday> <who>root</who> <command></command>/root/tolog.sh
сохраняем файл и идем опять в diagnostics->backup/restore, где указываем на измененный файл конфигурации и жмем restore configuration
pfsense перезагрузится и все заработает. Ну, может быть.. Проверить можно качая что-нибудь по ftp, и наблюдая за /var/squid/log/access.log. Там ежеминутно должны появлятся характерные записи со словом "CONNECT". При этом, когда вы просто бродите по сайтам, подобных записей с IP этих сайтов появлятся не должно. Оригинальный tolog.sh найденный в интернете как раз страдал этим (двойной учет http трафика). По крайней мере в связке с lightsquid, я проверял. Вставил в него "if ($5 != 0)" т.е. проверку на порт 0 (см. выше).</cron> -
Молодец! делал такое на фрюхе, но как-то у меня не корректно работало, сейчас попробую на пфсенсе
-
Глюк такой же как и был
-
сдается, что ipcad слушает не только LAN, но и WAN..
в ipcad.conf в разделе INTERFACES точно ничего кроме:interface le1 filter "ip and dst net 192.168.0.0/16 and not src net 192.168.0.0/16";
нету?
-
сдается, что ipcad слушает не только LAN, но и WAN..
в ipcad.conf в разделе INTERFACES точно ничего кроме:interface le1 filter "ip and dst net 192.168.0.0/16 and not src net 192.168.0.0/16";
нету?
interface re0 filter "ip and dst net 192.168.0.0/16 and not src net 192.168.0.0/16";
-
странно, у меня тоже так было пока вот такое из INTERFACES не удалил:
interface le1 filter "ip and not dst net 192.168.0.0/16";
-это типа подсчет исходящего трафика.. сейчас все нормально.. дай ipcad.conf и что в access.log по этим адресам?
-
странно, у меня тоже так было пока вот такое из INTERFACES не удалил:
interface le1 filter "ip and not dst net 192.168.0.0/16";
-это типа подсчет исходящего трафика.. сейчас все нормально.. дай ipcad.conf и что в access.log по этим адресам?
ситуация чуть изменилась, но все равно не радует:
195.72.230.0:21 ```- почему подсеть, а не айпи
-
aggregate 0.0.0.0/0 strip 32;
точно 32 стоит у тебя, а не 24? -
aggregate 0.0.0.0/0 strip 32;
точно 32 стоит у тебя, а не 24?о, спасибо =) в спешке не заметил
-
Спасибо за инструкцию, почти работает :) Можешь написать какие у тебя права (владелец и группа) на ipcad.dump?
у меня владелец root группа wheel права 0600
Выглядит таким образом - один раз пишет, потом нет, т.е. в lightsquid записи появляются (со всеми портами), потом есть только то что ловит squid (80 порт).
Если открыть ipcad.dump, то там записи перестают добавлятся.
Cron запущен (хотя и останавливался)
Если в командной строке написать ipcad, то показывает, что процесс висит.P.S. Что помогло мне: проверил права на /usr/bin/rsh - 0555
cron настраивал через пакет cron из гуя, время в 1 минуту выставил */1 (когда было просто 1, то неработало).
Попробовал установить у клиента с версией PfSense 1.2.2 - не встало, ipcad.pid был пуст (права 0777) т.е. не поднимался ipcad, либо что-то не так делал, либо с 1.2.2 установка по-другой схеме. -
2DasTieR
Так заработало у тебя в конце-концов на 1.2.3?
Права такие: ipcad.dump - 600, ipcad.pid - 644, у обоих Group: wheel, Owner: root
ipcad вообще-то сам эти файлы создает с нужными правами, там мудрить не надо..
У клиента посмотри лог загрузки. У меня, например, там касательно этого всего так:
Opening le1… [LCap] [ERSH] [4096] initialized as 1
Configured RSH Server listening at 127.0.0.1
No valid entries found in ipcad.dump
Daemonized.
и все.. не должно быть никаких сообщений об отсутствующих библиотеках и т.п.
P.S. а Cron-то я и проглядел, спасибо) -
версия 1.2.2 выдает ошибку
Can't lock PID file ipcad.pid: Invalid argument Can't initialize pid file /tmp/ipcad.pid: Operation not permitted Make sure you have . under /tmp used as new root. man 2 chroot.
комментируем строчки
#chroot #pidfile
прописываем:
dumpfile = /var/log/ipcad/ipcad.dump;
и создаем его
mkdir /var/log/ipcad/ touch /var/log/ipcad/ipcad.dump chmod 600 /var/log/ipcad/ipcad.dump
-
Кстати, в ipcad.dump ничего и не должно добавляться по ходу работы. В этот файл ipcad кладет что-то только при завершении работы, ну и берет оттуда когда загружается.
-
Кстати, в ipcad.dump ничего и не должно добавляться по ходу работы. В этот файл ipcad кладет что-то только при завершении работы, ну и берет оттуда когда загружается.
ты это сейчас к чему? (с)
-
2zar0ku1
Дык..
@DasTieRR:Если открыть ipcad.dump, то там записи перестают добавлятся.
-
На тестовой машине 1.2.3 (squid+lightsquid) заработало, но когда тоже самое решил повторить у клиента (где тоже 1.2.3) не сработало, там пакетов больше - squid, lightsquis, squidguard, havp перестал считать трафик по порту 80, что вчера меня "убило" и я решил эксперименты отложить на другой день. :) Сегодня/завтра конфиги ещё раз проверю.
-
версия 1.2.2 выдает ошибку
Can't lock PID file ipcad.pid: Invalid argument Can't initialize pid file /tmp/ipcad.pid: Operation not permitted Make sure you have . under /tmp used as new root. man 2 chroot.
комментируем строчки
#chroot #pidfile
прописываем:
dumpfile = /var/log/ipcad/ipcad.dump;
и создаем его
mkdir /var/log/ipcad/ touch /var/log/ipcad/ipcad.dump chmod 600 /var/log/ipcad/ipcad.dump
Спасибо, сегодня протестирую, машин с 1.2.2 хватает, переставлять на 1.2.3 пока нет желания.
-
Вчера поставил все на 1.2.2, руками ipcad запустил, он день у меня отработал без проблем, вечером решил перегрузить систему и понеслось.. cron.inc и shellcmd.inc передрались из-за передекларации is_service_running line 37.. ipcad сказал что ему нужно libpcap.so.4.. интересно как он до этого целый день работал? снес пока cron вечером перегружу
ps поглядел заодно на размер access.log.. был немало удивлен(( не ротируется, хотя в lightsquid стоит ротация каждый день.. -
в общем поставил вроде на 1.2.2.. пришлось понаделать руками в /usr/lib симлинков на ../local/lib/compat для
следующих библиотек:
libpcap.so.4
libpthread.so.2
libc.so.6
сам compat6 не выдерживает перезагрузки в 1.2.2 у меня почему-то..
это мне совсем не нравится.. если все заново поднимать и не вспомнишь уже как делал.. одна надежда на этот топик..
по cron.inc и shellcmd.inc.. конфликт наблюдается и в 1.2.2 и 1.2.3.. ну не мудрено в общем.. файлы одинаковые, автор один и тот же.. интересно в php есть что-нибудь подобное сишному #ifdef ? в общем можно не обращать внимания, ошибку выдает, но все вроде работает..
а вот lightsquid все-же не порадовал с log rotate, ай-яй-яй.. проблеме уже 2 года так-то.. не пишет он ничего в crontab в отличие от самого сквида.. неужто опять dvserg'а теребить? злой админ залочивает старые темы зачем-то, не могу поднять свой топик по этой проблеме.. -
Здравствуйте делал вроде все по инструкции pfsense 1.2.3
ссылка в начале поста на rsh не работает.
Взял из дистрибутива freebsd положил /usr/bin
далее все как написано..
в итоге при запуске ipcad в ручную пишет вот что:ipcad
Opening vr0… [LCap] [ERSH] [4096] [vr0/interactive] Initialized as 1
Aggregate network 192.168.1.0/255.255.255.0 -> 255.255.255.255
Aggregate network 0.0.0.0/0.0.0.0 -> 255.255.255.255
Aggregate ports 80..81 into 0
Aggregate ports 3128..3128 into 0
Configured RSH Server listening at 127.0.0.1
Can't start: another instance running, pid=628
Can't initialize pid file /var/log/ipcad/ipcad.pid: Operation not permitted
Make sure you have . under /var/log/ipcad used as new root. man 2 chroot.