2022-10-03 21:43 Doba čtení: 12 min

Hledáte telnet na RHEL 8? Zkuste nc

Protokol Telnet slouží jako síťový nástroj pro vzdálený přístup k počítači, umožňující obousměrnou textovou komunikaci. Pro správnou funkci je nutné mít k dispozici server Telnet a klientskou aplikaci.

Telnet je již delší dobu známý a používaný nástroj pro operační systémy Linux a Windows.

Hlavním nedostatkem protokolu Telnet v dnešním světě je jeho nezabezpečenost. Veškerá komunikace probíhá v nešifrovaném textu, což znamená, že síťový provoz může být snadno odposloucháván. Z tohoto důvodu většina moderních systémů Linux Telnet ve výchozím nastavení nenabízí a jeho používání se nedoporučuje.

S příchodem protokolu SSH (Secure Shell), který je bezpečnější alternativou s šifrováním, ztratil Telnet svůj původní význam. Nicméně, existuje alternativní využití, které někteří administrátoři a techničtí nadšenci stále využívají - kontrola dostupnosti vzdálených portů TCP.

Pomocí příkazu Telnet je možné snadno zjistit, zda vzdálený TCP port naslouchá a odpovídá na požadavky. Následující příklad ukazuje, jak lze ověřit, že google.com je aktivní a funguje, prostřednictvím kontroly připojení k HTTP/HTTPS.

$ 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.
$

Pokud je TCP port nedostupný, chování při kontrole pomocí Telnetu bude následující:

$ telnet google.com 22
Trying 142.250.193.174...
^C
$

Toto usnadňuje jednoduchou diagnostiku problémů s připojením k síti v kombinaci s příkazy jako ping, traceroute nebo tracepath, netstat atd.

V systémech RHEL 8 (i starších verzích RHEL/CentOS) je k dispozici nástroj nc (nebo Ncat, Network Connector), který nabízí pokročilé možnosti pro diagnostiku sítě. Podíváme se, jak tento nástroj nainstalovat a používat na RHEL8 a podobných systémech.

Co je nc?

nc (nebo Ncat) je populární, univerzální nástroj příkazové řádky, který slouží pro čtení, zápis, přesměrování a šifrování dat v síti. Původně byl vyvinut pro projekt nmap a dnes existuje několik implementací Netcat. Podporuje jak protokoly TCP, tak UDP, přes IPv4 a IPv6 a má široké možnosti využití.

Mezi hlavní funkce nástroje nc patří:

  • Možnost řetězení instancí ncat
  • Přesměrování portů TCP, UDP a SCTP na jiné adresy
  • Šifrování komunikace pomocí SSL
  • Podpora proxy serverů SOCKS4/5 nebo HTTP (včetně autentizace)
  • Kompatibilita s různými platformami, jako je Windows, Linux a macOS

Instalace nc

nc je součástí standardních repozitářů v systémech RHEL. Pro instalaci v RHEL 7 použijte následující příkaz v terminálu:

$ sudo yum install -y nc

Pro systém RHEL 8 použijte dnf:

$ sudo dnf install -y nc

Kontrola TCP připojení

nc nabízí mnoho funkcí pro různé účely, ale jedním z běžných je diagnostika síťových problémů jako náhrada za telnet.

nc dokáže ověřit dostupnost TCP portu. Zde je syntaxe:

$ nc -vz <IP/DNS> <Port>

Například, pokud chcete ověřit dostupnost etechblog.cz přes http nebo https, můžete použít nc, jak je uvedeno níže (port 80 pro http, 443 pro https):

$ nc -vz etechblog.cz.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 etechblog.cz.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.
$

Nedostupný nebo blokovaný port zobrazí výstup podobný následujícímu (testováno je více IP adres, protože DNS záznam etechblog.cz odkazuje na více IP adres):

$ nc -vz etechblog.cz.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 etechblog.cz.com +short
104.26.10.88
172.67.70.213
104.26.11.88
$

Kontrola UDP připojení

Telnet umožňuje kontrolovat pouze komunikaci s TCP porty, zatímco nc umožňuje ověřovat připojení jak přes TCP, tak UDP.

Pro odesílání UDP paketů místo výchozích TCP použijte:

$ nc -vzu <IP/DNS> <Port>

Vzhledem k tomu, že UDP je bezstavový protokol, nemůžete s jistotou potvrdit end-to-end UDP konektivitu pouhým odesláním UDP paketu, pokud proces na druhém konci neodešle odpověď. Nicméně nc nabízí alternativu spuštěním UDP posluchače, pokud máte přístup k příkazové řádce vzdáleného serveru.

Pro ověření UDP konektivity mezi dvěma hostiteli (např. pro DNS), můžete spustit nc server naslouchající na požadovaném portu:

$ sudo nc -ul <Port>

Pro DNS je to port 53, tedy:

$ nc -ul 53

Na straně klienta spusťte nc proces, který bude odesílat UDP pakety na server:

$ nc -u <IP/DNS> <Port>

Pro DNS tedy:

$ nc -u <IP/DNS> 53

Pokud nic neblokuje UDP provoz na portu 53, vše, co napíšete na jednom počítači, by mělo být viditelné na druhém jako obousměrný chat. Pokud tomu tak není, blokuje konektivitu firewall.

Tento server-klient model funguje pro jednoduché ověření konektivity mezi hostiteli. Podobně jako u UDP, může nc naslouchat TCP paketům na daném portu:

$ sudo nc -l <Port>

Na straně klienta pro odesílání paketů pro kontrolu TCP připojení:

$ nc <IP/DNS> <Port>

Výše uvedená metoda server/klient není nutná pro TCP, protože se jedná o protokol orientovaný na připojení s potvrzováním. Jakýkoliv naslouchací proces na TCP odpoví na pakety od nc.

Shrnutí

Tento článek popisuje, jak nc může nahradit Telnet v moderních systémech Linux, zejména pro kontrolu dostupnosti portů, a poskytuje uživateli rozsáhlé možnosti pro diagnostiku a řešení problémů se sítí.

Nápovědu pro nc získáte pomocí příkazu 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
$

Více informací o příkazu nc naleznete v manuálové stránce.

$ man nc
Petra Kovářová
Autor
Czechia

Sleduje mobilní technologie, Android/iOS a praktické návody pro uživatele.

Předchozí článek
Jak povolit/zakázat tmavý režim v prohlížeči Google Chrome
Další článek
Zlepšete svůj spánek pomocí těchto 20 aplikací a gadgetů