Telnet er en nettverksprotokoll som benyttes for fjernstyring av en datamaskin og tillater toveis tekstbasert kommunikasjon. For å etablere en slik forbindelse, behøves en telnet-server og en klient som kan kommunisere med hverandre.
Telnet er et velkjent verktøy for Linux og Windows som har vært i bruk lenge.
En betydelig ulempe med telnet i moderne systemer er dens manglende sikkerhet. All kommunikasjon via telnet skjer i ren tekst, uten kryptering. Dette gjør at all nettverkstrafikk er sårbar for avlytting av uvedkommende med tilgang og de rette verktøyene. Derfor leveres de fleste moderne Linux-distribusjoner uten telnet forhåndsinstallert, og det anbefales generelt å unngå bruken av det.
Med innføringen av SSH (Secure Shell), som er en kryptert erstatning for telnet, har telnets primære bruksområde blitt ansett som utdatert. Likevel benytter mange systemadministratorer og teknologientusiaster telnet til å sjekke tilkoblingen til eksterne TCP-porter.
Ved hjelp av telnet kan man enkelt sjekke om en ekstern TCP-port lytter og svarer korrekt. Eksempelet nedenfor demonstrerer hvordan man kan sjekke om google.com er tilgjengelig ved å verifisere HTTP/HTTPS-tilkobling.
$ telnet google.com 80 Trying 142.250.183.206... Connected to google.com. Escape character is '^]'. ^] telnet> quit Connection closed. $ $ telnet google.com 443 Trying 142.250.183.206... Connected to google.com. Escape character is '^]'. ^] telnet> quit Connection closed. $
En TCP-port som ikke er åpen eller tilgjengelig vil reagere som vist under ved bruk av telnet:
$ telnet google.com 22 Trying 142.250.193.174... ^C $
Dette gjør det enkelt å feilsøke enkle nettverkstilkoblingsproblemer sammen med kommandoer som ping, traceroute/tracepath og netstat.
Dersom du bruker RHEL 8 (eller eldre versjoner av RHEL/CentOS), har du mulighet til å benytte nc (eller Ncat eller Network Connector), som tilbyr en rekke alternativer for nettverksdiagnostikk. Vi skal nå se på hvordan man installerer og bruker dette verktøyet på RHEL8 og lignende systemer.
Hva er nc?
nc (eller Ncat) er et allsidig kommandolinjeverktøy som brukes til å lese, skrive, omdirigere og kryptere data over et nettverk. Det ble opprinnelig utviklet for nmap-prosjektet, og det finnes nå flere implementeringer av Netcat tilgjengelig. Verktøyet fungerer med både TCP og UDP over IPv4 og IPv6, og har et bredt spekter av potensielle bruksområder.
Her er noen av de viktigste funksjonene til nc-verktøyet:
- Evne til å koble sammen flere prosesser
- Omdirigering av TCP-, UDP- og SCTP-porter til andre nettsteder
- Kryptert kommunikasjon med SSL-støtte
- Proxy-støtte via SOCKS4/5 eller HTTP-proxyer (inkludert autentisering)
- Støtte for flere plattformer, inkludert Windows, Linux og macOS
Installere nc
nc er inkludert i standardpakkelagrene for RHEL-systemer. For å installere det på et RHEL 7-system, bruk kommandoen nedenfor i terminalen:
$ sudo yum install -y nc
For RHEL 8-systemer, bruk dnf slik:
$ sudo dnf install -y nc
Sjekke TCP-tilkobling
Selv om nc tilbyr mange funksjoner for ulike applikasjoner, er en vanlig bruk å sjekke nettverkstilkoblinger, som et alternativ til telnet.
nc kan verifisere om en TCP-port er tilgjengelig. Her er syntaksen:
$ nc -vz <IP/DNS> <Port>
For eksempel, dersom du ønsker å kontrollere om tipsbilk.net er tilgjengelig via http eller https, kan du bruke nc som vist nedenfor (port 80 for http, port 443 for https):
$ nc -vz tipsbilk.net.com 80 Ncat: Version 7.70 ( https://nmap.org/ncat ) Ncat: Connected to 104.26.11.88:80. Ncat: 0 bytes sent, 0 bytes received in 0.02 seconds. $ $ nc -vz tipsbilk.net.com 443 Ncat: Version 7.70 ( https://nmap.org/ncat ) Ncat: Connected to 104.26.10.88:443. Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds. $
På samme måte vil en utilgjengelig eller blokkert port vise følgende utdata (flere adresser er sjekket da tipsbilk.net peker til flere IP-adresser):
$ nc -vz tipsbilk.net.com 22 Ncat: Version 7.70 ( https://nmap.org/ncat ) Ncat: Connection to 172.67.70.213 failed: Connection timed out. Ncat: Trying next address... Ncat: Connection to 104.26.11.88 failed: Connection timed out. Ncat: Trying next address... Ncat: Connection to 104.26.10.88 failed: Connection timed out. Ncat: Trying next address... Ncat: Connection to 2606:4700:20::681a:a58 failed: Network is unreachable. Ncat: Trying next address... Ncat: Connection to 2606:4700:20::681a:b58 failed: Network is unreachable. Ncat: Trying next address... Ncat: Network is unreachable. $ $ dig tipsbilk.net.com +short 104.26.10.88 172.67.70.213 104.26.11.88 $
Sjekke UDP-tilkobling
Telnet kan kun sjekke kommunikasjon med en ekstern TCP-port, mens nc gir mulighet til å verifisere både TCP- og UDP-tilkoblinger.
nc kan enkelt sende UDP-pakker i stedet for standard TCP-pakker ved å bruke:
$ nc -vzu <IP/DNS> <Port>
UDP er en sesjonsløs protokoll, i motsetning til TCP. Dette betyr at en ende-til-ende UDP-tilkobling ikke kan bekreftes i alle tilfeller ved å kun sende UDP-pakker fra en side. Med mindre lyttingsprosessen på den eksterne enden sender et svar, kan nc ikke vurdere om pakken har nådd sin destinasjon. nc tilbyr imidlertid et alternativ for å bekrefte ende-til-ende UDP-tilkobling ved å starte en UDP-lytter, forutsatt at du har tilgang til kommandolinjen på den eksterne serveren.
Dersom du skal verifisere UDP-tilkobling mellom to Linux-verter for DNS med nc, kan man starte nc-serverlytting på den nødvendige porten:
$ sudo nc -ul <Port>
For DNS må port 53 sjekkes. Kommandoen blir dermed:
$ nc -ul 53
På klientsiden må du starte en ny nc-prosess som sender UDP-pakker til serveren:
$ nc -u <IP/DNS> <Port>
Dette gir følgende kommando:
$ nc -u <IP/DNS> 53
Forutsatt at UDP-trafikk på port 53 ikke er blokkert mellom de to maskinene, vil det du skriver inn på den ene maskinen, være synlig på den andre som en toveis chat. Hvis ikke, blokkerer en brannmur tilkoblingen.
Server- og klientmodellen ved bruk av nc fungerer godt for denne type enkle tilkoblingskontroller mellom verter. I likhet med UDP-kontrollen ovenfor, kan nc også lytte etter TCP-pakker på en gitt port:
$ sudo nc -l <Port>
På klientsiden kan man sende TCP-pakker for å sjekke tilkoblingen:
$ nc <IP/DNS> <Port>
Server/klient nc-metoden er ikke nødvendig for TCP-tilkoblinger (i motsetning til UDP), da TCP er en tilkoblingsorientert protokoll som bruker bekreftelser. Alle lyttingsprosesser som jobber med TCP, vil svare direkte på nc TCP-pakker.
Oppsummering
Denne artikkelen viser hvordan nc-verktøyet fungerer som en direkte erstatning for telnet i moderne Linux-systemer for å sjekke porttilkoblinger, og gir brukeren større fleksibilitet for diagnostisering og løsning av nettverksproblemer.
nc-hjelp kan åpnes med kommandoen nc -h:
$ nc -h Ncat 7.70 ( https://nmap.org/ncat ) Usage: ncat [options] [hostname] [port] Options taking a time assume seconds. Append 'ms' for milliseconds, 's' for seconds, 'm' for minutes, or 'h' for hours (e.g. 500ms). -4 Use IPv4 only -6 Use IPv6 only -U, --unixsock Use Unix domain sockets only -C, --crlf Use CRLF for EOL sequence -c, --sh-exec <command> Executes the given command via /bin/sh -e, --exec <command> Executes the given command --lua-exec <filename> Executes the given Lua script -g hop1[,hop2,...] Loose source routing hop points (8 max) -G <n> Loose source routing hop pointer (4, 8, 12, ...) -m, --max-conns <n> Maximum <n> simultaneous connections -h, --help Display this help screen -d, --delay <time> Wait between read/writes -o, --output <filename> Dump session data to a file -x, --hex-dump <filename> Dump session data as hex to a file -i, --idle-timeout <time> Idle read/write timeout -p, --source-port port Specify source port to use -s, --source addr Specify source address to use (doesn't affect -l) -l, --listen Bind and listen for incoming connections -k, --keep-open Accept multiple connections in listen mode -n, --nodns Do not resolve hostnames via DNS -t, --telnet Answer Telnet negotiations -u, --udp Use UDP instead of default TCP --sctp Use SCTP instead of default TCP -v, --verbose Set verbosity level (can be used several times) -w, --wait <time> Connect timeout -z Zero-I/O mode, report connection status only --append-output Append rather than clobber specified output files --send-only Only send data, ignoring received; quit on EOF --recv-only Only receive data, never send anything --allow Allow only given hosts to connect to Ncat --allowfile A file of hosts allowed to connect to Ncat --deny Deny given hosts from connecting to Ncat --denyfile A file of hosts denied from connecting to Ncat --broker Enable Ncat's connection brokering mode --chat Start a simple Ncat chat server --proxy <addr[:port]> Specify address of host to proxy through --proxy-type <type> Specify proxy type ("http" or "socks4" or "socks5") --proxy-auth <auth> Authenticate with HTTP or SOCKS proxy server --ssl Connect or listen with SSL --ssl-cert Specify SSL certificate file (PEM) for listening --ssl-key Specify SSL private key (PEM) for listening --ssl-verify Verify trust and domain name of certificates --ssl-trustfile PEM file containing trusted SSL certificates --ssl-ciphers Cipherlist containing SSL ciphers to use --ssl-alpn ALPN protocol list to use. --version Display Ncat's version information and exit See the ncat(1) manpage for full options, descriptions and usage examples $
For mer detaljert informasjon om nc-kommandoen, se manualsiden.
$ man nc