![]() |
![]()
| ![]() |
![]()
NAME
SYNOPSIS
DESCRIPTIONThe The options are as follows:
SENDMAIL CONFIGURATIONThe plugin needs to be registered in the sendmail(8) configuration, by adding the following lines to the .mc file INPUT_MAIL_FILTER(`milter-regex', `S=unix:/var/run/milter-regex/sock, T=S:30s;R:2m') rebuilding /etc/mail/sendmail.cf from the .mc file using m4(1), and restarting sendmail(8). PLUGIN CONFIGURATIONThe configuration file consists of rules that, when matched, cause sendmail(8) to reject mails. Emtpy lines and lines starting with # are ignored, as well as leading whitespace (blanks, tabs). Trailing backslashes can be used to wrap long rules into multiple lines. Each rule starts with one of the following commands:
A command is followed by one or more expressions, each causing the previous command to be executed when matched. The following expressions can be used:
The plugin regularly checks the configuration file for modification and reloads it automatically. Signals like SIGHUP will terminate the plugin, according to the milter signal handler. The plugin reacts to any kind of error, like syntax errors in the configuration file, by failing open, accepting all messages. When the plugin is not running, sendmail(8) will accept all messages. REGULAR EXPRESSIONSThe regular expressions used in the configuration rules are enclosed in arbitrary delimiters, no further escaping is needed. The first character of an argument is taken as the delimiter, and all subsequent characters up to the next occurance of the same delimiter are taken literally as the regular expression. Since the delimiter itself cannot be part of the regular expression (no escaping is supported), a delimiter must be chosen that doesn't occur in the regular expression itself. Each argument can use a different delimiter, all characters except spaces and tabs are valid. Two immediately adjacent delimiters form an empty regular expression, which always matches and requires no regexec(3) call. This can be used in rules requiring multiple arguments, to match only some arguments. See re_format(7) for a detailed description of basic and extended regular expressions. Optionally, the following flags can be used after the closing delimiter:
BOOLEAN EXPRESSIONSA rule can consist of either a simple term or more complex expressions. A term has the form header /From/ /domain/i and expressions can be built combining terms with operators "and", "or", "not" and parentheses, as in header /From/ /domain/i and body /money/ ( not header /From/ /domain/ ) and ( body /sex/ or body /fast/ ) Operator precedence should not be relied on, instead parentheses should be used to resolve any ambiguities (they usually produce syntax errors from the parser). MACROSMacros allow to store terms or expressions as a name, and $name can be used as term within other rules, expressions or macro definitions. Example: 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 reject "executable attachment from non-friends" $executables and not $friends Macro names must begin with a letter and may contain alphanumeric characters and punctuation characters. Reserved keywords (like "reject" or "header") cannot be used as macro names. Macros must be defined before use, the definition must precede the use in the configuration file, read from top to bottom. EVALUATIONRules are evaluated in the order specified in the configuration file, from top to bottom. When a rule matches, the corresponding action is taken, that is the last action specified before the matching rule. The plugin evaluates the rules every time a line of mail (or envelope) is received. As soon as a rule matches, the action is taken immediately, possibly before the entire mail is received, even if further lines might possibly make other rules match, too. This means the first rule matching chronologically has precedence. If evaluation for a line of mail makes two (or more) rules match, the rule that comes first in the configuration file has precedence. Boolean expressions are short-circuit evaluated, that means "a or b" becomes true as soon as one of the terms is true and "a and b" becomes false as soon as one of the terms is false, even if the other term is not known, possibly because the relevant mail line has not been received yet. EXAMPLES# /usr/local/etc/milter-regex.conf example # Accept anything encrypted, just to demonstrate sendmail macros accept macro /tls_version/ /TLSv/ tempfail "Sender IP address not resolving" connect /\[.*\]/ // reject "Malformed HELO (not a domain, no dot)" helo /\./n reject "Malformed RCPT TO (not an email address, not <.*@.*>)" envrcpt /<(.*@.*|Postmaster)>/ein reject "HTML mail not accepted" # use comma as delimiter here, as / occurs within RE header /^Content-type$/i ,^text/html,i body ,^Content-type: text/html,i # Swen worm discard header /^(TO|FROM|SUBJECT)$/e // header /^Content-type$/i /boundary="Boundary_(ID_/i header /^Content-type$/i /boundary="[a-z]*"/ body ,^Content-type: audio/x-wav; name="[a-z]*\.[a-z]*",i # Some nasty spammer reject "Business Corp spam, get lost" body /^Business Corp. for W.& L. AG/i and \ ( body /043.*317.*0285/ or body /0041.43.317.02.85/ ) LOGGING
!milter-regex daemon.err;daemon.notice /var/log/milter-regex GRAMMARSyntax for file = ( rule | macro ) file rule = action expr-list action = "reject" msg | "tempfail" msg | "discard" | "quarantine" msg | "accept" msg = ( '"' | "'" ) string ( '"' | "'" ) expr-list = expr [ expr-list ] expr = term | term "and" expr | term "or" expr | "not" term term = '(' expr ')' | "connect" arg arg | "helo" arg | "envfrom" arg | "envrcpt" arg | "header" arg arg | "body" arg | "macro" arg arg | '$' name arg = del regex del flags del = '/' | ',' | '-' | ... flags = [ 'e' ] [ 'i' ] [ 'n' ] macro = name '=' expr FILES/usr/local/etc/milter-regex.conf SEE ALSOmailstats(8), regex(3), syslog(3), syslog.conf(5), re_format(7), sendmail(8), syslogd(8) Simple Mail Transfer Protocol, RFC 2821. Enhanced Mail System Status Codes, RFC 1893. HISTORYThe first version of AUTHORSDaniel Hartmeier ⟨daniel@benzedrine.cx⟩
|