No - I'm not an answering script ...
Group: Admin
Posts: 6631
Member No.: 195
Joined: 19-June 02
|
One of XMail's ost powerful features are filters. To make things more clear, here the mail flow schemata, when and how messages are filtered:
Receiving or sending mail via SMTP: - During SMTP conversation: filters.pre-data.tab - Before ending the SMTP dialog: filters.post-data.tab - Now the mail's envelope is removed and the spoolfile is generated. - If the mail contains multiple RCPT_TO or CC and BCC recipients, further spoolfiles are generated for each recipient .
Those spoolfiles take the following routes now: - If the recipient is local, it runs through filters.in.tab - Otherwise, it travels through filters.out.tab
Receiving mail via pop3links.tab: - These mails go directly through filters.in.tab
Sending mail vial local mailer /spool/local: - Depending on the recipient, these mails go through filters.in.tab (local) or filters.out.tab (external)
For more details about filters read these 2 sections in the manual:
QUOTE | SMTP MESSAGE FILTERS
Besides having the ability to perform off-line message filtering, XMail gives the user the power to run filters during the SMTP session. Two files drive the SMTP on-line filtering, and these are 'FILTERS.PRE-DATA.TAB' and 'FILTERS.POST-DATA.TAB'. The file 'FILTERS.PRE-DATA.TAB' contains one or more commands to be executed after the remote SMTP client sends the DATA command, and before XMail sends the response to the command. Using such filters, the user can tell XMail if or if not accept the following DATA transaction and, in case of rejection, the user is also allowed to specify a custom message to be sent to the remote SMTP client. The file 'FILTERS.POST-DATA.TAB' contains one or more commands to be executed after XMail received the whole client DATA, and before XMail sends the final response to the DATA command (final messages ack). The files 'FILTERS.PRE-DATA.TAB' and 'FILTERS.POST-DATA.TAB' conatins zero or more lines with the following format:
"command"[TAB]"arg-or-macro"[TAB]...[NEWLINE]
Each file may contain multiple commands, that will be executed in strictly sequential order. The first command that will trigger a rejection code will make the filtering process to end. Each argument can be a macro also:
@@FILE message file path
@@USERAUTH name of the SMTP authenticated user, or "-" if not authentication has been granted
@@REMOTEADDR remote IP address and port of the sender
@@LOCALADDR local IP address and port where the message has been accepted
Filter commands have the ability to inspect and modify the content of the message (or info) file. The exit code of commands executed by XMail are used to tell XMail the action that has to be performed as a cosequence of the filter. The exit code is composed by a raw exit code and additional flags. Currently defined flags are:
'16' Stop selected filter list processing.
Currently defined raw exit codes are:
'3' Reject the message.
Any other exit codes will make XMail to accept the message, and can be used also when changing the content of the @@FILE file. 'EXTREME' care must be used when changing the @@FILE file, since XMail expect the file format to be correct. Also, it is important to preserve the <CR><LF> line termination of the file itself. When rejecting the message, the filter command has the ability to specify the SMTP status code that XMail will send to the remote SMTP client, by creating a file named @@FILE.rej containing the message in the very first line. Such file will be automatically removed by XMail. The data passed to filter commands inside @@FILE varies depending if the command is listed inside 'FILTERS.PRE-DATA.TAB' or inside 'FILTERS.POST-DATA.TAB'. Commands listed inside 'FILTERS.PRE-DATA.TAB' will receive the following data stored inside @@FILE:
Info Data [ 1th line ] SmtpDomain [ 2nd line ] SmtpMessageID [ 3rd line ] MAIL FROM:<...> [ 4th line ] RCPT TO:<...> {...} [ 5th line ] ...
The file can have one or more "RCPT TO" lines. The format of the "Info Data" line is:
ClientDomain;ClientIP;ClientPort;ServerDomain;ServerIP;ServerPort;Time;Logo
Commands listed inside 'FILTERS.POST-DATA.TAB' will receive the following data stored inside @@FILE:
Info Data [ 1th line ] SmtpDomain [ 2nd line ] SmtpMessageID [ 3rd line ] MAIL FROM:<...> [ 4th line ] RCPT TO:<...> {...} [ 5th line ] ... <<MAIL-DATA>> ...
After the '<<MAIL-DATA>>' tag the message follows. The message is composed of a headers section and, after the first empty line, the message body. The format of the RCPT line is:
RCPT TO:<address> {ra=real-address}
where "real-address" is the "address" after it has been translated (if aliases applies) to the real local address. Otherwise it holds the same value of "address".
|
QUOTE | MESSAGE FILTERS
This feature offers a way to filter messages by providing the ability to execute external programs, such as scripts or real executables. These 'filters' may examine and/or modify messages and inform XMail of their actions with a return value.
This feature offers the ability to inspect and modify messages, giving a way to reject messages based on content, alter messages (address rewriting) and so on.
If this filters returns '4, 5 or 6' the message is rejected and is stopped in its travel. If the filter modifies the message it must return '7'.
Additional flags are allowed to be returned to XMail as a result of filter processing by adding the flags value to the exits code above listed. The currently defined flags are :
'16' Stop selected filter list processing.
Filter flags are additive and if more than one flag need to be specified, their values must be added together. If a filter "raw" exit code is RC and the filter needs to return extra flags FILTER-SUM, the final return code FRC must be :
FRC = RC + FILTER-SUM
Example. Suppose a filter modified the message and hence needs to return 7 as return code. Suppose also that a filter wants to block the filter selection list processing by specifying a flags value of 16, the value to be returned will be :
FRC = 7 + 16 = 23
Filter selection is driven by two files 'FILTERS.IN.TAB' and 'FILTERS.OUT.TAB' located inside the $MAIL_ROOT/ directory and that have the following format:
"sender"[TAB]"recipient"[TAB]"remote-addr"[TAB]"local-addr"[TAB]"filename"[NEWLINE]
For example:
"*@bad-domain.com" "*" "0.0.0.0/0" "0.0.0.0/0" "av-filter.tab" "*" "clean@purified.net" "0.0.0.0/0" "0.0.0.0/0" "spam-block.tab" "*" "*" "192.168.1.0/24" "0.0.0.0/0" "archive.tab"
where the file "av-filter.tab" must be present inside the $MAIL_ROOT/filters directory. The "sender" and the "recipient" are resolved to the real account when possible. Address selection mask are formed by an IP address (network) plus the number of valid bits inside the network mask. The file 'FILTERS.IN.TAB' lists filters that have to be applied to inbound messages (going to local mailboxes) while the file 'FILTERS.OUT.TAB' lists filters that have to be applied to outbound messages (delivered remotely). All four (sender+recipient+remote-addr+local-addr) selection fields must have a match in order "filename" to be evaluated. The syntax of the filter file is:
"command"[TAB]"arg-or-macro"[TAB]...[NEWLINE]
Each file may contain multiple commands, that will be executed in strictly sequential order. The first command that will trigger a rejection code will make the filtering process to end. Each argument can be a macro also:
@@FROM the sender of the message
@@RFROM the sender of the message resolved to the real account, when possible (alias resolution)
@@RCPT the target of the message
@@RRCPT the target of the message resolved to the real account, when possible (alias resolution)
@@REMOTEADDR remote IP address and port of the sender
@@LOCALADDR local IP address and port where the message has been accepted
@@FILE the message file path (the external command may modify the file if it returns '7' as command exit value.)
@@MSGID with the (XMail unique) message id
@@MSGREF the reference SMTP message id
Here 'command' is the name of an external program that processes the message and returns its processing result. If it returns '6' the message is rejected and a notification message is sent to the sender. By returning '5' the message is rejected without notification. While returning '4' the message is rejected without notification and without being frozen (a '5' response could lead to a frozen message if the "SERVER.TAB" configuration enables this). If all filters return values different from '6, 5 and 4' the message continues its trip. The filter command may also modify the file (AV scanning, content filter, message rewriting, etc) by returning '7'. The filter 'MUST' return '7' in case it modifies the message. If the filter changes the message file it 'MUST' keep the message structure and it 'MUST' terminate all line with <CR><LF>. The filter has also the ability to return a one-line custom return message by creating a file named @@FILE.rej holding the message in the very first line. This file should be created 'ONLY' when the filter returns a rejection code ('6, 5 and 4')and 'NEVER' in case of passthru code ('7') or modify code.
The spool files has this structure:
Info Data [ 1th line ] SmtpDomain [ 2nd line ] SmtpMessageID [ 3rd line ] MAIL FROM:<...> [ 4th line ] RCPT TO:<...> [ 5th line ] <<MAIL-DATA>> [ 6th line ] ...
After the '<<MAIL-DATA>>' tag (5th line) the message follows. The message is composed of a headers section and, after the first empty line, the message body. The format of the "Info Data" line is:
ClientDomain;ClientIP;ClientPort;ServerDomain;ServerIP;ServerPort;Time;Logo
'EXTREME' care must be used when modifying the message because the filter will be working on the real message, and a badly reformatted file will lead to message loss. The spool file header (any data before <<MAIL-DATA>>) 'MUST' be preserved as is by the filter in case of message rewrite happens.
|
--------------------
|