Хотя сразу после установки и производится основная настройка шлюза, тем не менее для более функциональной работы (точный подсчёт входящего трафика, блокировка нежелаемого контента, переброс портов и т.д.) потребуется приложить ещё немного усилий.
Будем считать, что pfSense уже установлен на нашем шлюзе и проведена первичная настройка (пример: Установка pfSense )
Теперь, чтобы шлюз полностью оправдывал своё назначение желательно добавить проксисервер для сбора кэша и уменьшения web трафика, а так же хороший инструмент анализа данных трафика (разумеется мы желаем знать любимые злачные места пользователей дабы пресечь напрасную трату рабочего времени :) Для наших целей будем использовать связку Squid + Lightsquid.
Установка Squid + Lightsquid
Устанавливаются из набора пакетов.
Переходим в раздел System -> Packages, открываем вкладку Available Packages
Устанавливаем squid (Stable 2.7.9 pkg v.4.3.3) и затем Lightsquid (RC1 1.8.2 pkg v.2.33)
Настраиваем squid:
Переходим в раздел Service-> Proxy server и проверяем значения
Настраиваем Lightsquid:
Status – Proxy Report, вкладка Settings
Жмем кнопку Save, а потом RefreshFull
Статистика станет доступна на вкладке Lightsquid Report (по адресу: https://192.168.1.1/lightsquid/index.cgi )
Таким образом мы настроили сбор, обработку и документирование данных по трафику HTTP (80 порт). Но разумеется это не весь трафик, а зачастую лишь малая его часть. Помимо различных соединений файловыми хранилищами, почтовыми сервисами и интернет пейджерами (ICQ, Skype и т.д.) уже многие сайты переходят на работу по защищенному соединению HTTPS (443 порт). Разумеется благоразумно учитывать и эту часть трафика.
Оптимальным для посчёта трафика по всем портам является IPCAD, который в свою очередь будет интегрировать свои данные в общий отчёт, формируемый в предыдущем пункте.
Установка ipcad
Для дальнейшей работы потребуется открыть к pfSense доступ по SSH. Для этого заходим в WEB-интерфейс в раздел System -> Advanced и устанавливаем галочку в пункте "Enable Secure Shell", после чего сохраняем конфигурацию.
Теперь воспользуемся для доступа к шлюзу по SSH программой WinSCP (с помощью неё мы одновременно получим доступ и к командной строке шлюзе и к его файловой системе). Для подключения вводим IP шлюза. После установки соединения принимаем новый сертификат безопасности и вводим логин root и пароль.
Скачиваем
и закачиваем в файловую систему шлюза в каталог /usr/bin и задаём ему права 0555. Данный файл потребуется для импорта статистики ipcad в общий отчёт.После этого в WinSCP открываем кансоль (Commands - Open Terminal) и устанавливаем необходимый для работы пакет:
pkg_add -r compat6x-i386
и после этого устанавливаем собственно ipcad:
pkg_add -r ipcad
При использовании релиза Pfsense 2.1.5 установка compat6x не требуется.
Кроме того ipcad отсутствует в основном репозитории, поэтому для установки воспользуйтесь командой:
pkg_add -r ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/amd64/8.3-RELEASE/packages/Latest/ipcad.tbz
или
pkg_add -r ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/i386/8.3-RELEASE/packages/Latest/ipcad.tbz
в зависимости от релиза (32 или 64 - битного)
Конфигурирование ipcad.
Переходим в каталог /usr/local/etc и переименовываем файла ipcad.conf.default в ipcad.conf - это файл конфигурации.
Редактируем ipcad.conf:
В секции GLOBAL OPTIONS устанавливаем:
capture-ports enable;
В секции INTERFACE OPTIONS удаляем все строки interface не закрытые символом комментария # и вставляем на их место строку вида:
interface em1 filter "ip and dst net 192.168.1.0/24 and not src net 192.168.1.0/24 and not src port 80";
Здесь em1 - имя LAN интерфейса - то, что вы видите в GUI вашего pfSense (Status - Interfaces). Соответственно, 192.168.1.0/24 - наша LAN подсеть. 80 - порт, с которого пользователи получают http-трафик в случае прозрачного поркси - 80 (если непрозрачного прокси - значение Proxy port в Services - Proxy server - General GUI pfSense (по умолчанию - 3128).
Эта строка предписывает ipcad собирать статистику пакетов попадающих в локальную сеть извне (из интернет) на LAN-интерфейсе. При этом в статистику не должны попадать пакеты от squid т.к. он сам отразит их статистику в своем логе.
В подсекции aggregate <ip>/<masklen>... прописываем:
aggregate 192.168.1.0/24 strip 32; /* Don't aggregate internal range */
aggregate 0.0.0.0/0 strip 32; /* Don't! Aggregate external networks */
Таким образом прописываем нашу локальную подсеть и устанавливаем опцию strip в значение 32 - мы хотим знать все о каждом локальном IP. То же относится и к подсети 0.0.0.0/0 - хотим видеть каждый внешний IP.
Ниже в подсекции aggregate <port_range_start>[-<port_range_end>]... группируем порты, чтобы статистика не была переполнена портами схожими по назначению, но разными по номеру.
aggregate 3128 into 0;
aggregate 80-81 into 0;
aggregate 20-21 into 21;
aggregate 22-23 into 22;
aggregate 25 into 25;
aggregate 26-109 into 26;
aggregate 110 into 110;
aggregate 111-142 into 111;
aggregate 143 into 143;
aggregate 144-442 into 144;
aggregate 443 into 443;
aggregate 444-992 into 444;
aggregate 993 into 993;
aggregate 994 into 994;
aggregate 995 into 995;
aggregate 996-65535 into 65535;
Переходим в секцию RSH SERVER OPTIONS и приводим RSH access rules к следующему виду:
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 */
В секции OTHER OPTIONS устанавливаем:
chroot=/var/log/ipcad;
memory_limit = 10m;
Сахраняем и закрываем файл ipcad.conf
В каталоге /var/log pfSense создаем подкаталог ipcad. В нем будут лежать ipcad.dump и ipcad.pid (их создавать не надо).
Перенос статистики ipcad в лог squid:
В каталоге /root pfSense создаем файл tolog.sh с првами 0755 и следующим содержимым:
rez2=""
iptoname ()
{
rez2=$1
REZ=$(/usr/bin/dig -x $1 +short)
if [ -z $REZ]
then
{
}
else
{
rez2=$REZ
}
fi
}
net="192.168.1"
ttime=`/usr/bin/rsh localhost sh ip acco | /usr/bin/grep 'Accounting data saved' | /usr/bin/awk '{print ($4)}'`
/usr/bin/rsh localhost clear ip accounting
/usr/bin/rsh localhost 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
else
fi
done < /root/tolog.txt
exit 0
Сверяемся с нашими значениями net подсети (192.168.1 в нвшем случае) и место хранения логов squid (в нашем случае /var/squid/logs/). Подсмотреть этот путь можно в поле Log store directory (Services - Proxy server - General) GUI pfSense.
Запуск ipcad и выгрузка логов:
Открываем для редактирования файл /cf/conf/config.xml. В самом начале, перед закрывающим тэгом </system> добавляем строчку:
<shellcmd>/usr/local/bin/ipcad -rds</shellcmd>
Это запуск ipcad при старте системы. Далее, ближе к концу файла находим конец секции </cron> и вставляем перед ним следующее:
<item>
<minute>*/1</minute>
<hour>*</hour>
<mday>*</mday>
<month>*</month>
<wday>*</wday>
<who>root</who>
<command>/root/tolog.sh</command>
</item>
Это поминутный сброс статистики ipcad в лог squid. Сохраняем и закрываем config.xml, удаляем файл /tmp/config.cache.
В общем-то это - все, перезагружаем pfSense!
В итоге получим нечто подобное:
Использовался материал из статей:
2.1.5-RELEASE (i386)
built on Mon Aug 25 07:44:26 EDT 2014
FreeBSD 8.3-RELEASE-p16 )
Squid + Lightsquid стоит давно и отлично работает, логи lightsquid здесь (Log store directory) /var/sqid/log. все прописал как надо.
pkg_add -r ftp-archive.freebsd.org/.../.. .
установил. Но в логах новых соединений не появилось...
built on Mon Aug 25 07:44:26 EDT 2014
FreeBSD 8.3-RELEASE-p16
You are on the latest version.
REZ=$(/usr/bin/ dig -x $1 +short)
поправить на:
REZ=$(/usr/pbi/bin/dig -x $1 +short)
Были проблемы с скриптом tolog.sh, но
сейчас работает успешно в 2.2.4
нужен пакет: pkg install bind-tools
а так же для дистрибутива x64 нужен другой rsh www.dropbox.com/.../rsh?dl=0
0) Logout (SSH only) Shell
1) Assign Interfaces 9) pfTop
2) Set interface(s) IP address 10) Filter Logs
3) Reset webConfigurator password 11) Restart webConfigurator
4) Reset to factory defaults 12) pfSense Developer Shell
5) Reboot system 13) Upgrade from console
6) Halt system 14) Disable Secure Shell (sshd)
7) Ping host 15) Restore recent configuration
Нужно только, чтобы было разрешено подключение через SSH (это можно сделать через WEB-интерфейс).
Для подключения в winSCP указываем IP адрес pfSense и после удачного подключения - авторизуемся (вводим имя пользователя и пароль).
(чтобы было понятнее - подключение через winSCP происходит по сети по порту SSH)
по идее достаточно только включенного Secure Shell Server, остальное лучше не трогать ...
Действительно - логиниться в winSCP нужно через root :)