[client] disable IP resolution in AFL_FUZZING mode
[fwknop.git] / perl / legacy / fwknop / ChangeLog
1 fwknop-1.9.12 (09/07/2009):
2     - Fully integrated the FKO module that is part of the libfko library for
3       all SPA routines - encryption/decryption, digest calculation, replay
4       attack detection, etc.  The default is to always use the FKO module if
5       it has been installed, but the original perl code remains intact as well
6       just in case FKO does not exist on the local system.  The libfko code
7       can be viewed with Trac here:
8
9             http://trac.cipherdyne.org/trac/fwknop-c
10
11     - Added the ability to recover from interface error conditions, such as
12       when fwknopd sniffs a ppp interface (say, associated with a VPN) that
13       goes away and then is recreated.  In previous versions of fwknop, this
14       would result in the fwknopd daemon no longer able to receive SPA
15       packets.  This new functionality is controlled by five new configuration
16       variables in the fwknop.conf file: ENABLE_INTF_CHECKS,
17       INTF_CHECKS_INTERVAL, ENABLE_INTF_EXISTS_CHECK,
18       ENABLE_INTF_RUNNING_CHECK, and ENABLE_INTF_BYTES_CHECK.  By default, all
19       of these checks are enabled and are run every 20 seconds by the knoptm
20       daemon.  If any check fails, then knoptm stops the fwknopd daemon once
21       the error condition is corrected (such as when the interface comes back)
22       so that knopwatchd will then restart it.  The fwknopd daemon cannot
23       receive packet data until the error condition is cleared (most likely
24       except perhaps for the "RUNNING" check, but restarting the fwknopd
25       daemon is better than not being able to access a service).
26     - Updated the fwknop client to include the SPA destination before DNS
27       resolution when sending an SPA packet over an HTTP request.  This allows
28       more flexible Apache configurations with virtual web hosts to function
29       properly with HTTP requests that contain SPA packet data.  Also updated
30       the fwknop client to include a leading "/" in SPA packets over HTTP, and
31       updated the fwknopd server to strip this out before attempting SPA
32       packet decryption.
33     - Updated the fwknop client to resolve external IP addresses (with the -R
34       argument) via the following link by default:
35
36           http://www.whatismyip.com/automation/n09230945.asp
37
38     - (Jonathan Bennett): Submitted patch to the fwknop client to add HTTP
39       proxy support when sending SPA packets over HTTP.  The result is a new
40       --HTTP-proxy option that expects the proxy host to be given as
41       "http://HOST", and it also supports the "http://HOST:PORT" notation as
42       well.
43     - Added the ability in fwknopd to receive SPA packets directly from either
44       a TCP or UDP socket instead of using libpcap.  This bypasses libpcap
45       altogether.  The fwknop_serv process listens on the socket and when it
46       receives an SPA packet it sends it to fwknopd via a UNIX domain socket
47       for decryption, validation, and firewall rule access to services
48       requested in the SPA packet.  While TCP sockets are supported, it is
49       better to use UDP instead since fwknop_serv never sends any data back to
50       the client.  Hence, when UDP is used there is no way to scan for the
51       service (nmap will report that it is 'open|filtered').  To enable this
52       method for acquiring SPA packet data, set AUTH_MODE to 'SOCKET' in the
53       /etc/fwknop/fwknop.conf file, and set either ENABLE_TCP_SERVER or
54       ENABLE_UDP_SERVER as well.
55     - (Martin Tan): Submitted a patch to allow rules added by fwknopd to not be
56       expired if there are any established connections involving a source IP
57       and a list of ports.  Once the established connections are removed, then
58       any rules added by fwknopd are then allowed to also be removed.  This
59       feature is controlled by three new configuration variables in the
60       fwknop.conf file: ENABLE_CONNTRACK_PERSIST, CONNTRACK_ESTAB_PORTS, and
61       IPT_CONNTRACK_FILE.
62     - (Test suite): Accounted for a difference in the SPA implementation of the
63       libfko C library and its corresponding FKO perl module when it comes to
64       appending garbage data to SPA packets encrypted with Rijndael.  The
65       Crypt::Rijndael module allows garbage data to be appended (the decrypted
66       data is properly returned though) whereas libfko does not (this is
67       better).
68     - (Test suite): Added fwknop_test.pl command line arguments to the test.log
69       file so that it is easy to see how the test suite is invoked.
70
71 fwknop-1.9.11 (05/11/2009):
72     - (Julien Picalaus) Contributed patches to implement a proper interface to
73       use ipfw 'sets' on systems running ipfw firewalls.  This involved
74       changes to fwknopd, knoptm, and the fwknop.conf file like so:
75       Added a test to see if the local ipfw firewall policy is using dynamic
76       rules. Added ipfw_move_rule() so that rules can be moved from one set to
77       another. Added ipfw_disable() set subroutine and it is called at init for
78       IPFW_SET_NUM (except when ipfw isn't using dynamic rules).  Made sure
79       that rule finding includes disabled rules (ipfw list -S and changes to
80       regexp) and returning the set in addition to the rule number.  When
81       granting access, if a corresponding disabled rule already exists, enable
82       it instead of adding a new one (except when ipfw isn't using dynamic
83       rules). When adding rules, only use keep-state if there are already
84       dynamic rules.  Added IPFW_SET_NUM so that the set number for new ipfw
85       can be specified, and add IPFW_DYNAMIC_INTERVAL so that the interval
86       over which rules that have no associated dynamic rules are removed (the
87       default is 60 seconds).
88     - (Franck Joncourt) Bug fix to add -O command line arg to knopwatchd to
89       specify an override config file if one is given on the fwknopd command
90       line.
91     - Added --icmp-type and --icmp-code command line arguments for the fwknop
92       client in order to manually set the ICMP type/code values when using
93       "--Spoof-proto icmp" or "--Server-proto icmp".  Also restructured how
94       SPA packets are sent over the various protocols.  Here is an example of
95       sending an SPA packet over an ICMP packet with type "123" and code
96       "123" (not normal ICMP type/code values) with the pcap trace shown:
97
98       # fwknop -A tcp/22 -s --Server-proto icmp --icmp-type 123 --icmp-code
99       123 -D 127.0.0.1
100
101       # tcpdump -i lo -l -nn icmp or udp -s 0 -X
102       tcpdump: verbose output suppressed, use -v or -vv for full protocol
103       decode listening on lo, link-type EN10MB (Ethernet), capture size 65535
104       bytes
105
106       07:24:32.527221 IP 127.0.0.1 > 127.0.0.1: ICMP type-#123, length 169
107         0x0000:  4510 00bd 0000 4000 4001 3c2e 7f00 0001  E.....@.@.<.....
108         0x0010:  7f00 0001 7b7b e66f 0000 0000 2b63 6a6f  ....{{.o....+cjo
109         0x0020:  5049 6138 7345 7a35 4864 7955 5176 624b  PIa8sEz5HdyUQvbK
110         0x0030:  6637 6f51 5934 4e36 4c6c 3454 6931 4453  f7oQY4N6Ll4Ti1DS
111         0x0040:  2b4f 3756 6636 4775 6234 756f 6738 4432  +O7Vf6Gub4uog8D2
112         0x0050:  3155 4377 5259 6b52 2b30 354b 7043 6b33  1UCwRYkR+05KpCk3
113         0x0060:  4f66 452f 4f32 6737 6d37 5064 4846 4842  OfE/O2g7m7PdHFHB
114         0x0070:  7a32 4745 3766 7a31 4a4c 7652 764e 626c  z2GE7fz1JLvRvNbl
115         0x0080:  7a4a 7250 5355 3665 5051 5375 7a54 394b  zJrPSU6ePQSuzT9K
116         0x0090:  702b 4446 4a79 7a6b 3847 6c51 6a70 3564  p+DFJyzk8GlQjp5d
117         0x00a0:  3957 3673 4f52 7945 3771 6f57 6b56 634e  9W6sORyE7qoWkVcN
118         0x00b0:  4e41 6167 6231 5a79 6a63 4834 49         NAagb1ZyjcH4I
119
120     - Updated all unpack() calls for packet decoding in fwknopd to use the
121       "mN" format instead of "m[N]" format for proper operation on older
122       versions of perl.  On FreeBSD 7.0 with perl-5.6.2 the following error
123       is generated without this fix: "Invalid type in unpack: '['".
124     - Bug fix to not require that gpg is installed in order to install fwknop.
125     - (Franck Joncourt) Documentation updates for the knopwatchd.8 man page
126       to include the latest command line options.
127     - (Martin Ferrari) Bug fix to provide a work around for fwknopd segfaults
128       on Debian systems when the version of Net::Pcap that is installed comes
129       from doing 'apt-get install fwknop-server'.  See the thread at
130       http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=508432 for more info.
131     - Bug fix to ensure that UDP rules in ipfw firewalls are timed out
132       correctly by knoptm (the problem was that 'keep-state' was required).
133     - (Test suite): Added tests for multi-port access requests.  So, to gain
134       access to tcp/22,udp/1194 with one SPA packet, the test suite verifies
135       that the code support this.
136     - (Test suite): Started on updates to handle the upcoming libfko C
137       implementation of Single Packet Authorization (the command line args
138       are somewhat different).
139     - (Test suite): Added support for multiple include/exclude test
140       identifying strings (separated by commas).  For example, to run the
141       'Setup', 'Basic', and 'Replay' tests, just do:
142
143       ./fwknop_test.pl --include Setup,Basic,Replay
144
145     - (Test suite): Added the ability to test sending SPA packets over ICMP.
146     - (Test suite): Added import_perl_modules() routine from fwknop itself to
147       enforce the usage of the same perl modules as those that fwknop
148       references.  The main application of this is for the Net::RawIP module
149       which is used by the test suite for the SPA over ICMP tests.
150
151 fwknop-1.9.10 (01/12/2009):
152     - Added the ability to send SPA packet over HTTP to a webserver.  This
153       requires that the same running fwknopd is also running a webserver, or
154       that ENABLE_TCP_SERVER is enabled so that fwknopd spawns fwknop_serv to
155       listen on a real TCP socket.  Sending SPA packets over HTTP is
156       accomplished with a new command line argument --HTTP on the fwknop
157       client command line, and via a new configuration variable
158       ENABLE_SPA_OVER_HTTP in the fwknop.conf file.
159     - Added ENABLE_EXTERNAL_CMDS for fwknopd to control whether the
160       EXTERNAL_CMD_OPEN and EXTERNAL_CMD_CLOSE directives are used (instead of
161       just checking whether they are set to __NONE__);
162     - Bug fix to make sure to properly construct hash reference for the
163       "include" command list for the check_commands() function when checking
164       for the mail command.
165     - Bug fix for fwknopd to not require Net::Pcap::lookupnet() to succeed on
166       interfaces with no IPv4 address assigned.  This function sets the IP and
167       netmask of the local interface, but if fwknopd sniffs an interface
168       without any IP assigned, then such information will not necessarily
169       exist.
170     - Bug fix to add --Override config support to knopwatchd (Franck
171       Joncourt).
172     - Bug fix to add client timeout (--fw-timeout) support to both forward
173       NAT and local NAT modes (Damien Stuart).  This required increasing the
174       number of expected fields in decrypted SPA packets in fwknopd.
175     - Bug fix in the install.pl script for Cygwin systems (or others where a
176       client-mode only install is done) to take into account the newer perl
177       library path handling code.
178     - Updated minimum ICMP header length to 8 bytes in fwknopd to accept
179       spoofed SPA packets over ICMP echo requests.
180     - Added config dumping support to knopwatchd with -D (Franck Joncourt).
181     - Minor code cleanups and updates to knopwatched (such as the usage of
182       isspace() to allow tab chars between variable names and values in the
183       fwknop.conf file (Franck Joncourt).
184     - Added ENABLE_COOKED_INTF to force fwknopd to always treat the sniffing
185       interface as the "cooked" interface type found on Linux.
186     - Updated knopwatchd to allow more than one overwrite file (Franck
187       Joncourt).
188     - Added --Single-mod-install to the perl installer so that individual
189       module dependencies can be installed piecemeal.
190     - (Test suite): Bug fix for the proper usage of the 'ps' command on
191       FreeBSD and Mac OS X systems.  The test suite now runs successfully on
192       these systems after this fix.
193     - (Test suite): Added the ability to test sending SPA packets over
194       established TCP connections with the fwknop_serv daemon.
195     - (Test suite): Added support for collecting *.warn and *.die output for
196       each test as it is executed and appending this data to each test output
197       file.
198
199 fwknop-1.9.9 (11/13/2008):
200     - Added support to fwknop for the Linux 'any' interface which allows SPA
201       packets to be received on multiple interfaces on a Linux system.  This
202       is useful for running fwknop on a dual-homed Linux host, and then
203       accepting SPA packets on either the internal or external interface so
204       that SPA packets can influence the packet filter from either network.
205     - Added support for interfacing fwknop with third party software through
206       the addition of three new variables in the access.conf file (or set
207       globally in the fwknop.conf file): EXTERNAL_CMD_OPEN,
208       EXTERNAL_CMD_CLOSE, and EXTERNAL_CMD_ALARM.
209             The "open" and "close" commands might be manually supplied firewall
210       commands, and both support variable substitution of any of the variables
211       in the access.conf file with "$VAR".  Also, three special variables are
212       supported: $SRC, $PORT, and $PROTO, which are derived from actual values
213       from within valid SPA packets (as opposed to $SOURCE from access.conf
214       which may contain a list of networks instead of a single IP address).
215         Here are some examples:
216         - Execute a specific iptables command on behalf of the source IP
217           in a valid SPA packet to add a new ACCEPT rule, and execute another
218           command (to delete the same rule after a timeout):
219                 EXTERNAL_CMD_OPEN       iptables -A INPUT -s $SRC -j ACCEPT
220                 EXTERNAL_CMD_CLOSE      iptables -D INPUT -s $SRC -j ACCEPT
221         - Execute a custom binary with the SOURCE and OPEN_PORTS variables from
222           the access.conf file as input on the command line, and after a
223           timeout execute a different program but use the real SPA source IP:
224                 EXTERNAL_CMD_OPEN       /path/someprog $SOURCE $OPEN_PORTS
225                 EXTERNAL_CMD_OPEN       /path/otherprog $SRC
226     - Added IPT_CMD_ALARM to control the number of seconds that the
227       IPTables::ChainMgr module uses to wrap alarm() calls around iptables
228       commands (for IPTables::ChainMgr 0.8 and later, although this does not
229       interfere with earlier versions of the module).
230     - Added IPT_EXEC_STYLE to control the execution method used for iptables
231       commands in the IPTables::ChainMgr module.  The default is "waitpid",
232       but "system", and "popen" are also supported.
233     - Added IPT_EXEC_SLEEP to control the number of seconds that the
234       IPTables::ChainMgr module uses to delay between each iptables command.
235       The default is zero (no delay), but this can be increased to ensure that
236       iptables commands are issued at a slower pace.
237     - Added IPT_EXEC_TRIES to allow critical iptables commands to be tried
238       multiple times (with a default of 1) in case there are any errors from
239       iptables execution.
240     - Added --Override-config to fwknopd (suggested by Franck Joncourt) to
241       allow config variables in the normal /etc/fwknop/fwknop.conf file to be
242       superseded by values from other specified files.  The --Override-config
243       command line argument accepts a comma-separated list of multiple files
244       from which to import configuration variables from.
245     - Added code to prefer the usage of the /usr/sbin/sendmail binary to send
246       email alerts before falling back to the mail binary (suggested by
247       Alexander Perlis).
248     - Added --Dump-config to fwknopd (suggested by Franck Joncourt).
249     - Added execution of --Dump-config to the test suite to collect the
250       installed version of the fwknop.conf and access.conf files (personal
251       information is anonymized).
252     - Updated fwknopd to use the POSIX sys_wait_h API for SIGCHLD handling in
253       order to be more consistent with an example from the perlipc man page.
254     - Updated fwknopd to pass in a reference to the SIGCHLD signal handler to
255       the IPTables::ChainMgr module so that all command executions via fork()
256       and exec() are associated with the same signal handler.
257     - Updated to IPTables::ChainMgr version 0.8.
258     - Updated to IPTables::Parse version 0.7.
259     - (Test suite): Added time stamps to MSG and TEST lines for each test
260       (useful to see the relative time if an alarm expires).
261     - (Test suite): Added tests for fwknopd --Override-config, --Dump-config,
262       and writing SPA packets to disk with the --Save-packet functionality (in
263       the fwknop client).
264     - (Test suite): Added tests for IPT_EXEC_SLEEP delays for executing
265       iptables commands.
266     - (Test suite): Added tests for Linux 'any' interface capture of SPA
267       packets on all interfaces.
268     - (Test suite): Added the ability to collect output from knoptm to see
269       when requests are received from fwknopd and when rules are added and
270       removed.
271     - Added version information for fwknopd to syslog startup message.
272     - Bug fix for the fwknop client in symmetric key mode where the terminal
273       would not be taken out of 'noecho' mode if a password less than 8
274       characters long is provided.  Previous to this fix, it was necessary to
275       blindly type 'reset'.  (Reported by Alexander Perlis.)
276
277 fwknop-1.9.8 (09/30/2008):
278     - Added GPG_NO_REQUIRE_PREFIX to access.conf to control whether the GnuPG
279       'hQ' prefix is added before base64 decoding and decrypting.  Normally
280       this is not needed, but if there appear to be communications issues
281       between the fwknop client and the fwknopd server then this option can be
282       useful to ensure that encrypted SPA data is sent through the GnuPG
283       decryption routine.  The 'hQ' prefix is a heuristic derived from the
284       file 'magic' database for describing data encrypted with GnuPG, and the
285       fwknop client normally strips this data from outgoing SPA packets
286       (unless the --Include-gpg-prefix option is used).
287     - Added 'GPG_PATH <path>' to fwknopd (via access.conf) so that different
288       paths to the gpg binary can be specified on a per-SOURCE basis.  This
289       allows one SOURCE stanza to apply one gpg binary to decrypt incoming SPA
290       packets (say /usr/bin/gpg), and another SOURCE stanza to apply to another
291       gpg binary (say /usr/bin/gpg2).  In this way, fwknop/fwknopd now
292       supports gpg2 in addition to gpg.
293     - Bugfix to make sure that neither fwknop nor fwknopd reference any
294       options file in GnuPG mode, and this is now the default (which overrides
295       the now unnecessary --gpg-no-options arg).  There is a new option
296       --gpg-use-options and GPG_USE_OPTIONS to restore the usage of an options
297       file by GnuPG by fwknop and fwknopd (not normally needed).
298     - Added '--gpg-prefix <bytes>' to the fwknop client so that the
299       predictable prefix for GnuPG encrypted data can be changed.  Normally
300       this prefix is 'hQ' (base64 encoded), or the raw bytes 0x8502.
301     - Added the ability to control the path used for the gpg binary on the
302       client side with a new argument '--gpg-path <path>', and on the server
303       side with gpgCmd in the fwknop.conf file.  The GnuPG::Interface module
304       normally just takes the first instance of gpg that is the current path,
305       but this new feature allows the path to the binary to be explicitly set.
306     - Added --Save-packet-append to allow SPA packets to be appended to the
307       --Save-packet-file in --Save-packet mode.  This allows multiple SPA
308       packets to more easily be stored for closer examination (i.e. to make
309       sure randomness is high or to test encryption properties over large
310       sets of SPA packets).
311     - Updated fwknopd to enforce the DIGEST_TYPE variable more strictly by not
312       accepting SPA packets that do not include digest of the specified type.
313       The DIGEST_TYPE default is 'ALL', so normally fwknopd accepts any
314       supported digest.
315     - Bugfix to make sure to apply BLACKLIST checks to IP addresses specified
316       with -a (or derived via -R) in addition to the source IP in the IP
317       header (which can be modified via --Spoof-src).  (Franck Joncourt
318       submitted a patch for this.)
319     - Bugfix to ensure that the permissions for the
320       /var/run/fwknop/knopwatchd.pid file are set to 0600 (noticed by Franck
321       Joncourt).
322     - Bugfix to remove the Net::IPv4Addr dependency in the fwknop client and
323       knoptm daemon (Franck Joncourt).
324     - (Test suite) Added the base64_byte_frequency.pl script to the test/
325       directory.  This script parses files that contain base64 encoded data
326       (one record per line), and produces data files that can be graphed with
327       Gnuplot in order to visualize SPA packets.  The new --Save-packet-append
328       argument makes it easy to generate large collections of SPA packets with
329       the fwknop client, and this data can then be parsed by
330       base64_byte_frequency.pl to look for features that are common across SPA
331       packets (this should be minimized because every fwknop SPA packet contains
332       16 bytes of random data).  Some analysis of randomness in SPA packets
333       generated by fwknop is presented in this blog post:
334
335       http://www.cipherdyne.org/blog/2008/09/visualizing-spa-packet-randomness.html
336
337     - (Test suite) Added tests for GPG_NO_REQUIRE_PREFIX functionality and for
338       the expected GnuPG prefix.
339     - (Test suite) Added tests for GnuPG version 2 (a check is made to see if
340       it is installed before these tests are run).
341
342 fwknop-1.9.7 (08/24/2008):
343     - Mirek Trmac from Red Hat contributed several patches so that fwknop can
344       be bundled within the Fedora Linux distribution.  These patches
345       implemented the following changes:
346
347         Updates to fwknopd to remove the NetPacket module as a dependency
348       (this is a particularly important update since it assists with getting
349       fwknop bundled with Debian as well).  The patch manually decodes the
350       network and transport layer headers.
351         A patch to make the fwknop init script not start fwknopd by default
352       on Red Hat systems.  This patch also supports Fedora init script
353       conventions better (i.e. fwknop instead of the fwknopd name for the lock
354       file in /var/lock/subsys).
355         Updated the fwknop Makefile to respect the OPTS variable which is used
356       in the RPM spec file.
357         Bugfix in fwknop_serv to support the variable expansion code from
358       fwknopd.  This was important for the TCPSERV_PID_FILE file which is
359       defined as $FWKNOP_RUN_DIR/fwknop_serv.pid.
360         Updated fwknopd to use the Net::Pcap API valid in Net::Pcap-0.14 for
361       the datalink() function (used to detect the datalink layer type).
362
363     - Updated fwknop, fwknopd, and knoptm to import perl modules out of the
364       /usr/lib/fwknop/ directory if it exists.  This allows the perl module
365       path to be manipulated via the --Lib-dir command line argument and
366       'require' statements instead of the old 'use module' strategy.
367     - Added module version output for each non-core perl module used by fwknop
368       and fwknopd in --debug mode.  This is mostly useful for the test suite
369       to see which versions of the modules are being used.
370     - Added the ability to ignore any local GnuPG 'options' file with a new
371       command line argument --gpg-no-options (for the fwknop client) and a new
372       access.conf config variable GPG_NO_OPTIONS (for the fwknopd daemon).
373       This fixes a problem reported by Mike Holzmann where the 'encrypt-to'
374       option in the default options file was causing SPA packets to exceed
375       1500 bytes when encrypted with a 2048-bit GnuPG key.  Also added the
376       MAX_SNIFF_BYTES to the fwknop.conf file and --Max-packet-size to the
377       fwknop command line to alter the default of 1500 bytes if needed (but
378       this shouldn't really be necessary).
379     - Bugfix for 'Premature end of base64 data' and 'Premature padding of
380       base64 data' warning messages from MIME::Base64 errors.  Now fwknopd
381       applies more rigorous checks for base64 encoded characters, and either
382       of these two messages above will result in the packet data being
383       discarded before it is sent through any decryption function.  Mike
384       Holzmann reported this issue.
385     - (Test suite) Added --test-system-fwknop to allow any installed version
386       of fwknop to be installed instead of the scripts bundled within the
387       local source distribution.
388
389 fwknop-1.9.6 (07/18/2008):
390     - SPA packets are base64-encoded by the fwknop client, and this encoding
391       pads data with '=' chars until the total length of the encoded data is a
392       multiple of four.  This characteristic can be used within a Snort rule
393       to assist in the detection of SPA communications.  The 1.9.6 release of
394       fwknop strips out these padding characters before the client sends an
395       SPA packet, and the fwknopd server adds them back in (to form a multiple
396       of four) before base64 decoding the packet data.  This reduces the level
397       of identifying information in SPA packets and therefore makes it more
398       difficult to detect the usage of SPA for service access.  For reference,
399       a Snort rule that would detect SPA packets via the trailing '=' chars
400       (previous to this release) would be:
401
402         alert udp any any -> any 62201 (msg:"fwknop SPA traffic"; \
403         dsize:>150; pcre:"/==$/"; sid:20080001; rev:1;)
404
405     - According to the 'file' command (via it's 'magic') database, files that
406       are encrypted with GnuPG begin with 0x8502, and this is true for SPA
407       packets generated by fwknop (previous to this release).  In
408       fwknop-1.9.6, the "hQ" prefix is removed by the fwknop client and added
409       back in by the fwknopd server if it doesn't exist.  This measure is
410       another effort to make SPA packets more difficult to detect on the wire,
411       such as with the following Snort rule:
412
413         alert udp any any -> any 62201 (msg:"fwknop GnuPG encrypted SPA
414         traffic"; content:"hQ"; depth:2; dsize:>1000; sid:20080003; rev:1;)
415
416     - Updated the fwknop client to randomize the UDP source port for default
417       SPA packet generation.  There is also a new command line argument
418       --Source-port <port> to allow the user to manually set the source port
419       on the fwknop client command line.  A lot more attention is given now to
420       source ports after the Dan Kaminsky DNS caching exploit, and it turns
421       out that even on Linux that the kernel did not randomize UDP source
422       ports until the 2.6.24 kernel.  Of course, any userspace process is free
423       to request a random port itself, but if a userspace application did not
424       build this in then it would be up to the kernel to assign a source port.
425       In the case of Linux, here are two links that show the change to the
426       kernel code as well as the ChangeLog entry for UDP source port
427       randomization:
428
429         http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;\
430         a=commit;h=32c1da70810017a98aa6c431a5494a302b6b9a30
431         http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.24
432
433     - (Test suite): Added the ability to explicitly run major classes of tests
434       with two new command line arguments to the fwknop_test.pl script:
435       --test-include <test>, and --test-exclude <test>.  In each case the
436       <test> string is used as a sub-string match against the main identifying
437       string for the name of the test.  For example, to run all tests for
438       replay attacks, use "--test-include Replay", and for all port
439       randomization tests use "--test-include random".  To see all possible
440       classes of tests, run the test suite without any command line arguments
441       and examine the test.log file.
442     - (Test suite): Added tests for the legacy shared and encrypted port
443       knocking modes.
444     - (Legacy port knocking mode): Updated to not require iptables log
445       messages to be written to the fwknopfifo named pipe and just parse the
446       /var/log/messages file directly by default.  This can be configured via
447       two new variables ENABLE_SYSLOG_FILE and IPT_SYSLOG_FILE (similarly to
448       the psad project).  In support of this feature, install.pl now does not
449       create the fwknopfifo or reconfigure the syslog daemon unless the
450       --install-syslog-fifo argument is used, and the knopmd does not have to
451       run.
452     - (Legacy port knocking mode): Added the ability to re-open the
453       /var/log/messages file if it is rotated by an external program such as
454       logrotate.
455     - (Test suite): Bugfix to use --fw-type argument on fwknopd command line.
456       This fixes various tests on Mac OS X and FreeBSD systems running ipfw.
457     - Minor bugfix to require a space character after variable names when
458       parsing the fwknop.conf file via knopmd and knopwatchd (implemented in
459       fwknop_funcs.c)
460
461 fwknop-1.9.5 (06/08/2008):
462     - Updated to Class::MethodMaker 2.11 from CPAN.  This helps with systems
463       running perl-5.10.0 and greater (such as Fedora 9).
464     - Added the LOCALE variable to fwknop.conf and made the "C" locale set by
465       default so that gpg process output would always be correctly
466       interpreted.
467     - Updated to Net::RawIP 0.23 from 0.21_03 and removed List::MoreUtils
468       since Net::RawIP no longer requires it
469     - Updated to Crypt::Rijndael 1.06 from 1.04.
470     - Updated to Crypt::CBC 2.29 from 2.19.
471     - Updated to GnuPG::Interface 0.36 from 0.34.
472     - Removed legacy knopmd.conf file since knopmd uses the fwknop.conf file
473       instead.  Also, note that knopmd only runs in the legacy port knocking
474       mode to collect iptables log information from syslog.  The default
475       authentication/authorization method used by fwknop is SPA which exhibits
476       far better security properties than port knocking (see
477       http://www.cipherdyne.org/fwknop/docs/SPA.html).
478
479 fwknop-1.9.4 (06/01/2008):
480     - Added two new port randomization options.  The first instructs the
481       fwknop client to select a random port between 10,000 and 65,535 as the
482       destination port over which to send an SPA packet.  This feature is
483       enabled with a new command line argument "--rand-port" like so:
484
485       $ fwknop -A tcp/22 --rand-port -R -D 11.1.1.1
486
487       On the fwknopd server side, the default PCAP_FILTER setting of "udp port
488       62201" should be changed to "udp dst portrange 10000-65535" so that
489       fwknopd can sniff SPA packets that are sent over randomized destination
490       ports.  Randomizing the destination port makes it more difficult to
491       write IDS signatures to detect fwknop SPA communications.
492
493       The second port randomization technique uses a new SPA message type to
494       tell the fwknopd daemon to create a NAT rule for access to a local
495       socket via the iptables INPUT chain.  This allows an SSH client to meet
496       the local SSHD daemon running on the fwknopd server system by SSH'ing to
497       the random port.  This functionality is implemented via two new command
498       line arguments on the fwknop client command line: "--NAT-rand-port" to
499       instruct fwknop to select a random port over which the follow-on
500       connection will be made), and "--NAT-local" (to instruct the fwknopd
501       server that new firewall rules should NAT an incoming connection to the
502       randomly selected port).  Here is an example:
503
504       $ fwknop -A tcp/22 --NAT-rand-port --NAT-local -R -D 11.1.1.1
505
506       Now the fwknop client will select a random port to NAT the incoming
507       connection.  So say it selects port 31001 (as indicated by the output of
508       fwknop on the command line as displayed below) - then you would SSH to
509       this port to access the real SSH daemon on the system where fwknopd is
510       running:
511
512       [+] Sending 206 byte message to 127.0.0.1 over udp/46245...
513       Requesting NAT access to tcp/22 on 127.0.0.1 via port 31001
514
515       $ ssh -p 31001 <user>@11.1.1.1
516
517       Note that in this case it is not necessary to use --NAT-access since the
518       fwknopd daemon knows that access is requested to a local service (so an
519       internal IP address does not have to be specified).
520
521     - Added the ability to specify the port that SPA packets are sent over
522       with the fwknop client by using the syntax "<host|IP>:<port>".  So, for
523       example, to have the client send an SPA packet to 11.1.1.1 over UDP port
524       12345 (instead of the default of 62201), one could use the following
525       command:
526
527       $ fwknop -A tcp/22 -R -D 11.1.1.1:12345
528
529     - Bugfix to add a check for "keep-state" in ipfw policies in addition to
530       the existing "check-state" check (noticed by Sebastien Jeanquier).
531     - Updated the install.pl script to try to determine the OS type as early
532       as possible during the install process.
533     - Added the MIN_SPA_PKT_LEN variable with 150 (bytes) as the default.
534       This allows fwknopd to ignore packets that are not at least this many
535       bytes (including packet headers) before any decryption attempt is made.
536     - Added --time-offset-plus and --time-offset-minus args to the fwknop
537       client command line.  This allows the time stamp within an SPA packet to
538       be influenced without setting the system clock (which normal users
539       cannot usually do).  This is useful for when the client and server
540       systems have clocks that are out of sync.
541     - Bugfix on Ubuntu systems to make sure that the fwknop init script is
542       installed with a priority of 99 instead of 20 - this puts fwknop as late
543       as possible within the boot sequence so that the system is ready to run
544       fwknop.
545     - Bugfix to not open ports that are not specifically requested in an SPA
546       packet even if those ports are listed in the OPEN_PORTS variable in the
547       access.conf file.
548     - Updated to version 5.47 of the Digest::SHA module.
549     - Updated to version 0.7 of the IPTables::ChainMgr module (includes
550       perldoc documentation).
551     - Updated to version 0.6 of the IPTables::Parse module (includes perldoc
552       documentation).
553     - Added NAT, port randomization, and and time offset option discussions to
554       fwknop(8) man page.
555
556 fwknop-1.9.3 (04/05/2008):
557     - Added MASQUERADE and SNAT support to complement inbound DNAT connections
558       for SPA packets that request --Forward-access to internal systems.  This
559       functionality is only enabled when both ENABLE_IPT_FORWARDING and
560       ENABLE_IPT_SNAT are set, and is configured by two new variables
561       IPT_MASQUERADE_ACCESS and IPT_SNAT_ACCESS which define the iptables
562       interface to creating SNAT rules.  The SNAT supplements of DNAT rules
563       are not usually necessary because internal systems usually have a route
564       back out to the Internet, but this feature accommodates those systems
565       that do not have such a route.  By default, the MASQUERADE target is
566       used if ENABLE_IPT_SNAT is enabled because this means that the external
567       IP does not have to be manually defined.  However, the external IP can
568       be defined by the SNAT_TRANSLATE_IP variable.
569     - Added hex_dump() feature for fwknop client so that raw encrypted SPA
570       packet data can be displayed in --verbose mode.
571     - When ENABLE_IPT_FORWARDING is set, added a check for the value of the
572       /proc/sys/net/ipv4/ip_forward file to ensure that the local system
573       allows packets to be forwarded.  Unless ENABLE_PROC_IP_FORWARD is
574       disabled, then fwknopd will automatically set the ip_forward file to "1"
575       if it is set to "0" (again, only if ENABLE_IPT_FORWARDING is enabled).
576     - Minor bugfix to remove sys_log() call in legacy port knocking mode.
577     - Minor bugfix to expand both the Id and Revision tags via the
578       svn:keywords directive.
579
580 fwknop-1.9.2 (03/12/2008):
581     - Crypt::CBC adds the string "Salted__" to the beginning of the encrypted
582       text (at least for how fwknop interfaces with Crypt::CBC), so the fwknop
583       client was updated to delete the encoded version of this string
584       "U2FsdGVkX1" before sending a Rijndael-encrypted SPA packet on the wire.
585       The fwknopd server will add this string back in before decrypting.  This
586       makes it harder to write an IDS signature that looks for fwknop traffic;
587       e.g. look for the default prefix string "U2FsdGVkX1" over UDP port 62201,
588       which would work for fwknop clients < 1.9.2 (as long as the port number
589       is not changed with --Server-port).
590     - Added more granular source IP and allowed IP tests so that access to
591       particular internal IP addresses can be excluded in --Forward-access
592       mode.  A new keyword "INTERNAL_NET_ACCESS" is now parsed from the
593       access.conf file in order to implemented these restrictions.
594     - (SPAPICT Group) Added BLACKLIST functionality to allow source IP
595       addresses to easily be excluded from the authentication process.
596     - (Grant Ferley) Submitted patch to handle SIGCHLD in IPTables::ChainMgr.
597     - (Grant Ferley) Submitted patch to handle Linux "cooked" interfaces for
598       packet capture (e.g. PPPoE interfaces).
599     - (SPAPICT Group) Applied modified version of the client-defined access
600       timeout patches submitted by the PICT SPA Group.  There are two new
601       message types to facilitate client timeouts; one for normal access mode,
602       and the other for the FORWARD access mode.  In the access.conf file,
603       there is also a new variable "PERMIT_CLIENT_TIMEOUT" to allow each
604       SOURCE stanza to allow client-defined timeouts or not.
605     - (SPAPICT Group) Submitted patches to include support for the SHA1 digest
606       algorithm for SPA packet replay attack detection.  I modified these
607       patches for maximum configurability (see the --digest-alg argument on
608       the fwknop command line), and the ability to use the SHA256 algorithm as
609       well.  The default path to the /var/log/fwknop/md5sums file has been
610       changed to /var/log/fwknop/digest.cache, and the default digest
611       algorithm is now SHA256 (but this is tunable via the DIGEST_TYPE
612       variable in the fwknop.conf file).
613     - Added the Digest::SHA perl module in support of the SHA1 and SHA256
614       digest algorithms for replay attack detection and SPA message integrity.
615     - Added full packet hex dumps (including packet headers) to fwknopd in
616       --debug --verbose mode.  This is to help diagnose packet sniffing issues
617       over the loopback interface on Mac OS X (first reported by Sebastien
618       Jeanquier).
619     - (Test suite) Bugfix to ensure that the FWKNOP_DIR variable is set to the
620       local output/ directory in several of the test config files in the
621       test/conf/ directory.
622     - (Test suite) Added several tests for configurable digest algorithms in
623       support for the SHA256, SHA1, and MD5 digest changes made by the SPAPICT
624       Group.
625     - Updated the fwknop client to always call encode_base64() with the string
626       to encode along with a second null-string argument to force all encoded
627       data to not include line breaks.
628     - Bugfix in install.pl to not test for the iptable command on non-Linux
629       systems, and to not test for the ipfw command on systems that are Linux.
630     - (Test suite) Updated to include the /proc/config.gz file so that the
631       kernel config can be reviewed (not all Netfilter hooks are necessarily
632       compiled in).
633
634 fwknop-1.9.1 (01/26/2008):
635     - Added ENABLE_OUTPUT_ACCESS keyword to access.conf file parsing. This
636       provides a similar configuration gate for the iptables OUTPUT chain to
637       the ENABLE_FORWARD_ACCESS keyword, and adds the abiliy to control which
638       access.conf SOURCE blocks interface to the OUTPUT chain.
639     - Better installation support for various Linux distributions including
640       Fedora 8 and Ubuntu.  The current runlevel is now acquired via the
641       "runlevel" command instead of attempting to read /etc/inittab (which
642       does not even exist on Ubuntu 7.10), and there are new command line
643       arguments --init-dir, --init-name, and --runlevel to allow the init
644       directory, init script name, and the runlevel to be manually specified
645       on the install.pl command line.
646     - Added command line argument display to fwknop client --verbose mode.
647     - Updated the test suite to include OUTPUT chain tests, reference
648       access.conf files in the test/conf/ directory, and perform SPA packet
649       format validation tests by parsing fwknopd output.
650     - Updated fwknopd to use always use the -c argument on the knoptm command
651       line (this makes sure that the test suite usage of fwknopd causes knoptm
652       to reference the correct configuration).
653     - Updated IPTables::ChainMgr to print iptables command output to stdout or
654       stderr if running in debug or verbose mode.
655     - Added --Exclude-mod-regex to install.pl so that the installation of
656       particular perl modules that match the supplied regex can be skipped.
657     - Added SIGALRM wrapper to the test suite since some libpcap and system
658       combinations break the ability of fwknopd to sniff packets.
659     - Added srand() call to the fwknop client (this is useful for older
660       versions of perl which do not automatically call srand() at the first
661       rand() call if srand() was not already called).
662     - Added a test to the test suite for sniffing packets over the loopback
663       interface.
664     - Added SPA packet aging test to the test suite to ensure that packet
665       expirations work properly (this feature protects against MITM attacks
666       where a valid SPA packet is stopped by an inline attacker and
667       retransmitted at a later time to acquire access).
668     - Added a file (test.log) to collect test suite console output.
669     - Added --Prepare-results argument to test suite to anonymize test results
670       and create a tarball that can be emailed to a third party to assist in
671     - Added full firewall policy dumps and the collection of system specifics
672       to the test suite. This makes it easy to send the output directory and
673       the test.log file to developers to assist in debugging (no information
674       is sent anywhere except as part of a manual process of course, and
675       addresses can be anonymized with --Prepare-results - loopback addresses
676       are not modified).
677     - Added --fw-del-ip <IP> argument to fwknopd so that a specific IP address
678       can be removed from the local firewall policy (this is used by the test
679       suite to ensure that if a test for removed firewall rules fails then
680       subsequent tests will not also fail because they are no longer tracked
681       by a running knoptm instance).
682     - Added a test to the test suite to collect fwknopd syslog output.  This
683       is useful to see if a mechanism such as SELinux is deployed in a manner
684       that prevents normal fwknop communications.
685     - Bugfix to track MD5 digest for SPA command mode packets.
686     - Bugfix in fwknopd to not open ports listed in OPEN_PORTS in the absence
687       of the PERMIT_CLIENT_PORTS directive when an SPA packet contains a
688       request for access to a port not listed in OPEN_PORTS.
689       debugging fwknop if there are any issues.
690     - Added --verbose flag to fwknopd commands issued by the test suite so
691       that more data is collected for debugging analysis.
692     - Added GnuPG tests to the test suite with dedicated keys (for use only
693       with the test suite) in the test/conf/client-gpg and
694       test/conf/server-gpg directories.
695     - Added digest file validation to test suite to make sure that fwknopd
696       correctly tracks SPA packet MD5 digests.
697     - Updated to search state tracking rule in any iptables chain (many
698       iptables policies have user-defined chains that can be a bit complicated
699       to parse).
700     - Updated install.pl to be more strict in stopping any running fwknopd
701       processes.
702
703 fwknop-1.9.0 (12/15/2007):
704     - Added a test suite so that fwknop and fwknopd functionality can be
705       automatically tested over the loopback interface (see the fwknop_test.pl
706       script in the test/ directory).
707     - Major update to allow SPA packets to create DNAT connections to internal
708       systems through the FORWARD chain (iptables only).  This is useful to
709       connect through to internal systems (that may be running on non-routable
710       IP addresses) via a border firewall or router that is running fwknopd to
711       create inbound DNAT rules.
712     - Added support for the iptables OUTPUT chain via two new variable in the
713       fwknop.conf file: ENABLE_IPT_OUTPUT and IPT_OUTPUT_ACCESS. This is
714       useful for iptables firewalls that are not running the conntrack modules
715       and that have a restrictive OUTPUT chain (so SYN/ACK responses are not
716       allowed out without an explicit ACCEPT rule).
717     - Added the ability to force the fwknopd and knoptm daemons to restart
718       themselves (via knopwatchd) after a configurable timeout (see the
719       ENABLE_VOLUNTARY_EXITS and EXIT_INTERVAL variables in the
720       /etc/fwknop/fwknop.conf file). This feature is for those that want
721       fwknopd to go through its initialization routine periodically just in
722       case there is a logic (or other) bug that might result in fwknopd not
723       accepting a valid SPA packet. NOTE: This feature is disabled by default,
724       and is not normally needed since fwknopd is quite stable in most
725       deployments.
726     - Major update to perform all firewall rule expirations with knoptm, which
727       is now started in all data collection modes.  Older versions of fwknopd
728       maintained its own firewall rule expiration code for the FILE_PCAP,
729       ULOG_PCAP, and KNOCK modes, so two mechanisms were being maintained for
730       the same purpose.  The 1.9.0 release fixes this oversight.
731     - Minor bugfix to have knopwatchd generate syslog messages whenever an
732       fwknop daemon needs to be restarted.
733     - Added --interface command line argument to install.pl to allow the
734       sniffing interface to be specified from the command line. Also updated
735       install.pl to enforce a 10-try maximum for attempting to accept a valid
736       interface name from the command line (LANG env issues can exist
737       sometimes).
738     - Updated SPA packet format for server_auth and forward_info elements;
739       the internal MD5 sum is now always the last field in an SPA packet. This
740       makes extensions of the SPA protocol much easier, and the generation of
741       SPA packets more elegant. Also, SPA packet validation has been improved
742       to ensure that fields that are supposed to be digits really only contain
743       integer data.
744     - Added ENABLE_FORWARD_ACCESS variable to the access.conf file, and added
745       ENABLE_IPT_FORWARDING to the fwknop.conf file. These variables provide
746       the per-SOURCE ability to create DNAT connnections through the FORWARD
747       chain..
748     - Replaced the IPT_AUTO_CHAIN1 variable with IPT_INPUT_ACCESS and
749       IPT_FORWARD_ACCESS in fwknop.conf.
750     - Added --Forward-access argument to the fwknop client.
751     - Added client version number to syslog messages generated by fwknopd when
752       a valid SPA packet is received.
753     - Added human readable timestamp to MD5 cache. Here is an example of the
754       update format:
755         127.0.0.1 X6WF2C29kEgAv4aDJ8TDeQ [Wed Nov 28 09:24:46 2007]
756     - Added --Count argument to fwknopd so that it calls exit() when the
757       specified number of packets is monitored.
758     - Added --no-logs argument to knoptm in support of the test suite so that
759       no emails are generated.
760     - Bugfix in fwknopd to account for non-Ethernet link layer header over
761       *BSD loopback interfaces.
762     - Added --Save-dst argument to the fwknop client to add a priority file to
763       store client command line arguments (~/.fwknop.save). This file is only
764       overwritten when --Save-dst is used.
765     - Added fwknopd --fw-del-chains to allow the fwknopd iptables chains to
766       easily be deleted.
767     - Minor fwknopd bugfix to set process exit status to 0 when --Kill is
768       used.
769
770 fwknop-1.8.3 (11/17/2007):
771     - Updated external IP resolution to point to http://www.whatismyip.org,
772       and added http://www.cipherdyne.org/cgi/clientip.cgi as a backup site
773       for fwknop IP resolution.
774     - Added storage of source IP along with SPA MD5 sum. This allows the user
775       to infer which networks are more hostile if an SPA packet is replayed.
776     - Added SPA packet hex dumps in 'fwknopd --debug' mode so that the
777       integration of third-party encryption algorithms is easier to
778       troubleshoot. Sean Greven contributed a patch for this.
779     - Reinstated the legacy port knocking mode. It appears that all encrypted
780       output from the updated Crypt::Rijndael module is at least 32 bytes
781       long, so port knocking sequences are now 32 bytes long as well (they
782       were previously 16 bytes long in old versions of fwknop).
783     - Bugfix to ensure the key length is at least 8 chars in --get-key mode.
784     - Minor update to remove init message on OS X install.
785     - Updated install.pl to set the LANG environmental variable to
786       "en_US.UTF-8". This should fix the problem where the output of ifconfig
787       was not interpreted correctly if the locale LANG setting is not English.
788     - Implemented verbose email alerting by setting the ALERTING_METHODS
789       variable to "verbose". This instructs fwknopd to generate a new email
790       message for each message that it normally logs vis syslog (this feature
791       is not the default, and must be manually enabled).
792
793 fwknop-1.8.2 (09/15/2007):
794     - Added fwknopd server support for Mac OS X. The Darwin uname return
795       string is detected and this enables Darwin-specific installation code in
796       install.pl.
797     - Updated to not print sensitive key/password information in --debug mode
798       with fwknopd.
799     - Bugfix for install.pl on Windows 2003 Server running under Cygwin where
800       'uname -o' output is reported 'Gygwin' for some reason.
801     - Added --Cygwin-install command line argument to install.pl to force
802       client-only fwknop install on Cygwin systems.
803     - Added --OS-type command line argument to install.pl to allow the user to
804       force the installation type.
805     - Updated to version 1.04 of Crypt::Rijndael. This fixes incompatibilities
806       between SPA packets between 64-bit and 32-bit platorms.
807     - Bugfix to enforce a maximum of 20 tries to read a password from stdin.
808     - Applied TCP options parsing fix from psad for invalid zero or one length
809       fields that break TLV encoding (this is for fwknopd, and only applies to
810       the legacy port knocking mode).
811     - Added code to fwknopd to check to see if there are any state tracking
812       rules in place within the local iptables or ipfw policy.
813     - Made syslog identity, facility, and priority configurable (applied code
814       from the psad project).
815     - Implemented --fw-list for ipfw firewalls.
816     - Bugfix for knoptm removing ipfw rules too quickly after not timing out
817       previously instantiated rules properly.
818     - Implemented smarter cache removal strategy in knoptm so that rules that
819       are manually removed from the running iptables or ipfw policy are also
820       removed from the cache.
821     - Added /var/log/fwknop/errs/fwknopd.{warn,die} tracking to the fwknopd
822       daemon for the PCAP modes of collecting packet data. Added
823       knoptm{warn,die} files for knoptm as well.
824     - Bugfix to import the GnuPG::Interface module in --get-key mode.
825     - Bugfix to send source IP as a part of the command message in command
826       mode so that REQUIRE_SOURCE_ADDRESS controls can be applied.
827     - Added --Test-mode to fwknop client so that SPA packets can be built but
828       never sent over the network.
829
830 fwknop-1.8.1 (06/06/2007):
831     - Bugfix to ensure that the "keep-state" directive is added to firewall
832       rules on systems running the ipfw firewall.
833     - Added the --Save-packet and --Save-packet-file command line arguments
834       to the fwknop client. These options instruct fwknop to save a copy of
835       an encrypted SPA packet before it is sent across the network.
836     - Bugfix to find minimal unused ipfw rule number for ipfw firewalls. This
837       fixes an issue where ipfw rules added by fwknopd could be inserted at
838       the same position as rules from an existing ipfw policy. While ipfw
839       allows duplicate rules, whenever such a rule is deleted by its rule
840       number all matching rules are deleted.
841
842 fwknop-1.8 (06/03/2007):
843     - Added support for ipfw firewalls (found on *BSD systems).  The
844       IPTables::Parse and IPTables::ChainMgr modules are not installed on
845       such systems.
846     - Added gpg-agent support for both the fwknop client and fwknopd SPA
847       server.
848     - Updated client-only installation mode to restrict perl module
849       installation to those module that are actually required by the fwknop
850       client. This results in clean installs of the fwknop client on Windows
851       systems running Cygwin.
852     - Added --Defaults to install.pl so that fwknop can be installed without
853       prompting the user to answer any questions. This is to make it easier
854       to install fwknop on the Source Mage Linux distro.
855     - Consolidated daemon config files into the fwknop.conf file (except for
856       the access.conf file). This simplifies the configuration of fwknop.
857     - Added recursive variable resolution in the parsing routines for the
858       fwknop.conf file. This allows variable values to contain embedded
859       variables.
860     - Added init script for FreeBSD systems.
861     - Added --BSD-install command line argument to install.pl. This is not
862       normally necessary since the installer should detect installations on
863       *BSD systems, but this option can force this behavior.
864     - Updated knopmd and knopwatchd to use safe_malloc() instead of malloc().
865     - Bugfix to never time out rules from SOURCE blocks with FW_ACCESS_TIMEOUT
866       set to zero
867
868 fwknop-1.0.1 (01/09/2007):
869     - Updated fwknopd to allow the GPG_REMOTE_ID variable to have the value
870       "ANY" to allow a SOURCE block to match on arbitrary remote gpg signing
871       keys (Leland Weathers).
872     - Bugfix to allow OPEN_PORTS to be omitted in access.conf in favor of
873       having only PERMIT_CLIENT_PORTS enabled (reported by Raul Siles).
874     - Added the cd_rpmbuilder script to make it easy to build RPM's out of
875       CipherDyne projects by automatically downloading the project .tar.gz and
876       .spec files from http://www.cipherdyne.org/.
877
878 fwknop-1.0 (11/05/2006):
879     - Bugfix for OpenSSH-4.3p2 patch to make sure to include the spa.h header
880       file.
881     - Bugfix for access hashes accumluating when multiple ports are requested
882       to be opened by a client.
883     - Better validation of IPT_AUTO_CHAIN variable so that the from_chain
884       cannot be identical to the to_chain.
885     - Bugfix in RPM to install List::MoreUtils.
886     - Bugfix so that the MD5 sum for an SPA packet is not examined for each
887       SOURCE block.  This fixes a problem where an SPA packet could appear to
888       be replayed if multiple SOURCE blocks are defined in
889       /etc/fwknop/access.conf.
890     - Refactored main SPA access loop so that it is clearer how and when SPA
891       clients are granted access.
892     - Better handling of GnuPG key identifier strings (they can now contain
893       spaces, and syslog messages wrap the identifiers with double quotes).
894     - Added source IP address to command string in the SPA packet so that
895       the REQUIRE_SOURCE_ADDRESS criteria can be applied by the fwknopd
896       server.
897     - Added --Show-last-cmd and --Show-host-cmd args to fwknop so that the
898       last fwknop command and the last fwknop host commands can be viewed.
899     - Added the svn revision number to --Version and --help output.
900
901 fwknop-0.9.9 (10/15/2006):
902     - Added REQUIRE_SOURCE_ADDRESS (disabled by default) to force fwknop
903       clients to know their source IP address (i.e. -s cannot be used).  So,
904       either fwknop clients have to use -R to resolve their externally
905       routable address, or they must just know what it is.
906     - Updated to Net-RawIP-0.21_03 for compatibility with gcc-4.x compilers.
907     - Added List-MoreUtils-0.22 which is a dependency of the new Net::RawIP
908       module.
909     - Bugfix to restore "start" functionality in Gentoo init script.
910     - Bugfix to use the IPT_OUTPUT_FILE and IPT_ERROR_FILE configuration
911       variables in fwknopd.
912     - Added KNOPTM_IPT_OUTPUT_FILE and KNOPTM_IPT_ERROR_FILE variables
913       specifically for the knoptm daemon so that it can use IPTables::ChainMgr
914       completely independently of fwknopd (this removes a potential race
915       condition between fwknopd and knoptm).
916
917 fwknop-0.9.8 (09/17/2006):
918     - Added the ability to ignore old SPA packets through use of the
919       client-side time stamp.  This means that an attacker cannot intercept an
920       SPA packet, prevent it from being forwarded to its intended destination,
921       and then put the packet on the wire at some time outside of the allowed
922       time window.  There are two new configuration options in fwknop.conf
923       "ENABLE_SPA_PACKET_AGING" and "MAX_SPA_PACKET_AGE" that control the
924       length of the acceptable time window (2 minutes by default).  This
925       requires some level of synchronization between the fwknop client and the
926       fwknopd server, but this is not onerous through the use of NTP.  This
927       feature is enabled by default, and the idea for it was contributed by
928       Sebastien J.
929     - Completely re-worked IPTables::ChainMgr to support the return of
930       iptables error messages that are collected via stderr.  This is critical
931       to fixing any bugs where fwknopd could die as a result of a poorly
932       crafted iptables command.
933       but no information would be returned to the user.
934     - Added the ability to specify the position for both the jump rule into
935       the fwknopd chains as well as the position for new rules within the
936       fwknopd chains via the -I argument to iptables.  This fixes a bug where
937       the user was given the impression that the IPTABLES_AUTO_RULENUM would
938       accomplish this (IPTABLES_AUTO_RULENUM has been removed).
939     - Updated fwknopd to require < 1500 byte payload length before attempting
940       to decrypt.  Also, GnuPG decrypts are not attempted unless the encrypted
941       payload is at least 400 bytes long (this is conservative since even
942       encrypting a single byte with a 1024-bit key will result in about 340
943       bytes of encrypted data).
944     - Added the --gpg-default-key option to have fwknop use the default GnuPG
945       key that is defined in the ~/.gnupg/options file.
946     - Added the --URL command line argument so that a URL other than the
947       default http://www.whatismyip.com/ can be provided by the user for
948       external IP resolution (suggested by Sebastien J.).
949     - Updated to be more rigorous with md5 sums; we now require that the
950       md5_base64() function actually returns a non-null result.
951     - Bugfix to make sure that only the users associated with the a specific
952       REQUIRE_USERNAME value (in a specific SOURCE block in access.conf) are
953       granted the appropriate access even if a valid encrypted packet is
954       constructed from a different user name (by an fwknop client).
955     - Populated the _debug option in the IPTables::ChainMgr module, and also
956       added a _verbose option so that the specific iptables commands can
957       actually be seen as IPTables::ChainMgr functions are called.
958     - Added code to install.pl to update command paths in fwknop.conf and
959       knopwatchd.conf if any of the paths are broken (i.e. the local system
960       does not conform to the default paths).  By default this only happens if
961       the user does not want old configs to be merged, but to override this
962       use the new --path-update command line argument to install.pl.
963     - Added the --Skip-mod-install command line argument to install.pl to
964       allow all perl module installs to be skipped.
965     - Added the --force-mod-regex command line argument to install.pl to allow
966       a regex match on perl module names to force matching modules to be
967       installed.
968     - Minor bugfix to generate better (i.e. closer to those that Firefox
969       generates) http requests to http://www.whatismyip.com/).
970     - Adapted Mate Wierdl's RPM patch from the psad project so that the fwknop
971       RPM builds on x86_64 systems.
972     - Removed iptables requirement in RPM spec file because fwknop may be
973       installed on a system just to run the fwknop client.
974     - Updated to email username mismatch errors.
975
976 fwknop-0.9.7 (08/04/2006):
977     - Added fwknop_serv to function as minimal TCP server over which SPA
978       packets can be sent.  This allows SPA to be compatible with the Tor
979       network, which requires that a virtual circuit is established before
980       traffic can be sent.
981     - Updated to Crypt::CBC-2.18 after a vulnerability was discovered in
982       previous versions of Crypt::CBC that caused weak ciphertext to be
983       generated for algorithms that have blocksizes greater than 8 bytes (such
984       as Rijndael used by fwknop).  Manually specifying initialization vectors
985       is not necessary now.
986     - Updated SSH patch to support OpenSSH-4.3p2.
987     - Bugfix to make sure to create /var/* directories if they don't exist
988       (such as when /var is a tmpfs).
989     - Bugfix (Dwayne Rightler) to restore -w IP lookup functionality after
990       format change on data returned by whatismyip.com.
991     - Bugfix to wrap SPA Rijndael decryption with eval{} so that fwknopd does
992       not die if there are problems trying to decrypt data.  This is necessary
993       because of the security vulnerability fix in Crypt::CBC that creates
994       some incompatibilities in different versions of Crypt::CBC.
995     - Added "--L-host" command line argument so that the arguments used for
996       multiple hosts are preserved and can be recalled.
997     - Changed default user-agent setting for whatismyip.com lookups to
998       Firefox/1.0.5.4; there is no need to gratuitously advertise fwknop
999       traffic.
1000     - Updated GunPG HOWTO to provide a step-by-step guide to getting fwknop
1001       Single Packet Authorization working with GnuPG.
1002     - Updated to derive perl module versions from the VERSION files within
1003       each of the perl module source directories.
1004
1005 fwknop-0.9.6 (01/13/2006):
1006     - Added GPG based authentication capability for SPA packets.  This new
1007       mode can be configured to require that a GPG message be signed with a
1008       particular key or set of keys.
1009     - In GPG mode, the fwknop client now prints GPG errors to stdout if not
1010       running with --gpg-no-batch-mode.
1011     - Added the ability to require that the client know the UNIX crypt()
1012       password associated with a username on the server side.  This
1013       functionality is enabled on the fwknop client with the "--Server-auth
1014       crypt" command line argument, and the REQUIRE_AUTH_METHOD variable in
1015       /etc/fwknop/access.conf on the fwknopd server.
1016     - Added patch against OpenSSH-4.2p1 to integrate SPA mode.  This patch
1017       adds a "-K <fwknop cmd line>" argument to the SSH client so that
1018       fwknop can be executed directly before an SSH connection is made.
1019     - Separated server and client portions of fwknop into "fwknopd" and
1020       fwknop repectively.  This will allow better portability to be
1021       developed since the client and server pieces can be developed more
1022       independently.  NOTE: With so many changes, it is probably a good idea
1023       to not preserve old fwknop configs via install.pl.
1024     - Renamed all relevant fwknopd command and file paths to support new
1025       fwknopd server component.
1026     - Added --quiet mode (this is used by default in the OpenSSH patch).
1027     - Removed legacy port knocking installation in install.pl (fwknopfifo,
1028       and fwdata file) unless the data collection mode is set to syslog or
1029       syslog-ng for legacy iptables log messages.
1030     - Added inode checking for PCAP_PKT_FILE. This helps to ensure that log
1031       rotation schemes don't interfere with reading packets out of the file
1032       since this check is size independent.
1033     - Bugfix for Makefile debug mode.
1034     - Added compilation check for perl programs in install.pl before
1035       installation into the filesystem.
1036     - Bugfix for knopwatchd to make sure it can actually restart all running
1037       daemons properly.
1038     - Added --force-mod command line argument to install.pl to allow the user
1039       to force all perl modules to be be installed regardless of whether a
1040       module exists in the system perl lib tree.
1041     - Added --no-save-args to fwknop so that existing .fwknop.run file can
1042       be preserved (helps to testing new features of fwknop client).
1043     - Removed useless --encrypt command line argument (only the old shared
1044       port knock sequences are not encrypted).
1045
1046 fwknop-0.9.5 (10/02/2005):
1047     - Added the ability to resolve the external IP associated with the
1048       local network via http://www.whatismyip.com.  This is a more secure
1049       method of accomplishing what the -s option performs.  The new
1050       command line option is --whatismyip (or just -w).
1051     - Updated fwknop to communicate with knoptm via a UNIX domain socket
1052       instead of the previous file-based communication.
1053     - Updated to flush the fwknop iptables chains at start time.
1054     - Bugfix for removing the wrong hash key in the knoptm IP cache.
1055
1056 fwknop-0.9.4 (09/17/2005):
1057     - Bugfix for knoptm timing out new entries based on old time values
1058       (this caused new rules to timed out too quickly).
1059     - Added support for multiple users in REQUIRE_USERNAME keyword in
1060       access.conf.
1061     - Added the ability to display raw encrypted packet data in client
1062       mode with --verbose.
1063     - Created fwknop RPM for RPM-based Linux distributions.
1064     - Bugfix for inappropriate redirects in command mode where the command
1065       already contained a redirect.
1066
1067 fwknop-0.9.3 (08/27/2005):
1068     - Added an on-disk cache of md5 sums so that the md5 sum check can
1069       survive restarts of fwknop.
1070     - Updated install.pl to be more friendly to Mac OS X (Blair Zajac).
1071     - Updated to allow access.conf variables to have values instead of just
1072       being defined.
1073     - Started on additional server authentication mode code (re-worked MD5
1074       sum calculation to allow packet format to be extended by taking into
1075       account the fwknop version number).
1076
1077 fwknop-0.9.2 (08/06/2005):
1078     - Added FILE_PCAP data collection method when running in server mode.
1079       This is a more general way of getting packets than the ULOG_PCAP
1080       mode since then a normal ethernet sniffer can be used to build the
1081       file.
1082     - Added the ability to re-open a pcap file if its size shrinks (i.e.
1083       it gets rotated out or something).
1084     - Bugfix for multiple rules with the same timestamp not being timed out
1085       by knoptm.
1086     - Integrated spoofing capability directly within fwknop (instead of
1087       using the knopspoof command) through the use of "require Net::RawIP".
1088     - Better multi-protocol support in server mode.  Tcp and icmp packets
1089       are properly decoded now.
1090
1091 fwknop-0.9.1 (07/29/2005):
1092     - Added the ability to specify multiple ports/protocols to access on a
1093       server with the --Access command line option.
1094     - Added the ability to spoof SPA packets over icmp and tcp protocols.
1095     - Added the ability to restrict access at the server to only those
1096       ports defined in the OPEN_PORTS keyword.  This option is controled by
1097       a new keyword "PERMIT_CLIENT_PORTS".
1098     - Bugfix for MD5 sum not being properly calculated over decrypted data.
1099       This allowed old packets that contained additional garbage data to
1100       be replayed against an fwknop server.
1101     - Updated to fall back to getpwuid() if getlogin() fails (Blair Zajac).
1102     - Added --ipt-list to list all current rules in the FWKNOP iptables
1103       chains.
1104     - Added --ipt-flush to flush all current rules in the FWKNOP iptables
1105       chains.
1106     - Bugfix for the installer dying if ~/lib already exists (Blair Zajac).
1107     - Updated to delay the loading of server perl modules (Net::Pcap, etc.)
1108       only if we are running in server mode.
1109     - Bugfix for module directory paths in install.pl.
1110
1111 fwknop-0.9.0 (05/29/2005):
1112     - Added new authorization mode that uses Net::Pcap to read packets
1113       out of a file that is written to by the ulogd pcap writer (also
1114       stubbed in code to sniff packets directly off the wire).  This
1115       authorization mode only requires single packets, and has many
1116       characteristics that are better than simple port knocking, including
1117       being non-replayable, and much more data can be sent.  This mode
1118       is now the default for both the server and the client.
1119     - Made the execution of knopmd optional depending on whether AUTH_MODE
1120       is a pcap mode (e.g. ULOG_PCAP or PCAP).
1121     - Added --Spoof-src argument so that encrypted packets can be spoofed
1122       via /usr/sbin/knopspoof.
1123     - Added /usr/sbin/knoptm so that firewall rules can be timed-out when
1124       the server is running in PCAP mode even if new packets don't appear
1125       on the wire.
1126     - Updated fwknop man page to talk about the new pcap-based
1127       authorization mode.
1128
1129 fwknop-0.5.0 (03/19/2005):
1130     - Added ALERTING_METHOD to allow syslog and/or email reporting to be
1131       disabled (there is a dedicated file /etc/fwknop/alert.conf that
1132       governs this behavior, and both fwknop and knopwatchd reference this
1133       file).
1134     - Bugfix for distinguishing OPT field associated with --log-tcp-options
1135       vs. --log-ip-options.
1136     - Added install_perl_module() install.pl from psad to provide a
1137       consistent installation interface.
1138     - Applied patch to only install perl modules that are not already
1139       installed (Blair Zajac).
1140     - Added --last-cmd option to allow fwknop to be executed with command
1141       line arguments from the previous execution (they are saved in
1142       ~/.fwknop.run).
1143     - Added --Home-dir option to allow the home directory to be manually
1144       specified.
1145     - Re-worked get_homedir() to be more friendly to systems that do not
1146       necessarily have /etc/passwd (e.g. OS X).
1147     - Added configuration preservation and querying for which syslog
1148       daemon is running to install.pl.  These features were adapted from the
1149       psad installer (http://www.cipherdyne.org/psad).
1150     - Added IPTables::ChainMgr.  Fwknop uses this module to maintain
1151       dedicated chains to which access rules are added.
1152     - Added IPTables::Parse, which is used internally by IPTables::ChainMgr.
1153     - Added __WARN__ and __DIE__ handlers so errors can easily be collected.
1154
1155 fwknop-0.4.2 (09/27/2004):
1156     - Added init script for Fedora systems.
1157     - Added --Kill, --Restart, and --Status modes (this fixes the generic
1158       init script which depends on these arguments).
1159
1160 fwknop-0.4.1 (09/14/2004):
1161     - Bugfix for legacy posf code in fwknop and variable in fwknop.conf.
1162
1163 fwknop-0.4 (09/10/2004):
1164     - Added ability to specify multiple IPs/networks in a single SOURCE
1165       definition.
1166     - Better examples section in the fwknop manpage.
1167     - Bugfix to make sure EMAIL_ADDRESSES variable does not contain commas
1168       (any commas are translated into spaces).
1169     - Added LICENSE file.
1170
1171 fwknop-0.3 (08/21/2004):
1172     - Bugfix for tracking knock sequences by source IP address.
1173     - Bugfix for knock sequence timeouts.
1174     - Removed old passive OS fingerprinting code in favor of the p0f
1175       strategy.
1176     - Added support for taking encryption keys from a file specified on
1177       the command line.
1178     - Update to send "sequence decrypt failed" email message only if
1179       decryption failed for all encrypt sequence SOURCE blocks.
1180
1181 fwknop-0.2 (07/31/2004):
1182     - Implemented remote username checking in encrypted sequences.
1183     - Added support for icmp in knock sequences.
1184     - Added protocol rotation option for encrypted sequences.
1185     - Added code for multiple SOURCE access blocks with the same source
1186       net/IP.
1187     - Added KNOCK_LIMIT access control variable to limit the number of
1188       times a particular knock sequence is honored.
1189     - Added email alerts.
1190
1191 fwknop-0.1 (07/08/2004):
1192     - Initial release.