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