Это команда postfwd2, которую можно запустить в провайдере бесплатного хостинга OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
postfwd2 - демон брандмауэра postfix
СИНТАКСИС
postfwd2 [ОПЦИИ] [ИСТОЧНИК1, ИСТОЧНИК2, ...]
Набор правил: (хотя бы одно, допускается многократное использование):
-f, --file читает правила из
-r, --rule добавляет настроить
-s, --scores знак равно возвращается когда оценка превышает
Сервер:
-i, --interface слушать на интерфейсе
-p, --port слушать порт
--протокол тип сокета (tcp или unix)
--server_socket например, tcp: 127.0.0.1: 10045
-u, --user установить uid для пользователя
-g, --group установить gid в группу
--умаска umask для основных файловых разрешений
--server_umask umask для файловых разрешений сервера
--pidfile создать pidfile под
--min_servers
--max_servers
--min_spare_servers элементов
--max_spare_servers
Кэш:
-c, --cache устанавливает тайм-аут кэша запросов на секунды
--cleanup-requests интервал очистки в секундах для кеша запросов
--cache_interface слушать на интерфейсе
--cache_port слушать порт
--cache_proto тип сокета (tcp или unix)
--cache_socket например, tcp: 127.0.0.1: 10043
--cache_umask umask для разрешений файла кеша
--cacheid список элементов запроса для cache-id
--cache-rdomain-only пропустить локальную часть получателя для идентификатора кеша
--cache-no-sender пропустить адрес отправителя для идентификатора кеша
--cache-no-size размер пропуска для идентификатора кеша
--no_parent_request_cache отключить кеш родительских запросов
--no_parent_rate_cache отключить родительский кеш скорости
--no_parent_dns_cache отключить родительский кеш DNS (по умолчанию)
--no_parent_cache отключить все родительские кеши
Цены:
- ставки очистки интервал очистки в секундах для кеша скорости
Контроль:
-k, --kill, --stop завершить postfwd2
--reload, --hup перезагрузить postfwd2
--сторожевая собака сторожевой таймер в секундах
--респаун задержка респауна в секундах
- неудачи счетчик неудачных попыток возрождения
- демоны список демонов для запуска
--dumpcache показать содержимое кеша
--dumpstats показать статистику
-R, --chroot chroot в перед стартом
--delcache удаляет элемент из кеша запросов
--делать удаляет элемент из кеша ставок
DNS:
-n, --nodns пропустить любой тест на основе DNS
--dns_timeout Тайм-
--dns_timeout_max
--dns_timeout_interval
--cache-rbl-timeout по
--cache-rbl-default шаблон DNS по умолчанию, если он не указан в наборе правил
--cleanup-rbls очищать
--dns_async_txt одновременно выполнять поиск в dnsbl A и TXT
--dns_max_ns_lookups максимальное количество имен для поиска с помощью sender_ns_addrs
--dns_max_mx_lookups максимальное количество имен для поиска с помощью sender_mx_addrs
Дополнительно:
-t, --test testing, всегда возвращает «не знаю»
-S, --summary
--noidlestats отключает статистику в режиме ожидания
--norulestats отключает статистику по правилу
-I, --instantcfg перезагружает набор правил при каждом новом запросе
--config_timeout
--keep_rates не очищать счетчики ограничения скорости при перезагрузке
--save_rates ограничения скорости сохранения и загрузки на диск
--fast_limit_evaluation оценить пределы скорости до анализа набора правил
(обратите внимание на ограничения)
Плагины:
--плагины загружает плагины postfwd из файла
Логирование:
-l, --logname метка для сообщений системного журнала
--facility использовать средство системного журнала
--socktype использовать syslog socktype
--nodnslog не записывать результаты DNS
--anydnslog записывать любые результаты DNS (даже кешированные)
--norulelog не записывать действия правила
--nolog | --perfmon вообще не ведение журнала
-v, --verbose подробное ведение журнала, используйте дважды для увеличения
--debug список классов отладки
Информация (используйте только в командной строке!):
-h, --help отобразить эту справку и выйти
-m, --manual показывает руководство по программе
-V, --version вывести информацию о версии и выйти
-D, --defaults показать настройки postfwd2 и выйти
-C, --showconfig показать набор правил postfwd2 и выйти (-v разрешено)
-L, --stdout перенаправить сообщения системного журнала на стандартный вывод
-q, --quiet нет системного журнала, нет stdout (-P работает для совместимости)
Устарело (только для совместимости с postfwd v1):
-d | --daemon, --shortlog, --dns_queuesize, --dns_retries
ОПИСАНИЕ
ВВЕДЕНИЕ
postfwd2 написан для объединения сложных постфиксных ограничений в набор правил, подобных тем
из большинства межсетевых экранов. Программа использует протокол делегирования постфиксных политик для управления
доступ к почтовой системе до того, как сообщение было принято (пожалуйста, посетите
<http://www.postfix.org/SMTPD_POLICY_README.html> для получения дополнительной информации).
postfwd2 позволяет вам выбрать действие (например, отклонить, не знаю) для комбинации нескольких
параметры smtp (например, адрес отправителя и получателя, размер или отпечаток TLS клиента).
Также он предлагает простые макросы / ACL, которые должны обеспечивать простоту и удобство чтения.
конфигурации.
Преимущества:
* Сложные комбинации параметров smtp
* Комбинированные поиски RBL / RHSBL с произвольными действиями в зависимости от результатов
* Система баллов
* Правила на основе даты / времени
* Макросы / ACL, группы, отрицание
* Сравните атрибуты запроса (например, client_name и helo_name)
* Внутреннее кеширование для запросов и запросов DNS
* Встроенная статистика для анализа эффективности правил
КОНФИГУРАЦИЯ
Строка конфигурации состоит из необязательных пар элемент = значение, разделенных точкой с запятой (`;`)
и соответствующее желаемое действие:
[ знак равно ; знак равно ; ...] действие =
Пример:
client_address = 192.168.1.1; отправитель ==[электронная почта защищена] ; действие = ОТКАЗАТЬ
Это отклонит всю почту от 192.168.1.1 с отправителем конверта [электронная почта защищена], Получатель чего-то
элементы не важны. Таким образом, следующее приведет к тому же результату, что и
предыдущий пример:
действие = ОТКАЗАТЬ; client_address = 192.168.1.1; отправитель ==[электронная почта защищена]
На то, как элементы запроса сравниваются с набором правил, можно повлиять следующим образом:
путь:
================================================== ==================
ITEM == VALUE истина, если ITEM равно VALUE
ITEM => VALUE истина, если ITEM> = VALUE
ITEM = <VALUE true, если ITEM <= VALUE
ITEM> VALUE истина, если ITEM> VALUE
ITEM <VALUE true, если ITEM <VALUE
ITEM = ~ VALUE истина, если ITEM ~ = / ^ VALUE $ / i
ITEM! = VALUE false, если ITEM равно VALUE
ITEM!> VALUE false, если ITEM> = VALUE
ITEM! <VALUE false, если ITEM <= VALUE
ITEM! ~ VALUE false, если ITEM ~ = / ^ VALUE $ / i
ITEM = VALUE поведение по умолчанию (см. Раздел ITEMS)
================================================== ==================
Чтобы идентифицировать отдельные правила в ваших файлах журнала, вы можете добавить уникальный идентификатор для каждого из
он:
id = R_001; действие = ОТКАЗАТЬ; client_address = 192.168.1.1; отправитель ==[электронная почта защищена]
Вы можете использовать эти идентификаторы в качестве цели для `Прыжок()`команда (см. раздел ДЕЙСТВИЯ
ниже). Начальные и конечные пробельные символы игнорируются. Используйте '#', чтобы прокомментировать ваш
конфигурация. Остальные оценят.
Набор правил состоит из одного или нескольких правил, которые могут быть загружены из файлов или переданы как
аргументы командной строки. См. Раздел КОМАНДНАЯ СТРОКА ниже для получения дополнительной информации о
Эта тема.
Начиная с версии 1.30 postfwd правила, охватывающие несколько строк, могут быть определены с помощью префикса
следующие строки с одним или несколькими пробелами (или '}' для макросов):
id = RULE001
client_address = 192.168.1.0 / 24
отправитель ==[электронная почта защищена]
action = REJECT нет доступа
Версии postfwd до 1.30 требуют завершающих символов ';' и '\' - символы:
id = RULE001; \
client_address = 192.168.1.0 / 24; \
отправитель ==[электронная почта защищена]; \
action = REJECT нет доступа
ПУНКТЫ
id - уникальный идентификатор правила, который можно использовать для анализа лога
идентификаторы также служат целями для команды "прыжок".
date, time - время или диапазон дат в пределах указанного правила должны совпадать
# ФОРМАТ:
# 29 февраля
дата = 29.02.2008
# 24-26 декабря
дата = 24.12.2008-26.12.2008
# с сегодняшнего дня по 23 ноября
дата = -23.09.2008
# с 1 апреля по сегодняшний день
дата = 01.04.2008-
дни, месяцы - диапазон рабочих дней (вс-сб) или месяцев (январь-декабрь)
в пределах указанного правила попадает
оценка - при достижении указанного балла (см. раздел ДЕЙСТВИЯ)
указанное действие будет возвращено в postfix
оценки устанавливаются глобально, пока не будут переопределены!
request_score - это значение позволяет получить доступ к оценке запроса. Это
может использоваться как переменная ($$ request_score).
rbl, rhsbl, - запросить указанные RBL / RHSBL, возможные значения:
rhsbl_client, [/ / , / / ]
rhsbl_sender, (по умолчанию: reply = ^ 127 \ .0 \ .0 \. \ d + $ maxcache = 3600)
rhsbl_reverse_client результаты всех запросов rhsbl_ * будут объединены
в rhsbl_count (см. ниже).
rblcount, rhsblcount - минимальное количество совпадений RBL / RHSBL для сопоставления. если не указано
одно попадание RBL / RHSBL будет соответствовать элементам rbl / rhsbl.
вы можете указать «все» для оценки всех элементов и использовать
это как переменная в действии (см. раздел ДЕЙСТВИЯ)
(по умолчанию: 1)
sender_localpart, - локальная / доменная часть адреса отправителя
отправитель_домен
recipient_localpart, - локальная / доменная часть адреса получателя
получатель_домен
helo_address - postfwd2 пытается найти helo_name. использовать
helo_address = !! (0.0.0.0/0) для проверки на неизвестность.
Пожалуйста, не используйте это для положительного контроля доступа
(внесение в белый список), поскольку это могло быть подделано.
sender_ns_names, - postfwd2 пытается найти имена / IP-адреса
sender_ns_addrs серверов имен для части домена отправителя.
Пожалуйста, не используйте это для положительного контроля доступа
(внесение в белый список), поскольку это могло быть подделано.
sender_mx_names, - postfwd2 пытается найти имена / IP-адреса
sender_mx_addrs записей mx для части домена отправителя.
Пожалуйста, не используйте это для положительного контроля доступа
(внесение в белый список), поскольку это могло быть подделано.
version - версия postfwd2, содержит "postfwd2 n.nn"
это включает проверки на основе версий в ваших наборах правил
(например, для миграции). работает и со старыми версиями,
потому что несуществующий элемент всегда возвращает false:
# версия> = 1.10
id = R01; версия ~ = 1 \. [1-9] [0-9]; sender_domain == some.org \
; action = REJECT извините, нет доступа
ratecount - доступен только для действий rate (), size () и rcpt ().
содержит фактический счетчик лимита:
id = R01; действие = скорость (отправитель / 200/600 / REJECT предел 200 превышен [$$ ratecount hits])
id = R02; действие = скорость (отправитель / 100/600 / ПРЕДУПРЕЖДЕНИЕ 100 превышено [$$ ratecount hits])
Кроме них, вы можете указать любой атрибут протокола делегирования политики постфикса.
Не стесняйтесь комбинировать их так, как вам нужно (см. Раздел ПРИМЕРЫ ниже).
Большинство значений можно указать как регулярные выражения (PCRE). См. Таблицу ниже для
Детали:
# ================================================= =========
# ITEM = VALUE TYPE
# ================================================= =========
id = что-то маска = строка
дата = 01.04.2007-22.04.2007 маска = дата (ДД.ММ.ГГГГ-ДД.ММ.ГГГГ)
время = 08: 30: 00-17: 00: 00 маска = время (ЧЧ: ММ: СС-ЧЧ: ММ: СС)
days = пн-ср маска = будни (пн-ср) или числовые (1-3)
месяцы = февраль-апрель маска = месяцы (февраль-апрель) или числовые (1-3)
оценка = 5.0 маска = максимальное значение с плавающей запятой
rbl = zen.spamhaus.org маска = / / [, ...]
rblcount = 2 mask = numeric, будет соответствовать, если rbl попадет> = 2
helo_address = маска = CIDR [, CIDR, ...]
sender_ns_names = some.domain.tld маска = PCRE
sender_mx_names = some.domain.tld маска = PCRE
sender_ns_addrs = маска = CIDR [, CIDR, ...]
sender_mx_addrs = маска = CIDR [, CIDR, ...]
# -------------------------------
# Postfix версии 2.1 и новее:
# -------------------------------
client_address = маска = CIDR [, CIDR, ...]
client_name = another.domain.tld маска = PCRE
reverse_client_name = another.domain.tld маска = PCRE
helo_name = some.domain.tld маска = PCRE
отправитель =[электронная почта защищена] маска = PCRE
получатель =[электронная почта защищена] маска = PCRE
recipient_count = 5 mask = numeric, будет соответствовать, если получатели> = 5
# -------------------------------
# Postfix версии 2.2 и новее:
# -------------------------------
sasl_method = обычная маска = PCRE
sasl_username = ваша маска = PCRE
sasl_sender = маска = PCRE
size = 12345 mask = numeric, будет соответствовать, если size> = 12345
ccert_subject = blackhole.nowhere.local mask = PCRE (только если tls подтверждено)
ccert_issuer = John + 20Doe mask = PCRE (только если tls подтверждено)
ccert_fingerprint = AA: BB: CC: DD: EE: ... mask = PCRE (НЕ используйте здесь "...")
# -------------------------------
# Postfix версии 2.3 и новее:
# -------------------------------
encryption_protocol = TLSv1 / маска SSLv3 = PCRE
encryption_cipher = DHE-RSA-AES256-маска SHA = PCRE
encryption_keysize = 256 mask = numeric, будет соответствовать, если размер ключа> = 256
...
текущий список можно найти наhttp://www.postfix.org/SMTPD_POLICY_README.html>. Пожалуйста
внимательно прочитайте, какой атрибут можно использовать на каком уровне транзакции smtp
(например, размер будет надежно работать только на уровне КОНЕЦ СООБЩЕНИЯ). Сопоставление с образцом
выполняется без учета регистра.
Допускается многократное использование одного и того же элемента, которое будет сравниваться как логическое ИЛИ, что означает, что
это будет работать, как ожидалось:
id = TRUST001; действие = ОК; encryption_keysize = 64
ccert_fingerprint=11:22:33:44:55:66:77:88:99
ccert_fingerprint=22:33:44:55:66:77:88:99:00
ccert_fingerprint=33:44:55:66:77:88:99:00:11
отправитель = @ домен \ .local $
элементы client_address, rbl и rhsbl также могут быть указаны как разделенные пробелами или запятыми
ценности:
id = SKIP01; действие = не знаю
client_address = 192.168.1.0 / 24, 172.16.254.23
id = SKIP02; действие = не знаю
client_address = 10.10.3.32 10.216.222.0/27
Следующие предметы должны быть уникальными:
id, минимальное и максимальное значения, rblcount и rhsblcount
Любой элемент можно отменить, поставив перед ним "!!" к нему, например:
id = HOST001; имя хоста == !! secure.trust.local; action = REJECT только secure.trust.local, пожалуйста
или используя правильный оператор сравнения:
id = HOST001; имя хоста! = secure.trust.local; action = REJECT только secure.trust.local, пожалуйста
Чтобы избежать путаницы с регулярными выражениями или просто для большей наглядности, вы можете использовать '!! (...)':
id = USER01; sasl_username = ~ !! (/ ^ (bob | alice) $ /); action = REJECT, кто это?
Атрибуты запроса можно сравнить с помощью предшествующих символов '$$', например:
id = R-003; client_name = !! $$ helo_name; action = WARN helo не соответствует DNS
# или же
id = R-003; client_name = !! ($$ (helo_name)); action = WARN helo не соответствует DNS
Это действительно только для значений PCRE (см. Список выше). Сравнение будет производиться как
точное совпадение без учета регистра. Для отладки используйте параметр -vv.
Эти специальные предметы будут сброшены для любого нового правила:
rblcount - содержит количество ответов RBL
rhsblcount - содержит количество ответов RHSBL
совпадений - содержит количество совпавших элементов
dnsbltext - содержит часть dns TXT всех ответов RBL и RHSBL в форме
rbltype: rblname: ; rbltype: rblname: ; ...
Эти специальные элементы будут изменены для любого правила сопоставления:
request_hits - содержит идентификаторы всех подходящих правил
Это означает, что может потребоваться их сохранить, если вы планируете использовать эти значения в
более поздние правила:
# набор значений
id = RBL01; rhsblcount = все; rblcount = все
действие = набор (HIT_rhls = $$ rhsblcount, HIT_rbls = $$ rblcount, HIT_txt = $$ dnsbltext)
rbl = list.dsbl.org, bl.spamcop.net, dnsbl.sorbs.net, zen.spamhaus.org
rhsbl_client = rddn.dnsbl.net.au, rhsbl.ahbl.org, rhsbl.sorbs.net
rhsbl_sender = rddn.dnsbl.net.au, rhsbl.ahbl.org, rhsbl.sorbs.net
# сравнивать
id = RBL02; HIT_rhls> = 1; HIT_rbls> = 1; action = 554 5.7.1 заблокирован с помощью RBL $$ HIT_rhls и RBL $$ HIT_rbls [INFO: $$ HIT_txt]
id = RBL03; HIT_rhls> = 2; action = 554 5.7.1 заблокирован с помощью RHSBL $$ HIT_rhls [INFO: $$ HIT_txt]
id = RBL04; HIT_rbls> = 2; action = 554 5.7.1 заблокирован с помощью RBL $$ HIT_rbls [INFO: $$ HIT_txt]
FILES
Начиная с postfwd1 v1.15 и postfwd2 v0.18 длинные списки элементов можно хранить в отдельных файлах:
id = R001; ccert_fingerprint == файл: / etc / postfwd / wl_ccerts; действие = НЕВЕРОЯТНО
postfwd2 будет читать список элементов (по одному в строке) из / etc / postfwd / wl_ccerts.
комментарии разрешены:
# клиент1
11:22:33:44:55:66:77:88:99
# клиент2
22:33:44:55:66:77:88:99:00
# клиент3
33:44:55:66:77:88:99:00:11
Чтобы использовать существующие таблицы в формате ключ = значение, вы можете использовать:
id = R001; ccert_fingerprint == таблица: / etc / postfwd / wl_ccerts; действие = НЕВЕРОЯТНО
Это проигнорирует правое значение. Предметы можно смешивать:
id = R002; действие = ОТКАЗАТЬ
client_name == unknown
имя_клиента == файл: / etc / postfwd / blacklisted
и для элементов без pcre (разделенных запятыми):
id = R003; действие = ОТКАЗАТЬ
client_address == 10.1.1.1, файл: / etc / postfwd / blacklisted
id = R004; действие = ОТКАЗАТЬ
rbl = myrbl.home.local, zen.spamhaus.org, файл: / etc / postfwd / rbls_changing
Вы можете проверить свою конфигурацию с помощью параметра --show_config в командной строке:
# postfwd2 --showconfig --rule = 'action = DUNNO; client_address = 10.1.0.0 / 16, файл: / etc / postfwd / wl_clients, 192.168.2.1 '
должен дать что-то вроде:
Правило 0: id -> «R-0»; действие -> «DUNNO»; client_address -> "=; 10.1.0.0/16, =; 194.123.86.10, =; 186.4.6.12, =; 192.168.2.1"
Если файл не может быть прочитан, он будет проигнорирован:
# postfwd2 --showconfig --rule = 'action = DUNNO; client_address = 10.1.0.0 / 16, файл: / etc / postfwd / wl_clients, 192.168.2.1 '
[Предупреждение журнала]: ошибка: файл / etc / postfwd / wl_clients не найден - файл будет проигнорирован?
Правило 0: id -> «R-0»; действие -> «DUNNO»; client_address -> "=; 10.1.0.0/16, =; 192.168.2.1"
Элементы файла оцениваются на этапе настройки. Поэтому нужно перезагрузить postfwd2
если файл был изменен
Если вы хотите указать файл, который будет перезагружаться для каждого запроса, вы можете использовать lfile:
и таблица:
id = R001; client_address = lfile: / etc / postfwd / client_whitelist; действие = не знаю
Это будет проверять время изменения / etc / postfwd / client_whitelist каждый раз, когда правило
оценивается и перезагружает его при необходимости. Конечно, это может увеличить нагрузку на систему, поэтому
пожалуйста, используйте его с осторожностью.
Параметр --showconfig иллюстрирует разницу:
## оценивается на этапе настройки
# postfwd2 --nodaemon -L --rule = 'client_address = table: / etc / postfwd / clients; действие = не знаю '-C
Правило 0: id -> «R-0»; действие -> "не знаю"; client_address -> "=; 1.1.1.1, =; 1.1.1.2, =; 1.1.1.3"
## оценивается для любого попадания в правила
# postfwd2 --nodaemon -L --rule = 'client_address = ltable: / etc / postfwd / clients; действие = не знаю '-C
Правило 0: id -> «R-0»; действие -> "не знаю"; client_address -> "=; таблица: / etc / postfwd / clients"
Файлы могут относиться к другим файлам. Верно следующее.
- ФАЙЛ /etc/postfwd/rules.cf -
id = R01; client_address = файл: /etc/postfwd/clients_master.cf; действие = НЕВЕРОЯТНО
- ФАЙЛ /etc/postfwd/clients_master.cf -
192.168.1.0/24
файл: /etc/postfwd/clients_east.cf
файл: /etc/postfwd/clients_west.cf
- ФАЙЛ /etc/postfwd/clients_east.cf -
192.168.2.0/24
- ФАЙЛ /etc/postfwd/clients_west.cf -
192.168.3.0/24
Обратите внимание, что в настоящее время нет обнаружения петель (/ a / file вызывает / a / file) и что этот
эта функция доступна только в версиях postfwd1 v1.15 и postfwd2 v0.18 и выше.
Действия
Общие
Действия будут выполнены, когда все элементы правила соответствуют запросу (или хотя бы одному из
любой список предметов). Вы можете ссылаться на атрибуты запроса, используя символы $$, например:
id = R-003; client_name = !! $$ helo_name; action = WARN helo '$$ helo_name' не соответствует DNS '$$ client_name'
# или же
id = R-003; client_name = !! $$ helo_name; action = WARN helo '$$ (helo_name)' не соответствует DNS '$$ (client_name)'
постфикс действия
Постфиксы будут отвечать на действия как результат запросов на делегирование политики. Любое действие
что postfix понимает, разрешено - см. "доступ man 5" или
<http://www.postfix.org/access.5.html> для описания. Если действие не указано,
postfix WARN действие, которое просто регистрирует событие, будет использоваться для соответствующего правила.
postfwd2 вернет не знаю, если он достиг конца набора правил и ни одно правило не
совпадает. Это можно изменить, поместив последнее правило, содержащее только оператор действия:
...
действие = не знаю; [электронная почта защищена] # отправитель в порядке
действие = отклонить # отклонить по умолчанию
postfwd2 действия
Действия postfwd2 управляют поведением программы. В настоящее время вы можете указать
следующие:
Прыжок ( )
переходит к правилу с идентификатором , используйте это, чтобы пропустить определенные правила.
можно прыгать назад - но помните, что петли нет
обнаружение на данный момент! переходы к несуществующим идентификаторам будут пропущены.
счет ( )
оценка запроса будет изменена указанным ,
которое должно быть значением с плавающей запятой. модификатор может быть либо
+ n.nn добавляет n.nn к текущему счету
-n.nn удаляет n.nn из текущей партитуры
* n.nn умножает текущий счет на n.nn
/n.nn делит текущий счет на n.nn
= n.nn устанавливает текущий счет на n.nn
если оценка превышает максимум, установленный опцией `--scores` (см.
КОМАНДНАЯ СТРОКА) или предмет оценки (см. Раздел ПУНКТЫ), действие
определенные для этого случая будут возвращены (по умолчанию: 5.0 => «REJECT postfwd2 score exceeded»).
установленный ( знак равно , знак равно , ...)
эта команда позволяет вставлять или переопределять атрибуты запроса, которые затем могут быть
по сравнению с вашим дальнейшим набором правил. используйте это, чтобы ускорить повторные сравнения с большими списками элементов.
пожалуйста, смотрите раздел ПРИМЕРЫ для получения дополнительной информации. вы можете разделить несколько пар ключ = значение
символами ",".
темп ( / / / )
эта команда создает счетчик для данного , который будет увеличиваться каждый раз при запросе
содержащий это прибывает. если он превышает в секунд он вернется постфиксить.
счетчики скорости работают очень быстро, поскольку они выполняются до того, как будет проанализирован набор правил.
обратите внимание, что был ограничен действиями postfix (без действий postfwd) для версий postfwd <1.33!
# не более 3 запросов за 5 минут
# от того же "неизвестного" клиента
id = RATE01; client_name == unknown
action = rate (client_address / 3/300/450 4.7.1 извините, максимум 3 запроса за 5 минут)
размер ( / / / )
эта команда работает аналогично команде rate () с той разницей, что счетчик скорости
увеличивается на атрибут размера запроса. чтобы сделать это надежно, вы должны вызвать postfwd2 из
smtpd_end_of_data_restrictions. если вы хотите быть уверены, вы можете проверить это в наборе правил:
# ограничение размера 1.5 МБ в час для каждого клиента
id = SIZE01; protocol_state == КОНЕЦ-СООБЩЕНИЯ; client_address == !! (10.1.1.1)
action = size (client_address / 1572864/3600/450 4.7.1 извините, максимум 1.5 МБ в час)
rcpt ( / / / )
эта команда работает аналогично команде rate () с той разницей, что счетчик скорости
увеличивается на атрибут recipient_count запроса. чтобы сделать это надежно, вы должны вызвать postfwd
из smtpd_data_restrictions или smtpd_end_of_data_restrictions. если хочешь быть уверенным, ты мог бы
проверьте это в наборе правил:
# ограничение количества получателей 3 в час для каждого клиента
id = RCPT01; protocol_state == КОНЕЦ-СООБЩЕНИЯ; client_address == !! (10.1.1.1)
action = rcpt (client_address / 3/3600/450 4.7.1 извините, максимум 3 получателя в час)
rate5321, size5321, rcpt5321 ( / / / )
такие же, как и соответствующие функции, отличные от 5321, с той разницей, что локальная часть
Адреса отправителя или получателя оцениваются с учетом регистра в соответствии с rfc5321. Что
означает, что запросы от [электронная почта защищена] и [электронная почта защищена] будут относиться по-другому
просить ( : [: ])
позволяет делегировать решение политики другой службе политики (например, postgrey). первое
и второй аргумент (адрес и порт) являются обязательными. третий необязательный аргумент может быть
указано, чтобы postfwd2 игнорировал определенные ответы и продолжал синтаксический анализ набора правил:
# example1: запросить postgrey и вернуть ответ в postfix
id = СЕРЫЙ; client_address == 10.1.1.1; действие = спросить (127.0.0.1:10031)
# example2: запросить postgrey, но игнорировать его ответ, если он соответствует 'DUNNO'
# и продолжаем анализ набора правил postfwd
id = СЕРЫЙ; client_address == 10.1.1.1; действие = спросить (127.0.0.1:10031:^dunno$)
почта (сервер / вертолет / от / к / тема / тело)
Эта команда устарела. Вместо этого вам следует попробовать использовать действие sendmail ().
Очень простая почтовая команда, которая отправляет сообщение с заданными аргументами. ОГРАНИЧЕНИЯ:
Это в основном выполняет телнет. Нет доступа к аутентификации или TLS. Кроме того, это
не отслеживать состояние уведомления и уведомит вас в любое время, соответствующее правило сработает.
sendmail (sendmail-путь :: from :: to :: subject :: body)
Команда Mail, которая использует существующий двоичный файл sendmail и отправляет сообщение с заданными аргументами.
ОГРАНИЧЕНИЯ: команда не отслеживает состояние уведомлений и уведомит вас в любое время,
соответствующие совпадения правил (что может означать 100 писем для письма со 100 получателями на этапе RCPT).
ждать ( )
приостанавливает выполнение программы на секунд. использовать это для
задержка или дросселирование соединений.
Примечание ( )
просто регистрирует данную строку и продолжает анализ набора правил.
если строка пуста, ничего не будет зарегистрировано (noop).
выйти ( )
завершает программу с заданным кодом выхода. постфикс не
это слишком сильно, поэтому используйте его с осторожностью.
Вы можете ссылаться на атрибуты запроса, например
id = R-HELO; helo_name = ^ [^ \.] + $; action = REJECT недопустимый helo '$$ helo_name'
МАКРОСЫ / ACLS
Многократное использование длинных элементов или их комбинаций может быть сокращено макросами. Те
должен иметь префикс '&&' (два символа '&'). Сначала макросы должны быть определены как
следующим образом:
&& RBLS {rbl = zen.spamhaus.org, list.dsbl.org, bl.spamcop.net, dnsbl.sorbs.net, ix.dnsbl.manitu.net; };
Затем они могут быть использованы в ваших правилах, например:
&& RBLS; client_name = ^ unknown $; действие = ОТКАЗАТЬ
&& RBLS; client_name = (\ d + [\.-_]) {4}; действие = ОТКАЗАТЬ
&& RBLS; имя_клиента = [\.-_] (adsl | динамический | ppp |) [\.-_]; действие = ОТКАЗАТЬ
Макросы также могут содержать действия:
# определение
&& GONOW {action = REJECT, ваш запрос заставил нашу политику обнаружения спама отклонить это сообщение. Больше информации на http://www.domain.local; };
# правила
&& GONOW; && RBLS; client_name = ^ unknown $
&& GONOW; && RBLS; client_name = (\ d + [\.-_]) {4}
&& GONOW; && RBLS; client_name = [\.-_] (adsl | dynamic | ppp |) [\.-_]
Макросы также могут содержать макросы:
# определение
&& RBLS {
rbl = zen.spamhaus.org
rbl = list.dsbl.org
rbl = bl.spamcop.net
rbl = dnsbl.sorbs.net
rbl = ix.dnsbl.manitu.net
};
&& DYNAMIC {
client_name = ^ unknown $
client_name = (\ d + [\.-_]) {4}
client_name = [\.-_] (adsl | dynamic | ppp |) [\.-_]
};
&& GOAWAY {&& RBLS; && ДИНАМИЧЕСКИЙ; };
# правила
&&УХОДИТЕ ; action = REJECT динамический клиент и указан в RBL
В основном макросы - это простые замены текста - см. Раздел «ПАРСЕР» для получения дополнительной информации.
Информация.
PLUGINS
Описание
Интерфейс плагина позволяет вам определять свои собственные проверки и улучшать postfwd's
функциональность. Не стесняйтесь делиться полезным!
Предупреждение
Обратите внимание, что интерфейс плагина все еще находится на стадии разработки. Пожалуйста, проверьте свои плагины
осторожно, потому что из-за ошибок postfwd может сломаться! Также разрешено отменять
атрибуты или встроенные функции, но убедитесь, что вы знаете, что делаете, потому что некоторые из
они используются внутри компании.
Пожалуйста, помните о безопасности, когда вы получаете доступ к разумным ресурсам и никогда не запускаете
postfwd как привилегированный пользователь! Также никогда не доверяйте своему вводу (особенно именам хостов и электронной почте).
адреса).
ПУНКТЫ
Плагины элементов - это подпрограммы Perl, которые интегрируют дополнительные атрибуты в запросы перед
они оцениваются по набору правил postfwd, как и любой другой элемент делегирования политики
протокол. Это позволяет вам создавать свои собственные чеки.
plugin-items нельзя использовать выборочно. эти функции будут выполняться для каждого запроса
postfwd получает, поэтому помните о производительности.
СИНОПСИС:% result = postfwd_items_plugin { }(%запрос)
означает, что ваша подпрограмма называется , имеет доступ к хешу под названием% request, который
содержит все атрибуты запроса, например $ request {client_name}, и должен возвращать значение в
следующая форма:
save: $ result { знак равно
это создает новый элемент содержащий , который будет интегрирован в
запрос на делегирование политики и поэтому может использоваться в наборе правил postfwd.
# НЕ удаляйте следующую строку
% postfwd_items_plugin = (
# ПРИМЕРЫ - интегрированы в postfwd. не нужно активировать их здесь.
# позволяет проверить версию postfwd в наборе правил
"version" => sub {
мой (% request) = @_;
мой (% результат) = (
"version" => $ NAME. "". $ VERSION,
);
вернуть результат%;
},
# sender_domain и recipient_domain
"address_parts" => sub {
мой (% request) = @_;
мой (% результат) = ();
$ request {отправитель} = ~ / @ ([^ @] *) $ /;
$ result {sender_domain} = ($ 1 || '');
$ request {получатель} = ~ / @ ([^ @] *) $ /;
$ result {домен_получателя} = ($ 1 || '');
вернуть результат%;
},
# НЕ удаляйте следующую строку
);
СРАВНЕНИЕ
Плагины сравнения позволяют вам определять, как ваши новые элементы должны сравниваться с набором правил.
Это необязательно. Если вы его не укажете, значение по умолчанию (== для точного совпадения, = ~ для
PCRE, ...) будет использоваться.
ОБЗОР: => sub {return & {$ postfwd_compare { }} (@_); },
# НЕ удаляйте следующую строку
% postfwd_compare_plugin = (
ПРИМЕРЫ - интегрированы в postfwd. не нужно активировать их здесь.
# Простой пример
# ОБЗОР: знак равно (возврат и {$ postfwd_compare { }} (@_))
"client_address" => sub {return & {$ postfwd_compare {cidr}} (@_); },
"size" => sub {return & {$ postfwd_compare {numeric}} (@_); },
"recipient_count" => sub {return & {$ postfwd_compare {numeric}} (@_); },
# Сложный пример
# ОБЗОР: знак равно ( , , , )
"numeric" => sub {
мой ($ cmp, $ val, $ myitem,% request) = @_;
мой ($ myresult) = undef; $ myitem || = "0"; $ val || = "0";
if ($ cmp eq '==') {
$ myresult = ($ myitem == $ val);
} elsif ($ cmp eq '= <') {
$ myresult = ($ myitem <= $ val);
} elsif ($ cmp eq '=>') {
$ myresult = ($ myitem> = $ val);
} elsif ($ cmp eq '<') {
$ myresult = ($ myitem <$ val);
} elsif ($ cmp eq '>') {
$ myresult = ($ myitem> $ val);
} elsif ($ cmp eq '! =') {
$ myresult = not ($ myitem == $ val);
} elsif ($ cmp eq '! <') {
$ myresult = not ($ myitem <= $ val);
} elsif ($ cmp eq '!>') {
$ myresult = not ($ myitem> = $ val);
} Еще {
$ myresult = ($ myitem> = $ val);
};
вернуть $ myresult;
},
# НЕ удаляйте следующую строку
);
Действия
Плагины действий позволяют определять новые действия postfwd. Установив флаг $ stop, вы можете
решить продолжить или прекратить анализ набора правил.
СИНОПСИС: ( , , , , знак равно
( , , , , , )
# НЕ удаляйте следующую строку
% postfwd_actions_plugin = (
# ПРИМЕРЫ - интегрированы в postfwd. не нужно активировать их здесь.
# Примечание( ) команда
"note" => sub {
my ($ index, $ now, $ mycmd, $ myarg, $ myline,% request) = @_;
мой ($ myaction) = 'не знаю'; мой ($ стоп) = 0;
log_info "[ПРАВИЛА]". $ myline. "- примечание:". $ myarg if $ myarg;
return ($ stop, $ index, $ myaction, $ myline,% request);
},
# пропускает следующий правила
"skip" => sub {
my ($ index, $ now, $ mycmd, $ myarg, $ myline,% request) = @_;
мой ($ myaction) = 'не знаю'; мой ($ стоп) = 0;
$ index + = $ myarg if ($ myarg, а не (($ index + $ myarg)> $ # Rules));
return ($ stop, $ index, $ myaction, $ myline,% request);
},
# выгружает текущее содержимое запроса в системный журнал
"dumprequest" => sub {
my ($ index, $ now, $ mycmd, $ myarg, $ myline,% request) = @_;
мой ($ myaction) = 'не знаю'; мой ($ стоп) = 0;
map {log_info "[DUMP] rule = $ index, Attribute: $ _ = $ request {$ _}"} (ключи% request);
return ($ stop, $ index, $ myaction, $ myline,% request);
},
# НЕ удаляйте следующую строку
);
КОМАНДА ЛИНИЯ
Набор правил
Следующие аргументы используются для указания источника набора правил postfwd2. Это означает
что для работы postfwd2 требуется хотя бы одно из следующего.
-f, --file
Читает правила из . См. Раздел КОНФИГУРАЦИЯ.
ниже для получения дополнительной информации.
-r, --rule
Добавляет к набору правил. Помните, что вам, возможно, придется процитировать
строки, содержащие пробелы или символы оболочки.
Счет
-s, --scores знак равно
Возврат в постфикс, когда оценка запроса превышает
Допускается многократное использование. Просто объедините свои аргументы, например:
postfwd2 -r " знак равно ; действие = "-f -f ...
or
postfwd2 --scores 4.5 = "WARN high score" --scores 5.0 = "REJECT postfwd2 score too high" ...
Если набрано несколько очков, будет засчитано самое высокое совпадение. Порядок аргументов будет
быть отраженным в наборе правил postfwd2.
Networking
postfwd2 можно запустить как демон, чтобы он слушал в сети входящие запросы.
Следующие аргументы будут контролировать его поведение в этом случае.
-д, --демон
postfwd2 будет запускаться как демон и прослушивать в сети входящие
запросы (по умолчанию 127.0.0.1:10045).
-i, --interface
Привяжите postfwd2 к указанному интерфейсу (по умолчанию 127.0.0.1).
-p, --port
postfwd2 прослушивает указанный порт (по умолчанию tcp / 10045).
--протокол
Тип протокола для сокета postfwd. В настоящее время вы можете использовать здесь «tcp» или «unix».
Чтобы использовать postfwd2 с сокетом домена unix, запустите его следующим образом:
postfwd2 --proto = unix --port = / где-то / postfwd.socket
-u, --user
Изменяет реального и эффективного пользователя на .
-g, --group
Изменяет реальную и эффективную группу на .
--умаска
Изменяет umask для файловых разрешений главного процесса (pidfile).
Внимание: это umask, а не chmod - вы должны указать биты, которые
НЕ должен применяться. Например: umask 077 равен chmod 700.
--cache_umask
Изменяет umask для файловых разрешений процесса кеширования (сокет домена unix).
--server_umask
Изменяет umask для файловых разрешений серверного процесса (сокета домена unix).
-R, --chroot
Исключите процесс по указанному пути.
Пожалуйста, посмотрите на http://postfwd.org/postfwd2-chroot.html перед использованием!
--pidfile
Идентификатор процесса будет сохранен в указанном файле.
--средство
устанавливает средство системного журнала, по умолчанию 'mail'
--socktype
устанавливает тип сокета Sys :: Syslog равным 'native', 'inet' или 'unix'.
По умолчанию это автоматически определяется в зависимости от версии модуля и операционной системы.
-l, --logname
Обозначает сообщения системного журнала. Полезно при запуске нескольких
экземпляры postfwd.
--логлен
Обрезает любое сообщение системного журнала после символы.
Плагины
--плагины
Загружает плагины postfwd из файла. Пожалуйста, посмотри http://postfwd.org/postfwd.plugins
или plugins.postfwd.sample, доступный в архиве для получения дополнительной информации.
По желанию Аргументы
Эти параметры влияют на работу postfwd2. Любые из них можно комбинировать.
-v, --подробный
Подробное ведение журнала отображает много полезной информации, но может вызвать
ваши файлы журналов заметно увеличиваются. Так что используйте его с осторожностью. Установите опцию
дважды (-vv) для получения дополнительной информации (регистрирует все атрибуты запроса).
-c, --cache (по умолчанию = 600)
Тайм-аут для кеша запросов, результаты для идентичных запросов будут
кэшируется до перезагрузки конфигурации или до истечения этого времени (в секундах).
Значение 0 отключает эту функцию.
--cache-без-размера
Игнорирует атрибут размера для сравнения кешей, что приведет к лучшему
частота попаданий в кеш. Вам следует установить эту опцию, если вы не используете размер
элемент в вашем наборе правил.
--cache-no-sender
Игнорирует адрес отправителя для сравнения кеша, что приведет к лучшему
частота попаданий в кеш. Вы должны установить эту опцию, если вы не используете отправителя
элемент в вашем наборе правил.
--cache-rdomain-only
Это приведет к удалению локальной части адреса получателя перед заполнением
кеш. Это может значительно увеличить количество попаданий в кеш.
--cache-rbl-timeout (по умолчанию = 3600)
Это значение по умолчанию будет использоваться как тайм-аут в секундах для элементов кэша рубля,
если не указано в наборе правил.
--cache-rbl-по умолчанию (по умолчанию = ^ 127 \ .0 \ .0 \. \ d + $)
Матчи на ответы rbl / rhsbl (регулярное выражение), если не указано в наборе правил.
--cacheid , , ...
Этот список атрибутов запроса, разделенных csv, будет использоваться для создания
идентификатор кеша запросов. Используйте это только в том случае, если вы точно знаете, что вы
делаем. Если вы, например, используете postfwd2 только для управления RBL / RHSBL,
вы можете установить это на
postfwd2 --cache = 3600 --cacheid = имя_клиента, адрес_клиента
Это увеличивает эффективность кеширования и улучшает производительность postfwd.
Предупреждение: вы должны перечислить здесь все элементы, которые используются в вашем наборе правил!
--cleanup-requests (по умолчанию = 600)
После этого в кэше запросов будет производиться поиск элементов с истекшим временем ожидания. в
секунд. Это минимальное значение. Процесс очистки будет происходить только тогда, когда
поступает новый запрос.
--cleanup-rbls (по умолчанию = 600)
После этого в кэше rbl будет выполняться поиск элементов с истекшим временем ожидания. в
секунд. Это минимальное значение. Процесс очистки будет происходить только тогда, когда
поступает новый запрос.
- ставки очистки (по умолчанию = 600)
После этого в кэше скорости будет производиться поиск элементов с истекшим временем ожидания. в
секунд. Это минимальное значение. Процесс очистки будет происходить только тогда, когда
поступает новый запрос.
-S, --сводка (по умолчанию = 600)
Показывает некоторую статистику использования (время работы программы, счетчик запросов, правила соответствия)
каждый секунд. Эта опция включается ключом -v.
Эта функция использует сигнал тревоги, поэтому вы можете заставить postfwd2 сбросить статистику.
используя `kill -ALRM `(где это идентификатор процесса postfwd).
Пример:
19 августа 12:39:45 mail1 postfwd [666]: [STATS] Счетчики: 213000 секунд безотказной работы, 39 правил
19 августа 12:39:45 mail1 postfwd [666]: [STATS] Запросы: всего 71643, за последний интервал 49, попаданий в кеш 62.88%
19 августа 12:39:45 mail1 postfwd [666]: [СТАТИСТИКА] Среднее значение: всего 20.18, последний интервал 4.90, максимум 557.30
19 августа 12:39:45 mail1 postfwd [666]: [СТАТИСТИКА] Содержание: 44 кешированных запроса, 239 кешированных результатов dnsbl
19 августа 12:39:45 mail1 postfwd [666]: [STATS] ID правила: R-001 совпадений: 2704 раза
19 августа 12:39:45 mail1 postfwd [666]: [STATS] ID правила: R-002 совпадений: 9351 раза
19 августа 12:39:45 mail1 postfwd [666]: [STATS] ID правила: R-003 совпадений: 3116 раза
...
--no-rulestats
Отключает статистику по правилу. Сохраняет ваш журнал в чистоте, если вы им не пользуетесь.
Эта опция не действует без установки --summary или --verbose.
-L, --stdout
Перенаправляет все сообщения системного журнала на стандартный вывод для отладки. Никогда не используйте это с постфиксом!
-т, --тест
В тестовом режиме postfwd2 всегда возвращает "не знаю", но регистрирует в соответствии с
к его набору правил. -v будет автоматически установлен с этой опцией.
-н, --nodns
Отключает все проверки на основе DNS, такие как проверки RBL. Правила, содержащие
такие элементы будут проигнорированы.
-n, --nodnslog
Отключает ведение журнала событий DNS.
--dns_timeout (по умолчанию: 14)
Устанавливает время ожидания для асинхронных DNS-запросов в секундах. Это значение будет применяться к
все днс пункты в правиле.
--dns_timeout_max (по умолчанию: 10)
Устанавливает счетчик максимального времени ожидания для поиска dnsbl. Если таймауты превышают это значение
соответствующий dnsbl будет отключен на некоторое время (см. --dns_timeout_interval).
--dns_timeout_interval (по умолчанию = 1200)
Счетчик тайм-аута dnsbl будет очищен после этого интервала в секундах. Использовать этот
в сочетании с параметром --dns_timeout_max.
--dns_async_txt
Выполнять поиск dnsbl A и TXT одновременно (в противном случае только для списков с at
хотя бы одна запись А). Это требует большей пропускной способности сети из-за увеличения количества запросов, но
может увеличить пропускную способность, поскольку поиск можно распараллелить.
--dns_max_ns_lookups (по умолчанию = 0)
максимальное количество имен ns для поиска с элементом sender_ns_addrs. используйте 0 без максимума.
--dns_max_mx_lookups (по умолчанию = 0)
максимальное количество mx-имен для поиска с помощью элемента sender_mx_addrs. используйте 0 без максимума.
-Я, --instantcfg
Файлы конфигурации, указанные параметром -f, будут перечитываться при каждом запросе.
postfwd2 получает. Это позволяет изменять конфигурацию на лету.
без перезапуска. Хотя файлы будут читаться только при необходимости
(что означает, что их время доступа изменилось с момента последнего чтения), это может
значительно увеличить нагрузку на систему.
--config_timeout (по умолчанию = 3)
таймаут в секундах для анализа одной строки конфигурации. в случае превышения правило будет
пропустить. это используется для предотвращения проблем из-за больших файлов или циклов.
--keep_rates (по умолчанию = 0)
Если этот параметр установлен, postfwd2 не сбрасывает счетчики ограничения скорости при перезагрузке. Пожалуйста
обратите внимание, что вам нужно перезапустить (не перезагружать) postfwd с этой опцией, если вы измените
любые правила ограничения скорости.
--save_rates (по умолчанию = нет)
С помощью этой опции postfwd сохраняет существующие счетчики ограничения скорости на диск и перезагружает их.
при запуске программы. Это позволяет сохранять постоянные ограничения скорости при перезапуске или перезагрузке программы.
Обратите внимание, что postfwd требует доступа для чтения и записи к указанному файлу.
--fast_limit_evaluation (по умолчанию = 0)
Как только набор правил установлен ratelimit, будущие запросы будут оцениваться по нему.
перед просмотром набора правил. Этот режим использовался по умолчанию до версии 1.30.
В этом режиме ограничения скорости будут быстрее, но также в конечном итоге будут установлены
правила белого списка в наборе правил могут работать не так, как ожидалось.
ОГРАНИЧЕНИЯ: этот параметр не позволяет использовать вложенные команды postfwd, такие как
действие = ставка (отправитель / 3/60 /ждать(3))
Эта опция не работает с функциями strict-rfc5321 rate ().
Информационный Аргументы
Эти аргументы предназначены только для использования в командной строке. Никогда не используйте их с postfix!
-С, --showconfig
Отображает текущий набор правил. Используйте -v для подробного вывода.
-V, --версия
Отображает версию программы.
-х, --помощь
Показывает использование программы.
-м, --ручной
Отображает руководство к программе.
-D, --по умолчанию
отображает полные настройки postfwd2.
-P, --перфмон
Эта опция отключает любые системные журналы и вывод. Включено
для тестирования производительности.
--dumpstats
Отображает статистику использования программы.
--dumpcache
Отображает содержимое кеша.
--delcache
Удаляет элемент из кеша запросов. Используйте --dumpcache для идентификации объектов.
Например:
# postfwd --dumpcache
...
% rate_cache ->% sender =[электронная почта защищена] ->% RATE002 + 2_600 -> @count -> '1'
% rate_cache ->% sender =[электронная почта защищена] ->% RATE002 + 2_600 -> @maxcount -> '2'
...
# postfwd --delrate = "sender ="[электронная почта защищена]"
Оценить элемент кеширования 'отправитель =[электронная почта защищена]' удаленный
--делать
Удаляет элемент из кеша ставок. Используйте --dumpcache для идентификации объектов.
ОБНОВИТЬ
В режиме демона postfwd2 перезагружает свой набор правил после получения сигнала HUP. Пожалуйста, посмотрите
описание переключателя '-I' для обновления вашей конфигурации при каждом запросе
postfwd2 получает.
ПРИМЕРЫ
## белый список
# 1. сети 192.168.1.0/24, 192.168.2.4
# 2. имена_клиентов * .gmx.net и * .gmx.de
# 3. отправитель *@someshop.tld от 11.22.33.44
id = WL001; действие = не знаю; client_address = 192.168.1.0 / 24, 192.168.2.4
id = WL002; действие = не знаю; имя_клиента = \. gmx \. (net | de) $
id = WL003; действие = не знаю; отправитель = @ someshop \ .tld $; client_address = 11.22.33.44
## Контроль TLS
# 1. *@authority.tld только с правильным отпечатком TLS
# 2. *@secret.tld только с размером ключа> = 64
id = TL001; действие = не знаю; отправитель = @ авторитет \ .tld $; ccert_fingerprint = AA: BB: CC ..
id = TL002; действие = ОТКЛОНИТЬ неправильный отпечаток TLS; отправитель = @ власть \ .tld $
id = TL003; action = REJECT tls keylength <64; отправитель = @ секрет \ .tld $; encryption_keysize = 64
## Комбинированные проверки RBL
# Это отклонит почту, если
# 1. указан на ix.dnsbl.manitu.net
# 2. указан на zen.spamhaus.org (sbl и xbl, тайм-аут кеша dns 1200 с вместо 3600 с)
№3. Указан минимум на 2 сайтах bl.spamcop.net, list.dsbl.org, dnsbl.sorbs.net
№4. Указаны на bl.spamcop.net и на одном из rhsbl.ahbl.org, rhsbl.sorbs.net
id = RBL01; action = REJECT указано на ix.dnsbl.manitu.net; rbl = ix.dnsbl.manitu.net
id = RBL02; action = REJECT указано на zen.spamhaus.org; rbl = zen.spamhaus.org / 127.0.0. [2-8] / 1200
id = RBL03; action = REJECT указан на слишком большом количестве RBL; rblcount = 2; rbl = bl.spamcop.net, list.dsbl.org, dnsbl.sorbs.net
id = RBL04; action = REJECT комбинированная проверка RBL + RHSBL; rbl = bl.spamcop.net; rhsbl = rhsbl.ahbl.org, rhsbl.sorbs.net
## Размер сообщения (требуется, чтобы message_size_limit был установлен равным 30000000)
# 1. 30 МБ для систем в * .customer1.tld
# 2. 20 МБ для пользователя SASL joejob
# 3. 10 МБ по умолчанию
id = SZ001; protocol_state == КОНЕЦ-СООБЩЕНИЯ; действие = DUNNO; размер <= 30000000; client_name = \. customer1.tld $
id = SZ002; protocol_state == КОНЕЦ-СООБЩЕНИЯ; действие = DUNNO; размер <= 20000000; sasl_username == joejob
id = SZ002; protocol_state == КОНЕЦ-СООБЩЕНИЯ; действие = DUNNO; размер <= 10000000
id = SZ100; protocol_state == КОНЕЦ-СООБЩЕНИЯ; action = REJECT сообщение слишком велико
## Выборочный серый список
##
## Обратите внимание, что postfwd не включает серые списки. Для этой настройки требуется работающая служба postgrey.
## на порту 10031 и следующий класс ограничения постфикса в вашем main.cf:
##
## smtpd_restriction_classes = check_postgrey, ...
## check_postgrey = check_policy_service inet: 127.0.0.1: 10031
#
# 1. если указано на zen.spamhaus.org с результатами 127.0.0.10 или .11, таймаут dns cache timeout 1200 с
# 2. У клиента нет rDNS
# 3. Клиент приходит с нескольких dialin-доменов.
id = GR001; действие = check_postgrey; rbl = dul.dnsbl.sorbs.net, zen.spamhaus.org/127.0.0.1[01 visible/1200
id = GR002; действие = check_postgrey; client_name = ^ unknown $
id = GR003; действие = check_postgrey; имя_клиента = \. (t-ipconnect | alicedsl | ish) \. de $
## Дата Время
дата = 24.12.2007-26.12.2007; action = 450 4.7.1 офис закрыт на рождество
время = 04: 00: 00-05: 00: 00; action = 450 4.7.1 ведется техническое обслуживание, повторите попытку позже
время = -07: 00: 00; sasl_username = Джим; action = 450 4.7.1 пораньше для тебя, Джим
время = 22: 00: 00-; sasl_username = Джим; action = 450 4.7.1 до опоздания, Джим
месяцев = -апр; action = 450 4.7.1 увидимся в мае
дней = !! пн-пт; действие = check_postgrey
## Использование прыжка
# Следующее позволяет размер сообщения 30 МБ для разных
# пользователей / клиентов, в то время как у других будет только 10 МБ.
id = R001; действие = прыжок (R100); sasl_username = ^ (Алиса | Боб | Джейн) $
id = R002; действие = прыжок (R100); client_address = 192.168.1.0 / 24
id = R003; действие = прыжок (R100); ccert_fingerprint = AA: BB: CC: DD: ...
id = R004; действие = прыжок (R100); ccert_fingerprint = AF: BE: CD: DC: ...
id = R005; действие = прыжок (R100); ccert_fingerprint = DD: CC: BB: DD: ...
id = R099; protocol_state == КОНЕЦ-СООБЩЕНИЯ; action = REJECT сообщение слишком велико (макс. 10 МБ); размер = 10000000
id = R100; protocol_state == КОНЕЦ-СООБЩЕНИЯ; action = REJECT сообщение слишком велико (макс. 30 МБ); размер = 30000000
## Использование оценки
# Следующее отклоняет почту, если клиент
# - котируется на 1 RBL и 1 RHSBL
# - указан в 1 RBL или 1 RHSBL и не имеет правильного rDNS
# - другие клиенты без правильного rDNS будут проверены серым списком
# - некоторые белые списки используются для понижения оценки
id = S01; оценка = 2.6; действие = check_postgrey
id = S02; оценка = 5.0; action = REJECT postfwd оценка слишком высока
id = R00; действие = оценка (-1.0); rbl = excluptions.ahbl.org, list.dnswl.org, query.bondedsender.org, spf.trusted-forwarder.org
id = R01; действие = оценка (2.5); rbl = bl.spamcop.net, list.dsbl.org, dnsbl.sorbs.net
id = R02; действие = оценка (2.5); rhsbl = rhsbl.ahbl.org, rhsbl.sorbs.net
id = N01; действие = оценка (-0.2); client_name == $$ helo_name
id = N02; действие = оценка (2.7); client_name = ^ unknown $
...
## Использование ставки и размера
# Следующее временное отклонение запросов от "неизвестных" клиентов, если они
# 1. превышает 30 запросов в час или
# 2. попытался отправить более 1.5 МБ в течение 10 минут
id = RATE01; client_name == unknown; protocol_state == RCPT
action = rate (client_address / 30/3600/450 4.7.1 извините, максимум 30 запросов в час)
id = SIZE01; client_name == unknown; protocol_state == КОНЕЦ СООБЩЕНИЯ
action = size (client_address / 1572864/600/450 4.7.1 извините, максимум 1.5 МБ за 10 минут)
## Макросы
# определение
&& RBLS {rbl = zen.spamhaus.org, list.dsbl.org, bl.spamcop.net, dnsbl.sorbs.net, ix.dnsbl.manitu.net; };
&& GONOW {action = REJECT, ваш запрос заставил нашу политику обнаружения спама отклонить это сообщение. Больше информации на http://www.domain.local; };
# правила
&& GONOW; && RBLS; client_name = ^ unknown $
&& GONOW; && RBLS; client_name = (\ d + [\.-_]) {4}
&& GONOW; && RBLS; client_name = [\.-_] (adsl | dynamic | ppp |) [\.-_]
## Группы
# определение
&& RBLS {
rbl = zen.spamhaus.org
rbl = list.dsbl.org
rbl = bl.spamcop.net
rbl = dnsbl.sorbs.net
rbl = ix.dnsbl.manitu.net
};
&& RHSBLS {
...
};
&& DYNAMIC {
client_name == unknown
имя_клиента ~ = (\ d + [\.-_]) {4}
имя_клиента ~ = [\.-_] (adsl | dynamic | ppp |) [\.-_]
...
};
&& BAD_HELO {
helo_name == my.name.tld
helo_name ~ = ^ ([^ \.] +) $
helo_name ~ = \. (local | lan) $
...
};
&&ПОДДЕРЖАНИЕ{
дата = 15.01.2007
дата = 15.04.2007
дата = 15.07.2007
дата = 15.10.2007
time=03:00:00 - 04:00:00
};
# правила
id = КОМБИНИРОВАННЫЙ; && RBLS; && ДИНАМИЧЕСКИЙ; action = REJECT динамический клиент и указан в RBL
id = ОБСЛУЖИВАНИЕ; &&ПОДДЕРЖАНИЕ ; action = DEFER время обслуживания - повторите попытку позже
# теперь с помощью команды set () обратите внимание, что длинный элемент
# список не нужно сравнивать дважды
id = RBL01; && RBLS; действие = установить (HIT_rbls = 1)
id = HELO01; && BAD_HELO; действие = установить (HIT_helo = 1)
id = DYNA01; && ДИНАМИЧЕСКИЙ; действие = установить (HIT_dyna = 1)
id = REJECT01; HIT_rbls == 1; HIT_helo == 1; action = REJECT см. http://some.org/info? reject = 01 для получения дополнительной информации
id = REJECT02; HIT_rbls == 1; HIT_dyna == 1; action = REJECT см. http://some.org/info? reject = 02 для получения дополнительной информации
id = REJECT03; HIT_helo == 1; HIT_dyna == 1; action = REJECT см. http://some.org/info? reject = 03 для получения дополнительной информации
## в сочетании с расширенными функциями руб.
#
id = RBL01; rhsblcount = все; rblcount = все; && RBLS; && RHSBLS
действие = установить (HIT_dnsbls = $$ rhsblcount, HIT_dnsbls + = $$ rblcount, HIT_dnstxt = $$ dnsbltext)
id = RBL02; HIT_dnsbls> = 2; action = 554 5.7.1 заблокирован с помощью DNSBL $$ HIT_dnsbls [INFO: $$ HIT_dnstxt]
ПАРСЕР
Конфигурация
Набор правил postfwd2 можно указать в командной строке (параметр -r) или прочитать из файлов.
(-f). Порядок ваших аргументов будет сохранен. Вы должны проверить синтаксический анализатор с помощью -C |
--showconfig в командной строке перед применением новой конфигурации. Следующий звонок:
postfwd2 --showconfig \
-r "id = TEST; recipient_count = 100; action = WARN mail с 100+ получателями" \
-f /etc/postfwd.cf \
-r "идентификатор = ПО УМОЛЧАНИЮ; действие = не знаю";
выдаст следующий результат:
Правило 0: id -> действие «TEST» -> «WARN mail с 100+ получателями»; recipient_count -> "100"
...
... ...
...
Правило : id -> Действие "ПО УМОЛЧАНИЮ" -> "не знаю"
В списки будут добавлены несколько элементов одного типа (подробнее см. В разделе «ЭЛЕМЕНТЫ»
Информация):
postfwd2 --showconfig \
-r "client_address = 192.168.1.0 / 24; client_address = 172.16.26.32; action = dunno"
приведет к:
Правило 0: id -> «R-0»; действие -> "не знаю"; client_address -> "192.168.1.0/24, 172.16.26.32"
Макросы оцениваются на этапе настройки, что означает, что
postfwd2 --showconfig \
-r "&& RBLS {rbl = bl.spamcop.net; client_name = ^ unknown $;};" \
-r "id = RBL001; && RBLS; action = REJECT в списке spamcop и плохих rdns";
приведет к:
Правило 0: id -> «RBL001»; действие -> «ОТКЛОНИТЬ в списке spamcop и плохих RDN»; рубль -> "bl.spamcop.net"; client_name -> "^ unknown $"
Запрос обработка
Когда поступает запрос на делегирование политики, он сравнивается с набором правил postfwd. К
детально изучите обработку, вы должны увеличить подробность, используя "-v" или "-vv"
выключатель. "-L" перенаправляет сообщения журнала на стандартный вывод.
Соблюдая порядок набора правил в целом, элементы будут сравниваться в случайном порядке, что
в основном означает, что
id = R001; действие = не знаю; client_address = 192.168.1.1; отправитель =[электронная почта защищена]
равно
id = R001; отправитель =[электронная почта защищена]; client_address = 192.168.1.1; действие = не знаю
Списки будут оцениваться в указанном порядке. Это позволяет разместить быстрее
выражения сначала:
postfwd2 --nodaemon -vv -L -r "id = RBL001; rbl = localrbl.local zen.spamhaus.org; action = REJECT" /some/where/request.sample
производит следующее
[LOGS info]: compare rbl: "remotehost.remote.net [68.10.1.7]" -> "localrbl.local"
[LOGS info]: count1 rbl: "2" -> "0"
[Информация о журналах]: запрос rbl: localrbl.local 7.1.10.68 (7.1.10.68.localrbl.local)
[LOGS info]: count2 rbl: "2" -> "0"
[Информация LOGS]: match rbl: FALSE
[LOGS info]: compare rbl: "remotehost.remote.net [68.10.1.7]" -> "zen.spamhaus.org"
[LOGS info]: count1 rbl: "2" -> "0"
[Информация LOGS]: запрос rbl: zen.spamhaus.org 7.1.10.68 (7.1.10.68.zen.spamhaus.org)
[LOGS info]: count2 rbl: "2" -> "0"
[Информация LOGS]: match rbl: FALSE
[ЖУРНАЛ ИНФОРМАЦИИ]: Действие: не знаю
Оператор отрицания !! ( ) имеет наивысший приоритет и поэтому будет оцениваться
первый. Затем выполняются подстановки переменных:
postfwd2 --nodaemon -vv -L -r "id = TEST; action = REJECT; client_name = !! ($$ heloname)" /some/where/request.sample
дам
[ЖУРНАЛЫ информации]: сравните client_name: "unknown" -> "!! ($$ helo_name)"
[LOGS info]: negate client_name: "unknown" -> "$$ helo_name"
[LOGS info]: замените client_name: "unknown" -> "english-breakfast.cloud8.net"
[LOGS info]: сопоставить client_name: TRUE
[LOGS info]: Действие: REJECT
Набор правил оценка
Правило срабатывает, когда все элементы (или хотя бы один элемент списка для каждого элемента) совпадают.
Как только один элемент (или все элементы списка) не удается сравнить с запросом
Атрибут парсер перейдет к следующему правилу в наборе правил postfwd2.
Если правило совпадает, есть два варианта:
* Правило возвращает постфиксное действие (не знаю, отклонить, ...). Анализатор останавливает обработку правила и
возвращает действие постфиксу. Остальные правила оцениваться не будут.
* Правило возвращает действие postfwd2 (Прыжок(), Примечание(), ...) Парсер оценивает заданный
действие и переходит к следующему правилу (кроме Прыжок() or уволиться() действия - пожалуйста
см. раздел «ДЕЙСТВИЯ» для получения дополнительной информации). На postfix ничего не будет отправлено.
Если ни одно правило не найдено, а конец набора правил достигнут, postfwd2 вернет dunno
без регистрации чего-либо, если только не в подробном режиме. Вы можете поместить последнее универсальное правило в
измените это поведение:
... ...
id = ПО УМОЛЧАНИЮ; действие = не знаю
будет регистрировать любой запрос, который проходит набор правил без попадания в предыдущее правило.
ОТЛАДКА
Для отладки специальных шагов парсера ключ '--debug' принимает список классов отладки.
В настоящее время определены следующие классы:
все настройки кеша debugdns devel dns getcache getdns
getdnspacket скорость запроса setcache setdns
родительский_кэш родительский_dns_cache родитель_рейт_кэш родительский_запрос_кэш
child_cache child_dns_cache child_rate_cache child_request_cache
ИНТЕГРАЦИЯ
интеграцию с помощью демон Режим
Обычный способ использования postfwd2 - запустить его как демон, прослушивая указанный tcp
порт. postfwd2 создаст несколько дочерних процессов, которые взаимодействуют с родительским кешем.
Это предпочтительный способ использования postfwd2 в средах большого объема. Запустите postfwd2 с
следующие параметры:
postfwd2 -d -f /etc/postfwd.cf -i 127.0.0.1 -p 10045 -u никто -g никто -S
Для эффективного кеширования вы должны проверить, можете ли вы использовать параметры --cacheid,
--cache-rdomain-only, --cache-no-sender и --cache-no-size.
Теперь проверьте свои системные журналы (средство по умолчанию «mail») на наличие такой строки:
9 августа 23:00:24 почта postfwd [5158]: postfwd2 n.nn готова к вводу
и используйте `netstat -an | grep 10045`, чтобы проверить что-то вроде
tcp 0 0 127.0.0.1:10045 0.0.0.0:* СЛУШАТЬ
Если все работает, откройте ваш postfix main.cf и вставьте следующий
127.0.0.1:10045_time_limit = 3600 <--- интеграция
smtpd_recipient_restrictions = permission_mynetworks <--- рекомендуется
reject_unauth_destination <--- рекомендуется
check_policy_service inet: 127.0.0.1: 10045 <--- интеграция
Перезагрузите конфигурацию с помощью postfix reload и просмотрите свои журналы. В нем работает ты
в вашем почтовом журнале должны появиться такие строки:
9 августа 23:01:24 почта postfwd [5158]: rule = 22, id = ML_POSTFIX, client = english-breakfast.cloud9.net [168.100.1.7], sender =[электронная почта защищена], получатель =[электронная почта защищена], helo = english-breakfast.cloud9.net, proto = ESMTP, state = RCPT, action = не знаю
Если вы хотите проверить размер или элементы rcpt_count, вы должны интегрировать postfwd2 в
smtp_data_restrictions или smtpd_end_of_data_restrictions. Конечно, вы также можете указать
класс ограничения и используйте его в своих таблицах доступа. Сначала создайте файл
/ etc / postfix / policy, содержащий:
домен1.локальный postfwdcheck
домен2.локальный postfwdcheck
...
Затем постмапируйте этот файл (`postmap hash: / etc / postfix / policy`), откройте ваш main.cf и введите
# Классы ограничений
smtpd_restriction_classes = postfwdcheck, ... <--- интеграция
postfwdcheck = check_policy_service inet: 127.0.0.1: 10045 <--- интеграция
127.0.0.1:10045_time_limit = 3600 <--- интеграция
smtpd_recipient_restrictions = permission_mynetworks, <--- рекомендуется
reject_unauth_destination, <--- рекомендуется
... <--- необязательно
check_recipient_access хеш: / etc / postfix / policy, <--- интеграция
... <--- необязательно
Перезагрузите postfix и смотрите логи.
ТЕСТИРОВАНИЕ
Сначала вам нужно создать набор правил (см. Раздел «Конфигурация»). Проверить это с
postfwd2 -f /etc/postfwd.cf -C
Существует пример запроса политики, распространяемый с postfwd, который называется request.sample.
Просто измените его в соответствии с вашими требованиями и используйте
postfwd2 -f /etc/postfwd.cf
Вы должны получить ответ вроде
действие =
Для сетевых тестов я использую netcat:
NC 127.0.0.1 10045
отправить запрос на postfwd. Если вы ничего не получили, убедитесь, что postfwd2 запущен
и прослушивание указанных сетевых настроек.
Арбитраж трафика
Некоторые из этих предложений могут не соответствовать вашей среде. Пожалуйста, проверьте свои требования
и внимательно тестируйте новые возможности!
- использовать параметры кеширования
- используйте правильный оператор соответствия ==, <=,> =
- используйте ^ и / или $ в регулярных выражениях
- использовать списки предметов (быстрее, чем отдельные правила)
- использовать действие set () для повторяющихся списков элементов
- использовать прыжки и ограничения скорости
- использовать правило предварительного поиска для rbl / rhsbls с пустым действием note ()
СМ ТАКЖЕ
Видетьhttp://www.postfix.org/SMTPD_POLICY_README.html> для описания того, как Postfix
серверы политик работают.
Используйте postfwd2 онлайн с помощью сервисов onworks.net