1IPSET(8)                                                              IPSET(8)
2
3
4

NAME

6       ipset — administration tool for IP sets
7

SYNOPSIS

9       ipset [ OPTIONS ] COMMAND [ COMMAND-OPTIONS ]
10
11       COMMANDS  :=  {  create  |  add  | del | test | destroy | list | save |
12       restore | flush | rename | swap | help | version | - }
13
14       OPTIONS := { -exist | -output { plain  |  save  |  xml  }  |  -quiet  |
15       -resolve | -sorted | -name | -terse | -file filename }
16
17       ipset create SETNAME TYPENAME [ CREATE-OPTIONS ]
18
19       ipset add SETNAME ADD-ENTRY [ ADD-OPTIONS ]
20
21       ipset del SETNAME DEL-ENTRY [ DEL-OPTIONS ]
22
23       ipset test SETNAME TEST-ENTRY [ TEST-OPTIONS ]
24
25       ipset destroy [ SETNAME ]
26
27       ipset list [ SETNAME ]
28
29       ipset save [ SETNAME ]
30
31       ipset restore
32
33       ipset flush [ SETNAME ]
34
35       ipset rename SETNAME-FROM SETNAME-TO
36
37       ipset swap SETNAME-FROM SETNAME-TO
38
39       ipset help [ TYPENAME ]
40
41       ipset version
42
43       ipset -
44

DESCRIPTION

46       ipset  is used to set up, maintain and inspect so called IP sets in the
47       Linux kernel. Depending on the type of the set, an  IP  set  may  store
48       IP(v4/v6)  addresses, (TCP/UDP) port numbers, IP and MAC address pairs,
49       IP address and port number pairs, etc. See  the  set  type  definitions
50       below.
51
52       Iptables matches and targets referring to sets create references, which
53       protect the given sets in the kernel. A set cannot be  destroyed  while
54       there is a single reference pointing to it.
55

OPTIONS

57       The  options  that  are recognized by ipset can be divided into several
58       different groups.
59
60   COMMANDS
61       These options specify the desired action to perform.  Only one of  them
62       can  be specified on the command line unless otherwise specified below.
63       For all the long versions of the command names, you need  to  use  only
64       enough letters to ensure that ipset can differentiate it from all other
65       commands. The ipset parser follows the order here when looking for  the
66       shortest match in the long command names.
67
68       n, create SETNAME TYPENAME [ CREATE-OPTIONS ]
69              Create  a  set  identified  with setname and specified type. The
70              type may require type specific options. If the -exist option  is
71              specified,  ipset  ignores  the  error otherwise raised when the
72              same set (setname and create parameters are  identical)  already
73              exists.
74
75       add SETNAME ADD-ENTRY [ ADD-OPTIONS ]
76              Add a given entry to the set. If the -exist option is specified,
77              ipset ignores if the entry already added to the set.
78
79       del SETNAME DEL-ENTRY [ DEL-OPTIONS ]
80              Delete an entry from a set. If the -exist  option  is  specified
81              and  the  entry  is not in the set (maybe already expired), then
82              the command is ignored.
83
84       test SETNAME TEST-ENTRY [ TEST-OPTIONS ]
85              Test whether an entry is in a set or not. Exit status number  is
86              zero  if  the  tested  entry  is in the set and nonzero if it is
87              missing from the set.
88
89       x, destroy [ SETNAME ]
90              Destroy the specified set or all the sets if none is given.
91
92              If the set has got reference(s), nothing  is  done  and  no  set
93              destroyed.
94
95       list [ SETNAME ] [ OPTIONS ]
96              List  the  header data and the entries for the specified set, or
97              for all sets if none is given. The -resolve option can  be  used
98              to  force  name  lookups  (which  may be slow). When the -sorted
99              option is given, the entries are listed/saved sorted (which  may
100              be  slow).  The option -output can be used to control the format
101              of the listing: plain, save or xml.  (The default is plain.)  If
102              the  option  -name  is specified, just the names of the existing
103              sets are listed. If the option -terse is specified, just the set
104              names  and  headers are listed. The output is printed to stdout,
105              the option -file can be used to specify a  filename  instead  of
106              stdout.
107
108       save [ SETNAME ]
109              Save  the given set, or all sets if none is given to stdout in a
110              format that restore can read. The option -file can  be  used  to
111              specify a filename instead of stdout.
112
113       restore
114              Restore  a  saved  session generated by save.  The saved session
115              can be fed from stdin or the option -file can be used to specify
116              a filename instead of stdin.
117
118              Please  note,  existing  sets  and  elements  are  not erased by
119              restore unless specified so in the restore  file.  All  commands
120              are allowed in restore mode except list, help, version, interac‐
121              tive mode and restore itself.
122
123       flush [ SETNAME ]
124              Flush all entries from the specified set or flush  all  sets  if
125              none is given.
126
127       e, rename SETNAME-FROM SETNAME-TO
128              Rename a set. Set identified by SETNAME-TO must not exist.
129
130       w, swap SETNAME-FROM SETNAME-TO
131              Swap  the content of two sets, or in another words, exchange the
132              name of two sets. The referred sets must  exist  and  compatible
133              type of sets can be swapped only.
134
135       help [ TYPENAME ]
136              Print help and set type specific help if TYPENAME is specified.
137
138       version
139              Print program version.
140
141       -      If  a  dash  is specified as command, then ipset enters a simple
142              interactive mode and the commands are  read  from  the  standard
143              input.   The  interactive  mode  can be finished by entering the
144              pseudo-command quit.
145
146   OTHER OPTIONS
147       The following additional options can  be  specified.  The  long  option
148       names cannot be abbreviated.
149
150       -!, -exist
151              Ignore  errors  when  exactly  the  same set is to be created or
152              already added entry is added or missing entry is deleted.
153
154       -o, -output { plain | save | xml }
155              Select the output format to the list command.
156
157       -q, -quiet
158              Suppress any output to stdout and stderr.  ipset will still exit
159              with error if it cannot continue.
160
161       -r, -resolve
162              When  listing sets, enforce name lookup. The program will try to
163              display the IP entries resolved to  host  names  which  requires
164              slow DNS lookups.
165
166       -s, -sorted
167              Sorted  output.  When  listing  or  saving sets, the entries are
168              listed sorted.
169
170       -n, -name
171              List just the names of the existing sets, i.e. suppress  listing
172              of set headers and members.
173
174       -t, -terse
175              List  the  set  names  and headers, i.e. suppress listing of set
176              members.
177
178       -f, -file filename
179              Specify a filename to print into instead of stdout (list or save
180              commands) or read from instead of stdin (restore command).
181

