make per-alert tracking specific to the non-blocking external script
[psad.git] / ChangeLog
1 psad-2.2.4 (08//2014):
2     - (Steve Murphy) Added the ability to run an external script whenever an
3       IP is blocked. Two new config variables were added to support this
4       feature, ENABLE_EXT_BLOCK_SCRIPT_EXEC and ENABLE_EXT_BLOCK_SCRIPT_EXEC.
5     - Bug fix to not create zombie whois processes when whois lookups take too
6       long to complete for whatever reason (slow network, etc.). This fixes
7       issue #15 on Github. The bug was reported by "3Turtles" to the psad
8       mailing list, and Dan Dickey provided valuable input.
9
10 psad-2.2.3 (03/01/2014):
11     - Added compatibility with 'upstart' init daemons with assistance from Tim
12       Kramer.  This change adds a new config variable 'ENABLE_PSADWATCHD' that
13       can be used to disable psadwatchd when deployed with upstart since it
14       has built-in process monitoring and restarting capabilities.  By default
15       psadwatchd is not enabled anymore since this variable is set to "N". The
16       reason for this change is that psad is extremely stable and so almost
17       never needs to be restarted in practice, and process monitoring is
18       better provided via other solutions (like upstart) anyway.  In addition,
19       a new init script located at init-scripts/upstart/psad.conf has been
20       added that is compatible with upstart - this script is meant to be copied
21       to the /etc/init/ directory.
22     - (Wolfgang Breyha) Bug fix to allow VLAN interfaces and interface aliases
23       in IGNORE_INTERFACES.  This fixes issue #8 on github.
24     - Bug fix to not modify /etc/hosts.deny permissions when removing
25       tcpwrappers auto-block rules. This issue was reported as Debian bug
26       #724267 (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=724267) and
27       relayed via Franck Joncourt. Closes issue #7 on github.
28
29 psad-2.2.2 (01/13/2014):
30     - Added detection for Errata Security's "Masscan" port scanner that was
31       used in an Internet-wide scan for port 22 on Sept. 12, 2013 (see:
32       http://blog.erratasec.com/2013/09/we-scanned-internet-for-port-22.html).
33       The detection strategy used by psad relies on the fact that masscan does
34       not appear to set the options portion of the TCP header, and if the
35       iptables LOG rules that generate log data for psad are built with the
36       --log-tcp-options switch, then no options in a SYN scan can be seen.
37       This is not to say that other scanning software always sets TCP options -
38       Scapy seems to not set options by default when issuing a SYN scan like
39       this either: http://www.secdev.org/projects/scapy/doc/usage.html#syn-scans
40       There is a new psad.conf variable "EXPECT_TCP_OPTIONS" to assist with
41       Masscan detection as well.  When looking for Masscan SYN scans, psad
42       requires at least one TCP options field to be populated within a LOG
43       message (so that it knows --log-tcp-options has been set for at least
44       some logged traffic), and after seeing this then SYN packets with no
45       options are attributed to Masscan traffic.  All usual psad threshold
46       variables continue to apply however, so (by default) a single Masscan
47       SYN packet will not trigger a psad alert.  Masscan detection can be
48       disabled altogether by setting EXPECT_TCP_OPTIONS to "N", and this will
49       not affect any other psad detection techniques such as passive OS
50       fingerprinting, etc.
51     - RPM bug fix to include the protocols file.
52
53 psad-2.2.1 (01/02/2013):
54     - Added IP protocol scan detection (nmap -sO).  A new psad.conf variable
55       PROTOCOL_SCAN_THRESHOLD defines the minimum number of different IP
56       protocols (default = 5) that must be scanned before an alert is
57       triggered.
58     - Added detection for Topera IPv6 scans when --log-ip-options is used in
59       the ip6tables logging rule.  When this option is not used, the previous
60       psad-2.2 release detected Topera scans.  An example TCP SYN packet
61       generated by Topera when --log-ip-options is used looks like this (note
62       the series of empty IP options strings "OPT ( )":
63
64         Dec 20 20:10:40 rohan kernel: [  488.495776] DROP IN=eth0 OUT=
65         MAC=00:1b:b9:76:9c:e4:00:13:46:3a:41:36:86:dd
66         SRC=2012:1234:1234:0000:0000:0000:0000:0001
67         DST=2012:1234:1234:0000:0000:0000:0000:0002 LEN=132 TC=0 HOPLIMIT=64
68         FLOWLBL=0 OPT ( ) OPT ( ) OPT ( ) OPT ( ) OPT ( ) OPT ( ) OPT ( )
69         OPT ( ) OPT ( ) PROTO=TCP SPT=61287 DPT=1 WINDOW=8192 RES=0x00 SYN
70         URGP=0
71
72     - Bug fix in --Analyze mode when IP fields are to be searched with the
73       --analysis-fields argument (such as --analysis-fields "SRC:1.2.3.4").
74       The bug was reported by Gregorio Narvaez, and looked like this:
75
76       Use of uninitialized value $_[0] in length at
77       ../../blib/lib/NetAddr/IP/UtilPP.pm (autosplit into
78       ../../blib/lib/auto/NetAddr/IP/UtilPP/hasbits.al) line 126.
79       Use of uninitialized value $_[0] in length at
80       ../../blib/lib/NetAddr/IP/UtilPP.pm (autosplit into
81       ../../blib/lib/auto/NetAddr/IP/UtilPP/hasbits.al) line 126.
82       Bad argument length for NetAddr::IP::UtilPP::hasbits, is 0, should be
83       128 at ../../blib/lib/NetAddr/IP/UtilPP.pm (autosplit into
84       ../../blib/lib/auto/NetAddr/IP/UtilPP/_deadlen.al) line 122.
85
86     - Added --stdin argument to allow psad to collect iptables log data from
87       STDIN in --Analyze mode.  This makes it easier to run an iptables logs
88       through psad from arbitrary files like so:
89
90       # grep "IN=.*OUT=" /var/log/kern.log | psad -A --stdin
91
92     - Added the ability to acquire Snort rule 'msg' fields from fwsnort if
93       it's also installed.  A new variable FWSNORT_RULES_DIR tells psad where
94       to look for the fwsnort rule set.  This fixes a problem reported by Pui
95       Edylie to the psad mailing list where fwsnort logged an attack that psad
96       could not map back to a descriptive 'msg' field.
97     - Added the ability to set per-danger level timeouts when psad is
98       configured to run in auto-blocking mode.  These timeouts are implemented
99       with new AUTO_BLOCK_DL*_TIMEOUT variables - one for each of the five
100       possible danger levels that may be assigned to a scanning IP address.
101     - Added the ability to throttle emails generated by psad via a new
102       EMAIL_THROTTLE variable which is implemented as a per-IP threshold.  That
103       is, if EMAIL_THROTTLE is set to "10", then psad will only send 1/10th as
104       many emails for each scanning IP as it would have normally.
105
106 psad-2.2 (02/20/2012):
107     - Added support for detection of malicious traffic that is delivered via
108       IPv6.  This is accomplished by parsing ip6tables log messages - these are
109       in a slightly different format than the iptables log messages.  Here is
110       an example:
111
112         Mar 17 13:39:13 linux kernel: [956932.483644] DROP IN=eth0 OUT=
113         MAC=00:13:46:3a:41:36:00:1b:b9:76:9c:e4:86:dd
114         SRC=2001:0db8:0000:f101:0000:0000:0000:0002
115         DST=2001:0db8:0000:f101:0000:0000:0000:0001 LEN=80 TC=0 HOPLIMIT=64
116         FLOWLBL=0 PROTO=TCP SPT=50326 DPT=993 WINDOW=5760 RES=0x00 SYN URGP=0
117
118       Detection of malicious IPv6 traffic can be disabled via a new
119       ENABLE_IPV6_DETECTION config variable.
120
121     - For ICMP6 traffic, added protocol validation for ICMP6 type/code
122       combinations.
123     - Replaced Net::IPv4Addr with the excellent NetAddr::IP module which has
124       comprehensive support for IPv6 address network parsing and comparisons.
125     - Added a new test suite in the test/ directory to validate psad run time
126       operations (scan detection, signature matching, and more).  To support
127       this, a new '--install-test-dir' option was added to the install.pl
128       script.  Once this is executed, the test suite can be run via the
129       test-psad.pl script in the test/ directory.
130     - Added a new MAX_SCAN_IP_PAIRS config variable to allow psad memory usage
131       to be constrained by restricting the number of unique IP pairs that psad
132       This is useful for when psad is deployed on systems with little memory,
133       and is best utilized in conjunction with disabling ENABLE_PERSISTENCE so
134       that old scans will also be deleted (and thereby making room for tracking
135       new scans under the MAX_SCAN_IP_PAIRS threshold).
136     - Bug fix for 'qw(...) usage as parenthesis' warnings for perl > 5.14
137     - Bug fix that caused psad to emit the following:
138
139         Undefined subroutine &main::LOG_DAEMON called at ./psad line 10071.
140
141       This problem was noticed by Robert and reported on the psad mailing list.
142     - Added --install-root to the install.pl script so that psad can be
143       installed in a directory specified by the user as opposed to the normal
144       system default.  This was a suggestion from @pyllyukko.
145     - Added PERL5LIB env variable usage to the install.pl script so that module
146       installs can reference the current install path.
147     - Updated to the latest p0f signatures from OpenBSD.
148     - Altered the 'ET MALWARE Bundleware Spyware CHM Download' Snort rule in
149       the bundled Emerging Threats rule set to make sure that ClamAV does not
150       flag on the pattern "mhtml\:file\://" which is associated with the
151       following ClamAV signature:
152
153         $ grep Exploit.HTML.MHTRedir-8 main.ndb
154         Exploit.HTML.MHTRedir-8:3:*:6d68746d6c3a66696c653a2f2f{1-20}2168
155
156       An analysis of this issue was posted here:
157
158         http://www.cipherdyne.org/blog/2010/08/22.html
159
160     - Bug fix for ICMP packet handling where psad would incorrectly interpret
161       ICMP port unreachable messages as UDP packets because the UDP specifics
162       are included in the iptables log message.  This bug was first reported by
163       Lukas Baxa to the Debian maintainers and was followed up by Franck
164       Joncourt:
165
166         http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=596240
167
168       An example ICMP log message that exposed the bug is included below:
169
170       Sep  8 18:04:26 baxic kernel: [28241.572876] IN_DROP IN=wlan0
171       OUT= MAC=00:1a:9f:91:df:ae:00:21:27:e8:0a:a0:08:00
172       SRC=10.0.0.138 DST=192.168.1.103 LEN=96 TOS=0x00 PREC=0xC0 TTL=254
173       ID=63642 PROTO=ICMP TYPE=3 CODE=3
174       [SRC=192.168.1.103 DST=10.0.0.138 LEN=68 TOS=0x00 PREC=0x00 TTL=0
175       ID=22458 PROTO=UDP SPT=35080 DPT=33434 LEN=48 ]
176
177     - Updated the bundled whois client to 5.0.6.
178     - Removed the ExtUtils::MakeMaker RPM build requirement from the psad.spec
179       file.  This is a compromise which will allow the psad RPM to be built
180       even if RPM dosen't or can't see that ExtUtils::MakeMaker is installed -
181       most likely it will build anyway.  If it doesn't, there are bigger
182       problems since psad is written in perl.  If you want to build the psad
183       RPM with a .spec file that requires ExtUtils::MakeMaker, then use the
184       "psad-require-makemaker.spec" file that is bundled in the psad sources.
185     - Switched to git from svn - comprehensive psad development history can
186       can acquired through gitweb:
187
188         http://www.cipherdyne.org/cgi-bin/gitweb.cgi?p=psad.git;a=summary
189
190       or through git itself:
191
192         $ git clone http://www.cipherdyne.org/git/psad psad.git
193
194     - Updated to IPTables::ChainMgr 1.2 and IPTables::Parse 1.1 in the deps/
195       directory.
196     - In the /var/log/psad/<ip>/ directories, whois information is stored in
197       the <IP>_whois files, the IP in the filename was included as a
198       destination IP under the psad -S output.  This has been fixed.  Here is
199       an example of the invalid output:
200
201         [+] IP Status Detail:
202             SRC:  123.123.123.221, DL: 2, Dsts: 2, Pkts: 1, Unique sigs: 1,
203                     Email alerts: 1
204             DST: 1.2.3.4, Local IP
205                 Scanned ports: TCP 1433, Pkts: 1, Chain: INPUT, Intf: eth0
206                 Signature match: "MISC Microsoft SQL Server communication attempt"
207                     TCP, Chain: INPUT, Count: 1, DP: 1433, SYN, Sid: 100205
208             DST: 123.123.123.221
209
210     - By default the install.pl script records user answers to installation
211       queries so they can be used to install psad in an automated fashion later.
212       A new option --Use-answers makes this possible.  This feature was requests
213       by @pyllyukko.
214
215 psad-2.1.7 (07/14/2010):
216     - (Dan A. Dickey) Added the ability to use the "ip" command from the
217       iproute2 tools to acquire IP addresses from local interfaces.  Dan's
218       description is as follows: "...A main reason for doing this is in the
219       case of multi-homed hosts. ifconfig sets these up on an interface using
220       aliases, iproute2 does not.  So, for a multi-homed interface (eth0 with
221       multiple addresses), ifconfig -a only shows the first one configured and
222       not the rest.  ip addr shows all of the configured addresses...".
223     - Added ENABLE_WHOIS_FORCE_ASCII to replace any non-ascii characters in
224       whois data (which is common with whois lookups against Chinese IP
225       addresses for example) with the string "NA".  This option is disabled by
226       default, but can be useful if errors like the following are seen upon
227       receiving an email alert from psad:
228
229         <<< 554 5.6.1 Eight bit data not allowed
230         554 5.0.0 Service unavailable
231
232     - Updated psad to issue whois lookups against IP addresses that are not
233       directly connected to the local system.  This is useful for example when
234       an internal system is scanning an external destination system, and the
235       scan is logged in the FORWARD chain.  Issuing whois lookups on the
236       internal system (frequently on RFC 1918 address space) is not usually
237       very useful, but issuing the whois lookup against the destination system
238       gives much more interesting data.  This feature can be disabled with the
239       new ENABLE_WHOIS_FORCE_SRC_IP variable.
240
241 psad-2.1.6 (07/09/2010):
242     - Bug fix for Decode_Month() calls used to handle date formats and ensure
243       proper month handling for iptables log message time stamps.  This bug
244       caused psad to die in some cases, and the specific error on the console
245       in --debug mode was:
246         Date::Calc::Decode_Month(): argument is not a string at \
247         /usr/sbin/psad line 1103, <FWDATA> line 2.
248     - (Franck Joncourt) Added --Override-config feature so that alternate
249       configuration files can be specified on the command line to override
250       configuration variables in the standard /etc/psad/psad.conf file.
251     - (Franck Joncourt) Submitted patches to fix stderr redirection for the
252       usage of the mail binary, and to close stdout, stdin, and stderr when
253       running psad as a daemon.
254
255 psad-2.1.5 (02/20/2009):
256     - (Miroslav Grepl) Contributed policy files to make psad compatible with
257       SELinux.  The files are located in a new "selinux" directory in the
258       psad sources.
259     - Bug fix for local server ports not reported correctly under netstat
260       parsing (Franck Joncourt).
261     - (Steve B) Submitted patch to fix a bug in the start() function in the
262       Gentoo init script which caused psad to not be started and the error
263       "* ERROR: psad failed to start" to be generated.
264     - Bug fix when ENABLE_SYSLOG_FILE is enabled to run a preliminary regex
265       match on each syslog message because kmsgsd is not running and therefore
266       has not gone through the kmsgsd tests for a properly structured iptables
267       message.
268     - Updated IPTables::Parse to 0.7.
269     - Updated IPTables::ChainMgr to 0.9.
270
271 psad-2.1.4 (08/21/2008):
272     - Restructured perl module paths to make it easy to introduce a "nodeps"
273       distribution of psad that does not contain any perl modules.  This
274       allows better integration with systems that already have all necessary
275       modules installed (including the IPTables::ChainMgr and IPTables::Parse
276       modules).  The main driver for this work is to make all cipherdyne.org
277       projects easily integrated with distributions based on Debian, and
278       Franck Joncourt has been instrumental in making this process a reality.
279       All perl modules are now placed within the "deps" directory, and the
280       install.pl script checks to see if this directory exists - a separate
281       psad-<ver>-nodeps tarball will be distributed without this directory.
282       The Debian package for psad can then reference the -nodeps tarball, and
283       a new "psad-nodeps.spec" file has been added to build an RPM from the
284       psad sources that does not install any perl modules.
285     - Updated to use the normal system whois client if the /usr/bin/whois_psad
286       path does not exist, and moved the whois/ directory into the deps/
287       directory.  This removes /usr/bin/whois_psad as a strict dependency.
288     - Bugfix to honor the IPT_SYSLOG_FILE variable in --Analyze-msgs mode.
289     - Switched from the deprecated bleeding-all.rules file to the new
290       emerging-all.rules available from Matt Jonkman at Emerging Threats
291       (http://www.emergingthreats.net).
292
293 psad-2.1.3 (06/07/2008):
294     - Updated to enable IPT_SYSLOG_FILE by default.  This is a relatively
295       important change since it changes the method of acquiring iptables log
296       data from reading it out of named pipe from syslog to just parsing the
297       /var/log/messages file.  This implies that kmsgsd does not have to run,
298       and that it is much easier to ensure that psad actually receives
299       iptables log messages.  The most complex and error prone aspect of psad
300       in the past has been the reconfiguration of the various syslog daemons
301       out there (which have very different configuration syntax and features)
302       to write kern.info messages to the /var/lib/psad/psadfifo named pipe.
303     - Updated to version 4.7.26 of the whois client from Marco d'Itri.  This
304       allows whois records for some addresses (such as 116.125.35.98, which
305       which was scanning a system running psad but could not be identified
306       under the older whois client) to be properly queried.
307     - Updated to Bit::Vector 6.4 from 6.3.
308     - Updated to Date::Calc 5.4 from 5.3.
309     - Updated to Storable 2.18 from 2.16.
310
311 psad-2.1.2 (04/03/2008):
312     - Bugfix to not include kernel timestamps in iptables log prefixes that
313       contain spaces like "[   65.026008] DROP" (bug reported by Erik Heidt).
314     - Bugfix to skip non-resolved IP addresses (bug reported by Albert Whale)
315     - Better p0f output in --debug mode to display when a passive OS
316       fingerprint cannot be calculated based on iptables log messages that
317       include tcp options (i.e., with --log-tcp-options when building a LOG
318       rule on the iptables command line).
319
320 psad-2.1.1 (01/25/2008):
321     - Added a new feature whereby psad can acquire iptables log data just by
322       parsing an existing file (/var/log/messages by default) that is written
323       to by syslog.  By default, psad acquires iptables log data from the
324       /var/log/psad/fwdata file which is written to by kmsgsd, but on some
325       systems, having syslog communicate log data to kmsgsd can be problematic
326       since syslog configs and external factors such as Apparmor and SELinux
327       can play a role here.  This new feature is controled by two new
328       configuration variables "ENABLE_SYSLOG_FILE" (to enable/disable the
329       feature) and "IPT_SYSLOG_FILE" to specifiy the path to the file to
330       parse.
331     - Better installation support for various Linux distributions including
332       Fedora 8 and Ubuntu.  The current runlevel is now acquired via the
333       "runlevel" command instead of attempting to read /etc/inittab (which
334       does not even exist on Ubuntu 7.10), and there are new command line
335       arguments --init-dir, --init-name, and --runlevel to allow the init
336       directory, init script name, and the runlevel to be manually specified
337       on the install.pl command line.
338     - Updated psad to automatically handle situations where the either the
339       /var/log/psad/fwdata file or the /var/log/messages file (whichever
340       syslog is writing iptables log messages to) gets rotated.  The
341       filehandle is closed and reopened if the file shrinks or if the inode
342       changes.  This strategy is borrowed from how the fwknop project deals
343       with the filesystem packet capture file.
344     - Minor bugfix to generate syslog message when restarting a psad process.
345     - Updated install.pl to set the LC_ALL environmental variable to "C"
346       This should address some issues with installing psad on non-English
347       locale systems.
348     - Updated install.pl to be compatible with the rsyslog daemon, which is
349       commonly installed on Fedora 8 systems.
350
351 psad-2.1 (10/19/2007):
352     - Changed EMAIL_LIMIT model to apply to scanning source addresses only
353       instead of also factoring in the destination address. The original
354       src/dst email limit behavior can be restored by setting a new variable
355       "ENABLE_EMAIL_LIMIT_PER_DST" to "Y".
356     - Added the patches/iptables-1.3.8_LOG_prefix_space.patch file which can
357       be applied to the iptables-1.3.8 code to enforce a trailing space
358       character before any log prefix when a LOG rule is added. This ensures
359       that the user cannot break the iptables syslog format just by forgetting
360       to include a space at the end of a logging prefix.
361     - Bugfix to ensure that parsing TCP options does not descend into an
362       infinite loop in some some circumstances with obscure or maliciously
363       constructed options.  Also added syslog reporting for broken options
364       lengths of zero or one byte (the minimum option length is two bytes to
365       accomodate the TLV encoding).
366     - Bugfix to enforce the usage of --CSV-fields in --gnuplot mode.
367     - Implemented --get-next-rule-id so that it is easy to assign a new rule
368       ID to a new signature in the /etc/psad/signatures file.
369     - Updated to just call die() if GetOpt fails; this allows erroneous usage
370       of the command line to display informative error messages more clearly.
371
372 psad-2.0.8 (07/27/2007):
373     - Added --gnuplot mode so that psad can output data that is suitable for
374       plotting with gnuplot. All output produced in this mode is integer data
375       with the exception of date stamps that are derived from iptables syslog
376       messages.
377     - Added the ability to negate match conditions on fields specified with
378       the --CSV-fields argument by prepending the string "not" (which plays
379       more nicely with shells like bash than a character like "!"). For
380       example, to graph all packet data in --gnuplot or --CSV modes that
381       originates from the 11.11.0.0/16 subnet and is not destined for port
382       80, the following argument does the trick:
383
384             --CSV-fields "src:11.11.0.0/16 dp:not80"
385
386     - In --gnuplot mode, added the ability to generate the count for a CSV
387       field instead of the field itself. Supported modes are an absolute
388       count (<field>:count) , and a unique count (<field>:uniqcount). This
389       is useful to plot graphs of source IP vs. the number unique ports for
390       example.  Also added the ability to count iptables log fields over
391       various time scales (minutes, hours, and days) with the following
392       switches: <field>:countday, <field>:counthour, <field>:countmin.
393     - In --gnuplot mode, added the ability to specify the view coordinates
394       for 3D graph viewing with --gnuplot-view.
395     - Added the Storable-2.16 module along with the --use-store-file argument
396       so that in --gnuplot mode the Gnuplot data can be stored on disk and
397       retrieve quickly.  This eliminates a large performance bottleneck when
398       Gnuplot configuration directives are tweaked while the same graph is
399       generated multiple times.
400     - Added --gnuplot-template so that a template file can be used for all
401       Gnuplot directives (usually psad creates the .gnu file based on the
402       --gnuplot command line arguments).
403     - Added --gnuplot-grayscale to generate graphs without the default red
404       color for graph points.
405     - Bugfix for regular expressions not being imported correctly from within
406       the --CSV-fields argument.
407     - Added --analysis-fields so the iptables log messages that are parsed in
408       -A mode can be restricted to those that meet certain criteria. For
409       example, to restrict the analyze mode to process packets with a source
410       address of 192.168.10.1, use this command:
411
412             psad -A --analysis-fields "src:192.168.10.1"
413
414     - Added --plot-separator to allow the format of plot data (either in
415       --gnuplot or --CSV modes) to be influenced by the user.
416     - Added the ability to configure the syslog facility and priority via the
417       psad.conf file (see the SYSLOG_FACILITY and SYSLOG_PRIORITY variables).
418     - Updated psad.spec file to respect the %_initrddir RPM macro.
419
420 psad-2.0.7 (05/28/2007):
421     - Bugfix to define a custom 'source' definition for syslog-ng daemons -
422       this fixes a problem on SuSE systems where the existing syslog-ng
423       reconfig caused the daemon to not start.
424     - Bugfix to allow specific signatures to be ignored by setting SID values
425       of zero in /etc/psad/snort_rule_dl.
426     - Added -X command line argument to allow the user to delete any psad
427       chains (in auto-response mode).  This is a synonym for the iptables -X
428       command line argument.
429
430 psad-2.0.6 (03/24/2007):
431     - Better integration with fwsnort; psad signature match syslog messages
432       and email alerts now include the fwsnort rule number (for fwsnort
433       version 0.9.0 and greater) and chain information.
434     - Added the Snort bleeding-all.rules signature file from the Bleeding
435       Snort project (see http://www.bleedingsnort.com).
436     - Bugfix to allow interfaces that have IP aliases.
437     - Added uname, ifconfig, and syslog process information to --Dump-conf
438       output (this can help diagnose various runtime issues).
439     - Changed the --Lib-dir command line argument to --lib-dir, and added
440       --List (similar to iptables) to list the psad auto-blocking chain rules.
441     - Added psad.SlackBuild script contributed by pyllyukko for building psad
442       on Slackware systems.  It uses the Cipherdyne cd_rpmbuilder script to
443       first build and RPM, and then uses it to build a Slackware package.
444
445 psad-2.0.5 (03/01/2007):
446     - Consolidated all configuration variables into the /etc/psad/psad.conf
447       file. The kmsgsd.conf, psadwatchd.conf, alert.conf, and fw_search.conf
448       files were all removed since the daemons just reference the psad.conf
449       now.  Updated install.pl to archive and remove these files if they
450       exist from a previous psad installation.
451     - Bugfix to account for iptables -nL output where the protocol may be
452       reported as "0" instead of "all".
453     - Added a function safe_malloc() for kmsgsd.c and psadwatchd.c to ensure
454       that a single API is used to perform a NULL check on heap-allocated
455       memory.
456     - Bugfix to ensure that the psad_ip_len signature matching keyword is
457       checked withing match_snort_ip_keywords() so that it applies to all
458       protocol packets.  This fixes a bug that would cause the "PSAD-CUSTOM
459       Nachi worm reconnaisannce" signature to fire on normal ICMP packet log
460       messages.
461     - Added version and Subversion file revision numbers to die and warn
462       messages that are written to /var/log/psad/errs/.  This helps when
463       trying to track these messages down to a specific file revisions when
464       psad is being upgraded on the local system.
465     - Added version and Subversion file revision numbers to --Dump-conf
466       output.
467     - Minor update to allow --fw-dump to be used on the command line without
468       also having to use the -D argument.
469     - Updated the default_log() function in the IPTables::Parse module to
470       handle iptables policies that were dumped with -v, such as when
471       --Dump-conf is used.
472
473 psad-2.0.4 (01/27/2007):
474     - Added Snort rule matches to syslog alerts.  Multiple matches can be
475       controlled with new configuration variables in psad.conf:
476       ENABLE_SIG_MSG_SYSLOG, SIG_MSG_SYSLOG_THRESHOLD, and
477       SIG_SID_SYSLOG_THRESHOLD.
478     - Bugfix to include scanned UDP port ranges in syslog alerts.
479     - Bugfix to parse SEQ and ACK iptables log message fields (requires
480       --log-tcp-sequence on the iptables command line).  This allows the ipEye
481       signature to work.
482     - Added --debug-sid to allow a specific Snort rule to be debugged while
483       psad runs it through its detection engine.  A consequence of this is
484       that the -d command line argument must be spelled out, i.e. "psad
485       --debug".
486     - Bugfix to allow logging prefixes to omit trailing spaces.  This is a bug
487       in the iptables logging format to allow this in the first place, but
488       before this gets fixed psad needs to compensate.
489     - Bugfix for syslog-ng init script path in install.pl.
490     - Bugfix to include a "source" definition for /proc/kmsg if not already
491       defined for syslog-ng daemons.
492     - Minor memory handling bugfixes discovered by valgrind the excellent
493       Valgrind project: http://www.valgrind.org
494
495 psad-2.0.3 (12/31/2006):
496     - Removed Psad.pm perl module and kmsgsd.pl and psadwatchd.pl scripts.
497       This is a major change that allows psad to be more flexible and
498       completely derive its config from the psad.conf file and from the
499       command line.  In the previous scheme, psad imported its config with a
500       function within Psad.pm, and this required that psad imported the Psad
501       perl module before reading its config. A consequence was that the
502       PSAD_LIBS_DIR var could not be specified usefully within the config
503       file.
504     - Added the ability to recursively resolve embedded variables from *.conf
505       files (with a limit of 20 resolution attempts).
506     - Added IGNORE_KERNEL_TIMESTAMP so that Linux distros that add a timestamp
507       to all kernel messages (Ubuntu for example) can be ignored.
508     - Consolidated code to import data out of /var/log/psad/<ip> directories
509       with code to display status and analysis output (-S and -A).
510       Essentially the %scan hash is built by the filesystem data import
511       routine and the remainder of the code references this single data
512       structure.
513
514 psad-2.0.2 (12/23/2006):
515     - Added the ability to download the latest signatures from cipherdyne.org
516       in install.pl.
517     - Added the cd_rpmbuilder script to make it easy to build RPM's out of
518       CipherDyne projects by automatically downloading the project .tar.gz and
519       .spec files from http://www.cipherdyne.org/.
520     - Added print statements for @INC array in debug mode so that the user can
521       see the additional /usr/lib/psad/* directories added by
522       import_psad_perl_modules().
523     - Changed Unix::Syslog import strategy from "use" to "require" since the
524       path is not known until import_psad_perl_modules() gets a chance to
525       run (psad ran fine without this, but it is more consistent this way).
526     - Bugfix for not properly including elements of the
527       @connected_subnets_cidr array.
528     - IP subnet bugfix to make sure to get the entire subnet in signature
529       import routine if it is not in CIDR format
530     - Bugfix to not print an IP addresses in the "top attackers" section that
531       do not have at least one packet or signature match (for any reason).
532     - Bugfix to not print more than TOP_IP_LOG_THRESHOLD IP addresses in thet
533       top attackers section.
534     - Updated install.pl to reference configuration paths directly from
535       psad.conf instead of defining them separately.  This should fix Debian
536       bug #403566.
537     - Added -c argument to install.pl so that the path to a psad.conf file
538       can be altered from the command line.
539     - Bugfix to not import any IP from the top_attackers file from a previous
540       psad run that does not have a /var/log/psad/<ip> directory.
541     - Added MIN_DANGER_LEVEL to allow all alerts and /var/log/psad/<ip>
542       tracking to be disabled unless an attacker reaches at least this
543       danger level.
544     - Added text in install.pl to mention ifconfig parsing for HOME_NET
545       derivation.
546
547 psad-2.0.1 (12/12/2006):
548     - Added Nachi worm reconnaisannce icmp signature
549     - Added the psad_ip_len signature keyword to allow the length field in the
550       IP header to be explicitly tested.
551     - Bugfix for inappropriately removing some directories in @INC when
552       splicing in psad perl module paths.
553     - Switched nf2csv installation path in install.pl to /usr/bin/.
554
555 psad-2.0 (12/10/2006):
556     - Completely refactored the Snort rule matching support in psad.  Added
557       many header field tests with full range matching support.  These tests
558       include the following keywords from Snort: ttl, id, seq, ack, window,
559       icmp_id, icmp_seq, itype, icode, ip_proto, ipopts, and sameip.
560     - Refactored all signatures in /etc/psad/signatures to conform to new
561       signature matching support in this release.  There are now about 190
562       signatures that psad can run directly against iptables logging
563       messages (i.e. without the help of fwsnort).
564     - Added the ability to download the latest signatures file from
565       http://www.cipherdyne.org/psad/signatures with the --sig-update command
566       line argument to psad.
567     - Added "MISC Windows popup spam" signature.  This allows psad to detect
568       when attempts are made to send spam via the Windows Messenger service.
569     - Completely reworked --Status and --Analyze output, signature matches
570       are included now, along with a listing of top sig matches, top scanned
571       ports, and top attackers.  Also, scan data is not written to
572       /var/log/psad/ipt_analysis/ before display analysis output in -A mode;
573       analysis results are displayed much faster this way.
574     - Added ipEye, Subversion, Kuang2, Microsoft SQL, Radmin, and Ghostsurf
575       signatures.
576     - Added 'data in TCP SYN packet' signature.
577     - Added --CSV mode so that psad can be used to generate comma-separated
578       value output suitable for the AfterGlow project (see
579       http://afterglow.sourceforge.net/index.html) for graphical
580       representations of iptables logs and associated scan data.  Also added
581       nf2csv so that normal users can take advantage of this feature.
582     - Added emulation of the Snort "dsize" test through the use of the IP
583       length field for TCP/ICMP signatures, and the UDP length field for UDP
584       signatures.  For SYN packets, TCP options are included so psad
585       automatically adds 44 bytes (the maximum length for TCP options) so the
586       dsize test corresponds to the estimated payload length.
587     - Added the psad_id, psad_dsize, and psad_derived_sids fields for the new
588       Snort rule support.
589     - Added the ability to decode IP options, which are included within Snort
590       rules as the "ipopts" keyword.  This functionality requires that the
591       --log-ip-options command line argument is given to iptables when
592       building a rule that uses the LOG target.
593     - Added Snort rules (sids 475, 500, 501, and 502) that detect IP options
594       usage such as source routing and the traceroute IP option with the new
595       IP options decoder.
596     - Enhanced psad email alert output to include sid values that have been
597       derived from existing Snort rules.
598     - Added the ability to expand embedded variables within the psad
599       configuration files.  For example, the path to the FW_DATA_FILE is
600       defined in psad.conf as "$PSAD_DIR/fwdata", which resolves to
601       /var/log/psad/fwdata when the PSAD_DIR variable is expanded.  This
602       feature allows a consistent set of file paths to easily be defined
603       instead of using the full path for each file path.
604     - Better validation of IPT_AUTO_CHAIN{n} variables so that the from_chain
605       cannot be identical to the to_chain.
606     - Added dump_config() to psadwatchd.c and kmsgsd.c when compiled with
607       debugging support.
608     - Added ENABLE_INTF_LOCAL_NETS to have psad automatically treat all IP
609       addresses that are part of the local system as belonging to the HOME_NET
610       for signature matching.
611     - Added ENABLE_SNORT_SIG_STRICT to have psad exit if there are any
612       problems found with Snort rules in the /etc/psad/signatures file.  If
613       this feature is disabled (this is the default), then psad generates
614       syslog warnings for improperly formatted signatures).
615     - Update to print the number of IP addresses at each danger level in -A
616       analysis mode.  This is useful to get a sense for how long the disk IO
617       might take to write out all of the /var/log/psad/ipt_analysis/<IP>
618       directories.
619     - Added code to restart kmsgsd at psad start up if a previous kmsgsd
620       process is still running and TRUNCATE_FWDATA is set to 'Y' (this is the
621       default).  This probably isn't strictly necessary because kmsgsd is
622       capable of writing to the fwdata file even if another process truncates
623       it.
624     - Added code to recreate the AUTO_IPT_SOCK (/var/run/psad/auto_ipt.sock)
625       file if some other process happens to delete it out of /var/run/psad/
626     - Bugfix to allow backwards compatibility with old NOT_USED value
627       for the HOME_NET variable.
628     - Bugfix to cleanup any lost blocking rules from the running psad
629       timeouts (a separate process might have deleted rules from the psad
630       chains).
631     - Bugfix to allow iptables log messages to include the PHYSDEV (i.e.
632       PHYSIN and PHYSOUT) interfaces.
633     - Updated to read architecture-dependent perl module installation
634       directory out of /usr/lib/psad (e.g. "/usr/lib/psad/x86_64-linux")
635       before importing psad perl modules such as IPTables::Parse, etc. These
636       modules are now imported via "require" after the appropriate
637       directories have been added to @INC. This allows the RPM files to be
638       built on one system that builds @INC differently than the system where
639       psad is actually installed since psad can now compensate for this.
640     - Added new code to populate the <dst>_signature file in each of the
641       /var/log/psad/<ip> directories with verbose information including the
642       signature time, sid, protocol, dst port, and packet count.
643     - Changed --interval to --Interval, and added --interface to allow
644       psad's detection to be limited to a specific IN interface for the INPUT
645       and FORWARD chains (or OUT interface for the OUTPUT chain).
646     - Replaced --status-brief with --status-summary, but changed it so that
647       only the detailed IP status information is omitted.
648     - Removed unnecessary --status-sort-dl option.
649     - Added STATUS_OUTPUT_FILE so the --Status and --Analyze output is
650       captured instead of just being lost if the output was not piped to
651       'less' or another similar program.
652     - Added --restrict-ip so that psad will restrict its attack detection
653       operations to a specific IP or network.
654     - Updated psadwatchd.c to parse EMAIL_ADDRESSES out of
655       /etc/psad/psad.conf to avoid duplication of variables.
656     - Bugfix to clear old @ipt_config array after receiving a HUP signal.
657       This bug broke the auto-blocking mode.
658     - Bugfix for syslog-ng config so that any custom source for /proc/kmsg is
659       used for the psadfifo path.
660
661 psad-1.4.8 (10/15/2006):
662     - Added the ability to get the auto-blocking status for a specific IP
663       address in --status-ip mode.
664     - Bugfix to use the IPT_OUTPUT_FILE and IPT_ERROR_FILE configuration
665       variables.
666     - Bugfix to restore "start" functionality in Gentoo init script.
667     - Added the ability to selectively disable psad auto-blocking emails.
668     - Added more rigorous IP matching regex from Sebastien J. (contributed
669       originally for fwknop).
670
671 psad-1.4.7 (09/10/2006):
672     - Completely re-worked IPTables::ChainMgr to support the return of
673       iptables error messages that are collected via stderr.  This is critical
674       to fixing a bug where psad would sometimes die on an iptables command
675       but no information would be returned to the user.
676     - Added the ability to specify the position for both the jump rule into
677       the psad chains as well as the position for new rules within the psad
678       chains via the -I argument to iptables.  This fixes a bug where the user
679       was given the impression that the IPTABLES_AUTO_RULENUM would accomplish
680       this.
681     - Populated the _debug option in the IPTables::ChainMgr module, and also
682       added a _verbose option so that the specific iptables commands can
683       actually be seen as IPTables::ChainMgr functions are called.
684     - Added code to install.pl to ask the user if a manual restart of syslog
685       is ok upon an unsuccessful test of the syslog reconfiguration.  This
686       fixes a bug where some syslog daemons might not re-import their
687       configurations after receiving a HUP signal.
688     - Bugfix for incorrect config variable name that gated iptables
689       prerequisite checks.
690     - Added code to install.pl to update command paths in psad.conf and
691       psadwatchd.conf if any of the paths are broken (i.e. the local system
692       does not conform to the default paths).  By default this only happens if
693       the user does not want old configs to be merged, but to override this
694       use the new --path-update command line argument to install.pl.
695     - Added the --Skip-mod-install command line argument to install.pl to
696       allow all perl module installs to be skipped.
697     - Added the --force-mod-regex command line argument to install.pl to allow
698       a regex match on perl module names to force matching modules to be
699       installed.
700     - Added the logrotate.psad file (contributed by Albert Whale).
701
702 psad-1.4.6 (06/13/2006):
703     - Added ENABLE_AUTO_IDS_REGEX and AUTO_BLOCK_REGEX to allow filtering on
704       logging prefixes.
705     - Added code to save DShield email to a file.
706     - Added IPTABLES_PREREQ_CHECK to allow the administrator to control the
707       frequency of iptables checks (for auto-block compatibility).
708     - Added IGNORE_LOG_PREFIXES to allow certain log prefixes to be completely
709       ignored by psad.
710     - Added classification.config file from Snort-2.3.3 so that psad can
711       assign danger levels based upon Snort rule class type.  This is useful
712       when also running fwsnort.
713     - Added snort_rule_dl to allow specific psad to assign specific danger
714       level values to particular signatures.  This is useful if you want to
715       do define certain Snort rules as being particularly evil (or not).
716       Running fwsnort is also necessary to take advantage of this feature.
717     - Added reference.config so that psad can include reference information in
718       email alerts that are derived from attacks detected by fwsnort.
719     - Updated to Snort-2.3.3 signatures.
720     - Updated to whois-4.7.13.
721
722 psad-1.4.5 (01/13/2006):
723     - Bugfix in IPTables::Parse to allow the limit target to apply to
724       logging rules.
725     - Made calls to chain creation and jump rule functions for only every
726       100 block calls in auto-IDS mode.
727     - Bugfix to make sure /var/run/psad directory exists at startup since
728       this directory is removed by some Linux distributions at boot time.
729     - Bugfix for zero masks in auto_dl; this allows a network of "0.0.0.0/0"
730       to be specified.
731     - Added ENABLE_FW_LOGGING_CHECK so that the iptables policy check can be
732       enabled/disabled easily via psad.conf.
733     - Enhanced -D output to include "uname -a" and "perl -V" output.
734     - Added ENABLE_RENEW_BLOCK_EMAILS to allow whether renew emails are sent
735       for auto-blocked addresses.
736
737 psad-1.4.4 (11/27/2005):
738     - Added MAC address reporting in psad email alerts.  This feature is
739       enabled via a new config keyword "ENABLE_MAC_ADDR_REPORTING".
740     - Added --fw-rm-block-ip <ip> option to allow IP addresses to be removed
741       from the auto-blocking chains from the command line.
742     - Updated command line firewall arguments to write commands to the
743       AUTO_IPT_SOCK domain socket.
744     - Added the ability to specify ports and port ranges to auto_dl file.
745     - Added --force-mod-install command line argument to installer to force
746       perl modules used by psad to be installed within /usr/lib/psad
747       regardless of whether they already exist in the system perl tree.
748     - Bugfix in the installer to seek() to the end of the fwdata file
749     - Bugfix for psad repeatedly trying to remove the same IP address(es)
750       from the auto-blocking chains.
751       instead of reading the entire thing into memory.
752     - Added the ability to truncate the fwdata file via a new configuration
753       keyword "TRUNCATE_FWDATA" (this is enabled by default).
754     - Bugfix in auto-blocking mode for deleting AUTO_IPT_SOCK when a HUP
755       signal is received.
756     - Bugfix for parsing iptables policies that contain ULOG logging rules
757       instead of the standard LOG target.
758     - Removed the smtpdaemon requirement in the RPM because psad might be
759       configured to not send email alerts.
760
761 psad-1.4.3 (09/27/2005):
762     - Bugfixes for auto-blocking code.  Timeouts should be handled
763       properly, including cached IP addresses in the auto_blocked_iptables
764       file that are referenced upon psad startup.  Communication with the
765       running psad is performed over a Unix domain socket in --fw-block
766       mode.
767     - Bugfix to seek to the end of the fwdata file instead of reading the
768       entire thing into memory and then looking for newly written logging
769       messages.  This drastically reduces the amount of memory required
770       by psad.
771     - Updated to only display psad chains if --verbose is set
772     - Updated to automatically flush the psad auto-response iptables chains
773       at start time (subject to a new config keyword "FLUSH_IPT_AT_INIT").
774
775 psad-1.4.2 (07/15/2005):
776     - Dependency bugfixes for mail binary.
777     - Bugfix for various IGNORE_* keywords not being honored.
778     - Bugfix for not timing out blocked IP addresses from a previous run.
779     - Updated to version 0.2 of the IPTables::ChainMgr module.
780     - Updated to not truncate the fwdata file upon psad startup.
781     - Added --fw-dump which produces a sanitized (i.e. no IP addresses)
782       version of the local iptables policy.  Also added --fw-include-ips
783       to (optionally) not sanitize IPs/nets.  Note that the 0.0.0.0 and
784       0.0.0.0/0 IPs/nets are not sanitized since they give no useful
785       information about specific IPs/nets.
786     - Added ulogd data collection mode.
787     - Bugfix for FW_MSG_SEARCH default (at least "DROP" is included now
788       even if FW_SEARCH_ALL is set to "N").
789     - Bugfix for non-network address for subnet specified with --fw-block.
790     - Bugfix for multiple --fw-block IPs/nets.
791     - Added README.SYSLOG (Francois Marier contributed the content).
792     - Made email alert prefixes (such as "[psad-alert]") customizable via
793       psad.conf.
794
795 psad-1.4.1 (03/12/2005):
796     - Updated to Snort-2.3 rules in the snort_rules directory.
797     - Re-worked syslog installation portion of install.pl.  The user will
798       always be prompted to enter the syslog daemon now, and also added
799       the --syslog-conf arg to allow the config file path to be specified
800       on the install.pl command line.
801     - Bugfix in install.pl for using IP address instead of network address
802       of directly connected subnets.
803     - Updated to version 4.6.23 of the whois client.
804     - Bugfix for distinguishing OPT field associated with --log-tcp-options
805       vs. --log-ip-options.
806     - Bugfix for syslog format that may not include the "kernel:" tag.
807     - Applied patch to only install perl modules that are not already
808       installed (Blair Zajac).
809     - Bugfix for the psad version number that is sent in DShield alerts.
810     - Updated Psad module directory structure to be consistent with current
811       versions of perl (5.8.x).
812     - Added IPTables::ChainMgr module.
813     - Completely re-worked the iptables auto-blocking code to use
814       IPTables::ChainMgr functions so that auto-generated rules are placed
815       in chains created by psad.
816     - Added IPT_AUTO_CHAIN keyword in psad.conf which is used to define the
817       set of chains to which auto-generated iptables rules are added.
818     - Added --fw-list-auto to display the contents of psad iptables
819       chains.
820     - Added the ability to import an IP into the iptableiptablesocking
821       chains from the command line with --fw-block-ip.  This allows psad to
822       apply its timeout mechanism against such IPs/nets.
823     - Added the ability to ignore packets based on input interface with
824       IGNORE_INTERFACES in psad.conf.
825     - Re-worked auto_dl code, better hash design and searching function.
826     - Removed dependency on sendmail command unless DShield alerting is
827       enabled and a DShield user id is specified.
828     - Added ALERTING_METHODS keyword in the file alert.conf to allow either
829       syslog or email alerts (or both) to be disabled.  Psad and psadwatchd
830       reference this file.
831
832 psad-1.4.0 (11/26/2004):
833     - Added p0f-style passive OS fingerprinting through the use of the OPT
834       field in iptables log messages (which is only logged through the use
835       of the --log-tcp-options command line arg to iptables).
836     - Bugfix for iptables log messages that include tcp sequence numbers
837       (see the iptables --log-tcp-sequence command line argument).
838     - Bugfix for O_RDONLY open flag when kmsgsd receives a HUP signal.
839
840 psad-1.3.4 (10/17/2004):
841     - Bugfix for init script directory on Slackware systems.
842     - Bugfix for null prefix counters.
843     - Added --whois-analysis argument since whois lookups are now disabled
844       by default when running in analysis (-A) mode.
845     - Updated psad_init() to rework setup() and import orderings vs.
846       --fw-analyze and --Benchmark modes.
847     - Added bidirectional iptables auto-blocking support for all chains
848       except for the INPUT and OUTPUT chains.
849     - Better syslog message support when run in auto-blocking mode.
850     - Added iptables auto-block rules section to --Status output.
851     - Added init script for Fedora systems.
852     - Added default_log() function to IPTables::Parse.  This function
853       parses user defined chains in an effort to find default logging
854       rules.
855     - Added EMAIL_LIMIT_STATUS_MSG to control whether or not psad sends a
856       status email when the PSAD_EMAIL_LIMIT threshold has been reached by
857       an IP address.
858     - Added ENABLE_SCAN_ARCHIVE to control whether or not psad archives old
859       scan data within /var/log/psad/scan_archive at start time.
860
861 psad-1.3.3 (09/09/2004):
862     - Fixed __WARN__ and __DIE__ exception handlers so that they
863       reference global message variables.
864     - Fixed auto danger level assignments.  Network auto assignments as
865       well as per-protocol assignments work now.
866     - Added SYSLOG_DAEMON variable to define which syslog daemon is running
867       on the underlying system instead of just guessing.
868     - Added the ability to ignore both ranges and specific ports/protocols
869       with a new variable IGNORE_PORTS in psad.conf.
870     - Bugfix to make sure email addresses are separated by spaces when
871       Psad::sendmail() is called.
872     - Bugfix for ipt_prefix counters not being parsed correct at import
873       time.
874     - Removed exclude_auto_ignore_ip() since this function was made
875       unnecessary by newly rewritten auto-assign code.
876     - Bugfix for Text::Wrap calls in install.pl uninstall() routine.
877     - Bugfix for using --no-fw-search-all even when FW_SEARCH_ALL is
878       set to "Y".
879     - Removed extraneous ".." and "**" chars from syslog messages, and
880       updated to use [+] prefix strings.
881     - Moved init scripts into init-scripts directory within source tree.
882     - Removed dependency on Bit::Vector (psad does not seem to make use
883       of any Date::Calc functions that require it).
884     - Wrapped copy() and move() calls with "or die()" to make them
885       safer in install.pl.
886     - Added check for existing psad process in install.pl.
887     - Updated to a new psad email alert subject format.  Prefixes of
888       "[psad-alert]", "[psad-error]", and "[psad-status]" are used now.
889     - Permissions fixes with umask() setting in /var/log/psad, permissions
890       fixes for files in /etc/psad at install time.
891
892 psad-1.3.2 (06/25/2004):
893     - Removed FW_MSG_SEARCH from psad.conf, and created a new config
894       file "fw_search.conf" that both psad and kmsgsd use to get the
895       FW_MSG_SEARCH definition(s).
896     - Added default mode of parsing all iptables messages instead of
897       just those that contain specific search strings.  A new config
898       variable "FW_SEARCH_ALL" was added to fw_search.conf that
899       controls this mode.
900     - Updated psad and kmsgsd so that multiple firewall search strings
901       can be specified through multiple FW_MSG_SEARCH variables in
902       fw_search.conf.
903     - Added iptables chain and logging-prefix tracking for current
904       scan interval in email alerts.
905     - Added protocol-specific auto-danger level assignments.
906     - Added total scan source and destination IP address counters in
907       --Status output.
908     - Added number of email alerts sent and OS guess in default
909       --Status output.  The output is getting wide now, so there is
910       also a new option --status-brief that will remove the alerts
911       sent and OS guess columns.
912     - Added getopt() command line arg parsing to kmsgsd with two new
913       options "-c" (for config file path) and "-k" (for fw_search.conf
914       path).
915     - Made iptables parsing code into its own script "fwcheck_psad"
916       that gets called by psad.
917     - Added Dshield stats summary to --Status output.
918     - Bugfix for auto-ignore IP addresses and networks being missed.
919     - Made parsing of ifconfig output language independent (should
920       handle French now for example).
921     - Removed "psad_" prefix on files psad_signatures, psad_auto_ips,
922       psad_posf, and psad_icmp_types in /etc/psad/.
923     - Updated to version 4.6.14 of the whois client.
924
925 psad-1.3.1 (12/25/2003):
926     - Added the ability to import /var/log/psad/<ip> directories
927       back into memory so scan data remains persistent across
928       psad restarts or system reboots.
929     - Added --Analyze-msgs to run psad in analysis mode against an
930       iptables logfile (/var/log/psad/fwdata by default).  The logfile
931       path can be changed with --messages-file.
932     - Added icmp type and code validation against RFC 792.
933     - Bugfix for being too strict with FW_MSG_SEARCH.
934     - Added port ranges for tcp and udp scans in <ip>/<dst>_packet_ctr.
935     - Added <ip>/<dst>_start_time and <ip>/os_guess.
936     - Bugfix for missing --no-signatures code.
937     - Updated to Snort-2.1 signatures.
938
939 psad-1.3 (11/30/2003):
940     - Replaced all signatures in psad_signatures with updated snort
941       rules.
942     - Added support for source and destination ip addresses in
943       signature matching code.  A new variable "HOME_NET" makes this
944       possible.
945     - Added support for the iptables output chain.
946     - Added chain tracking for all signatures.
947     - Replaced match_fastsigs() with two new routines for tcp and
948       udp signature matching that don't autovivify hash keys.
949     - Removed support for ipchains.
950     - Added support for metalog.
951     - Removed all "Undefined Code" signatures from psad_signatures.
952     - Re-worked %auto_blocked_ips hash and corresponding blocking
953       routines.  This (hopefully) fixes a restart bug seen on older
954       systems such as those that are still running versions of perl
955       less than 5.6.
956     - Re-worked firewall policy parsing routines.  Chains that have
957       a default policy of DROP are handled properly now.
958     - Bugfix for missing NULL char in kmsgsd.c.
959     - Updated scan alerting format.  Put current interval protocol
960       status before source and destination addresses.
961     - Buffer overflow fix in kmsgsd.c for size of buf[MAX_LINE_BUF]
962       buffer in read() call.
963     - Added --no-kmsgsd option to aid in psad --debug mode.
964
965 psad-1.2.4 (10/15/2003):
966     - Added danger level to subject line in email alerts.
967     - Removed diskmond altogether since psad now handles disk space
968       thresholds directly.  This allows filehandles to be handled
969       properly.
970     - Added auto_block_ignore_ip() to prevent 0.0.0.0, 127.0.0.1,
971       and local interface ips from being included in auto blocking
972       routines.
973     - Added Bit::Vector module to stop installation warnings from
974       Date::Calc.
975     - Made get_local_ips() called periodically since local addresses
976       may change (dhcp, etc.).
977     - Added installation code and init script for Gentoo Linux.
978     - Bugfix for INIT_DIR in uninstall() routine in install.pl.
979     - Bugfix for auto-blocking loop after timeouts are hit.
980     - Added --status-dl [N] to display status information only for
981       those scans that reach at least [N].
982
983 psad-1.2.3 (09/12/2003):
984     - Added interface tracking for scans.
985     - Bugfix for not opening /etc/hosts.deny the right way in
986       tcpwr_block().
987     - Bugfix for psadfifo path in syslog-ng config.
988     - Better format for summary stats section in email alerts.
989     - Bugfix for INIT_DIR path on non-RedHat systems.
990     - Bugfix for gzip path.
991     - Make Psad.pm installed last of all perl modules installed
992       by psad.
993     - Added additional call to incr_syscall_ctr() in psadwatchd.c
994
995 psad-1.2.2 (08/24/2003):
996     - psad is finally available as an RPM package.
997     - Added chain tracking for iptables.
998     - Added chain counts to --Status output.
999     - Bugfix for psad not taking into account multiple scan
1000       destinations.
1001     - Reworked auto-blocking code for both tcpwrappers and
1002       iptables.  Lines added to /etc/hosts.deny will no longer be
1003       duplicated.  Added IPTABLES_AUTO_RULENUM and
1004       IPCHAINS_AUTO_RULENUM so auto rules can be inserted at a
1005       configurable point within iptables and ipchains policies.
1006     - Psad now installs all perl modules within /usr/lib/psad.
1007     - Removed /var/log/psad/<ip>/scanlog file since it was wasting
1008       too much disk.
1009     - Made psad, psadwatchd, and diskmond take the machine hostname
1010       from their respective config files.  This makes installation
1011       via the rpm easier, and is generally cleaner.
1012     - Added scan destination in --Status output.
1013     - Added --status-sort-dl (the default status output is now
1014       sorted by ip address by default).
1015
1016 psad-1.2.1 (07/11/2003):
1017     - Bugfix for multiple processes being spawned by psadwatchd
1018       due to lack of proper config variables in the new split
1019       daemon config files.
1020     - Bugfix for old scan messages being regenerated if a HUP
1021       signal is received.
1022     - Bugfix for incorrectly calculating disk utilization in
1023       diskmond.c.
1024     - Extended install.pl to include compression for archived
1025       files in /etc/psad.
1026     - Added preserve questions in install.pl for the psad
1027       signature and auto ips files.
1028     - Bugfix for --USR1 command line switch not mapping to the
1029       correct subroutine.
1030     - Bugfix for psad man page missing the pipe character in
1031       psadfifo line for syslog.conf.
1032
1033 psad-1.2 (06/18/2003):
1034     - Added passive OS fingerprinting based on packet ttl, length,
1035       tos, and id fields.
1036     - Added dshield.org alerting capability.
1037     - Added exec_external_script() for external script execution.
1038     - Added auto blocked timeouts.
1039     - Implemented config re-imports via HUP signals in a manner
1040       similar to various other system daemons (sysylog, apache
1041       etc.)
1042     - Better --Status output that shows packet counts per protocol
1043       for each ip.
1044     - Added --ip-status for more verbose status output for a
1045       particular ip address.
1046     - Added config preservation code to install.pl.
1047     - Added Psad::psyslog().
1048     - Split psad.conf into a separate config file for each of the
1049       four psad daemons.
1050     - Completely re-worked the auto blocking code (made dedicated
1051       files for iptables and ipchains block methods).
1052     - Added danger level hash.
1053     - Minor code cleanups (shorter hash keys, etc.).
1054
1055 psad-1.1.1 (04/26/2003):
1056     - Bugfix for incorrect usage of %scan hash keys associated
1057       with tcp/udp when the current protocol is icmp.
1058     - Bugfix for being too strict on iptable default log string.
1059     - Reworked USR1 signal handler so the Data::Dumper function
1060       call is made in the main part of the psad code.
1061     - Added a startup message for psad.
1062     - Minor bugfix for leading whitespace in auto_ips.
1063
1064 psad-1.1 (04/20/2003):
1065     - Added the IPTables::Parse module for better processing of
1066       the iptables ruleset.
1067     - Added --snort-sids so that iptables messages generated by
1068       fwsnort can be included in alerts.  Such alerts now include
1069       the content fields of packets (fwsnort uses the iptables
1070       string match module).
1071     - Added the ability to specify entire networks in the auto
1072       ips file through the use of the Net::IPv4Addr module.
1073     - Better logging format that reinstates the current interval,
1074       and adds an "overall stats" section that includes packet
1075       counters per protocol.
1076     - Removed the PROTO hash key since it was unnecesssary.
1077     - Better benchmarking code.
1078     - Bug fix for incorrectly looking for the "MAC" string in
1079       iptables messages that could have been generated by the
1080       FORWARD chain.
1081
1082 psad-1.0 (02/27/2003):
1083     - Added --Benchmark and --packets command line options to support
1084       psad benchmarking.
1085     - Bugfix for improperly detecting NULL scans.
1086     - Completely redesigned website.
1087
1088 psad-1.0.0-pre4 (11/26/2002):
1089     - Rewrote kmsgsd and psadwatchd in C.