IP & Network

Banner-grab-перевірка сервера

Сканує, які сервіси (HTTP, FTP, SSH, SMTP) працюють на хості.

Про цей інструмент

Server check іде на крок далі за port scan. Ми підключаємось до фіксованого списку поширених сервісних портів — HTTP, HTTPS, SSH, FTP, SMTP, IMAP, POP3, DNS, MySQL, PostgreSQL, Redis, RDP — і читаємо те, що демон каже першим. Більшість текстових сервісів оголошують свій продукт і версію в першому рядку розмови; відкриті повертаються з реальним fingerprint, закриті — чесно, firewalled — таймаутять на 3 секундах.

Для кожного відкритого порту ми записуємо сирий banner, наш парсений вердикт про продукт (наприклад, nginx/1.25.3, OpenSSH_8.9p1) і час dial. HTTP та HTTPS пробуємо реальним HEAD /-запитом, щоб захопити заголовок Server, а не вгадувати з номера порту; HTTPS використовує TLS без перевірки сертифіката, тож self-signed dev-хости теж відповідають.

Що з цим можна робити

  • Побачити, що насправді відкрито. Порт може бути open у port scanner, але server-check скаже, який саме демон слухає — а це часто різниця між «очікувано» та «rogue».
  • Виявити застарілі версії за секунди. Якщо ваш nginx досі відповідає Server: nginx/1.18.0 після security advisory, у вас проблема CI/CD.
  • Підтвердити зміну hardening. Затягнули ServerTokens на Apache або поставили server_tokens off на nginx? Перезапуск має показати тільки nginx або Apache без версії — доказ, що директива застосована.

Як читати результат

«Open + banner» — золотий випадок: сервіс заговорив, ми його впізнали. «Open + no banner» — нормально для бінарних протоколів (RDP, handshake MySQL, startup PostgreSQL); ми повідомляємо, що порт доступний, але без fingerprint без знання wire-формату. «Closed» означає, що ядро надіслало RST — сервіс не запущено. «Filtered» — firewall з'їв SYN; багато з цього навмисне (closed-source admin VPN), деяке вказує на misconfig. Результати кешуються 15 хвилин на хост.

Часті запитання

Чим це відрізняється від port checker?

Port checker лише запитує: «чи завершується TCP-handshake?». Server check іде далі: робить реальний banner-grab — читає привітання SSH/FTP/SMTP/POP3/IMAP і реальний HEAD-запит для HTTP/HTTPS — тож може назвати продукт і (коли не приховано) версію. Port checker швидший для довгого списку нестандартних портів; server check — потрібний інструмент, коли треба знати, що на кожному порту, а не лише що щось є.

Чому деякі відкриті порти без banner?

Бінарні протоколи — RDP, pre-auth handshake MySQL, startup PostgreSQL, raw Redis без RESP-привітання — не шлють людино-читаний рядок при connect. Ми позначаємо їх як open без fingerprint. Конфігурації, що приховують banner (Apache ServerTokens Prod, nginx server_tokens off), аналогічно показуються як «open, only product, no version».

Чи підтримуються приватні IP?

Ні. Приватні діапазони RFC 1918, loopback, link-local (169.254/16), CGN (100.64/10) та cloud-metadata endpoints відхиляються — та сама SSRF-політика. Server check для публічно доступних хостів. Для аудиту внутрішнього хоста запускайте banner-grab з вашої мережі.

Чому HTTPS показується навіть із поганим сертифікатом?

Ми навмисно вимикаємо перевірку сертифіката. Мета перевірки — дізнатись, що на порту, а не валідувати довіру; багато dev і self-signed хостів не мають валідного публічного chain, але це легітимні цілі. Для вердикту довіри запустіть SSL Checker — він робить повну валідацію chain, expiry та issuer.