INTRODUCTION

183       A  set type comprises of the storage method by which the data is stored
184       and the data type(s) which are stored in the set. Therefore  the  TYPE‐
185       NAME parameter of the create command follows the syntax
186
187       TYPENAME := method:datatype[,datatype[,datatype]]
188
189       where  the  current  list of the methods are bitmap, hash, and list and
190       the possible data types are ip, net, mac, port and iface.   The  dimen‐
191       sion of a set is equal to the number of data types in its type name.
192
193       When adding, deleting or testing entries in a set, the same comma sepa‐
194       rated data syntax must be used for the entry parameter of the commands,
195       i.e
196
197              ipset add foo ipaddr,portnum,ipaddr
198
199       If  host  names or service names with dash in the name are used instead
200       of IP addresses or service numbers, then the host name or service  name
201       must be enclosed in square brackets. Example:
202
203              ipset add foo [test-hostname],[ftp-data]
204
205       In  the  case  of  host  names the DNS resolver is called internally by
206       ipset but if it returns multiple IP addresses, only the  first  one  is
207       used.
208
209       The bitmap and list types use a fixed sized storage. The hash types use
210       a hash to store the elements. In order to avoid clashes in the hash,  a
211       limited  number  of chaining, and if that is exhausted, the doubling of
212       the hash size is performed when adding entries by  the  ipset  command.
213       When  entries  added  by the SET target of iptables/ip6tables, then the
214       hash size is fixed and the set won't be duplicated,  even  if  the  new
215       entry cannot be added to the set.
216

GENERIC CREATE AND ADD OPTIONS

