11 December, 2011

The 2.0rc5 candidate release of
fwknop is available for
download. There may be a few tweaks to the
code before the official 2.0 release is made, but this is pretty close as-is. Significant
development work has gone into fwknop since the 2.0rc4 release, and adds some major new
functionality as well as fixing a few bugs. Here is a summary of the changes:
iPhone fwknop client: Max Kastanas has contributed an iPhone port of the fwknop client. He had
already contributed on Android client, so the iPhone was the next natural step! We're looking for a
maintainer of the iPhone code so that eventually it can be made available through the App Store. If
you have iPhone development experience and are interested in taking this on, please
contact me.
PF firewall support on OpenBSD: For quite a while now fwknop has brought Single Packet Authorization
support to iptables firewalls on Linux and ipfw firewalls on FreeBSD and Mac OS X systems. The 2.0rc5
release now introduces support for the
PF
firewall on OpenBSD systems. By interfacing with the
pfctl command, fwknop creates new rules to
access a protected service (such as SSHD) to a PF anchor. Rules are deleted out of a running
anchor with
pfctl -a <anchor> -f - with the expired rule(s) removed. There is support
in the fwknop test suite (see the test/ directory in the fwknop-2.0rc5 sources) to validate fwknop
operations on OpenBSD systems, and if there are any issues please let me know.
Expiring SPA keys: With large SPA deployments where many different encryption
keys - either Rijndael or GPG keys - are used to service lots of external users, key
management can become somewhat of a burden. This feature allows an expiration date
to be set in the
access.conf file on a per-key basis. Any SPA packet received
for an expired key is ignored by fwknopd. This feature was suggested by ozmart from
the fwknop mailing list.
FORCE_NAT mode: For iptables firewalls, a new FORCE_NAT mode has been
implemented that works as follows: for any valid SPA packet, force the requested
connection to be NAT'd through to the specified (usually internal) IP and port value.
This is useful if there are multiple internal systems running a service such as
SSHD, and you want to give transparent access to only one internal system
for each stanza in the access.conf file. This way, multiple external
users can each directly access only one internal system per SPA key.
lsof launcher: The fwknop lsof launcher (extras/fwknop-launcher/fwknop-launcher-lsof.pl)
is a lightweight daemon that allows the user to not have to manually run the fwknop
client when attempting to gain access to a service that is protected by
via fwknopd. This is accomplished by checking the output
of lsof to look for pending connections in the SYN_SENT state, which (usually)
indicate that a remote firewall is blocking the attempted connection. At this
point, the launcher executes the fwknop client with the --get-key arg (so the
user must place the key in the local filesystem) to generate an SPA packet for
the attempted connection. The remote fwknopd daemon will reconfigure the
firewall to allow temporary access, and this usually happens fast enough that
the original connection attempt will then succeed as TCP retries to establish
the connection. The idea for this was originally for a pcap-based connection
watcher by Sebastien Jeanquier.
Several other changes and small fixes have been made as well. The fwknop test
suite supports running all tests through the excellent
valgrind project, and this enabled
several memory handling issues to be found and corrected.
fwknop is released under the GPL version 2, and the complete fwknop-2.0rc5
ChangeLog can be found
here
via the fwknop
gitweb interface.