Шукаєте telnet на RHEL 8? Спробуйте nc

Telnet — це мережевий протокол, який використовується для віддаленого доступу до комп’ютера та забезпечує двосторонній текстовий зв’язок. Отже, вам потрібен сервер і клієнт Telnet, щоб спілкуватися один з одним.

Telnet — одна з популярних утиліт Linux/Windows, яка вже давно виконує свою функцію.

Основна проблема telnet у сучасних системах полягає в тому, що він не є безпечним. Уся комунікація в telnet відбувається у вигляді звичайного тексту, і весь мережевий трафік незашифрований. По суті, будь-хто з належним доступом і інструментами може стежити за мережевим трафіком, щоб прочитати цей трафік. Таким чином, більшість сучасних операційних систем Linux не мають попередньо встановленого telnet, а інші рекомендують не використовувати його.

З появою SSH або протоколу Secure Shell, який є більш ніж зашифрованою заміною telnet, використання telnet за призначенням давно застаріло. Але існує альтернативне використання telnet, яким досі користуються багато системних адміністраторів і технічних ентузіастів, тобто для перевірки підключення віддалених портів TCP.

За допомогою команди telnet можна просто перевірити, чи віддалений TCP-порт слухає та відповідає належним чином. У наведеному нижче фрагменті показано, як ми можемо перевірити, чи працює google.com, перевіривши з’єднання 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.
$

TCP-порт, який не відкритий або недоступний, під час перевірки за допомогою telnet поводитиметься, як показано нижче:

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

Це полегшує усунення простих проблем з підключенням до мережі в поєднанні з командами ping, traceroute або tracepath, netstat тощо.

Якщо ви використовуєте RHEL 8 (або навіть старіші версії RHEL/CentOS), у вас є можливість використовувати nc (або Ncat або Network Connector), який підтримує багато опцій, пов’язаних з діагностикою мережі. Ми обговоримо, як встановити та використовувати цей інструмент на RHEL8 та подібних системах.

Що таке nc?

nc (або Ncat) — популярний інструмент командного рядка загального призначення для читання, запису, перенаправлення та шифрування даних у мережі. Спочатку створений для проекту nmap, тепер доступно кілька реалізацій Netcat. Він працює як з TCP, так і з UDP через IPv4 і IPv6 і забезпечує безмежні потенційні випадки використання.

Нижче наведено деякі з основних функцій утиліти nc:

  • Можливість зв’язувати котів разом
  • Перенаправлення портів TCP, UDP і SCTP на інші сайти
  • Шифруйте зв’язок із підтримкою SSL
  • Підтримка проксі через SOCK4/5 або HTTP проксі (включаючи автентифікацію)
  • Підтримує кілька платформ, включаючи Windows, Linux і macOS
  Як використовувати функцію розділення екрана в Excel

Встановлення nc

nc доступний як частина репозиторіїв за замовчуванням у системах RHEL. Щоб установити його в системі RHEL 7, просто виконайте наведену нижче команду на терміналі:

$ sudo yum install -y nc

Для системи RHEL 8 ви можете використовувати dnf як:

$ sudo dnf install -y nc

Перевірте підключення TCP

Хоча nc пропонує безліч функцій, які підтримують низку варіантів використання в різних програмах, одна з поширених – це під час усунення несправностей мережі замість telnet.

nc може показати, чи можна досягти порту TCP. Ось синтаксис:

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

Як приклад, якщо я хочу перевірити, чи можу я отримати доступ до techukraine.net через http або https. Я можу перевірити це за допомогою nc, як показано нижче (порт 80 призначений для http, а 443 – для https):

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

Подібним чином, недоступний або заблокований порт відображатиме такі результати (кілька адрес перевіряються, оскільки techukraine.net DNS вказує на кілька IP-адрес):

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

Перевірте підключення UDP

telnet може перевіряти зв’язок лише з віддаленим портом TCP, тоді як nc дозволяє перевіряти підключення TCP і UDP.

nc може просто надсилати UDP-пакети замість пакетів TCP за замовчуванням, використовуючи:

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

Але UDP — це протокол без сеансів, на відміну від TCP, тому ви не можете підтвердити наскрізне з’єднання UDP у всіх можливих сценаріях, просто надсилаючи пакети UDP на одному кінці, якщо процес прослуховування на віддаленому кінці не надсилає деяку відповідь, nc не зможе визначити, чи досяг надісланий пакет адресата чи ні. Але nc пропонує альтернативу для визначення наскрізного підключення UDP шляхом запуску UDP-слухача, припускаючи, що у вас є належний доступ до CLI на віддаленому сервері.

  10 Polygon (MATIC) NFT Marketplaces для купівлі/продажу

Отже, якщо припустити, що вам потрібно перевірити з’єднання UDP між двома хостами Linux для DNS за допомогою nc, простим способом зробити це буде запустити сервер nc, який прослуховує необхідний порт:

$ sudo nc -ul <Port>

Для DNS нам потрібно перевірити порт 53, який зробить команду вище такою:

$ nc -ul 53

На стороні клієнта вам потрібно запустити інший процес nc, який надсилає UDP-пакети на сервер:

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

Що зробить нашу команду:

$ nc -u <IP/DNS> 53

Враховуючи, що ніщо не блокує трафік UDP для порту 53 між цими двома машинами, все, що ви вводите та вводите на одній машині, має бути видимим на інших хостах, як двосторонній чат. Якщо ні, якийсь брандмауер блокує з’єднання між цими двома системами.

Модель сервера та клієнта з використанням nc працює бездоганно для таких простих перевірок підключення між хостами. Подібно до наведеної вище перевірки UDP, nc також може прослуховувати пакети TCP на заданому порту:

$ sudo nc -l <Port>

На стороні клієнта ви можете зазвичай надсилати TCP-пакети для перевірки підключення:

$ nc <IP/DNS> <Port>

Вищезазначений метод nc сервера/клієнта не потрібен у випадку підключень TCP (на відміну від UDP), оскільки це протокол, орієнтований на підключення, і працює з підтвердженнями. Будь-який процес прослуховування, що працює на TCP, безпосередньо відповідатиме на пакети nc TCP.

Резюме

У цій статті підсумовується, як утиліта nc виступає як пряма заміна telnet у сучасних системах Linux, що стосується перевірки підключення до порту, і надає кінцевому користувачеві набагато більше можливостей для діагностики та вирішення мережевих проблем.

Доступ до довідки nc можна отримати за допомогою команди 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
$

Щоб отримати докладнішу інформацію про команду nc, зверніться до її довідкової сторінки.

$ man nc