218   timeout
219       All  set  types supports the optional timeout parameter when creating a
220       set and adding entries. The value of the timeout parameter for the cre‐
221       ate  command  means  the  default  timeout  value  (in seconds) for new
222       entries. If a set is created with timeout support, then the same  time‐
223       out  option  can  be  used  to  specify non-default timeout values when
224       adding entries. Zero timeout value means the entry is  added  permanent
225       to the set.  The timeout value of already added elements can be changed
226       by re-adding the element using the -exist option. The largest  possible
227       timeout value is 2147483 (in seconds). Example:
228
229              ipset create test hash:ip timeout 300
230
231              ipset add test 192.168.0.1 timeout 60
232
233              ipset -exist add test 192.168.0.1 timeout 600
234
235       When listing the set, the number of entries printed in the header might
236       be larger than the listed number of entries for sets with  the  timeout
237       extensions:  the  number of entries in the set is updated when elements
238       added/deleted to the set and periodically when  the  garbage  collector
239       evicts the timed out entries.
240
241   counters, packets, bytes
242       All set types support the optional counters option when creating a set.
243       If the option is specified then the set is created with packet and byte
244       counters per element support. The packet and byte counters are initial‐
245       ized to zero when the elements are (re-)added to the  set,  unless  the
246       packet  and byte counter values are explicitly specified by the packets
247       and bytes options. An example when an element is added to  a  set  with
248       non-zero counter values:
249
250              ipset create foo hash:ip counters
251
252              ipset add foo 192.168.1.1 packets 42 bytes 1024
253
254   comment
255       All  set  types  support the optional comment extension.  Enabling this
256       extension on an ipset enables you to annotate an ipset  entry  with  an
257       arbitrary  string. This string is completely ignored by both the kernel
258       and ipset itself and is purely for providing a convenient means to doc‐
259       ument  the  reason  for an entry's existence. Comments must not contain
260       any quotation marks and the usual escape character (\) has no  meaning.
261       For example, the following shell command is illegal:
262
263              ipset add foo 1.1.1.1 comment "this comment is \"bad\""
264
265       In  the above, your shell will of course escape the quotation marks and
266       ipset will see the quote marks in the argument for the  comment,  which
267       will  result in a parse error.  If you are writing your own system, you
268       should avoid creating comments containing a quotation mark  if  you  do
269       not  want  to  break "ipset save" and "ipset restore", nonetheless, the
270       kernel will not stop you from doing  so.  The  following  is  perfectly
271       acceptable:
272
273              ipset create foo hash:ip comment
274
275              ipset  add foo 192.168.1.1/24 comment "allow access to SMB share
276              on \\\\fileserv\\"
277
278              the above would appear as: "allow access to SMB share on \\file‐
279              serv\"
280
281   skbinfo, skbmark, skbprio, skbqueue
282       All  set  types  support the optional skbinfo extension. This extension
283       allows you to store the metainfo (firewall mark, tc class and  hardware
284       queue) with every entry and map it to packets by usage of SET netfilter
285       target  with  --map-set  option.   skbmark  option  format:   MARK   or
286       MARK/MASK, where MARK and MASK are 32bit hex numbers with 0x prefix. If
287       only mark is specified mask 0xffffffff are used.  skbprio option has tc
288       class  format: MAJOR:MINOR, where major and minor numbers are hex with‐
289       out 0x prefix.  skbqueue option is just decimal number.
290
291              ipset create foo hash:ip skbinfo
292
293              ipset add foo skbmark 0x1111/0xff00ffff skbprio 1:10 skbqueue 10
294
295   hashsize
296       This parameter is valid for the create command of all hash  type  sets.
297       It defines the initial hash size for the set, default is 1024. The hash
298       size must be a power of two, the kernel  automatically  rounds  up  non
299       power of two hash sizes to the first correct value.  Example:
300
301              ipset create test hash:ip hashsize 1536
302
303   maxelem
304       This  parameter  is valid for the create command of all hash type sets.
305       It does define the maximal number of elements which can  be  stored  in
306       the set, default 65536.  Example:
307
308              ipset create test hash:ip maxelem 2048.
309
310   family { inet | inet6 }
311       This  parameter  is  valid for the create command of all hash type sets
312       except for  hash:mac.   It  defines  the  protocol  family  of  the  IP
313       addresses  to be stored in the set. The default is inet, i.e IPv4.  For
314       the inet family one can add or delete multiple entries by specifying  a
315       range  or  a  network  of  IPv4 addresses in the IP address part of the
316       entry:
317
318       ipaddr := { ip | fromaddr-toaddr | ip/cidr }
319
320       netaddr := { fromaddr-toaddr | ip/cidr }
321
322       Example:
323
324              ipset create test hash:ip family inet6
325
326   nomatch
327       The hash set types which can store net type of data  (i.e.  hash:*net*)
328       support  the optional nomatch option when adding entries. When matching
329       elements in the set, entries marked as nomatch are skipped as if  those
330       were  not  added to the set, which makes possible to build up sets with
331       exceptions. See the example at hash type hash:net below.
332
333       When elements are tested by ipset, the nomatch  flags  are  taken  into
334       account.  If  one wants to test the existence of an element marked with
335       nomatch in a set, then the flag must be specified too.
336
337   forceadd
338       All hash set types support the optional forceadd parameter when  creat‐
339       ing  a  set.   When  sets created with this option become full the next
340       addition to the set may succeed and evict a random entry from the set.
341
342              ipset create foo hash:ip forceadd
343
344   wildcard
345       This flag is valid when adding elements to a hash:net,iface set. If the
346       flag is set, then prefix matching is used when comparing with this ele‐
347       ment. For example, an element containing the interface name "eth"  will
348       match any name with that prefix.
349

SET TYPES

