ИНСТРУКЦИЯ - Статистика трафика (ipcad+lightsquid, без squid)



  • Инструкция по настройке сбора статистики в pfSense с помощью ipcad и lightsquid (без прокси сервера Squid)

    0. Зачем это нужно?
    Есть известная проблема Squid'а при MultiWAN'е; При запуске прокси сервера, Squid весь трафик пускает по Default Gateway; Решаемо, но если у вас в Firewall'е прописано много правил - настройка может оказаться весьма запутанной, а может быть вам просто не хочется заморачиваться со всем этим и тогда эта инструкция для вас.

    1. Версия pfSense
    Я настраивал на 2.3.2-RELEASE (amd64), вы можете выбрать другую версию и разрядность.

    2. Установка Squid и Lightsquid
    Здесь всё просто: переходим в "System" —› "Package Manager" —› вкладка "Available Packages" —› находим "squid" —› и "Install";
    Аналогично устанавливаем "Lightsquid", "Cron" и "Shellcmd".

    3. RSH для экспорта статистики ipcad
    Если у вас еще не установлено разрешение на подключения по SSH, сделайте это через "System" —› "Advanced" —> вкладка "Admin Access" —› поставьте checkbox на "Enable Secure Shell"; Также желательно изменить "SSH port" (к примеру на 10022), т.к. возможно кто-то в локальной сети будет использовать популярный 22 порт при подключении через SSH и его не будет пропускать через pfSense.
    Установите программу SFTP клиент, например WinSCP и подключайтесь используя root@192.168.5.1, где 192.168.5.1 - IP адрес pfSense и пароль администратора.

    Скачайте RSH (amd64, i386) и поместите его в каталог "/usr/bin/". Назначьте файлу разрешения 0555. Не перепутайте виды RSH, для 32-битной версии pfSense не подойдет 64-битный RSH, и наоборот.

    4. Установка ipcad
    Возможно есть другие способы, но для меня подошел именно этот:
    · Скачиваете "ipcad"
    Для amd64: http://pkg.freebsd.org/freebsd:10:x86:64/latest/All/ipcad-3.7.3_2.txz
    Для i386: http://pkg.freebsd.org/freebsd:10:x86:32/latest/All/ipcad-3.7.3_2.txz
    и кладёте его в "/home/" с помощью WinSCP (или другого SFTP менеджера)
    (Если вы работаете с более новой/старой сборкой FreeBSD-pfSense, тогда вам следует узнать свою версию сборки FreeBSD, сделать это вы можете в "Status" ->"DashBoard" в Виджете "System Information" в строке "Version" например '2.4.2-RELEASE (amd64) FreeBSD 11.1-RELEASE-p4'; Следовательно, вам нужно скачать пакет ipcad из соответствующей ftp папки сайта http://pkg.freebsd.org/ ; Благо там все "по полочкам" расположенно и все остальые пути остаются такими же /latest/All/ipcad-3.7.3_2.txz)
    · Входим в shell (кто не знает, вы можете скачать программу PUTTY и соединиться с вашим pfSense введя в "Host name" root@192.168.5.1 [IP адрес вашего pfSense] и порт [если вы изменили его в третьем шаге, не забудьте указать измененное значение]), вводим пароль и после загрузки жмем "8") Shell
    · Далее даём команду: pkg add /home/ipcad-3.7.3_2.txz
    · И: pkg install /home/ipcad-3.7.3_2.txz

    5. Конфигурация ipcad
    Находим файл "/usr/local/etc/ipcad.conf" (создайте, если его нет) и заменяем содержимое следующим:

    
    capture-ports enable;
    
    ## buffers = 64k;
    
    interface alc0 filter "ip and dst net 192.168.5.0/24 and not src net 10.0.0.0/8 and not 172.16.0.0/12 and not 192.168.0.0/16";
    
    aggregate 10.0.0.0/8 strip 32; 	/* Don't aggregate internal range */
    aggregate 172.16.0.0/12 strip 32;	/* Don't aggregate internal range */
    aggregate 192.168.0.0/16 strip 32; /* Don't aggregate internal range */
    aggregate 0.0.0.0/0 strip 32;	/* Don't aggregate external networks */
    
    #aggregate 1024-65535	into 65535;	/* Aggregate wildly */
    #aggregate 3128-3128	into 3128;	/* Protect these ports */
    #aggregate 150-1023	into 1023;	/* General low range */
    
    # netflow export destination 127.0.0.1 9996;
    netflow export version 5;	# NetFlow export format version {1|5}
    netflow timeout active 30;	# Timeout when flow is active, in minutes
    netflow timeout inactive 15;	# Flow inactivity timeout, in seconds
    netflow engine-type 73;		# v5 engine_type; 73='I' for "IPCAD"
    netflow engine-id 1;		# Useful to differentiate multiple ipcads.
    
    netflow ifclass eth mapto 0-99;		# i.e., "eth1"->1, "eth3"->3
    netflow ifclass fxp mapto 0-99;		# i.e., "fxp4"->4, "fxp0"->0
    netflow ifclass ppp mapto 100-199;	# i.e., "ppp32"->532, "ppp7"->507
    netflow ifclass gre mapto 200-299;
    netflow ifclass tun mapto 300-399;	# i.e., "tun0"->300
    
    rsh enable at 127.0.0.1;
    
    rsh root@127.0.0.1 admin;	/* Can shutdown ipcad */
    rsh root@127.0.0.1 backup;	/* Can dump/restore/import accounting table */
    rsh root@127.0.0.1;		/* Can view and modify accounting tables */
    rsh 127.0.0.1 view-only;	/* Other users can view current tables */
    
    rsh ttl = 3;
    
    rsh timeout = 30;
    
    dumpfile = ipcad.dump;	# The file is inside chroot(), see below...
    
    chroot = /var/ipcad;
    pidfile = ipcad.pid;
    
    # uid = 65534;
    # gid = 65534;
    
    memory_limit = 10m;
    
    

    Нужно заменить данные в строке interface alc0 filter "ip and dst net 192.168.5.0/24 and not src net 10.0.0.0/8 and not 172.16.0.0/12 and not 192.168.0.0/16";
    Где alc0 — название вашего LAN интерфейса (можно узнать в "Status" —› "Interfaces") и 192.168.5.0/24 — ваша LAN сеть, через которую у пользователей есть выход в интернет. —› Сохраняем, закрываем.

    6. Создаём каталог "/var/ipcad" и даем ему права 0755

    7. Создаем файл в каталоге "/usr/local/sbin/tolog.sh", следующего содержания:
    (важно! Используйте внутренний редактор WinSCP или подобный аналог, т.к. наблюдались случаи, когда Win-редакторы добавляли лишние символы)

    
    #!/bin/sh
    rez2=""
    #REZ="q"
    iptoname ()
    {
    rez2=$1
    REZ=$(/usr/local/bin/dig @192.168.5.1 -x $1 +short)
    # dig @ use your DNS server 
    # echo "REZ - $REZ - $1"
    if [ -z $REZ]
    then
    {
    # echo
    }
    else
    {
    rez2=$REZ
    }
    fi
    }
    
    net="192.168.5"
    #net = your local net 
    ttime=`/usr/bin/rsh 127.0.0.1 sh ip acco | /usr/bin/grep 'Accounting data saved' | /usr/bin/awk '{print ($4)}'`
    /usr/bin/rsh 127.0.0.1 clear ip accounting
    /usr/bin/rsh 127.0.0.1 show ip accounting checkpoint | /usr/bin/grep $net > /root/tolog.txt
    
    while read p1 p2 p3 p4 p5 p6 p7 p8
    do
    #
    if [ "$p5" != "0" ]
    then
    rez2=""
    iptoname "$p1"
    echo "$ttime.000" 1 $p2 "TCP_MISS/200" $p4 "CONNECT" $rez2:"$p5 "-" "DIRECT/"$p1" -"" >>/var/squid/logs/access.log
    # echo "$vtime.000" 1 $p2 "TCP_MISS/200" $p4 "CONNECT" $rez2:"$p5 "-" "DIRECT/"$p1" -"" >>/var/squid/logs/access.log
    else
    fi
    done < /root/tolog.txt
    chown proxy:proxy /var/squid/logs/access.log
    
    exit 0
    
    

    заменяем "192.168.5.1" на подходящий вам DNS сервер; net="192.168.5" — на вашу LAN сеть;
    В некоторых примерах используется localhost, вместо 127.0.0.1, у меня работало с большими задержками поэтому я поменял на 127.0.0.1.
    Обязательно устанавливаем права 0755 на файл tolog.sh.

    Также проверьте, существует ли файл "/usr/local/bin/dig" если его нет, в "Shell" выполните следующую команду: pkg install bind-tools

    Также проверьте путь "/var/squid/logs/access.log", нужно указать тот путь, который указан в настройках "Services" —› "Squid Proxy Server" —› "Log Store Directory"

    8. Переходим в меню "Services -> Squid Proxy Server", переходим во вкладку "Local Cache", заполняем: "Hard Disk Cache Size" - "1024" и жмем "Save";
    Далее, на вкладке "General" заполняем: "Proxy Interface(s) - Выбираем LAN и Loopback", также "Enable Access Logging - Галочка";
    Далее, меню "Status -> Squid Proxy Reports": "Refresh Scheduler"- 10min", "Save"

    9. В разделе "Services" —› "Shellcmd" создаём новую команду типа shellcmd:
    /usr/local/bin/ipcad -rds
    Это запуск ipcad при старте системы. Также, выполните её в shell'е, посмотрите, нет ли ошибок.

    10. В разделе "Services" —› "Cron" создаём новое задание для поминутного запуска tolog.sh:

    */1  *  *  *  *  root  /usr/local/sbin/tolog.sh

    11. Перезагружаем pfSense, ждем указанные нами 10 минут.

    12. После этого переходим в "Status" —› "Squid Proxy Reports", нажимаем на "Open Lightsquid" и можно начать смотреть статистику. Если данных долго нет, проверьте есть ли в файле "/var/squid/logs/access.log" записи с пометкой "CONNECT", если их нет, значит пройдите по списку еще раз.

    13. Переходим в каталог "/usr/local/etc/lightsquid/"
    тут мы имеем два интересных файла "skipuser.cfg" и "realname.cfg"; В первом можно указать IP-адреса пользователей которых не нужно учитывать в статистике, а во втором можно прописать имена соответственные каждому IP в вашей сети.

    14. На этом настройка сбора статистики трафика в pfSense завершена :) надеюсь, что у вас всё получилось. При написании данной инструкции использовалась статья уважаемого rubic



  • Супер.
    Спасибо!



  • Нормально! молодца.
    вопрос, а чем сам сквид не угодил? что ты решил без него статистику собирать?



  • @NegoroX:

    Нормально! молодца.
    вопрос, а чем сам сквид не угодил? что ты решил без него статистику собирать?

    :) ;) Благодарю! Squid не угодил тем, что он всё пускает по 'Default Gateway', а при использовании двух и более (Gateway Groups, MultiWAN-ах) это не приемлемо:)



  • :D https://forum.pfsense.org/index.php?topic=117432.0 — упрощенная английская версия.



  • @xpaco:

    2. Установка Squid и Lightsquid
    Здесь всё просто: переходим в "System" —› "Package Manager" —› вкладка "Available Packages" —› находим "squid" —› и "Install";
    Аналогично для "Lightsquid", "Cron" и "Shellcmd".

    Shellcmd не нужен.

    4. Установка ipcad
    Возможно есть другие способы, но для меня подошел именно этот:

    я просто делал pkg install ipcad.

    8. В разделе "Services" —› "Shellcmd" создаём новую команду типа shellcmd:
    /usr/local/bin/ipcad -rds
    Это запуск ipcad при старте системы.

    это тоже не нужно - пакет при установке создаёт скрипт запуска в /usr/local/etc/rc.d/ipcad - переименовываем его в .sh и пишем туда ipcad_enable="YES".

    кстати твой скрипт tolog у меня работал раз в 10 медленнее скрипта из оригинальной статьи - постоянно  писал в консоль "[:missed]" или что-то вроде того - не в курсе что это может быть? такая фигня началась после установки bind-tools, до этого он айпишники в лог клал молча.

    10. Перезагружаем pfSense, ждем 10 минут (логи обрабатываются каждые 10 минут)

    это ты с чего взял вообще? у меня например каждые 2ч, так что не нужно ничего ждать:

    /usr/bin/perl /usr/pbi/lightsquid-amd64/local/www/lightsquid/lightparser.pl today

    максимум минуту - если влом статистику самому в лог скинуть.



  • @hvac14400:

    @xpaco:

    2. Установка Squid и Lightsquid
    Здесь всё просто: переходим в "System" —› "Package Manager" —› вкладка "Available Packages" —› находим "squid" —› и "Install";
    Аналогично для "Lightsquid", "Cron" и "Shellcmd".

    Shellcmd не нужен.

    4. Установка ipcad
    Возможно есть другие способы, но для меня подошел именно этот:

    я просто делал pkg install ipcad.

    8. В разделе "Services" —› "Shellcmd" создаём новую команду типа shellcmd:
    /usr/local/bin/ipcad -rds
    Это запуск ipcad при старте системы.

    это тоже не нужно - пакет при установке создаёт скрипт запуска в /usr/local/etc/rc.d/ipcad - переименовываем его в .sh и пишем туда ipcad_enable="YES".

    1, 3) Да, можно и так запускать, но по инструкции было описан запуск через Shellcmd.

    1. IPCAD устанавливал так, потому, что на версии 2.3.2 RELEASE этот пакет у меня не доступен (выдает: "pkg: No packages available to install matching 'ipcad' have been found in the repositories"), по не известным мне причинам.

    кстати твой скрипт tolog у меня работал раз в 10 медленнее скрипта из оригинальной статьи - постоянно  писал в консоль "[:missed]" или что-то вроде того - не в курсе что это может быть? такая фигня началась после установки bind-tools, до этого он айпишники в лог клал молча.

    Медленней он, может быть потому, что скрип, в отличии от описанного в инструкции Rubic'а, пытается преобразовывать айпи адреса в человеку понятные домены. А может дело в "127.0.0.1" вместо "localhost".

    10. Перезагружаем pfSense, ждем 10 минут (логи обрабатываются каждые 10 минут)

    это ты с чего взял вообще? у меня например каждые 2ч, так что не нужно ничего ждать:

    /usr/bin/perl /usr/pbi/lightsquid-amd64/local/www/lightsquid/lightparser.pl today

    максимум минуту - если влом статистику самому в лог скинуть.

    Из 11 пункта: "Status"—› "Squid Proxy Reports" —› "Refresh Scheduler", у меня была указанна обработка каждые 10 минут (макс.значение), поэтому и 10 минут ожидание.



  • @xpaco:

    1, 3) Да, можно и так запускать, но по инструкции было описан запуск через Shellcmd.

    видимо во времена написания инструкции пакет ipcad не прописывал себя в автостарт.

    кстати твой скрипт tolog у меня работал раз в 10 медленнее скрипта из оригинальной статьи - постоянно  писал в консоль "[:missed]" или что-то вроде того - не в курсе что это может быть? такая фигня началась после установки bind-tools, до этого он айпишники в лог клал молча.

    Медленней он, может быть потому, что скрип, в отличии от описанного в инструкции Rubic'а, пытается преобразовывать айпи адреса в человеку понятные домены. А может дело в "127.0.0.1" вместо "localhost".

    он в консоль писал примерно 2 раза в секунду - не может же так медленно nslookup работать?



  • Все недоумевал почему в топике "без squid", а по факту он установлен. Исключил shellcmd и squid. Все прекрасно работает. Автору сей темы респект.



  • А подскажите как тоже самое сделать только на два Lan интерфейса?



  • Ссылки на RSH мёртвые. Кто-то может перезалить?



  • amd64

    rsh.zip



  • Автор, респект. Только 1й пост или шапку отредактируй, ибо не ясно, нужен или нет сквид.
    P.s. я так и не понял как без сквида лог собирать, если сквид его создает, а ipcad его только дополняет. Разъясните, что я упустил.



  • @unKn0wn:

    Ссылки на RSH мёртвые. Кто-то может перезалить?

    Для i386 - https://yadi.sk/d/ic8yiQKe3GSvRd
    (выше дали для amd64, нужно только залогиниться на форуме [это так, для будущих поколений, а то могут не увидеть :)])



  • Здравствуйте! спасибо  за инструкцию.
    Делал  многое по первому посту и все как бы-завелось с первого раза, но  костылей наловил  и не могу разобраться по сей день.
    Прошу помощи.
    Имею
    2.3.3-RELEASE-p1 (amd64)
    built on Thu Mar 09 07:17:41 CST 2017
    FreeBSD 10.3-RELEASE-p17

    установлены пакеты
    squid                         www 0.4.36_2
    Lightsquid                 www 3.0.6_2
    Cron                                 sysutils 0.3.7_1
    Shellcmd                         sysutils 1.0.2_3
    openvpn-client-export security 1.4.2_1

    "Костыли!" (они же проблемы)
    Каждй день    падете  СКВИД  в одно  и тоже время  0:00

    Apr 11 00:00:00 (squid-1) Cannot open stdio:/var/squid/logs/access.log: (13) Permission denied
    Apr 11 00:00:03 (squid-1) Cannot open '/var/squid/logs/access.log' for writing. The parent directory must be writeable by the user 'squid', which is the cache_effective_user set in squid.conf.
    Apr 11 00:00:06 (squid-1) Cannot open '/var/squid/logs/access.log' for writing. The parent directory must be writeable by the user 'squid', which is the cache_effective_user set in squid.conf.
    Apr 11 00:00:09 (squid-1) Cannot open '/var/squid/logs/access.log' for writing. The parent directory must be writeable by the user 'squid', which is the cache_effective_user set in squid.conf.
    Apr 11 00:00:12 (squid-1) Cannot open '/var/squid/logs/access.log' for writing. The parent directory must be writeable by the user 'squid', which is the cache_effective_user set in squid.conf.
    Apr 11 00:00:15 (squid-1) Cannot open '/var/squid/logs/access.log' for writing. The parent directory must be writeable by the user 'squid', which is the cache_effective_user set in squid.conf.
    Apr 11 00:00:48 Squid_Alarm 84671 Squid has exited. Reconfiguring filter.
    Apr 11 00:00:48 Squid_Alarm 84909 Attempting restart…
    Apr 11 00:00:51 Squid_Alarm 94391 Reconfiguring filter...
    Apr 11 00:00:51 check_reload_status Reloading filter
    Apr 11 00:00:52 php-fpm 86358 /rc.filter_configure_sync: [squid] Installed but not started. Not installing 'nat' rules.
    Apr 11 00:00:52 php-fpm 86358 /rc.filter_configure_sync: [squid] Installed but not started. Not installing 'pfearly' rules.
    Apr 11 00:00:52 php-fpm 86358 /rc.filter_configure_sync: [squid] Installed but not started. Not installing 'filter' rules

    п.с.  задачи  CRONA

    1,31 0-5 * * * root /usr/bin/nice -n20 adjkerntz -a
    1 3 1 * * root /usr/bin/nice -n20 /etc/rc.update_bogons.sh
    */60 * * * * root /usr/bin/nice -n20 /usr/local/sbin/expiretable -v -t 3600 sshlockout
    */60 * * * * root /usr/bin/nice -n20 /usr/local/sbin/expiretable -v -t 3600 webConfiguratorlockout
    1 1 * * * root /usr/bin/nice -n20 /etc/rc.dyndns.update
    */60 * * * * root /usr/bin/nice -n20 /usr/local/sbin/expiretable -v -t 3600 virusprot
    30 12 * * * root /usr/bin/nice -n20 /etc/rc.update_urltables
    */1 * * * * root /usr/local/sbin/tolog.sh
    0 0      * * * root /usr/local/sbin/squid -k rotate -f /usr/local/etc/squid/squid.conf
    15 0 * * * root /usr/local/pkg/swapstate_check.php
    */10 * * * * root /usr/local/bin/perl /usr/local/www/lightsquid/lightparser.pl today
    15 0 * * * root /usr/local/bin/perl /usr/local/www/lightsquid/lightparser.pl yesterday

    Хелп  Хелп



  • в файле "/usr/local/sbin/tolog.sh исправь так

    chown squid:proxy /var/squid/logs/access.log

    у меня заработала, но после были обновления на прокси
    и так все заработала..



  • @shux:

    в файле "/usr/local/sbin/tolog.sh исправь так

    chown squid:proxy /var/squid/logs/access.log

    у меня заработала, но после были обновления на прокси
    и так все заработала..

    Хм…  у меня владелец было proxy заменил на root  все  заработало
    п.с.
    не подскажите где  находится файл .htaccess парсера lightsquid
    хотел и сделать  авторизацию по ip
    1)  поменять  пароль  admin,  a точнее его  убрать вовсе
    2)  хотелось бы что бы открывалась  страничка статистики  по ip
    ну например  пользователь  ip 192.168.0.12  открывает в браузере страницу https://192.168.0.1:7445/user_detail.cgi?user=192.168.0.12 статистики lightsquid 
    3)  ну  или  хотя бы что бы  что бы авторизация была по  ip из  диапазона сети

    п.с.  У меня прозрачный прокси,  но  я не вижу  в отчете статистике по youtube и т.п. ???
    может из-за того, что  в настройках Proxy Server: General Settings/General 
    не  включено
    HTTPS/SSL Interception      Enable SSL filtering.



  • @aas03:

    А подскажите как тоже самое сделать только на два Lan интерфейса?

    #!/bin/sh
    rez2=""
    #REZ="q"
    iptoname ()
    {
    rez2=$1
    REZ=$(/usr/local/bin/dig @171.1.0.20 -x $1 +short)

    dig @ use your DNS server

    echo "REZ - $REZ - $1"

    if [ -z $REZ]
    then
    {

    echo

    }
    else
    {
    rez2=$REZ
    }
    fi
    }

    net="192.168.0"
    net1="192.168.2"
    net2="11.10.10"
    net3="11.10.2"
    net4="11.10.3"
    net5="11.10.4"
    net6="11.10.11"
    net7="11.10.12"
    net8="11.10.13"
    net9="1.110.14"
    net10="11.11.2"

    #net = your local net
    ttime=/usr/bin/rsh 127.0.0.1 sh ip acco | /usr/bin/grep 'Accounting data saved' | /usr/bin/awk '{print ($4)}'
    /usr/bin/rsh 127.0.0.1 clear ip accounting
    /usr/bin/rsh 127.0.0.1 show ip accounting checkpoint | /usr/bin/grep -e $net -e $net1 -e $net2 -e $net3 -e $net4 -e $net5 -e $net6 -e $net7 -e $net8 -e $net9 -e $net10 > /root/tolog.txt

    while read p1 p2 p3 p4 p5 p6 p7 p8
    do

    if [ "$p5" != "0" ]
    then
    rez2=""
    iptoname "$p1"
    echo "$ttime.000" 1 $p2 "TCP_MISS/200" $p4 "CONNECT" $rez2:"$p5 "-" "DIRECT/"$p1" -"" >>/var/squid/logs/access.log

    echo "$vtime.000" 1 $p2 "TCP_MISS/200" $p4 "CONNECT" $rez2:"$p5 "-" "DIRECT/"$p1" -"" >>/var/squid/logs/access.log

    else
    fi
    done < /root/tolog.txt
    chown proxy:proxy /var/squid/logs/access.log

    exit 0



  • Коллеги, а как вы боретесь с тем, что в лог ipcad попадает не полная информация?
    Например, пользователь посетил страницу www.vesti.ru/doc.html?id=2742518 , а в логе видно только ip адрес и порт 80.

    Можно как-то что-то настроить, чтобы в лог писались полные адреса?