7fc1aab456dbefecdafb68e5111372effa3232e8
[openwrt.git] / package / iptables / patches / 08-chaostables.patch
1 diff -ruN iptables-1.3.5.orig/extensions/.CHAOS-test iptables-1.3.5/extensions/.CHAOS-test
2 --- iptables-1.3.5.orig/extensions/.CHAOS-test  1970-01-01 01:00:00.000000000 +0100
3 +++ iptables-1.3.5/extensions/.CHAOS-test       2007-01-09 16:05:23.251885840 +0100
4 @@ -0,0 +1,2 @@
5 +#!/bin/sh
6 +[ -f "$KERNEL_DIR/include/linux/netfilter/xt_CHAOS.h" ] && echo "CHAOS";
7 diff -ruN iptables-1.3.5.orig/extensions/.DELUDE-test iptables-1.3.5/extensions/.DELUDE-test
8 --- iptables-1.3.5.orig/extensions/.DELUDE-test 1970-01-01 01:00:00.000000000 +0100
9 +++ iptables-1.3.5/extensions/.DELUDE-test      2007-01-09 16:05:18.104057722 +0100
10 @@ -0,0 +1,2 @@
11 +#!/bin/sh
12 +echo "DELUDE";
13 diff -ruN iptables-1.3.5.orig/extensions/libipt_CHAOS.c iptables-1.3.5/extensions/libipt_CHAOS.c
14 --- iptables-1.3.5.orig/extensions/libipt_CHAOS.c       1970-01-01 01:00:00.000000000 +0100
15 +++ iptables-1.3.5/extensions/libipt_CHAOS.c    2007-01-09 16:05:23.251885840 +0100
16 @@ -0,0 +1,111 @@
17 +/*
18 +    CHAOS target for iptables
19 +
20 +    Copyright © Jan Engelhardt <jengelh [at] gmx de>, 2006 - 2007
21 +    released under the terms of the GNU General Public
22 +    License version 2.x and only versions 2.x.
23 +*/
24 +#include <getopt.h>
25 +#include <stdio.h>
26 +#include <string.h>
27 +
28 +#include <iptables.h>
29 +#include <linux/netfilter_ipv4/ip_tables.h>
30 +#include <linux/netfilter/xt_CHAOS.h>
31 +
32 +static void libipt_chaos_help(void)
33 +{
34 +       printf(
35 +               "CHAOS target v%s options:\n"
36 +               "  --delude     Enable DELUDE processing for TCP\n"
37 +               "  --tarpit     Enable TARPIT processing for TCP\n",
38 +               IPTABLES_VERSION);
39 +       return;
40 +}
41 +
42 +static int libipt_chaos_parse(int c, char **argv, int invert,
43 +    unsigned int *flags, const struct ipt_entry *entry,
44 +    struct ipt_entry_target **target)
45 +{
46 +       struct xt_chaos_info *info = (void *)((*target)->data);
47 +       switch(c) {
48 +               case 'd':
49 +                       info->variant = XTCHAOS_DELUDE;
50 +                       *flags |= 0x02;
51 +                       return 1;
52 +               case 't':
53 +                       info->variant = XTCHAOS_TARPIT;
54 +                       *flags |= 0x01;
55 +                       return 1;
56 +       }
57 +       return 0;
58 +}
59 +
60 +static void libipt_chaos_check(unsigned int flags)
61 +{
62 +       if(flags != 0x03)
63 +               return;
64 +       /* If flags == 0x03, both were specified, which should not be. */
65 +       exit_error(PARAMETER_PROBLEM,
66 +                  "CHAOS: only one of --tarpit or --delude may be specified");
67 +       return;
68 +}
69 +
70 +static void libipt_chaos_print(const struct ipt_ip *ip,
71 +    const struct ipt_entry_target *target, int numeric)
72 +{
73 +       const struct xt_chaos_info *info = (const void *)target->data;
74 +       switch(info->variant) {
75 +               case XTCHAOS_DELUDE:
76 +                       printf("DELUDE ");
77 +                       break;
78 +               case XTCHAOS_TARPIT:
79 +                       printf("TARPIT ");
80 +                       break;
81 +               default:
82 +                       break;
83 +       }
84 +       return;
85 +}
86 +
87 +static void libipt_chaos_save(const struct ipt_ip *ip,
88 +    const struct ipt_entry_target *target)
89 +{
90 +       const struct xt_chaos_info *info = (const void *)target->data;
91 +       switch(info->variant) {
92 +               case XTCHAOS_DELUDE:
93 +                       printf("--delude ");
94 +                       break;
95 +               case XTCHAOS_TARPIT:
96 +                       printf("--tarpit ");
97 +                       break;
98 +               default:
99 +                       break;
100 +       }
101 +       return;
102 +}
103 +
104 +static struct option libipt_chaos_opts[] = {
105 +       {"delude", 0, NULL, 'd'},
106 +       {"tarpit", 0, NULL, 't'},
107 +       {NULL},
108 +};
109 +
110 +static struct iptables_target libipt_chaos_info = {
111 +       .name          = "CHAOS",
112 +       .version       = IPTABLES_VERSION,
113 +       .size          = IPT_ALIGN(sizeof(struct xt_chaos_info)),
114 +       .userspacesize = IPT_ALIGN(sizeof(struct xt_chaos_info)),
115 +       .help          = libipt_chaos_help,
116 +       .parse         = libipt_chaos_parse,
117 +       .final_check   = libipt_chaos_check,
118 +       .print         = libipt_chaos_print,
119 +       .save          = libipt_chaos_save,
120 +       .extra_opts    = libipt_chaos_opts,
121 +};
122 +
123 +static __attribute__((constructor)) void libipt_chaos_init(void)
124 +{
125 +       register_target(&libipt_chaos_info);
126 +       return;
127 +}
128 diff -ruN iptables-1.3.5.orig/extensions/libipt_DELUDE.c iptables-1.3.5/extensions/libipt_DELUDE.c
129 --- iptables-1.3.5.orig/extensions/libipt_DELUDE.c      1970-01-01 01:00:00.000000000 +0100
130 +++ iptables-1.3.5/extensions/libipt_DELUDE.c   2007-01-09 16:05:18.104057722 +0100
131 @@ -0,0 +1,66 @@
132 +/*
133 +    DELUDE target for iptables
134 +
135 +    Copyright © Jan Engelhardt <jengelh [at] gmx de>, 2006 - 2007
136 +    released under the terms of the GNU General Public
137 +    License version 2.x and only versions 2.x.
138 +*/
139 +#include <getopt.h>
140 +#include <stdio.h>
141 +#include <string.h>
142 +
143 +#include <iptables.h>
144 +#include <linux/netfilter_ipv4/ip_tables.h>
145 +
146 +static void libipt_delude_help(void)
147 +{
148 +       printf("DELUDE takes no options\n");
149 +       return;
150 +}
151 +
152 +static int libipt_delude_parse(int c, char **argv, int invert,
153 +    unsigned int *flags, const struct ipt_entry *entry,
154 +    struct ipt_entry_target **target)
155 +{
156 +       return 0;
157 +}
158 +
159 +static void libipt_delude_check(unsigned int flags)
160 +{
161 +       return;
162 +}
163 +
164 +static void libipt_delude_print(const struct ipt_ip *ip,
165 +    const struct ipt_entry_target *target, int numeric)
166 +{
167 +       return;
168 +}
169 +
170 +static void libipt_delude_save(const struct ipt_ip *ip,
171 +    const struct ipt_entry_target *target)
172 +{
173 +       return;
174 +}
175 +
176 +static struct option libipt_delude_opts[] = {
177 +       {NULL},
178 +};
179 +
180 +static struct iptables_target libipt_delude_info = {
181 +       .name          = "DELUDE",
182 +       .version       = IPTABLES_VERSION,
183 +       .size          = IPT_ALIGN(0),
184 +       .userspacesize = IPT_ALIGN(0),
185 +       .help          = libipt_delude_help,
186 +       .parse         = libipt_delude_parse,
187 +       .final_check   = libipt_delude_check,
188 +       .print         = libipt_delude_print,
189 +       .save          = libipt_delude_save,
190 +       .extra_opts    = libipt_delude_opts,
191 +};
192 +
193 +static __attribute__((constructor)) void libipt_delude_init(void)
194 +{
195 +       register_target(&libipt_delude_info);
196 +       return;
197 +}
198 diff -ruN iptables-1.3.5.orig/extensions/libipt_portscan.c iptables-1.3.5/extensions/libipt_portscan.c
199 --- iptables-1.3.5.orig/extensions/libipt_portscan.c    1970-01-01 01:00:00.000000000 +0100
200 +++ iptables-1.3.5/extensions/libipt_portscan.c 2007-01-09 16:05:14.228187134 +0100
201 @@ -0,0 +1,129 @@
202 +/*
203 +    portscan match for iptables
204 +
205 +    Copyright © Jan Engelhardt <jengelh [at] gmx de>, 2006 - 2007
206 +    released under the terms of the GNU General Public
207 +    License version 2.x and only versions 2.x.
208 +*/
209 +#include <stdio.h>
210 +#include <string.h>
211 +#include <stdlib.h>
212 +#include <getopt.h>
213 +
214 +#include <iptables.h>
215 +#include <linux/netfilter_ipv4/ip_tables.h>
216 +#include <linux/netfilter/xt_portscan.h>
217 +
218 +static void libipt_portscan_help(void)
219 +{
220 +       printf(
221 +               "portscan match v%s options:\n"
222 +               "(Combining them will make them match by OR-logic)\n"
223 +               "  --stealth    Match TCP Stealth packets\n"
224 +               "  --synscan    Match TCP SYN scans\n"
225 +               "  --cnscan     Match TCP Connect scans\n"
226 +               "  --grscan     Match Banner Grabbing scans\n",
227 +               IPTABLES_VERSION);
228 +       return;
229 +}
230 +
231 +static void libipt_portscan_mtinit(struct ipt_entry_match *match,
232 +    unsigned int *nfcache)
233 +{
234 +       /* Cannot cache this */
235 +       *nfcache |= NFC_UNKNOWN;
236 +       return;
237 +}
238 +
239 +static int libipt_portscan_parse(int c, char **argv, int invert,
240 +    unsigned int *flags, const struct ipt_entry *entry, unsigned int *nfc,
241 +    struct ipt_entry_match **match)
242 +{
243 +       struct xt_portscan_info *info = (void *)((*match)->data);
244 +
245 +       switch(c) {
246 +               case 'c':
247 +                       info->match_cn = 1;
248 +                       return 1;
249 +               case 'g':
250 +                       info->match_gr = 1;
251 +                       return 1;
252 +               case 's':
253 +                       info->match_syn = 1;
254 +                       return 1;
255 +               case 'x':
256 +                       info->match_stealth = 1;
257 +                       return 1;
258 +               default:
259 +                       return 0;
260 +       }
261 +}
262 +
263 +static void libipt_portscan_check(unsigned int flags)
264 +{
265 +       return;
266 +}
267 +
268 +static void libipt_portscan_print(const struct ipt_ip *ip,
269 +    const struct ipt_entry_match *match, int numeric)
270 +{
271 +       const struct xt_portscan_info *info = (const void *)(match->data);
272 +       const char *s = "";
273 +
274 +       printf("portscan ");
275 +       if(info->match_stealth) {
276 +               printf("STEALTH");
277 +               s = ",";
278 +       }
279 +       if(info->match_syn) {
280 +               printf("%sSYNSCAN", s);
281 +               s = ",";
282 +       }
283 +       if(info->match_cn) {
284 +               printf("%sCNSCAN", s);
285 +               s = ",";
286 +       }
287 +       if(info->match_gr)
288 +               printf("%sGRSCAN", s);
289 +       printf(" ");
290 +       return;
291 +}
292 +
293 +static void libipt_portscan_save(const struct ipt_ip *ip,
294 +    const struct ipt_entry_match *match)
295 +{
296 +       const struct xt_portscan_info *info = (const void *)(match->data);
297 +       if(info->match_stealth) printf("--stealth ");
298 +       if(info->match_syn)     printf("--synscan ");
299 +       if(info->match_cn)      printf("--cnscan ");
300 +       if(info->match_gr)      printf("--grscan ");
301 +       return;
302 +}
303 +
304 +static struct option libipt_portscan_opts[] = {
305 +       {"stealth", 0, NULL, 'x'},
306 +       {"synscan", 0, NULL, 's'},
307 +       {"cnscan",  0, NULL, 'c'},
308 +       {"grscan",  0, NULL, 'g'},
309 +       {NULL},
310 +};
311 +
312 +static struct iptables_match libipt_portscan_info = {
313 +       .name          = "portscan",
314 +       .version       = IPTABLES_VERSION,
315 +       .size          = IPT_ALIGN(sizeof(struct xt_portscan_info)),
316 +       .userspacesize = IPT_ALIGN(sizeof(struct xt_portscan_info)),
317 +       .help          = libipt_portscan_help,
318 +       .init          = libipt_portscan_mtinit,
319 +       .parse         = libipt_portscan_parse,
320 +       .final_check   = libipt_portscan_check,
321 +       .print         = libipt_portscan_print,
322 +       .save          = libipt_portscan_save,
323 +       .extra_opts    = libipt_portscan_opts,
324 +};
325 +
326 +static __attribute__((constructor)) void libipt_portscan_init(void)
327 +{
328 +       register_match(&libipt_portscan_info);
329 +       return;
330 +}
331 diff -ruN iptables-1.3.5.orig/extensions/.portscan-test iptables-1.3.5/extensions/.portscan-test
332 --- iptables-1.3.5.orig/extensions/.portscan-test       1970-01-01 01:00:00.000000000 +0100
333 +++ iptables-1.3.5/extensions/.portscan-test    2007-01-09 16:05:14.228187134 +0100
334 @@ -0,0 +1,2 @@
335 +#!/bin/sh
336 +[ -f "$KERNEL_DIR/include/linux/netfilter/xt_portscan.h" ] && echo "portscan";