Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Еще раз о ipcad+squid+lightsquid

    Russian
    39
    222
    166.2k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • R
      rubic
      last edited by

      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>

      1 Reply Last reply Reply Quote 0
      • Z
        zar0ku1
        last edited by

        Молодец! делал такое на фрюхе, но как-то у меня не корректно работало, сейчас попробую на пфсенсе

        закрывайте темы, если ответ на ваш вопрос полон.
        если схема сложная - не поленитесь ее нарисовать

        1 Reply Last reply Reply Quote 0
        • Z
          zar0ku1
          last edited by

          Глюк такой же как и был

          закрывайте темы, если ответ на ваш вопрос полон.
          если схема сложная - не поленитесь ее нарисовать

          1 Reply Last reply Reply Quote 0
          • R
            rubic
            last edited by

            сдается, что 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";
            
            

            нету?

            1 Reply Last reply Reply Quote 0
            • Z
              zar0ku1
              last edited by

              @rubic:

              сдается, что 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";
              

              закрывайте темы, если ответ на ваш вопрос полон.
              если схема сложная - не поленитесь ее нарисовать

              1 Reply Last reply Reply Quote 0
              • R
                rubic
                last edited by

                странно, у меня тоже так было пока вот такое из INTERFACES не удалил:

                
                interface le1 filter "ip and not dst net 192.168.0.0/16";
                
                

                -это типа подсчет исходящего трафика.. сейчас все нормально.. дай ipcad.conf и что в access.log по этим адресам?

                1 Reply Last reply Reply Quote 0
                • Z
                  zar0ku1
                  last edited by

                  @rubic:

                  странно, у меня тоже так было пока вот такое из INTERFACES не удалил:

                  
                  interface le1 filter "ip and not dst net 192.168.0.0/16";
                  
                  

                  -это типа подсчет исходящего трафика.. сейчас все нормально.. дай ipcad.conf и что в access.log по этим адресам?

                  ситуация чуть изменилась, но все равно не радует:

                  195.72.230.0:21
                  ```- почему подсеть, а не айпи

                  закрывайте темы, если ответ на ваш вопрос полон.
                  если схема сложная - не поленитесь ее нарисовать

                  1 Reply Last reply Reply Quote 0
                  • R
                    rubic
                    last edited by

                    aggregate 0.0.0.0/0 strip 32;
                    точно 32 стоит у тебя, а не 24?

                    1 Reply Last reply Reply Quote 0
                    • Z
                      zar0ku1
                      last edited by

                      @rubic:

                      aggregate 0.0.0.0/0 strip 32;
                      точно 32 стоит у тебя, а не 24?

                      о, спасибо =) в спешке не заметил

                      закрывайте темы, если ответ на ваш вопрос полон.
                      если схема сложная - не поленитесь ее нарисовать

                      1 Reply Last reply Reply Quote 0
                      • D
                        DasTieRR
                        last edited by

                        Спасибо за инструкцию, почти работает :) Можешь написать какие у тебя права (владелец и группа) на 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 установка по-другой схеме.

                        1 Reply Last reply Reply Quote 0
                        • R
                          rubic
                          last edited by

                          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 Reply Last reply Reply Quote 0
                          • Z
                            zar0ku1
                            last edited by

                            версия 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 Reply Last reply Reply Quote 0
                            • R
                              rubic
                              last edited by

                              Кстати, в ipcad.dump ничего и не должно добавляться по ходу работы. В этот файл ipcad кладет что-то только при завершении работы, ну и берет оттуда когда загружается.

                              1 Reply Last reply Reply Quote 0
                              • Z
                                zar0ku1
                                last edited by

                                @rubic:

                                Кстати, в ipcad.dump ничего и не должно добавляться по ходу работы. В этот файл ipcad кладет что-то только при завершении работы, ну и берет оттуда когда загружается.

                                ты это сейчас к чему? (с)

                                закрывайте темы, если ответ на ваш вопрос полон.
                                если схема сложная - не поленитесь ее нарисовать

                                1 Reply Last reply Reply Quote 0
                                • R
                                  rubic
                                  last edited by

                                  2zar0ku1
                                  Дык..
                                  @DasTieRR:

                                  Если открыть ipcad.dump, то там записи перестают добавлятся.

                                  1 Reply Last reply Reply Quote 0
                                  • D
                                    DasTieRR
                                    last edited by

                                    На тестовой машине 1.2.3 (squid+lightsquid) заработало, но когда тоже самое решил повторить у клиента (где тоже 1.2.3) не сработало, там пакетов больше - squid, lightsquis, squidguard, havp перестал считать трафик по порту 80, что вчера меня "убило" и я решил эксперименты отложить на другой день. :) Сегодня/завтра конфиги ещё раз проверю.

                                    1 Reply Last reply Reply Quote 0
                                    • D
                                      DasTieRR
                                      last edited by

                                      @zar0ku1:

                                      версия 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 Reply Last reply Reply Quote 0
                                      • R
                                        rubic
                                        last edited by

                                        Вчера поставил все на 1.2.2, руками ipcad запустил, он день у меня отработал без проблем, вечером решил перегрузить систему и понеслось.. cron.inc и shellcmd.inc передрались из-за передекларации is_service_running line 37.. ipcad сказал что ему нужно libpcap.so.4.. интересно как он до этого целый день работал? снес пока cron вечером перегружу
                                        ps поглядел заодно на размер access.log.. был немало удивлен(( не ротируется, хотя в lightsquid стоит ротация каждый день..

                                        1 Reply Last reply Reply Quote 0
                                        • R
                                          rubic
                                          last edited by

                                          в общем поставил вроде на 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'а теребить? злой админ залочивает старые темы зачем-то, не могу поднять свой топик по этой проблеме..

                                          1 Reply Last reply Reply Quote 0
                                          • K
                                            kryos
                                            last edited by

                                            Здравствуйте делал вроде все по инструкции 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.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.