The inetd(8) daemon is sometimes referred to as a Super-Server because it manages connections for many services. Instead of starting multiple applications, only the inetd service needs to be started. When a connection is received for a service that is managed by inetd, it determines which program the connection is destined for, spawns a process for that program, and delegates the program a socket. Using inetd for services that are not heavily used can reduce system load, when compared to running each daemon individually in stand-alone mode.
Primarily, inetd is used to spawn other daemons, but several trivial protocols are handled internally, such as chargen, auth, time, echo, discard, and daytime.
This section covers the basics of configuring inetd.
Configuration of inetd is
	done by editing /etc/inetd.conf.  Each
	line of this configuration file represents an application
	which can be started by inetd.  By
	default, every line starts with a comment
	(#), meaning that
	inetd is not listening for any
	applications.  To configure inetd
	to listen for an application's connections, remove the
	# at the beginning of the line for that
	application.
After saving your edits, configure
	inetd to start at system boot by
	editing /etc/rc.conf:
inetd_enable="YES"
To start inetd now, so that it listens for the service you configured, type:
#service inetd start
Once inetd is started, it needs
	to be notified whenever a modification is made to
	/etc/inetd.conf:
Typically, the default entry for an application does not
	need to be edited beyond removing the #.
	In some situations, it may be appropriate to edit the default
	entry.
As an example, this is the default entry for ftpd(8) over IPv4:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
The seven columns in an entry are as follows:
service-name
socket-type
protocol
{wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]
user[:group][/login-class]
server-program
server-program-argumentswhere:
The service name of the daemon to start.  It must
	      correspond to a service listed in
	      /etc/services.  This determines
	      which port inetd listens on
	      for incoming connections to that service.  When using a
	      custom service, it must first be added to
	      /etc/services.
Either stream,
	      dgram, raw, or
	      seqpacket.  Use
	      stream for TCP connections and
	      dgram for
	      UDP services.
Use one of the following protocol names:
| Protocol Name | Explanation | 
|---|---|
| tcp or tcp4 | TCP IPv4 | 
| udp or udp4 | UDP IPv4 | 
| tcp6 | TCP IPv6 | 
| udp6 | UDP IPv6 | 
| tcp46 | Both TCP IPv4 and IPv6 | 
| udp46 | Both UDP IPv4 and IPv6 | 
In this field, wait or
	      nowait must be specified.
	      max-child,
	      max-connections-per-ip-per-minute and
	      max-child-per-ip are optional.
wait|nowait indicates whether or
	      not the service is able to handle its own socket.
	      dgram socket types must use
	      wait while
	      stream daemons, which are usually
	      multi-threaded, should use nowait.
	      wait usually hands off multiple sockets
	      to a single daemon, while nowait spawns
	      a child daemon for each new socket.
The maximum number of child daemons
	      inetd may spawn is set by
	      max-child.  For example, to limit ten
	      instances of the daemon, place a /10
	      after nowait.  Specifying
	      /0 allows an unlimited number of
	      children.
max-connections-per-ip-per-minute
	      limits the number of connections from any particular
	      IP address per minute.  Once the
	      limit  is reached, further connections from this IP
	      address will be dropped until the end of the minute.
	      For example, a value of /10 would
	      limit any particular IP address to
	      ten connection attempts per minute.
	      max-child-per-ip limits the number of
	      child processes that can be started on behalf on any
	      single IP address at any moment.
	      These options can limit excessive resource consumption
	      and help to prevent Denial of Service attacks.
An example can be seen in the default settings for fingerd(8):
finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -k -s
The username the daemon
	      will run as.  Daemons typically run as
	      root,
	      daemon, or
	      nobody.
The full path to the daemon.  If the daemon is a
	      service provided by inetd
	      internally, use internal.
Used to specify any command arguments to be passed
	      to the daemon on invocation.  If the daemon is an
	      internal service, use
	      internal.
Like most server daemons, inetd
	has a number of options that can be used to modify its
	behavior.  By default, inetd is
	started with -wW -C 60.  These options
	enable TCP wrappers for all services, including internal
	services, and prevent any IP address from
	requesting any service more than 60 times per minute.
To change the default options which are passed to
	inetd, add an entry for
	inetd_flags in
	/etc/rc.conf.  If
	inetd is already running, restart
	it with service inetd restart.
The available rate limiting options are:
Specify the default maximum number of simultaneous
	      invocations of each service, where the default is
	      unlimited.  May be overridden on a per-service basis by
	      using max-child in
	      /etc/inetd.conf.
Specify the default maximum number of times a
	      service can be invoked from a single
	      IP address per minute.  May be
	      overridden on a per-service basis by using
	      max-connections-per-ip-per-minute in
	      /etc/inetd.conf.
Specify the maximum number of times a service can be
	      invoked in one minute, where the default is
	      256.  A rate of 0
	      allows an unlimited number.
Specify the maximum number of times a service can be
	      invoked from a single IP address at
	      any one time, where the default is unlimited.  May be
	      overridden on a per-service basis by using
	      max-child-per-ip in
	      /etc/inetd.conf.
Additional options are available. Refer to inetd(8) for the full list of options.
Many of the daemons which can be managed by
	inetd are not security-conscious.
	Some daemons, such as fingerd, can
	provide information that may be useful to an attacker.  Only
	enable the services which are needed and monitor the system
	for excessive connection attempts.
	max-connections-per-ip-per-minute,
	max-child and
	max-child-per-ip can be used to limit such
	attacks.
By default, TCP wrappers is enabled. Consult hosts_access(5) for more information on placing TCP restrictions on various inetd invoked daemons.
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
    documentation may be
    sent to <freebsd-questions@FreeBSD.org>.
    Send questions about this document to <freebsd-doc@FreeBSD.org>.