# Расписания правил файрвола pfSense - управление по времени

> Настройка расписаний в pfSense - создание временных окон для автоматического включения и отключения правил файрвола по дням недели и часам

Source: https://opennix.org/docs/pfsense/firewall/pfsense-firewall-schedules/


Расписания в pfSense позволяют ограничить действие правил файрвола определёнными временными окнами - днями недели и часами. Правило, привязанное к расписанию, активно только в указанные периоды времени и не оказывает влияния на трафик за их пределами. Механизм расписаний применяется для реализации политик временного доступа: ограничение интернет-трафика в рабочие часы, управление доступом гостевых сетей, применение полосы пропускания по расписанию и аналогичных задач.

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

## Создание расписания

Управление расписаниями выполняется через меню **Firewall > Schedules**. Для создания нового расписания необходимо нажать кнопку **Add**.

### Параметры расписания

| Параметр | Описание |
|---|---|
| **Schedule Name** | Имя расписания. Допускаются только латинские буквы и цифры, без пробелов. Пример: `BusinessHours`, `WeekendAccess` |
| **Description** | Текстовое описание назначения расписания. Отображается в списке расписаний и при выборе расписания в правиле |

### Настройка временных диапазонов

Каждое расписание содержит один или несколько временных диапазонов (time ranges). Для каждого диапазона указываются следующие параметры:

**Выбор дней.** Календарь позволяет выбрать конкретные даты месяца или дни недели. Для создания повторяющегося расписания следует использовать заголовки дней недели (Mon, Tue, Wed и так далее) вместо конкретных календарных дат. При нажатии на заголовок дня недели расписание будет применяться к этому дню каждую неделю.

**Время начала и окончания.** Указывается в 24-часовом формате. Временной диапазон не может пересекать полночь - если требуется расписание, охватывающее ночное время, необходимо создать два отдельных диапазона: один до полуночи (например, 18:00--23:59) и второй после (00:00--06:00).

**Гранулярность.** Минимальный интервал составляет 15 минут. Начало и окончание времени задаются с шагом 15 минут: 0:00, 0:15, 0:30, 0:45, 1:00 и так далее. Для указания полных суток используется диапазон 0:00--23:59.

**Описание диапазона.** Необязательное текстовое описание, помогающее различать несколько диапазонов внутри одного расписания (например, `Weekday morning`, `Weekend full day`).

Для добавления диапазона в расписание после выбора дней и времени необходимо нажать кнопку **Add Time**. Один расписание может содержать несколько диапазонов - это позволяет задать различное время активности для разных дней недели.

![Настройка расписания в pfSense](/img/pfsense/pfsense-schedule-edit.webp)

<p style="text-align: center;">Рис. 1. Экран редактирования расписания Firewall > Schedules</p>

### Пример: рабочие часы с понедельника по пятницу

Для создания расписания, активного в рабочее время (09:00--18:00, понедельник--пятница):

1. Перейти в **Firewall > Schedules** и нажать **Add**.
2. Указать имя: `BusinessHours`.
3. Указать описание: `Working hours Mon-Fri 09:00-18:00`.
4. В календаре нажать на заголовки Mon, Tue, Wed, Thu, Fri.
5. Установить время начала 9:00 и время окончания 17:45.
6. Нажать **Add Time** для добавления диапазона.
7. Нажать **Save** для сохранения расписания.

> **Внимание**:
>
> Время окончания указывает начало последнего 15-минутного блока, в течение которого расписание ещё активно. Для расписания до 18:00 следует указать 17:45 - это означает, что расписание будет активно до 17:59:59.

## Применение расписания к правилу

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

Для привязки расписания:

1. Перейти на вкладку интерфейса, содержащую целевое правило (например, **Firewall > Rules > LAN**).
2. Создать новое или отредактировать существующее правило.
3. В разделе **Extra Options** раскрыть **Advanced Options** (кнопка **Display Advanced**).
4. В поле **Schedule** выбрать требуемое расписание из выпадающего списка.
5. Сохранить правило и применить изменения (**Apply Changes**).

![Применение расписания к правилу файрвола](/img/pfsense/pfsense-schedule-rule.webp)

<p style="text-align: center;">Рис. 2. Выбор расписания в настройках правила файрвола</p>

В списке правил на вкладке интерфейса отображается индикатор состояния расписания. При наведении курсора на индикатор отображается информация о текущем статусе расписания - активно оно в данный момент или нет.

## Поведение правила вне расписания

Правило, привязанное к расписанию, которое в текущий момент неактивно, полностью исключается из обработки трафика. Это означает:

- Правило **не инвертируется**. Если правило разрешает трафик в рабочие часы, вне рабочих часов оно не начинает блокировать этот трафик. Правило просто перестаёт существовать для механизма фильтрации.
- Трафик обрабатывается оставшимися правилами в соответствии со стандартным порядком (first match wins). Если ни одно другое правило не разрешает трафик, он будет заблокирован неявным правилом запрета (implicit deny).
- Это поведение является принципиальным для правильного проектирования политик: запрещающее правило по расписанию блокирует трафик только в период активности расписания, а не за его пределами.

### Обработка активных соединений

По умолчанию при завершении расписания pfSense очищает записи таблицы состояний (state table) для соединений, разрешённых по этому правилу. Активные TCP-сессии и другие соединения, установленные в период действия расписания, будут принудительно завершены.

