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

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

Выбор языка

[анг]  [рус]


Начало

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

Поддержка

Новости

Ресурсы

Контакты


Типичные задачи для sendmail и решения для них на базе TPmail

Оглавление

Введение
1. Как копировать почту (всю, определенных абонентов).
2. Как перенаправить определенную исходящую почту в локальный почтовый ящик.
3. Как запретить посылать почту на определенный домен вместе с его поддоменами.
4. Как разрешить определенному пользователю принимать почту только с определенного IP-адреса.
5. Как разрешить пользователям принимать почту только с определенного IP-адреса (запрет получения почты извне за исключением одного внешнего ip-адреса).
6. Как разрешить определенному пользователю принимать почту только с определенного e-mail адреса.
7. Как разрешить некоторым пользователям принимать почту только с локальных адресов.
8. Как запретить некоторым пользователям принимать почту с внешних адресов.
9. Как отвергать почту, приходящую с локальных административных адресов, но не с локальных ip-адресов.
10. Как запретить почту с внешних ip-адресов, подписанную моим почтовым доменом.
11. Как заставить локальных пользователей подписываться в e-mail только локальным доменом.
12. Как установить жесткое соответствие между локальным e-mail-адресом и локальным IP-адресом для отправки сообщений локальными пользователями.
13. Как запретить определенному локальному пользователю посылать сообщения за пределы локального домена.
14. Как разрешить определенному локальному пользователю посылать сообщения только на определенный внешний адрес.
15. Как ограничить группу пользователей работой(прием/отправка) только внутри локального почтового домена.
16. Как разрешить пользователю переписку с любым пользователем, кроме указанного адреса.
18. Как запретить фальшивую рассылку с адресов gluck@mail.subscribe.ru и namma123456@subscribe.ru.
19. Фильтруем входящую почту по параметру HELO.
20. Как заблокировать письма с единственным подзаголовком Received: (как определить, что переменная пуста).
21. Как бороться с перебором имен почтовых ящиков (dictionary attack, define(`confBAD_RCPT_THROTTLE',`3')).
22. Как заблокировать перебор имен почтовых ящиков (наложение ограничения на число отказов "User unknown").
23. Последний вариант блокировки при превышении количества неопознанных объектов в списке получателей локального домена.
25. Как избежать двойной отлуп (define(`confDOUBLE_BOUNCE_ADDRESS', `')).
26. Как заблокировать письма, посылаемые на определенный relay (блокировка по MX-домену получателя).
27. Как проверять в RBL-базах не только ip непосредственного отправителя-почтовика, но и ip всех предшествоваших релеев, определенных в подзаголовках Received:.
28. Как ограничить количество соединений с smtp-портом с одного хоста и общее число одновремено открытых smtp-соединений за определенный промежуток времени.
29. Как заблокировать почту с ip-адресов, для которых прямая и обратная проверки в днс не соответствуют друг другу.
30. Как видоизменить адрес получателя (добавляем 3 цифры перед адресом).
31. Горячий спам (ноябрь-декабрь 2006г.).
32. Как заставить локальных клиентов проходить smtp-авторизацию?
33. Как запретить получать почту на адреса вида user@[1.2.3.4], где [1.2.3.4] - ip-адрес вашего почтовика (разрешаем подобное только для пользователей из локальной сети)
34. Как запретить получать почту на локальные адреса, которые заканчиваются точкой.
35. Выставляем ограничения на размер сообщения для определенного домена.
36. Выставляем ограничения на формат сообщения (text/plain) для определенных пользователей.
37. Как заставить sendmail.cf просматривать заголовок To: в самом письме на предмет существования получателя на почтовом сервере?
38. Как заставить sendmail.cf проверять конвертного получателя на наличие в passwd+aliases?
39. Предыдущая задача с диференцированным отлупом (#discard or #error) в зависимости от адреса отправителя.
40. Как заблокировать письма, поступающие с почтовых доменов, mx-записи для которых содержат определенные домены.
41. Как заблокировать письма, поступающие с почтовых доменов, mx для которых ссылается 127.0.0.1.
42. Как заблокировать письма, в заголовке которых подзаголовок X-Mailer или отсутствует, или он пустой.
43. Как заблокировать письмо, если среди получателей указан определенный пользователь-приманка (honey pot).
44. Назначаем вес каждому спам-шаблону, по суммарному весу блокируем письмо.
45. Проверяем MX.
46. Как сравнить две величины.
47. Блокируем письмо, если адрес отправителя начинается с символов ("_" или "-") и если при этом выполняется одно из трех условий
48. Еще одна проверочка Received: на наличие
49. Разрешаем прием почты для определенного домена, только если оно пришло с определенного IP-адреса.
50. Как сказать sendmail'у, чтобы разалиасинг происходил до вызова milter'a.
51. Копирование транзитной почты для определенного домена в определенный ящик
52. Анализ доменного имени релея для сообщений с адресов домена mail.ru
53. Как можно добавить сообщение о конфиденциальности для всей или части исходящей почты.


Введение

Условия задач взяты с сайта linux.ufaras.ru/sendmail.html (с любезного разрешения автора сайта).
Решения для этих задач на сайте даны с использованием сложных правил sendmail.cf или при помощи стандартных конфигурационных файлов sendmail.
Мы же попытаемся решить данные задачи при помощи пакета TPmail.
Вообще говоря, практически любую из указанных задач можно решить при помощи модуля milter-agent, однако попытаемся найти альтернативные решения.



1. Как копировать почту (всю, определенных абонентов).

(1) Использовать mail_archive.sh из модуля milter-agent.
(2) Использовать [Address] из модуля milter-agent.
[Address]
message_recipient = "user1@mydomain.ru"
add_recipient = "localuser2"



2. Как перенаправить определенную исходящую почту в локальный почтовый ящик.

Использовать [Address] из модуля milter-agent.
[Address]
message_recipient = "user1@foreign.com"
message_forward_recipient = "localuser2"



3. Как запретить посылать почту на определенный домен вместе с его поддоменами.

Использовать [Filter] из модуля milter-connect.
[Filter]
reject_stage = envrcpt
reject_envfrom = "@localdomain\.ru"
reject_envrcpt = "@(()|.*\.)blockdomain\.ru"
reject_message = "The mail delivery to these domains is prohibited."



4. Как разрешить определенному пользователю принимать почту только с определенного IP-адреса.

Использовать [Filter] из модуля milter-connect.
[Filter]
accept_stage = envrcpt
accept_hostaddr = "10.2.100.234"
accept_envfrom = ".*"
accept_envrcpt = "user1@ourdomain.ru"
[Filter]
reject_stage = envrcpt
reject_envfrom = ".*"
reject_envrcpt = "user1@ourdomain.ru"
reject_message = "You cannot get a mail from all world."



5. Как разрешить пользователям принимать почту только с определенного IP-адреса (запрет получения почты извне за исключением одного внешнего ip-адреса).

Использовать [Filter] из модуля milter-connect.
[Filter]
accept_stage = envrcpt
accept_hostaddr = "10.2.100.234"
accept_envfrom = ".*"
accept_envrcpt = "@ourdomain\.ru"
[Filter]
reject_stage = envrcpt
reject_envfrom = ".*"
reject_envrcpt = "@ourdomain\.ru"
reject_message = "You cannot get a mail from all world."



6. Как разрешить определенному пользователю принимать почту только с определенного e-mail адреса.

Использовать [Filter] из модуля milter-connect.
[Filter]
accept_stage = envrcpt
accept_envfrom = "user2@foreign.com"
accept_envrcpt = "user1@ourdomain.ru"
[Filter]
reject_stage = envrcpt
reject_envfrom = ".*"
reject_envrcpt = "user1@ourdomain.ru"
reject_message = "You cannot get a mail from all world."



7. Как разрешить некоторым пользователям принимать почту только с локальных адресов.

Использовать [Filter] из модуля milter-connect.
[Filter]
accept_stage = envrcpt
accept_envfrom = "@ourdomain\.ru"
accept_envrcpt = "(user1|user2|user3)@ourdomain\.ru"
[Filter]
reject_stage = envrcpt
reject_envfrom = ".*"
reject_envrcpt = "(user1|user2|user3)@ourdomain.ru"
reject_message = "You can get only a local mail ."



8. Как запретить некоторым пользователям принимать почту с внешних адресов.

Решение аналогично решению задачи 7.
Использовать [Filter] из модуля milter-connect.
[Filter]
accept_stage = envrcpt
accept_envfrom = "@ourdomain\.ru"
accept_envrcpt = "(user1|user2|user3)@ourdomain\.ru"
[Filter]
reject_stage = envrcpt
reject_envfrom = ".*"
reject_envrcpt = "(user1|user2|user3)@ourdomain.ru"
reject_message = "You cannot get a mail from another world."



9. Как отвергать почту, приходящую с локальных административных адресов, но не с локальных ip-адресов

(1) Алгоритм LMTA успешно решает данную задачу.
(2) Использовать [Filter] из модуля milter-connect.
[Filter]
accept_stage = envrcpt
accept_hostaddr = "192.168.100.1 - 192.168.100.255"
accept_envfrom = "^(root|postmaster|adm|mail-daemon|hostmaster|webmaster)@ourdomain\.ru"
accept_envrcpt = ".*"
[Filter]
reject_stage = envrcpt
reject_envfrom = "^(root|postmaster|adm|mail-daemon|hostmaster|webmaster)@ourdomain\.ru"
reject_envrcpt = ".*"
reject_message = "You are used a forged addresses."



10. Как запретить почту с внешних ip-адресов, подписанную моим почтовым доменом.

(1) Алгоритм LMTA успешно решает данную задачу.
(2) Использовать [Filter] из модуля milter-connect.
[Filter]
accept_stage = envrcpt
accept_hostaddr = "192.168.100.1 - 192.168.100.255"
accept_envfrom = "@ourdomain\.ru"
accept_envrcpt = ".*"
[Filter]
reject_stage = envrcpt
reject_envfrom = "@ourdomain\.ru"
reject_envrcpt = ".*"
reject_message = "You are used a forged addresses."



11. Как заставить локальных пользователей подписываться в e-mail только локальным доменом.

(1) Алгоритм LMTA успешно решает данную задачу.
(2) Использовать [Filter] из модуля milter-connect.
[Filter]
accept_stage = envrcpt
accept_hostaddr = "192.168.100.1 - 192.168.100.255"
accept_envfrom = "@ourdomain\.ru"
accept_envrcpt = ".*"
[Filter]
reject_stage = envrcpt
reject_hostaddr = "192.168.100.1 - 192.168.100.255"
reject_envfrom = ".*"
reject_envrcpt = ".*"
reject_message = "These e-mail addresses are prohibited."



12. Как установить жесткое соответствие между локальным e-mail-адресом и локальным IP-адресом для отправки сообщений локальными пользователями.

(1) Использовать [UserQuota] из модуля milter-quota.
[UserQuota]
quota_user_name = "user1"
quota_user_allowed_send_hostaddr = "192.168.100.1"
(2) Использовать [Filter] из модуля milter-connect.
[Filter]
accept_stage = envrcpt
accept_hostaddr = "192.168.100.1"
accept_envfrom = "user1@ourdomain.ru"
accept_envrcpt = ".*"
[Filter]
reject_stage = envrcpt
reject_hostaddr = "192.168.100.1 - 192.168.100.255"
reject_envfrom = "user1@ourdomain.ru"
reject_envrcpt = ".*"
reject_message = "You can send a mail only from allowed hosts."



13. Как запретить определенному локальному пользователю посылать сообщения за пределы локального домена.

Использовать [Filter] из модуля milter-connect.
[Filter]
accept_stage = envrcpt
accept_envfrom = "user1@ourdomain.ru"
accept_envrcpt = "@ourdomain\.ru"
[Filter]
reject_stage = envrcpt
reject_envfrom = "user1@ourdomain.ru"
reject_envrcpt = ".*"
reject_message = "You are prohibited to send a mail for all world."



14. Как разрешить определенному локальному пользователю посылать сообщения только на определенный внешний адрес.

Использовать [Filter] из модуля milter-connect.
[Filter]
accept_stage = envrcpt
accept_envfrom = "user1@ourdomain.ru"
accept_envrcpt = "user2@anotherdomain.ru"
[Filter]
reject_stage = envrcpt
reject_envfrom = "user1@ourdomain.ru"
reject_envrcpt = ".*"
reject_message = "You are prohibited to send a mail for all world."



15. Как ограничить группу пользователей работой(прием/отправка) только внутри локального почтового домена.

Использовать [Filter] из модуля milter-connect.
Скомбинировав это решение с решением задачи 12, можно получить режим жесткой привязки пользователей к машинам в локальном домене.
[Filter]
accept_stage = envrcpt
accept_hostaddr = "192.168.100.1 - 192.168.100.255"
accept_envfrom = "(user1|user2|user3)@ourdomain.ru"
accept_envrcpt = "@ourdomain\.ru"
[Filter]
accept_stage = envrcpt
accept_hostaddr = "192.168.100.1 - 192.168.100.255"
accept_envfrom = "@ourdomain\.ru"
accept_envrcpt = "(user1|user2|user3)@ourdomain.ru"
[Filter]
reject_stage = envrcpt
reject_envfrom = "(user1|user2|user3)@ourdomain.ru"
reject_envrcpt = ".*"
reject_message = "You are prohibited to send a mail for all world."
[Filter]
reject_stage = envrcpt
reject_envfrom = ".*"
reject_envrcpt = "(user1|user2|user3)@ourdomain.ru"
reject_message = "You are prohibited to receive a mail from all world."



16. Как разрешить пользователю переписку с любым пользователем, кроме указанного адреса.

Использовать [Filter] из модуля milter-connect.
[Filter]
reject_stage = envrcpt
reject_envfrom = "user1@ourdomain.ru"
reject_envrcpt = "user2@anotherdomain.ru"



18. Как запретить фальшивую рассылку с адресов gluck@mail.subscribe.ru и namma123456@subscribe.ru.

Алгоритм LMTA успешно решает данную задачу.



19. Фильтруем входящую почту по параметру HELO.

При использовании алгоритима LMTA решать данную задачу ненужно.



20. Как заблокировать письма с единственным подзаголовком Received: (как определить, что переменная пуста).

(1) Использовать test_received_header.sh из модуля milter-agent.
(2) Написать собственный сценарий для модуля milter-agent.



21. Как бороться с перебором имен почтовых ящиков (dictionary attack, define(`confBAD_RCPT_THROTTLE',`3')).

В целом, необходимости в этом, так как алгоритм LMTA работает быстро и эффективно.



22. Как заблокировать перебор имен почтовых ящиков (наложение ограничения на число отказов "User unknown").

В целом, необходимости в этом, так как алгоритм LMTA работает быстро и эффективно.



23. Последний вариант блокировки при превышении количества неопознанных объектов в списке получателей локального домена.

В целом, необходимости в этом, так как алгоритм LMTA работает быстро и эффективно.



25. Как избежать двойной отлуп (define(`confDOUBLE_BOUNCE_ADDRESS', `')).

Задача решается штатными средствами sendmail.



26. Как заблокировать письма, посылаемые на определенный relay (блокировка по MX-домену получателя).

В целом, необходимости в этом, так как алгоритм LMTA работает быстро и эффективно.



27. Как проверять в RBL-базах не только ip непосредственного отправителя-почтовика, но и ip всех предшествоваших релеев, определенных в подзаголовках Received:.

В целом, необходимости в этом, так как алгоритм LMTA работает быстро и эффективно.
Однако программа test_lmta из модуля milter-connect может решать подобную задачу.



28. Как ограничить количество соединений с smtp-портом с одного хоста и общее число одновремено открытых smtp-соединений за определенный промежуток времени.

Использовать [RateControl] из модуля milter-quota.



29. Как заблокировать почту с ip-адресов, для которых прямая и обратная проверки в днс не соответствуют друг другу.

В целом, необходимости в этом, так как алгоритм LMTA работает быстро и эффективно.



30. Как видоизменить адрес получателя (добавляем 3 цифры перед адресом).

Использовать [Address] из модуля milter-agent.
[Address]
message_recipient = "user1@ourdomain.ru"
message_forward_recipient = "123user1@ourdomain.ru"



31. Горячий спам (ноябрь-декабрь 2006г.).

Написать собственный сценарий для фильтрация строку для модуля milter-agent.



32. Как заставить локальных клиентов проходить smtp-авторизацию?

Использовать [Filter] из модуля milter-connect.
[Filter]
accept_stage = envrcpt
accept_envfrom = "@ourdomain\.ru"
accept_envrcpt = ".*"
auth_user_credentials = "user1 user2 user3"
auth_nonauth_users_also = 0
[Filter]
reject_stage = envrcpt
reject_envfrom = "@ourdomain\.ru"
reject_envrcpt = ".*"
reject_message = "You must be authenticated for this mail server."
auth_user_credentials = ".*"
auth_nonauth_users_also = 1



33. Как запретить получать почту на адреса вида user@[1.2.3.4], где [1.2.3.4] - ip-адрес вашего почтовика (разрешаем подобное только для пользователей из локальной сети)

Использовать [Filter] из модуля milter-connect.
[Filter]
accept_stage = envrcpt
accept_hostaddr = "192.168.100.1 - 192.168.100.255"
accept_envfrom = "@\[1.2.3.4\]\."
accept_envrcpt = ".*"
[Filter]
reject_stage = envrcpt
reject_envfrom = ".*"
reject_envrcpt = "@\[1.2.3.4\]\."
reject_message = "Sorry, we don't accept a such mail."



34. Как запретить получать почту на локальные адреса, которые заканчиваются точкой.

Использовать [Filter] из модуля milter-connect.
[Filter]
reject_stage = envrcpt
reject_envfrom = ".*"
reject_envrcpt = "@ourdomain\.ru\."
reject_message = "Sorry, we don't accept a such mail."



35. Выставляем ограничения на размер сообщения для определенного домена.

Использовать [MessageControl] из модуля milter-quota.
[Filter]
msg_ctl_envfrom = "@thisdomain\.com"
msg_ctl_limit_size = "3M"
reject_message = "Sorry, we don't accept a such mail."



36. Выставляем ограничения на формат сообщения (text/plain) для определенных пользователей.

Использовать [Filter] из модуля milter-agent.



37. Как заставить sendmail.cf просматривать заголовок To: в самом письме на предмет существования получателя на почтовом сервере?

Использовать [Filter] из модуля milter-agent.
Есть готовый пример check_recipients.sh.



38. Как заставить sendmail.cf проверять конвертного получателя на наличие в passwd+aliases?

(1) Использовать [Filter] из модуля milter-agent.
Есть готовый пример check_recipients.sh.
(2) Использовать список локальных получателей из модуля milter-connect.



39. Предыдущая задача с диференцированным отлупом (#discard or #error) в зависимости от адреса aотправителя.

(1) Использовать [Filter] из модуля milter-agent.
Есть готовый пример check_recipients.sh.



39. Предыдущая задача с диференцированным отлупом (#discard or #error) в зависимости от адреса отправителя.

(1) Использовать [Filter] из модуля milter-agent.
Есть готовый пример check_recipients.sh.



40. Как заблокировать письма, поступающие с почтовых доменов, mx-записи для которых содержат определенные домены.

(1) Использовать [Filter] из модуля milter-agent.
(2) Алгоритм LMTA решает данную задачу.



41. Как заблокировать письма, поступающие с почтовых доменов, mx для которых ссылается 127.0.0.1.

(1) Использовать [Filter] из модуля milter-agent.
(2) Алгоритм LMTA решает данную задачу.



42. Как заблокировать письма, в заголовке которых подзаголовок X-Mailer или отсутствует, или он пустой.

Использовать [Filter] из модуля milter-agent.



43. Как заблокировать письмо, если среди получателей указан определенный пользователь-приманка (honey pot).

Включить опцию enable_info_orig_recipients в модуле milter-connect.
И затем использовать [Filter] из модуля milter-agent.



44. Назначаем вес каждому спам-шаблону, по суммарному весу блокируем письмо.

В TPmail нет необходимости в этом.



45. Проверяем MX.

В TPmail нет необходимости в этом.



46. Как сравнить две величины.

(1) В TPmail нет необходимости в этом.
(2) Использовать [Filter] из модуля milter-agent.



47. Блокируем письмо, если адрес отправителя начинается с символов ("_" или "-") и если при этом выполняется одно из трех условий.

(1) Алгоритм LMTA решает данную задачу.
(2) Использовать [Filter] из модуля milter-agent.



48. Еще одна проверочка Received: на наличие ...

Использовать [Filter] из модуля milter-agent.



49. Разрешаем прием почты для определенного домена, только если оно пришло с определенного IP-адреса.

Смотри в примерах для модуля milter-connect.



50. Как сказать sendmail'у, чтобы разалиасинг происходил до вызова milter'a.

Мы, увы, являемся модулем milter.



51. Копирование транзитной почты для определенного домена в определенный ящик.

Смотри в примерах для модуля milter-agent.
(1) Использовать [Filter] из модуля milter-agent.
(2) Использовать [Address] из модуля milter-agent.



52. Анализ доменного имени релея для сообщений с адресов домена mail.ru.

Использовать [Filter] из модуля milter-connect.
[Filter]
accept_stage = envrcpt
accept_hostname = "mxs.mail.ru"
accept_envfrom = "@mail\.ru"
[Filter]
reject_stage = envrcpt
reject_envfrom = "@mail\.ru"
reject_message = "Sorry, we don't accept a such mail."



53. Как можно добавить сообщение о конфиденциальности для всей или части исходящей почты.

Есть сценарий disclaimer.sh для модуля milter-agent.
Сценарий поставляется как отдельный коммерческий продукт.




Valid HTML 3.2! Авторское Право © 2006 Дмитрий Стефанков Last modified: $Date: 2010-01-27 15:30:11+03 $ Powered by FreeBSD. Powered by Apache. Powered by OpenSSL.