351   bitmap:ip
352       The  bitmap:ip  set  type uses a memory range to store either IPv4 host
353       (default) or IPv4 network addresses. A bitmap:ip type of set can  store
354       up to 65536 entries.
355
356       CREATE-OPTIONS  := range fromip-toip|ip/cidr [ netmask cidr ] [ timeout
357       value ] [ counters ] [ comment ] [ skbinfo ]
358
359       ADD-ENTRY := { ip | fromip-toip | ip/cidr }
360
361       ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes  value  ]  [
362       comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
363
364       DEL-ENTRY := { ip | fromip-toip | ip/cidr }
365
366       TEST-ENTRY := ip
367
368       Mandatory create options:
369
370       range fromip-toip|ip/cidr
371              Create  the  set  from  the  specified  inclusive  address range
372              expressed in an IPv4 address range or network. The size  of  the
373              range (in entries) cannot exceed the limit of maximum 65536 ele‐
374              ments.
375
376       Optional create options:
377
378       netmask cidr
379              When the optional netmask parameter specified, network addresses
380              will be stored in the set instead of IP host addresses. The cidr
381              prefix value must be between 1-32.  An IP address will be in the
382              set  if  the  network  address, which is resulted by masking the
383              address with the specified netmask, can be found in the set.
384
385       The bitmap:ip type supports adding or deleting multiple entries in  one
386       command.
387
388       Examples:
389
390              ipset create foo bitmap:ip range 192.168.0.0/16
391
392              ipset add foo 192.168.1/24
393
394              ipset test foo 192.168.1.1
395
396   bitmap:ip,mac
397       The  bitmap:ip,mac set type uses a memory range to store IPv4 and a MAC
398       address pairs. A bitmap:ip,mac type  of  set  can  store  up  to  65536
399       entries.
400
401       CREATE-OPTIONS  :=  range fromip-toip|ip/cidr [ timeout value ] [ coun‐
402       ters ] [ comment ] [ skbinfo ]
403
404       ADD-ENTRY := ip[,macaddr]
405
406       ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes  value  ]  [
407       comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
408
409       DEL-ENTRY := ip[,macaddr]
410
411       TEST-ENTRY := ip[,macaddr]
412
413       Mandatory options to use when creating a bitmap:ip,mac type of set:
414
415       range fromip-toip|ip/cidr
416              Create  the  set  from  the  specified  inclusive  address range
417              expressed in an IPv4 address range or network. The size  of  the
418              range cannot exceed the limit of maximum 65536 entries.
419
420       The  bitmap:ip,mac  type  is exceptional in the sense that the MAC part
421       can be left out when adding/deleting/testing entries in the set. If  we
422       add  an  entry  without  the MAC address specified, then when the first
423       time the entry is matched by the kernel, it will automatically fill out
424       the  missing  MAC  address  with  the  MAC address from the packet. The
425       source MAC address is used if the entry matched due to a src  parameter
426       of  the set match, and the destination MAC address is used if available
427       and the entry matched due to a dst parameter.  If the entry was  speci‐
428       fied  with  a  timeout  value, the timer starts off when the IP and MAC
429       address pair is complete.
430
431       The bitmap:ip,mac type of sets require two src/dst  parameters  of  the
432       set  match and SET target netfilter kernel modules. For matches on des‐
433       tination MAC addresses, see COMMENTS below.
434
435       Examples:
436
437              ipset create foo bitmap:ip,mac range 192.168.0.0/16
438
439              ipset add foo 192.168.1.1,12:34:56:78:9A:BC
440
441              ipset test foo 192.168.1.1
442
443   bitmap:port
444       The bitmap:port set type uses a memory range to store port numbers  and
445       such a set can store up to 65536 ports.
446
447       CREATE-OPTIONS  := range fromport-toport [ timeout value ] [ counters ]
448       [ comment ] [ skbinfo ]
449
450       ADD-ENTRY := { [proto:]port | [proto:]fromport-toport }
451
452       ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes  value  ]  [
453       comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
454
455       DEL-ENTRY := { [proto:]port | [proto:]fromport-toport }
456
457       TEST-ENTRY := [proto:]port
458
459       Mandatory options to use when creating a bitmap:port type of set:
460
461       range [proto:]fromport-toport
462              Create the set from the specified inclusive port range.
463
464       The  set  match  and  SET target netfilter kernel modules interpret the
465       stored numbers as TCP or UDP port numbers.
466
467       proto only needs to be specified if a service name  is  used  and  that
468       name  does  not exist as a TCP service. The protocol is never stored in
469       the set, just the port number of the service.
470
471       Examples:
472
473              ipset create foo bitmap:port range 0-1024
474
475              ipset add foo 80
476
477              ipset test foo 80
478
479              ipset del foo udp:[macon-udp]-[tn-tl-w2]
480
481   hash:ip
482       The hash:ip set type uses a hash to store IP host  addresses  (default)
483       or  network  addresses.  Zero  valued  IP address cannot be stored in a
484       hash:ip type of set.
485
486       CREATE-OPTIONS := [ family { inet | inet6 } ] | [ hashsize  value  ]  [
487       maxelem  value ] [ netmask cidr ] [ timeout value ] [ counters ] [ com‐
488       ment ] [ skbinfo ]
489
490       ADD-ENTRY := ipaddr
491
492       ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes  value  ]  [
493       comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
494
495       DEL-ENTRY := ipaddr
496
497       TEST-ENTRY := ipaddr
498
499       Optional create options:
500
501       netmask cidr
502              When the optional netmask parameter specified, network addresses
503              will be stored in the set instead of IP host addresses. The cidr
504              prefix value must be between 1-32 for IPv4 and between 1-128 for
505              IPv6. An IP address will be in the set if the  network  address,
506              which  is  resulted by masking the address with the netmask, can
507              be found in the set.  Examples:
508
509              ipset create foo hash:ip netmask 30
510
511              ipset add foo 192.168.1.0/24
512
513              ipset test foo 192.168.1.2
514
515   hash:mac
516       The hash:mac set type uses a hash to store MAC addresses.  Zero  valued
517       MAC  addresses  cannot be stored in a hash:mac type of set. For matches
518       on destination MAC addresses, see COMMENTS below.
519
520       CREATE-OPTIONS := [ hashsize value ] [ maxelem value ] [ timeout  value
521       ] [ counters ] [ comment ] [ skbinfo ]
522
523       ADD-ENTRY := macaddr
524
525       ADD-OPTIONS  :=  [  timeout value ] [ packets value ] [ bytes value ] [
526       comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
527
528       DEL-ENTRY := macaddr
529
530       TEST-ENTRY := macaddr
531
532       Examples:
533
534              ipset create foo hash:mac
535
536              ipset add foo 01:02:03:04:05:06
537
538              ipset test foo 01:02:03:04:05:06
539
540
541   hash:ip,mac
542       The hash:ip,mac set type uses a hash to store  IP  and  a  MAC  address
543       pairs. Zero valued MAC addresses cannot be stored in a hash:ip,mac type
544       of set. For matches on destination MAC addresses, see COMMENTS below.
545
546       CREATE-OPTIONS := [ family { inet | inet6 } ] | [ hashsize  value  ]  [
547       maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
548
549       ADD-ENTRY := ipaddr,macaddr
550
551       ADD-OPTIONS  :=  [  timeout value ] [ packets value ] [ bytes value ] [
552       comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
553
554       DEL-ENTRY := ipaddr,macaddr
555
556       TEST-ENTRY := ipaddr,macaddr
557
558       Examples:
559
560              ipset create foo hash:ip,mac
561
562              ipset add foo 1.1.1.1,01:02:03:04:05:06
563
564              ipset test foo 1.1.1.1,01:02:03:04:05:06
565
566
567   hash:net
568       The hash:net set type uses a hash to store different sized  IP  network
569       addresses.   Network  address with zero prefix size cannot be stored in
570       this type of sets.
571
572       CREATE-OPTIONS := [ family { inet | inet6 } ] | [ hashsize  value  ]  [
573       maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
574
575       ADD-ENTRY := netaddr
576
577       ADD-OPTIONS  := [ timeout value ] [ nomatch ] [ packets value ] [ bytes
578       value ] [ comment string ] [ skbmark  value  ]  [  skbprio  value  ]  [
579       skbqueue value ]
580
581       DEL-ENTRY := netaddr
582
583       TEST-ENTRY := netaddr
584
585       where netaddr := ip[/cidr]
586
587       When  adding/deleting/testing  entries, if the cidr prefix parameter is
588       not  specified,  then  the  host  prefix   value   is   assumed.   When
589       adding/deleting  entries,  the exact element is added/deleted and over‐
590       lapping elements are not checked by the kernel.  When testing  entries,
591       if  a  host  address is tested, then the kernel tries to match the host
592       address in the networks added to the set and reports the result accord‐
593       ingly.
594
595       From  the  set  netfilter match point of view the searching for a match
596       always  starts  from  the smallest  size  of  netblock  (most  specific
597       prefix)  to  the  largest one (least specific prefix) added to the set.
598       When  adding/deleting IP addresses  to the set  by  the  SET  netfilter
599       target,  it   will   be added/deleted by the most specific prefix which
600       can be found in  the set, or by the host prefix value  if  the  set  is
601       empty.
602
603       The  lookup time grows linearly with the number of the different prefix
604       values added to the set.
605
606       Example:
607
608              ipset create foo hash:net
609
610              ipset add foo 192.168.0.0/24
611
612              ipset add foo 10.1.0.0/16
613
614              ipset add foo 192.168.0/24
615
616              ipset add foo 192.168.0/30 nomatch
617
618       When matching the elements in the set  above,  all  IP  addresses  will
619       match  from  the  networks 192.168.0.0/24, 10.1.0.0/16 and 192.168.0/24
620       except the ones from 192.168.0/30.
621
622   hash:net,net
623       The hash:net,net set type uses a hash to store pairs of different sized
624       IP  network  addresses.  Bear  in  mind  that  the  first parameter has
625       precedence over the second, so a nomatch entry could be potentially  be
626       ineffective  if a more specific first parameter existed with a suitable
627       second parameter.  Network address with  zero  prefix  size  cannot  be
628       stored in this type of set.
629
630       CREATE-OPTIONS  :=  [  family { inet | inet6 } ] | [ hashsize value ] [
631       maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
632
633       ADD-ENTRY := netaddr,netaddr
634
635       ADD-OPTIONS := [ timeout value ] [ nomatch ] [ packets value ] [  bytes
636       value  ]  [  comment  string  ]  [  skbmark value ] [ skbprio value ] [
637       skbqueue value ]
638
639       DEL-ENTRY := netaddr,netaddr
640
641       TEST-ENTRY := netaddr,netaddr
642
643       where netaddr := ip[/cidr]
644
645       When adding/deleting/testing entries, if the cidr prefix  parameter  is
646       not   specified,   then   the   host  prefix  value  is  assumed.  When
647       adding/deleting entries, the exact element is added/deleted  and  over‐
648       lapping  elements are not checked by the kernel.  When testing entries,
649       if a host address is tested, then the kernel tries to  match  the  host
650       address in the networks added to the set and reports the result accord‐
651       ingly.
652
653       From the set netfilter match point of view the searching  for  a  match
654       always   starts   from   the smallest  size  of netblock (most specific
655       prefix) to the largest one (least specific prefix) with the first param
656       having  precedence.   When  adding/deleting IP addresses  to the set by
657       the SET netfilter target, it  will  be   added/deleted   by   the  most
658       specific  prefix  which  can be found in the set, or by the host prefix
659       value if the set is empty.
660
661       The lookup time grows linearly with the number of the different  prefix
662       values added to the first parameter of the set. The number of secondary
663       prefixes further increases this as the list of  secondary  prefixes  is
664       traversed per primary prefix.
665
666       Example:
667
668              ipset create foo hash:net,net
669
670              ipset add foo 192.168.0.0/24,10.0.1.0/24
671
672              ipset add foo 10.1.0.0/16,10.255.0.0/24
673
674              ipset add foo 192.168.0/24,192.168.54.0-192.168.54.255
675
676              ipset add foo 192.168.0/30,192.168.64/30 nomatch
677
678       When  matching  the  elements  in  the set above, all IP addresses will
679       match     from     the      networks      192.168.0.0/24<->10.0.1.0/24,
680       10.1.0.0/16<->10.255.0.0/24  and  192.168.0/24<->192.168.54.0/24 except
681       the ones from 192.168.0/30<->192.168.64/30.
682
683   hash:ip,port
684       The hash:ip,port set type uses a hash to store IP address and port num‐
685       ber  pairs.   The  port  number is interpreted together with a protocol
686       (default TCP) and zero protocol number cannot be used.
687
688       CREATE-OPTIONS := [ family { inet | inet6 } ] | [ hashsize  value  ]  [
689       maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
690
691       ADD-ENTRY := ipaddr,[proto:]port
692
693       ADD-OPTIONS  :=  [  timeout value ] [ packets value ] [ bytes value ] [
694       comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
695
696       DEL-ENTRY := ipaddr,[proto:]port
697
698       TEST-ENTRY := ipaddr,[proto:]port
699
700       The [proto:]port part of the elements may be expressed in the following
701       forms,  where  the  range  variations are valid when adding or deleting
702       entries:
703
704       portname[-portname]
705              TCP port or range of ports expressed in TCP portname identifiers
706              from /etc/services
707
708       portnumber[-portnumber]
709              TCP port or range of ports expressed in TCP port numbers
710
711       tcp|sctp|udp|udplite:portname|portnumber[-portname|portnumber]
712              TCP,  SCTP,  UDP or UDPLITE port or port range expressed in port
713              name(s) or port number(s)
714
715       icmp:codename|type/code
716              ICMP codename or type/code. The supported ICMP codename  identi‐
717              fiers can always be listed by the help command.
718
719       icmpv6:codename|type/code
720              ICMPv6  codename  or  type/code.  The  supported ICMPv6 codename
721              identifiers can always be listed by the help command.
722
723       proto:0
724              All other protocols, as an  identifier  from  /etc/protocols  or
725              number. The pseudo port number must be zero.
726
727       The hash:ip,port type of sets require two src/dst parameters of the set
728       match and SET target kernel modules.
729
730       Examples:
731
732              ipset create foo hash:ip,port
733
734              ipset add foo 192.168.1.0/24,80-82
735
736              ipset add foo 192.168.1.1,udp:53
737
738              ipset add foo 192.168.1.1,vrrp:0
739
740              ipset test foo 192.168.1.1,80
741
742   hash:net,port
743       The hash:net,port set type uses a hash to store different sized IP net‐
744       work  address  and  port pairs. The port number is interpreted together
745       with a protocol (default TCP) and zero protocol number cannot be  used.
746       Network address with zero prefix size is not accepted either.
747
748       CREATE-OPTIONS  :=  [  family { inet | inet6 } ] | [ hashsize value ] [
749       maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
750
751       ADD-ENTRY := netaddr,[proto:]port
752
753       ADD-OPTIONS := [ timeout value ]  [ nomatch ] [ packets value ] [ bytes
754       value  ]  [  comment  string  ]  [  skbmark value ] [ skbprio value ] [
755       skbqueue value ]
756
757       DEL-ENTRY := netaddr,[proto:]port
758
759       TEST-ENTRY := netaddr,[proto:]port
760
761       where netaddr := ip[/cidr]
762
763       For the netaddr part  of  the  elements  see  the  description  at  the
764       hash:net  set  type.  For the [proto:]port part of the elements see the
765       description at the hash:ip,port set type.
766
767       When adding/deleting/testing entries, if the cidr prefix  parameter  is
768       not   specified,   then   the   host  prefix  value  is  assumed.  When
769       adding/deleting entries, the exact element is added/deleted  and  over‐
770       lapping  elements are not checked by the kernel.  When testing entries,
771       if a host address is tested, then the kernel tries to  match  the  host
772       address in the networks added to the set and reports the result accord‐
773       ingly.
774
775       From the set netfilter match point of view the searching for  a   match
776       always   starts   from   the smallest  size  of netblock (most specific
777       prefix) to the largest one (least specific prefix) added  to  the  set.
778       When   adding/deleting  IP  addresses   to the set by the SET netfilter
779       target, it  will  be added/deleted by the most  specific  prefix  which
780       can  be  found  in   the set, or by the host prefix value if the set is
781       empty.
782
783       The lookup time grows linearly with the number of the different  prefix
784       values added to the set.
785
786       Examples:
787
788              ipset create foo hash:net,port
789
790              ipset add foo 192.168.0/24,25
791
792              ipset add foo 10.1.0.0/16,80
793
794              ipset test foo 192.168.0/24,25
795
796   hash:ip,port,ip
797       The hash:ip,port,ip set type uses a hash to store IP address, port num‐
798       ber and a second IP address triples. The  port  number  is  interpreted
799       together  with a protocol (default TCP) and zero protocol number cannot
800       be used.
801
802       CREATE-OPTIONS := [ family { inet | inet6 } ] | [ hashsize  value  ]  [
803       maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
804
805       ADD-ENTRY := ipaddr,[proto:]port,ip
806
807       ADD-OPTIONS  :=  [  timeout value ] [ packets value ] [ bytes value ] [
808       comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
809
810       DEL-ENTRY := ipaddr,[proto:]port,ip
811
812       TEST-ENTRY := ipaddr,[proto:]port,ip
813
814       For the first ipaddr and [proto:]port parts of  the  elements  see  the
815       descriptions at the hash:ip,port set type.
816
817       The  hash:ip,port,ip  type  of sets require three src/dst parameters of
818       the set match and SET target kernel modules.
819
820       Examples:
821
822              ipset create foo hash:ip,port,ip
823
824              ipset add foo 192.168.1.1,80,10.0.0.1
825
826              ipset test foo 192.168.1.1,udp:53,10.0.0.1
827
828   hash:ip,port,net
829       The hash:ip,port,net set type uses a hash to  store  IP  address,  port
830       number  and  IP network address triples. The port number is interpreted
831       together with a protocol (default TCP) and zero protocol number  cannot
832       be used. Network address with zero prefix size cannot be stored either.
833
834       CREATE-OPTIONS  :=  [  family { inet | inet6 } ] | [ hashsize value ] [
835       maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
836
837       ADD-ENTRY := ipaddr,[proto:]port,netaddr
838
839       ADD-OPTIONS := [ timeout value ]  [ nomatch ] [ packets value ] [ bytes
840       value  ]  [  comment  string  ]  [  skbmark value ] [ skbprio value ] [
841       skbqueue value ]
842
843       DEL-ENTRY := ipaddr,[proto:]port,netaddr
844
845       TEST-ENTRY := ipaddr,[proto:]port,netaddr
846
847       where netaddr := ip[/cidr]
848
849       For the ipaddr and [proto:]port parts of the elements see the  descrip‐
850       tions  at  the  hash:ip,port set type. For the netaddr part of the ele‐
851       ments see the description at the hash:net set type.
852
853       From the set netfilter match point of view the searching  for  a  match
854       always   starts   from   the smallest  size  of netblock (most specific
855       cidr) to the largest one (least specific cidr) added to the set.   When
856       adding/deleting  triples  to  the  set  by the SET netfilter target, it
857       will  be added/deleted by the most specific cidr which can be found  in
858       the set, or by the host cidr value if the set is empty.
859
860       The  lookup  time  grows linearly with the number of the different cidr
861       values added to the set.
862
863       The hash:ip,port,net type of sets require three src/dst  parameters  of
864       the set match and SET target kernel modules.
865
866       Examples:
867
868              ipset create foo hash:ip,port,net
869
870              ipset add foo 192.168.1,80,10.0.0/24
871
872              ipset add foo 192.168.2,25,10.1.0.0/16
873
874              ipset test foo 192.168.1,80.10.0.0/24
875
876   hash:ip,mark
877       The  hash:ip,mark  set  type uses a hash to store IP address and packet
878       mark pairs.
879
880       CREATE-OPTIONS := [ family { inet | inet6 } ] | [ markmask  value  ]  [
881       hashsize  value  ]  [  maxelem value ] [ timeout value ] [ counters ] [
882       comment ] [ skbinfo ]
883
884       ADD-ENTRY := ipaddr,mark
885
886       ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes  value  ]  [
887       comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
888
889       DEL-ENTRY := ipaddr,mark
890
891       TEST-ENTRY := ipaddr,mark
892
893       Optional create options:
894
895       markmask value
896              Allows  you  to  set bits you are interested in the packet mark.
897              This values is then used to perform bitwise  AND  operation  for
898              every  mark  added.   markmask  can  be  any value between 1 and
899              4294967295, by default all 32 bits are set.
900
901       The mark can be any value between 0 and 4294967295.
902
903       The hash:ip,mark type of sets require two src/dst parameters of the set
904       match and SET target kernel modules.
905
906       Examples:
907
908              ipset create foo hash:ip,mark
909
910              ipset add foo 192.168.1.0/24,555
911
912              ipset add foo 192.168.1.1,0x63
913
914              ipset add foo 192.168.1.1,111236
915
916   hash:net,port,net
917       The  hash:net,port,net  set  type behaves similarly to hash:ip,port,net
918       but accepts a cidr value for both the first and last parameter.  Either
919       subnet  is  permitted  to be a /0 should you wish to match port between
920       all destinations.
921
922       CREATE-OPTIONS := [ family { inet | inet6 } ] | [ hashsize  value  ]  [
923       maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
924
925       ADD-ENTRY := netaddr,[proto:]port,netaddr
926
927       ADD-OPTIONS := [ timeout value ]  [ nomatch ] [ packets value ] [ bytes
928       value ] [ comment string ] [ skbmark  value  ]  [  skbprio  value  ]  [
929       skbqueue value ]
930
931       DEL-ENTRY := netaddr,[proto:]port,netaddr
932
933       TEST-ENTRY := netaddr,[proto:]port,netaddr
934
935       where netaddr := ip[/cidr]
936
937       For  the  [proto:]port  part of the elements see the description at the
938       hash:ip,port set type. For the netaddr part of  the  elements  see  the
939       description at the hash:net set type.
940
941       From  the  set  netfilter match point of view the searching for a match
942       always  starts  from  the smallest  size  of  netblock  (most  specific
943       cidr)  to the largest one (least specific cidr) added to the set.  When
944       adding/deleting triples to the set by  the  SET  netfilter  target,  it
945       will   be added/deleted by the most specific cidr which can be found in
946       the set, or by the host cidr value if the set is empty. The first  sub‐
947       net  has  precedence  when performing the most-specific lookup, just as
948       for hash:net,net
949
950       The lookup time grows linearly with the number of  the  different  cidr
951       values  added to the set and by the number of secondary cidr values per
952       primary.
953
954       The hash:net,port,net type of sets require three src/dst parameters  of
955       the set match and SET target kernel modules.
956
957       Examples:
958
959              ipset create foo hash:net,port,net
960
961              ipset add foo 192.168.1.0/24,0,10.0.0/24
962
963              ipset add foo 192.168.2.0/24,25,10.1.0.0/16
964
965              ipset test foo 192.168.1.1,80,10.0.0.1
966
967   hash:net,iface
968       The  hash:net,iface  set  type  uses a hash to store different sized IP
969       network address and interface name pairs.
970
971       CREATE-OPTIONS := [ family { inet | inet6 } ] | [ hashsize  value  ]  [
972       maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
973
974       ADD-ENTRY := netaddr,[physdev:]iface
975
976       ADD-OPTIONS := [ timeout value ]  [ nomatch ] [ packets value ] [ bytes
977       value ] [ comment string ] [ skbmark  value  ]  [  skbprio  value  ]  [
978       skbqueue value ] [ wildcard ]
979
980       DEL-ENTRY := netaddr,[physdev:]iface
981
982       TEST-ENTRY := netaddr,[physdev:]iface
983
984       where netaddr := ip[/cidr]
985
986       For  the  netaddr  part  of  the  elements  see  the description at the
987       hash:net set type.
988
989       When adding/deleting/testing entries, if the cidr prefix  parameter  is
990       not   specified,   then   the   host  prefix  value  is  assumed.  When
991       adding/deleting entries, the exact element is added/deleted  and  over‐
992       lapping  elements are not checked by the kernel.  When testing entries,
993       if a host address is tested, then the kernel tries to  match  the  host
994       address in the networks added to the set and reports the result accord‐
995       ingly.
996
997       From the set netfilter match point of view the searching for  a   match
998       always   starts   from   the smallest  size  of netblock (most specific
999       prefix) to the largest one (least specific prefix) added  to  the  set.
1000       When   adding/deleting  IP  addresses   to the set by the SET netfilter
1001       target, it  will  be added/deleted by the most  specific  prefix  which
1002       can  be  found  in   the set, or by the host prefix value if the set is
1003       empty.
1004
1005       The second direction parameter of the set match and SET target  modules
1006       corresponds to the incoming/outgoing interface: src to the incoming one
1007       (similar to the -i flag of iptables), while dst  to  the  outgoing  one
1008       (similar  to  the  -o  flag of iptables). When the interface is flagged
1009       with physdev:, the interface is interpreted  as  the  incoming/outgoing
1010       bridge port.
1011
1012       The  lookup time grows linearly with the number of the different prefix
1013       values added to the set.
1014
1015       The internal restriction of the hash:net,iface set  type  is  that  the
1016       same network prefix cannot be stored with more than 64 different inter‐
1017       faces in a single set.
1018
1019       Examples:
1020
1021              ipset create foo hash:net,iface
1022
1023              ipset add foo 192.168.0/24,eth0
1024
1025              ipset add foo 10.1.0.0/16,eth1
1026
1027              ipset test foo 192.168.0/24,eth0
1028
1029   list:set
1030       The list:set type uses a simple list in which you can store set names.
1031
1032       CREATE-OPTIONS := [ size value ] [ timeout value ] [ counters ] [  com‐
1033       ment ] [ skbinfo ]
1034
1035       ADD-ENTRY := setname [ { before | after } setname ]
1036
1037       ADD-OPTIONS  :=  [  timeout value ] [ packets value ] [ bytes value ] [
1038       comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
1039
1040       DEL-ENTRY := setname [ { before | after } setname ]
1041
1042       TEST-ENTRY := setname [ { before | after } setname ]
1043
1044       Optional create options:
1045
1046       size value
1047              The size of the list, the default is 8. The parameter is ignored
1048              since ipset version 6.24.
1049
1050       By  the  ipset  command  you   can  add, delete and test set names in a
1051       list:set type of set.
1052
1053       By the set match or SET target of netfilter you can test, add or delete
1054       entries  in  the sets added to the list:set type of set. The match will
1055       try to find a matching entry in the sets and the target will try to add
1056       an  entry  to  the  first  set to which it can be added.  The number of
1057       direction options of the match and target  are  important:  sets  which
1058       require  more  parameters  than  specified are skipped, while sets with
1059       equal or less parameters are checked, elements added/deleted. For exam‐
1060       ple if a and b are list:set type of sets then in the command
1061
1062              iptables -m set --match-set a src,dst -j SET --add-set b src,dst
1063
1064       the  match  and  target  will skip any set in a and b which stores data
1065       triples, but will match all sets with single or double data storage  in
1066       a set and stop matching at the first successful set, and add src to the
1067       first single or src,dst to the first double data storage set  in  b  to
1068       which the entry can be added. You can imagine a list:set type of set as
1069       an ordered union of the set elements.
1070
1071       Please note: by the ipset command you can add, delete and test the set‐
1072       names in a list:set type of set, and not the presence of a set's member
1073       (such as an IP address).
1074

GENERAL RESTRICTIONS

1076       Zero valued set entries cannot be used with hash methods. Zero protocol
1077       value with ports cannot be used.
1078

COMMENTS

1080       If  you  want  to store same size subnets from a given network (say /24
1081       blocks from a /8 network), use the bitmap:ip set type.  If you want  to
1082       store  random  same  size  networks  (say  random  /24 blocks), use the
1083       hash:ip set type. If  you  have  got  random  size  of  netblocks,  use
1084       hash:net.
1085
1086       Matching  on  destination  MAC addresses using the dst parameter of the
1087       set match netfilter kernel modules will only work  if  the  destination
1088       MAC  address  is available in the packet at the given processing stage,
1089       that is, it only applies for incoming packets in the PREROUTING,  INPUT
1090       and  FORWARD chains, against the MAC address as originally found in the
1091       received packet (typically, one of  the  MAC  addresses  of  the  local
1092       host). This is not the destination MAC address a destination IP address
1093       resolves to, after routing. If the MAC address is not  available  (e.g.
1094       in the OUTPUT chain), the packet will simply not match.
1095
1096       Backward compatibility is maintained and old ipset syntax is still sup‐
1097       ported.
1098
1099       The iptree and iptreemap set types are removed: if you refer  to  them,
1100       they are automatically replaced by hash:ip type of sets.
1101

DIAGNOSTICS

1103       Various error messages are printed to standard error.  The exit code is
1104       0 for correct functioning.
1105

BUGS

1107       Bugs? No, just funny features. :-) OK, just kidding...
1108

SEE ALSO

1110       iptables(8), ip6tables(8) iptables-extensions(8)
1111

AUTHORS

1113       Jozsef Kadlecsik wrote ipset, which is based on ippool by Joakim Axels‐
1114       son, Patrick Schaaf and Martin Josefsson.
1115       Sven Wegener wrote the iptreemap type.
1116

LAST REMARK

1118       I stand on the shoulders of giants.
1119
1120
1121
1122Jozsef Kadlecsik                 Jun 25, 2015                         IPSET(8)
Impressum