Допускаются действия пяти видов. Ответ представляет собой текстовую строку и задается в двойных или одинарных кавычках:
reject "Ответ" команда ... tempfail "Ответ" команда ... continue команда ... discard команда ... accept команда ...
Команды соответствуют командам протокола SNMP:
Шаблон - это регулярное выражение в произвольных разделителях плюс необязательный флаг:
Из команд можно строить логические выражения, используя круглые скобки и операторы 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
# Проверка имени хоста #------------------------------------------------------- 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 `<postmaster@`i *envrcpt `<MAILER-DAEMON@`i continue # в домене cronyx.ru *envrcpt `<=(/etc/mail/users)@cronyx\.ru>`ie discard envrcpt `@cronyx\.ru>`i continue # в домене www.cronyx.ru *envrcpt `<www-adm@www\.cronyx\.ru>`i *envrcpt `<info-adm@www\.cronyx\.ru>`i discard envrcpt `@www\.cronyx\.ru>`i continue # в домене vak.ru *envrcpt `<vak@vak\.ru>`i discard envrcpt `@vak\.ru>`i # Проверка отправителя #------------------------------------------------------- reject "Sender invalid" envfrom `<.*>`in envfrom `<<>@` envfrom `<""@` envfrom `?` discard envfrom `<[0-9]*@.*cronyx\.ru>`i continue envfrom `<MAILER-DAEMON@hanoi\.cronyx\.ru>`i envfrom `<antivirus-notify@hanoi\.cronyx\.ru>`i envfrom `<delivery@bill\.mts\.ru>`i discard envfrom `<anonymous@`i envfrom `<bounce@`i envfrom `<bounces@`i envfrom `<reklama@`i envfrom `@bounce\.`i envfrom `\.@`i reject "Spam rejected" envfrom `[@.]=(/etc/mail/emails-black)>`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