TPmail тестовой вывод.

Почтовый пакет TPmail для Unix систем

Выбор языка

[анг]  [рус]


Начало

Документация

Поддержка

Новости

Ресурсы

Контакты


Модуль milter_quota. Описание и работа с ним.

Оглавление

Модуль milter-quota
Список возможностей milter-quota
Ключи модуля milter-quota
Конфигурационный файл для milter-quota
Включение базовых возможностей в конфигурационном файле
Контроль скорости соединения
Контроль сообщений
Квоты для пользовательских почтовых ящиков
Регулярные выражения
Динамические листы блокировки
Пример конфигурационного файла
Примеры контроля скорости соединений
Примеры контроля сообщений
Примеры пользовательских квот
Программа управления и диагностики mq_client



Общие замечания о milter модулях смотри в разделе о модуле milter-agent.
Модуль milter-quota предоставляет возможности контроля (квотирования) почтового трафика по различным его параметрам: размер сообщения для приема и передачи, квоты для почтовых ящиков пользователей и так далее. Некоторые из параметров, например, максимальный размер сообщения, могут быть установлены в программе sendmail. Однако они будут носить глобальный характер, т.е. установлены для всех без какой-либо возможности изменения в конкретных случаях. Поэтому milter-quota предоставляет для пользователей программы sendmail дополнительные возможности по контролю за почтовым трафиком. Заметим, что ряд новых почтовых серверов с тесной интеграцией ряда системных и пользовательских сервисов предоставляет такие возможности. Однако видим, что milter-quota не выходит за рамки работы вне sendmail, тем самым сохраняя целостность подхода к решению задач.


Модуль milter-quota обладает следующими возможностями для контроля сообщений:

Динамическая конфигурация. Модуль автоматически загружает новую конфигурацию, если в ней не найдено синтаксических ошибок.
Загрузка по требованию. Конфигурация может быть загружена по внешнему сигналу (USR1).
Синтаксис конфигурационного файла прост и прозрачен.
Поддержка регулярных выражений для списков (IEEE Std. 1003.2).
Выдача текущей конфигурации и состояния модуля.
Не останавливать обработку в случае фатальных ошибок - переполнение дисков и т.д.
Детализация событий в журнале по уровням.
Динамический лист кэширования (для возможного переноса в лист блокировки).
Динамический лист блокировки (элементы заносятся явно по пользовательской команде или неявно через кэш-лист блокировки).
Квоты для пользовательских почтовых ящиков, размеров входящих и исходящих сообщений.
Разрешение отправки сообщений для пользователя только с определенных узлов.
Контроль за скоростью соединений (connection rate) или динамический контроль за перегрузкой sendmail (например, предотвращение атак по отказу от обслуживания).
Экспериментальная поддержка квот для пользователя на внешнем сервере.
Контроль квот передачи/приема сообщений по пользователям, узлам, количеству сообщений, объему почты, временному периоду.
Удаление из динамических списков.


Программа milter_quota поддерживает следующие опции командной строки
(они также описаны в стандартном руководстве man для milter_quota):


ОпцияНазначение
-hпечатать краткую помощь
-Vпечатать версию
-vболее детальный вывод информации
-c configиспользовать данный файл как конфигурационный (по умолчанию=/etc/mail/milter-quota.conf)
-p pipeлокальный сокет (Unix domain socket) для обмена данными с sendmail (по умолчанию=unix:/var/spool/milter-quota/sock)
-i socketлокальный сокет (Unix domain socket) для обмена данными с пользователем (по умолчанию=unix:/var/spool/milter-quota/cmd)
-t timeoutтаймаут операций для сокета sendmail (по умолчанию=0)
-u userимя пользователя, с правами которого работает milter-quota (по умолчанию=_milter-quota)
-l vlevelуровень отладочной печати (по умолчанию=0)
-d modeрежим работы (0=демон,>0=терминал отладки)
-b bs_fileфайл состояния для листов блокировки (по умолчанию=пусто)
-m ms_fileфайл состояния для контроля сообщений (по умолчанию=пусто)
-s cs_file файл состояния для предварительного кэш (по умолчанию=пусто)
-x mbox_dirкаталог для пользовательских почтовых ящиков
-y ext_srv_addrадрес для внешнего сервера (синхронизация квот)
-z ext_srv_portTCP порт для внешнего сервера (синхронизация квот)
-aиспользовать блокировку для доступа к конфигурации
-Eостанов при любой ошибке
-Cдинамический контроль за изменением конфигурации
-Xвключить поддержку регулярных выражений (POSIX.2)
-Bразрешить динамические листы (кэша и блокировки)
-Mразрешить контроль за объемом сообщений и т.д.
-Rразрешить контроль за перегрузкой sendmail (контроль скорости соединений)
-Qразрешить контроль за объемом пользовательских ящиков и т.д.
-qиспользовать последнего в списке получателей при обработке сообщения (по умолчанию=первый из списка)



