# Популярные рецепты конфигурации pfSense

> Пошаговые рецепты настройки pfSense - прозрачный файрвол, DNS over TLS, GeoIP, port knocking, DMZ, несколько IP и мониторинг трафика

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


В этом разделе собраны наиболее востребованные рецепты конфигурации pfSense. Каждый рецепт включает описание задачи и пошаговую инструкцию. Рецепты рассчитаны на администраторов, знакомых с базовой настройкой pfSense и интерфейсом управления.

Перед выполнением рецептов рекомендуется создать резервную копию конфигурации: Diagnostics - Backup & Restore. Это позволит откатить изменения в случае ошибки.

## Прозрачный файрвол (Transparent Bridge)

Прозрачный файрвол работает на втором уровне OSI, фильтруя трафик без изменения IP-адресации сети. pfSense размещается между двумя сегментами сети как невидимый мост, позволяя фильтровать трафик без перенастройки IP-адресов на хостах.

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

1. Перейдите в **Interfaces - Assign** и убедитесь, что оба интерфейса (например, WAN и LAN) назначены
2. Перейдите в **Interfaces - Bridges** и создайте мост:
   - **Member Interfaces** - выберите оба интерфейса
3. Перейдите в **Interfaces - Assign**, назначьте созданный мост как новый интерфейс (например, BRIDGE0)
4. Настройте IP-адрес на мостовом интерфейсе (для управления pfSense)
5. Удалите IP-адреса с исходных интерфейсов-членов моста
6. Перейдите в **System - Advanced - System Tunables** и установите:
   - `net.link.bridge.pfil_member` = **0**
   - `net.link.bridge.pfil_bridge` = **1**
7. Создайте [правила файрвола](/docs/pfsense/firewall/pfsense-firewall-rules/) на мостовом интерфейсе для фильтрации трафика

> **Важно**: при работе в режиме моста pfSense не выполняет NAT. Маршрутизация остается на вышестоящем маршрутизаторе. Правила файрвола применяются к мостовому интерфейсу, а не к отдельным членам моста.

## DNS over TLS (DoT)

DNS over TLS шифрует DNS-запросы между pfSense и вышестоящими DNS-серверами, защищая их от перехвата и модификации провайдером или злоумышленником.

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

1. Перейдите в **System - General Setup**
2. Настройте DNS-серверы с поддержкой DoT:

| DNS-сервер | IP-адрес | Hostname (TLS) |
|---|---|---|
| Cloudflare | 1.1.1.1 | cloudflare-dns.com |
| Google | 8.8.8.8 | dns.google |
| Quad9 | 9.9.9.9 | dns.quad9.net |

3. Перейдите в **Services - DNS Resolver**
4. Включите DNS Resolver, если не включен
5. Включите **DNS Query Forwarding**
6. Включите **Use SSL/TLS for outgoing DNS Queries to Forwarding Servers**
7. В разделе **Custom Options** добавьте (опционально):

```
server:
  tls-cert-bundle: "/etc/ssl/cert.pem"
```

8. Сохраните и примените изменения

### DNS over HTTPS (DoH)

pfSense не поддерживает DoH нативно в DNS Resolver. Для реализации DoH используйте пакет **dns-over-https-proxy** или настройте перенаправление через Unbound на локальный DoH-прокси. DoT является рекомендуемым вариантом для pfSense.

## Блокировка по странам (GeoIP)

GeoIP-блокировка позволяет ограничить трафик из определенных стран. Используется для защиты серверов от массовых атак из регионов, с которыми нет деловых отношений.

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

1. Зарегистрируйтесь на MaxMind.com и получите бесплатный ключ GeoLite2
2. Перейдите в **Firewall - Aliases** и создайте новый алиас:
   - **Name** - например, Blocked_Countries
   - **Type** - URL Table (IPs)
   - **URL** - укажите URL-файл с IP-диапазонами нужных стран
3. Альтернативный подход - установите пакет **pfBlockerNG**:
   - System - Package Manager - Available Packages - pfBlockerNG-devel
   - Настройте GeoIP в **Firewall - pfBlockerNG - GeoIP**
   - Выберите континенты и страны для блокировки
   - pfBlockerNG автоматически создаст [алиасы](/docs/pfsense/firewall/pfsense-firewall-aliases/) и правила файрвола
4. Создайте правило блокировки на WAN:

```
Action: Block
Interface: WAN
Source: Blocked_Countries (алиас)
Destination: any
```

> **Предупреждение**: GeoIP-базы не являются точными на 100%. VPN и прокси-серверы позволяют обойти географическую блокировку. Используйте GeoIP как дополнительный уровень защиты, а не единственный.

## Port Knocking

Port knocking - метод скрытия сервисов путем требования последовательности подключений к определенным портам перед открытием доступа. Реализуется через серию правил файрвола с отслеживанием состояний.

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

1. Определите последовательность портов (например, TCP 7000, TCP 8000, TCP 9000)
2. Перейдите в **Firewall - Rules - WAN**
3. Создайте правила для каждого этапа последовательности, используя **pf anchors** через custom rules или пакет **knockd**:

Вариант с пакетом:

1. Установите пакет через pkg: подключитесь к консоли pfSense
2. Создайте файл конфигурации knockd:

```
[options]
  logfile = /var/log/knockd.log

[openSSH]
  sequence    = 7000,8000,9000
  seq_timeout = 10
  command     = /sbin/pfctl -t knock_allowed -T add %IP%
  tcpflags    = syn

[closeSSH]
  sequence    = 9000,8000,7000
  seq_timeout = 10
  command     = /sbin/pfctl -t knock_allowed -T delete %IP%
  tcpflags    = syn
```

3. Создайте алиас-таблицу `knock_allowed` в правилах файрвола
4. Создайте правило на WAN, разрешающее доступ к SSH с источником из таблицы `knock_allowed`

## Принудительное перенаправление DNS

Перенаправление DNS заставляет все DNS-запросы из LAN проходить через DNS-сервер pfSense, даже если клиенты указали другие DNS-серверы (например, 8.8.8.8 жестко прописан в устройстве).

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

1. Перейдите в **Firewall - NAT - Port Forward**
2. Создайте правило перенаправления:

```
Interface: LAN
Protocol: TCP/UDP
Source: LAN net
Source port: any
Destination: any (Invert Match отключен)
Destination: NOT "LAN Address" (чтобы исключить запросы к самому pfSense)
Destination port: 53
Redirect target IP: 127.0.0.1
Redirect target port: 53
```

3. Повторите для DNS over TLS (порт 853), если хотите заблокировать прямые DoT-запросы клиентов:

```
Action: Block
Interface: LAN
Protocol: TCP
Source: LAN net
Destination: any
Destination port: 853
```

4. Убедитесь, что DNS Resolver запущен и привязан к LAN-интерфейсу

## Несколько публичных IP-адресов

Сценарий: провайдер предоставил блок публичных IP-адресов, и необходимо направить разные IP на разные внутренние серверы.

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

1. Перейдите в **Firewall - Virtual IPs** и добавьте каждый дополнительный публичный IP:
   - **Type** - IP Alias (если IP из той же подсети, что и WAN) или Other (для отдельных подсетей)
   - **Interface** - WAN
   - **Address** - публичный IP-адрес
2. Перейдите в **Firewall - NAT - 1:1** для создания трансляции один-к-одному:
   - **Interface** - WAN
   - **External subnet IP** - публичный IP
   - **Internal IP** - приватный IP внутреннего сервера
3. Или используйте **Firewall - NAT - Port Forward** для перенаправления конкретных портов:
   - **Destination** - выберите Virtual IP
   - **Redirect target IP** - внутренний IP сервера
4. Создайте правила файрвола на WAN для разрешения входящего трафика на Virtual IP

Подробности о настройке NAT описаны в разделе [NAT pfSense](/docs/pfsense/nat/).

## Настройка DMZ

DMZ (Demilitarized Zone) - изолированный сегмент сети для серверов, доступных из интернета. DMZ отделяет публичные серверы от внутренней сети.

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

1. Подключите третий сетевой интерфейс к pfSense (физический или VLAN)
2. Перейдите в **Interfaces - Assign** и назначьте новый интерфейс
3. Настройте интерфейс DMZ:
   - **IPv4 Address** - например, 10.0.100.1/24
   - **Enable Interface** - включить
4. Настройте DHCP для DMZ (опционально): Services - DHCP Server - DMZ
5. Создайте правила файрвола:

**На WAN** - разрешить входящий трафик к серверам DMZ:

```
Action: Pass
Interface: WAN
Destination: DMZ net (конкретные серверы и порты)
```

**На DMZ** - разрешить серверам выход в интернет, запретить доступ к LAN:

```
Action: Block
Interface: DMZ
Source: DMZ net
Destination: LAN net

Action: Pass
Interface: DMZ
Source: DMZ net
Destination: any
```

**На LAN** - разрешить доступ из LAN в DMZ (опционально):

```
Action: Pass
Interface: LAN
Source: LAN net
Destination: DMZ net
```

6. Настройте NAT Port Forward для проброса портов с WAN на серверы DMZ

## Безопасное удаленное администрирование

Удаленный доступ к веб-интерфейсу pfSense через интернет требует дополнительных мер защиты.

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

1. **Измените порт веб-интерфейса**: System - Advanced - Admin Access, установите нестандартный порт HTTPS (например, 8443)
2. **Ограничьте доступ по IP**: создайте алиас с разрешенными IP-адресами администраторов
3. **Создайте правило на WAN**:

```
Action: Pass
Interface: WAN
Protocol: TCP
Source: Admin_IPs (алиас)
Destination: WAN address
Destination port: 8443
```

4. **Рекомендуемый подход** - используйте VPN вместо прямого доступа:
   - Настройте OpenVPN или WireGuard на pfSense (раздел [VPN](/docs/pfsense/vpn/))
   - Подключайтесь к pfSense через VPN-туннель
   - Не открывайте веб-интерфейс на WAN

5. **Включите защиту от перебора**: System - Advanced - Login Protection
   - Установите порог блокировки (например, 5 попыток за 5 минут)
   - Время блокировки - 30 минут

## Мониторинг трафика по IP

Отслеживание потребления полосы пропускания каждым хостом в сети.

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

1. **Встроенный мониторинг** - Status - Traffic Graph:
   - Показывает трафик в реальном времени по интерфейсам
   - Ограничен текущим моментом, без исторических данных

2. **Пакет ntopng** (рекомендуется для детального мониторинга):
   - Установите: System - Package Manager - Available Packages - ntopng
   - Настройте: Diagnostics - ntopng Settings
   - Укажите интерфейсы для мониторинга (LAN, WAN)
   - Веб-интерфейс ntopng доступен по адресу https://pfSense_IP:3001

3. **Пакет Darkstat** (легковесная альтернатива):
   - Установите через Package Manager
   - Настройте интерфейсы для мониторинга
   - Отображает статистику по хостам и протоколам

4. **Пакет BandwidthD**:
   - Генерирует графики потребления полосы пропускания по IP
   - Хранит исторические данные
   - Подходит для отчетности

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

## VPN с Split DNS

Split DNS позволяет разделить разрешение DNS-имен: корпоративные домены разрешаются через внутренний DNS-сервер через VPN, а остальные - через публичные DNS-серверы.

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

1. Настройте OpenVPN-сервер на pfSense (раздел [VPN](/docs/pfsense/vpn/))
2. В настройках OpenVPN-сервера:
   - Не устанавливайте флаг **Redirect IPv4 Gateway** (чтобы не направлять весь трафик через VPN)
   - В поле **DNS Server** укажите IP-адрес DNS-сервера в корпоративной сети
   - В поле **DNS Domain** укажите корпоративный домен (например, corp.example.com)
3. Перейдите в **Services - DNS Resolver**
4. В разделе **Domain Overrides** добавьте запись:
   - **Domain** - корпоративный домен (corp.example.com)
   - **IP Address** - адрес внутреннего DNS-сервера
5. Настройте маршрутизацию:
   - В настройках OpenVPN-сервера добавьте **IPv4 Local Network** - подсети, доступные через VPN
   - Клиент получит маршруты только к указанным подсетям

6. На стороне клиента убедитесь, что DNS-суффикс корпоративного домена передается через VPN-подключение

Для общей информации по настройке VPN обратитесь к разделу [VPN pfSense](/docs/pfsense/vpn/). Вопросы устранения неполадок рассмотрены в [руководстве по диагностике](/docs/pfsense/troubleshooting/pfsense-general-troubleshooting/).

