Добавить в корзинуПозвонить
Найти в Дзене
ИТ разнообразно

Прекратите использовать Telnet для тестирования портов. Часть 6.

Когда теста открытого TCP-сокета недостаточно Простая проверка открытого TCP-порта не позволит определить, насколько работоспособен сервис. Сервер может принимать подключения, но могут существовать более скрытые проблемы. Например, можно проверить работу TLS веб-сервера и корректность цифровых сертификатов: $ sudo dnf install -y openssl.x86_64 $ openssl s_client -tls1_2 -connect solomon.stupidzombie.com:443 CONNECTED(00000003) depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1 verify return:1 depth=1 C = US, O = Let's Encrypt, CN = R3 verify return:1 depth=0 CN = solomon.stupidzombie.com verify error:num=10:certificate has expired notAfter=Mar 11 14:38:06 2023 GMT verify return:1 depth=0 CN = solomon.stupidzombie.com notAfter=Mar 11 14:38:06 2023 GMT verify return:1 --- ... В примере выше, подключение через сокет работало, но срок действия SSL-сертификата истёк. Вот ещё один способ протестировать тот же веб-сервер: $ curl --fail --verbose https://solomon.stupidzomb

Когда теста открытого TCP-сокета недостаточно

Простая проверка открытого TCP-порта не позволит определить, насколько работоспособен сервис. Сервер может принимать подключения, но могут существовать более скрытые проблемы. Например, можно проверить работу TLS веб-сервера и корректность цифровых сертификатов:

$ sudo dnf install -y openssl.x86_64
$ openssl s_client -tls1_2 -connect solomon.stupidzombie.com:443
CONNECTED(00000003)
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = solomon.stupidzombie.com
verify error:num=10:certificate has expired notAfter=Mar 11 14:38:06 2023 GMT
verify return:1
depth=0 CN = solomon.stupidzombie.com notAfter=Mar 11 14:38:06 2023 GMT
verify return:1
---
...

В примере выше, подключение через сокет работало, но срок действия SSL-сертификата истёк.

Вот ещё один способ протестировать тот же веб-сервер:

$ curl --fail --verbose https://solomon.stupidzombie.com:443*
Trying 132.145.176.191:443...
* Connected to solomon.stupidzombie.com (132.145.176.191) port 443 (#0)
* ALPN: offers h2
* ALPN: offers http/1.1
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
* CApath: none
* TLSv1.0 (OUT), TLS header, Certificate Status (22):
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS header, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS header, Finished (20):
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.2 (IN), TLS header, Supplemental data (23):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS header, Unknown (21):
* TLSv1.3 (OUT), TLS alert, certificate expired (557):
* SSL certificate problem: certificate has expired
* Closing connection 0
curl: (60) SSL certificate problem: certificate has expired More details here: https://curl.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.

На этот раз curl указывает, что срок действия сертификата истек. Веб-сервер работает должным образом, но существует проблема с цифровыми сертификатами.

Однако, не все HTTP-приложения тестируются тем же путём. Посмотрите, как Grafana может сказать вам, всё ли в порядке:

$ curl --fail --silent \
http://raspberrypi:3000/api/health && \
printf "\nLook, I'm OK\n"
{
"commit": "21c1d14e91",
"database": "ok",
"version": "9.3.2"
}
Look, I'm OK

Или база данных InfluxDB:

$ curl --fail http://raspberrypi:8086/ping && \
printf "Look, I'm OK"
Look, I'm OK

Вот приятный сюрприз для вас: Nmap также может вызывать сценарии для выполнения высокоуровневых проверок таких приложений, как веб-серверы. В приведённом ниже примере используется http-fetch для получения файлов с серверов во время теста:

$ nmap -p443 -PS443 --open --script http-fetch \
--script-args \
'maxpagecount=1,destination=/tmp/files' solomon.stupidzombie.com
Starting Nmap 7.93 ( https://nmap.org ) at 2023-03-29 20:48 EDT
Nmap scan report for solomon.stupidzombie.com (132.145.176.191)
Host is up (0.023s latency).
PORT STATE SERVICE
443/tcp open https
|_http-fetch: Successfully Downloaded Everything At: /tmp/files/132.145.176.191/443/
Nmap done: 1 IP address (1 host up) scanned in 0.62 seconds
$ find /tmp/files/132.145.176.191/443/
/tmp/files/132.145.176.191/443/
/tmp/files/132.145.176.191/443/index.html

Как насчёт базы данных MySQL или сервера IMAP? Как видите, существует много способов решить эту проблему.

Перевод с некоторыми авторскими заголовками.

Автор оригинала: Jose Vicente Nunez (Sudoer).