5. Настройка прокси в pfSense

5. Настройка прокси в pfSense

Теперь нам нужно раздавать всем пользователям интернет через прокси сервер и вести учет посещаемых сайтов.

  • Как я определился ранее прокси сервер будет прозрачным
  • Статистика по трафику должна собираться по всем соединениям, а не только по http
  • Статистика должна отображаться в понятном виде — кто когда куда ходил и сколько оттуда скачал

 

1. Устанавливаем необходимые пакеты

  • Идём в WEB-интерфейс, System -> Packages -> вкладка Available Packages.
  • Устанавливаем пакеты Squid (не путать со Squid3!) и Lightsquid (для отображения статистики).
  • После успешной установки во вкладке Installed Packages должны появиться эти два пакета.

41

 

2. Теперь настроим Squid

  • Идём Services -> Proxy server
  • Выбираем сетевой интерфейс на котором будет работать прокси — это LAN
  • Ставим галочку Allow users on interface. По непроверенным данным если не поставить этот флажок, то к нашему прокси серверу можно будет подключиться через интернет. А нам это надо? Нет.
  • Ставим галку Transparent proxy
  • Ставим галку Enable logging. Это для того чтобы потом была возможность отображать статистику
  • Каталог хранения лог-файлов Log store directory должен остаться прежним (у меня он /var/squid/logs), эти логи будет использовать Lightsquid для отображения статистики
  • Значение параметра Log rotate я поставил 62. Делается это для автоматического архивирования старых лог-файлов. Статистика прокси-сервера смотрится только из актуального лог-файла, а не из архивного. Поэтому интервал ротации нужно брать столько дней, когда лог перестает быть актуальным для вас, например, 2 месяца, т.е. 62 дня.
  • Язык (Language) на котором будут отображаться сообщения для пользователей устанавливаем Russian-1251
  • Остальное оставляем неизменным, жмём Save

 42

 И еще пара интересных опций, которые работают только в режиме Transparent:

  1. Bypass proxy for these source IPs — сюда можно вписать список компьютеров локальной сети через разделитель ; которым разрешено ходить в обход прокси-сервера.
  2. Bypass proxy for these destination IPs — сюда можно вписать список внешних ресурсов через разделитель ; до которых все компьютеры локальной сети смогут ходить напрямую (не через прокси).

 

3. Теперь настроим доступ к логам Squid’а для Lightsquid’а.

  • Для этого в разделе Services -> Proxy server переходим во вкладку Access Control
  • В строке External Cache-Managers вписываем IP-адрес 127.0.0.1
  • Жмём Save

 

4. Настраиваем Lightsquid.

Для этого идём Status -> Squid Proxy Reports. Тут нам сразу бросается в глаза красная фраза IMPORTANT: …., не переживайте, всё что надо было сделать — мы сделали.

  • Устанавливаем Language в положение Russian
  • IP Resolve Method устанавливает в каком виде будет отображен каждый пользователь интернета в статистике. С этим параметром можете потом поиграться, но пока ставим Demo
  • Refresh sheduler — интервал обновления статистики. Чем меньше интервал, тем больше будет нагружен pfSense. На этапе настройки и отладки лучше установить минимально возможное значение — 10 мин, но затем лучше выбрать более рациональное значение, например, 60 мин.
  • Жмём Save, а после этого Refresh full

43

Система такая: Когда какой-нибудь пользователь входит в интернет весь его трафик заворачивается на порт Squid’а — 3128, который всю информацию по http записывает в log-файл: /var/squid/logs/access.log. Lightsquid — в свою очередь каждые 10 минут (параметр Refresh sheduler) получает данные из этого файла и строит статистику доступную здесь: Status -> Squid Proxy Reports -> вкладка Lightsquid Report.

Перед тем как открывать эту страницу статистики, полазьте немного в интернете чтобы было что отображать.

Сначала там может появиться страница с ошибкой.50

Ничего страшного, оставьте ее в покое, просто чуть позже (минут через 10-15) попробуйте открыть её заново.

44

45

46

 При нажатии на кнопку Refresh now Lightsquid прочитает log-файл и извлекёт из него сегодняшние данные интернет-трафика и обновит отчет.

