(Paulo Bruck) Bug fix for --ulog-prefix option
[fwsnort.git] / ChangeLog
1 fwsnort-1.6.5 (//2014):
2     - (Paulo Bruck) Submitted a patch to fix a bug in fwsnort usage of the
3       iptables --ulog-prefix option (an invalid quote was being used previous
4       to the fix).
5
6 fwsnort-1.6.4 (02/02/2014):
7     - Bug fix for vulnerability CVE-2014-0039 reported by Murray McAllister of
8       the Red Hat Security Team in which an attacker-controlled fwsnort.conf
9       file could be read by fwsnort when not running as root.  This was caused
10       by fwsnort reading './fwsnort.conf' when not running as root and when a
11       path to the config file was not explicitly set with -c on the command
12       line.  This behavior has been changed to require the user to specify a
13       path to fwsnort.conf with -c when not running as root.
14     - Switch fwsnort.sh iptables-restore exec() strategy to leverage 'cat'
15       against fwsnort.save file (fixes CentOS deployments).
16     - Updated to bundle the latest Emerging Threats rule set.
17
18 fwsnort-1.6.3 (12/21/2012):
19     - Bug fix to ensure that !, <, >, and = chars in content strings are
20       converted to the appropriate hex equivalents.  All content strings with
21       characters outside of [A-Za-z0-9] are now converted to hex-string format
22       in their entirety.  This should also fix an issue that results in the
23       following error when running /var/lib/fwsnort/fwsnort.sh:
24
25         Using intrapositioned negation (`--option ! this`) is deprecated in
26         favor of extrapositioned (`! --option this`).
27         Bad argument `bm'
28         Error occurred at line: 64
29         Try `iptables-restore -h' or 'iptables-restore --help' for more
30         information.
31             Done.
32
33     - Bug fix to set default max string length in --no-ipt-test mode where
34       iptables capabilities are not tested.
35     - (Andrew Merenbach) Bug fix to properly honor --exclude-regex filtering
36       option.
37     - Added fwsnort test suite to the test/ directory.  This mimics the test
38       suites from the psad and fwknop projects, and it designed to examine
39       many of the run time results of fwsnort.
40     - Added the ability to easily revert the fwsnort policy back to the
41       original iptables policy with "/var/lib/fwsnort/fwsnort.sh -r".  Note
42       that this reverts back to the policy as it was when fwsnort itself was
43       executed.
44     - Implemented a single unified function for iptables match parameter
45       length testing, and optimized to drastically reduce run time for iptables
46       capabilities checks (going from over 20 seconds to less than one second
47       in some cases).
48     - (Dwight Davis) Contributed patches for several bugs including not
49       handling --exclude-regex properly, not ignoring the deleted.rules file,
50       not handling --strict mode operations correctly, and more.  These issues
51       and the corresponding patch were originally reported here:
52         http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=693000
53     - Bug fix for Snort rules with HOME_NET(any) -> EXTERNAL_NET(any) to
54       ensure they go into the OUTPUT chain instead of the INPUT chain.  This
55       bug was reported by Dwight Davis.
56     - Updated to bundle the latest Emerging Threats rule set.
57
58 fwsnort-1.6.2 (04/28/2012):
59     - Switched --no-ipt-sync to default to not syncing with the iptables policy.
60       By default fwsnort attempts to match translated Snort rules to the
61       running iptables policy, but this is tough to do well because iptables
62       policies can be complex.  And, before fwsnort switched to the
63       iptables-save format for instantiating the policy, a large set of
64       translated rules could take a really long time to make active within the
65       kernel.  Finally, many Snort rules restrict themselves to established TCP
66       connections anyway, and if a restrictive policy doesn't allow connections
67       to get into the established state for some port let's say, then there is
68       little harm in having translated Snort rules for this port.  Some kernel
69       memory would be wasted (small), but no performance would be lost since
70       packets won't be processed against these rules anyway.  The end result is
71       that the default behavior is now to not sync with the local iptables
72       policy in favor of translating and instantiating as many rules as
73       possible.
74     - Replaced Net::IPv4Addr with the excellent NetAddr::IP module which has
75       comprehensive support for IPv6 address network parsing and comparisons.
76     - Moved the fwsnort.sh script and associated files into the
77       /var/lib/fwsnort/ directory.  This was suggested by Peter Vrabec.
78     - Bug fix for recent versions of iptables (such as 1.4.12) where the icmp
79       match requires --icmp-type to be set - some Snort rules look for a string
80       to match in icmp traffic, but don't also specify an icmp type.
81     - Bug fix for 'qw(...) usage as parenthesis' warnings for perl > 5.14
82     - Removed the ExtUtils::MakeMaker RPM build requirement from the
83       fwsnort.spec file.  This is a compromise which will allow the fwsnort RPM
84       to be built even if RPM dosen't or can't see that ExtUtils::MakeMaker is
85       installed - most likely it will build anyway.  If it doesn't, there are
86       bigger problems since fwsnort is written in perl.  If you want to build
87       the fwsnort RPM with a .spec file that requires ExtUtils::MakeMaker, then
88       use the "fwsnort-require-makemaker.spec" file that is bundled in the
89       fwsnort sources.
90
91 fwsnort-1.6.1 (11/01/2011):
92     - (Kim Hagen) submitted a patch for a bug in fwsnort-1.6 where the fwsnort
93       policy in iptables-save format could not be loaded whenever iptables-save
94       put the nat table output after the filter table output.  In this case,
95       fwsnort would fail with an error like the following:
96
97         Couldn't load target
98         `FWSNORT_FORWARD_ESTAB':/lib/xtables/libipt_FWSNORT_FORWARD_ESTAB.so:
99         cannot open shared object file: No such file or directory
100
101       fwsnort now invokes 'iptables-save -t filter' in order to ensure that
102       ordering issues do not affect how fwsnort builds its translated rule set.
103     - Bug fix to ensure that fwsnort does not attempt to re-order pattern
104       matches for patterns that have a relative match requirement.  For non-
105       relative matches fwsnort re-orders pattern matches based on the pattern
106       length, reasoning that the longest pattern should be processed first for
107       better performance.  The usage of the fast_pattern keyword give the user
108       explicit control over this.  Here is a Snort rule that is now properly
109       handled by fwsnort (references removed):
110
111        alert tcp $EXTERNAL_NET $HTTP_PORTS -> $HOME_NET any (msg:"ET WEB_CLIENT
112        Possible Adobe Reader and Acrobat Forms Data Format Remote Security
113        Bypass Attempt"; flow:established,to_client; file_data; content:"%FDF-";
114        depth:300; content:"/F(JavaScript|3a|"; nocase; distance:0;
115        classtype:attempted-user; sid:2010664; rev:8;)
116
117       Before this change, fwsnort translated this rule as:
118
119       $IPTABLES -A FWSNORT_FORWARD_ESTAB -p tcp -m tcp --sport 80 -m string
120       --hex-string "/F(JavaScript|3a|" --algo bm --from 69 --icase -m string
121       --hex-string "%FDF|2d|" --algo bm --to 364 -m comment --comment
122       "sid:2010664; msg:ET WEB_CLIENT Possible Adobe Reader and Acrobat Forms
123       Data Format Remote Security Bypass Attempt; classtype:attempted-user;
124       rev:8; FWS:1.6;" -j LOG --log-ip-options --log-tcp-options --log-prefix
125       "SID2010664 ESTAB "
126
127       Note that in the above rule, the "/F(JavaScript|3a|" pattern was switched
128       to be evaluated first even though it is a relative match to the previous
129       pattern in the original Snort rule.  After this change, fwsnort translates
130       this rule as:
131
132       $IPTABLES -A FWSNORT_FORWARD_ESTAB -p tcp -m tcp --sport 80 -m string
133       --hex-string "%FDF|2d|" --algo bm --to 364 -m string --hex-string
134       "/F(JavaScript|3a|" --algo bm --from 69 --icase -m comment --comment
135       "sid:2010664; msg:ET WEB_CLIENT Possible Adobe Reader and Acrobat Forms
136       Data Format Remote Security Bypass Attempt; classtype:attempted-user;
137       rev:8; FWS:1.6;" -j LOG --log-ip-options --log-tcp-options --log-prefix
138       "SID2010664 ESTAB "
139
140     - Updated to the latest Emerging Threats rule set.
141
142 fwsnort-1.6 (07/28/2011):
143     - Fixed the --ipt-apply functionality - the variable that held the
144       fwsnort.sh path was not initialized properly prior to this change.
145     - Added the --Conntrack-state argument to specify a conntrack state
146       in place of the "established" state that commonly accompanies the Snort
147       "flow" keyword.  By default, fwsnort uses the conntrack state of
148       "ESTABLISHED" for this.  In certain corner cases, it might be useful to
149       use "ESTABLISHED,RELATED" instead to apply application layer inspection
150       to things like ICMP port unreachable messages that are responses to real
151       attempted communications.  (Need to add UDP tracking for the _ESTAB
152       chains for this too - coming soon.)
153     - Recent releases of iptables and the Linux kernel support matching on
154       connection state via the conntrack modules and the --ctstate switch.
155       Added a capabilities test for this, and will fall back to using the state
156       match if the conntrack module is not available.
157     - Bugfix to ensure the iptables log prefixes built by fwsnort are not
158       longer than those allowed by the running iptables firewall.  This is
159       usually a total of 29 characters, but fwsnort now dynamically figures out
160       this value.
161     - Bugfix for --ipt-list and --ipt-flush to ensure that the proper iptables
162       binary path is chosen.  These args failed without this because the
163       iptables binary was not set.
164
165 fwsnort-1.5 (01/08/2011):
166     - Major update to use the iptables-save format instead of the older
167       strategy of always just executing iptables commands directly (which was
168       very flow for large fwsnort policies).  The /etc/fwsnort/fwsnort.sh
169       script now just executes:
170
171         /sbin/iptables-restore < /etc/fwsnort/fwsnort.save
172
173       All fwsnort rules are now placed in the /etc/fwsnort/fwsnort.save file,
174       but the older fwsnort.sh output (for the individual commands version)
175       is still available at /etc/fwsnort/fwsnort_iptcmds.sh.  This
176       functionality extends to ip6tables policies as well.  The fwsnort man
177       page explain this in better detail:
178
179       "As of fwsnort-1.5 all iptables rules built by fwsnort are written out
180       to the /etc/fwsnort/fwsnort.save file in iptables-save format.  This
181       allows a long fwsnort policy (which may contain thousands of iptables
182       rules translated from a large Snort signature set) to be quickly
183       instantiated via the "iptables-restore" command.  A wrapper script
184       /etc/fwsnort/fwsnort.sh is also written out to make this easy.  Hence,
185       the typical work flow for fwsnort is to: 1) run fwsnort, 2) note the
186       Snort rules that fwsnort was able to successfully translate (the number
187       of such rules is printed to stdout), and then 3) execute the
188       /etc/fwsnort/fwsnort.sh wrapper script to instantiate the policy in the
189       running kernel."
190
191     - Added the --rules-url argument so that the URL for updating the
192       Emerging Threats rule set can be specified from the command line.  The
193       default is:
194
195         http://rules.emergingthreats.net/open/snort-2.9.0/emerging-all.rules
196
197     - Updated to automatically check for the maximum length string that the
198       string match supports, and this is used to through out any Snort rules
199       with content matches longer than this length.
200     - Updated the iptables capabilities testing routines to add and delete
201       testing rules to/from the custom chain 'FWS_CAP_TEST'.  This maintains a
202       a cleaner separation between fwsnort and any existing iptables policy
203       even during the capabilities testing phase.
204     - Added the --ipt-check-capabilities argument to have fwsnort test the
205       capabilities of the local iptables firewall and exit.
206     - Added the --string-match-alg argument to allow the string matching
207       algorithm used by fwsnort to be specified from the command line.  The
208       default algorithm is 'bm' for 'Boyer-Moore', but 'kmp' may also be
209       specified (short for the 'Knuth–Morris–Pratt' algorithm).
210     - Updated to the latest complete rule set from Emerging Threats (see
211       http://www.emergingthreats.net/).
212
213 fwsnort-1.1 (01/05/2010):
214     - Added the ability to build an fwsnort policy that utilizes ip6tables
215       instead of iptables.  This allows fwsnort filtering and altering
216       capabilities to apply to IPv6 traffic instead of just IPv4 traffic.  To
217       enable ip6tables usage, use the "-6" or "--ip6tables" command line
218       arguments.
219     - Added the --include-perl-triggers command line argument so that
220       translated Snort rules can easily be tested.  This argument instructs
221       fwsnort to include 'perl -e print ... ' commands as comments in the
222       /etc/fwsnort/fwsnort.sh script, and these commands can be combined
223       with netcat to send payloads across the wire that match Snort rules.
224     - Updated fwsnort to create logs in the /var/log/fwsnort/ directory
225       instead of directly in the /var/log/ directory.  The path is controlled
226       by a new variable 'LOG_FILE' in the /etc/fwsnort/fwsnort.conf file.
227     - Added several variables in /etc/fwsnort/fwsnort.conf to control paths
228       to everything from the config file to the snort rules path.  Coupled
229       with this is the ability to create variables within path components and
230       fwsnort will expand them (e.g. 'CONF_DIR /etc/fwsnort;
231       CONF_FILE $CONF_DIR/fwsnort.conf').
232     - Added --Last-cmd arg so that it is easy to rebuild the fwsnort.sh script
233       with the same command line args as the previous execution.
234
235 fwsnort-1.0.6 (05/30/2009):
236     - (Franck Joncourt) Updated fwsnort to use the "! <option> <arg>" syntax
237       instead of the older "<option> ! <arg>" for the iptables command line.
238     - (Franck Joncourt) For the --hex-string and --string matches, if the
239       argument exceeds 128 bytes (iptables 1.4.2) then iptables fails with an
240       error "iptables v1.4.2: STRING too long".  Fixes this with a patch that
241       adds a new variable in fwsnort.conf "MAX_STRING_LEN", so that the size of
242       the content can be limited. If the content (null terminated string) is
243       more than MAX_STRING_LEN chars, fwsnort throws the rule away.
244     - Bug fix to allow fwsnort to properly translate snort rules that have
245       "content" fields with embedded escaped semicolons (e.g. "\;").  This
246       allows fwsnort to translate about 58 additional rules from the Emerging
247       Threats rule set.
248     - Bug fix to allow case insensitive matches to work properly with the
249       --include-re-caseless and --exclude-re-caseless arguments.
250     - Bug fix to move the 'rawbytes' keyword to the list of keywords that are
251       ignored since iptables does a raw match anyway as it doesn't run any
252       preprocessors in the Snort sense.
253     - Added the --snort-rfile argument so that a specific Snort rules file (or
254       list of files separated by commas) is parsed.
255     - Added a small hack to choose the first port from a port list until the
256       iptables 'multiport' match is supported.
257     - Updated to consolidate spaces in hex matches in the fwsnort.sh script
258       since the spaces are not part of patterns to be searched anyway.
259     - Updated to the latest complete rule set from Emerging Threats (see
260       http://www.emergingthreats.net/).
261     - Added the "fwsnort-nobuildreqs.spec" file for building fwsnort on
262       systems (such as Debian) that do not install/upgrade software via RPM.
263       This file omits the "BuildRequires: perl-ExtUtils-MakeMaker" directive,
264       and this fixes errors like the following on an Ubuntu system when
265       building fwsnort with rpmbuild:
266
267       rpm: To install rpm packages on Debian systems, use alien. See README.Debian.
268       error: cannot open Packages index using db3 - No such file or directory (2)
269       error: cannot open Packages database in /var/lib/rpm
270
271 fwsnort-1.0.5 (08/21/2008):
272     - Replaced the bleeding-all.rules file with the emerging-all.rules file.
273       This is because Matt Jonkman now releases his rule sets at
274       http://www.emergingthreats.net/
275     - Restructured perl module paths to make it easy to introduce a "nodeps"
276       distribution of fwsnort that does not contain any perl modules.  This
277       allows better integration with systems that already have all necessary
278       modules installed (including the IPTables::ChainMgr and IPTables::Parse
279       modules).  The main driver for this work is to make all cipherdyne.org
280       projects easily integrated with distributions based on Debian, and
281       Franck Joncourt has been instrumental in making this process a reality.
282       All perl modules are now placed within the "deps" directory, and the
283       install.pl script checks to see if this directory exists - a separate
284       fwsnort-nodeps-<ver> tarball will be distributed without this directory.
285       The Debian package for fwsnort can then reference the -nodeps tarball,
286       and a new "fwsnort-nodeps.spec" file has been added to build an RPM from
287       the fwsnort sources that does not install any perl modules.
288     - Updated to import perl modules from /usr/lib/fwsnort, but only if this
289       path actually exists in the filesystem.  This is similar to the strategy
290       implemented by psad.  A new variable FWSNORT_LIBS_DIR was added to the
291       fwsnort.conf to support this.
292     - Added support for multiple Snort rule directories as a comma-separated
293       list for the argument to --snort-rdir.
294     - Moved 'threshold' to the unsupported list since there will be several
295       signatures that use this feature to detect the Dan Kaminsky DNS attack,
296       and fwsnort does not yet support the usage of the iptables --limit
297       match.
298
299 fwsnort-1.0.4 (01/22/2008):
300     - (Grant Ferley) Submitted patch to exclude loopback interfaces from
301       iptables allow rules parsing.  This behavior can be reversed with the
302       existing --no-exclude-loopback command line argument.
303     - (Grant Ferley) Submitted patch to IPTables::Parse to take into account
304       iptables policy output that contains "0" instead of "all" to represent
305       any protocol.
306     - (Grant Ferley) Submitted patch to IPTables::Parse to set sport and dport
307       to '0:0' if the protocol is 'all'.
308     - Bugfix to allow negated networks to be specified within iptables allow
309       rules or within the fwsnort.conf file.
310     - Updated install.pl to set the LC_ALL environmental variable to "C". This
311       should fix potential locale problems (this fix was borrowed from the
312       fwknop project).
313
314 fwsnort-1.0.3 (11/22/2007):
315     - Added --include-re-caseless and --exclude-re-caseless options to have
316       --include-regex and --exclude-regex options match case insensitively.
317     - Major signature update from Bleeding Threats. This update includes a
318       large number of new signatures with PCRE statements, with an emphasis on
319       detecting SQL injection attacks directed at internal webservers from
320       external sources.
321     - Added the ability to interpret PCRE statements that include simple
322       string matches separated by ".*" and ".+" as multiple iptables string
323       matches. The only negative consequence in terms of signature detection
324       is that ordering is not preserved; that is, the PCRE "/UNION.+SELECT/"
325       would only match a packet that contains "UNION" followed by "SELECT",
326       whereas an iptables rule that uses a string match for UNION and a
327       separate string match for SELECT would match a packet that contains both
328       strings but in reverse. Typically this is not a huge concern, and the
329       PCRE translation can be disabled with a new option --no-pcre.
330     - Added asn1 keyword to unsupported list.
331
332 fwsnort-1.0.2 (08/26/2007):
333     - Bugfix to make sure to add in header lengths for depth and offset values
334       since the string match extension compares bytes from the start of the
335       data link header.
336
337 fwsnort-1.0.1 (08/26/2007):
338     - Bugfix for ipt_rule_test() function name.
339     - Added the ability to automatically resolve command paths if any commands
340       cannot be found at the locations specified in the fwsnort.conf file.
341
342 fwsnort-1.0 (04/19/2007):
343     - Major update to include support for the NFQUEUE and QUEUE targets with
344       new command line options --NFQUEUE and --QUEUE.  This changes the
345       default LOG target to the NFQUEUE or QUEUE targets instead, and at the
346       same time builds a parallel Snort rule set in the
347       /etc/fwsnort/snort_rules_queue directory.  Every Snort rule in this
348       directory has at least one "content" keyword, which fwsnort uses in the
349       resulting iptables policy.  This policy only sends those packets to
350       snort_inline via the NFQUEUE or QUEUE target that match a content field
351       within some Snort rule.  The end result is that snort_inline should run
352       faster because the vast majority of packets (which are not malicious)
353       are processed via the Linux kernel without ever having to be sent to
354       userspace for analysis.  There is a tradeoff here in terms of attack
355       detection; snort_inline does not receive all packets associated with a
356       stream, so it cannot detect attacks quite as effectively (snort_inline
357       does not have an opportunity to look at reassembled buffers).  However,
358       this trade off may be acceptable for large sites where performance is
359       more important.
360     - Bug fix to remove any existing jump rules from the built-in INPUT,
361       OUTPUT, and FORWARD chains before creating a new jump rules.  This
362       allows the fwsnort.sh script to be executed multiple times without
363       creating a new jump rule into the fwsnort chains for each execution.
364     - Added the -X command line argument to allow fwsnort to delete all of
365       the fwsnort chains; this emulates the iptables command line argument
366       of the same name.
367     - Minor output enhancements and bugfixes to give more insight into the
368       translation process.  For example, if fwsnort is run in --snort-sid
369       mode but is unable to translate the specified signatures, the user is
370       notified.  Also, any existing /etc/fwsnort/fwsnort.sh script is not
371       archived and erased until fwsnort is actually going to write a new one.
372     - Added sid values to iptables comment match string.
373     - Bugfix for iptables string match --from and --to values to skip past
374       packet headers.  This is an approximation until a new --payload option
375       can be added to the string match extension.
376     - Added a single iptables rule testing API internally within fwsnort;
377       this adds a measure of consistency and removes some duplicate code.
378     - Added fwsnort mailing list at SourceForge.
379
380 fwsnort-0.9.0 (03/22/2007):
381     - Added support for multiple content matches since this is supported by
382       iptables.  This made a 10% increase in the fwsnort translation rate -
383       about 60% of all Snort-2.3.3 rules can be translated now.
384     - Added emulation for distance and within from previous content match
385       based on --from and --to (string match extension) and the length of
386       the previous pattern.
387     - Added the ability to include the Snort "msg", "classtype", "reference",
388       "priority", and "rev" fields in each iptables rule with the comment
389       match.  This can be disabled with a new command line argument
390       --no-ipt-comments.  The fwsnort version is also included within this
391       string.
392     - Added the ability to include the iptables rule number for each rule in
393       the fwsnort chains.  This is useful to easily know which iptables rule
394       is being triggered by network traffic (so it can be disabled if
395       necessary).  This can be disabled with --no-ipt-rule-nums.
396     - Added the --include-regex and --exclude-regex command line arguments.
397       These arguments allow rules to be included/excluded based on a regular
398       expression supplied on the command line.
399     - Updated to include the original Snort rule as a comment within the
400       fwsnort.sh script without having to use --verbose.
401     - Bugfix to force install of IPTables::Parse since it had been updated in
402       the fwsnort-0.8.2 release.
403     - Changed the IGNORE_ADDR variable to WHITELIST since this name better
404       describes the actual function of this var.  Updated to allow multiple
405       WHITELIST lines.
406     - Added the BLACKLIST variable to allow a true blacklist to be
407       instantiated with either the DROP or REJECT targets.  The syntax for the
408       BLACKLIST variable is "BLACKLIST  <ip or network>  <target>", where
409       "target" is either "DROP" or "REJECT".
410     - Added -F and -L command line arguments to flush and list iptables rules.
411       This is similar to the iptables command line args of the same names.
412     - Bugfix to ensure that traffic directed into the INPUT or coming from the
413       OUTPUT chains is treated as going toward or originating from the
414       HOME_NET.  After all the HOME_NET variable may contain an internal
415       network but omit the IP assigned to an external interface on the
416       firewall.
417     - Added "--log-ip-options" and "--log-tcp-options" to fwsnort LOG rules by
418       default (in the generated fwsnort.sh script).  This can be disabled with
419       --no-log-ip-opts and --no-log-tcp-opts arguments on the fwsnort command
420       line.
421     - Added the ability to include --log-tcp-sequence to LOG rules in
422       fwsnort.sh with a new argument --ipt-log-tcp-seq on the fwsnort command
423       line.
424     - Updated to handle negative string matches with "--string ! <string>".
425     - Updated to output all unsupported options of the /var/log/fwsnort.log
426       file to assist in the development of addition keyword emulation.
427
428 fwsnort-0.8.2 (02/17/2007):
429     - Updated to newer IPTables::Parse module that uses the array of hash
430       references method of returning iptables policy data.
431     - Added --Dump-ipt and --Dump-snort rules to allow iptables policy and
432       Snort rules to be dumped to STDOUT.
433     - Added bleeding-all.rules file from http://www.bleedingsnort.com/
434     - Added patches/bm_goodshift_fix.patch patch file that fixes an
435       initialization bug in the Boyer-Moore text search implementation in the
436       kernel (linux-2.6.x/lib/ts_bm.c) which caused slightly repetitive
437       patterns to only match at specific offsets with the string match
438       extension.
439     - Bugfix to ensure that a depth cannot be less that an offset (these
440       translate to the --to and --from command line arguments to iptables).
441     - Bugfix to escape '$' chars in iptables search strings.
442     - Added cd_rpmbuilder to make it easy to automatically build RPM files of
443       fwsnort.
444     - Added support for the iptables OUTPUT chain.
445     - Added the ChangeLog.svn file so that all of the changed files and
446       corresponding svn commit messages can be viewed (this file is built from
447       release to release).
448
449 fwsnort-0.8.1 (11/11/2005):
450     - Updated to use the string match extension "--algo bm" argument if
451       fwsnort is being run on a 2.6.14 (or greater) kernel.
452     - Updated to handle the Snort "offset" and "depth" keywords via the
453       --from and --to options to the string match extension in the 2.6.14
454       kernel.
455     - Created RPM package of fwsnort.
456     - Minor man page updates.
457
458 fwsnort-0.8.0 (07/11/2005):
459     - Completely re-structured fwsnort w.r.t. how it creates Netfilter
460       chains.  There are no longer any per-interface chains (this
461       greatly simplifies the Netfilter chains).
462     - Added three new chains "FWSNORT_INPUT_ESTAB", "FWSNORT_OUTPUT_ESTAB"
463       and "FWSNORT_FORWARD_ESTAB" to which tcp connections in the
464       ESTABLISHED state are jumped.  This allows fwsnort to use the
465       Netfilter tcp connection tracking mechanism to ignore Stick and Snot
466       style attacks (similar to the flow:established Snort rule option).
467     - Added true variable resolution (i.e. HTTP_SERVERS -> HOME_NET -> any)
468       for the Snort rule header.  This directly emulates the behavior of
469       the Snort IDS.
470     - Added IP protocol support in the translation of the Snort rule
471       header.  The Snort rule translation rate is now at about 53% for
472       Snort-2.3.
473     - Bugfix for ipopts Snort option (several arguments are not supported
474       by the ipv4options extension).
475     - Better tests for Netfiler TTL, TOS, and ipv4options matches.
476     - Replaced IGNORE_IP and IGNORE_NET keywords with single IGNORE_ADDR
477       keywork in fwsnort.conf.
478     - Updated to correctly handle ICMP type and code rules (itype and
479       icode Snort options) via the "--icmp-types type/code" convention.
480     - Added support for emulating the dsize Snort option through the use
481       of the Netfilter length match.
482     - Changed --type argument to --include-types and added list support
483       so it accepts things like "chat,ddos".  Also added --exclude-types
484       command line argument.
485     - Added support for multiple sid's (as a comma separated list) in
486       --snort-sids argument.  Also added --exclude-sids argument to remove
487       a list of sids from translation.
488     - Added support for the replace Snort option (originally from the
489       Snort_inline project).  The requires the replace string patch.
490     - Added support for restricting jump rules to a list of interfaces
491       via the --restrict-intf argument.
492     - Added kernel patch to extend the maximum packet length that the
493       string match extension will attempt to search from 1024 bytes to
494       2048 bytes (requires a kernel re-compile of course).
495     - Added DRP and REJ strings to logging prefix if --ipt-drop or
496       --ipt-reject is specified.
497     - Added snortspoof.pl, which is a simple perl script that emulates
498       the Stick and Snot tools.
499
500 fwsnort-0.7.0 (06/05/2005):
501     - Added support for the Snort pass action by using the ACCEPT target.
502     - Added support for the Snort log action by using the ULOG target
503       (which can then log the packet via the pcap writer).
504     - Added support for all fwsnort alerts to be logged via the ULOG
505       target instead of the LOG target.
506     - Added support for the "resp" keyword to allow it to drive the
507       Netfilter argument to the REJECT target.
508     - Added "pcre" to the unsupported list... this knocks the fwsnort
509       translation rate down to about 50% for Snort-2.3 rules (pcre is
510       heavily utilized).
511     - Added "priority" and "rev" to comment lines.
512
513 fwsnort-0.6.5 (03/20/2005):
514     - Updated to not attempt to download Snort rules from snort.org
515       because the rules are no longer available for automatic downloads
516     - Changed the install.pl script and the --update-rules mode for
517       fwsnort to download the latest signature set from
518       http://www.bleedingsnort.com/.
519       (Snort.org is now offering pay-service around their rule sets).
520     - Added signature test for the "flowbits" keyword.
521
522 fwsnort-0.6.4 (12/18/2004):
523     - Updated to Snort-2.3 rules.  FWSnort can convert a total of 1710
524       out of 2559 total Snort-2.3 rules.
525     - Updated to new Snort rules download link for --update-rules mode:
526       http://www.snort.org/dl/rules/snortrules-snapshot-CURRENT.tar.gz
527     - Updated to standard [+], [-], and [*] prefixes for info, warning
528       and die logging messages.
529     - Added --replace-string patches.
530
531 fwsnort-0.6.3 (04/04/2004):
532     - Added ignore functionality for both IPs and networks
533     - Split --ipt-block into --ipt-drop and --ipt-reject to add DROP
534       or REJECT rules respectively.
535     - Added --add-deleted option to allow rules in the "deleted.rules"
536       file to be added.
537
538 fwsnort-0.6.2 (03/19/2004):
539     - Added --internal-net and --dmz-net options so that internal and
540       dmz networks can be manually specified without having to parse
541       the output of ifconfig.  This is most useful for running fwsnort
542       on a linux system that is acting as a bridge where no ip addresses
543       are assigned to the interfaces.
544     - Bugfix for missing icmp-port-unreachable rejects for UDP packets.
545
546 fwsnort-0.6.1 (02/01/2004):
547     - Bugfix for not adding dmz interface rules to INPUT chain.
548     - Bugfix for not getting the DMZ interface network.
549
550 fwsnort-0.6 (01/04/2004):
551     - Speed increase and disk access decrease by writing iptables
552       commands to the iptables script only after all lines have been
553       generated.
554     - Bugfix for DMZ interface.
555     - Bugfix for multiple ip_proto fields.
556     - Removed the ip protocol as an allowed protocol for translation.
557     - Bugfix for negated port numbers.
558     - Removed "<-" rule direction since not even snort supports this.
559     - Fixed snort rule updates from snort.org.
560
561 fwsnort-0.5 (12/21/2003):
562     - Added "-j REJECT --reject-with tcp-reset" for tcp sessions
563       if the --ipt-block option is specified.
564     - Added ability to download latest snort rules from snort.org.
565     - Added --no-ipt-jumps.
566     - Added better checking for iptables build characteristics such
567       as the LOG target and wether or not the ipv4options extension
568       is compiled in.
569     - Added config preservation code from psad in install.pl.