Port 23 — Telnet
TCP well-known
What runs on port 23
Unencrypted remote terminal access, superseded by SSH decades ago.
Telnet sends everything as plain text, including the password, and has no host verification at all — there is no way to know you are talking to the machine you meant. It was superseded by SSH in the 1990s and survives mainly in network equipment and industrial controllers that were never updated. The one legitimate modern use is as a crude connectivity test: telnet host 25 to see whether a port answers, which is why the client is still installed even where the service is not.
Security considerations
Everything including the password is plain text on the wire. There is no safe way to expose this. If something still needs it, tunnel it.
Checking whether something is listening
# Linux / macOS — what is bound to the port
sudo lsof -i :23
sudo ss -lntp | grep :23
# Windows
netstat -ano | findstr :23
Get-NetTCPConnection -LocalPort 23
# is it reachable from outside?
nc -zv example.com 23
curl -v telnet://example.com:23
Freeing the port
# find the process, then stop it
sudo lsof -ti :23 | xargs kill # Linux / macOS
netstat -ano | findstr :23 # note the PID, then:
taskkill /PID <pid> /F # Windows
Should this port be open to the internet?
No. Port 23 should never be reachable from a public address. Bind it to localhost or a private network, and reach it through a VPN or bastion host if remote access is genuinely needed. Internet-wide scanners find newly exposed instances of this service within minutes.
Opening or blocking port 23
There is no blanket-allow rule on this page, because there is no case for one. Telnet on port 23 should be reachable from named addresses or not at all, so what follows restricts rather than opens:
# ufw — Debian, Ubuntu
sudo ufw allow from 10.0.0.0/8 to any port 23 proto tcp
sudo ufw deny 23/tcp # everything else
# firewalld — RHEL, Fedora, CentOS
sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.0.0.0/8 port port=23 protocol=tcp accept'
sudo firewall-cmd --reload
# iptables, if you are still there
sudo iptables -A INPUT -p tcp --dport 23 -s 10.0.0.0/8 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 23 -j DROP
# Windows
New-NetFirewallRule -DisplayName "Telnet 23" -Direction Inbound -Protocol TCP -LocalPort 23 -RemoteAddress 10.0.0.0/8 -Action Allow
Change 10.0.0.0/8 to whatever your private range actually is. A firewall rule is the second line: the first is binding the service to a private interface, because a service that only listens on 127.0.0.1 cannot be reached however the firewall is configured.
Quick reference
| Port | 23 |
| Protocol | TCP |
| Service | Telnet |
| Range | Well-known (0–1023) — binding requires root on Unix |
Frequently asked questions
What is port 23 used for?
Unencrypted remote terminal access, superseded by SSH decades ago.
Is it safe to open port 23?
Everything including the password is plain text on the wire. There is no safe way to expose this. If something still needs it, tunnel it.
How do I check if port 23 is open?
Locally, sudo lsof -i :23 on macOS or Linux, or netstat -ano | findstr :23 on Windows. From outside, nc -zv host 23 tells you whether anything answers.
Why do I get "address already in use" on port 23?
Another process is bound to it — often a previous run of your own program that did not exit cleanly. Find it with lsof -ti :23 and stop it, or configure your application to use a different port.
Can I change the port this service uses?
Almost always yes, in the service's configuration. Moving off a default port reduces automated scan noise, but it is obfuscation rather than security — a real attacker scans all 65,535.