Личные инструменты

Подсчет трафика с помощью Squid и ipcad в pfSense 2.2

Материал из PFSenseDocs_ru

Перейти к: навигация, поиск
Данная статься принадлежит серии КАК.

Автор: rubic

Не смотря на широкое распространение безлимитных тарифов, подсчет интернет-трафика все еще является актуальной задачей для многих системных администраторов. Для решения этой задачи будем использовать связку Squid + ipcad. Что использовать в качестве генератора отчетов - не принципиально. Здесь для примера рассматривается Lightsquid.

Содержание

Общая схема

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

Предварительные требования

1) pfSense 2.2 установлен, настроен и имеет доступ в интернет

2) установлены и настроены пакеты pfSense: Squid, Lightsquid, Cron и Shellcmd

Порядок действий

Подготовка

1) Для удобного доступа к файлам pfSense разрешите SSH (см. Как разрешить доступ к pfSense по SSH) и установите на своем компьютере winscp. Для подключения используйте root@192.168.0.1, где 192.168.0.1 - IP адрес pfSense и пароль администратора.

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

Установка ipcad

1) В консоли pfSense установите утилиту управления пакетами FreeBSD pkg:

# pkg
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
[...]

2) Устанавите ipcad для чего последовательно выполните в консоли pfSense команды:

# pkg update
[...]

# pkg install ipcad
[...]

# rehash

Конфигурация ipcad

1) Скачайте файл конфигурации ipcad и поместите его в каталог /usr/local/etc pfSense (при необходимости замените существующий файл). Откройте ipcad.conf для редактирования.

2) В секции "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)";

Здесь em0 - имя LAN интерфейса - то, как оно вылядит в GUI 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.

3) Отредактируйте строку в соответствии с вашими настройками, сохраните и закройте файл ipcad.conf.

4) Создайте каталог /var/ipcad в pfSense. В нем будут находиться файлы ipcad.dump и ipcad.pid (их создавать не нужно).

Скрипт переноса статистики ipcad в лог Squid

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

При использовании Captive Portal, можно скачать этот скрипт. В этом случае в лог Squid попадет не только IP-адрес, но и имя пользователя из БД Captive Portal.

Запуск ipcad со стартом системы и поминутный запуск tolog.sh

1) В разделе Services > Shellcmd меню pfSense создайте новую команду типа shellcmd:

/usr/local/bin/ipcad -rds

для запуска ipcad при старте системы. Также выполните её в консоли чтобы не перезагружать pfSense.

2) В разделе Services > Cron меню pfSense создайте новое задание для поминутного запуска tolog.sh:

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

Проверка работы и интерпретация отчетов

Проверить работу установленной системы подсчета трафика можно наблюдая за логом Squid. Весь не проксируемый трафик будет отражен в нем характерными строками со словом "CONNECT...". Через некоторое время (после очередной перегенерации) в отчете Lightsquid можно наблюдать строки вида:

7 	203.0.113.1:443\tcp 	568 	141 650

Здесь 203.0.113.1 - IP адрес, с которого пришел трафик. 443 - порт, с которого пришел трафик (только для протоколов tcp, udp, sctp, dccp). tcp - имя транспортного протокола или его номер (например: #132) если для протокола нет RFC. В случае icmp после имени протокола в круглых скобках выводится тип и код из icmp пакета:

192.0.2.1\icmp(0:0) - echo reply
192.0.2.1\icmp(3:1) - host unreachable