====== Конфигурация milter-regex ====== Допускаются действия пяти видов. Ответ представляет собой текстовую строку и задается в двойных или одинарных кавычках:
reject "Ответ" команда ... tempfail "Ответ" команда ... continue команда ... discard команда ... accept команда ...Команды соответствуют командам протокола SNMP: * connect шаблон шаблон * helo шаблон * envfrom шаблон * envrcpt шаблон * header шаблон шаблон * body шаблон Шаблон - это регулярное выражение в произвольных разделителях плюс необязательный флаг: * e - расширенное выражение (REG_EXTENDED для regcomp) * i - не различать малые-большие буквы * n - наоборот, отрицание сравнения * d - выдача отладочной информации в лог-файл Из команд можно строить логические выражения, используя круглые скобки и операторы and, or, not. Можно создавать макросы вида:
friends = header /^Received$/ /^from [^ ]*(ork.net|home.com)/e
attachments = header ,^Content-Type$, ,multipart/mixed, and \
body ,^Content-Type: application/,
executables = $attachments and body ,name=".*.(pif|exe|scr)"$,e
====== Полный текст milter-regex.conf ======
# Проверка имени хоста
#-------------------------------------------------------
continue
connect `^localhost$`i `127\.0\.0\.1`
connect `=(/etc/mail/hosts-white)$`ie ``
reject "Your host name is invalid"
connect `\.in-addr\.arpa$`i ``
connect `\.`n `127\.0\.0\.1`n
tempfail "Your host IP address not resolving - check DNS, or send via SMTP server of your provider"
connect `\[.*]` ``
reject "Direct mail from your host is not permitted - send via SMTP server of your provider"
connect `[.-][[:digit:]]+[.-][[:digit:]]`ie ``
reject "Direct mail from your host is not permitted"
connect `=(/etc/mail/hosts-black)$`ie ``
# Все, что не от своих, должно иметь Message-Id.
reject "Invalid message format"
connect `=(/etc/mail/hosts-white)$`ien `` and \
not header `^Message-Id$`i `<.*>`
# Проверка получателя
#-------------------------------------------------------
reject "Adressee invalid"
envrcpt `<.*>`n
continue
*envrcpt ``ie
discard envrcpt `@cronyx\.ru>`i
continue # в домене www.cronyx.ru
*envrcpt ``i
*envrcpt ``i
discard envrcpt `@www\.cronyx\.ru>`i
continue # в домене vak.ru
*envrcpt ``i
discard envrcpt `@vak\.ru>`i
# Проверка отправителя
#-------------------------------------------------------
reject "Sender invalid"
envfrom `<.*>`in
envfrom `<<>@`
envfrom `<""@`
envfrom `?`
discard
envfrom `<[0-9]*@.*cronyx\.ru>`i
continue
envfrom ``i
envfrom ``i
envfrom ``i
discard
envfrom ``ie
envfrom `<=(/etc/mail/emails-black)>`ie
# Проверка пути письма - заголовки Received
#-------------------------------------------------------
continue
*header `^Received$`i `localhost *( *localhost *)`i
# Пропускаем эаголовок, если это не через знакомый сервер
*header `^Received$`i `by *=(/etc/mail/myrelays)[[:space:]]`ien
*header `^Received$`i `(localhost \[127\.0\.0\.1])`i
*header `^Received$`i `\( *=(/etc/mail/hosts-white) *\[`ie
*header `^Received$`i `\( *=(/etc/mail/hosts-white) *\)`ie
reject "Spam rejected"
*header `^Received$`i `\( *[[:alnum:]-]+ *\[`ie
*header `^Received$`i `\( *[[:alnum:].-]*=(/etc/mail/hosts-black) *\[`ie
tempfail "Your host IP address not resolving, check DNS"
*header `^Received$`i `( *[^)][^)]*) *( *\[.*] *)`i
*header `^Received$`i `( *\[.*])`i
*header `^Received$`i `(.*@ *\[.*])`i
# Проверка поля To
#-------------------------------------------------------
reject "Spam rejected"
*header `^To$`i `undisclosed-recipients`i
*header `^To$`i `unlisted-recipients`i
*header `^To$`i `^$`i