Общие параметры конфигурационного файла milter-quota такие же как и опции для командной строки. Помните, что по умолчанию практически все опции модуля отключены.
Все конфигурационные файлы считываются и обрабатываются последовательно. Порядок обработки в секциях также последователен. Это позволяет самому администратору решать что и в каком порядке нужно обрабатывать. Все правила в секции соединяются логическим И (AND).

Пример 1. Запуск модуля milter-quota.
# /usr/local/libexec/milter_quota -c /etc/mail/milter/milter-quota.conf -u mailnull -avBCXRMQ -l 1



Включение базовых возможностей в конфигурационном файле.
Всегда используйте программу mq_client для проверки включения опций!

[General_Parameters]
### Connections rate control
### Разрешить контроль за скоростью соединений
connects_rate_control = 1

### Enable block for address/envelopes in black list
### Разрешить динамический лист блокировки
enable_block_black_lists = 1
### Cache_list state file
### Файл состояния для предварительного кэша
cache_state_file = "/var/spool/milter-quota/cache.state"
### Block_list state file
### Файл состояния для блокировки
block_state_file = "/var/spool/milter-quota/block.state"

### Enable message control list
### Разрешить контроль за параметрами сообщений
enable_message_control_lists = 1
### Message_control state file
### Файл состояния для контроля сообщений
message_ctl_state_file = "/var/spool/milter-quota/msg_ctl.state"

### Enable quotas for user accounts (mailbox/message size)
### Включить контроль за размерами пользовательских ящиков
enable_user_quota = 1
### User_quota state file
### Файл состояния для пользовательских квот (почтовый ящики)
user_quota_state_file = "/var/spool/milter-quota/user_quotas.state"



Контроль за скоростью соединений (connection rate control) принципиально отличается от того, что реализовано в sendmail. Реализация в milter-quota будет устойчиво защищать sendmail от перегрузки. После включения контроля за перегрузкой модуль milter-quota будет ввести динамический список соединений. Если количество соединений для какого-то узла будет превышать установленное администратором величину до истечения выбранного интервала времени (по умолчанию - не более 10 соединений за минуту), то любое последующее соединение с данного узла будет автоматически отвергаться. По истечении выбранного периода счетчик соединений сбрасывается и узел вновь сможет передавать нам свои сообщения. Выбранные значения по умолчанию могут оказаться не слишком подходящими в той или иной ситуации. В этом случае администратору рекомедуется установить желаемые величины. Данные параметры являются глобальными, т.е. будут действовать для любых узлов. Однако у администратора есть возможность установить для отдельных узлов или доменов другие величины для контроля перегрузки. Например, для надежных деловых партнеров или для тех, кто заведомо может передать большой объем за короткий промежуток времени. Такими отправителями могут служить различные агентства новостей, туризма или рекламы. Также рекомендуется установить не менее 120 сообщений за минуту для локальной машины для избежания проблем с отправкой служебных почтовых сообщений.


Контроль сообщений (messages control) предоставдяет возможности фильтрации и ограничения трафика за период времени. Базовым (обязательным) параметром является выбранный интервал времени (от недель до секунд). Остальные параметры можно разбить на следующие группы: хосты (IP адреса, имена узлов или доменов), адреса в конверте сообщения (отправитель, получатель), сообщения (число, объем, размер одного сообщения).
Администратор может комбинировать любые эти возможности. Обычно такие ограничения применяются для нежелательных корреспондентов (удобный прием для борьбы с легальными спамерами) или некоторых собственных соотрудников, кто начинает неожиданно рассылать огромные объемы почты. Такой контроль также может применяться как защита от перегрузки по объему почтового трафика, хотя это потребует от администратора реального выбора величин для устанавливаемых ограничений.



Квоты для пользователя являются одной из возможностей модуля milter-quota. По бюджету пользователя (mail user account) администратор может установить следующие ограничения:
- разрешенный размер почтового ящика;
- разрешенный размер отправляемого сообщения;
- разрешенный размер сообщения на приеме;
- узел или список узлов с которого пользователь данного бюджета может отправлять почту через наш сервер;
- IP адрес или группа адресов с которого пользователь данного бюджета может отправлять почту через наш сервер;
- синхронизация состояния квот с внешним сервером (пока экспериментально).
Квоты проверяются дважды - в начале соединения и после окончания приема сообщения.
Администратор sendmail может ограничить возможности отправки с произвольных рабочих станций. Данные ограничения будут действовать только, если используется наш почтовый сервер. Для этого необходимо сделать следующее:
- установить имя бюджета пользователя - обычно это также и имя бюджета пользователя в системе;
- установить с какой машины или группы машин данный пользователь будет работать с почтой;
- установить другие желаемые ограничения;
После вступления в силу данной квоты с данной машины или группы машин будет отправляться почта только для данного пользователя или группы пользователей.
Добавим, что если использовать статические белые и черные списки из модуля milter-connect, то можно ограничить дополнительно отправку почты только с именами хостов или доменов, указанными в этих списках (для имен отправителей в конверте).
По умолчанию предполагается, что все почтовые ящики находятся в каталоге /var/mail.


