Страницы

14 марта 2017 г.

pfSense. Учет трафика

В настоящее время безлимитные интернет тарифы получили широкое распространение, но несмотря на это учет трафика все еще является актуальной задачей. 
В инструкции, для решения задачи учета трафика применяется сервис Squid, который ведет лог обращений к сайтам и ipcad, который будет прослушивать интерфейс смотрящий в локальную сеть и собирать статистику на нем, для большей детализации трафика. В качестве генератора отчетов будет использоваться Lightsquid, умеющий обрабатывать логи и строить наглядные отчеты.
Инструкция не претендует на оригинальность и собрана из множества имеющихся в сети, учтены многие неработающие моменты.

Настройка Squid + Lightsquid

Установить необходимые пакеты.
Перейти в меню System -> Packages -> Available Packages
Используя поиск найдите и установите нужные пакеты

Найти и установить пакет squid (на момент написания версия 0.4.35_3). Squid - программный пакет, реализующий функцию кэширующего прокси-сервера для протоколов HTTP, FTP, HTTPS.
Найти и установить пакет Lightsquid (на момент написания версия 3.0.6). Lightsquid - анализатор (парсер) логов сервиса Squid.

Установлены пакеты Squid и Lightsquid
Настройка Squid 
Перейти в меню Services -> Squid Proxy Server
На вкладке "Local Cache" заполнить поля как показано ниже:


Значение реквизита "Hard Disk Cache Size" указать на свое усмотрение. Я указал "1024".


Далее, на вкладке "General" заполнить поля как показано ниже:
 




Настройка Lightsquid 
Перейти в меню Status -> Squid Proxy Reports.
Заполнить поля как указано ниже.



В своем случае для ассоциации пользователей я буду использовать IP адреса (Параметр "IP Resolve Method" установим "IP").
Чтобы в отчётных данных фигурировали не только IP адреса потребителей трафика но и описание (например ФИО) - нужно их задать. Поскольку IP адреса у пользователей в моем примере фиксированные, то для ассоциации клиентов потребуется просто отредактировать файл realname.cfg, который находится в /usr/local/etc/lightsquid/
Для изменения конфигурационных файлов в pfsense удобно пользоваться надстройкой Diagnostics -> Edit File.

Параметр "Refresh Sheduler", отвечающий за периодичность сбора, не рекомендуется устанавливать чаще 10 минут на слабых компьютерах.

Просмотр отчетов
Перед тем как смотреть отчеты нужно открыть несколько сайтов (чтобы было что смотреть), а затем выгрузить свежие данные кнопкой "RefreshFull" в Squid Proxy Reports.
Страница статистики будет доступна по нажатию  кнопки "Open Lightsquid" или по адресу https://<ip pfsense>:7445

Если на странице не отображаются данные о статистике, а все настроено верно - значит данных ещё нет и нужно подождать некоторое время (дождитесь очередного обновления (10 минут согласно настройки).
Когда данные будут, появится что-то вроде этого:
Статистика за месяц. Пока тут только один день. 
Статистика за день по пользователям
и куда ходил пользователь
Как видим, Squid работающий в связке с Lightsquid позволяет получить представление о расходе трафика, но как вы наверное заметили в этих отчетах отражен далеко не весь трафик.
Для устранении этого недостатка установим ipcad (IP Cisco Accounting Daemon), который будет прослушивать интерфейс смотрящий в локальную сеть и собирать статистику на нем. И затем с помощью скрипта, будем опрашивать ipcad и помещать статистику в лог Squid.

Настройка ipcad

Для удобного доступа к файлам pfSense нужно разрешить SSH и установить на компьютере WinSCP или Filezilla или другой SFTP менеджер).

В Pfsense перейти в меню System -> Packages -> Available Packages и установить пакеты Cron и Shellcmd.

Скачать файл rsh (для amd64 и i386), который необходим для экспорта статистики ipcad, и поместть файл в каталог /usr/bin в pfSense. Назначить файлу разрешения 0555, выполнив  в каталоге /usr/bin команду chmod 0555 rsh

