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

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

Scheduled Pinned Locked Moved Russian
222 Posts 39 Posters 166.3k Views
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 Apr 6, 2011, 12:43 AM Dec 17, 2009, 1:05 PM

    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 Dec 17, 2009, 10:09 PM Dec 17, 2009, 10:04 PM

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

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

      1 Reply Last reply Reply Quote 0
      • Z
        zar0ku1
        last edited by Dec 18, 2009, 3:53 AM

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

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

        1 Reply Last reply Reply Quote 0
        • R
          rubic
          last edited by Dec 18, 2009, 4:12 AM

          сдается, что 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 Dec 18, 2009, 4:58 AM

            @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 Dec 18, 2009, 5:50 AM

              странно, у меня тоже так было пока вот такое из 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 Dec 18, 2009, 11:05 PM

                @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 Dec 19, 2009, 5:39 AM

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

                  1 Reply Last reply Reply Quote 0
                  • Z
                    zar0ku1
                    last edited by Dec 19, 2009, 7:33 AM

                    @rubic:

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

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

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

                    1 Reply Last reply Reply Quote 0
                    • D
                      DasTieRR
                      last edited by Dec 20, 2009, 8:25 PM Dec 20, 2009, 12:03 PM

                      Спасибо за инструкцию, почти работает :) Можешь написать какие у тебя права (владелец и группа) на 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 Dec 21, 2009, 3:55 AM

                        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 Dec 21, 2009, 9:51 AM

                          версия 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 Dec 21, 2009, 12:09 PM

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

                            1 Reply Last reply Reply Quote 0
                            • Z
                              zar0ku1
                              last edited by Dec 21, 2009, 12:16 PM

                              @rubic:

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

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

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

                              1 Reply Last reply Reply Quote 0
                              • R
                                rubic
                                last edited by Dec 21, 2009, 12:37 PM

                                2zar0ku1
                                Дык..
                                @DasTieRR:

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

                                1 Reply Last reply Reply Quote 0
                                • D
                                  DasTieRR
                                  last edited by Dec 21, 2009, 1:51 PM

                                  На тестовой машине 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 Dec 21, 2009, 1:52 PM

                                    @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 Dec 23, 2009, 2:57 AM

                                      Вчера поставил все на 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 Dec 23, 2009, 2:02 PM

                                        в общем поставил вроде на 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 Jan 22, 2010, 5:41 PM

                                          Здравствуйте делал вроде все по инструкции 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.
                                            This community forum collects and processes your personal information.
                                            consent.not_received