(no commit message)
[ikiwiki.git] / docs / ipfw2 / index.mdwn
1 [[!meta title="IPFW2 Documentation"]]
2 [[!meta robots="index, follow"]]
3
4 updated 6-Nov-2014 
5
6 bycn82
7
8 v0.1
9
10 ---
11
12 [[!toc  levels=3]]
13
14 # Introduction
15 IPFW is a controlling utility for ipfw/ipacct facilities for FreeBSD 2.0 which released in November, 1994. After 20 years of evolution. it becomes a stateful firewall which supports Layer2 to Layer4. It is comprised of several components: the kernel firewall filter rule processor and its integrated packet accounting facility, the logging facility, NAT, the dummynet(4) traffic shaper, a forward facility, a bridge facility, and an ipstealth facility. It is one of the most advanced opensource firewall.
16
17 I am rewriting IPFW2 from scratch for DragonflyBSD, and IPFW2 will be in modular design. all the functionality are originally from loadable modules and should be not that difficult for normal users/developer to create a module in order to their own requirement.
18 ## Brief notes on design
19 Before user start to use the ipfw utility to add rules, the ipfw kernel should be enable/loaded into the kernel. by running below command
20
21         kldload ipfw
22
23 the basic ipfw module will be loaded into kernel, also the basic functionalities. in order to user more function which is implemented in other modules, users can run below command
24
25         kldload ipfw_layer2
26
27 so the 'layer2' module will be loaded, for example in this scenario, user can start to fire below command 
28
29         ipfw add allow all from any to any layer2
30
31 it means user want to add add rule which allow all the layer2 traffic. when user fire the command in the console, actually in the back-end, it will do below things.
32
33 1. ipfw retrieve the module name list from the kernel
34 2. ipfw load the module accordingly
35 3. ipfw start to parse the parameters 
36 4. inject into the kernel
37
38 In the kernel space, when the traffic comes, it will filter again the rule, in each ipfw_insn has unique module + opcode. it will automatically link to the filter function which will be registered during the module was loaded.
39
40 ## Processing Flow
41 # Configuration
42 # Modules
43 Modules are loadable,and every module comes with a kernel part and userspace part. the kernel part need to be loaded manually, and the userpsace part can be loaded automatically when user fires the ipfw command.
44 ## Default Module
45 When the ipfw module was loaded, it comes with 2 opcodes in order to support the default behavior of the ipfw. so below 2 opcodes are embeded in the ipfw.ko
46       accept
47       deby
48 by fire command `kldload ipfw', the default module is loaded. and all other modules are relying on this module.
49 ## Basic Module
50 Basic Module contains all the basic features. it has multiple opcodes list below.
51         proto
52         from
53         to
54         in
55         out
56         via
57         recv
58         xmit
59
60         
61
62 ## Layer2 Module
63
64         layer2
65         mac-type
66
67 ## Layer4 Module
68        
69         tcpflag
70
71
72 ## Connection Module
73
74         pps
75         lps
76
77 # Development
78 ## How to create a module
79 # Roadmap