Imported Upstream version 1.16
This commit is contained in:
		
							parent
							
								
									2357dc9ae5
								
							
						
					
					
						commit
						a7ab4e32cf
					
				
					 5 changed files with 752 additions and 168 deletions
				
			
		| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32
 | 
			
		||||
.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
 | 
			
		||||
.\"
 | 
			
		||||
.\" Standard preamble:
 | 
			
		||||
.\" ========================================================================
 | 
			
		||||
| 
						 | 
				
			
			@ -128,8 +128,8 @@
 | 
			
		|||
.rm #[ #] #H #V #F C
 | 
			
		||||
.\" ========================================================================
 | 
			
		||||
.\"
 | 
			
		||||
.IX Title "MANUAL1 8"
 | 
			
		||||
.TH MANUAL1 8 "2009-06-27" "perl v5.8.8" "User Contributed Perl Documentation"
 | 
			
		||||
.IX Title "POSTFWD 1"
 | 
			
		||||
.TH POSTFWD 1 "2009-09-03" "perl v5.8.5" "User Contributed Perl Documentation"
 | 
			
		||||
.SH "NAME"
 | 
			
		||||
postfwd \- postfix firewall daemon
 | 
			
		||||
.SH "SYNOPSIS"
 | 
			
		||||
| 
						 | 
				
			
			@ -175,7 +175,7 @@ postfwd [\s-1OPTIONS\s0] [\s-1SOURCE1\s0, \s-1SOURCE2\s0, ...]
 | 
			
		|||
\&            --cleanup-rates         cleanup interval in seconds for rate cache
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 16
 | 
			
		||||
.Vb 17
 | 
			
		||||
\&        Optional:
 | 
			
		||||
\&        -t, --test                  testing, always returns "dunno"
 | 
			
		||||
\&        -v, --verbose               verbose logging, use twice (-vv) to increase level
 | 
			
		||||
| 
						 | 
				
			
			@ -192,6 +192,7 @@ postfwd [\s-1OPTIONS\s0] [\s-1SOURCE1\s0, \s-1SOURCE2\s0, ...]
 | 
			
		|||
\&            --dns_max_ns_lookups    max names to look up with sender_ns_addrs
 | 
			
		||||
\&            --dns_max_mx_lookups    max names to look up with sender_mx_addrs
 | 
			
		||||
\&        -I, --instantcfg            re-reads rulefiles for every new request
 | 
			
		||||
\&            --config_timeout <i>        parser timeout in seconds
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 7
 | 
			
		||||
| 
						 | 
				
			
			@ -261,13 +262,17 @@ is not important. So the following would lead to the same result as the previous
 | 
			
		|||
.PP
 | 
			
		||||
The way how request items are compared to the ruleset can be influenced in the following way:
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 7
 | 
			
		||||
.Vb 11
 | 
			
		||||
\&        ====================================================================
 | 
			
		||||
\&         ITEM==VALUE                  true if ITEM equals VALUE
 | 
			
		||||
\&         ITEM>=VALUE                  true if ITEM >= VALUE
 | 
			
		||||
\&         ITEM<=VALUE                  true if ITEM <= VALUE
 | 
			
		||||
\&         ITEM~=VALUE                  true if ITEM ~= /^VALUE$/i
 | 
			
		||||
\&         ITEM=VALUE                   default behaviour (see ITEMS section)
 | 
			
		||||
\&         ITEM == VALUE                true if ITEM equals VALUE
 | 
			
		||||
\&         ITEM => VALUE                true if ITEM >= VALUE
 | 
			
		||||
\&         ITEM =< VALUE                true if ITEM <= VALUE
 | 
			
		||||
\&         ITEM =~ VALUE                true if ITEM ~= /^VALUE$/i
 | 
			
		||||
\&         ITEM != VALUE                false if ITEM equals VALUE
 | 
			
		||||
\&         ITEM !> VALUE                false if ITEM >= VALUE
 | 
			
		||||
\&         ITEM !< VALUE                false if ITEM <= VALUE
 | 
			
		||||
\&         ITEM !~ VALUE                false if ITEM ~= /^VALUE$/i
 | 
			
		||||
\&         ITEM =  VALUE                default behaviour (see ITEMS section)
 | 
			
		||||