Регулярные выражения допускаются в большинстве списков.
Для краткой справки по регулярным выражениям можно посмотреть re_format(7) и regex(3).



Динамические листы блокировки состоят из двух списков:
- кэш лист или лист предварительной блокировки;
- лист постоянной блокировки.
Каждый элемент в любом списке имеет заданное время жизни. Оно устанавливается либо по умолчанию (4 часа) либо при добавлении нового элемента в список. По истечении времени жизни элемента он автоматически удаляется из списка. Любые элементы можно удалять из списков, используя команду управления mq_client. Эта же команда используется для добавления новых элементов. Обыкновенно динамические листы блокировки используются для временного прекращения приема сообщений от узлов или от отправителей, которые рассылают вирусы или что-то аналогичное.
Рассмотрим на примере, как это осуществляется. Считаем, что антивирусный сканер, запускаемый с помощью модула milter-agent, успешно обнаруживает вирусы. Будем использовать "мягкую" политику, в которой узел и адресат не сразу блокируются. После обнаружения вируса антивирусный сканер через вызов команды mq_client добавляет новый элемент в кэш-лист. В отличие от других программ в milter_quota администратор может использовать различные условия блокировки - регулярные выражения для адресов/узлов или выбор различных сеток для группы узлов. Однако в нашем случае мы будем блокировать только одного адресата и один узел. После занесения в кэш-лист данный узел и адресат будут находиться в нем выбранный администратором интервал времени, например, четыре часа. Если в заданный промежуток времени не происходит повторной посылки вируса, то пара узел/адресат удаляется из кэш-листа. Если же с этого узла в заданный промежуток времени нам еще раз пересылают вирус, то мы перемещают указанную пару из кэш-листа уже в лист постоянной блокировки с таким же интервалом времени проверки, следуя известному принципу: "от случайности через закономерность к фатальности". Если отправитель у нас один и тот же, то мы блокируем только его, позволяя другим пользователям с этого узла продолжать нормально работать. Если отправитель меняет адреса, то стараемся блокировать как можно мягче. Однако в случае третьей попытки отправить вирус с данного узла мы блокируем уже любые адреса (адреса в конверте сообщения) для указанного узла. В этом случае уже только администратор может исключить блокирование сообщений с данного узла.
Лист постоянной блокировки имеет также свойство "продления наказания". Это означает, что в случае продолжающихся попыток "поделиться" с нами чужими вирусами время жизни элемента в списке автоматически увеличивается на время жизни элемента, но не более чем на сутки.



Пример конфигурационного файла (входит в комплект поставки): milter-quota.conf.sample


Примеры контроля скорости соединений.

Пример 1. Увеличить разрешенную скорость соединений для локальной машины.
[RateControl]
connect_address = "127.0.0.1"
max_connects_value = 600

Пример 2. Ограничить разрешенную скорость соединений для хостов из указанных доменов.
[RateControl]
connect_hostname = "(domain1|domain2)\.ru"
max_connects_value = 5
connects_time_period = 600



Примеры контроля сообщений.

Пример 1. Ограничить количество и объем сообщений для хоста.
[MessagesControl]
msg_ctl_hostaddr = "192.168.0.35"
msg_ctl_time_period = "1d"
msg_ctl_limit_count = "10"
msg_ctl_limit_volume = "150K"
msg_ctl_reject_message = "Are you tired about your traffic?"

Пример 2. Ограничить количество сообщений между двумя пользователями.
[MessagesControl]
msg_ctl_envfrom = "user1@domain1.com"
msg_ctl_envrcpt = "user2@domain2.ru"
msg_ctl_time_period = "4h30m"
msg_ctl_limit_count = "1"



Примеры контроля квот для пользователя.

Пример 1. Ограничение одного пользователя
[UserQuota]
quota_user_name = "test"
quota_user_mbox_size = "1M500K"
quota_user_recv_msg_size = "100K"
quota_user_send_msg_size = "95K"
quota_user_allowed_send_hostname = "(host1|host2)\.domain\.com"

Пример 2. Ограничение группы пользователей.
[UserGroups]
group_name = "@testusers"
group_users = "uname1 uname2 uname3"
group_users = "uname4 uname5"
[UserQuota]
quota_user_name = "@testusers"
quota_user_mbox_size = "5M"



Программа mq_client взаимодействует с загруженным модулем milter_quota через локальный сокет (Unix domain socket). Для краткой помощи можно просто вызвать mq_client без параметров.

Пример использования 1. Вернуть текущие глобальные настройки milter-quota.
# mq_client /var/spool/milter-quota/cmd 7

Пример использования 2. Вернуть текущее состояние для всех конфигураций контроля сообщений в milter-quota.
# mq_client /var/spool/milter-quota/cmd 11



Valid HTML 3.2! Авторское Право © 2006 Дмитрий Стефанков Last modified: $Date: 2007-09-19 00:41:00+04 $ Powered by FreeBSD. Powered by Apache. Powered by OpenSSL.