1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
.TH IPPOOL 5
.SH NAME
ippool, ippool.conf \- IP Pool file format
.SH DESCRIPTION
The format for files accepted by ippool is described by the following grammar:
.LP
.nf
line ::= table | groupmap .
table ::= "table" role tabletype .
groupmap ::= "group-map" inout role number ipfgroup
tabletype ::= ipftree | ipfhash .
role ::= "role" "=" "ipf" .
inout ::= "in" | "out" .
ipftree ::= "type" "=" "tree" number "{" addrlist "}" .
ipfhash ::= "type" "=" "hash" number hashopts "{" hashlist "}" .
ipfgroup ::= setgroup hashopts "{" grouplist "}" |
hashopts "{" setgrouplist "}" .
setgroup ::= "group" "=" groupname .
hashopts ::= size [ seed ] | seed .
size ::= "size" number .
seed ::= "seed" number .
addrlist ::= [ "!" ] addrmask ";" [ addrlist ] .
grouplist ::= groupentry ";" [ grouplist ] | addrmask ";" [ grouplist ] .
setgrouplist ::= groupentry ";" [ setgrouplist ] .
groupentry ::= addrmask "," setgroup .
hashlist ::= hashentry ";" [ hashlist ] .
hashentry ::= addrmask .
addrmask ::= ipaddr | ipaddr "/" mask .
mask ::= number | ipaddr .
groupname ::= number | name .
number ::= digit { digit } .
ipaddr = host-num "." host-num "." host-num "." host-num .
host-num = digit [ digit [ digit ] ] .
digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" .
name ::= letter { letter | digit } .
.fi
.PP
The IP pool configuration file is used for defining a single object that
contains a reference to multiple IP address/netmask pairs. A pool may consist
of a mixture of netmask sizes, from 0 to 32.
.PP
At this point in time, only IPv4 addressing is supported.
.TP
.SH OVERVIEW
.PP
The IP pool configuration file provides for defining two different mechanisms
for improving speed in matching IP addresses with rules.
The first,
.B table
, defines a lookup
.I table
to provide a single reference in a
filter rule to multiple targets and the second,
.B group-map
, provides a mechanism to target multiple groups from a single filter line.
.PP
The
.B group-map
command can only be used with filter rules that use the
.B call
command to invoke either
.B fr_srcgrpmap
or
.B fr_dstgrpmap
, to use the source or destination address,
respectively, for determining which filter group to jump to next for
continuation of filter packet processing.
.SH POOL TYPES
.PP
Two storage formats are provided: hash tables and tree structure. The hash
table is intended for use with objects all containing the same netmask or a
few different sized netmasks of non-overlapping address space and the tree
is designed for being able to support exceptions to a covering mask, in
addition to normal searching as you would do with a table. It is not possible
to use the tree data storage type with
.B group-map
configuration entries.
.SH POOL ROLES
.PP
When a pool is defined in the configruation file, it must have an associated
role. At present the only supported role is
.B ipf.
Future development will see futher expansion of their use by other sections
of IPFilter code.
.SH EXAMPLES
The following examples show how the pool configuration file is used with
the ipf configuration file to enhance the ability for the ipf configuration
file to be succinct in meaning.
.TP
1
The first example shows how a filter rule makes reference to a specific
pool for matching of the source address.
.nf
pass in from pool/100 to any
.fi
.PP
The pool configuration, which matches IP addresses 1.1.1.1 and any
in 2.2.0.0/16, except for those in 2.2.2.0/24.
.PP
.nf
table role = ipf type = tree number = 100
{ 1.1.1.1/32; 2.2.0.0/16; !2.2.2.0/24 };
.fi
.TP
2
The following ipf.conf extract uses the
fr_srcgrpmap/fr_dstgrpmap lookups to use the
.B group-map
facility to lookup the next group to use for filter processing, providing
the
.B call
filter rule is matched.
.nf
call now fr_srcgrpmap/1010 in all
call now fr_dstgrpmap/2010 out all
pass in all group 1020
block in all group 1030
pass out all group 2020
block out all group 2040
.fi
.PP
A ippool configuration to work with the above ipf.conf file might
look like this:
.PP
.nf
group-map in role = ipf number = 1010
{ 1.1.1.1/32, group = 1020; 3.3.0.0/16, group = 1030; };
group-map out role = ipf number = 2010 group = 2020
{ 2.2.2.2/32; 4.4.0.0/16; 5.0.0.0/8, group = 2040; };
.fi
.SH FILES
/dev/iplookup
.br
/etc/ippool.conf
.br
/etc/hosts
.SH SEE ALSO
ippool(8), hosts(5), ipf(5), ipf(8), ipnat(8)
|