1.\" Copyright (c) 1985, 1991, 1993, 1994 2.\" The Regents of the University of California. All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. 9.\" 2. Redistributions in binary form must reproduce the above copyright 10.\" notice, this list of conditions and the following disclaimer in the 11.\" documentation and/or other materials provided with the distribution. 12.\" 3. All advertising materials mentioning features or use of this software 13.\" must display the following acknowledgement: 14.\" This product includes software developed by the University of 15.\" California, Berkeley and its contributors. 16.\" 4. Neither the name of the University nor the names of its contributors 17.\" may be used to endorse or promote products derived from this software 18.\" without specific prior written permission. 19.\" 20.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 21.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 24.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30.\" SUCH DAMAGE. 31.\" 32.\" from: @(#)inetd.8 8.3 (Berkeley) 4/13/94 33.\" $FreeBSD$ 34.\" 35.Dd February 7, 1996 36.Dt INETD 8 37.Os 38.Sh NAME 39.Nm inetd 40.Nd internet 41.Dq super-server 42.Sh SYNOPSIS 43.Nm 44.Op Fl d 45.Op Fl l 46.Op Fl w 47.Op Fl W 48.Op Fl c Ar maximum 49.Op Fl C Ar rate 50.Op Fl a Ar address | hostname 51.Op Fl p Ar filename 52.Op Fl R Ar rate 53.Op Ar configuration file 54.Sh DESCRIPTION 55The 56.Nm 57program 58should be run at boot time by 59.Pa /etc/rc 60(see 61.Xr rc 8 ) . 62It then listens for connections on certain 63internet sockets. When a connection is found on one 64of its sockets, it decides what service the socket 65corresponds to, and invokes a program to service the request. 66The server program is invoked with the service socket 67as its standard input, output and error descriptors. 68After the program is 69finished, 70.Nm 71continues to listen on the socket (except in some cases which 72will be described below). Essentially, 73.Nm 74allows running one daemon to invoke several others, 75reducing load on the system. 76.Pp 77The following options are available: 78.Bl -tag -width indent 79.It Fl d 80Turn on debugging. 81.It Fl l 82Turn on logging of successful connections. 83.It Fl w 84Turn on TCP Wrapping for external services. 85See the 86.Sx "IMPLEMENTATION NOTES" 87section for more information on TCP Wrappers support. 88.It Fl W 89Turn on TCP Wrapping for internal services which are built in to 90.Nm . 91.It Fl c Ar maximum 92Specify the default maximum number of 93simultaneous invocations of each service; 94the default is unlimited. 95May be overridden on a per-service basis with the "max-child" 96parameter. 97.It Fl C Ar rate 98Specify the default maximum number of times a service can be invoked 99from a single IP address in one minute; the default is unlimited. 100May be overridden on a per-service basis with the 101"max-connections-per-ip-per-minute" parameter. 102.It Fl R Ar rate 103Specify the maximum number of times a service can be invoked 104in one minute; the default is 256. 105A rate of 0 allows an unlimited number of invocations. 106.It Fl a 107Specify one specific IP address to bind to. 108Alternatively, a hostname can be specified, 109in which case the IPv4 or IPv6 address 110which corresponds to that hostname is used. 111Usually a hostname is specified when 112.Nm 113is run inside a 114.Xr jail 8 , 115in which case the hostname corresponds to the 116.Xr jail 8 117environment. 118.Pp 119When hostname specification is used 120and both IPv4 and IPv6 bindings are desired, 121one entry with the appropriate 122.Em protocol 123type for each binding 124is required for each service in 125.Pa /etc/inetd.conf . 126For example, 127a TCP-based service would need two entries, 128one using 129.Dq tcp4 130for the 131.Em protocol 132and the other using 133.Dq tcp6 . 134See the explanation of the 135.Pa /etc/inetd.conf 136.Em protocol 137field below. 138.It Fl p 139Specify an alternate file in which to store the process ID. 140.El 141.Pp 142Upon execution, 143.Nm 144reads its configuration information from a configuration 145file which, by default, is 146.Pa /etc/inetd.conf . 147There must be an entry for each field of the configuration 148file, with entries for each field separated by a tab or 149a space. Comments are denoted by a 150.Dq # 151at the beginning 152of a line. There must be an entry for each field. The 153fields of the configuration file are as follows: 154.Pp 155.Bd -unfilled -offset indent -compact 156service name 157socket type 158protocol 159{wait|nowait}[/max-child[/max-connections-per-ip-per-minute]] 160user[:group][/login-class] 161server program 162server program arguments 163.Ed 164.Pp 165To specify an 166.Tn "ONC RPC" Ns -based 167service, the entry would contain these fields: 168.Pp 169.Bd -unfilled -offset indent -compact 170service name/version 171socket type 172rpc/protocol 173user[:group][/login-class] 174server program 175server program arguments 176.Ed 177.Pp 178There are two types of services that 179.Nm 180can start: standard and TCPMUX. 181A standard service has a well-known port assigned to it; 182it may be a service that implements an official Internet standard or is a 183.Bx Ns -specific 184service. 185As described in 186.Tn RFC 1078 , 187TCPMUX services are nonstandard services that do not have a 188well-known port assigned to them. 189They are invoked from 190.Nm 191when a program connects to the 192.Dq tcpmux 193well-known port and specifies 194the service name. 195This feature is useful for adding locally-developed servers. 196TCPMUX requests are only accepted when the multiplexor service itself 197is enabled, above and beyond and specific TCPMUX-based servers; see the 198discussion of internal services below. 199.Pp 200The 201.Em service-name 202entry is the name of a valid service in 203the file 204.Pa /etc/services , 205or the specification of a 206.Ux 207domain socket (see below). 208For 209.Dq internal 210services (discussed below), the service 211name 212should 213be the official name of the service (that is, the first entry in 214.Pa /etc/services ) . 215When used to specify an 216.Tn "ONC RPC" Ns -based 217service, this field is a valid RPC service name in 218the file 219.Pa /etc/rpc . 220The part on the right of the 221.Dq / 222is the RPC version number. 223This 224can simply be a single numeric argument or a range of versions. 225A range is bounded by the low version to the high version - 226.Dq rusers/1-3 . 227For TCPMUX services, the value of the 228.Em service-name 229field consists of the string 230.Dq tcpmux 231followed by a slash and the 232locally-chosen service name. 233The service names listed in 234.Pa /etc/services 235and the name 236.Dq help 237are reserved. 238Try to choose unique names for your TCPMUX services by prefixing them with 239your organization's name and suffixing them with a version number. 240.Pp 241The 242.Em socket-type 243should be one of 244.Dq stream , 245.Dq dgram , 246.Dq raw , 247.Dq rdm , 248or 249.Dq seqpacket , 250depending on whether the socket is a stream, datagram, raw, 251reliably delivered message, or sequenced packet socket. 252TCPMUX services must use 253.Dq stream . 254.Pp 255The 256.Em protocol 257must be a valid protocol or 258.Dq unix . 259Examples are 260.Dq tcp 261or 262.Dq udp , 263both of which imply IPv4 for backward compatibility. 264The names 265.Dq tcp4 266and 267.Dq udp4 268specify IPv4 only. 269The names 270.Dq tcp6 271and 272.Dq udp6 273specify IPv6 only. 274The names 275.Dq tcp46 276and 277.Dq udp46 278specify that the entry accepts both IPv4 and IPv6 connections 279via a wildcard 280.Dv AF_INET6 281socket. 282If it is desired that the service is reachable via T/TCP, one should 283specify 284.Dq tcp/ttcp , 285which implies IPv4 for backward compatibility. 286The name 287.Dq tcp4/ttcp 288specifies IPv4 only, while 289.Dq tcp6/ttcp 290specifies IPv6 only. 291The name 292.Dq tcp46/ttcp 293specify that the entry accepts both IPv6 and IPv6 connections 294via a wildcard 295.Dv AF_INET6 296socket. 297Rpc based services 298(for which only IPv4 is supported at this time) 299are specified with the 300.Dq rpc/tcp 301or 302.Dq rpc/udp 303service type. 304TCPMUX services must use 305.Dq tcp , 306.Dq tcp4 , 307.Dq tcp6 308or 309.Dq tcp46 . 310.Pp 311The 312.Em wait/nowait 313entry specifies whether the server that is invoked by 314.Nm 315will take over 316the socket associated with the service access point, and thus whether 317.Nm 318should wait for the server to exit before listening for new service 319requests. 320Datagram servers must use 321.Dq wait , 322as they are always invoked with the original datagram socket bound 323to the specified service address. 324These servers must read at least one datagram from the socket 325before exiting. 326If a datagram server connects 327to its peer, freeing the socket so 328.Nm 329can receive further messages on the socket, it is said to be 330a 331.Dq multi-threaded 332server; 333it should read one datagram from the socket and create a new socket 334connected to the peer. 335It should fork, and the parent should then exit 336to allow 337.Nm 338to check for new service requests to spawn new servers. 339Datagram servers which process all incoming datagrams 340on a socket and eventually time out are said to be 341.Dq single-threaded . 342.Xr Comsat 8 , 343.Pq Xr biff 1 344and 345.Xr talkd 8 346are both examples of the latter type of 347datagram server. 348.Xr Tftpd 8 349is an example of a multi-threaded datagram server. 350.Pp 351Servers using stream sockets generally are multi-threaded and 352use the 353.Dq nowait 354entry. 355Connection requests for these services are accepted by 356.Nm , 357and the server is given only the newly-accepted socket connected 358to a client of the service. 359Most stream-based services operate in this manner. 360Stream-based servers that use 361.Dq wait 362are started with the listening service socket, and must accept 363at least one connection request before exiting. 364Such a server would normally accept and process incoming connection 365requests until a timeout. 366TCPMUX services must use 367.Dq nowait . 368.Pp 369The maximum number of outstanding child processes (or 370.Dq threads ) 371for a 372.Dq nowait 373service may be explicitly specified by appending a 374.Dq / 375followed by the number to the 376.Dq nowait 377keyword. 378Normally 379(or if a value of zero is specified) there is no maximum. 380Otherwise, 381once the maximum is reached, further connection attempts will be 382queued up until an existing child process exits. 383This also works 384in the case of 385.Dq wait 386mode, although a value other than one (the 387default) might not make sense in some cases. 388You can also specify the maximum number of connections per minute 389for a given IP address by appending 390a 391.Dq / 392followed by the number to the maximum number of 393outstanding child processes. 394Once the maximum is reached, further 395connections from this IP address will be dropped until the end of the 396minute. 397.Pp 398The 399.Em user 400entry should contain the user name of the user as whom the server 401should run. This allows for servers to be given less permission 402than root. 403Optional 404.Em group 405part separated by 406.Dq \&: 407allows to specify group name different 408than default group for this user. 409Optional 410.Em login-class 411part separated by 412.Dq / 413allows to specify login class different 414than default 415.Dq daemon 416login class. 417.Pp 418The 419.Em server-program 420entry should contain the pathname of the program which is to be 421executed by 422.Nm 423when a request is found on its socket. If 424.Nm 425provides this service internally, this entry should 426be 427.Dq internal . 428.Pp 429The 430.Em server program arguments 431should be just as arguments 432normally are, starting with argv[0], which is the name of 433the program. If the service is provided internally, the 434.Em service-name 435of the service (and any arguments to it) or the word 436.Dq internal 437should take the place of this entry. 438.Pp 439Currently, the only internal service to take arguments is 440.Dq auth . 441Without options, the service will always return 442.Dq ERROR\ : HIDDEN-USER . 443The available arguments to this service that alter its behavior are: 444.Bl -tag -width indent 445.It Fl d Ar fallback 446Provide a 447.Ar fallback 448username. 449If the real 450.Dq auth 451service is enabled 452(with the 453.Fl r 454option discussed below), 455return this username instead of an error 456when lookups fail 457for either socket credentials or the username. 458If the real 459.Dq auth 460service is disabled, 461return this username for every request. 462This is primarily useful when running this service on a NAT machine. 463.It Fl g 464Instead of returning 465the user's name to the ident requester, 466report a 467username made up of random alphanumeric characters, 468e.g.\& 469.Dq c0c993 . 470The 471.Fl g 472flag overrides not only the user names, 473but also any fallback name, 474.Pa .fakeid 475or 476.Pa .noident 477files. 478.It Fl t Xo 479.Ar sec Ns Op . Ns Ar usec 480.Xc 481Specify a timeout for the service. 482The default timeout is 10.0 seconds. 483.It Fl r 484Offer a real 485.Dq auth 486service, as per RFC 1413. 487All the remaining flags apply only in this case. 488.It Fl i 489Return numeric user IDs instead of usernames. 490.It Fl f 491If the file 492.Pa .fakeid 493exists in the home directory of the identified user, report the username 494found in that file instead of the real username. 495If the username found in 496.Pa .fakeid 497is that of an existing user, 498then the real username is reported. 499If the 500.Fl i 501flag is also given then the username in 502.Pa .fakeid 503is checked against existing user IDs instead. 504.It Fl F 505same as 506.Fl f 507but without the restriction that the username in 508.Pa .fakeid 509must not match an existing user. 510.It Fl n 511If the file 512.Pa .noident 513exists in the home directory of the identified user, return 514.Dq ERROR\ : HIDDEN-USER . 515This overrides any 516.Pa fakeid 517file which might exist. 518.It Fl o Ar osname 519Use 520.Ar osname 521instead of the name of the system as reported by 522.Xr uname 3 . 523.El 524.Pp 525The 526.Nm 527program 528also provides several other 529.Dq trivial 530services internally by use of 531routines within itself. These services are 532.Dq echo , 533.Dq discard , 534.Dq chargen 535(character generator), 536.Dq daytime 537(human readable time), and 538.Dq time 539(machine readable time, in the form of the number of seconds since 540midnight, January 1, 1900). All of these services are available in 541both TCP and UDP versions; the UDP versions will refuse service if the 542request specifies a reply port corresponding to any internal service. 543(This is done as a defense against looping attacks; the remote IP address 544is logged.) 545For details of these services, consult the 546appropriate 547.Tn RFC 548document. 549.Pp 550The TCPMUX-demultiplexing service is also implemented as an internal service. 551For any TCPMUX-based service to function, the following line must be included 552in 553.Pa inetd.conf : 554.Bd -literal -offset indent 555tcpmux stream tcp nowait root internal 556.Ed 557.Pp 558When given the 559.Fl l 560option 561.Nm 562will log an entry to syslog each time a connection is accepted, noting the 563service selected and the IP-number of the remote requester if available. 564Unless otherwise specified in the configuration file, 565and in the absence of the 566.Fl W 567and 568.Fl w 569options, 570.Nm 571will log to the 572.Dq daemon 573facility. 574.Pp 575The 576.Nm 577program 578rereads its configuration file when it receives a hangup signal, 579.Dv SIGHUP . 580Services may be added, deleted or modified when the configuration file 581is reread. 582Except when started in debugging mode, 583.Nm 584records its process ID in the file 585.Pa /var/run/inetd.pid 586to assist in reconfiguration. 587.Sh IMPLEMENTATION NOTES 588.Ss TCP Wrappers 589When given the 590.Fl w 591option, 592.Nm 593will wrap all services specified as 594.Dq stream nowait 595or 596.Dq dgram 597except for 598.Dq internal 599services. 600If the 601.Fl W 602option is given, such 603.Dq internal 604services will be wrapped. 605If both options are given, wrapping for both 606internal and external services will be enabled. 607Either wrapping option 608will cause failed connections to be logged to the 609.Dq auth 610syslog facility. 611Adding the 612.Fl l 613flag to the wrapping options will include successful connections in the 614logging to the 615.Dq auth 616facility. 617.Pp 618Note that 619.Nm 620only wraps requests for a 621.Dq wait 622service while no servers are available to service requests. 623Once a 624connection to such a service has been allowed, 625.Nm 626has no control 627over subsequent connections to the service until no more servers 628are left listening for connection requests. 629.Pp 630When wrapping is enabled, the 631.Pa tcpd 632daemon is not required, as that functionality is builtin. 633For more information on TCP Wrappers, see the relevant documentation 634.Pq Xr hosts_access 5 . 635When reading that document, keep in mind that 636.Dq internal 637services have no associated daemon name. 638Therefore, the service name 639as specified in 640.Pa inetd.conf 641should be used as the daemon name for 642.Dq internal 643services. 644.Ss TCPMUX 645.Tn RFC 1078 646describes the TCPMUX protocol: 647``A TCP client connects to a foreign host on TCP port 1. It sends the 648service name followed by a carriage-return line-feed <CRLF>. The 649service name is never case sensitive. The server replies with a 650single character indicating positive (+) or negative (\-) 651acknowledgment, immediately followed by an optional message of 652explanation, terminated with a <CRLF>. If the reply was positive, 653the selected protocol begins; otherwise the connection is closed.'' 654The program is passed the TCP connection as file descriptors 0 and 1. 655.Pp 656If the TCPMUX service name begins with a 657.Dq + , 658.Nm 659returns the positive reply for the program. 660This allows you to invoke programs that use stdin/stdout 661without putting any special server code in them. 662.Pp 663The special service name 664.Dq help 665causes 666.Nm 667to list TCPMUX services in 668.Pa inetd.conf . 669.Ss IPsec 670The implementation includes a tiny hack 671to support IPsec policy settings for each socket. 672A special form of comment line, starting with 673.Dq Li #@ , 674is interpreted as a policy specifier. 675Everything after the 676.Dq Li #@ 677will be used as an IPsec policy string, 678as described in 679.Xr ipsec_set_policy 3 . 680Each 681policy specifier is applied to all the following lines in 682.Pa inetd.conf 683until the next policy specifier. 684An empty policy specifier resets the IPsec policy. 685.Pp 686If an invalid IPsec policy specifier appears in 687.Pa inetd.conf , 688.Nm 689will provide an error message via the 690.Xr syslog 3 691interface and abort execution. 692.Ss Ux Domain Sockets 693In addition to running services on IP sockets, 694.Nm 695can also manage 696.Ux 697domain sockets. 698To do this you specify a 699.Em protocol 700of 701.Dq unix 702and specify the 703.Ux 704domain socket as the 705.Em service-name . 706The 707.Em service-type 708may be 709.Dq stream 710or 711.Dq dgram . 712The specification of the socket must be 713an absolute path name, 714optionally prefixed by an owner and mode 715of the form 716.Em :user:group:mode: . 717The specification: 718.Pp 719.Dl ":news:daemon:220:/var/run/sock" 720.Pp 721creates a socket owned 722by user 723.Dq news 724in group 725.Dq daemon 726with permissions allowing only that user and group to connect. 727The default owner is the user that 728.Nm 729is running as. 730The default mode only allows the socket's owner to connect. 731.Pp 732.Sy WARNING : 733while creating 734.Ux 735domain socket, 736.Nm 737must change the ownership and permissions on the socket. 738This can only be done securely if 739the directory in which the socket is created 740is writable only by root. 741Do 742.Em NOT 743use 744.Nm 745to create sockets in world writable directories, 746such as 747.Pa /tmp , 748instead use 749.Pa /var/run 750or a similar directory. 751.Pp 752Internal services may be run on 753.Ux 754domain sockets, in the usual way. 755In this case 756the name of the internal service 757is determined using 758the last component of the socket's pathname. 759.Sh "FILES" 760.Bl -tag -width /var/run/inetd.pid -compact 761.It Pa /etc/inetd.conf 762configuration file 763.It Pa /etc/rpc 764translation of service names to RPC program numbers 765.It Pa /etc/services 766translation of service names to port numbers 767.It Pa /var/run/inetd.pid 768the pid of the currently running 769.Nm 770.El 771.Sh "EXAMPLES" 772Here are several example service entries for the various types of services: 773.Bd -literal 774ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l 775ntalk dgram udp wait root /usr/libexec/ntalkd ntalkd 776telnet stream tcp6 nowait root /usr/libexec/telnetd telnetd 777shell stream tcp46 nowait root /usr/libexec/rshd rshd 778tcpmux/+date stream tcp nowait guest /bin/date date 779tcpmux/phonebook stream tcp nowait guest /usr/local/bin/phonebook phonebook 780rstatd/1-3 dgram rpc/udp wait root /usr/libexec/rpc.rstatd rpc.rstatd 781/var/run/echo stream unix nowait root internal 782#@ ipsec ah/require 783chargen stream tcp nowait root internal 784#@ 785.Ed 786.Sh "ERROR MESSAGES" 787The 788.Nm 789server 790logs error messages using 791.Xr syslog 3 . 792Important error messages and their explanations are: 793.Pp 794.Bl -ohang -compact 795.It Xo 796.Ar service Ns / Ns Ar protocol 797.No "server failing (looping), service terminated." 798.Xc 799The number of requests for the specified service in the past minute 800exceeded the limit. 801The limit exists to prevent a broken program 802or a malicious user from swamping the system. 803This message may occur for several reasons: 804.Bl -enum -offset indent 805.It 806There are many hosts requesting the service within a short time period. 807.It 808A broken client program is requesting the service too frequently. 809.It 810A malicious user is running a program to invoke the service in 811a denial-of-service attack. 812.It 813The invoked service program has an error that causes clients 814to retry quickly. 815.El 816.Pp 817Use the 818.Fl R Ar rate 819option, 820as described above, to change the rate limit. 821Once the limit is reached, the service will be 822reenabled automatically in 10 minutes. 823.Pp 824.It Xo 825.Ar service Ns / Ns Ar protocol : 826.No \&No such user 827.Ar user , 828.No service ignored 829.Xc 830.It Xo 831.Ar service Ns / Ns Ar protocol : 832.No getpwnam : 833.Ar user : 834.No \&No such user 835.Xc 836No entry for 837.Ar user 838exists in the 839.Xr passwd 5 840database. 841The first message 842occurs when 843.Nm 844(re)reads the configuration file. 845The second message occurs when the 846service is invoked. 847.Pp 848.It Xo 849.Ar service : 850.No can't set uid 851.Ar uid 852.Xc 853.It Xo 854.Ar service : 855.No can't set gid 856.Ar gid 857.Xc 858The user or group ID for the entry's 859.Ar user 860field is invalid. 861.Pp 862.It "setsockopt(SO_PRIVSTATE): Operation not supported" 863The 864.Nm 865program attempted to renounce the privileged state associated with a 866socket but was unable to. 867.El 868.Sh SEE ALSO 869.Xr ipsec_set_policy 3 , 870.Xr hosts_access 5 , 871.Xr hosts_options 5 , 872.Xr login.conf 5 , 873.Xr passwd 5 , 874.Xr rpc 5 , 875.Xr services 5 , 876.Xr comsat 8 , 877.Xr fingerd 8 , 878.Xr ftpd 8 , 879.Xr rexecd 8 , 880.Xr rlogind 8 , 881.Xr rpcbind 8 , 882.Xr rshd 8 , 883.Xr telnetd 8 , 884.Xr tftpd 8 885.Rs 886.%A Michael C. St. Johns 887.%T Identification Protocol 888.%O RFC1413 889.Re 890.Sh HISTORY 891The 892.Nm 893command appeared in 894.Bx 4.3 . 895TCPMUX is based on code and documentation by Mark Lottor. 896Support for 897.Tn "ONC RPC" 898based services is modeled after that 899provided by 900.Tn SunOS 9014.1. 902The IPsec hack was contributed by the KAME project in 1999. 903The 904.Fx 905TCP Wrappers support first appeared in 906.Fx 3.2 . 907