3.10. Restricting Access by Remote Hosts (xinetd with tcpd)
Problem
You want only particular remote hosts to access a TCP service via xinetd , when xinetd was not compiled with libwrap support.
Solution
Set up access control rules in /etc/hosts.allow and/or /etc/hosts.deny. For example, to permit telnet connections only from 192.168.1.100 and hosts in the example.com domain, add to /etc/hosts.allow:
in.telnetd : 192.168.1.100 in.telnetd : *.example.com in.telnetd : ALL : DENY
Then modify /etc/xinetd.conf or /etc/xinetd.d/servicename to invoke tcpd in place of your service:
Old /etc/xinetd.conf or /etc/xinetd.d/telnet: service telnet { ... flags = ... server = /usr/sbin/in.telnetd ... } New /etc/xinetd.conf or /etc/xinetd.d/telnet: service telnet { ... flags = ... NAMEINARGS server = /usr/sbin/tcpd server_args = /usr/sbin/in.telnetd ... }
Then reset xinetd so your changes take effect. [Recipe 3.3]
Discussion
This technique is only for the rare case when, for some reason, you don’t want to use xinetd’s built-in access control [Recipe 3.8] and your xinetd does not have libwrap support compiled in. It mirrors the original inetd method of access control using TCP-wrappers. [Recipe 3.11]
You must include the flag
NAMEINARGS
, which tells
xinetd to look in the
server_args
line to find the
service
executable name (in this case,
/usr/sbin/in.telnetd).
See Also
xinetd(8), hosts.allow(5), tcpd(8).
Get Linux Security Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.