Added the ChangeLog file for 'git log' output.
[fwsnort.git] / ChangeLog.old
1 fwsnort-1.6 (11//2011):
2     - Fixed the --ipt-apply functionality - the variable that held the
3       fwsnort.sh path was not initialized properly prior to this change.
4     - Added the --Conntrack-state argument to specify a conntrack state
5       in place of the "established" state that commonly accompanies the Snort
6       "flow" keyword.  By default, fwsnort uses the conntrack state of
7       "ESTABLISHED" for this.  In certain corner cases, it might be useful to
8       use "ESTABLISHED,RELATED" instead to apply application layer inspection
9       to things like ICMP port unreachable messages that are responses to real
10       attempted communications.  (Need to add UDP tracking for the _ESTAB
11       chains for this too - coming soon.)
12     - Recent releases of iptables and the Linux kernel support matching on
13       connection state via the conntrack modules and the --ctstate switch.
14       Added a capabilities test for this, and will fall back to using the state
15       match if the conntrack module is not available.
16     - Bugfix to ensure the iptables log prefixes built by fwsnort are not
17       longer than those allowed by the running iptables firewall.  This is
18       usually a total of 29 characters, but fwsnort now dynamically figures out
19       this value.
20     - Bugfix for --ipt-list and --ipt-flush to ensure that the proper iptables
21       binary path is chosen.  These args failed without this because the
22       iptables binary was not set.
23
24 fwsnort-1.5 (01/08/2011):
25     - Major update to use the iptables-save format instead of the older
26       strategy of always just executing iptables commands directly (which was
27       very flow for large fwsnort policies).  The /etc/fwsnort/fwsnort.sh
28       script now just executes:
29
30         /sbin/iptables-restore < /etc/fwsnort/fwsnort.save
31
32       All fwsnort rules are now placed in the /etc/fwsnort/fwsnort.save file,
33       but the older fwsnort.sh output (for the individual commands version)
34       is still available at /etc/fwsnort/fwsnort_iptcmds.sh.  This
35       functionality extends to ip6tables policies as well.  The fwsnort man
36       page explain this in better detail:
37
38       "As of fwsnort-1.5 all iptables rules built by fwsnort are written out
39       to the /etc/fwsnort/fwsnort.save file in iptables-save format.  This
40       allows a long fwsnort policy (which may contain thousands of iptables
41       rules translated from a large Snort signature set) to be quickly
42       instantiated via the "iptables-restore" command.  A wrapper script
43       /etc/fwsnort/fwsnort.sh is also written out to make this easy.  Hence,
44       the typical work flow for fwsnort is to: 1) run fwsnort, 2) note the
45       Snort rules that fwsnort was able to successfully translate (the number
46       of such rules is printed to stdout), and then 3) execute the
47       /etc/fwsnort/fwsnort.sh wrapper script to instantiate the policy in the
48       running kernel."
49
50     - Added the --rules-url argument so that the URL for updating the
51       Emerging Threats rule set can be specified from the command line.  The
52       default is:
53
54         http://rules.emergingthreats.net/open/snort-2.9.0/emerging-all.rules
55
56     - Updated to automatically check for the maximum length string that the
57       string match supports, and this is used to through out any Snort rules
58       with content matches longer than this length.
59     - Updated the iptables capabilities testing routines to add and delete
60       testing rules to/from the custom chain 'FWS_CAP_TEST'.  This maintains a
61       a cleaner separation between fwsnort and any existing iptables policy
62       even during the capabilities testing phase.
63     - Added the --ipt-check-capabilities argument to have fwsnort test the
64       capabilities of the local iptables firewall and exit.
65     - Added the --string-match-alg argument to allow the string matching
66       algorithm used by fwsnort to be specified from the command line.  The
67       default algorithm is 'bm' for 'Boyer-Moore', but 'kmp' may also be
68       specified (short for the 'Knuth–Morris–Pratt' algorithm).
69     - Updated to the latest complete rule set from Emerging Threats (see
70       http://www.emergingthreats.net/).
71
72 fwsnort-1.1 (01/05/2010):
73     - Added the ability to build an fwsnort policy that utilizes ip6tables
74       instead of iptables.  This allows fwsnort filtering and altering
75       capabilities to apply to IPv6 traffic instead of just IPv4 traffic.  To
76       enable ip6tables usage, use the "-6" or "--ip6tables" command line
77       arguments.
78     - Added the --include-perl-triggers command line argument so that
79       translated Snort rules can easily be tested.  This argument instructs
80       fwsnort to include 'perl -e print ... ' commands as comments in the
81       /etc/fwsnort/fwsnort.sh script, and these commands can be combined
82       with netcat to send payloads across the wire that match Snort rules.
83     - Updated fwsnort to create logs in the /var/log/fwsnort/ directory
84       instead of directly in the /var/log/ directory.  The path is controlled
85       by a new variable 'LOG_FILE' in the /etc/fwsnort/fwsnort.conf file.
86     - Added several variables in /etc/fwsnort/fwsnort.conf to control paths
87       to everything from the config file to the snort rules path.  Coupled
88       with this is the ability to create variables within path components and
89       fwsnort will expand them (e.g. 'CONF_DIR /etc/fwsnort;
90       CONF_FILE $CONF_DIR/fwsnort.conf').
91     - Added --Last-cmd arg so that it is easy to rebuild the fwsnort.sh script
92       with the same command line args as the previous execution.
93
94 fwsnort-1.0.6 (05/30/2009):
95     - (Franck Joncourt) Updated fwsnort to use the "! <option> <arg>" syntax
96       instead of the older "<option> ! <arg>" for the iptables command line.
97     - (Franck Joncourt) For the --hex-string and --string matches, if the
98       argument exceeds 128 bytes (iptables 1.4.2) then iptables fails with an
99       error "iptables v1.4.2: STRING too long".  Fixes this with a patch that
100       adds a new variable in fwsnort.conf "MAX_STRING_LEN", so that the size of
101       the content can be limited. If the content (null terminated string) is
102       more than MAX_STRING_LEN chars, fwsnort throws the rule away.
103     - Bug fix to allow fwsnort to properly translate snort rules that have
104       "content" fields with embedded escaped semicolons (e.g. "\;").  This
105       allows fwsnort to translate about 58 additional rules from the Emerging
106       Threats rule set.
107     - Bug fix to allow case insensitive matches to work properly with the
108       --include-re-caseless and --exclude-re-caseless arguments.
109     - Bug fix to move the 'rawbytes' keyword to the list of keywords that are
110       ignored since iptables does a raw match anyway as it doesn't run any
111       preprocessors in the Snort sense.
112     - Added the --snort-rfile argument so that a specific Snort rules file (or
113       list of files separated by commas) is parsed.
114     - Added a small hack to choose the first port from a port list until the
115       iptables 'multiport' match is supported.
116     - Updated to consolidate spaces in hex matches in the fwsnort.sh script
117       since the spaces are not part of patterns to be searched anyway.
118     - Updated to the latest complete rule set from Emerging Threats (see
119       http://www.emergingthreats.net/).
120     - Added the "fwsnort-nobuildreqs.spec" file for building fwsnort on
121       systems (such as Debian) that do not install/upgrade software via RPM.
122       This file omits the "BuildRequires: perl-ExtUtils-MakeMaker" directive,
123       and this fixes errors like the following on an Ubuntu system when
124       building fwsnort with rpmbuild:
125
126       rpm: To install rpm packages on Debian systems, use alien. See README.Debian.
127       error: cannot open Packages index using db3 - No such file or directory (2)
128       error: cannot open Packages database in /var/lib/rpm
129
130 fwsnort-1.0.5 (08/21/2008):
131     - Replaced the bleeding-all.rules file with the emerging-all.rules file.
132       This is because Matt Jonkman now releases his rule sets at
133       http://www.emergingthreats.net/
134     - Restructured perl module paths to make it easy to introduce a "nodeps"
135       distribution of fwsnort that does not contain any perl modules.  This
136       allows better integration with systems that already have all necessary
137       modules installed (including the IPTables::ChainMgr and IPTables::Parse
138       modules).  The main driver for this work is to make all cipherdyne.org
139       projects easily integrated with distributions based on Debian, and
140       Franck Joncourt has been instrumental in making this process a reality.
141       All perl modules are now placed within the "deps" directory, and the
142       install.pl script checks to see if this directory exists - a separate
143       fwsnort-nodeps-<ver> tarball will be distributed without this directory.
144       The Debian package for fwsnort can then reference the -nodeps tarball,
145       and a new "fwsnort-nodeps.spec" file has been added to build an RPM from
146       the fwsnort sources that does not install any perl modules.
147     - Updated to import perl modules from /usr/lib/fwsnort, but only if this
148       path actually exists in the filesystem.  This is similar to the strategy
149       implemented by psad.  A new variable FWSNORT_LIBS_DIR was added to the
150       fwsnort.conf to support this.
151     - Added support for multiple Snort rule directories as a comma-separated
152       list for the argument to --snort-rdir.
153     - Moved 'threshold' to the unsupported list since there will be several
154       signatures that use this feature to detect the Dan Kaminsky DNS attack,
155       and fwsnort does not yet support the usage of the iptables --limit
156       match.
157
158 fwsnort-1.0.4 (01/22/2008):
159     - (Grant Ferley) Submitted patch to exclude loopback interfaces from
160       iptables allow rules parsing.  This behavior can be reversed with the
161       existing --no-exclude-loopback command line argument.
162     - (Grant Ferley) Submitted patch to IPTables::Parse to take into account
163       iptables policy output that contains "0" instead of "all" to represent
164       any protocol.
165     - (Grant Ferley) Submitted patch to IPTables::Parse to set sport and dport
166       to '0:0' if the protocol is 'all'.
167     - Bugfix to allow negated networks to be specified within iptables allow
168       rules or within the fwsnort.conf file.
169     - Updated install.pl to set the LC_ALL environmental variable to "C". This
170       should fix potential locale problems (this fix was borrowed from the
171       fwknop project).
172
173 fwsnort-1.0.3 (11/22/2007):
174     - Added --include-re-caseless and --exclude-re-caseless options to have
175       --include-regex and --exclude-regex options match case insensitively.
176     - Major signature update from Bleeding Threats. This update includes a
177       large number of new signatures with PCRE statements, with an emphasis on
178       detecting SQL injection attacks directed at internal webservers from
179       external sources.
180     - Added the ability to interpret PCRE statements that include simple
181       string matches separated by ".*" and ".+" as multiple iptables string
182       matches. The only negative consequence in terms of signature detection
183       is that ordering is not preserved; that is, the PCRE "/UNION.+SELECT/"
184       would only match a packet that contains "UNION" followed by "SELECT",
185       whereas an iptables rule that uses a string match for UNION and a
186       separate string match for SELECT would match a packet that contains both
187       strings but in reverse. Typically this is not a huge concern, and the
188       PCRE translation can be disabled with a new option --no-pcre.
189     - Added asn1 keyword to unsupported list.
190
191 fwsnort-1.0.2 (08/26/2007):
192     - Bugfix to make sure to add in header lengths for depth and offset values
193       since the string match extension compares bytes from the start of the
194       data link header.
195
196 fwsnort-1.0.1 (08/26/2007):
197     - Bugfix for ipt_rule_test() function name.
198     - Added the ability to automatically resolve command paths if any commands
199       cannot be found at the locations specified in the fwsnort.conf file.
200
201 fwsnort-1.0 (04/19/2007):
202     - Major update to include support for the NFQUEUE and QUEUE targets with
203       new command line options --NFQUEUE and --QUEUE.  This changes the
204       default LOG target to the NFQUEUE or QUEUE targets instead, and at the
205       same time builds a parallel Snort rule set in the
206       /etc/fwsnort/snort_rules_queue directory.  Every Snort rule in this
207       directory has at least one "content" keyword, which fwsnort uses in the
208       resulting iptables policy.  This policy only sends those packets to
209       snort_inline via the NFQUEUE or QUEUE target that match a content field
210       within some Snort rule.  The end result is that snort_inline should run
211       faster because the vast majority of packets (which are not malicious)
212       are processed via the Linux kernel without ever having to be sent to
213       userspace for analysis.  There is a tradeoff here in terms of attack
214       detection; snort_inline does not receive all packets associated with a
215       stream, so it cannot detect attacks quite as effectively (snort_inline
216       does not have an opportunity to look at reassembled buffers).  However,
217       this trade off may be acceptable for large sites where performance is
218       more important.
219     - Bug fix to remove any existing jump rules from the built-in INPUT,
220       OUTPUT, and FORWARD chains before creating a new jump rules.  This
221       allows the fwsnort.sh script to be executed multiple times without
222       creating a new jump rule into the fwsnort chains for each execution.
223     - Added the -X command line argument to allow fwsnort to delete all of
224       the fwsnort chains; this emulates the iptables command line argument
225       of the same name.
226     - Minor output enhancements and bugfixes to give more insight into the
227       translation process.  For example, if fwsnort is run in --snort-sid
228       mode but is unable to translate the specified signatures, the user is
229       notified.  Also, any existing /etc/fwsnort/fwsnort.sh script is not
230       archived and erased until fwsnort is actually going to write a new one.
231     - Added sid values to iptables comment match string.
232     - Bugfix for iptables string match --from and --to values to skip past
233       packet headers.  This is an approximation until a new --payload option
234       can be added to the string match extension.
235     - Added a single iptables rule testing API internally within fwsnort;
236       this adds a measure of consistency and removes some duplicate code.
237     - Added fwsnort mailing list at SourceForge.
238
239 fwsnort-0.9.0 (03/22/2007):
240     - Added support for multiple content matches since this is supported by
241       iptables.  This made a 10% increase in the fwsnort translation rate -
242       about 60% of all Snort-2.3.3 rules can be translated now.
243     - Added emulation for distance and within from previous content match
244       based on --from and --to (string match extension) and the length of
245       the previous pattern.
246     - Added the ability to include the Snort "msg", "classtype", "reference",
247       "priority", and "rev" fields in each iptables rule with the comment
248       match.  This can be disabled with a new command line argument
249       --no-ipt-comments.  The fwsnort version is also included within this
250       string.
251     - Added the ability to include the iptables rule number for each rule in
252       the fwsnort chains.  This is useful to easily know which iptables rule
253       is being triggered by network traffic (so it can be disabled if
254       necessary).  This can be disabled with --no-ipt-rule-nums.
255     - Added the --include-regex and --exclude-regex command line arguments.
256       These arguments allow rules to be included/excluded based on a regular
257       expression supplied on the command line.
258     - Updated to include the original Snort rule as a comment within the
259       fwsnort.sh script without having to use --verbose.
260     - Bugfix to force install of IPTables::Parse since it had been updated in
261       the fwsnort-0.8.2 release.
262     - Changed the IGNORE_ADDR variable to WHITELIST since this name better
263       describes the actual function of this var.  Updated to allow multiple
264       WHITELIST lines.
265     - Added the BLACKLIST variable to allow a true blacklist to be
266       instantiated with either the DROP or REJECT targets.  The syntax for the
267       BLACKLIST variable is "BLACKLIST  <ip or network>  <target>", where
268       "target" is either "DROP" or "REJECT".
269     - Added -F and -L command line arguments to flush and list iptables rules.
270       This is similar to the iptables command line args of the same names.
271     - Bugfix to ensure that traffic directed into the INPUT or coming from the
272       OUTPUT chains is treated as going toward or originating from the
273       HOME_NET.  After all the HOME_NET variable may contain an internal
274       network but omit the IP assigned to an external interface on the
275       firewall.
276     - Added "--log-ip-options" and "--log-tcp-options" to fwsnort LOG rules by
277       default (in the generated fwsnort.sh script).  This can be disabled with
278       --no-log-ip-opts and --no-log-tcp-opts arguments on the fwsnort command
279       line.
280     - Added the ability to include --log-tcp-sequence to LOG rules in
281       fwsnort.sh with a new argument --ipt-log-tcp-seq on the fwsnort command
282       line.
283     - Updated to handle negative string matches with "--string ! <string>".
284     - Updated to output all unsupported options of the /var/log/fwsnort.log
285       file to assist in the development of addition keyword emulation.
286
287 fwsnort-0.8.2 (02/17/2007):
288     - Updated to newer IPTables::Parse module that uses the array of hash
289       references method of returning iptables policy data.
290     - Added --Dump-ipt and --Dump-snort rules to allow iptables policy and
291       Snort rules to be dumped to STDOUT.
292     - Added bleeding-all.rules file from http://www.bleedingsnort.com/
293     - Added patches/bm_goodshift_fix.patch patch file that fixes an
294       initialization bug in the Boyer-Moore text search implementation in the
295       kernel (linux-2.6.x/lib/ts_bm.c) which caused slightly repetitive
296       patterns to only match at specific offsets with the string match
297       extension.
298     - Bugfix to ensure that a depth cannot be less that an offset (these
299       translate to the --to and --from command line arguments to iptables).
300     - Bugfix to escape '$' chars in iptables search strings.
301     - Added cd_rpmbuilder to make it easy to automatically build RPM files of
302       fwsnort.
303     - Added support for the iptables OUTPUT chain.
304     - Added the ChangeLog.svn file so that all of the changed files and
305       corresponding svn commit messages can be viewed (this file is built from
306       release to release).
307
308 fwsnort-0.8.1 (11/11/2005):
309     - Updated to use the string match extension "--algo bm" argument if
310       fwsnort is being run on a 2.6.14 (or greater) kernel.
311     - Updated to handle the Snort "offset" and "depth" keywords via the
312       --from and --to options to the string match extension in the 2.6.14
313       kernel.
314     - Created RPM package of fwsnort.
315     - Minor man page updates.
316
317 fwsnort-0.8.0 (07/11/2005):
318     - Completely re-structured fwsnort w.r.t. how it creates Netfilter
319       chains.  There are no longer any per-interface chains (this
320       greatly simplifies the Netfilter chains).
321     - Added three new chains "FWSNORT_INPUT_ESTAB", "FWSNORT_OUTPUT_ESTAB"
322       and "FWSNORT_FORWARD_ESTAB" to which tcp connections in the
323       ESTABLISHED state are jumped.  This allows fwsnort to use the
324       Netfilter tcp connection tracking mechanism to ignore Stick and Snot
325       style attacks (similar to the flow:established Snort rule option).
326     - Added true variable resolution (i.e. HTTP_SERVERS -> HOME_NET -> any)
327       for the Snort rule header.  This directly emulates the behavior of
328       the Snort IDS.
329     - Added IP protocol support in the translation of the Snort rule
330       header.  The Snort rule translation rate is now at about 53% for
331       Snort-2.3.
332     - Bugfix for ipopts Snort option (several arguments are not supported
333       by the ipv4options extension).
334     - Better tests for Netfiler TTL, TOS, and ipv4options matches.
335     - Replaced IGNORE_IP and IGNORE_NET keywords with single IGNORE_ADDR
336       keywork in fwsnort.conf.
337     - Updated to correctly handle ICMP type and code rules (itype and
338       icode Snort options) via the "--icmp-types type/code" convention.
339     - Added support for emulating the dsize Snort option through the use
340       of the Netfilter length match.
341     - Changed --type argument to --include-types and added list support
342       so it accepts things like "chat,ddos".  Also added --exclude-types
343       command line argument.
344     - Added support for multiple sid's (as a comma separated list) in
345       --snort-sids argument.  Also added --exclude-sids argument to remove
346       a list of sids from translation.
347     - Added support for the replace Snort option (originally from the
348       Snort_inline project).  The requires the replace string patch.
349     - Added support for restricting jump rules to a list of interfaces
350       via the --restrict-intf argument.
351     - Added kernel patch to extend the maximum packet length that the
352       string match extension will attempt to search from 1024 bytes to
353       2048 bytes (requires a kernel re-compile of course).
354     - Added DRP and REJ strings to logging prefix if --ipt-drop or
355       --ipt-reject is specified.
356     - Added snortspoof.pl, which is a simple perl script that emulates
357       the Stick and Snot tools.
358
359 fwsnort-0.7.0 (06/05/2005):
360     - Added support for the Snort pass action by using the ACCEPT target.
361     - Added support for the Snort log action by using the ULOG target
362       (which can then log the packet via the pcap writer).
363     - Added support for all fwsnort alerts to be logged via the ULOG
364       target instead of the LOG target.
365     - Added support for the "resp" keyword to allow it to drive the
366       Netfilter argument to the REJECT target.
367     - Added "pcre" to the unsupported list... this knocks the fwsnort
368       translation rate down to about 50% for Snort-2.3 rules (pcre is
369       heavily utilized).
370     - Added "priority" and "rev" to comment lines.
371
372 fwsnort-0.6.5 (03/20/2005):
373     - Updated to not attempt to download Snort rules from snort.org
374       because the rules are no longer available for automatic downloads
375     - Changed the install.pl script and the --update-rules mode for
376       fwsnort to download the latest signature set from
377       http://www.bleedingsnort.com/.
378       (Snort.org is now offering pay-service around their rule sets).
379     - Added signature test for the "flowbits" keyword.
380
381 fwsnort-0.6.4 (12/18/2004):
382     - Updated to Snort-2.3 rules.  FWSnort can convert a total of 1710
383       out of 2559 total Snort-2.3 rules.
384     - Updated to new Snort rules download link for --update-rules mode:
385       http://www.snort.org/dl/rules/snortrules-snapshot-CURRENT.tar.gz
386     - Updated to standard [+], [-], and [*] prefixes for info, warning
387       and die logging messages.
388     - Added --replace-string patches.
389
390 fwsnort-0.6.3 (04/04/2004):
391     - Added ignore functionality for both IPs and networks
392     - Split --ipt-block into --ipt-drop and --ipt-reject to add DROP
393       or REJECT rules respectively.
394     - Added --add-deleted option to allow rules in the "deleted.rules"
395       file to be added.
396
397 fwsnort-0.6.2 (03/19/2004):
398     - Added --internal-net and --dmz-net options so that internal and
399       dmz networks can be manually specified without having to parse
400       the output of ifconfig.  This is most useful for running fwsnort
401       on a linux system that is acting as a bridge where no ip addresses
402       are assigned to the interfaces.
403     - Bugfix for missing icmp-port-unreachable rejects for UDP packets.
404
405 fwsnort-0.6.1 (02/01/2004):
406     - Bugfix for not adding dmz interface rules to INPUT chain.
407     - Bugfix for not getting the DMZ interface network.
408
409 fwsnort-0.6 (01/04/2004):
410     - Speed increase and disk access decrease by writing iptables
411       commands to the iptables script only after all lines have been
412       generated.
413     - Bugfix for DMZ interface.
414     - Bugfix for multiple ip_proto fields.
415     - Removed the ip protocol as an allowed protocol for translation.
416     - Bugfix for negated port numbers.
417     - Removed "<-" rule direction since not even snort supports this.
418     - Fixed snort rule updates from snort.org.
419
420 fwsnort-0.5 (12/21/2003):
421     - Added "-j REJECT --reject-with tcp-reset" for tcp sessions
422       if the --ipt-block option is specified.
423     - Added ability to download latest snort rules from snort.org.
424     - Added --no-ipt-jumps.
425     - Added better checking for iptables build characteristics such
426       as the LOG target and wether or not the ipv4options extension
427       is compiled in.
428     - Added config preservation code from psad in install.pl.