chiark / gitweb /
9f434bdc9f3e7b6cf3be42248c0906635cb1cd2e
[tripe] / doc / tripe-admin.5
1 .\" -*-nroff-*-
2 .TH tripe-admin 5 "18 February 2001" "Straylight/Edgeware" "TrIPE: Trivial IP Encryption"
3 .SH NAME
4 tripe-admin \- administrator commands for TrIPE
5 .SH DESCRIPTION
6 This manual page describes the administration interface provided by the
7 .BR tripe (8)
8 daemon.
9 .PP
10 The
11 .BR tripectl (8)
12 program can be used either interactively or in scripts to communicate
13 with the server using this interface.  Alternatively, simple custom
14 clients can be written in scripting languages such as Perl, Python or
15 Tcl, or more advanced clients such as GUI monitors can be written in C
16 with little difficulty.
17 .PP
18 By default, the server listens for admin connections on the Unix-domain
19 socket
20 .BR /var/lib/tripe/tripesock .
21 Administration commands use a simple textual protocol.  Each client
22 command or server response consists of a line of ASCII text terminated
23 by a single linefeed character.  No command may be longer than 255
24 characters.
25 .SS "General structure"
26 Each command or response line consists of a sequence of
27 whitespace-separated words.  The number and nature of whitespace
28 characters separating two words in a client command is not significant;
29 the server always uses a single space character.  The first word in a
30 line is a
31 .I keyword
32 identifying the type of command or response contained.  Keywords in
33 client commands are not case-sensitive; the server always uses uppercase
34 for its keywords.
35 .SS "Server responses"
36 For client command, the server responds with zero or more
37 .B INFO
38 lines, followed by either an
39 .B OK
40 line or a
41 .B FAIL
42 line.  Each
43 .B INFO
44 provides information requested in the command.  An
45 .B OK
46 response contains no further data.  A
47 .B FAIL
48 code is followed by a machine-readable explanation of why the command
49 failed.
50 .PP
51 In addition, there are three types of asynchronous messages which
52 aren't associated with any particular command.  The
53 .B WARN
54 message contains a machine-readable message warning of an error
55 encountered while processing a command, unexpected or unusual behaviour
56 by a peer, or a possible attack by an adversary.  Under normal
57 conditions, the server shouldn't emit any warnings.  The
58 .B TRACE
59 message contains a human-readable tracing message containing diagnostic
60 information.  Trace messages are controlled using the
61 .B \-T
62 command-line option to the server, or the
63 .B TRACE
64 administration command (see below).  Support for tracing can be disabled
65 when the package is being configured, and may not be available in your
66 version.  Finally, the
67 .B NOTE
68 message is a machine-readable notification about some routine but
69 interesting event such as creation or destruction of peers.
70 .PP
71 The presence of asynchronous messages can be controlled using the
72 .B WATCH
73 command.
74 .SS "Network addresses"
75 A network address is a sequence of words.  The first is a token
76 identifying the network address family.  The length of an address and
77 the meanings of the subsequent words depend on the address family.
78 Address family tokens are not case-sensitive on input; on output, they
79 are always in upper-case.
80 .PP
81 At present, only one address family is understood.
82 .TP
83 .BI "INET " address " " port
84 An Internet socket, naming an IPv4 address and UDP port.  On output, the
85 address is always in numeric dotted-quad form, and the port is given as
86 a plain number.  On input, DNS hostnames and symbolic port names are
87 permitted.  Name resolution does not block the main server, but will
88 block the requesting client.  This hopefully makes life simpler for
89 stupid clients.  Complex clients which don't wish to be held up can open
90 extra connections or do the resolution themselves.)
91 .PP
92 If, on input, no recognised address family token is found, the following
93 words are assumed to represent an
94 .B INET
95 address.
96 .SH "COMMAND REFERENCE"
97 The commands provided are:
98 .TP
99 .BI "ADD " peer " " address\fR...
100 Adds a new peer.  The peer is given the name
101 .IR peer ;
102 the peer's public key is assumed to be in the file
103 .B keyring.pub
104 (or whatever alternative file was specified in the
105 .B \-K
106 option on the command line).  The
107 .I address
108 is the network address (see above for the format) at which the peer can
109 be contacted.
110 .TP
111 .BI "ADDR " peer
112 Emits an
113 .B INFO
114 line reporting the IP address and port number stored for
115 .IR peer .
116 .TP
117 .B "DAEMON"
118 Causes the server to disassociate itself from its terminal and become a
119 background task.  This only works once.  A warning is issued.
120 .TP
121 .B "HELP"
122 Causes the server to emit an
123 .B INFO
124 line for each command it supports.  Each line lists the command name,
125 followed by the names of the arguments.  This may be helpful as a memory
126 aid for interactive use, or for program clients probing for features.
127 .TP 
128 .BI "IFNAME " peer
129 Emits an
130 .B INFO
131 line containing the name of the network interface used to collect IP
132 packets which are to be encrypted and sent to
133 .IR peer .
134 Used by configuration scripts so that they can set up routing tables
135 appropriately after adding new peers.
136 .TP
137 .BI "KILL " peer
138 Causes the server to forget all about
139 .IR peer .
140 All keys are destroyed, and no more packets are sent.  No notification
141 is sent to the peer: if it's important that the peer be notified, you
142 must think of a way to do that yourself.
143 .TP
144 .B "LIST"
145 For each currently-known peer, an
146 .B INFO
147 line is written containing the peer's name, as given to
148 .BR ADD .
149 .TP
150 .BI "NOTIFY " tokens\fR...
151 Issues a 
152 .B USER
153 notification to all interested administration clients.
154 .TP
155 .B "PORT"
156 Emits an
157 .B INFO
158 line containing just the number of the UDP port used by the
159 .B tripe
160 server.  If you've allowed your server to allocate a port dynamically,
161 this is how to find out which one it chose.
162 .TP
163 .B "QUIT"
164 Instructs the server to exit immediately.  A warning is sent.
165 .TP
166 .BI "STATS " peer
167 Emits a number of
168 .B INFO
169 lines, each containing one or more statistics in the form
170 .IB name = value \fR.
171 The statistics-gathering is experimental and subject to change.
172 .TP
173 .BR "TRACE " [\fIoptions\fP]
174 A trace argument consists of a string of letters (listed below)
175 selecting trace outputs, optionally interspersed with
176 .RB ` + '
177 to enable, or
178 .RB ` \- '
179 to disable, the subsequently listed outputs; the initial behaviour is to
180 enable listed outputs.  For example, the string
181 .B ra\-st+x
182 enables tracing of peer management, admin-connection handling and
183 key-exchange processing, and disables tracing of symmetric keyset
184 management and the system-specific tunnel driver.  If no argument is
185 given, a table is returned showing the available tracing option letters
186 and their meanings.  Programs should not attempt to parse this table:
187 its format is not guaranteed to remain the same.
188 .RS
189 .PP
190 Currently, the following tracing options are supported:
191 .TP
192 .B t
193 Tunnel events: reception of packets to be encrypted, and injection of
194 successfully-decrypted packets.
195 .TP
196 .B r
197 Peer management events: creation and destruction of peer attachments,
198 and arrival of messages.
199 .TP
200 .B a
201 Administration interface: acceptance of new connections, and handling of
202 the backgroud name-resolution required by the
203 .B ADD
204 command.
205 .TP
206 .B p
207 Display contents of packets sent and received by the tunnel and/or peer
208 modules.
209 .TP
210 .B c
211 Display inputs, outputs and intermediate results of cryptographic
212 operations.  This includes plaintext and key material.  Use with
213 caution.
214 .TP
215 .B s
216 Handling of symmetric keysets: creation and expiry of keysets, and
217 encryption and decryption of messages.
218 .TP
219 .B x
220 Key exchange: reception, parsing and emission of key exchange messages.
221 .TP
222 .B m
223 Key management: loading keys and checking for file modifications.
224 .PP
225 Note that the
226 .B p
227 (packet contents)
228 and
229 .B c
230 (crypto details)
231 outputs provide extra detail for other outputs.  Specifying
232 .B p
233 without
234 .B r
235 or
236 .B t
237 isn't useful; neither is specifying
238 .B c
239 without one of
240 .BR s ,
241 .B x
242 or
243 .BR m .
244 .TP
245 .B A
246 All of the above.
247 .RE
248 .TP
249 .BR "WATCH " [\fIoptions\fP]
250 Enables or disables asynchronous messages
251 .IR "for the current connection only" .
252 This command has no effect on other connections.  A watch argument
253 consists of a string of letters (listed below) selecting message types,
254 optionally interspersed with
255 .RB ` + '
256 to enable, or
257 .RB ` \- '
258 to disable, the subsequently listed types, similar to
259 .B trace
260 above.  The default watch state for the connection the server opens
261 automatically on stdin/stdout is to show warnings and trace messages;
262 other connections show no asynchronous messages.  (This is done in order
263 to guarantee that a program reading the server's stdout does not miss
264 any warnings.)
265 .RS
266 .PP
267 Currently, the following watch options are supported:
268 .TP
269 .B t
270 .B TRACE
271 messages.
272 .TP
273 .B n
274 .B NOTE
275 messages.
276 .TP
277 .B w
278 .B WARN
279 messages.
280 .TP
281 .B a
282 All of the above.
283 .RE
284 .TP
285 .B "VERSION"
286 Causes the server to emit an
287 .B INFO
288 line stating its software version, as two words: the server name, and
289 its version string.  The server name
290 .B tripe
291 is reserved to the Straylight/Edgeware implementation.
292 .TP
293 .BI "WARN " tokens\fR...
294 Issues a 
295 .B USER
296 warning to all interested administration clients.
297 .SH "ERROR MESSAGES"
298 The following
299 .B FAIL
300 messages are sent to clients as a result of errors during command
301 processing.
302 .TP
303 .BI "already-daemon"
304 (For
305 .BR DAEMON .)
306 The
307 .B tripe
308 server is already running as a daemon.
309 .TP
310 .BI "bad-syntax \-\- " message
311 (For any command.)  The command couldn't be understood: e.g., the number
312 of arguments was wrong.
313 .TP
314 .BI "bad-trace-option " char
315 (For
316 .BR TRACE .)
317 An unknown trace option was requested.
318 .TP
319 .BI "bad-watch-option " char
320 (For
321 .BR WATCH .)
322 An unknown watch option was requested.
323 .TP
324 .BI "daemon-error \-\- " message
325 (For
326 .BR DAEMON .)
327 An error occurred during the attempt to become a daemon, as reported by
328 .IR message .
329 .TP
330 .BI "invalid-port " number
331 (For
332 .BR ADD .)
333 The given port number is out of range.
334 .TP
335 .BI "peer-create-fail " peer
336 (For
337 .BR ADD .)
338 Adding
339 .I peer
340 failed for some reason.  A warning should have been emitted explaining
341 why.
342 .TP
343 .BI "peer-exists " peer
344 (For
345 .BR ADD .)
346 There is already a peer named
347 .IR peer .
348 .TP
349 .BI "resolve-error " hostname
350 (For
351 .BR ADD .)
352 The DNS name
353 .I hostname
354 could not be resolved.
355 .TP
356 .BI "resolver-timeout " hostname
357 (For
358 .BR ADD .)
359 The DNS name
360 .I hostname
361 took too long to resolve.
362 .TP
363 .BI "unknown-command " token
364 The command
365 .B token
366 was not recognised.
367 .TP
368 .BI "unknown-peer " name
369 (For
370 .BR ADDR ,
371 .BR IFNAME ,
372 .BR KILL ,
373 and
374 .BR STATS .)
375 There is no peer called
376 .IR name .
377 .TP
378 .BI "unknown-service " service
379 (For
380 .BR ADD .)
381 The service name
382 .I service
383 couldn't be found in 
384 .BR /etc/services .
385 .SH "NOTIFICATIONS"
386 The following notifications are sent to clients who request them.
387 .TP
388 .BI "ADD " peer " " address \fR...
389 A new peer has been added.  The peer's name is
390 .I peer
391 and its network address is
392 .IR address .
393 .TP
394 .BI "DAEMON"
395 The server has forked off into the sunset and become a daemon.
396 .TP
397 .BI "KILL " peer
398 The peer
399 .I peer
400 has been killed.
401 .TP
402 .BI "KXDONE " peer
403 Key exchange with
404 .I peer
405 finished successfully.
406 .TP
407 .BI "KXSTART " peer
408 Key exchange with
409 .I peer
410 has begun or restarted.  If key exchange keeps failing, this message
411 will be repeated periodically.
412 .TP
413 .BI "USER " tokens\fR...
414 An administration client issued a notification using the
415 .B NOTIFY
416 command.
417 .SH "WARNINGS"
418 There are many possible warnings.  They are categorized according to
419 their first tokens.
420 .SS "ABORT warnings"
421 These all indicate that the
422 .B tripe
423 server has become unable to continue.  If enabled, the server will dump
424 core in its configuration directory.
425 .TP
426 .BI "ABORT repeated-select-errors"
427 The main event loop is repeatedly failing.  If the server doesn't quit,
428 it will probably waste all available CPU doing nothing.
429 .SS "ADMIN warnings"
430 These indicate a problem with the administration socket interface.
431 .TP
432 .BI "ADMIN accept-error \-\- " message
433 There was an error while attempting to accept a connection from a new
434 client.
435 .TP
436 .BI "ADMIN client-read-error \-\- " message
437 There was an error sending data to a client.  The connection to the
438 client has been closed.
439 .SS "KEYMGMT warnings"
440 These indicate a problem with the keyring files, or the keys stored in
441 them.
442 .TP
443 .BI "KEYMGMT bad-private-key \-\- " message
444 The private key could not be read, or failed a consistency check.  If
445 there was a problem with the file, usually there will have been
446 .B key-file-error
447 warnings before this.
448 .TP
449 .BI "KEYMGMT bad-public-keyring \-\- " message
450 The public keyring couldn't be read.  Usually, there will have been 
451 .B key-file-error
452 warnings before this.
453 .TP
454 .BI "KEYMGMT key-file-error " file ":" line " \-\- " message
455 Reports a specific error with the named keyring file.  This probably
456 indicates a bug in
457 .BR key (1).
458 .TP
459 .BI "KEYMGMT public-key " tag " " tokens\fR...
460 These messages all indicate a problem with the public key named
461 .IR tag .
462 .TP
463 .BI "KEYMGMT public-key " tag " algorithm-mismatch"
464 The algorithms specified on the public key don't match the ones for our
465 private key.  All the peers in a network have to use the same
466 algorithms.
467 .TP
468 .BI "KEYMGMT public-key " tag " bad \-\- " message
469 The public key couldn't be read, or is invalid.
470 .TP
471 .BI "KEYMGMT public-key " tag " bad-public-group-element"
472 The public key is invalid.  This may indicate a malicious attempt to
473 introduce a bogus key.
474 .TP
475 .BI "KEYMGMT public-key " tag " bad-algorithm-selection"
476 The algorithms listed on the public key couldn't be understood.  The
477 algorithm selection attributes are probably malformed and need fixing.
478 .TP
479 .BI "KEYMGMT public-key " tag " incorrect-group"
480 The public key doesn't use the same group as our private key.  All the
481 peers in a network have to use the same group.
482 .TP
483 .BI "KEYMGMT public-key " tag " not-found"
484 The public key for peer
485 .I tag
486 wasn't in the public keyring.
487 .TP
488 .BI "KEYMGMT public-key " tag " unknown-type"
489 The type of the public key isn't understood.  Maybe you need to upgrade
490 your copy of
491 .BR tripe .
492 (Even if you do, you'll have to regenerate your keys.)
493 .SS "KX warnings"
494 These indicate problems during key-exchange.  Many indicate either a bug
495 in the server (either yours or the remote one), or some kind of attack
496 in progress.  All name a
497 .I peer
498 as the second token: this is the peer the packet is apparently from,
499 though it may have been sent by an attacker instead.
500 .PP
501 In the descriptions below,
502 .I msgtoken
503 is one of the tokens
504 .BR pre-challenge ,
505 .BR cookie ,
506 .BR challenge ,
507 .BR reply ,
508 .BR switch-rq ,
509 or
510 .BR switch-ok .
511 .TP
512 .BI "KX " peer " bad-expected-reply-log"
513 The challenges
514 .B tripe
515 uses in its protocol contain a check value which proves that the
516 challenge is honest.  This message indicates that the check value
517 supplied is wrong: someone is attempting to use bogus challenges to
518 persuade your
519 .B tripe
520 server to leak private key information.  No chance!
521 .TP
522 .BI "KX " peer " decrypt-failed reply\fR|\fBswitch-ok"
523 A symmetrically-encrypted portion of a key-exchange message failed to
524 decrypt.
525 .TP
526 .BI "KX " peer " invalid " msgtoken
527 A key-exchange message was malformed.  This almost certainly indicates a
528 bug somewhere.
529 .TP
530 .BI "KX " peer " incorrect cookie\fR|\fBswitch-rq\fR|\fBswitch-ok"
531 A message didn't contain the right magic data.  This may be a replay of
532 some old exchange, or random packets being sent in an attempt to waste
533 CPU.
534 .TP
535 .BI "KX " peer " public-key-expired"
536 The peer's public key has expired.  It's maintainer should have given
537 you a replacement before now.
538 .TP
539 .BI "KX " peer " sending-cookie"
540 We've received too many bogus pre-challenge messages.  Someone is trying
541 to flood us with key-exchange messages and make us waste CPU on doing
542 hard asymmetric crypto sums.
543 .TP
544 .BI "KX " peer " unexpected " msgtoken
545 The message received wasn't appropriate for this stage of the key
546 exchange process.  This may mean that one of our previous packets got
547 lost.  For 
548 .BR pre-challenge ,
549 it may simply mean that the peer has recently restarted.
550 .TP
551 .BI "KX " peer " unknown-challenge"
552 The peer is asking for an answer to a challenge which we don't know
553 about.  This may mean that we've been inundated with challenges from
554 some malicious source
555 .I who can read our messages
556 and discarded the valid one.
557 .TP
558 .BI "KX " peer " unknown-message 0x" nn
559 An unknown key-exchange message arrived.
560 .SS "PEER warnings"
561 These are largely concerned with management of peers and the low-level
562 details of the network protocol.  The second word is usually the name of
563 a peer, or 
564 .RB ` \- '
565 if none is relevant.
566 .TP
567 .BI "PEER \- unexpected-source " address\fR...
568 A packet arrived from
569 .I address
570 (a network address \(en see above), but no peer is known at that
571 address.  This may indicate a misconfiguration, or simply be a result of
572 one end of a connection being set up before the other.
573 .TP
574 .BI "PEER " peer " bad-packet no-type"
575 An empty packet arrived.  This is very strange.
576 .TP
577 .BI "PEER " peer " bad-packet unknown-category 0x" nn
578 The message category
579 .I nn
580 (in hex) isn't understood.  Probably a strange random packet from
581 somewhere; could be an unlikely bug.
582 .TP
583 .BI "PEER " peer " bad-packet unknown-type 0x" nn
584 The message type
585 .I nn
586 (in hex) isn't understood.  Probably a strange random packet from
587 somewhere; could be an unlikely bug.
588 .TP
589 .BI "PEER " peer " decrypt-failed"
590 An encrypted IP packet failed to decrypt.  It may have been mangled in
591 transit, or may be a very old packet from an expired previous session
592 key.  There is usually a considerable overlap in the validity periods of
593 successive session keys, so this shouldn't occur unless the key exchange
594 takes ages or fails.
595 .TP
596 .BI "PEER " peer " packet-build-failed"
597 There wasn't enough space in our buffer to put the packet we wanted to
598 send.  Shouldn't happen.
599 .TP
600 .BI "PEER \- socket-read-error \-\- " message
601 An error occurred trying to read an incoming packet.
602 .TP
603 .BI "PEER " peer " socket-write-error \-\- " message
604 An error occurred attempting to send a network packet.  We lost that
605 one.
606 .SS "SERVER warnings"
607 These indicate problems concerning the server process as a whole.
608 .TP
609 .BI "SERVER ignore signal " name
610 A signal arrived, but the server ignored it.  Currently this happens for
611 .B SIGHUP
612 because that's a popular way of telling daemons to re-read their
613 configuration files.  Since
614 .B tripe
615 re-reads its keyrings automatically and has no other configuration
616 files, it's not relevant, but it seemed better to ignore the signal than
617 let the server die.
618 .TP
619 .BI "SERVER quit signal " \fR[\fInn\fR|\fIname\fR]
620 A signal arrived and
621 .B tripe
622 is going to quit.
623 .TP
624 .BI "SERVER quit admin-request"
625 A client of the administration interface issued a
626 .B QUIT
627 command.
628 .TP
629 .BI "SERVER select-error \-\- " message
630 An error occurred in the server's main event loop.  This is bad: if it
631 happens too many times, the server will abort.
632 .SS "SYMM warnings"
633 These are concerned with the symmetric encryption and decryption
634 process.
635 .TP
636 .BI "SYMM replay old-sequence"
637 A packet was received with an old sequence number.  It may just have
638 been delayed or duplicated, or it may have been an attempt at a replay
639 attack.
640 .TP
641 .BI "SYMM replay duplicated-sequence"
642 A packet was received with a sequence number we've definitely seen
643 before.  It may be an accidental duplication because the 'net is like
644 that, or a deliberate attempt at a replay.
645 .SS "TUN warnings"
646 These concern the workings of the system-specific tunnel driver.  The
647 second word is the name of the tunnel interface in question, or
648 .RB ` \- '
649 if none.
650 .TP
651 .BI "TUN \- bsd no-tunnel-devices"
652 The driver couldn't find an available tunnel device.  Maybe if you
653 create some more 
654 .BI /dev/tun nn
655 files, it will work.
656 .TP
657 .BI "TUN - open-error " device " \-\- " message
658 An attempt to open the tunnel device file
659 .I device
660 failed.
661 .TP
662 .BI "TUN " ifname " read-error \-\- " message
663 Reading from the tunnel device failed.
664 .TP
665 .BI "TUN \- linux config-error \-\- " message
666 Configuring the Linux TUN/TAP interface failed.
667 .TP
668 .BI "TUN \- unet config-error \-\- " message
669 Configuring the Linux Unet interface failed.  Unet is obsolete and
670 shouldn't be used any more.
671 .TP
672 .BI "TUN \- unet getinfo-error \-\- " message
673 Reading information about the Unet interface failed.  Unet is obsolete
674 and shouldn't be used any more.
675 .TP
676 .BI "TUN \- unet ifname-too-long \-\- " message
677 The Unet interface's name overflowed, so we couldn't read it properly.
678 Unet is obsolete and shouldn't be used any more.
679 .SS "USER warnings"
680 These are issued by administration clients using the
681 .B WARN
682 command.
683 .TP
684 .BI "USER " tokens\fR...
685 An administration client issued a warning.
686 .SH "SEE ALSO"
687 .BR tripectl (1),
688 .BR tripe (8).
689 .PP
690 .IR "The Trivial IP Encryption Protocol" .
691 .SH "AUTHOR"
692 Mark Wooding, <mdw@nsict.org>