При нажатии на кнопку Refresh full Lightsquid прочитает log-файл и извлекёт из него все данные за последние 62 дня (параметр Log rotate) интернет-трафика и обновит отчет (это может занять очень много времени)

 

Мы настроили сбор, обработку и документирование данных по трафику HTTP (80 порт). Но разумеется это не весь трафик, а зачастую лишь малая его часть. Помимо различных соединений файловыми хранилищами, почтовыми сервисами и интернет пейджерами (ICQ, Skype и т.д.) уже многие сайты переходят на работу по защищенному соединению HTTPS (443 порт). Разумеется благоразумно учитывать и эту часть трафика.

Оптимальным для посчёта трафика по всем портам является IPCAD, который будет дописывать свои данные в отчёт squid’a /var/squid/logs/access.log.

К сожалению, в разделе System -> Packages отсутствует пакет IPCAD, поэтому придется немного поплясать с бубном.

В начале плясок, для нашего удобства, настроим доступ к pfSense через SSH-протокол.

 

5. Настройка доступа к pfSense через SSH

  • Идём в System -> Advanced. В разделе Secure Shell ставим флажок Enable Secure Shell, жмем Save
  • После сохранения вылазиет сообщение типа изменения успешно сохранены и через 20 секунд вас перенаправят на такой-то адрес. Ждём и не вмешиваемся, после того как  это сообщение исчезнет, в правом верхнем углу загорится желтая пиктограмма51
  • Жмём на желтую пиктограмму, открываются сообщения:53
  • дословно переводится так:
    • pfSense начал создавать отсутствующие SSH-ключи. Запуск SSH может занять некоторое время. Имейте в виду что сохранение каких-либо изменений может быть осуществлено только после завершения операции по запуску SSH.
    • pfSense закончил создание ключей. SSH запущен.
  • Щёлкаем по каждому сообщению чтобы скрыть их.
  • Если Вы хотите открыть доступ к SSH из для WAN-порта, то добавим правило в Firewall:
    • Идём Firewall -> Rules -> вкладка WAN, жмём на кнопку с плюсиком для добавления правила
    • Interface -> WAN
    • Protocol -> TCP
    • Если вы хотите дать возможность всем подряд подключаться по SSH, то оставьте Source в положении any. Мне такое не надо, поэтому я здесь ставлю Single host or alias и указываю IP-адрес с которого буду управлять 192.168.0.191
    • Destination -> WAN address
    • Destination port range -> from: SSH (22)   to: SSH (22)
    • В description пишем что-нибудь вроде Allow SSH to WAN
    • Жмём Save, затем Apple Changes

На этом настройка pfSense заканчивается, теперь переходим к рабочему компьютеру сети предприятия (тот который 192.168.0.191). Я рекомендую для доступа к файловой системе через SSH использовать WinSCP, а для выполнения команд в консоли — Putty. Хотя в WinSCP и существует поддержка консоли, но у меня возникли проблемы с ответами на консольные вопросы типа Do you want it? y/N. В Putty таких проблем не возникает. Итак, качаем их, устанавливаем на компьютере и подключаемся.

Если Вы не меняли паролей, то доступ должен осуществляться так: login: root    pfsense   

52

6. Настройка IPCAD в pfSense

Как уже говорилось выше в разделе System -> Packages отсутствует пакет IPCAD, поэтому придется немного поплясать с бубном.

  • Для начала нам нужно скачать архив со всякими полезностями.
  • Файл rsh с помощью WinSCP копируем в папку /usr/bin и назначаем ему права 0555. Данный файл потребуется для импорта статистики ipcad в отчёт Squid’а.
  • Открываем файл tolog.sh и ищем строку net=»192.168.2″, здесь указывается ваша внутренняя сеть. Если у Вас она отличается от моей, то меняйте это значение (обратите внимание четвертая тройка не указывается). Помещаем tolog.sh в папку /usr/local/sbin и назначаем ему права 0755. Это скрипт переноса статистики ipcad в лог Squid

 После этого подключаемся к консоли с помощью Putty

  • Переходим в Shell, нажав кнопку 8 и Enter
  • Выполняем команду pkg. Скорее всего этот пакет у Вас не установлен и система попросит установить его. Соглашаемся, нажав y
    54
  • После успешной установки пакета pkg выполняем следующие команды:
    • pkg update
    • pkg install ipcad
      • Должно вылезти вот такое сообщение. Не обращаем на него внимания, потом мы всё это настроим, но немного иначе
        55
    • rehash
    • pkg install  bind-tools  (для того чтобы осуществлялась попытка разрешения IP адресов в URL)

Теперь нам надо немного подправить файл 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)»;

  • Здесь em0 — имя LAN интерфейса. В моём случае исправляем его на sge0. Если Вы забыли какой идентификатор у сетевой карты смотрящей в локалку, то зайдите в раздел Status -> Interfaces в WEB-интерфейсе pfSense.
  • 192.168.0.0/24 — сеть LAN интерфейса, я меняю её на свою локальную сеть, т.е. на 192.168.2.0/24
  • 80 (в конце строки) — порт, с которого пользователи получают трафик от прокси. Так как у нас прокси прозрачный, то порт остаётся восьмидесятым.

Эта строка предписывает 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.

Сохраняем изменения в файле и копируем его в папку /usr/local/etc, предварительно переименовать уже имеющийся такой файл в этой папке.

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

Если у Вас существует несколько локальных сетевых интерфейсов, то можете писать их оба один под другим (как тут).

Если у Вас настроены VLAN`ы, то интерфейсы нужно писать в таком формате: interface rl0.101, где rl0 — родительский интерфейс для влана, 101 — номер влана. Свои интерфейсы можете посмотреть при помощи ifconfig -a

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

Нам нужно сделать так чтобы ipcad запускался вместе с запуском системы, а скрипт tolog.sh запускался каждую минуту и дописывал данный в лог Squid’а.

  • Для этого идём в System -> Packages -> вкладка Available Packages и устанавливаем пакеты Shellcmd и Cron.
  • В разделе Services -> Shellcmd создайте новую команду:
    • Command: /usr/local/bin/ipcad -rds
    • Shellcmd Type: shellcmd

Теперь ipcad будет автоматически загружаться при старте системы. Чтобы не делать перезагрузку запустите ipcad сами, выполнив в Putty ту же самую команду: /usr/local/bin/ipcad -rds

Делаем поминутный запуск скрипта tolog.sh:

  • В разделе Services -> Cron создайте новое задание нажав на кнопочку с плюсиком, указываем параметры:
    • Minute, Hour, Day of the Month , Month of the Year и Day of the Week — везде ставим звёздочку *
    • User: root
    • Command: /usr/local/sbin/tolog.sh
  • Жмём Save

На одном форуме нашёл примечательное сообщение насчёт импорта данных из ipcad:

в ходе полугодового эксплуатации описаной системы дважды был косяк, заключайшийся в том, что когда раз в сутки сквид делает ротацию логов, скрипт, пишущий статистику ipcad успевал первым создать файл логов сквида, и создавал его от имени root, сквид потом пытался получить к своим логам доступ и обламывался, перезапускался и так до исправления.
решается проблема добавлением в скрипт tolog.sh в конце строчки с chown принудительно меняющей владельца файла на proxy

И вот интересно, в конце файла есть команда chown proxy:proxy /var/squid/logs/access.log, но вот вопрос: proxy-это какой-то встроенный пользователь pfSense или это имя компьютера на котором установлен pfSense? Самое интересное, что я как-то по воле случая присвоил имя именно proxy

7. Проверка работы

Прежде чем делать проверку, полазьте по интернету: по защищённым и незащищенным сайтам чтобы набрать статистику. И, не меньше чем через минуту, проверяйте логи.

С помощью WinSCP заходим в папку /var/squid/logs и открываем файл access.log. Матаем его в низ. Здесь у нас дописываются все обращения к интернету через прокси сервер:

56

То, чьё время с тремя нулями в конце, вставлено с помощью ipcad

Теперь идём в WEB-интерфейс Status -> Squid Proxy Reports -> вкладка Lightsquid Report.

57

Для генерации статистики по https я тупо залез на ютуб и включил видео плейлист.

Если в Вашем отчете нет 443-го порта, не расстраивайтесь, понажимайте на кнопочку Refresh Now, подождите минут 10 пока обновится статистика, всё будет.

В итоге мы видим исчерпывающую статистику использования интернета компьютером 192.168.2.3. Из минусов хочу отметить:

  • Отображение имени пользователя в виде #000 (?) (будем исправлять в последующих статьях…)
  • Отображение соединений по HTTPS отображаетя в виде IP-адресов, а если возможно разрешить его с помощью DNS, то в скобочках указывается разрешенное имя. Вроде бы неплохо, но контент идет зачастую с сайтов, чьи имена ни о чём не говорят, поэтому довольно проблемматично определить на каком же всё-таки сайте был пользователь

Вроде пока всё, жду комментариев…

P.S.: Если что-то не работает, попробуйте сделать перезагрузку

P.P.S.: После обновления до версии 2.3 была замечена проблема с отображением логов Squid. Решение здесь

При написании статьи использовались источники:

http://macrodmin.ru/2012/01/proksi-server-v-pfsense

http://www.pontin.ru/technical/linux/pfsense/pfsense-config

http://ru.doc.pfsense.org/index.php/Подсчет_трафика_с_помощью_Squid_и_ipcad_в_pfSense_2.2

https://toster.ru/q/270768#answer_726823

 

Содержание

(Просмотрено 45 004 раз, 5 раз за сегодня)

5. Настройка прокси в pfSense: 19 комментариев

  1. Приветсвую!
    При запуске /usr/local/sbin/tolog.sh ругается
    ELF interpreter /libexec/ld-elf.so.1 not found
    Abort trap
    И логи в squid не скидываются. Не встречали такого и как исправить?

    1. Привет! Сам с таким не сталкивался. Гугл говорит что такое может возникнуть если в системе не установлены пакеты для запуска 32-битных приложений. Могу предположить что эта ошибка возникла на pfSense для amd64? Если не хотите заморачиваться и есть возможность — поставьте версию i386, там таких глюков точно нет. В противном случае надо искать каких пакетов не хватает и настраивать запуск 32х приложений, либо возможно редактировать как-то файл tolog.sh. Сейчас пока нет возможности этим заняться, но как будет время попробую решить Вашу проблему

      1. Да, версия amd64)
        Уже настроил, под офис все, не хотелось бы все заново..
        Попробуй исправить, если что отпишусь.
        +За статьи по pfsense огромное спасибо)

        1. Помогииитее! Та же проблема, долго настраивал, не хочу сносить( Дайте tolog.sh для amd64 🙁 Пожалуйста…

      2. Добрый день, решилась ли проблема с «ELF interpreter /libexec/ld-elf.so.1 not found Abort trap», и если решилась то как. Ставлю PfSense 2.4.1-RELEASE (amd64) и не отрабатывается tolog.sh

  2. Добрый, день!
    Есть ли пакет ipcad для последней на данный момент версии pfsense 2.3? После обновления перестал работать сбор статистики в репозитории этого пакета теперь нет.

    Спасибо!

    1. Попробуйте в консоли выполнить команды pkg update, а затем pkg install ipcad. Возможно он сначала захочет обновить сам pkg, разрешите ему это сделать. Меня интересует что он скажет по поводу IPCAD?

      1. pkg установлен изначально. Но Ipcad отсутствует в репозитории. «No packages available to install matching ‘ipcad’ have been found in the repositories»

  3. если дословно : pkg: No pacakages avaliable to install matching ‘ipcad’ have been found in the repositories.

    1. Здравствуйте! А решение вопроса было найдено? Если не секрет, так как у меня тоже пакет не обнаружен(

  4. Присоединяюсь к вопросу.
    Установил pfsense 2.3 а установить ipcad не могу. Отсутствует в репозитории.
    Поскорей бы в Packages его прикрутили, да упростили установку и настройку!

  5. Подскажите, как можно обновлять black листы для squidguard?
    Или, возможно из формировать самому?

  6. «Отображение имени пользователя в виде #000 (?) (будем исправлять в последующих статьях…)»
    Здравствуй! Только что настроил по твоему мануалу Lightsquid
    и у меня имена именно в таком виде…
    «Следующую статью» не нашел. Как исправить?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *