the djb way

services, services!


telnetd


Protocol: TCP
Standard Port: 23

The telnetd daemon is generally considered insecure for today's hostile network environments. Not only has the daemon been the subject of many exploits, but all traffic between the client and server is unencrypted and visible to packet sniffers. For these reasons, sshd, the secure shell, is recommended instead of telnet. (We describe a daemontools setup for sshd here.)

There are occasions when a telnet server may still be desired, however. Within a heterogenous local network, for example, many common desktop operating systems are not supplied with a SSH client as standard equipment, yet they do include a telnet client. For the harried system administrator, then, it may be convenient to enable telnet connections to a server from some other workstations in the building.

telnetd is conventionally run by inetd. It is very easy to convert to a /service.

First, create the run script directories for the telnetd service:

# mkdir -p /var/svc.d/telnetd/log

Then the daemontools run script for /var/svc.d/telnetd/run:


#!/bin/sh
# telnetd/run
CONLIMIT=19
TELNETD="/usr/libexec/telnetd"

exec 2>&1
echo "*** Starting telnetd service ..."
exec softlimit -m 3500000 \
  tcpserver -vr -l0 \
  -c ${CONLIMIT} \
  -x /etc/tcprules/telnet.cdb \
  0 telnet \
  ${TELNETD}

### that's all, folks!

The $TELNETD variable should be set to invoke the telnetd executable on your particular platform.

Here's the usual run script for the logger in /var/svc.d/telnetd/log/run:


#!/bin/sh
# telnetd/log/run
exec setuidgid multilog multilog t /var/multilog/telnetd

### that's all, folks!

Prepare the log directory in /var/multilog:

# mkdir -p /var/multilog/telnetd
# chown multilog:nofiles /var/multilog/telnetd

Set up whatever tcprules you want for access control in /etc/tcprules/telnet.rules:


# telnet.rules
127.:allow
# our trusted workstations:
192.168.0.13:allow
192.168.0.19:allow
:deny

Then compile the rules:

# (cd /etc/tcprules ; make telnet.cdb)

Link into /service:

# ln -s /var/svc.d/telnetd /service/telnetd

Test the service, see if you can make a telnet connection to localhost from the server itself. If there's a problem, do the usual trouble-shooting: look at the logs, make sure the run scripts are executable, the softlimit parameters are not too tight.

The telnetd service makes a good candidate to consider setting down by default:

# svc -d /service/telnetd
# touch /service/telnetd/down

Now the service will run only when you bring it up manually:

# svc -u /service/telnetd

Shut 'er down when you're done:

# svc -d /service/telnetd

Copyright © 2002, 2003, 2004, Wayne Marshall.
All rights reserved.

Last edit 2004.03.08, wcm.