root/fwknop/tags/fwknop-1.9.3/fwknop.8

Revision 1009, 20.8 kB (checked in by mbr, 9 months ago)

This is a major commit to add support for the usage of multiple digest
algorithm for replay attack detection and for message integrity.

- (SPAPICT Group) Submitted patches to include support for the SHA1 digest
algorithm for SPA packet replay attack detection. I modified these
patches for maximum configurability (see the --digest-alg argument on
the fwknop command line), and the ability to use the SHA256 algorithm as
well. The default path to the /var/log/fwknop/md5sums file has been
changed to /var/log/fwknop/digest.cache, and the default digest
algorithm is now SHA256 (but this is tunable via the DIGEST_TYPE
variable in the fwknop.conf file).
- Added the Digest::SHA perl module in support of the SHA1 and SHA256
digest algorithms for replay attack detection and SPA message integrity.
- (Test suite) Added several tests for configurable digest algorithms in
support for the SHA256, SHA1, and MD5 digest changes made by the SPAPICT
Group.
- Bugfix in install.pl to not test for the iptable command on non-Linux
systems, and to not test for the ipfw command on systems that are Linux.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1 .\" Process this file with
2 .\" groff -man -Tascii foo.1
3 .\"
4 .TH FWKNOP 8 "Jun, 2007" Linux
5 .SH NAME
6 .B fwknop
7 \- Firewall Knock Operator
8 .SH SYNOPSIS
9 .B fwknop -A <ports> -D <host> [options]
10 .SH DESCRIPTION
11
12 .B fwknop
13 implements an authorization scheme known as Single Packet Authorization (SPA)
14 that requires only a single encrypted
15 packet to communicate various pieces of information including desired access
16 through an iptables policy and/or specific commands to execute on the target
17 system.  The main application of this program is to protect services such as
18 .B SSH
19 with an additional layer of security in order to make the exploitation of
20 vulnerabilities (both 0-day and unpatched code) much more difficult.  An
21 authorization server
22 .B fwknopd
23 passively monitors authorization packets via
24 .B libpcap
25 and hence there is no "server" to which to connect in the traditional sense.
26 Any service protected by fwknop is inaccessible (by using iptables to intercept
27 packets within the Linux kernel) before authenticating; anyone scanning for
28 the service will not be able to detect that it is even listening.  Single Packet
29 Authorization offers many advantages over port knocking, including non-replayability
30 of SPA packets, ability to use asymmetric ciphers (such as Elgamal), and SPA cannot
31 be broken by simply spoofing packets to duplicate ports within the knock sequence
32 on the server to break port knocking authentication.  SPA packets can easily be
33 spoofed as well (this is a good thing in this context), and this makes it possible
34 to make it appear as though, say, www.yahoo.com is trying to authenticate to a
35 target system but in reality the actual connection will come from a seemingly
36 unrelated IP. Although the default data collection method in Single Packet
37 Authorization mode is to use libpcap to sniff packets off the wire, fwknop can also
38 read packets out of a file that is written by the iptables
39 . B ulogd
40 pcap writer (or a separate sniffer process that is writing packet data to a file).
41 .PP
42 Authorization packets are either encrypted with the Rijndael block cipher
43 or via GnuPG and associated asymmetric ciphers.  If the symmetric encryption
44 method is chosen, then the encryption key is shared between between the
45 client and server (see the
46 .I /etc/fwknop/access.conf
47 file).  If the GnuPG
48 method is chosen, then the encryption keys are derived from GnuPG key
49 rings.  SPA packets generated by fwknop running as a client adhere
50 to the following format (before they are encrypted):
51 .PP
52     random number (16 bytes)
53     username
54     timestamp
55     software version
56     mode (command mode (0) or access mode (1))
57     if command mode => command to execute
58     else access mode  => IP,proto,port
59     message digest (SHA256 / SHA1 / MD5)
60 .PP
61 Each of the above fields are separated by a ":" character due to the
62 variable length of several of the fields, and those that might contain
63 ":" characters are base64 encoded.  The message digest (SHA256 by default
64 in all versions of
65 .B fwknop
66 greater than 1.9.1) allows the server to check message integrity after decryption,
67 and the 16 bytes of random data ensures (with high probability) that no two messages
68 are identical.  This ensures that replay attacks are not possible against fwknop.
69 For each packet coming from an
70 .B fwknop
71 client, the
72 .B fwknopd
73 server caches the SHA256 digest calculated over the entire packet and compares against
74 previous packet digests in order to detect attempted replay attacks.  The digest
75 cache file is located at
76 .I /var/log/fwknop/digest.cache
77 and is not rotated so that the detection of duplicate SPA messages is maximized.
78 Both syslog and email alerts are generated if a replay is detected (although
79 this can be tuned via the
80 .B ALERTING_METHODS
81 variable in the
82 .I /etc/fwknop/fwknop.conf
83 file).  By default, the
84 .B fwknop
85 client sends authorization packets over UDP
86 port 62201, but this can be altered with the
87 .B --Server-port
88 argument. The server must first be configured to acquire the SPA data on
89 the changed ptotocol-port.  See
90 .B fwknopd(8)
91 for further details.  See the
92 .B EXAMPLES
93 section for example invocations of the
94 .B fwknop
95 client.
96
97 .SH REQUIRED ARGUMENTS
98
99 .TP
100 .BR \-D "\fR,\fP " \-\^\-target\ \<IP-address>
101 Direct the
102 .B fwknop
103 client to authenticate with the
104 .B fwknopd
105 daemon/service at the destination address <IP> .  The connection mode is discovered by the
106 .B fwknopd
107 daemon/service when it decrypts and parses the authentication packet.
108 .TP
109 .BR \-A "\fR,\fP " \-\^\-Access\ \<port\ list>
110 Provide a list of ports and protocols to access on a remote computer running
111 .B fwknopd.
112 The format of this list is '<proto>/<port>...<proto>/<port>,
113 e.g. "tcp/22,udp/53".
114 .B NOTE:
115 The vast majority of usages for
116 .B fwknop
117 require the -A argument, but sending full commands with the --Server-cmd
118 argument via an SPA packet to be executed by
119 .B fwknopd
120 does not require this argument.
121
122 .SH OPTIONS
123
124 .TP
125 .BR \-a "\fR,\fP " \-\^\-allow-ip\ \<allow-IP>
126 Specify IP address that should be permitted through the destination
127 .B fwknopd
128 server firewall (this IP is encrypted within the SPA packet itself). This is
129 useful to prevent a Man-In-The-Middle (MTIM) attack where an SPA packet can be
130 intercepted en-route and sent from a different IP than the original. Hence, if
131 the
132 .B fwknopd
133 server trusts the source address on the SPA packet IP header then the attacker
134 gains access.  The
135 .B -a
136 option puts the source address within the encrypted
137 SPA packet, and so thwarts this attack.  The
138 .B -a
139 option is also useful to specify the IP that will be granted access when SPA
140 packet itself is spoofed with the
141 .B --Spoof-src
142 option.  Another related option is -R (see below) which instructs the
143 .B fwknop
144 client to automatically resolve the externally routable IP address the local
145 system is connected to by querying the
146 .B http://www.whatismyip.com
147 website.
148 .TP
149 .BR \-R "\fR,\fP " \-\^\-Resolve-external-IP
150 This is an important option, and instructs the
151 .B fwknop
152 client and the
153 .B fwknopd
154 daemon/service to query
155 .B http://www.whatismyip.com
156 to determine the IP address that should be allowed through the iptables policy
157 at the remote
158 .B fwknopd
159 server side.  This is useful if the
160 .B fwknop
161 client is being used on a system that is behind an obscure NAT address.  Note
162 that you can use the
163 .B --URL
164 option to have fwknop resolve an externally routable address by using the
165 specific web service instead of http://www.whatismyip.org (see below).
166 .TP
167 .BR \-\^\-URL\ \<web\ resolution\ \URL>
168 This option is used in conjunction with the
169 .B -R
170 option so that fwknop will resolve the externally routable IP address (useful
171 if fwknop is run on a system being a NAT) via a web service URL supplied on
172 the command line. A custom web resolution CGI script is available at the URL
173 below if http://www.whatismyip.org is not available:
174 .B http://www.cipherdyne.org/cgi/clientip.cgi
175 .TP
176 .BR \-\^\-gpg-agent
177 Instruct
178 .B fwknop
179 to acquire GnuPG key password from a running
180 .B gpg-agent
181 instance.
182 .TP
183 .BR \-\^\-gpg-agent-info\ \<connection\ \info>
184 Specify the value of the GPG_AGENT_INFO environment variable as returned
185 by the
186 .B gpg-agent --daemon
187 command. If the
188 .B fwknop --gpg-agent
189 command line argument is used instead of
190 .B --gpg-agent-info,
191 then fwknop assumes that the GPG_AGENT_INFO environment variable has already
192 been set in the current shell.
193 .TP
194 .BR \-\^\-gpg-default-key
195 Use the key that GnuPG defines as the default, i.e. the key that is specified
196 by the
197 .B default-key
198 variable in
199 .I ~/.gnupg/options.
200 If the
201 .B default-key
202 variable is not defined
203 within
204 .I ~/.gnupg/options
205 , then GnuPG tries to use the first suitable key on
206 its key ring.  If the user does not know the password for this key, then the
207 standard password error will be thrown by GnuPG and reported back to the
208 user.
209 .TP
210 .BR \-\^\-gpg-home-dir\ \<dir>
211 Specify the path to the GnuPG directory; normally this path is derived from the
212 home directory of the user that is running the
213 .B fwknop
214 client.  This is useful when a 'root' user wishes to log into a remote machine
215 whose
216 .B sshd
217 daemon/service does not permit 'root' login.
218 .TP
219 .BR \-\^\-gpg-recipient\ \<key\ \ID>
220 Specify the GnuPG key ID, e.g. "1234ABCD" (see the output of "gpg --list-keys")
221 of the recipient of the Single Packet Authorization message.  This key is imported
222 by the
223 .B fwknopd
224 server and the associated private key is used to decrypt the SPA packet.  The
225 recipient's key must first be imported into the client GnuPG key ring.
226 .TP
227 .BR \-\^\-gpg-signing-key\ \<key\ \ID>
228 Specify the GnuPG key ID, e.g. "ABCD1234" (see the output of "gpg --list-keys")
229 to use when signing the SPA message.  The user is prompted for
230 the associated GPG password to create the signature.  This
231 adds a cryptographically strong mechanism to allow the
232 .B fwknopd
233 daemon on the remote server to authenticate who created the SPA message.
234 .TP
235 .BR \-\^\-gpg-verbose
236 Instruct
237 .B fwknop
238 to allow all output from the
239 .B gpg
240 process that is used by fwknop in GPG mode.  This is primarily used for debugging
241 purposes if it appears that the GPG encrypt/decrypt is not performing correctly.
242 .TP
243 .BR \-l "\fR,\fP " \-\^\-last-cmd
244 Instruct
245 .B fwknop
246 client to run with the same command line arguments that were used in a previous execution.
247 This option is useful because the clients'
248 .B fwknop
249 command line can be complex and difficult to recall.
250 .TP
251 .BR \-L "\fR,\fP " \-\^\-Last-host\ \<host>
252 Instruct
253 .B fwknop
254 to use the same command line arguments that were used to authenticate to
255 .B host.
256 .TP
257 .BR \-q "\fR,\fP " \-\^\-quiet
258 This option instructs the
259 .B fwknop
260 to be as quiet as possible and only print absolutely necessary information to
261 the terminal.
262 .TP
263 .BR \-s "\fR,\fP " \-\^\-source-ip
264 Instruct the
265 .B fwknop
266 client to form an SPA packet that contains the special-case IP
267 address "0.0.0.0" which will inform the destination
268 .B fwknopd
269 SPA server to use the source IP address from which the SPA packet originates as
270 the IP that will be allowed through upon modification of the firewall ruleset.
271 This option is useful if the fwknop client is deployed on a machine that is
272 behind a NAT device. The permit-address options
273 .B -s
274 (default),
275 .B -R
276 and
277 .B -a
278 are mutually exclusive.
279 .TP
280 .BR \-\^\-Server-port\ \<port>
281 Specify the port number where
282 .B fwknop
283 accepts packets via libpcap or ulogd pcap writer.  By default fwknop looks for
284 authorization packets over UDP port 62201.
285 .TP
286 .BR \-\^\-Spoof-cmd\ \<cmd>
287 Specify the path to the command
288 .B knopspoof
289 which is used by the
290 .B fwknop
291 client in
292 .B --Spoof-src
293 mode.  This command is install by default at
294 .I /usr/sbin/knopspoof.
295 .TP
296 .BR \-\^\-Spoof-file\ \<file>
297 Specify the path to the cache file that
298 .B knopspoof
299 reads in order to correctly generate the authorization packet.
300 This file defaults to
301 .I /tmp/spoof.cache
302 , and contains source and destination
303 IP addresses, protocol and port numbers, and the encrypted authorization
304 message.
305 .TP
306 .BR \-\^\-Spoof-src\ \<IP>
307 Spoof the source address from which the
308 .B fwknop
309 client sends SPA packets.  This requires root on the client side access since a raw socket
310 is required to accomplish this.  Note that the
311 .B --Spoof-user
312 argument can be given in this mode in order to pass any
313 .B REQUIRE_USERNAME
314 keyword that might
315 be specified in
316 .I /etc/fwknop/access.conf.
317 .TP
318 .BR \-\^\-Spoof-user\ \<user>
319 Specify the username that is included within SPA packet.  This allows
320 the
321 .B fwknop
322 client to satisfy any non-root
323 .B REQUIRE_USERNAME
324 keyword on the
325 .B fwknopd
326 server (
327 .B --Spoof-src
328 mode requires that the
329 .B fwknop
330 client is executed as root).
331 .TP
332 .BR \-T "\fR,\fP " \-\^\-TCP-sock
333 Have the
334 .B fwknop
335 client send an SPA packet over an established TCP connection.  This is not normally
336 done, but is useful for compatibility with the Tor for strong anonymity; see
337 .B http://tor.eff.org/.
338 .TP
339 .BR \-h "\fR,\fP " \-\^\-help
340 Display usage information and exit.
341 .TP
342 .BR \-V "\fR,\fP " \-\^\-Version
343 Display version information and exit.
344 .TP
345 .BR \-v "\fR,\fP " \-\^\-verbose
346 Run the
347 .B fwknop
348 client in verbose mode.
349 .TP
350 .BR \-\^\-Server-cmd\ \<cmd>
351 .B NOTE:
352 This is for command mode only (i.e. when you want to send a command across
353 to a system running
354 .B fwknopd
355 and have it execute the command). This option is not needed when trying to
356 gain access to a service via the SPA mechanism.  To use this feature, please
357 ensure that ENABLE_CMD_EXEC; is set in the file
358 .I /etc/fwknop/access.conf
359 on the
360 .B fwknopd
361 server you are sending the command to.
362 The --Server-cmd argument allows a complete command (e.g. "ping -c 1 www.yahoo.com",
363 or "iptables -t nat -A PREROUTING -p tcp -s 65.x.x.x --dport 443 -i eth0 -j DNAT --to 192.168.10.20:443")
364 to be send to an
365 .B fwknop
366 server, which will execute the command as root.  Command execution is enabled only
367 if the
368 .B ENABLE_CMD_EXEC keyword is given in
369 .I /etc/fwknop/access.conf
370 (note that commands can easily be restricted with the
371 .B CMD_REGEX
372 keyword as well).
373 .TP
374
375 .B Legacy Port-knock mode only
376
377 All of the following options in this section are for the traditional port knocking
378 mode mode.  This is a legacy mode and is
379 .B not
380 the preferred or recommended mode next to Single Packet Authorization ( see
381 .B http://www.cipherdyne.org/fwknop/docs/SPA.html
382 for details on why).
383 .RS
384 .TP
385 .BR \-\^\-offset\ \<port>
386 Specify a port offset to use when running
387 .B fwknop
388 in encrypted knock mode.  The default is 61000.
389 .TP
390 .BR \-r "\fR,\fP " \-\^\-rotate-proto
391 Rotate the protocol across tcp and udp for
392 encrypted sequences.  This just adds one more additional layer of obfuscation
393 to an encrypted sequence.
394 .TP
395 .BR \-\^\-Server-mode\ \<mode>
396 This command line switch provides an interface to
397 the old port knocking method if
398 the mode argument is "knock".  If the
399 .B --Server-mode
400 argument is not given then the
401 .B fwknop
402 client defaults to using the SPA method which provides much better
403 security characteristics than port knocking (encrypted or not).
404 .TP
405 .BR \-t "\fR,\fP " \-\^\-time-delay\ \<seconds>
406 Specify a time delay to introduce between successive
407 connection attempts.  This option is used by the
408 .B fwknop
409 client.  On the server side,
410 .B fwknopd
411 uses the variables MIN_TIME_DIFF
412 and MAX_TIME_DIFF to control whether the time delay actually means
413 something (i.e. if the MIN_TIME_DIFF is 2 seconds for a SOURCE block,
414 then the argument to the --time-delay option must be at least 2 at the
415 client side).
416 .TP
417 .BR \-u "\fR,\fP " \-\^\-user-rc\ \<rc-file>
418 The default connection rc file the
419 .B fwknop
420 client uses to know what shared port knocking sequence to send to a destination machine
421 is defined in the file
422 .I ~/.fwknoprc.
423 The path to this file can be changed with the
424 .B --user-rc
425 command line option.
426 .RE
427
428 .SH FILES
429 .TP
430 .B ~/.fwknop.run
431 Contains the last command line arguments that the
432 .B fwknop
433 client was invoked with.
434
435 .TP
436 .B ~/.fwknop.hosts
437 Contains the last command line arguments for individual hosts that the
438 .B fwknop
439 client has been used to gain access to.  By using the
440 .B --Last-host
441 switch, these arguments can be recalled and used.
442
443 .SH ENVIRONMENT:
444
445 .B GPG_AGENT_INFO
446 (only used in --gpg-agent mode).
447
448 .SH EXAMPLES:
449 The following examples illustrate the command line arguments that could
450 be supplied to the
451 .B fwknop
452 client in a few situations:
453
454 .B Access mode examples
455 .RS
456 Packet contents printed to stdout at the
457 .B fwknop
458 client when creating a 'access mode' SPA packet:
459 .PP
460         Random data:    6565240948266426
461         Username:       mbr
462         Timestamp:      1203863233
463         Version:        1.9.2
464         Type:           1 (access mode)
465         Access:         127.0.0.2,tcp/22
466         SHA256 sum:     gngquSL8AuM7r27XsR4qPmJhuBo9pG2PYwII06AaJHw
467 .PP
468
469 Use the Single Packet Authorization mode to gain access to tcp/22 (ssh)
470 and udp/53 running on the system 10.0.0.123 from the IP 192.168.10.4:
471 .PP
472 .B $ fwknop -A 'tcp/22,udp/53' -a 192.168.10.4 -D 10.0.0.123
473 .PP
474 Same as above example, but gain access from whatever source IP is seen
475 by the fwknop server (useful if the fwknop client is behind a NAT device):
476 .PP
477 .B $ fwknop -A 'tcp/22,udp/53' -s -D 10.0.0.123
478 .PP
479 Same as above example, but use the IP identification website http://www.whatismyip.com/
480 to derive the client IP address.  This is a safer method of acquiring the client IP
481 address than using the
482 .B -s
483 option because the source IP is put within the encrypted
484 packet instead of having the
485 .B fwknopd
486 daemon grant the requested access from whatever IP address the SPA packet originates:
487 .PP
488 .B $ fwknop -A 'tcp/22,udp/53' -R -D 10.0.0.123
489 .PP
490 Use the Single Packet Authorization mode to gain access to tcp/22 (ssh)
491 and udp/53 running on the system 10.0.0.123, and use GnuPG keys to encrypt
492 and decrypt:
493 .PP
494 .B $ fwknop -A 'tcp/22,udp/53' --gpg-sign ABCD1234 --gpg--recipient 1234ABCD -R -D 10.0.0.123
495 .PP
496 Instruct the fwknop server running at 10.0.0.123 to allow 172.16.5.4 to
497 connect to TCP/22, but spoof the authorization packet from an IP associated
498 with www.yahoo.com:
499 .PP
500 .B # fwknop --Spoof-src 'www.yahoo.com' -A tcp/22 -a 172.16.5.4 -D 10.0.0.123
501 .PP
502 .RE
503
504 .B Command mode examples
505 .RS
506 .B NOTE:
507 Please ensure that ENABLE_CMD_EXEC; is set in the file
508 .I /etc/fwknop/access.conf
509 on the
510 .B fwknopd
511 server you are attempting to connect to.
512 Packet contents printed to stdout at the
513 .B fwknop
514 client when creating a 'command mode' SPA packet:
515 .PP
516         Random data:    4621962433020664
517         Username:       mbr
518         Timestamp:      1203864394
519         Version:        1.9.2
520         Type:           0 (command mode)
521         Cmd:            echo "The commands sent - minus quote charaters around the command" & sleep 10; echo "The End"
522         SHA256 sum:     eN8c8mNArZxF066iulbxlTK4Gt/EO0ALLYwzVzCkXww
523 .PP
524 Instruct the fwknop server running at 10.0.0.123 to send a single ICMP
525 echo request to www.yahoo.com:
526 .PP
527 .B $ fwknop --Server-cmd 'ping -c 1 www.yahoo.com' -D 10.0.0.123
528 .PP
529 .RE
530
531 .B Port-knock mode (legacy) examples
532 .RS
533 This connection mode is a legacy mode and is
534 .B not
535 the preferred or recommended mode.
536
537 Packet contents printed to stdout at the
538 .B fwknop
539 client when in 'port-knock mode':
540 <TODO>
541
542 Send an encrypted knock sequence to the IP "10.0.0.123" instructing the
543 fwknop daemon running there to open tcp port 22 to source address
544 192.168.10.4:
545 .PP
546 .B $ fwknop --Server-mode 'knock' -A tcp/22 -a 192.168.10.4 -D 10.0.0.123
547 .PP
548 Same as above, but this time instruct the remote fwknop daemon to open
549 tcp port 22 to whatever source address the encrypted sequence originates
550 from (useful if the fwknop client is behind a NAT device):
551 .PP
552 .B $ fwknop --Server-mode 'knock' -A tcp/22 -s -D 10.0.0.123
553 .PP
554 Same as above, but rotate the knock sequence through the tcp and udp
555 protocols (remember that iptables must be configured to log both tcp and
556 udp packets to the default port range of 61000-61255):
557 .PP
558 .B $ fwknop --Server-mode 'knock' -A tcp/22 -s -r -D 10.0.0.123
559 .PP
560 Same as above, but change the base port for the encrypted sequence to
561 55000 (the default is 61000):
562 .PP
563 .B $ fwknop --Server-mode 'knock' -A tcp/22 -s -r --offset 55000 -D 10.0.0.123
564 .PP
565 Send a shared knock sequence to the IP 10.11.11.123.  The fwknop client
566 will read the sequence out of the file
567 .B ~/.fwknoprc
568 and the server will read the sequence out of
569 .B /etc/fwknop/access.conf:
570 .PP
571 .B $ fwknop --Server-mode 'knock' -D 10.11.11.123
572 .RE
573
574 .SH DEPENDENCIES
575 .B fwknop
576 requires perl.  To take advantage of all of the authentication and access management features of the
577 .B fwknopd
578 daemon/service a functioning iptables firewall is required on the underlying
579 operating system.  If fwknop is being run in the legacy port knocking mode,
580 then iptables must log packets via syslog, and ideally the
581 .B --log-tcp-options
582 argument will be specified in the iptables logging rule so that the
583 .B fwknopd
584 daemon/service will
585 be able to use a strategy similar to
586 .B p0f
587 to passively fingerprint operating systems.
588
589 .SH DIAGNOSTICS
590 .B fwknop
591 can be run in debug mode with the
592 .B --debug
593 command line option.  This will
594 disable daemon mode execution, and print verbose information to the screen
595 on STDERR as packets are received.
596
597 .SH "SEE ALSO"
598 .BR fwknopd (8),
599 .BR iptables (8),
600 .BR gpg (1),
601 .BR gpg-agent (1),
602 .BR knopmd (8),
603 .BR knopwatchd (8)
604 .BR p0f (1),
605 More information on the
606 differences between port knocking and Single Packet Authorization can be found
607 in the paper "Single Packet Authorization with fwknop" available here:
608 .B http://www.cipherdyne.org/fwknop/docs/SPA.html
609
610 .SH AUTHOR
611 Michael Rash <mbr@cipherdyne.org>
612
613 .SH CONTRIBUTORS
614 Many people who are active in the open source community have contributed to fwknop.
615 See the
616 .B CREDITS
617 file in the fwknop sources, or visit
618 .B http://www.cipherdyne.org/fwknop/docs/contributors.html
619 to view the online list of contributors.
620
621 The phrase "Single Packet Authorization" was coined by MadHat and Simple
622 Nomad at the BlackHat Briefings of 2005 (see: http://www.nmrc.org/).
623 The term "port knocking" was coined by Martin Krzywinski (see:
624 http://www.portknocking.org/).  The original p0f passive OS fingerprinter was
625 written by Michal Zalewski, and is available here:
626 .B http://lcamtuf.coredump.cx/p0f.shtml
627
628 .SH BUGS
629 Send bug reports to mbr@cipherdyne.org.  Suggestions and/or comments are
630 always welcome as well.
631
632 .SH DISTRIBUTION
633 .B fwknop
634 is distributed under the GNU General Public License (GPL), and the latest
635 version may be downloaded from
636 .B http://www.cipherdyne.org/
637
638
Note: See TracBrowser for help on using the browser.