\&        ====================================================================
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
| 
						 | 
				
			
			@ -352,19 +357,25 @@ Rules can span multiple lines by adding a trailing backslash \*(L"\e\*(R" charac
 | 
			
		|||
\&        recipient_domain
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 2
 | 
			
		||||
.Vb 4
 | 
			
		||||
\&        helo_address            - postfwd tries to look up the helo_name. use
 | 
			
		||||
\&                                  helo_address=!!(0.0.0.0/0) to check for unknown.
 | 
			
		||||
\&                                  Please do not use this for positive access control
 | 
			
		||||
\&                                  (whitelisting), as it might be forged.
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 2
 | 
			
		||||
.Vb 4
 | 
			
		||||
\&        sender_ns_names,        - postfwd tries to look up the names/ip addresses
 | 
			
		||||
\&        sender_ns_addrs           of the nameservers for the sender domain part.
 | 
			
		||||
\&                                  Please do not use this for positive access control
 | 
			
		||||
\&                                  (whitelisting), as it might be forged.
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 2
 | 
			
		||||
.Vb 4
 | 
			
		||||
\&        sender_mx_names,        - postfwd tries to look up the names/ip addresses
 | 
			
		||||
\&        sender_mx_addrs           of the mx records for the sender domain part.
 | 
			
		||||
\&                                  Please do not use this for positive access control
 | 
			
		||||
\&                                  (whitelisting), as it might be forged.
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 6
 | 
			
		||||
| 
						 | 
				
			
			@ -464,6 +475,12 @@ Any item can be negated by preceeding '!!' to it, e.g.:
 | 
			
		|||
\&        id=TLS001 ;  hostname=!!^secure\e.trust\e.local$ ;  action=REJECT only secure.trust.local please
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
or using the right compare operator:
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 1
 | 
			
		||||
\&        id=USER01 ;  sasl_username !~ /^(bob|alice)$/ ;  action=REJECT who is that?
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
To avoid confusion with regexps or simply for better visibility you can use '!!(...)':
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 1
 | 
			
		||||
| 
						 | 
				
			
			@ -480,6 +497,122 @@ Request attributes can be compared by preceeding '$$' characters, e.g.:
 | 
			
		|||
.PP
 | 
			
		||||
This is only valid for \s-1PCRE\s0 values (see list above). The comparison will be performed as case insensitive exact match.
 | 
			
		||||
Use the '\-vv' option to debug.
 | 
			
		||||
.Sh "\s-1FILES\s0"
 | 
			
		||||
.IX Subsection "FILES"
 | 
			
		||||
Since postfwd1 v1.15 and postfwd2 v0.18 long item lists can be stored in separate files:
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 1
 | 
			
		||||
\&        id=R001 ;  ccert_fingerprint==file:/etc/postfwd/wl_ccerts ;  action=DUNNO
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
postfwd will read a list of items (one item per line) from /etc/postfwd/wl_ccerts. comments are allowed:
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 6
 | 
			
		||||
\&        # client1
 | 
			
		||||
\&        11:22:33:44:55:66:77:88:99
 | 
			
		||||
\&        # client2
 | 
			
		||||
\&        22:33:44:55:66:77:88:99:00
 | 
			
		||||
\&        # client3
 | 
			
		||||
\&        33:44:55:66:77:88:99:00:11
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
To use existing tables in key=value format, you can use:
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 1
 | 
			
		||||
\&        id=R001 ;  ccert_fingerprint==table:/etc/postfwd/wl_ccerts ;  action=DUNNO
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
This will ignore the right-hand value. Items can be mixed:
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 3
 | 
			
		||||
\&        id=R002 ;  action=REJECT \e
 | 
			
		||||
\&                client_name==unknown; \e
 | 
			
		||||
\&                client_name==file:/etc/postfwd/blacklisted
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
and for non pcre (comma separated) items:
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 2
 | 
			
		||||
\&        id=R003 ;  action=REJECT \e
 | 
			
		||||
\&                client_address==10.1.1.1, file:/etc/postfwd/blacklisted
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 2
 | 
			
		||||
\&        id=R004 ;  action=REJECT \e
 | 
			
		||||
\&                rbl=myrbl.home.local, zen.spamhaus.org, file:/etc/postfwd/rbls_changing
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
You can check your configuration with the \-\-show_config option at the command line:
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 1
 | 
			
		||||
\&        # postfwd --showconfig --rule='action=DUNNO; client_address=10.1.0.0/16, file:/etc/postfwd/wl_clients, 192.168.2.1'
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
should give something like:
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 1
 | 
			
		||||
\&        Rule   0: id->"R-0"; action->"DUNNO"; client_address->"=;10.1.0.0/16, =;194.123.86.10, =;186.4.6.12, =;192.168.2.1"
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
If a file can not be read, it will be ignored:
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 3
 | 
			
		||||
\&        # postfwd --showconfig --rule='action=DUNNO; client_address=10.1.0.0/16, file:/etc/postfwd/wl_clients, 192.168.2.1'
 | 
			
		||||
\&        [LOG warning]: error: file /etc/postfwd/wl_clients not found - file will be ignored ?
 | 
			
		||||
\&        Rule   0: id->"R-0"; action->"DUNNO"; client_address->"=;10.1.0.0/16, =;192.168.2.1"
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
File items are evaluated at configuration stage. Therefore postfwd needs to be reloaded if a file has changed.
 | 
			
		||||
.PP
 | 
			
		||||
If you want to specify a file, that will be reloaded for each request, you can use lfile: and ltable:
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 1
 | 
			
		||||
\&        id=R001; client_address=lfile:/etc/postfwd/client_whitelist; action=dunno
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
This will check the modification time of /etc/postfwd/client_whitelist every time the rule is evaluated and reload it as
 | 
			
		||||
necessary. Of course this might increase the system load, so please use it with care.
 | 
			
		||||
.PP
 | 
			
		||||
The \-\-showconfig option illustrates the difference:
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 3
 | 
			
		||||
\&        ## evaluated at configuration stage
 | 
			
		||||
\&        # postfwd2 --nodaemon -L --rule='client_address=table:/etc/postfwd/clients; action=dunno' -C
 | 
			
		||||
\&        Rule   0: id->"R-0"; action->"dunno"; client_address->"=;1.1.1.1, =;1.1.1.2, =;1.1.1.3"
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 3
 | 
			
		||||
\&        ## evaluated for any rulehit
 | 
			
		||||
\&        # postfwd2 --nodaemon -L --rule='client_address=ltable:/etc/postfwd/clients; action=dunno' -C
 | 
			
		||||
\&        Rule   0: id->"R-0"; action->"dunno"; client_address->"=;ltable:/etc/postfwd/clients"
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
Files can refer to other files. The following is valid.
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 2
 | 
			
		||||
\&        -- FILE /etc/postfwd/rules.cf --
 | 
			
		||||
\&        id=R001; client_address=file:/etc/postfwd/clients_master.cf; action=DUNNO
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 4
 | 
			
		||||
\&        -- FILE /etc/postfwd/clients_master.cf --
 | 
			
		||||
\&        192.168.1.0/24
 | 
			
		||||
\&        file:/etc/postfwd/clients_east.cf
 | 
			
		||||
\&        file:/etc/postfwd/clients_west.cf
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 2
 | 
			
		||||
\&        -- FILE /etc/postfwd/clients_east.cf --
 | 
			
		||||
\&        192.168.2.0/24
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 2
 | 
			
		||||
\&        -- FILE /etc/postfwd/clients_west.cf --
 | 
			
		||||
\&        192.168.3.0/24
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
Remind that there is currently no loop detection (/a/file calls /a/file) and that this feature is only available
 | 
			
		||||
with postfwd1 v1.15 and postfwd2 v0.18 and higher.
 | 
			
		||||
.Sh "\s-1ACTIONS\s0"
 | 
			
		||||
.IX Subsection "ACTIONS"
 | 
			
		||||
\&\fIGeneral\fR
 | 
			
		||||
| 
						 | 
				
			
			@ -562,16 +695,27 @@ postfwd actions control the behaviour of the program. Currently you can specify
 | 
			
		|||
\&              action==size($$client_address/1572864/3600/450 4.7.1 sorry, max 1.5mb per hour)
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 8
 | 
			
		||||
\&        rcpt (<item>/<max>/<time>/<action>)
 | 
			
		||||
\&        this command works similar to the rate() command with the difference, that the rate counter is
 | 
			
		||||
\&        increased by the request's recipient_count attribute. to do this reliably you should call postfwd
 | 
			
		||||
\&        from smtpd_data_restrictions or smtpd_end_of_data_restrictions. if you want to be sure, you could
 | 
			
		||||
\&        check it within the ruleset:
 | 
			
		||||
\&           # recipient count limit 3 per hour per client
 | 
			
		||||
\&           id=RCPT01 ;  state==END_OF_DATA ;  client_address==!!(10.1.1.1); \e
 | 
			
		||||
\&              action==rcpt($$client_address/3/3600/450 4.7.1 sorry, max 3 recipients per hour)
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 9
 | 
			
		||||
\&        ask (<addr>:<port>[:<ignore>])
 | 
			
		||||
\&        allows to delegate the policy decision to another policy service (e.g. postgrey). the first
 | 
			
		||||
\&        and the second argument (address and port) are mandatory. a third optional argument may be
 | 
			
		||||
\&        specified to tell postfwd to ignore certain answers and go on parsing the ruleset:
 | 
			
		||||
\&           # example1: query postgrey and return it's answer to postfix
 | 
			
		||||
\&           id=GREY; client_address==10.1.1.1; ask(127.0.0.1:10031)
 | 
			
		||||
\&           id=GREY; client_address==10.1.1.1; action=ask(127.0.0.1:10031)
 | 
			
		||||
\&           # example2: query postgrey but ignore it's answer, if it matches 'DUNNO'
 | 
			
		||||
\&           # and continue parsing postfwd's ruleset
 | 
			
		||||
\&           id=GREY; client_address==10.1.1.1; ask(127.0.0.1:10031:^dunno$)
 | 
			
		||||
\&           id=GREY; client_address==10.1.1.1; action=ask(127.0.0.1:10031:^dunno$)
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 3
 | 
			
		||||
| 
						 | 
				
			
			@ -962,6 +1106,12 @@ These parameters influence the way postfwd is working. Any of them can be combin
 | 
			
		|||
\&        significantly increase system load.
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
.Vb 3
 | 
			
		||||
\&        --config_timeout    (default=3)
 | 
			
		||||
\&        timeout in seconds to parse a single configuration line. if exceeded, the rule will
 | 
			
		||||
\&        be skipped. this is used to prevent problems due to large files or loops.
 | 
			
		||||
.Ve
 | 
			
		||||
.PP
 | 
			
		||||
\&\fIInformational arguments\fR
 | 
			
		||||
.PP
 | 
			
		||||
These arguments are for command line usage only. Never ever use them with postfix spawn!
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue