Add web service inspection report

This commit is contained in:
dido committed 2026-09-29 13:08:58 +03:00
1 parent ace93c721f
commit 25162b8a45
3 files changed
+676

No files matched your search

+65
View File
@@ -0,0 +1,65 @@
# inspect-web-services.sh
Открива инсталирани web server и reverse-proxy решения, проверява слушателите
на портове 80/443 и извежда Apache/Nginx virtual host конфигурациите и
активните site symlink-и. Скриптът е read-only и не променя услуги или firewall.
## Какво прави
Проверява TCP и UDP слушатели на портове 80 и 443 чрез `ss`, включително
процес/PID, когато правата на текущия потребител позволяват това. Така се
откриват и ad-hoc процеси като Python/Node web server, дори да не са сред
известните инсталирани решения. При липсващи process details в отчета се
предлага повторно изпълнение със `sudo`.
Търси Apache HTTP Server, Nginx, Caddy, HAProxy, Traefik, Lighttpd, Envoy,
Varnish и OpenResty чрез изпълними файлове, package databases и systemd unit-и.
При Apache/Nginx отчита hostname/ServerName, listen address/port, document root,
пътя към конфигурацията, symlink-а от `sites-enabled` и URL адресите, които
могат да се отворят в браузър. URL-ите са изведени като линкове в HTML report.
Услуга се показва като инсталирана независимо дали в момента работи; състоянието
на systemd unit-а и активните port listeners се показват отделно.
## Изисквания
- Linux, Bash и Python 3
- `ss` е задължителен за откриването на слушатели
- `cat` е задължителен за предаване на Python helper-а, `python3` за анализ и export
- `systemctl`, `dpkg-query`, `rpm`, `apk`, `lsof`, `apache2ctl`/`apachectl`,
`httpd` и `nginx` са незадължителни; липсата им ограничава само съответните
допълнителни сведения
- За пълни PID/process command line данни може да са нужни root права
## Употреба
```bash
./Web/inspect-web-services.sh
./Web/inspect-web-services.sh --help
sudo ./Web/inspect-web-services.sh
./Web/inspect-web-services.sh --output "$HOME/web-services.json" --format json
./Web/inspect-web-services.sh --output /tmp/web-services.html --force
```
| Опция | Описание |
|-------|----------|
| `-o`, `--output PATH` | Записва директно във файл; без тази опция предлага интерактивен запис |
| `-f`, `--format FORMAT` | Формат `txt`, `json` или `html` |
| `--force` | Позволява презапис на съществуващ файл без потвърждение |
| `-h`, `--help` | Показва помощта и приключва |
Без зададен `--format` форматът се определя от разширението на `--output`,
иначе се използва TXT. При интерактивен запис началният път е
`~/web-services-report.<format>`. В non-interactive режим без `--output`
отчетът се извежда към stdout; `--format` определя сериализацията.
## Ограничения
Apache vhost информацията се чете от конфигурационните файлове в
`/etc/apache2/sites-enabled` или `/etc/httpd/conf.d`; `apache2ctl -S` се използва
като fallback. Nginx се анализира от `nginx -T`, което може да изисква права за
прочит на включените конфигурации. Скриптът открива site symlink-и, но не
проверява дали DNS записите сочат към тази машина, дали TLS сертификатът е
валиден или дали HTTP отговорът на всеки virtual host е успешен. Package
detection зависи от наличния package manager; процесът на произволен listener
се показва дори когато приложението му не е разпознато като познат сървър.