Конфигурация 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 `<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
 
proj/sendmail/milter-regex.txt · Последние изменения: 2007/05/19 07:19
 
Copyright (C) 1996-2013 Serge Vakulenko
serge@vak.ru