Make syslog a separate option, and do it better.
[fwd] / fw.1
CommitLineData
10a454ad 1.\" -*-nroff-*-
667fb920 2.\"
d857515e 3.\" $Id: fw.1,v 1.7 1999/10/22 22:45:15 mdw Exp $
667fb920 4.\"
5.\" Manual page for fw
6.\"
7.\" (c) 1999 Straylight/Edgeware
8.\"
9.
10.\"----- Licensing notice ---------------------------------------------------
11.\"
12.\" This file is part of the `fw' port forwarder.
13.\"
14.\" `fw' is free software; you can redistribute it and/or modify
15.\" it under the terms of the GNU General Public License as published by
16.\" the Free Software Foundation; either version 2 of the License, or
17.\" (at your option) any later version.
18.\"
19.\" `fw' is distributed in the hope that it will be useful,
20.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
21.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22.\" GNU General Public License for more details.
23.\"
24.\" You should have received a copy of the GNU General Public License
25.\" along with `fw'; if not, write to the Free Software Foundation,
26.\" Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27.
28.\" ---- Revision history ---------------------------------------------------
29.\"
30.\" $Log: fw.1,v $
d857515e 31.\" Revision 1.7 1999/10/22 22:45:15 mdw
32.\" Describe new socket connection options.
33.\"
333c51f4 34.\" Revision 1.6 1999/10/10 16:46:29 mdw
35.\" Include grammar and options references at the end of the manual.
36.\"
cdc917d3 37.\" Revision 1.5 1999/09/26 18:18:05 mdw
38.\" Remove a fixed bug from the list. Fix some nasty formatting
39.\" misfeatures.
40.\"
e73034b0 41.\" Revision 1.4 1999/08/19 18:32:48 mdw
42.\" Improve lexical analysis. In particular, `chmod' patterns don't have to
43.\" be quoted any more.
44.\"
96bc31ba 45.\" Revision 1.3 1999/07/30 06:49:00 mdw
46.\" Minor tidying and typo correction.
47.\"
667fb920 48.\" Revision 1.2 1999/07/26 23:31:04 mdw
49.\" Document lots of new features and syntax.
50.\"
51.
52.\"----- Various bits of fancy styling --------------------------------------
53.
54.\" --- Indented paragraphs with right-aligned tags ---
55.
10a454ad 56.de hP
57.IP
58\h'-\w'\fB\\$1\ \fP'u'\fB\\$1\ \fP\c
59..
667fb920 60.
61.\" --- Verbatim-oid typesetting ---
62.de VS
63.sp 1
64.RS
65.nf
66.ft B
67..
68.de VE
69.ft R
70.fi
71.RE
72.sp 1
73..
74.
333c51f4 75.\" --- Grammar markup ---
76.\"
77.\" This is mainly for the benefit of the automatic scripts which
78.\" generate the grammar summary.
79.
80.de GS
81.PP
82..
83.de GE
84.PP
85..
86.
87.de OS
88.PP
89..
90.de OD
91.RS
92..
93.de OE
94.RE
95..
96.
667fb920 97.\" --- Other bits of styling ---
98.
99.ie t \{\
100. ds o \(bu
101. ds ss \s8\u
102. ds se \d\s0
103. if \n(.g \{\
104. fam P
105. \}
106.\}
107.el \{\
108. ds o o
109. ds ss ^
110. ds se
111.\}
112.
113.\"--------------------------------------------------------------------------
114.
10a454ad 115.TH fw 1 "1 July 1999" fw
667fb920 116.
117.\"--------------------------------------------------------------------------
10a454ad 118.SH NAME
667fb920 119.
10a454ad 120fw \- port forwarder
667fb920 121.
122.\"--------------------------------------------------------------------------
10a454ad 123.SH SYNOPSIS
667fb920 124.
10a454ad 125.B fw
667fb920 126.RB [ \-dq ]
10a454ad 127.RB [ \-f
128.IR file ]
129.IR config-stmt ...
667fb920 130.
131.\"--------------------------------------------------------------------------
132.SH "DESCRIPTION"
133.
10a454ad 134The
135.B fw
136program is a simple port forwarder. It supports a number of features
137the author hasn't found in similar programs:
138.TP
139.I "Connection logging"
140Each connection attempt to the forwarder is logged, giving the time of
141the connection, the DNS-resolved hostname (if available), and the user
142name resulting from an RFC931 lookup. These lookups are done
143asynchronously to the main forwarder's operation.
144.TP
145.I "Access control"
146Each forwarded port may have an access control list attached to it.
147Only authorized hosts are allowed to connect. Access control checks are
148performed by quick checks on the client's IP address.
149.TP
150.I "Nonblocking single-process design"
151The internal structure of the server is completely nonblocking. The
152connections don't block; the reading and writing don't block; the name
153lookups don't block. This is all done in a single process, with the
154single exception of the DNS resolver.
667fb920 155.TP
156.I "Support for Unix-domain sockets"
157Connections from and to Unix-domain sockets can be handled just as
96bc31ba 158easily as more normal Internet sockets. Access control doesn't work on
667fb920 159Unix domain sockets, though. (Yet.)
10a454ad 160.SS "Command line options"
161The
162.B fw
163program understands a few simple command line options:
164.TP
165.B "\-h, \-\-help"
166Displays a screen of help text on standard output and exits
167successfully.
168.TP
169.B "\-v, \-\-version"
170Writes the version number to standard output and exits successfully.
171.TP
172.B "\-u, \-\-usage"
173Writes a terse usage summary to standard output and exits successfully.
174.TP
175.BI "\-f, \-\-file=" file
176Read configuration information from
177.IR file .
667fb920 178Equivalent to an
179.RB ` include
180.IR file '
181configuration file statement.
10a454ad 182.TP
667fb920 183.B "\-d, \-\-daemon, \-\-fork"
10a454ad 184Forks into the background after reading the configuration and
185initializing properly.
667fb920 186.TP
187.B "-q, \-\-quiet"
188Don't output any logging information. This option is not recommended
189for normal use, although it can make system call traces clearer so I use
190it when debugging.
10a454ad 191.PP
192Any further command line arguments are interpreted as configuration
193lines to be read. Configuration supplied in command line arguments has
194precisely the same syntax as configuration in files. If there are no
96bc31ba 195configuration statements on the command line, and no
10a454ad 196.B \-f
197options were supplied, configuration is read from standard input, if
198stdin is not a terminal.
667fb920 199.
200.\"--------------------------------------------------------------------------
201.SH "CONFIGURATION LANGUAGE"
202.
203The
204.B fw
205program has a fairly sophisticated configuration language to let you
206describe which things should be forwarded where and what special
207features there should be.
208.SS "Lexical structure"
209There are four types of characters.
210.TP
211.I "word constituent characters"
96bc31ba 212Word constituent characters are gathered together into words.
667fb920 213Depending on its surrounding context, a word might act as a keyword or a
214string. All alphanumerics are word constituents, as is the hyphen
215.RB ` \- '.
216Other characters may change their status in future versions.
217.TP
218.I "self-delimiting characters"
219Self-delimiting characters always stand alone. They act as punctuation,
220shaping the sequence of words into more complex grammatical forms. The
221characters
222.RB ` { ',
223.RB ` } ',
224.RB ` [ ',
225.RB ` ] ',
226.RB ` / ',
227.RB ` , ',
228.RB ` = ',
229.RB ` : ',
230.RB ` ; '
231and
232.RB ` . '
233are self-delimiting. Note that while some characters, e.g.,
234.RB ` [ '
235and
236.RB ` ; ',
237require escaping by the shell, they are strictly optional in the grammar
238and can be omitted in quick hacks at the shell prompt.
239.TP
240.I "whitespace characters"
241Whitespace characters separate words but are otherwise ignored. All
242`normal' whitespace characters (e.g., space, tab and newline) are
243considered to be whitespace for these purposes.
244.TP
245.I "special characters"
246There are three special characters. The
247.RB ` # '
248character, if it appears at the start of a word, introduces a
249.I comment
250which extends to the end of the current line or command-line argument.
251Within a word, it behaves like a normal word-constituent character. The
252backslash
253.RB ` \e '
254escapes the following character causing it to be interpreted as a word
255constituent regardless of its normal type. The double-quote
256.RB ` """" '
257escapes all characters other than backslashes up to the next
258double-quote and causes them to be regarded as word constituents. Note
259that you don't have to quote a whole word. The backslash can escape a
260quote character allowing you to insert it into a word if really
261necessary.
262.
263.SS "Basic syntax"
264The overall syntax looks a bit like this:
333c51f4 265.GS "Basic syntax"
667fb920 266.I file
10a454ad 267::=
667fb920 268.I empty
269|
270.I file
271.I stmt
272.RB [ ; ]
10a454ad 273.br
274.I stmt
275::=
667fb920 276.I option-stmt
277|
278.I fw-stmt
279.br
280.I fw-stmt
281::=
282.B fw
283.I source
284.I options
285.RB [ to | \-> ]
286.I target
287.I options
288.br
289.I options
290::=
291.B {
292.I option-seq
293.B }
294.br
295.I option-seq
296::=
297.I empty
298|
299.I option-stmt
300.RB [ ; ]
301.I option-seq
333c51f4 302.GE
667fb920 303If you prefer, the keyword
304.RB ` fw '
305may be spelt
306.RB ` forward '
307or
308.RB ` from '.
309All are equivalent.
310.
311.SS "Sources and targets"
312Forwarding is set up by attaching
313.I targets
314to
315.IR sources .
316Sources are things which are capable of
317.I initiating
318one end of a data flow on their own, while targets are things which are
319capable of setting up the other end on demand. In the case of a TCP
320port forwarder, the part which listens for incoming client connections
321is the source, while the part which sets up outgoing connections to the
322destination server is the target.
323.PP
324Essentially, all
325.B fw
326does is set up a collection of sources and targets based on your
327configuration file so that when a source decides to initiate a data
328flow, it tells its target to set its end up, and then squirts data back
329and forth between the two until there's no more.
330.PP
331Some sources are
332.IR persistent :
333they stay around indefinitely setting up multiple attachments to
334targets. Others are
335.IR transient :
336they set up one connection and then disappear. If all the sources
337defined are transient, then
338.B fw
339will quit when no more active sources remain and all connections have
340terminated.
341.PP
342The
343.B fw
344program is fairly versatile. It allows you to attach any supported type
345of source to any supported type of target. This will, I hope, be the
346case in all future versions.
347.PP
348The syntax of a
349.I source
350or
351.I target
352depend on the source or target type, and are therefore described in the
353sections specific to the various types.
354.
355.SS "Options structure"
356Most of the objects that
357.B fw
358knows about (including sources and targets, but also other more specific
359things such as socket address types) can have their behaviour modified
360by
361.IR options .
362The options available at a particular point in the configuration depend
363on the
364.IR context .
365A global option, outside of a
366.I fw-stmt
367has no context unless it is explicitly qualified, and affects global
368behaviour. Local options, applied to a source or target in a
369.I fw-stmt
370has the context of the type of source or target to which it is applied,
371and affects only that source or target.
372.PP
373Note that it's important to distinguish between an option's context
374(which is affected by its qualification) and its local or global
375status. No matter how qualified, a global option will always control
376default options for objects, and a local option will only affect a
377specific source or target.
378.PP
379The syntax for qualifying options is like this:
333c51f4 380.GS "Option syntax"
667fb920 381.I option-stmt
382::=
383.I q-option
384.br
385.I q-option
386::=
387.I option
388.br
389 |
390.I prefix
391.B .
392.I q-option
393.br
394 |
395.I prefix
396.B {
397.I option-seq
398.B }
399.br
400.I prefix
401::=
402.I word
333c51f4 403.GE
667fb920 404Thus, you may qualify either an individual option or a sequence of
405options. The two are equivalent; for example,
406.VS
407exec.rlimit {
408 core = 0;
409 cpu = 60;
410}
411.VE
412is equivalent to
413.VS
414exec.rlimit.core = 0;
415exec.rlimit.cpu = 0;
416.VE
417For each option, there is a sequence of prefixes which maximally qualify
418that option. An option prefixed with this sequence is
419.IR "fully qualified" .
420In actual use, some or all of those prefixes may be omitted. However,
421it's possible for the option to become
422.I ambiguous
423if you do this. For example, the option
424.B fattr.owner
425may refer either to
426.B file.fattr.owner
427or to
428.BR socket.unix.fattr.owner .
429In this case, the ambiguity is benign: a local option will have as its
430context an appropriate source or target, and both global options
431actually control the same default. However, the option
432.B logging
433may mean either
434.B socket.logging
435or
436.BR exec.logging ,
437which have separate defaults, and which one you actually get depends on
438the exact implementation of
439.BR fw 's
440option parser. (Currently this would resolve to
441.BR exec.logging ,
442although this may change in a later version.)
443.PP
444In this manual, options are usually shown in their fully-qualified form.
445.
333c51f4 446.SS "File attributes for created files: `fattr'"
447Both the
448.B file
449and
450.B socket
451sources and targets can create new filesystem objects. The
452.B fattr
453options allow control over the attributes of the newly-created objects.
454Both
455.B file
456and
457.B socket
458use the same set of defaults, so a prefix of
459.B fattr
460is good enough for setting global options, and the implicit context
461disambiguates local options.
462.PP
463The following file attribute options are supported:
464.OS "File attribute options (`fattr')"
465.IB prefix .fattr.mode
466.RB [ = ]
467.I mode
468.OD
469Sets the permissions mode for a new file. The
470.I mode
471argument may be either an octal number or a
472.BR chmod (1)-style
473string which acts on the default permissions established by the
474prevailing
475.BR umask (2)
476setting. The characters
477.RB ` = '
478and
479.RB ` , '
480do not have to be quoted within the mode string.
481.OE
482.OS "File attribute options (`fattr')"
483.IB prefix .fattr.owner
484.RB [ = ]
485.I user
486.OD
487Sets the owner for newly created files. On non-broken systems you will
488need to be the superuser to set the owner on a file. The
489.I user
490may either be a numeric uid or a username. The default is not to change
491the owner of the file once it's created. The synonyms
492.B uid
493and
494.B user
495are accepted in place of
496.BR owner .
497.OE
498.OS "File attribute options (`fattr')"
499.IB prefix .fattr.group
500.RB [ = ]
501.I group
502.OD
503Sets the group for newly created files. You will usually need to be a
504member of the group in question order to set the group of a file. The
505.I group
506may either be a numeric gid or a group name. The default is not to
507change the group of the file once it's created. The synonym
508.B gid
509is accepted in place of
510.BR group .
511.OE
512.
667fb920 513.SS "The `file' source and target types"
514The
515.B file
516source and target allow data to move to and from objects other
517than sockets within the Unix filesystem. (Unix-domain sockets are
518handled using the
519.B socket
520source and target.)
521.PP
522If a
523.B file
524is used as a source, it is set up immediately.
525.PP
526The syntax of
527.B file
528sources and targets is like this:
333c51f4 529.GS "File sources and targets"
667fb920 530.I source
531::=
532.I file
533.br
534.I target
535::=
536.I file
537.br
538.I file
539::=
540.B file
541.RB [ . ]
542.I fspec
543.RB [ ,
544.IR fspec ]
545.br
546.I fspec
547::=
548.I fd-spec
549|
550.I name-spec
551|
552.I null-spec
553.br
554.I fd-spec
555::=
556.RB [[ : ] fd [ : ]]
557.IR number \c
558.RB | stdin | stdout
559.br
560.I name-spec
561::=
562.RB [[ : ] file [ : ]]
563.I file-name
564.br
565.I file-name
566::=
567.I path-seq
568|
569.B [
570.I path-seq
571.B ]
572.br
573.I path-seq
574::=
575.I path-elt
576|
577.I path-seq
578.I path-elt
579.br
580.I path-elt
581::=
582.B /
583|
584.I word
585.br
586.I null-spec
587::=
e73034b0 588.RB [ : ] null [ : ]
333c51f4 589.GE
667fb920 590The
591.I file
592specification describes two files, the first to be used as input, the
593second to be used as output, each described by an
594.IR fspec .
595.PP
596If none of the keywords
597.RB ` fd ',
598.RB ` name '
599or
600.RB ` null '
601are given, the type of an
602.I fspec
603is deduced from its nature: if it matches one of the strings
604.RB ` stdin '
605or
606.RB ` stdout ',
607or begins with a digit, it's considered to be a file descriptor;
608otherwise it's interpreted as a filename.
609.PP
610A
611.RB ` name '
612spec describes a file by its name within the filesystem. It is opened
613when needed and closed again after use. For output files, the precise
614behaviour is controlled by options described below.
615.PP
616A
617.RB ` null '
618spec attaches the input or output of the source or target to
619.BR /dev/null .
620.PP
621An
622.RB ` fd '
623spec uses an existing open file descriptor, given either by number or a
624symbolic name. The name
625.RB ` stdin '
626refers to standard input (file descriptor 0 on normal systems) and
627.RB ` stdout '
628refers to standard output (file descriptor 1). The names work in
629exactly the same way as the equivalent file descriptor numbers.
630.PP
631If the output
632.I fspec
633is omitted, the input
634.I fspec
635is used for both input and output. Exception: if the input refers to
636standard input then the output will refer to standard output instead.
637.PP
638All
639.B file
640options apply equally to sources and targets. The options are as
641follows:
333c51f4 642.OS "File options"
667fb920 643.B file.create
644.RB [ = ]
645.BR yes | no
333c51f4 646.OD
667fb920 647Whether to create the output file if it doesn't exist. If
648.B no
649(the default), an error is reported if the file doesn't exist. If
650.BR yes ,
651the file is created if it doesn't exist.
333c51f4 652.OE
653.OS "File options"
667fb920 654.B file.open
655.RB [ = ]
656.BR no | truncate | append
333c51f4 657.OD
667fb920 658Controls the behaviour if the output file already exists. If
659.BR no ,
660an error is reported. If
661.B truncate
662(the default), the existing file is replaced by the new data. If
663.BR append ,
664the new data is appended to the file.
333c51f4 665.OE
666.OS "File options"
667.BR file.fattr.*
668.OD
667fb920 669The
670.B file
671source and target also accept
672.B fattr
333c51f4 673options for controlling the attributes of the created file.
674.OE
667fb920 675.PP
333c51f4 676Under no circumstances will
677.B fw
678create a file through a `dangling' symbolic link.
667fb920 679.
680.SS "The `exec' source and target types"
681The
682.B exec
683source and target execute programs and allow access to their standard
684input and output streams. Both source and target have the same syntax,
685which is as follows:
333c51f4 686.GS "Exec source and target"
667fb920 687.I source
688::=
689.I exec
690.br
691.I target
692::=
693exec
694.br
695.I exec
696::=
697.BR exec
698.RB [ . ]
699.I cmd-spec
700.br
701.I cmd-spec
702::=
703.I shell-cmd
10a454ad 704|
667fb920 705.RI [ prog-name ]
706.B [
707.I argv0
708.I arg-seq
709.B ]
710.br
711.I arg-seq
712::=
713.I word
714|
715.I arg-seq
716.I word
717.br
718.I shell-cmd
719::=
720.I word
721.br
722.I argv0
723::=
724.I word
333c51f4 725.GE
667fb920 726If a single word is given, it is a
727.I shell-cmd
728and will be passed to the Bourne shell for execution. If a
729bracket-enclosed sequence of words is given, it is considered to be a
730list of arguments to pass to the program: if a
731.I prog-name
732is also supplied, it names the file containing the program to execute;
733otherwise the file named by the first argument
734.RI ( argv0 )
735is used.
736.PP
737The standard input and output of the program are forwarded to the other
738end of the connection. The standard error stream is caught by
739.B fw
740and logged.
741.PP
742The
743.B exec
744source and target both understand the same set of options. The list of
745options supported is as follows:
333c51f4 746.OS "Exec options"
667fb920 747.B exec.logging
748.RB [ = ]
749.BR yes | no
333c51f4 750.OD
667fb920 751Whether to log the start and end of executed programs. If
752.B yes
753(the default), a log message is emitted when the program is started
754listing its process id, and another is emitted when the program finishes
755giving its process id and exit status. If
756.BR no ,
757these messages are not emitted. However the standard error stream is
758still logged. The
759.B log
760abbreviation is accepted as a synonym for
761.BR logging .
333c51f4 762.OE
763.OS "Exec options"
667fb920 764.B exec.dir
765.RB [ = ]
766.I file-name
333c51f4 767.OD
667fb920 768Sets the current directory from which the the program should be run.
769The default is not to change directory. The synonyms
770.BR cd ,
771.B chdir
772and
773.B cwd
774are accepted in place of
775.BR dir .
333c51f4 776.OE
777.OS "Exec options"
667fb920 778.B exec.root
779.RB [ = ]
780.I file-name
333c51f4 781.OD
667fb920 782Sets the root directory for the program, using the
783.BR chroot (2)
784system call. You must be the superuser for this option to work. The
785default is not to set a root directory. The synonyms
786.BR cd ,
787.B chdir
788and
789.B cwd
790are accepted in place of
791.B dir .
333c51f4 792.OE
793.OS "Exec options"
667fb920 794.B exec.user
795.RB [ = ]
796.I user
333c51f4 797.OD
667fb920 798Sets the user (real and effective uid) to run the program as. This will
799usually require superuser privileges to work. The default is not to
800change uid. The synonym
801.B uid
802is accepted in place of
803.BR user .
333c51f4 804.OE
805.OS "Exec options"
667fb920 806.B exec.group
807.RB [ = ]
808.I group
333c51f4 809.OD
667fb920 810Sets the group (real and effective gid) to run the program as. If
811running with superuser privileges, the supplementary groups list is
812cleared at the same time. The default is not to change gid (or clear
813the supplementary groups list). The synonym
814.B gid
815is accepted in place of
816.BR group .
333c51f4 817.OE
818.OS "Exec options"
667fb920 819.BI exec.rlimit. limit \c
820.RB [ .hard | .soft ]
821.RB [ = ]
822.I value
333c51f4 823.OD
667fb920 824Set resource limits for the program. The
825.I limit
826may be one of the resource limit names described in
827.BR setrlimit (2),
828in lower-case and without the
829.B RLIMIT_
830prefix; for example,
831.B RLIMIT_CORE
832becomes simply
833.BR core .
834The
835.I value
836is a number, followed optionally by
837.B k
838to multiply by 1024 (2\*(ss10\*(se),
839.B m
840to multiply by 1048576 (2\*(ss20\*(se), or
841.B g
842to multiply by 1073741824 (2\*(ss30\*(se); purists can use upper-case
843versions of these if they want. If
844.B .hard
845or
846.B .soft
847was specified, only the hard or soft limit is set; otherwise both are
848set to the same value. Only the superuser can raise the hard limit.
849The soft limit cannot be set above the hard limit.
333c51f4 850.OE
851.OS "Exec options"
667fb920 852.B exec.env.clear
333c51f4 853.OD
667fb920 854Clears the program's environment.
333c51f4 855.OE
667fb920 856.PP
857.B exec.env.unset
858.I var
333c51f4 859.OD
667fb920 860Removes
861.I var
862from the program's environment. It is not an error if no variable named
863.I var
864exists.
333c51f4 865.OE
866.OS "Exec options"
667fb920 867.BR exec.env. [ set ]
868.I var
869.RB [ = ]
870.I value
333c51f4 871.OD
96bc31ba 872Assigns the variable
667fb920 873.I var
874the value
875.I value
876in the program's environment, possibly replacing the existing value.
877The
878.B set
879may be omitted if the
880.B env
881qualifier is present.
333c51f4 882.OE
667fb920 883.PP
884Note that environment variable modifications are performed in order,
885global modifications before local ones.
886.
887.SS "The `socket' source and target types"
888The
889.B socket
890source and target provide access to network services. Support is
891currently provided for TCP/IP and Unix-domain sockets, although other
892address types can be added with reasonable ease.
893.PP
894The syntax for socket sources and targets is:
333c51f4 895.GS "Socket source and target"
667fb920 896.ll +8i
897.I source
898::=
899.I socket-source
10a454ad 900.br
667fb920 901.I target
902::=
903.I socket-target
904.br
905.I socket-source
906::=
907.RB [ socket [ . ]]
908.RB [[ : ] \c
909.IR addr-type \c
910.RB [ : ]]
911.I source-addr
912.br
913.I socket-target
914::=
915.RB [ socket [ . ]]
916.RB [[ : ] \c
917.IR addr-type \c
918.RB [ : ]]
919.I target-addr
920.ll -8i
333c51f4 921.GE
667fb920 922The syntax of the source and target addresses depend on the address
923types, which are described below. The default address type, if no
924.I addr-type
925is given, is
926.BR inet .
927.PP
928Socket sources support options; socket targets do not. The source
929options provided are:
333c51f4 930.OS "Socket options"
667fb920 931.B socket.conn
932.RB [ = ]
d857515e 933.IR number | \c
934.BR unlimited | one-shot
333c51f4 935.OD
d857515e 936Controls the behaviour of the source when it receives connections. A
667fb920 937.I number
d857515e 938limits the number of simultaneous connections. The value
939.B unlimited
940(or
941.BR infinite )
942removes any limit on the number of connections possible. The value
943.B one-shot
944will remove the socket source after a single successful connection.
945(Connections refused by access control systems don't count here.)
946The default is to apply a limit of 256 concurrent connections. Use of
947the
948.B unlimited
949option is not recommended.
333c51f4 950.OE
951.OS "Socket options"
667fb920 952.B socket.logging
953.RB [ = ]
954.BR yes | no
333c51f4 955.OD
667fb920 956Whether to log incoming connections. If
957.B yes
958(the default) incoming connections are logged, together with information
959about the client (where available) and whether the connection was
960accepted or refused. If
961.BR no ,
962log messages are not generated.
333c51f4 963.OE
667fb920 964.PP
965Address types also provide their own options.
966.
967.SS "The `inet' socket address type"
968The
969.B inet
970address type provides access to TCP ports. The
971.B inet
972source and target addresses have the following syntax:
333c51f4 973.GS "Socket source and target"
667fb920 974.I inet-source-addr
10a454ad 975::=
10a454ad 976.RB [ port ]
977.I port
667fb920 978.br
979.I inet-target-addr
980::=
981.I address
10a454ad 982.RB [ : ]
983.I port
10a454ad 984.br
667fb920 985.I address
10a454ad 986::=
667fb920 987.I addr-elt
988|
989.I address
990.I addr-elt
10a454ad 991.br
667fb920 992.I addr-elt
10a454ad 993::=
667fb920 994.B .
10a454ad 995|
667fb920 996.I word
333c51f4 997.GE
667fb920 998A
999.I port
1000may be given as a port number or a service name from the
1001.B /etc/services
1002file (or YP map if you do that sort of thing). A
1003.B hostname
1004may be a textual hostname or a numerical IP address.
1005.PP
1006The
1007.B inet
1008source address accepts the following options:
333c51f4 1009.OS "Socket options"
667fb920 1010.BR socket.inet. [ allow | deny ]
10a454ad 1011.RB [ from ]
667fb920 1012.I address
10a454ad 1013.RB [ /
667fb920 1014.IR address ]
333c51f4 1015.OD
667fb920 1016Adds an entry to the source's access control list. If only one
1017.I address
1018is given, the entry applies only to that address; if two are given, the
1019first is a network address and the second is a netmask either in
1020dotted-quad format or a simple number of bits (e.g.,
1021.B /255.255.255.192
1022and
1023.B /26
1024mean the same), and the entry applies to any address which, when masked
1025by the netmask, is equal to the masked network address.
333c51f4 1026.OE
10a454ad 1027.PP
333c51f4 1028The access control rules are examined in the order: local entries first,
1029then global ones, each in the order given in the configuration file.
1030The first matching entry is used. If no entries match, the behaviour is
1031the
667fb920 1032.I opposite
1033of the last entry tried. If there are no entries defined, the default
1034is to allow all clients.
667fb920 1035.
1036.SS "The `unix' socket address type"
10a454ad 1037The
667fb920 1038.B unix
1039address type allows access to Unix-domain sockets. The syntax for
1040.B unix
1041source and target addresses is like this:
333c51f4 1042.GS "Socket source and target"
1043.I unix-source-addr
667fb920 1044::=
333c51f4 1045.I file-name
667fb920 1046.br
333c51f4 1047.I unix-target-addr
667fb920 1048::=
1049.I file-name
333c51f4 1050.GE
1051The following options are supported by the
1052.B unix
1053source address type:
1054.OS "Socket options"
1055.BR socket.unix.fattr. *
1056.OD
667fb920 1057The
1058.B unix
1059source address accepts
1060.B fattr
333c51f4 1061options to control the attributes of the socket file created.
1062.OE
1063.PP
1064Sockets are removed if
10a454ad 1065.B fw
667fb920 1066exits normally (which it will do if it runs out of sources or
1067connections, or if killed by SIGINT or SIGTERM).
1068.SH "EXAMPLES"
1069To forward the local port 25 to a main mail server:
1070.VS
1071from 25 to mailserv:25
1072.VE
1073To attach a fortune server to a Unix-domain socket:
1074.VS
1075from unix:/tmp/fortunes
1076to exec [/usr/games/fortune] { user nobody }
1077.VE
1078To fetch a fortune from the server:
1079.VS
1080from file stdin, stdout to unix:/tmp/fortunes
1081.VE
1082To emulate
1083.BR cat (1):
1084.VS
1085from stdin, null to null, stdout
1086.VE
1087.
1088.\"--------------------------------------------------------------------------
333c51f4 1089.SH "GRAMMAR SUMMARY"
1090.
1091.SS "Basic syntax"
1092.I file
1093::=
1094.I empty
1095|
1096.I file
1097.I stmt
1098.RB [ ; ]
1099.br
1100.I stmt
1101::=
1102.I option-stmt
1103|
1104.I fw-stmt
1105.br
1106.I fw-stmt
1107::=
1108.B fw
1109.I source
1110.I options
1111.RB [ to | \-> ]
1112.I target
1113.I options
1114.br
1115.I options
1116::=
1117.B {
1118.I option-seq
1119.B }
1120.br
1121.I option-seq
1122::=
1123.I empty
1124|
1125.I option-stmt
1126.RB [ ; ]
1127.I option-seq
1128.
1129.SS "Option syntax"
1130.I option-stmt
1131::=
1132.I q-option
1133.br
1134.I q-option
1135::=
1136.I option
1137.br
1138 |
1139.I prefix
1140.B .
1141.I q-option
1142.br
1143 |
1144.I prefix
1145.B {
1146.I option-seq
1147.B }
1148.br
1149.I prefix
1150::=
1151.I word
1152.
1153.SS "File source and target"
1154.I source
1155::=
1156.I file
1157.br
1158.I target
1159::=
1160.I file
1161.br
1162.I file
1163::=
1164.B file
1165.RB [ . ]
1166.I fspec
1167.RB [ ,
1168.IR fspec ]
1169.br
1170.I fspec
1171::=
1172.I fd-spec
1173|
1174.I name-spec
1175|
1176.I null-spec
1177.br
1178.I fd-spec
1179::=
1180.RB [[ : ] fd [ : ]]
1181.IR number \c
1182.RB | stdin | stdout
1183.br
1184.I name-spec
1185::=
1186.RB [[ : ] file [ : ]]
1187.I file-name
1188.br
1189.I file-name
1190::=
1191.I path-seq
1192|
1193.B [
1194.I path-seq
1195.B ]
1196.br
1197.I path-seq
1198::=
1199.I path-elt
1200|
1201.I path-seq
1202.I path-elt
1203.br
1204.I path-elt
1205::=
1206.B /
1207|
1208.I word
1209.br
1210.I null-spec
1211::=
1212.RB [ : ] null [ : ]
1213.
1214.SS "Exec source and target"
1215.I source
1216::=
1217.I exec
1218.br
1219.I target
1220::=
1221exec
1222.br
1223.I exec
1224::=
1225.BR exec
1226.RB [ . ]
1227.I cmd-spec
1228.br
1229.I cmd-spec
1230::=
1231.I shell-cmd
1232|
1233.RI [ prog-name ]
1234.B [
1235.I argv0
1236.I arg-seq
1237.B ]
1238.br
1239.I arg-seq
1240::=
1241.I word
1242|
1243.I arg-seq
1244.I word
1245.br
1246.I shell-cmd
1247::=
1248.I word
1249.br
1250.I argv0
1251::=
1252.I word
1253.
1254.SS "Socket source and target"
1255.ll +8i
1256.I source
1257::=
1258.I socket-source
1259.br
1260.I target
1261::=
1262.I socket-target
1263.br
1264.I socket-source
1265::=
1266.RB [ socket [ . ]]
1267.RB [[ : ] \c
1268.IR addr-type \c
1269.RB [ : ]]
1270.I source-addr
1271.br
1272.I socket-target
1273::=
1274.RB [ socket [ . ]]
1275.RB [[ : ] \c
1276.IR addr-type \c
1277.RB [ : ]]
1278.I target-addr
1279.ll -8i
1280.PP
1281.I inet-source-addr
1282::=
1283.RB [ port ]
1284.I port
1285.br
1286.I inet-target-addr
1287::=
1288.I address
1289.RB [ : ]
1290.I port
1291.br
1292.I address
1293::=
1294.I addr-elt
1295|
1296.I address
1297.I addr-elt
1298.br
1299.I addr-elt
1300::=
1301.B .
1302|
1303.I word
1304.PP
1305.I unix-source-addr
1306::=
1307.I file-name
1308.br
1309.I unix-target-addr
1310::=
1311.I file-name
1312.
1313.\"--------------------------------------------------------------------------
1314.SH "OPTION SUMMARY"
1315.
1316.SS "File attributes (`fattr')"
1317.IB prefix .fattr.mode
1318.RB [ = ]
1319.I mode
1320.br
1321.IB prefix .fattr.owner
1322.RB [ = ]
1323.I user
1324.br
1325.IB prefix .fattr.group
1326.RB [ = ]
1327.I group
1328.
1329.SS "File options"
1330.B file.create
1331.RB [ = ]
1332.BR yes | no
1333.br
1334.B file.open
1335.RB [ = ]
1336.BR no | truncate | append
1337.br
1338.BR file.fattr. *
1339.
1340.SS "Exec options"
1341.B exec.logging
1342.RB [ = ]
1343.BR yes | no
1344.br
1345.B exec.dir
1346.RB [ = ]
1347.I file-name
1348.br
1349.B exec.root
1350.RB [ = ]
1351.I file-name
1352.br
1353.B exec.user
1354.RB [ = ]
1355.I user
1356.br
1357.B exec.group
1358.RB [ = ]
1359.I group
1360.br
1361.BI exec.rlimit. limit \c
1362.RB [ .hard | .soft ]
1363.RB [ = ]
1364.I value
1365.br
1366.B exec.env.clear
1367.br
1368.B exec.env.unset
1369.I var
1370.br
1371.BR exec.env. [ set ]
1372.I var
1373.RB [ = ]
1374.I value
1375.
1376.SS "Socket options"
1377.B socket.conn
1378.RB [ = ]
d857515e 1379.IR number | \c
1380.BR unlimited | one-shot
333c51f4 1381.br
1382.B socket.logging
1383.RB [ = ]
1384.BR yes | no
1385.PP
1386.BR socket.inet. [ allow | deny ]
1387.RB [ from ]
1388.I address
1389.RB [ /
1390.IR address ]
1391.PP
1392.BR socket.unix.fattr. *
1393.
1394.\"--------------------------------------------------------------------------
10a454ad 1395.SH "BUGS"
667fb920 1396.
cdc917d3 1397The syntax for IP addresses and filenames is nasty.
10a454ad 1398.PP
d857515e 1399IPv6 is not supported yet. Because of
1400.BR fw 's
1401socket address architecture, it's probably not a major piece of work to
667fb920 1402add.
10a454ad 1403.PP
667fb920 1404Please inform me of any security problems you think you've identified in
1405this program. I take security very seriously, and I will fix security
1406holes as a matter of priority when I find out about them. I will be
1407annoyed if I have to read about problems on Bugtraq because they weren't
1408mailed to me first.
1409.
1410.\"--------------------------------------------------------------------------
10a454ad 1411.SH "AUTHOR"
667fb920 1412.
10a454ad 1413Mark Wooding, <mdw@nsict.org>
667fb920 1414.
1415.\"----- That's all, folks --------------------------------------------------