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