====== Конфигурация 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