# Рецепты сервисов pfSense - HAProxy, Squid, SNMP

> Пошаговые рецепты настройки сервисов pfSense - HAProxy reverse proxy с Let's Encrypt, Squid кеширование, SNMP мониторинг, NetFlow, captive portal, WoL

Source: https://opennix.org/docs/pfsense/recipes/pfsense-service-recipes/


В этом разделе собраны рецепты настройки сетевых сервисов в pfSense: обратный прокси HAProxy с автоматическими сертификатами, кеширующий прокси Squid, мониторинг через SNMP и NetFlow, captive portal для гостевого доступа и другие сервисные сценарии.

Перед настройкой создайте резервную копию конфигурации: **Diagnostics - Backup & Restore**. Общий обзор пакетов pfSense описан в разделе [пакеты pfSense](/docs/pfsense/pfsense-packages/).

## HAProxy как обратный прокси с Let's Encrypt

HAProxy в pfSense выступает обратным прокси-сервером, принимая HTTPS-трафик на одном публичном IP и направляя его на разные внутренние веб-серверы по доменному имени. ACME-пакет автоматизирует выпуск и обновление сертификатов Let's Encrypt.

### Пошаговая настройка

1. Установите пакеты:
   - **System - Package Manager - Available Packages - haproxy-devel**
   - **System - Package Manager - Available Packages - acme**

2. Настройте ACME (Let's Encrypt):
   - Перейдите в **Services - ACME Certificates - Account Keys**
   - Нажмите **Add** и создайте учетную запись Let's Encrypt:
     - **Name** - LetsEncrypt
     - **ACME Server** - Let's Encrypt Production
     - Нажмите **Register ACME account key**

3. Создайте сертификат:
   - Перейдите в **Services - ACME Certificates - Certificates**
   - Нажмите **Add**:
     - **Name** - app1.example.com
     - **Domain SAN list** - добавьте домены (app1.example.com, app2.example.com)
     - **Method** - standalone HTTP (порт 8080) или DNS validation
     - Нажмите **Issue/Renew**

4. Настройте HAProxy Backend (внутренние серверы):
   - Перейдите в **Services - HAProxy - Backend**
   - Создайте backend для каждого веб-сервера:
     - **Name** - app1_backend
     - **Server list**:
       - **Name** - app1_server
       - **Address** - 192.168.1.10
       - **Port** - 80
     - **Health check method** - HTTP
     - **Health check URI** - /

5. Настройте HAProxy Frontend:
   - Перейдите в **Services - HAProxy - Frontend**
   - Создайте frontend:
     - **Name** - HTTPS_Frontend
     - **External Address** - WAN Address
     - **Port** - 443
     - **SSL Offloading** - включить
     - **SSL Certificate** - выберите сертификат ACME
     - **Type** - http/https (offloading)

6. Настройте ACL для маршрутизации по домену:
   - В разделе **Access Control Lists** frontend:
     - **Name** - app1_acl
     - **Expression** - Host matches
     - **Value** - app1.example.com
   - В разделе **Actions**:
     - **Action** - Use Backend
     - **Condition ACL names** - app1_acl
     - **Backend** - app1_backend

7. Повторите ACL и Actions для каждого домена

8. Создайте правило файрвола на WAN:

```
Action: Pass
Protocol: TCP
Destination: WAN address
Destination port: 443
```

9. Настройте перенаправление HTTP на HTTPS:
   - Создайте дополнительный frontend на порту 80
   - Включите **HTTP Redirect** на HTTPS

10. Настройте автоматическое обновление сертификатов: ACME обновляет сертификаты автоматически через cron

Подробности управления сертификатами описаны в разделе [сертификаты pfSense](/docs/pfsense/certificates/).

## HAProxy балансировка нагрузки для веб-серверов

HAProxy распределяет входящий трафик между несколькими серверами для обеспечения масштабируемости и отказоустойчивости. Поддерживает проверку здоровья серверов и автоматическое исключение неработающих узлов.

### Пошаговая настройка

1. Установите haproxy-devel (если не установлен)

2. Перейдите в **Services - HAProxy - Backend** и создайте backend:
   - **Name** - web_pool
   - **Balance** - Round Robin (или Least Connections)
   - **Server list** - добавьте все серверы:

| Name | Address | Port | Weight |
|---|---|---|---|
| web1 | 192.168.1.10 | 80 | 100 |
| web2 | 192.168.1.11 | 80 | 100 |
| web3 | 192.168.1.12 | 80 | 100 |

   - **Health check method** - HTTP
   - **Health check URI** - /health
   - **Health check HTTP version** - HTTP/1.1
   - **Health check interval** - 5000 (мс)

3. Настройте sticky sessions (при необходимости):
   - **Cookie Name** - SERVERID
   - **Cookie Mode** - Insert

4. Создайте frontend:
   - **Name** - Web_LB_Frontend
   - **External Address** - WAN Address
   - **Port** - 443
   - **SSL Offloading** - включить
   - **Default Backend** - web_pool

5. Мониторинг HAProxy:
   - Перейдите в **Services - HAProxy - Stats**
   - Включите Statistics page
   - Доступ к статистике: https://pfSense_IP:stats_port/haproxy?stats

6. Настройте [правила файрвола](/docs/pfsense/firewall/pfsense-firewall-rules/) на WAN для разрешения входящего трафика на порт 443

## Squid прозрачный прокси с кешированием

Squid в режиме кеширующего прокси хранит копии часто запрашиваемого контента, сокращая использование интернет-канала и ускоряя загрузку для пользователей.

### Пошаговая настройка

1. Установите Squid: **System - Package Manager - Available Packages - squid**

2. Перейдите в **Services - Squid Proxy Server - General**:
   - **Enable Squid Proxy** - включить
   - **Proxy Interface** - LAN
   - **Proxy Port** - 3128
   - **Transparent HTTP Proxy** - включить
   - **Bypass Proxy for Private Address Destination** - включить

3. Перейдите в **Services - Squid Proxy Server - Local Cache**:
   - **Cache Replacement Policy** - Heap LFUDA (рекомендуется для кеширования)
   - **Hard Disk Cache Size** - размер кеша в МБ (например, 10000 для 10 ГБ)
   - **Hard Disk Cache System** - ufs или aufs
   - **Memory Cache Size** - 256 или 512 МБ
   - **Maximum Object Size** - 256 МБ (для кеширования обновлений)
   - **Maximum Object Size in RAM** - 32 КБ

4. Для кеширования обновлений Windows/Linux добавьте в **Custom Options** (Advanced):

```
refresh_pattern -i windowsupdate.com/.*\.(cab|exe|ms[i|u|f]|[ap]sf|wm[v|a]|dat|zip) 43200 80% 129600 reload-into-ims
refresh_pattern -i update.microsoft.com/.*\.(cab|exe|ms[i|u|f]|[ap]sf|wm[v|a]|dat|zip) 43200 80% 129600 reload-into-ims
refresh_pattern -i download.windowsupdate.com/.*\.(cab|exe|ms[i|u|f]|[ap]sf|wm[v|a]|dat|zip) 43200 80% 129600 reload-into-ims
```

5. Перейдите в **Services - Squid Proxy Server - ACLs**:
   - **Allowed Subnets** - 192.168.1.0/24
   - **Unrestricted IPs** - IP-адреса, не проходящие через прокси (опционально)

6. Мониторинг: **Services - Squid Proxy Server - Real Time** и установите пакет **LightSquid** для отчетности

## SNMP мониторинг с Zabbix/LibreNMS

SNMP (Simple Network Management Protocol) позволяет системам мониторинга (Zabbix, LibreNMS, PRTG) собирать данные о состоянии pfSense: загрузка CPU, память, трафик интерфейсов, количество состояний файрвола.

### Пошаговая настройка

1. Перейдите в **Services - SNMP**:
   - **Enable** - включить
   - **System Location** - физическое расположение (серверная комната, стойка)
   - **System Contact** - контактный email
   - **Community String** - измените с public на уникальную строку (SNMPv2c)
   - **Bind Interface** - LAN (не привязывайте к WAN)
   - **SNMP Modules** - включите MibII, Netgraph, PF, Host Resources

2. Для SNMPv3 (рекомендуется для безопасности):
   - Настройте через SSH на pfSense, отредактировав `/usr/local/etc/snmpd.conf`
   - Добавьте пользователя SNMPv3 с аутентификацией SHA и шифрованием AES

3. Создайте правило файрвола на LAN:

```
Action: Pass
Protocol: UDP
Source: monitoring_server_IP
Destination: LAN address
Destination port: 161
```

4. **На Zabbix**:
   - Добавьте хост с IP pfSense
   - Примените шаблон Template Net pfSense SNMPv2 (или SNMPv3)
   - Укажите SNMP community string

5. **На LibreNMS**:
   - Добавьте устройство через web-интерфейс или CLI:
   ```bash
   lnms device:add pfSense_IP -c community_string
   ```
   - LibreNMS автоматически определит pfSense и применит нужные сенсоры

6. Основные OID для мониторинга pfSense:

| Параметр | OID |
|---|---|
| CPU Usage | 1.3.6.1.4.1.2021.11 |
| Memory Usage | 1.3.6.1.4.1.2021.4 |
| Interface Traffic | 1.3.6.1.2.1.2.2.1 |
| PF States | 1.3.6.1.4.1.12325.1.200.1 |

Для расширенного мониторинга pfSense обратитесь к разделу [мониторинг pfSense](/docs/pfsense/monitoring/).

## NetFlow/sFlow экспорт для анализа трафика

NetFlow экспортирует метаданные сетевых потоков (IP-адреса, порты, объемы, протоколы) в коллектор для детального анализа трафика и обнаружения аномалий.

### Пошаговая настройка

1. Установите пакет: **System - Package Manager - Available Packages - softflowd**

2. Перейдите в **Services - softflowd**:
   - **Interface** - LAN (или WAN, в зависимости от требований)
   - **Host** - IP-адрес NetFlow-коллектора (например, 192.168.1.100)
   - **Port** - порт коллектора (например, 2055)
   - **Max Flows** - 8192
   - **NetFlow Version** - 9 (или IPFIX для v10)
   - **Tracking Level** - Full (IP + Port + Protocol)

3. Для мониторинга нескольких интерфейсов добавьте отдельные экземпляры softflowd

4. **Коллекторы NetFlow**:
   - **ntopng** - установите через Package Manager на pfSense или отдельном сервере
   - **Elastic Stack** - используйте Logstash с input netflow
   - **nfdump/nfsen** - легковесное решение для хранения и анализа

5. Создайте правило файрвола для разрешения отправки NetFlow-данных к коллектору

6. Альтернативно для sFlow используйте пакет **hsflowd**:
   - Установите через pkg из консоли pfSense
   - Настройте коллектор sFlow

## Captive Portal с ваучерами для гостей

Captive portal перенаправляет пользователей на страницу аутентификации перед предоставлением доступа к интернету. Система ваучеров позволяет генерировать одноразовые коды для гостей отеля, кафе или конференции.

### Пошаговая настройка

1. Подготовьте отдельный интерфейс или VLAN для гостевой сети:
   - Создайте VLAN для гостей (например, VLAN 50 - 10.50.0.0/24)
   - Настройте DHCP для гостевого интерфейса

2. Перейдите в **Services - Captive Portal**:
   - Нажмите **Add** для создания новой зоны
   - **Zone Name** - Guest_WiFi

3. Настройте параметры зоны:
   - **Interfaces** - гостевой интерфейс (VLAN 50)
   - **Maximum Concurrent Connections** - ограничение (например, 100)
   - **Idle Timeout** - 30 минут
   - **Hard Timeout** - 480 минут (8 часов)
   - **Pass-through MAC** - MAC-адреса устройств без аутентификации (принтеры, Smart TV)

4. Настройте страницу аутентификации:
   - Загрузите HTML-шаблон портала в поле **Portal page contents**
   - Добавьте логотип и стилизацию под бренд заведения

5. Включите ваучеры:
   - Перейдите во вкладку **Vouchers**
   - **Enable Vouchers** - включить
   - **Voucher Rolls** - нажмите **Add** для создания серии:
     - **Roll Number** - 1
     - **Minutes per Ticket** - 60 (1 час) или 1440 (24 часа)
     - **Count** - количество ваучеров в серии (например, 1000)
   - Нажмите **Generate** и экспортируйте список ваучеров в CSV

6. Создайте правила файрвола на гостевом интерфейсе:

```
# Блокировка доступа к внутренней сети
Action: Block
Interface: Guest_WiFi
Source: Guest_WiFi net
Destination: LAN net

# Разрешение интернет-доступа
Action: Pass
Interface: Guest_WiFi
Source: Guest_WiFi net
Destination: any
```

7. Настройте bandwidth limiter для гостей: **Firewall - Traffic Shaper - Limiters**
   - Ограничьте скорость на пользователя (например, 5 Mbps download / 2 Mbps upload)

Для настройки гостевой изоляции через VLAN обратитесь к разделу [VLAN pfSense](/docs/pfsense/vlans/).

## DHCP Failover с кластером высокой доступности

В конфигурации высокой доступности (HA) pfSense два узла синхронизируют DHCP-сервер для обеспечения непрерывной выдачи адресов при сбое одного из узлов.

### Пошаговая настройка

1. Убедитесь, что [кластер высокой доступности](/docs/pfsense/high-availability/) pfSense настроен и работает (CARP + pfsync)

2. На основном узле перейдите в **Services - DHCP Server - LAN**:
   - **Enable** - включить
   - **Failover Peer IP** - IP-адрес вторичного узла pfSense (CARP-интерфейс или выделенный sync-интерфейс)

3. На вторичном узле:
   - Настройте аналогичный DHCP-сервер с теми же параметрами пула
   - **Failover Peer IP** - IP основного узла

4. Настройте синхронизацию конфигурации:
   - На основном узле: **System - High Avail. Sync**
   - Включите синхронизацию DHCP Server

5. Проверьте работу failover:
   - Выключите основной узел
   - Убедитесь, что клиенты продолжают получать IP от вторичного узла
   - Аренды DHCP сохраняются при переключении

6. Мониторинг: **Status - DHCP Leases** - просмотр активных аренд на обоих узлах

> **Важно**: при настройке DHCP failover оба узла должны использовать непересекающиеся диапазоны адресов или общий диапазон с координацией через failover protocol. pfSense использует ISC DHCP, который поддерживает native failover.

## Wake-on-LAN через pfSense

Wake-on-LAN (WoL) позволяет удаленно включать компьютеры в сети, отправляя magic packet на MAC-адрес целевого устройства. pfSense предоставляет встроенный интерфейс для WoL.

### Пошаговая настройка

1. Убедитесь, что целевые компьютеры поддерживают WoL:
   - В BIOS/UEFI включите Wake-on-LAN (обычно в разделе Power Management)
   - В ОС включите поддержку WoL на сетевом адаптере:
     - Windows: Device Manager - Network Adapter - Properties - Power Management - Allow this device to wake the computer
     - Linux: `ethtool -s eth0 wol g`

2. Перейдите в **Services - Wake-on-LAN**:
   - **Interface** - LAN (интерфейс, к которому подключено целевое устройство)
   - **MAC Address** - MAC-адрес целевого устройства

3. Нажмите **Send** для отправки magic packet

4. Для удобства сохраните устройства:
   - Заполните **MAC Address** и **Description**
   - Нажмите **Save** для добавления в список
   - В дальнейшем просто нажимайте **Wake** напротив нужного устройства

5. Для WoL из другой подсети (через VPN или WAN):
   - Необходим directed broadcast в целевую подсеть
   - Создайте правило файрвола, разрешающее UDP-пакеты на порт 9 (или 7) к broadcast-адресу целевой подсети
   - Настройте направленный broadcast: **System - Advanced - Firewall & NAT** - при необходимости включите Directed Broadcast

6. WoL через VPN:
   - Подключитесь к pfSense через [VPN](/docs/pfsense/vpn/)
   - Используйте встроенный интерфейс WoL или отправьте magic packet утилитой с VPN-клиента

> **Важно**: WoL работает только в пределах broadcast-домена (одной подсети). Для пробуждения через маршрутизируемые сети требуется directed broadcast или специализированный relay.