Если требуется сохранить активные соединения после истечения расписания, необходимо включить параметр **Do not kill connections when schedule expires** в меню **System > Advanced** на вкладке **Miscellaneous**. При включении этого параметра существующие соединения сохраняются до естественного завершения или истечения таймаута состояния, однако новые соединения по этому правилу создаваться не будут.

> **Внимание**:
>
> Сохранение соединений после истечения расписания может создавать окно для обхода политики безопасности. Если пользователь установил соединение в разрешённый период, оно будет оставаться активным неограниченно долго (в пределах таймаута состояния). Для критичных политик рекомендуется использовать поведение по умолчанию с принудительным завершением соединений.

## Примеры сценариев

### Блокировка социальных сетей в рабочие часы

**Задача:** запретить сотрудникам доступ к социальным сетям с 09:00 до 18:00, понедельник--пятница, разрешив доступ в остальное время.

**Реализация:**

1. Создать [алиас](/docs/pfsense/firewall/pfsense-firewall-aliases/) типа Host или URL Table с адресами социальных сетей (например, `SocialMedia`).
2. Создать расписание `WorkHours` с диапазоном Mon--Fri, 9:00--17:45.
3. Создать блокирующее правило на вкладке LAN:
   - **Action:** Block
   - **Source:** LAN net
   - **Destination:** алиас `SocialMedia`
   - **Schedule:** `WorkHours`
4. Разместить правило выше общего разрешающего правила.

Вне рабочих часов блокирующее правило неактивно, и трафик к социальным сетям обрабатывается нижестоящими разрешающими правилами.

### Гостевая сеть с доступом только в бизнес-часы

**Задача:** предоставить гостевой сети доступ в интернет только в рабочее время (08:00--20:00, понедельник--суббота).

**Реализация:**

1. Создать расписание `GuestAccess` с двумя диапазонами:
   - Mon--Fri, 8:00--19:45
   - Sat, 8:00--19:45
2. На вкладке гостевого интерфейса (например, **OPT1** или **GUESTWIFI**) создать разрешающее правило:
   - **Action:** Pass
   - **Source:** GUESTWIFI net
   - **Destination:** any
   - **Schedule:** `GuestAccess`

Вне указанного расписания разрешающее правило неактивно, и трафик гостевой сети блокируется неявным правилом запрета. Дополнительное блокирующее правило создавать не требуется.

### Ограничение пропускной способности по времени

**Задача:** в пиковые часы (10:00--16:00) ограничить пропускную способность для определённой группы пользователей.

**Реализация:**

1. Создать расписание `PeakHours` с диапазоном Mon--Fri, 10:00--15:45.
2. Настроить ограничитель (limiter) через **Firewall > Traffic Shaper > Limiters** с требуемой полосой.
3. Создать правило на вкладке интерфейса:
   - **Action:** Pass
   - **Source:** алиас с адресами пользователей
   - **Destination:** any
   - **Schedule:** `PeakHours`
   - **In/Out pipe:** привязать к созданному ограничителю
4. Разместить правило выше общего разрешающего правила без ограничений.

В период действия расписания трафик обрабатывается правилом с ограничителем. Вне расписания это правило неактивно, и трафик обрабатывается нижестоящим правилом без ограничений полосы.

## Ограничения

Механизм расписаний в pfSense имеет ряд ограничений, которые необходимо учитывать при проектировании политик безопасности.

### Часовой пояс

Все временные расписания используют часовой пояс, настроенный на устройстве pfSense (**System > General Setup > Timezone**). При работе с территориально распределёнными площадками, подключёнными через VPN, следует учитывать, что расписание активируется по времени файрвола, а не по локальному времени пользователей. Для корректной работы необходимо убедиться, что часовой пояс настроен правильно и система синхронизирует время через NTP.

### Гранулярность 15 минут

Минимальная единица времени в расписании - 15 минут. Создать расписание с точностью до минуты невозможно. Это следует учитывать при планировании политик с жёсткими временными требованиями.

### Невозможность пересечения полуночи

Одиночный временной диапазон не может пересекать полночь. Для создания ночного расписания (например, 22:00--06:00) необходимо задать два отдельных диапазона: 22:00--23:59 и 00:00--05:45. Оба диапазона включаются в одно расписание.

### Отсутствие исключений для праздников

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

### Конкретные даты и повторяющиеся дни

Расписание, созданное с выбором конкретных календарных дат (а не заголовков дней недели), является одноразовым - оно активируется только в указанные даты. Для регулярного расписания всегда следует использовать выбор по дням недели через заголовки столбцов календаря.

### Влияние на производительность

Расписания не оказывают заметного влияния на производительность файрвола. Проверка расписания выполняется при загрузке набора правил, а не для каждого пакета. При наступлении или завершении временного окна pfSense перезагружает набор правил (ruleset reload), что занимает минимальное время и не влияет на обработку трафика.

## Связанные разделы

- [Правила файрвола](/docs/pfsense/firewall/pfsense-firewall-rules/) - создание и управление правилами, к которым применяются расписания
- [Алиасы](/docs/pfsense/firewall/pfsense-firewall-aliases/) - группировка адресов и портов для использования в правилах с расписаниями
- [Лучшие практики](/docs/pfsense/firewall/pfsense-firewall-best-practices/) - рекомендации по организации правил файрвола, включая работу с временными политиками

