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 | re‐
12       store | flush | rename | swap | help | version | - }
13
14       OPTIONS := { -exist | -output { plain | save | xml } |  -quiet  |  -re‐
15       solve | -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 be‐
50       low.
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  de‐
93              stroyed.
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 op‐
99              tion is given, the entries are listed/saved sorted (which may be
100              slow).   The option -output can be used to control the format of
101              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 re‐
119              store unless specified so in the restore file. All commands  are
120              allowed  in restore mode except list, help, version, interactive
121              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 in‐
143              put.   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 al‐
152              ready 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 en‐
215       try 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 en‐
222       tries. If a set is created with timeout support, then the same  timeout
223       option  can  be  used to specify non-default timeout values when adding
224       entries. Zero timeout value means the entry is added permanent  to  the
225       set.  The timeout value of already added elements can be changed by re-
226       adding the element using the -exist option. The largest possible  time‐
227       out 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  ac‐
271       ceptable:
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 192.168.0.1 skbmark 0x1111/0xff00ffff skbprio 1:10
294              skbqueue 10
295
296   hashsize
297       This  parameter  is valid for the create command of all hash type sets.
298       It defines the initial hash size for the set, default is 1024. The hash
299       size  must  be  a  power of two, the kernel automatically rounds up non
300       power of two hash sizes to the first correct value.  Example:
301
302              ipset create test hash:ip hashsize 1536
303
304   maxelem
305       This parameter is valid for the create command of all hash  type  sets.
306       It  defines  the  maximal number of elements which can be stored in the
307       set, default 65536.  Example:
308
309              ipset create test hash:ip maxelem 2048
310
311   bucketsize
312       This parameter is valid for the create command of all hash  type  sets.
313       It  specifies  the  maximal number of elements which can be stored in a
314       hash bucket. Possible values are any even number between 2-14  and  the
315       default  is  14.  Setting the value lower forces ipset to create larger
316       hashes which consumes more memory but gives more speed at  matching  in
317       the set.  Example:
318
319              ipset create test hash:ip bucketsize 2
320
321   family { inet | inet6 }
322       This  parameter  is  valid for the create command of all hash type sets
323       except for hash:mac.  It defines the protocol  family  of  the  IP  ad‐
324       dresses  to  be  stored in the set. The default is inet, i.e IPv4.  For
325       the inet family one can add or delete multiple entries by specifying  a
326       range  or a network of IPv4 addresses in the IP address part of the en‐
327       try:
328
329       ipaddr := { ip | fromaddr-toaddr | ip/cidr }
330
331       netaddr := { fromaddr-toaddr | ip/cidr }
332
333       Example:
334
335              ipset create test hash:ip family inet6
336
337   nomatch
338       The hash set types which can store net type of data  (i.e.  hash:*net*)
339       support  the optional nomatch option when adding entries. When matching
340       elements in the set, entries marked as nomatch are skipped as if  those
341       were  not  added to the set, which makes possible to build up sets with
342       exceptions. See the example at hash type hash:net below.
343
344       When elements are tested by ipset, the nomatch flags are taken into ac‐
345       count. If one wants to test the existence of an element marked with no‐
346       match in a set, then the flag must be specified too.
347
348   forceadd
349       All hash set types support the optional forceadd parameter when  creat‐
350       ing a set.  When sets created with this option become full the next ad‐
351       dition to the set may succeed and evict a random entry from the set.
352
353              ipset create foo hash:ip forceadd
354
355   wildcard
356       This flag is valid when adding elements to a hash:net,iface set. If the
357       flag is set, then prefix matching is used when comparing with this ele‐
358       ment. For example, an element containing the interface name "eth"  will
359       match any name with that prefix.
360

SET TYPES

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

GENERAL RESTRICTIONS

1128       Zero valued set entries cannot be used with hash methods. Zero protocol
1129       value with ports cannot be used.
1130

COMMENTS

1132       If  you  want  to store same size subnets from a given network (say /24
1133       blocks from a /8 network), use the bitmap:ip set type.  If you want  to
1134       store  random  same  size  networks  (say  random  /24 blocks), use the
1135       hash:ip set type. If  you  have  got  random  size  of  netblocks,  use
1136       hash:net.
1137
1138       Matching  on  destination  MAC addresses using the dst parameter of the
1139       set match netfilter kernel modules will only work  if  the  destination
1140       MAC  address  is available in the packet at the given processing stage,
1141       that is, it only applies for incoming packets in the PREROUTING,  INPUT
1142       and  FORWARD chains, against the MAC address as originally found in the
1143       received packet (typically, one of  the  MAC  addresses  of  the  local
1144       host). This is not the destination MAC address a destination IP address
1145       resolves to, after routing. If the MAC address is not  available  (e.g.
1146       in the OUTPUT chain), the packet will simply not match.
1147
1148       Backward compatibility is maintained and old ipset syntax is still sup‐
1149       ported.
1150
1151       The iptree and iptreemap set types are removed: if you refer  to  them,
1152       they are automatically replaced by hash:ip type of sets.
1153

DIAGNOSTICS

1155       Various error messages are printed to standard error.  The exit code is
1156       0 for correct functioning.
1157

BUGS

1159       Bugs? No, just funny features. :-) OK, just kidding...
1160

SEE ALSO

1162       iptables(8), ip6tables(8) iptables-extensions(8)
1163

AUTHORS

1165       Jozsef Kadlecsik wrote ipset, which is based on ippool by Joakim Axels‐
1166       son, Patrick Schaaf and Martin Josefsson.
1167       Sven Wegener wrote the iptreemap type.
1168

LAST REMARK

1170       I stand on the shoulders of giants.
1171
1172
1173
1174Jozsef Kadlecsik                 Jun 25, 2015                         IPSET(8)
Impressum