Скачать пакет ipcad-3.7.3_2 для amd64 и i386, поместить  его в каталог /home/
Войти в shell выбрав пункт "8" в консольном меню pfsense.
Выполнить команду: pkg add /home/ipcad-3.7.3_2.txz
И установить ipcad командой: pkg install /home/ipcad-3.7.3_2.txz

Файл конфигурации ipcad.conf можно взять тут. Скачать его и поместить в каталог /usr/local/etc pfSense.
Открыть ipcad.conf для редактирования.
В секции "INTERFACE OPTIONS" найти строку:
interface "em0" filter "ip and dst net 192.168.0.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 and (not tcp or tcp and not src port 80)";
Отредактировать строку в соответствии со своими предпочтениями. Например, у меня она будет иметь такой вид:
interface "em1" filter "ip and dst net 192.168.1.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 and (not tcp or tcp and not src port 80)";
Сохранить и закрыть файл ipcad.conf.
В этой строке:
em0 - это имя LAN интерфейса - то, как оно выглядит в Web интерфейсе pfSense (Status -> Interfaces). Например: "LAN interface (em0)".
192.168.0.0/24 - сеть LAN интерфейса. 80 - порт, с которого пользователи получают трафик от прокси. В случае прозрачного прокси - 80, в случае явного прокси - значение Proxy port в Services -> Proxy server -> вкладка General GUI pfSense (по умолчанию - 3128). Эта строка предписывает ipcad собирать статистику пакетов попадающих в локальную сеть извне (из интернет) на LAN интерфейсе. При этом в статистику не попадают пакеты от Squid (т.е. те, порт источника которых равен, например, 80 в случае прозрачного прокси) т.к. Squid сам отразит их в своем логе. Также в статистику не попадают пакеты из других локальных сетей (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) если такой трафик проходит через pfSense. В случае если Squid не привязан к обсчитываемому интерфейсу, необходимо опустить последнюю часть строки: "and (not tcp or tcp and not src port 80)" - весь трафик будет считать ipcad.

В случае, если у вас два LAN интерфейса, трафик на которых нужно обсчитывать, то в секции "INTERFACE OPTIONS" добавьте еще одну строку конфигурации.
Например:
interface "em1" filter "ip and dst net 192.168.1.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 and (not tcp or tcp and not src port 80)";
interface "ath0" filter "ip and dst net 192.168.2.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 and (not tcp or tcp and not src port 80)";

Создать каталог /var/ipcad в pfSense, дать ему права 0755.
В нем будут впоследствии созданы файлы ipcad.dump и ipcad.pid (создавать их вручную не надо).

Скрипт tolog.sh для переноса статистики ipcad в лог можно взять тут.
Скачать его и поместить в каталог /usr/local/sbin pfSense. Назначить файлу tolog.sh разрешения 0755.

В разделе Services -> Shellcmd в меню pfSense создать новую команду типа shellcmd для запуска ipcad при старте системы:
/usr/local/bin/ipcad -rds
Также выполнить её в консоли чтобы не перезагружать pfSense.

В разделе Services -> Cron в меню pfSense создать новое задание для поминутного запуска tolog.sh:
*/1   *   *   *   *   root   /usr/local/sbin/tolog.sh

Теперь в отчетах Lightsquid будет отражен весь трафик.

4 комментария:

  1. Хорошо было бы оставить ссылку на оригинал статьи: https://forum.pfsense.org/index.php?topic=117423.0

    ОтветитьУдалить
  2. А Вы пробовали по этой https://forum.pfsense.org/index.php?topic=117423.0 ссылке установить? Я пробовал, убил кучу времени. Мануал по ссылке работает только частично, тот что здесь полностью рабочий с адаптацией по мои нужды. Писал для себя.

    ОтветитьУдалить
  3. День добрый, скажите у Вас логи по 443 порту в файлик var/squid/logs/access.log пишутся? Если да, то как они там отображаются?

    ОтветитьУдалить
  4. Здравствуйте, а какой дистрибутив стоит у Вас если не секрет?

    ОтветитьУдалить