Обработчик PolicyBasedEngine ("основанное на политиках") аналогичен FlatRate2, кроме того, что его параметры задаются в конфигурационном файле, а политики учета по направлениям, протоколам и прочему - настраиваемы.

Единственный параметр, который надо указать в свойствах тарифного плана, в окне "Другие настройки...", это путь до файла конфигурации относительно каталога jserver/db/, или абсолютный путь - по умолчанию это pbe.cfg.

Рассмотрим дистрибутивный конфигурационный файл:

# пустые строки, а также строки (все что после символа) # - комментарии
# наличие и порядок фигурных скобок { и } - важны
# для всех элементов формат одинаков:
# имя_элемента метка {
#  параметры_элемента
# }
# при этом метка - это номер или строковое значение, на которое ссылаются в дальнейшем другие элементы
# исключение - элементы типа rule, там метки - только числа, порядковые номера правил.

# оператор include позволяет вставлять "общие" для разных тарифных планов элементы
# конфигурации, такие как правила condition (условия)
include defaultconditions.cfg

# определяет файл с префиксами подсетей (см. подробности)
prefix-file russian-nets {
	path: russian-subnets.txt
	reload: 60 # in minutes
}

# определяет условие совпадения. идентификатор условия - all_rus_ip, он будет использоваться
# далее в ссылках из правил
condition all_rus_ip { # под это условие попадает весь IP трафик
	type: traffic
	protocol: ip
	srcdst: any
	source: any # 1.224.36.4/18  or ip_addr, ip_subnet/maskbits, prefix-file russian-nets
	destination: any # 5.6.7.8/31
	port: any
	src_port: any
	dst_port: any
	ds-type: any
	ds-tag: any
}

# определяет то, как будет учитываться трафик, правило учета имеет здесь идентификатор 1
#  - будет использовано далее в правилах
accounting 1 {
	multiplier: megabyte # мультипликатор
	name: All IP traffic # имя, которое будет отображаться в поле Props окна репортинга
	direction input { # входящий
		tag: traffic-in # метка в базе данных
		rate: 10 # цена за входящий
	}
	direction output { # исходящий
		tag: traffic-out
		rate: 10
	}
}

accounting web_acct { # веб-трафик у нас бесплатно
	multiplier: megabyte
	name: All WEB traffic
	direction input {
		tag: web-in
		rate: 0
	}
	direction output {
		tag: web-out
		rate: 0
	}
}

# собственно правила учета обрабатываются по порядковому номеру.
rule 1 {
	condition: all_rus_ip # если совпало условие (IP-адрес, порт, имя data-source, ....) [подробнее]
	accounting: 1 # вести учет по методу и тарифам, определенным в accounting 1
	filter: pass # or block
	next: continue # or stop
}

rule 2 {
	condition: 2
	accounting: web_acct
	filter: pass # or block
	next: continue # or stop
}

#
# а это содержимое файла defaultconditions.cfg, включенного из pbe.cfg

condition 2 { # только веб-трафик
	type: traffic
	protocol: tcp
	port: 80,81,8080,8888,443
}

Изменения в pbe.cfg пока требуют рестарта программы.

Механизм учета по файлам префиксов подсетей

Префиксом подсети называется запись вида X.X.X.X/YY, где X.X.X.X - номер подсети, например "212.140.10.0", а YY - сетевая маска, записанная в формате числа битов "единичка" двоичного представления маски подсети. Таким образом, запись "/0" эквивалентна сетевой маске "0.0.0.0" (все хосты диапазона IPv4), "/24" маске "255.255.255.0", а "/32" маске "255.255.255.255" (единственному хосту).

Используя файлы префиксов, можно удобно производить учет (при конструировании соответствующих правил) по трафику в сторону некоторого набора подсетей, например внутренних подсетей провайдера, где тарификация нулевая, или отличается от остальной. Типичным примером может служить разделение "российского" (или любого национального) трафика, и остального трафика. Для примера в дистрибутивном комплекте поставляются два файла со списками префиксов "географических" сетей, а именно:

Эти файлы были сгенерированы 10 января 2011 года из базы данных RIPE по технологии, описанной в "Создание файлов префиксов национальных сетей" из дистрибутива NeTAMS 3.4. Достаточно легко самостоятельно собрать и аналогичные "региональные" списки.

Если в описании элемента политики prefix-file присутствует параметр reload (значение не важно), сервис биллинга будет периодически (раз в 30 секунд) проверять, не был ли изменен файл префиксов "извне", и если таковое произошло, он будет "на лету" переподгружен. Это полезно, если вы собираетесь регулярно (скажем, раз в неделю) пересобирать внешними скриптами файл префиксов из базы RIPE, или из того списка "своих" сетей, который предоставляет вам ваш провайдер. 

Механизм cопоставлений условий (condition) в правилах (rule)

В простейшем случае можно задать идентификатор (имя или номер) условия при составлении правила, например:

rule 1 {   
	condition: all_rus   
	...

Однако есть возможность составлять простые "составные" условия, таким образом комбинируя два условия в одно. Синтаксис команды тогда такой: 

condition: условие

правило срабатывает при наступлении (совпадении) условия

condition: NOT условие

правило срабатывает при НЕнаступлении (НЕсовпадении) условия

condition: условие1 AND условие2

правило срабатывает при наступлении (совпадении) ОБОИХ условий одновременно

condition: условие1 OR условие2

правило срабатывает при наступлении (совпадении) ЛЮБОГО из условий, или ОБОИХ