Created
September 16, 2025 21:07
-
-
Save sergev/5a0279b7e595c4cb6ed2bbcc045b578c to your computer and use it in GitHub Desktop.
Custom configuration for sendmail
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ########### | |
| # Макросы # | |
| ########### | |
| # Версия конфигурации sendmail. В данном случае | |
| # Copyright (C) 1992-2007 Сергей Вакуленко, <vak@cronyx.ru>. | |
| DVvak/3.0 | |
| V10 | |
| # Ссылки на макросы имеют вид $X. Макросы a-z используются системой, | |
| # A-Z оставлены для пользователя. | |
| # Следующие макросы определены внутри sendmail: | |
| # a - дата сообщения в формате RFC 822 | |
| # b - текущая дата в формате RFC 822 | |
| # c - счетчик зацикливания (hop count) | |
| # d - текущая дата в формате Unix | |
| # f - адрес отправителя (from) | |
| # g - адрес отправителя относительно получателя | |
| # h - хост получателя | |
| # i - идентификатор очереди | |
| # j - полное имя данного хоста (hostname), обычно $j = $w.$m | |
| # k - UUCP-шное имя данного хоста | |
| # m - доменная часть имени данного хоста (hostname после первой точки) | |
| # p - номер процесса sendmail | |
| # r - используемый протокол | |
| # s - хост отправителя | |
| # t - численное представление текущего времени | |
| # u - имя пользователя получателя | |
| # v - номер версии sendmail | |
| # w - короткое имя данного хоста (hostname до точки) | |
| # x - полное имя отправителя | |
| # y - имя управляющего терминала данного процесса (basename) | |
| # z - домашний каталог получателя | |
| # Не все из них могут быть определены, для проверки | |
| # используется условное выражение вида "$?X текст1 $| текст2 $.". | |
| # Приглашение для SMTP. | |
| De$j $v$?V/$V$. Sendmail is ready at $b | |
| # "Официальное" имя домена для данной машины. | |
| # Определяется автоматически. | |
| #Dj$w - начиная с версии sendmail 8.6 это делается автоматически | |
| # Формат строки "From_". | |
| DlFrom $g $d | |
| # Имя почтового демона для возврата ошибок маршрутизации. | |
| DnMAILER-DAEMON | |
| # Список "операторов" в адресах. | |
| Do.:%@!^=/[]?() | |
| # Формат адреса отправителя. | |
| Dq$g$?x ($x)$. | |
| ############### | |
| # Классы имен # | |
| ############### | |
| # Имеют вид: | |
| # CXимя1 имя2... | |
| # FXфайл | |
| # В этом файле находится список всех доменных имен данной машины. | |
| Fw/etc/mail/myhostnames | |
| # Список доменных имен клиентских машин. | |
| # Для них будет разрешена пересылка (relaying). | |
| FC/etc/mail/myclients | |
| # Класс разделителей, запрещенных в имени домена. | |
| CB! % @ : ^ | |
| # Суффикс для антивируса. | |
| C{CHECKED}checked | |
| ######################### | |
| # Составление заголовка # | |
| ######################### | |
| # Заголовки (в соответствии с RFC 822) должны идти | |
| # в следующем порядке: "Return-Path", "Received", | |
| # "Date", "From", "Subject", "Sender", "To", "Cc". | |
| # | |
| # Формат поля Received: | |
| # ["from" domain] ; кто передал | |
| # ["by" domain] ; кто принял | |
| # ["via" atom] ; среда передачи | |
| # *("with" atom) ; протокол связи | |
| # ["id" msg-id] ; receiver msg id | |
| # ["for" addr-spec] ; initial form | |
| # ";" date-time ; time received | |
| # | |
| # Некоторые поля заголовка имеет смысл добавлять только для | |
| # определенных мэйлеров, управляя соответствующими флагами мэйлера, | |
| # пример: P - добавить поле Return-Path, H?P?Return-Path: <$g> | |
| # Поля "Date", "From", "Message-Id" добавляем принудительно, если их нет. | |
| HReceived: $?sfrom $s $.$?_($?s$|from $.$_) $. | |
| by $j ($v$?V/$V$.)$?r with $r$. id $i$?u | |
| for $u$.; $b$?g | |
| (envelope-from $g)$. | |
| HDate: $a | |
| HFrom: $q | |
| HMessage-Id: <$t.$i@$j> | |
| ################################ | |
| # "Благонадежные" пользователи # | |
| ################################ | |
| # Следующим господам мы верим и разрешаем | |
| # подменять адрес From: посредством флага -f. | |
| Troot daemon uucp | |
| ########################### | |
| # Определение старшинства # | |
| ########################### | |
| # Письма со следующими значениями поля Precedence: | |
| # будут доставляться тем быстрее, чем больше соответствующее | |
| # значение станшинства. Если старшинство меньше 0, | |
| # сообщений об ошибках не будет. | |
| # По умолчанию письма имеют старшинство 0. | |
| #Pbulk=-60 | |
| #Pfirst-class=0 | |
| #Pjunk=-100 | |
| #Pspecial-delivery=100 | |
| #################### | |
| # Установка флагов # | |
| #################### | |
| #O CheckAliases=False | |
| O OperatorChars=.:%@!^=/[]?() | |
| # Флаг 'r' - время ожидания ввода при работе по SMTP. | |
| # Дело в том, что при работе по SMTP в глобальной сети | |
| # бывают довольно большие задержки. | |
| # Обычно - два часа, хотя это и противоречит | |
| # традиционным протоколам. | |
| # По умолчанию не ограничено. | |
| Or2h | |
| # Флаг 'T' - время ожидания доставки, обычно три дня. | |
| # После этого письмо возвращается назад. | |
| OT3d | |
| # Флаг 'Y' - нужно ли ветвиться (fork) перед обработкой | |
| # очередного письма из очереди. При этом можно сэкономить | |
| # на оперативной памяти, т.к. родительский процесс не будет | |
| # расти по мере обработки очереди. Зато теряется возможность | |
| # отслеживать недостижимые хосты. | |
| # По умолчанию выключено (не ветвиться). | |
| #OY | |
| # Флаги 'y', 'z' и 'Z' - управление приоритетом сообщений. | |
| # Приоритет вычисляется по формуле: | |
| # приоритет = объем - (класс * z) + (тираж * y) + (попытка * Z) | |
| # Здесь 'объем' - размер сообжения в байтах, | |
| # 'класс' - класс сообщения (см. команды 'P'), | |
| # 'тираж' - количество адресатов- получателей сообщения, | |
| # 'попытка' - номер попытки установления связи (0, 1...). | |
| # Чем ниже приоритет, тем быстрее будет доставлено сообщение. | |
| # По умолчанию y=1000, z=1800, Z=9000. | |
| #Oy1000 | |
| #Oz1800 | |
| #OZ9000 | |
| # Флаги 'x', 'q' и 'X' - ограничение загрузки процессора. | |
| # Сообщение не обрабатывается, а остается в очереди, | |
| # в случае, если загрузка процессора превышает x и | |
| # выполняется следующее условие: | |
| # q | |
| # приоритет > ---------------- | |
| # загрузка - x + 1 | |
| # Если загрузка процессора превышает X, sendmail | |
| # перестает обрабатывать входящие SMTP-соединения. | |
| # По умолчанию x=8, q=10000, X=12. | |
| #Ox8 | |
| #Oq10000 | |
| #OX12 | |
| # Флаг 'd' - режим обработки сообщения. | |
| # Варианты: interactive - синхронная доставка (по умолчанию), | |
| # background - асинхронная доставка (фоновым процессом), | |
| # queue - отложенная доставка (занесение в очередь). | |
| Odbackground | |
| # Флаг 'L' - уровень диагностики, по умолчанию 9. | |
| #OL9 | |
| # Флаги 'u' и 'g' - идентификаторы пользователя и группы, | |
| # от имени которых происходит запуск мэйлеров. | |
| # По умолчанию u=1, g=1. | |
| #Ou1 | |
| #Og1 | |
| # Флаг 'D' - перестраивать базу данных aliases.{pag,dir} | |
| # автоматически по мере обновления файла aliases. | |
| # По умолчанию выключено. | |
| #OD | |
| # Флаг 'A' - имя базы данных синонимов. | |
| # По умолчанию - ./aliases. | |
| OA/etc/mail/aliases | |
| # Флаг 'Q' - имя каталога очереди сообщений. | |
| # По умолчанию - ./mqueue. | |
| OQ/var/spool/mqueue | |
| # Флаг 'H' - имя help-файла для SMTP. | |
| # По умолчанию - ./sendmail.hf. | |
| OH/usr/share/misc/sendmail.hf | |
| # Флаг 'S' - имя файла для записи статистики. | |
| # По умолчанию - ./sendmail.st. | |
| OS/var/log/sendmail.st | |
| # Флаг 'B' - символ для заполнения пустых полей в адресах. | |
| # Все незащищенные пробелы в адресах заменяются этим символом. | |
| # По умолчанию - пробел. | |
| #OB. | |
| # Флаг 'F' - режим доступа для создаваемых файлов. | |
| # По умолчанию - 0644. | |
| OF0600 | |
| # Флаг 'a' - время ожидания готовности базы aliases.{pag,dir} | |
| # в минутах (поиск записи @:@). | |
| # По умолчанию - не проверять готовность базы. | |
| # Обычно ставят 5 минут. | |
| Oa5 | |
| # Флаг 'o' - обрабатывать заголовки в "старом" формате, | |
| # т.е. адреса разделяются пробелами. В исходящих заголовках | |
| # адреса всегда разделяются запятыми. | |
| # По умолчанию выключено. | |
| Oo | |
| # Флаг 's' - "супернадежность", сохранять письмо в очереди | |
| # даже в случае немедленной (синхронной) доставки. | |
| # По умолчанию выключено. | |
| Os | |
| # Флаг 'I' - всегда опрашивать name-сервер (BIND), не доверять файлу /etc/hosts. | |
| # Необходимо, если /etc/hosts заведомо неполон или требуется обрабатывать | |
| # MX-записи. Если выключить, то сначала будет опрашиваться name-сервер, | |
| # а при отлупе будем жить по /etc/hosts. | |
| # По умолчанию выключено. | |
| #OI | |
| # Флаг 'c' - если мэйлер помечен как медленный (expensive), | |
| # не вызывать его немедленно, а отложить задание в очередь. | |
| # По умолчанию выключено. | |
| Oc | |
| # Флаг 'e' - режим обработки ошибок. Возможные варианты: | |
| # print - печать сообщений об ошибках (по умолчанию), | |
| # quiet - никаких сообщений, только код ответа, | |
| # mail - вернуть письмо с сообщением, | |
| # write - печать сообщения на терминал пользователя или письмом, | |
| # если пользователя нет в данный момент, | |
| # exit - вернуть письмо с сообщением и нулевой код ответа. | |
| #Oeprint | |
| # Флаг 'f' - сохранять строки "From_". По умолчанию выключено. | |
| Of | |
| # Флаг 'i' - игнорировать строки, содержащие только точку. | |
| # По умолчанию выключено. | |
| #Oi | |
| # Флаг 'm' - "себе тоже". Слать письма автору сообщения, | |
| # если его адрес присутствует в списках рассылки. | |
| # По умолчанию выключено. | |
| Om | |
| # Флаг 'v' - режим трассировки. По умолчанию выключен. | |
| #Ov | |
| # Флаг 'K' - загрузка дополнительной базы данных. | |
| # Формат: KXfile. База данных file открывается под именем X. | |
| # База aliases всегда открыта с именем @. | |
| # Загружаем базу маршрутизации под именем R. | |
| # Для IDA sendmail: | |
| #OKR/etc/mail/routes | |
| # Для sendmail 8.5: | |
| #KR hash /etc/mail/routes | |
| # Встроенная база для удаления кавычек. | |
| Kdequote dequote | |
| ########### | |
| # Мэйлеры # | |
| ########### | |
| # Синтаксис определения мэйлера: | |
| # Mимя, Path=путь, Argv=аргументы, Eol=конец-строки, Maxsize=макс-размер, | |
| # Flags=флаги, Sender=правило-отпр, Recipient=правило-получ, | |
| # Linelimit=макс-длина-строки | |
| # Path задает полный путь команды, например, /bin/mail, | |
| # или один из частных случаев: | |
| # [IPC] или [TCP] - SMTP сеанс с удаленным мэйлером, | |
| # [LPC] (local person communication) - SMTP на стандартный ввод/вывод, | |
| # для отладки. Не для чайников. :-) | |
| # Предопределенные флаги: | |
| # a - использовать Extended SMTP протокол | |
| # A - пропускать через aliases, только для локальных мэйлеров | |
| # b - добавлять пустую строку в конце сообщения, для тупых мэйлеров | |
| # c - убирать комментарии из адресов | |
| # C - если в адресах получателей нет '@', приписывать им домен отправителя | |
| # d - убирать скобки <> вокруг адресов | |
| # D - требуется поле Date: | |
| # E - преобразовывать строки From_ в >From | |
| # e - "медленный" мэйлер, вызывать только при обработке очереди (асинхронно) | |
| # f - нужно добавлять флаг "-f from", если от root | |
| # F - требуется поле From: | |
| # g - слать сообщения об ошибках от имени MAILER-DAEMON (макро $n) | |
| # h - не преобразовывать домен в маленькие буквы | |
| # i - преобразовывать адрес отправителя на конверте через User Database | |
| # I - этот мэйлер - SMTP соединение с другим sendmail | |
| # j - преобразовывать адрес получателя на конверте через User Database | |
| # k - отменить проверку loopback connection (не рекомендуется) | |
| # K - не реализовано, зарезервировано | |
| # l - локальный мэйлер (доставка конечному адресату) | |
| # L - ограничивать длину строки в соответствии с RFC821 (не рекомендуется) | |
| # m - возможна посылка нескольким адресатам за один вызов | |
| # M - добавлять поле Message-Id: | |
| # n - не нужно добавлять строку "From_" в начало сообщения | |
| # o - выполнять от имени владельца ящика получателя | |
| # p - указывать обратный путь в MAIL FROM: | |
| # P - требуется поле Return-Path: | |
| # q - отвечать 250 (local address), а не 252, при верификации адреса (SMTP VRFY) | |
| # r - то же, что и -f, но -r | |
| # R - открывать SMTP-соединения от secure TCP ports (не имеет большого смысла) | |
| # s - удалять кавычки " из адресов | |
| # S - можно запускать мэйлер от root | |
| # u - не преобразовывать в имени пользователя большие буквы в маленькие | |
| # U - выдавать строку "From_" с добавкой "remote from <host>" в конце | |
| # w - юзер должен иметь учетную запись на локальной машине | |
| # x - требуется поле Full-Name: | |
| # X - к каждой строке, начинающейся с точки, приписывать еще одну точку | |
| # z - для локального мэйлера использовать протокол LMTP | |
| # Z - применять DialDelay | |
| # 0 - не следовать MX-записям (для SMTP) | |
| # 1 - убирать символы \0 | |
| # 2 - запретить ESMTP | |
| # 3 - преобразовывать не-ABCDIC символы в =XX | |
| # 5 - если aliases не найдены, применить правило 5 (альтернативная доставка) | |
| # 6 - обрезать заголовок до 7-ми бит | |
| # 7 - обрезать все сообщение до 7-ми бит | |
| # 8 - можно слать 8-битные данные (отменяет преобразование 8->7 mime) | |
| # 9 - выполнять преобразование 7->8 mime (только для text/plain) | |
| # : - если в адресах есть :include:, преобразовать к мэйлеру *include* | |
| # | - если адрес начинается с |, преобразовать к мэйлеру prog | |
| # / - если адрес начинается с /, преобразовать к мэйлеру *file* | |
| # @ - искать адрес в базе пользователей User Database | |
| # % - запрет непосредственной доставки до спец. вызова -qI/-qR/-qS | |
| # Локальная доставка пользователям на данной машине. | |
| Mlocal, Path=/usr/libexec/mail.local, Argv=mail -r $g $u, | |
| Flags=lsmn89AwS, Sender=11/10, Recipient=12 | |
| # Выполнение программ на локальной машине (для фильтров). | |
| Mprog, Path=/bin/sh, Argv=sh -c $u, | |
| Flags=lse89, Sender=11/10, Recipient=12 | |
| Mrun, Path=/bin/sh, Argv=sh -c $u, | |
| Flags=lse89, Sender=11/10, Recipient=12 | |
| # Доставка по SMTP. | |
| Mtcp, Path=[IPC], Argv=TCP $h, Eol=\r\n, | |
| Flags=umeXC89, Linelimit=990, Sender=10, Recipient=12 | |
| # Для ClamAV: -c/var/virus/clamd.sock | |
| # Касперский: -a/var/run/aveserver | |
| Mscreener, Path=/usr/local/sbin/mailscreener, | |
| Argv=mailscreener -c/var/virus/clamd.sock -a/var/run/aveserver -fantivirus-notify -rantivirus-notify $u $f $_, | |
| Flags=DFMSPAnu89e, Sender=11/10, Recipient=12, | |
| Type=DNS/RFC822/X-Unix | |
| # | |
| # Фильтры | |
| # | |
| Xregex, S=local:/var/run/regex.sock, F=T, T=S:4m;R:4m | |
| O InputMailFilters=regex | |
| O PrivacyOptions=goaway | |
| #O DaemonPortOptions= Port=smtp, Name=MTA | |
| #O DaemonPortOptions= Port=smtps, Name=TLSMTA, M=s | |
| ########################## | |
| # Правила преобразования # | |
| ########################## | |
| # Имеется пять основных (зарезервированных) правил: | |
| # 1 - обработка адреса отправителя, | |
| # 2 - обработка адреса получателя, | |
| # 3 - предварительная обработка, | |
| # 4 - заключительная обработка, | |
| # 0 - маршрутизация. | |
| # Адрес локального отправителя (пользователя) обрабатывается | |
| # по схеме 3 -> 1 -> 4. | |
| # Адрес удаленного отправителя обрабатывается по схеме 3 -> 1 -> X -> 4, | |
| # где X - номер правила, указанный в поле Sender соответствующего мэйлера. | |
| # Адрес получателя обрабатывается по схеме 3 -> 2 -> Y -> 4, | |
| # где Y - номер правила, указанный в поле Recipient соответствующего мэйлера. | |
| # Выбор мэйлера происходит по схеме 3 -> 0. | |
| # Если определен флаг '/', то при обработке адресов заголовков | |
| # (в отличие от конвертов) будут вместо правил 1 и 2 применяться | |
| # правила 5 и 6 соответственно. | |
| # Команда S# задает номер набора правил, в диапазоне 0..29. | |
| # Команда R определяет очередное правило: | |
| # Rлевая-часть правая-часть комментарий | |
| # Левая и правая части разделяются табуляциями. | |
| # В левой части допустимы следующие символы: | |
| # $* - ноль и более термов | |
| # $+ - один и более терм | |
| # $- - ровно один терм | |
| # $=x - непустая последовательность термов из класса X | |
| # $~x - непустая последовательность термов, не принадлежащих классу X | |
| # $%D - непустая последовательность термов-ключей из DBM-файла D | |
| # $^D - непустая последовательность термов, не входящих в DBM-файл D | |
| # Метасимволы правой части: | |
| # $1 $2 $2 и т.д. - строки, соответствующие метасимволам левой части | |
| # $&X - текущее содержимое макро X | |
| # $[ имя $: умолч $] - канонизация имени (запрос к name-серверу, BIND) | |
| # $(D ключ $@ арг $: умолч $) - поиск в DBM-файле | |
| # $>7 - запуск набора правил | |
| # $#мэйлер - выбор мэйлера, только для набора 0 | |
| # $@хост - выбор хоста, только для набора 0 | |
| # $:адрес - выбор адреса, только для набора 0 | |
| # В начале правой части метасимвол $@ означает возврат из текущего | |
| # набора правил (аналог return), метасимвол $: означает | |
| # переход к следующему правилу (аналог break). | |
| # Правила 1, 2, 5, 6 - пустые, чтобы не было проблем с sendmail версии 5. | |
| #------------------------------ | |
| # Правилo 3: канонизация адреса | |
| #------------------------------ | |
| S3 | |
| # Обрабатываем пустой адрес как вырожденный случай. | |
| R$*<>$* $@@ некий спецсимвол | |
| # Вытаскиваем адрес из угловых скобок. Дважды и даже трижды. Зачем это все? | |
| R$*<$*<$*<$+>$*>$*>$* $4 тройной уровень <<<>>> | |
| R$*<$*<$+>$*>$* $3 двойной уровень <<>> | |
| R$*<$+>$* $2 нормальный адрес RFC821/822 | |
| # Все ^ заменяем на !. | |
| R$*^$* $1!$2 давно устарело | |
| # RFC 1123 не рекомендует выполнять маршрутизацию вида <@a,@b,@c:user@d>. | |
| # Перепишем как @a,@b,@c:user<@d>. В правиле 0 отбросим все, что | |
| # до двоеточия. Но оно может пригодиться для "From_". | |
| R$*@$*@$* $1^$2@$3 заменим левые @ на ^ | |
| # Обычный адрес в стиле internet. | |
| R$+@$+ $:$1<@$2> домен заключаем в <скобки> | |
| R$*^$* $1@$2 обратно ^ => @ | |
| R$+<$+@$+> $1$2<@$3> a<b@c> => ab<@c> | |
| # Приведение синонимов к полным именам. Обращение к BIND. | |
| R$*<@$-> $:$1<@$[$2$:$2$]> ищем записи типа CNAME | |
| # Канонический вид готов. | |
| R$+<@$+> $@$1<@$2> получилось ab<@c> | |
| # UUCP-переадресация через себя | |
| R$=w!$* $2 myname!addr => addr | |
| # UUCP-адрес в доменной адресации, преобразуем в internet. | |
| R$*.$~B!$* $@$3<@$1.$2> ab.c!de => de<@ab.c> | |
| # Адрес вида user%host, приведем к виду a%b%c@d. | |
| R$*%$* $1@$2 все @ заменим на % | |
| R$*@$*@$* $1%$2@$3 последний % на @ | |
| R$*@$* $@$1<@$2> поставим скобки | |
| # Просто user. Дописываем свой домен. | |
| R$* $@$1<@$j> добавляем свой домен | |
| #------------------------------------------- | |
| # Правилo 4: преобразование во внешнюю форму | |
| #------------------------------------------- | |
| S4 | |
| R@ $@ пустой <> адрес | |
| # Преобразование адреса вида 1.2.3.4 в имя домена. Обращение к BIND. | |
| R$*<@[$+]> $:$1<@$[[$2]$]> приведение численного адреса | |
| # Еще одно обращение к BIND. Приведение синонимов к полным именам. | |
| # В принципе, можно этого не делать, если relay сделает это за нас, | |
| # но при этом письмо может пойти по весьма странному пути. | |
| R$*<@$-> $:$1<@$[$2$:$2$]> ищем записи типа CNAME | |
| # Убираем угловые скобки. | |
| R$*<$+> $1$2 приводим в человеческий вид | |
| # Удаляем повторяющиеся домены. | |
| R$+%$=w@$=w $1@$j u%host@host => u@host | |
| #----------------------------------- | |
| # Правилo 8: повторная маршрутизация | |
| #----------------------------------- | |
| # | |
| S8 | |
| R$* $:$>3$1 канонизация | |
| R$* $:$>0$1 маршрутизация | |
| #------------------------- | |
| # Правилo 0: маршрутизация | |
| #------------------------- | |
| S0 | |
| # RFC 1123 не рекомендует выполнять маршрутизацию вида @a,@b,@c:user<@d>. | |
| # Шлем сразу на user@d. | |
| R@$+:$+ $2 так гораздо проще | |
| R$*<@[$+]> $#error$:$2 | |
| # Антивирус. | |
| R$*<@$+.$~{CHECKED}> $#screener$@$2.$3.checked$:$1@$2.$3.checked | |
| R$*<@$*.checked> $1<@$2> убираем .checked | |
| # Маршрутизация через нас. | |
| R$*<@$=w> $:$1<@$j> "свой" домен - к стандарту | |
| # Локальная доставка. | |
| R$*!$*<@$j> $#error$:550 Relaying Denied | |
| R$*%$*<@$j> $#error$:550 Relaying Denied | |
| R$*<@$j> $#local$:$1 | |
| R$*<@> $#local$:$1 | |
| R@ $#local$:MAILER-DAEMON | |
| # Поехали по SMTP. | |
| R$*<@$*> $#tcp$@$2$:$1@$2 | |
| R$+ $#error$:Invalid address: $1 | |
| #------------------- | |
| # Правилo 10: пустое | |
| #------------------- | |
| S10 | |
| #------------------------------------ | |
| # Правилo 11: отправитель на конверте | |
| #------------------------------------ | |
| # Перевод адресов From_ в банговую нотацию | |
| # для отслеживания маршрута статистикой. | |
| S11 | |
| # Из множеств "имен собственных" выбираем стандартное. | |
| R$*<@$=w> $:$1<@$j> "свой" домен - к стандарту | |
| # Маршрут вида @a,@b,@c:user<@d>. | |
| R$*@$*,@$*:$*<$*> $1$2!@$3:$4<$5> @a,@b:u<@h> -> a!@b:u<@h> | |
| R$*@$*:$*<$*> $1$2:$3<$4> a!@b:u<@h> -> a!b!u<@h> | |
| # Теперь разберем обычную форму | |
| R$*@$*<@$*> $1%$2<@$3> лишние @ на % | |
| R$*:$*<@$*> $1!$3!$2 убрали все @ и : | |
| R$*<@$*> $2!$1 убрали все @ | |
| # Ставим маркер ^ и передвигаем его на имя пользователя. | |
| R$* $:^$1^ поставили ^ | |
| R$*^$*!$* $1$2!^$3 двигаем вправо | |
| # Маршрут вида u%a%b%c. | |
| R$*^$*%$*^$* $1^$3^!$2$4 a%b%c -> c!b!a | |
| R$*^$* $1$2 убираем ^ | |
| # Убираем свое имя из пути. | |
| R$=w!$* $2 убираем свое имя | |
| Rlocalhost!$* $1 отрезаем localhost | |
| # Добавляем свое имя. | |
| R$* $:$j!$1 | |
| #----------------------------------- | |
| # Правилo 12: получатель на конверте | |
| #----------------------------------- | |
| S12 | |
| # RFC 1123 не рекомендует выполнять маршрутизацию вида @a,@b,@c:user<@d>. | |
| # Шлем сразу на user@d. | |
| R@$+:$+ $2 жить стало веселей | |
| #------------------------------------------------------- | |
| # Разрешение использовать символ $| | |
| #------------------------------------------------------- | |
| SStart | |
| R$* $$| $* $: $1 $| $2 fake for -bt mode, remove for real version | |
| #------------------------------------------------------- | |
| # Проверка получателя - запрещаем открытую пересылку (open relay) | |
| #------------------------------------------------------- | |
| Scheck_rcpt | |
| R< $+ @ $* $=w > $@ OK к локальным юзерам - можно | |
| R< $+ @ $* $=C > $@ OK | |
| R$* $: $(dequote "" $&{client_name} $) | |
| R$*$=w $@ OK от локальных юзеров - можно | |
| R$*$=C $@ OK | |
| R$@ $@ OK | |
| R$* $#error$:550 Relaying Denied for $1 | |
| #---Конец конфигурации--- |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment