
proxy v0.7.0
Легковесный кэширующий прокси для реестров пакетов.
git-pkgs proxy
Кэширующий прокси для реестров пакетов. Ускоряет загрузку пакетов за счёт локального кэширования артефактов, снижая расход трафика и повышая надёжность.
Период охлаждения версий
Большинство атак на цепочку поставок полагаются на скорость: вредоносная версия публикуется и потребляется автоматизированными конвейерами в течение минут, прежде чем кто-либо заметит. Функция периода охлаждения добавляет карантинный период для только что опубликованных версий. При включении прокси удаляет версии из ответов метаданных, пока они не достигнут настраиваемого порога возраста.```yaml cooldown: default: "3d" # hide versions published less than 3 days ago ecosystems: npm: "7d" # npm gets a longer window cargo: "0" # disable for cargo packages: "pkg:npm/lodash": "0" # exempt trusted packages
A 3-day cooldown means that when `lodash` publishes version `4.18.0`, your builds keep using `4.17.21` until 3 days have passed. If the new release turns out to be compromised, you were never exposed.
Resolution order: package override, then ecosystem override, then global default. This lets you set a conservative default and carve out exceptions for packages where you need faster updates. See [docs/configuration.md](https://github.com/git-pkgs/proxy/blob/main/docs/configuration.md) for the full config reference.
## Supported Registries
| Registry | Language/Platform | Cooldown | Completed |
|----------|-------------------|:--------:|:---------:|
| npm | JavaScript | Yes | ✓ |
| Cargo | Rust | Yes | ✓ |
| RubyGems | Ruby | Yes | ✓ |
| Go proxy | Go | | ✓ |
| Hex | Elixir | Yes* | ✓ |
| pub.dev | Dart | Yes | ✓ |
| PyPI | Python | Yes | ✓ |
| Maven | Java | | ✓ |
| Gradle Build Cache | Java/Kotlin | | ✓ |
| NuGet | .NET | Yes | ✓ |
| Composer | PHP | Yes | ✓ |
| Conan | C/C++ | | ✓ |
| Conda | Python/R | Yes | ✓ |
| CRAN | R | | ✓ |
| Julia | Julia | | ✓ |
| Container | Docker/OCI | | ✓ |
| Debian | Debian/Ubuntu | | ✓ |
| RPM | RHEL/Fedora | | ✓ |
| Alpine | Alpine Linux | | ✗ |
| Arch | Arch Linux | | ✗ |
| Chef | Chef | | ✗ |
| Generic | Any | | ✗ |
| Helm | Kubernetes | | ✗ |
| Swift | Swift | | ✗ |
| Vagrant | Vagrant | | ✗ |
Cooldown requires publish timestamps in metadata. Registries without a "Yes" in the cooldown column either don't expose timestamps or haven't been wired up yet.
\* Hex cooldown requires disabling registry signature verification (`HEX_NO_VERIFY_REPO_ORIGIN=1`) since the proxy re-encodes the protobuf payload.
## Install```bash
brew install git-pkgs/git-pkgs/proxy
Или скачайте бинарный файл со страницы релизов.
Быстрый старт```bash
Build from source
go build -o proxy ./cmd/proxy
Run with defaults (listens on :8080)
./proxy
Run with custom settings
./proxy -listen :3000 -base-url https://proxy.example.com
Прокси теперь запущен. Настройте ваши менеджеры пакетов для его использования.
## OpenAPI (Swagger)
В этом репозитории используется swaggo для генерации спецификации OpenAPI из аннотированных обработчиков.
Сгенерируйте спецификацию:```bash
go install github.com/swaggo/swag/cmd/swag@latest
go generate ./internal/server
Сгенерированные файлы записываются в docs/swagger/.
Когда прокси запущен, получите актуальную спецификацию по адресу:
http://localhost:8080/openapi.json
Или замените http://localhost:8080 на ваш настроенный базовый URL. Эта ссылка также отображается на панели управления.
Настройка менеджеров пакетов
npm
Создайте или отредактируйте ~/.npmrc:```
registry=http://localhost:8080/npm/
Or set per-project in `.npmrc`:```
registry=http://localhost:8080/npm/
Или используйте переменную окружения:```bash npm_config_registry=http://localhost:8080/npm/ npm install
### Cargo
Создайте или отредактируйте `~/.cargo/config.toml`:```toml
[source.crates-io]
replace-with = "proxy"
[source.proxy]
registry = "sparse+http://localhost:8080/cargo/"
Or set per-project in .cargo/config.toml in your project root.
RubyGems / Bundler
Set the gem source in your Gemfile:```ruby
source "http://localhost:8080/gem"
Или настройте глобально:```bash
gem sources --add http://localhost:8080/gem/
bundle config mirror.https://rubygems.org http://localhost:8080/gem
Go modules
Задайте переменную окружения GOPROXY:```bash export GOPROXY=http://localhost:8080/go,direct
Or in your shell profile for persistence.
### Hex (Elixir)
Configure in `~/.hex/hex.config`:```erlang
{default_url, <<"http://localhost:8080/hex">>}.
Или задайте переменную окружения:```bash export HEX_MIRROR=http://localhost:8080/hex
### pub.dev (Dart/Flutter)
Задайте переменную окружения PUB_HOSTED_URL:```bash
export PUB_HOSTED_URL=http://localhost:8080/pub
PyPI (pip)
Настройте pip для использования прокси:```bash pip install --index-url http://localhost:8080/pypi/simple/ package_name
Or set in `~/.pip/pip.conf`:```ini
[global]
index-url = http://localhost:8080/pypi/simple/
Maven
Добавьте в ваш ~/.m2/settings.xml:```xml
proxy
central
http://localhost:8080/maven/
The `/maven/` endpoint uses Maven Central as primary upstream and falls back to the Gradle Plugin Portal for Gradle plugin marker metadata and related artifacts when the primary upstream returns not found.
For Gradle plugin resolution via the same proxy endpoint:```kotlin
pluginManagement {
repositories {
maven(url = "http://localhost:8080/maven/")
}
}
Gradle HTTP Build Cache
Настройте в settings.gradle(.kts):```kotlin
buildCache {
local {
enabled = false
}
remote {
url = uri("http://localhost:8080/gradle/")
push = true
}
}
### NuGet
Настройте в `nuget.config`:```xml
<configuration>
<packageSources>
<clear />
<add key="proxy" value="http://localhost:8080/nuget/v3/index.json" />
</packageSources>
</configuration>
Или используйте CLI:```bash dotnet nuget add source http://localhost:8080/nuget/v3/index.json -n proxy
### Composer (PHP)
Настройте в `composer.json`:```json
{
"repositories": [
{
"type": "composer",
"url": "http://localhost:8080/composer"
}
]
}
Или задать глобально:```bash composer config -g repositories.proxy composer http://localhost:8080/composer
### Conan (C/C++)
Добавьте прокси как удалённый репозиторий:```bash
conan remote add proxy http://localhost:8080/conan
conan remote disable conancenter
Or настройте в ~/.conan2/remotes.json.
Conda
Настройте в ~/.condarc:```yaml
channels:
- http://localhost:8080/conda/main
- http://localhost:8080/conda/conda-forge default_channels:
- http://localhost:8080/conda/main
Или задать через команду:```bash
conda config --add channels http://localhost:8080/conda/main
CRAN (R)
Задайте репозиторий в R:```r options(repos = c(CRAN = "http://localhost:8080/cran"))
Или в `~/.Rprofile` для постоянного использования:```r
local({
r <- getOption("repos")
r["CRAN"] <- "http://localhost:8080/cran"
options(repos = r)
})
Julia
Задайте сервер Pkg перед запуском Julia:```bash export JULIA_PKG_SERVER=http://localhost:8080/julia
Или внутри запущенной сессии:```julia
ENV["JULIA_PKG_SERVER"] = "http://localhost:8080/julia"
using Pkg; Pkg.update()
Docker / Container Registry
Настройте Docker на использование прокси в качестве зеркала реестра в /etc/docker/daemon.json:```json
{
"registry-mirrors": ["http://localhost:8080"]
}
Затем перезапустите Docker:```bash
sudo systemctl restart docker
Или загрузите изображения напрямую:```bash docker pull localhost:8080/library/nginx:latest
### Helm
Настройте каждый HTTP-репозиторий диаграмм Helm, указав имя, а затем добавьте соответствующий прокси-URL в Helm:```yaml
upstream:
helm:
bitnami: "https://charts.bitnami.com/bitnami"
功能
- 多平台支持:支持 Windows、Linux 和 macOS。
- 多协议支持:支持 HTTP、HTTPS、SOCKS4、SOCKS5 和 SSH 隧道。
- 多线程:支持多线程扫描,提高效率。
- 可定制:支持自定义扫描端口、扫描速度和扫描方式。
- 易于使用:提供命令行界面和图形用户界面,方便用户操作。
- 开源:完全开源,用户可以自由修改和分发。```bash helm repo add bitnami http://localhost:8080/helm/bitnami helm repo update helm pull bitnami/nginx
Прокси-сервер кэширует `index.yaml`, используя стандартные настройки кэша метаданных, и
кэширует архивы чартов после проверки их SHA-256-дайджеста из индекса.
Для чартов, хранящихся в OCI-реестре, настройте именованный OCI-апстрим и добавьте
зарезервированный префикс `upstream/{name}` к ссылке на чарт:```yaml
upstream:
oci:
ghcr: "https://ghcr.io"
Установка
Требования
- Python 3.8+
- pip
Установка из PyPI
pip install kitploit
Установка из исходного кода
git clone https://github.com/kitploit/kitploit.git
cd kitploit
pip install -r requirements.txt
python setup.py install
Проверка установки
kitploit --version
Если вы видите номер версии, установка прошла успешно.
Быстрый старт
Поиск инструментов
kitploit search nmap
Получение информации об инструменте
kitploit info nmap
Обновление базы данных инструментов
kitploit update
Список всех доступных инструментов
kitploit list
Использование
Команды
| Команда | Описание |
|---|---|
search | Поиск инструментов по ключевому слову |
info | Отображение подробной информации об инструменте |
update | Обновление локальной базы данных инструментов |
list | Вывод списка всех доступных инструментов |
install | Установка инструмента |
remove | Удаление установленного инструмента |
help | Отображение справочной информации |
Примеры
Поиск инструментов
kitploit search web
Этот пример выведет список всех инструментов, связанных с веб-безопасностью.
Получение информации об инструменте
kitploit info sqlmap
Отображает подробную информацию о sqlmap, включая описание, автора, ссылку на репозиторий и теги.
Установка инструмента
kitploit install sqlmap
Устанавливает sqlmap в вашу систему.
Конфигурация
Файл конфигурации
Файл конфигурации находится по адресу ~/.kitploit/config.json. Вы можете изменить следующие параметры:
install_dir: каталог, в который будут устанавливаться инструменты (по умолчанию:~/.kitploit/tools)data_file: путь к файлу базы данных инструментов (по умолчанию:~/.kitploit/tools.json)auto_update: автоматическое обновление базы данных при каждом запуске (по умолчанию:false)
Пример конфигурации
{
"install_dir": "~/.kitploit/tools",
"data_file": "~/.kitploit/tools.json",
"auto_update": false
}
Устранение неполадок
Проблема: команда не найдена
Если вы получаете ошибку kitploit: command not found, убедитесь, что каталог с исполняемыми файлами Python добавлен в ваш PATH.
Проблема: ошибка обновления
Если обновление не удается, проверьте подключение к интернету и повторите попытку. Если проблема не устранена, удалите файл ~/.kitploit/tools.json и выполните обновление снова.
Лицензия
Этот проект распространяется под лицензией MIT. Подробности см. в файле LICENSE.
Вклад
Мы приветствуем вклад в проект! Пожалуйста, ознакомьтесь с CONTRIBUTING.md для получения подробной информации о том, как внести свой вклад.
Благодарности
- Всем участникам проекта Kitploit
- Сообществу открытого исходного кода за их постоянную поддержку```bash helm pull oci://localhost:8080/upstream/ghcr/owner/charts/mychart --version 1.0.0 --plain-http
### Debian / APT
Настройте APT для использования прокси в `/etc/apt/sources.list.d/proxy.list`:```
deb http://localhost:8080/debian stable main contrib
Замените существующие записи в вашем sources.list, затем:```bash sudo apt update
The upstream defaults to `http://deb.debian.org/debian`. To proxy a different APT repository (e.g. Ubuntu), set `upstream.debian` in the config file or `PROXY_UPSTREAM_DEBIAN` in the environment:```yaml
upstream:
debian: "http://archive.ubuntu.com/ubuntu"
RPM / Yum / DNF
Настройте yum/dnf для использования прокси в /etc/yum.repos.d/proxy.repo:```ini
[proxy-fedora]
name=Fedora via Proxy
baseurl=http://localhost:8080/rpm/releases/$releasever/Everything/$basearch/os/
enabled=1
gpgcheck=0
Тогда:```bash
sudo dnf clean all
sudo dnf update
Конфигурация
Прокси можно настроить через:
- Флаги командной строки (наивысший приоритет)
- Переменные окружения
- Файл конфигурации (YAML или JSON)
Флаги командной строки```
-config string Path to configuration file -listen string Address to listen on (default ":8080") -base-url string Public URL of this proxy (default "http://localhost:8080") -storage-url string Storage URL (file://, s3://, gs://, azblob://) -storage-path string Path to artifact storage directory (deprecated, use -storage-url) -database-driver string Database driver: sqlite or postgres (default "sqlite") -database-path string Path to SQLite database file (default "./cache/proxy.db") -database-url string PostgreSQL connection URL -log-level string Log level: debug, info, warn, error (default "info") -log-format string Log format: text, json (default "text") -access-log string Path to the JSONL access log -version Print version and exit
### Переменные окружения```bash
PROXY_LISTEN=:8080
PROXY_BASE_URL=http://localhost:8080
PROXY_UI_URL=http://localhost:8080 # Optional; defaults to PROXY_BASE_URL
PROXY_STORAGE_URL=file:///var/cache/proxy/artifacts
PROXY_DATABASE_DRIVER=sqlite
PROXY_DATABASE_PATH=./cache/proxy.db
PROXY_DATABASE_URL=postgres://user:pass@localhost/proxy?sslmode=disable
PROXY_LOG_LEVEL=info
PROXY_LOG_FORMAT=text
PROXY_ACCESS_LOG_PATH=/var/log/proxy/access.jsonl
Конфигурационный файл```yaml
listen: ":8080" base_url: "http://localhost:8080"
storage: url: "file:///var/cache/proxy/artifacts" max_size: "10GB" # Optional: evict LRU when exceeded
database: driver: "sqlite" path: "/var/lib/proxy/cache.db"
log: level: "info" format: "text"
access_log: path: "/var/log/proxy/access.jsonl" # Optional JSONL activity log
Optional: override upstream URLs
upstream: npm: "https://registry.npmjs.org" cargo: "https://index.crates.io"
Optional: version cooldown (see above)
cooldown: default: "3d"
См. [справочник по конфигурации](https://github.com/git-pkgs/proxy/blob/main/docs/configuration.md#upstream-registries) для всех ключей upstream, переменных окружения и URL по умолчанию.
Запуск с файлом конфигурации:```bash
./proxy -config /etc/proxy/config.yaml
PostgreSQL
SQLite — это база данных по умолчанию, которая отлично подходит для развертываний на одном узле. Для многоузловых конфигураций или если вы предпочитаете управляемую базу данных, переключитесь на Postgres:```yaml database: driver: "postgres" url: "postgres://user:password@localhost:5432/proxy?sslmode=disable"
Или через переменные окружения:```bash
PROXY_DATABASE_DRIVER=postgres
PROXY_DATABASE_URL=postgres://user:password@localhost:5432/proxy?sslmode=disable
Прокси автоматически создаёт таблицы при первом запуске.
S3-хранилище
Прокси может хранить кэшированные артефакты в S3 или любом S3-совместимом сервисе (MinIO, R2 и т. д.) вместо локальной файловой системы.```yaml storage: url: "s3://my-bucket-name?region=us-east-1"
Для S3-совместимых сервисов, таких как MinIO:```yaml
storage:
url: "s3://my-bucket?endpoint=http://localhost:9000&disableSSL=true&s3ForcePathStyle=true"
Установите учётные данные через стандартные переменные окружения AWS (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION).
Google Cloud Storage
Прокси может хранить кэшированные артефакты в корзине GCS, используя схему URL gs://.```yaml
storage:
url: "gs://my-bucket-name"
Аутентификация использует [Application Default Credentials](https://docs.cloud.google.com/docs/authentication/application-default-credentials), что означает, что учётные данные не нужно встраивать в конфигурацию или окружение. Поддерживаемые источники, в порядке приоритета:
- **GKE Workload Identity** — привяжите сервисный аккаунт Kubernetes, под которым работает прокси, к сервисному аккаунту Google, имеющему роль `roles/storage.objectAdmin` на бакете. Прокси автоматически будет использовать токен рабочей нагрузки.
- **Привязанный сервисный аккаунт** на GCE, Cloud Run, Cloud Functions и т. д.
- Переменная окружения **`GOOGLE_APPLICATION_CREDENTIALS`**, указывающая на JSON-файл ключа сервисного аккаунта.
- **`gcloud auth application-default login`** для локальной разработки.
#### Настройка GKE Workload Identity```bash
# 1. Create a Google service account
gcloud iam service-accounts create git-pkgs-proxy \
--project=PROJECT_ID
# 2. Grant it access to the bucket
gsutil iam ch \
serviceAccount:git-pkgs-proxy@PROJECT_ID.iam.gserviceaccount.com:objectAdmin \
gs://my-bucket-name
# 3. Bind the Kubernetes service account to it
gcloud iam service-accounts add-iam-policy-binding \
git-pkgs-proxy@PROJECT_ID.iam.gserviceaccount.com \
--role=roles/iam.workloadIdentityUser \
--member="serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME]"
# 4. Annotate the Kubernetes service account
kubectl annotate serviceaccount KSA_NAME \
--namespace=NAMESPACE \
iam.gke.io/gcp-service-account=git-pkgs-proxy@PROJECT_ID.iam.gserviceaccount.com
Прямая выдача (подписанные URL) с Workload Identity
Когда включено direct_serve: true, прокси выдаёт HTTP-редиректы 302 на предварительно подписанные URL-адреса GCS. Workload Identity не предоставляет закрытый ключ, поэтому бэкенд GCS вызывает API IAM Credentials signBlob. Предоставьте сервисному аккаунту роль создателя токенов (token-creator) для самого себя:```bash
gcloud iam service-accounts add-iam-policy-binding
git-pkgs-proxy@PROJECT_ID.iam.gserviceaccount.com
--role=roles/iam.serviceAccountTokenCreator
--member="serviceAccount:git-pkgs-proxy@PROJECT_ID.iam.gserviceaccount.com"
## CLI-команды
### serve (по умолчанию)
Запускает прокси-сервер. Это команда по умолчанию, если не указана никакая другая.```bash
proxy serve [flags]
proxy [flags] # same as 'proxy serve'
mirror
Предварительно заполните кэш из PURL, SBOM-файлов или целых реестров. Полезно для обеспечения офлайн-доступности или прогрева кэша перед развертываниями.```bash
Mirror specific package versions
proxy mirror pkg:npm/[email protected] pkg:cargo/[email protected]
Mirror all versions of a package
proxy mirror pkg:npm/lodash
Mirror from a CycloneDX or SPDX SBOM
proxy mirror --sbom sbom.cdx.json
Preview what would be mirrored
proxy mirror --dry-run pkg:npm/lodash
Control parallelism
proxy mirror --concurrency 8 pkg:npm/[email protected]
Зеркальная команда принимает те же флаги хранилища и базы данных, что и `serve`. Уже кэшированные артефакты пропускаются.
Зеркальный API также доступен, когда сервер запущен:```bash
# Start a mirror job
curl -X POST http://localhost:8080/api/mirror \
-H "Content-Type: application/json" \
-d '{"purls": ["pkg:npm/[email protected]"]}'
# Check job status
curl http://localhost:8080/api/mirror/mirror-1
# Cancel a running job
curl -X DELETE http://localhost:8080/api/mirror/mirror-1
stats
Показать статистику кэша без запуска сервера.```bash
Text output
proxy stats
JSON output
proxy stats -json
Custom database path
proxy stats -database-path /var/lib/proxy/cache.db
With PostgreSQL
proxy stats -database-driver postgres -database-url postgres://user:pass@localhost/proxy
Show top 20 most popular packages
proxy stats -popular 20
Пример вывода:```
Cache Statistics
================
Packages: 45
Versions: 128
Artifacts: 128
Total size: 892.4 MB
Total hits: 1547
Packages by ecosystem:
npm 32
cargo 13
Most popular packages:
1. npm/lodash (342 hits, 24.7 KB)
2. npm/react (198 hits, 89.3 KB)
3. cargo/serde (156 hits, 234.1 KB)
Recently cached:
npm/[email protected] (2024-01-15 14:32, 54.2 KB)
cargo/[email protected] (2024-01-15 14:28, 412.8 KB)
API Endpoints
Registry Protocols
| Endpoint | Description |
|---|---|
GET / | Dashboard (web UI) |
GET /health | Health check (JSON; HTTP 200 healthy, 503 unhealthy) |
GET /stats | Cache statistics (JSON) |
GET /metrics | Prometheus metrics |
GET /npm/* | npm registry protocol |
GET /cargo/* | Cargo sparse index protocol |
GET /gem/* | RubyGems protocol |
GET /go/* | Go module proxy protocol |
GET /hex/* | Hex.pm protocol |
GET /pub/* | pub.dev protocol |
GET /pypi/* | PyPI simple/JSON API |
GET /maven/* | Maven repository protocol |
GET /nuget/* | NuGet V3 API |
GET /composer/* | Composer/Packagist protocol |
GET /conan/* | Conan C/C++ protocol |
GET /conda/* | Conda/Anaconda protocol |
GET /cran/* | CRAN (R) protocol |
GET /julia/* | Julia Pkg server protocol |
GET /helm/{repository}/* | HTTP Helm chart repository protocol |
GET /v2/* | OCI/Docker registry protocol |
GET /debian/* | Debian/APT repository protocol |
GET /rpm/* | RPM/Yum repository protocol |
Mirror API
| Endpoint | Description |
|---|---|
POST /api/mirror | Start a mirror job (JSON body with purls) |
GET /api/mirror/{id} | Get job status and progress |
DELETE /api/mirror/{id} | Cancel a running job |
Enrichment API
The proxy provides REST endpoints for package metadata enrichment, vulnerability scanning, and outdated detection.
| Endpoint | Description |
|---|---|
GET /api/package/{ecosystem}/{name} | Get package metadata |
GET /api/package/{ecosystem}/{name}/{version} | Get version metadata with vulnerabilities |
GET /api/vulns/{ecosystem}/{name} | Get all vulnerabilities for a package |
GET /api/vulns/{ecosystem}/{name}/{version} | Get vulnerabilities for a specific version |
POST /api/outdated | Check multiple packages for outdated versions |
POST /api/bulk | Bulk package metadata lookup |
Get Package Metadata```bash
curl http://localhost:8080/api/package/npm/lodash
🛡️ Защита от атак
Обзор
Этот раздел описывает стратегии защиты от атак, нацеленных на вашу инфраструктуру. Понимание векторов атак и внедрение надежных мер безопасности имеет решающее значение для поддержания целостности и доступности ваших систем.
Ключевые концепции
- Снижение рисков: Процесс выявления, оценки и приоритизации рисков безопасности для минимизации потенциального воздействия атак.
- Глубокоэшелонированная оборона: Стратегия безопасности, которая использует несколько уровней защиты для защиты информации и ресурсов. Если один уровень будет скомпрометирован, другой уровень уже будет на месте для предотвращения инцидента безопасности.
- Принцип наименьших привилегий: Предоставление пользователям и системам только тех разрешений, которые абсолютно необходимы для выполнения их задач.
Стратегии защиты
1. Сетевая безопасность
- Брандмауэры: Внедрите брандмауэры для фильтрации входящего и исходящего трафика на основе заранее определенных правил безопасности.
- Системы обнаружения/предотвращения вторжений (IDS/IPS): Разверните IDS/IPS для мониторинга сетевого трафика на предмет подозрительной активности и принятия автоматических мер по блокированию потенциальных угроз.
- Сегментация сети: Разделите сеть на более мелкие, изолированные сегменты, чтобы ограничить боковое перемещение в случае взлома.
2. Безопасность приложений
- Безопасная разработка: Внедряйте безопасные методы кодирования на протяжении всего жизненного цикла разработки программного обеспечения (SDLC).
- Регулярные обновления и исправления: Поддерживайте программное обеспечение и зависимости в актуальном состоянии для устранения известных уязвимостей.
- Валидация ввода: Проверяйте и очищайте все пользовательские вводы для предотвращения таких атак, как SQL-инъекции и межсайтовый скриптинг (XSS).
3. Управление доступом
- Многофакторная аутентификация (MFA): Внедрите MFA для добавления дополнительного уровня безопасности помимо паролей.
- Управление идентификацией и доступом (IAM): Используйте решения IAM для управления пользовательскими идентификаторами и контроля доступа к ресурсам.
- Аудит доступа: Регулярно просматривайте журналы доступа для обнаружения несанкционированных попыток доступа.
Реагирование на инциденты
Наличие четко определенного плана реагирования на инциденты имеет решающее значение для минимизации ущерба от атаки. Ключевые этапы включают:
- Подготовка: Разработайте и внедрите политику реагирования на инциденты.
- Обнаружение и анализ: Определите и проанализируйте инцидент.
- Сдерживание, ликвидация и восстановление: Ограничьте ущерб, устраните угрозу и восстановите системы.
- Пост-инцидентная деятельность: Проведите анализ после инцидента для улучшения будущих мер безопасности.
Заключение
Проактивная защита от атак требует многоуровневого подхода, который включает сетевую безопасность, безопасность приложений, управление доступом и готовность к реагированию на инциденты. Внедряя эти стратегии, организации могут значительно снизить риск успешных атак и повысить общую устойчивость безопасности.
{
"ecosystem": "npm",
"name": "lodash",
"latest_version": "4.17.21",
"license": "MIT",
"license_category": "permissive",
"description": "Lodash modular utilities",
"homepage": "https://lodash.com/",
"repository": "https://github.com/lodash/lodash",
"registry_url": "https://registry.npmjs.org"
}
```
#### Получить версию с уязвимостями```bash
curl http://localhost:8080/api/package/npm/lodash/4.17.0
```
## Установка
### Требования
- Python 3.8 или новее
- pip (менеджер пакетов Python)
### Установка из исходного кода
```bash
git clone https://github.com/example/repository.git
cd repository
pip install -r requirements.txt
```
### Установка через pip
```bash
pip install tool-name
```
### Настройка
После установки вам необходимо настроить файл конфигурации. Скопируйте пример конфигурации и отредактируйте его в соответствии с вашими потребностями:
```bash
cp config.example.yml config.yml
nano config.yml
```
Убедитесь, что вы установили правильные значения для следующих параметров:
- `api_key`: ваш ключ API
- `target_url`: целевой URL для сканирования
- `output_dir`: каталог для сохранения результатов
### Проверка установки
Чтобы убедиться, что инструмент установлен правильно, выполните:
```bash
tool-name --version
```
Вы должны увидеть номер версии, напечатанный в консоли.```json
{
"package": {
"ecosystem": "npm",
"name": "lodash",
"latest_version": "4.17.21",
"license": "MIT",
"license_category": "permissive"
},
"version": {
"ecosystem": "npm",
"name": "lodash",
"version": "4.17.0",
"license": "MIT",
"published_at": "2016-06-17T03:59:56Z",
"yanked": false,
"is_outdated": true
},
"vulnerabilities": [
{
"id": "GHSA-p6mc-m468-83gw",
"summary": "Prototype Pollution in lodash",
"severity": "HIGH",
"cvss_score": 7.4,
"fixed_version": "4.17.12"
}
],
"is_outdated": true,
"license_category": "permissive"
}
```
#### Проверка устаревших пакетов```bash
curl -X POST http://localhost:8080/api/outdated \
-H "Content-Type: application/json" \
-d '{
"packages": [
{"ecosystem": "npm", "name": "lodash", "version": "4.17.0"},
{"ecosystem": "pypi", "name": "requests", "version": "2.25.0"}
]
}'
```
## 安装
### 通过 pip 安装
```bash
pip install pycryptodome
```
### 通过源码安装
```bash
git clone https://github.com/Legrandin/pycryptodome.git
cd pycryptodome
python setup.py install
```
## 快速入门
### 加密数据
```python
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
key = get_random_bytes(16)
cipher = AES.new(key, AES.MODE_EAX)
data = b"Hello, World!"
ciphertext, tag = cipher.encrypt_and_digest(data)
```
### 解密数据
```python
from Crypto.Cipher import AES
key = b'\x00' * 16
cipher = AES.new(key, AES.MODE_EAX)
plaintext = cipher.decrypt(ciphertext)
```
## 文档
完整的文档可在 [pycryptodome.readthedocs.io](https://pycryptodome.readthedocs.io) 获取。
## 许可证
PyCryptodome 在 BSD 许可证下分发。有关详细信息,请参阅 [LICENSE](https://github.com/git-pkgs/proxy/blob/main/LICENSE) 文件。```json
{
"results": [
{
"ecosystem": "npm",
"name": "lodash",
"version": "4.17.0",
"latest_version": "4.17.21",
"is_outdated": true
},
{
"ecosystem": "pypi",
"name": "requests",
"version": "2.25.0",
"latest_version": "2.31.0",
"is_outdated": true
}
]
}
```
#### Массовый поиск пакетов```bash
curl -X POST http://localhost:8080/api/bulk \
-H "Content-Type: application/json" \
-d '{
"purls": [
"pkg:npm/[email protected]",
"pkg:pypi/[email protected]"
]
}'
```
```
## 🛡️ Возможности
- **Полное сканирование**: Сканирует все порты (1-65535) с использованием SYN-сканирования для быстрого и точного обнаружения.
- **Обнаружение сервисов**: Определяет версии сервисов, работающих на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему хоста на основе отпечатков TCP/IP стека.
- **Скрипты NSE**: Запускает набор скриптов Nmap Scripting Engine для расширенного обнаружения уязвимостей.
- **Экспорт результатов**: Сохраняет результаты сканирования в нескольких форматах, включая текстовый, XML и HTML.
- **Настраиваемые параметры**: Позволяет пользователям указывать диапазоны портов, тайминги и другие параметры сканирования.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов для повышения эффективности.
- **Обнаружение хостов**: Определяет активные хосты в сети перед выполнением полного сканирования портов.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет точные версии сервисов для лучшей оценки уязвимостей.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает пользовательские скрипты NSE для конкретных задач.
- **Экспорт результатов**: Экспортирует результаты в различные форматы для отчетности.
- **Настраиваемые параметры**: Настраивает параметры сканирования в соответствии с конкретными требованиями.
- **Параллельное сканирование**: Сканирует несколько хостов одновременно для экономии времени.
- **Обнаружение хостов**: Определяет активные хосты в сети перед сканированием портов.
- **Трассировка маршрута**: Отслеживает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов, работающих на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения.
- **Экспорт результатов**: Сохраняет результаты сканирования в различных форматах.
- **Настраиваемые параметры**: Позволяет пользователям настраивать параметры сканирования.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов.
- **Обнаружение хостов**: Определяет активные хосты в сети.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения уязвимостей.
- **Экспорт результатов**: Сохраняет результаты сканирования в нескольких форматах.
- **Настраиваемые параметры**: Позволяет пользователям указывать диапазоны портов, тайминги и другие параметры.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов для повышения эффективности.
- **Обнаружение хостов**: Определяет активные хосты в сети перед выполнением полного сканирования портов.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет точные версии сервисов для лучшей оценки уязвимостей.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает пользовательские скрипты NSE для конкретных задач.
- **Экспорт результатов**: Экспортирует результаты в различные форматы для отчетности.
- **Настраиваемые параметры**: Настраивает параметры сканирования в соответствии с конкретными требованиями.
- **Параллельное сканирование**: Сканирует несколько хостов одновременно для экономии времени.
- **Обнаружение хостов**: Определяет активные хосты в сети перед сканированием портов.
- **Трассировка маршрута**: Отслеживает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов, работающих на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения.
- **Экспорт результатов**: Сохраняет результаты сканирования в различных форматах.
- **Настраиваемые параметры**: Позволяет пользователям настраивать параметры сканирования.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов.
- **Обнаружение хостов**: Определяет активные хосты в сети.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения уязвимостей.
- **Экспорт результатов**: Сохраняет результаты сканирования в нескольких форматах.
- **Настраиваемые параметры**: Позволяет пользователям указывать диапазоны портов, тайминги и другие параметры.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов для повышения эффективности.
- **Обнаружение хостов**: Определяет активные хосты в сети перед выполнением полного сканирования портов.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет точные версии сервисов для лучшей оценки уязвимостей.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает пользовательские скрипты NSE для конкретных задач.
- **Экспорт результатов**: Экспортирует результаты в различные форматы для отчетности.
- **Настраиваемые параметры**: Настраивает параметры сканирования в соответствии с конкретными требованиями.
- **Параллельное сканирование**: Сканирует несколько хостов одновременно для экономии времени.
- **Обнаружение хостов**: Определяет активные хосты в сети перед сканированием портов.
- **Трассировка маршрута**: Отслеживает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов, работающих на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения.
- **Экспорт результатов**: Сохраняет результаты сканирования в различных форматах.
- **Настраиваемые параметры**: Позволяет пользователям настраивать параметры сканирования.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов.
- **Обнаружение хостов**: Определяет активные хосты в сети.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения уязвимостей.
- **Экспорт результатов**: Сохраняет результаты сканирования в нескольких форматах.
- **Настраиваемые параметры**: Позволяет пользователям указывать диапазоны портов, тайминги и другие параметры.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов для повышения эффективности.
- **Обнаружение хостов**: Определяет активные хосты в сети перед выполнением полного сканирования портов.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет точные версии сервисов для лучшей оценки уязвимостей.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает пользовательские скрипты NSE для конкретных задач.
- **Экспорт результатов**: Экспортирует результаты в различные форматы для отчетности.
- **Настраиваемые параметры**: Настраивает параметры сканирования в соответствии с конкретными требованиями.
- **Параллельное сканирование**: Сканирует несколько хостов одновременно для экономии времени.
- **Обнаружение хостов**: Определяет активные хосты в сети перед сканированием портов.
- **Трассировка маршрута**: Отслеживает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов, работающих на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения.
- **Экспорт результатов**: Сохраняет результаты сканирования в различных форматах.
- **Настраиваемые параметры**: Позволяет пользователям настраивать параметры сканирования.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов.
- **Обнаружение хостов**: Определяет активные хосты в сети.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения уязвимостей.
- **Экспорт результатов**: Сохраняет результаты сканирования в нескольких форматах.
- **Настраиваемые параметры**: Позволяет пользователям указывать диапазоны портов, тайминги и другие параметры.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов для повышения эффективности.
- **Обнаружение хостов**: Определяет активные хосты в сети перед выполнением полного сканирования портов.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет точные версии сервисов для лучшей оценки уязвимостей.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает пользовательские скрипты NSE для конкретных задач.
- **Экспорт результатов**: Экспортирует результаты в различные форматы для отчетности.
- **Настраиваемые параметры**: Настраивает параметры сканирования в соответствии с конкретными требованиями.
- **Параллельное сканирование**: Сканирует несколько хостов одновременно для экономии времени.
- **Обнаружение хостов**: Определяет активные хосты в сети перед сканированием портов.
- **Трассировка маршрута**: Отслеживает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов, работающих на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения.
- **Экспорт результатов**: Сохраняет результаты сканирования в различных форматах.
- **Настраиваемые параметры**: Позволяет пользователям настраивать параметры сканирования.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов.
- **Обнаружение хостов**: Определяет активные хосты в сети.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения уязвимостей.
- **Экспорт результатов**: Сохраняет результаты сканирования в нескольких форматах.
- **Настраиваемые параметры**: Позволяет пользователям указывать диапазоны портов, тайминги и другие параметры.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов для повышения эффективности.
- **Обнаружение хостов**: Определяет активные хосты в сети перед выполнением полного сканирования портов.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет точные версии сервисов для лучшей оценки уязвимостей.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает пользовательские скрипты NSE для конкретных задач.
- **Экспорт результатов**: Экспортирует результаты в различные форматы для отчетности.
- **Настраиваемые параметры**: Настраивает параметры сканирования в соответствии с конкретными требованиями.
- **Параллельное сканирование**: Сканирует несколько хостов одновременно для экономии времени.
- **Обнаружение хостов**: Определяет активные хосты в сети перед сканированием портов.
- **Трассировка маршрута**: Отслеживает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов, работающих на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения.
- **Экспорт результатов**: Сохраняет результаты сканирования в различных форматах.
- **Настраиваемые параметры**: Позволяет пользователям настраивать параметры сканирования.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов.
- **Обнаружение хостов**: Определяет активные хосты в сети.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения уязвимостей.
- **Экспорт результатов**: Сохраняет результаты сканирования в нескольких форматах.
- **Настраиваемые параметры**: Позволяет пользователям указывать диапазоны портов, тайминги и другие параметры.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов для повышения эффективности.
- **Обнаружение хостов**: Определяет активные хосты в сети перед выполнением полного сканирования портов.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет точные версии сервисов для лучшей оценки уязвимостей.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает пользовательские скрипты NSE для конкретных задач.
- **Экспорт результатов**: Экспортирует результаты в различные форматы для отчетности.
- **Настраиваемые параметры**: Настраивает параметры сканирования в соответствии с конкретными требованиями.
- **Параллельное сканирование**: Сканирует несколько хостов одновременно для экономии времени.
- **Обнаружение хостов**: Определяет активные хосты в сети перед сканированием портов.
- **Трассировка маршрута**: Отслеживает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов, работающих на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения.
- **Экспорт результатов**: Сохраняет результаты сканирования в различных форматах.
- **Настраиваемые параметры**: Позволяет пользователям настраивать параметры сканирования.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов.
- **Обнаружение хостов**: Определяет активные хосты в сети.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения уязвимостей.
- **Экспорт результатов**: Сохраняет результаты сканирования в нескольких форматах.
- **Настраиваемые параметры**: Позволяет пользователям указывать диапазоны портов, тайминги и другие параметры.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов для повышения эффективности.
- **Обнаружение хостов**: Определяет активные хосты в сети перед выполнением полного сканирования портов.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет точные версии сервисов для лучшей оценки уязвимостей.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает пользовательские скрипты NSE для конкретных задач.
- **Экспорт результатов**: Экспортирует результаты в различные форматы для отчетности.
- **Настраиваемые параметры**: Настраивает параметры сканирования в соответствии с конкретными требованиями.
- **Параллельное сканирование**: Сканирует несколько хостов одновременно для экономии времени.
- **Обнаружение хостов**: Определяет активные хосты в сети перед сканированием портов.
- **Трассировка маршрута**: Отслеживает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов, работающих на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения.
- **Экспорт результатов**: Сохраняет результаты сканирования в различных форматах.
- **Настраиваемые параметры**: Позволяет пользователям настраивать параметры сканирования.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов.
- **Обнаружение хостов**: Определяет активные хосты в сети.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения уязвимостей.
- **Экспорт результатов**: Сохраняет результаты сканирования в нескольких форматах.
- **Настраиваемые параметры**: Позволяет пользователям указывать диапазоны портов, тайминги и другие параметры.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов для повышения эффективности.
- **Обнаружение хостов**: Определяет активные хосты в сети перед выполнением полного сканирования портов.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет точные версии сервисов для лучшей оценки уязвимостей.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает пользовательские скрипты NSE для конкретных задач.
- **Экспорт результатов**: Экспортирует результаты в различные форматы для отчетности.
- **Настраиваемые параметры**: Настраивает параметры сканирования в соответствии с конкретными требованиями.
- **Параллельное сканирование**: Сканирует несколько хостов одновременно для экономии времени.
- **Обнаружение хостов**: Определяет активные хосты в сети перед сканированием портов.
- **Трассировка маршрута**: Отслеживает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов, работающих на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения.
- **Экспорт результатов**: Сохраняет результаты сканирования в различных форматах.
- **Настраиваемые параметры**: Позволяет пользователям настраивать параметры сканирования.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов.
- **Обнаружение хостов**: Определяет активные хосты в сети.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения уязвимостей.
- **Экспорт результатов**: Сохраняет результаты сканирования в нескольких форматах.
- **Настраиваемые параметры**: Позволяет пользователям указывать диапазоны портов, тайминги и другие параметры.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов для повышения эффективности.
- **Обнаружение хостов**: Определяет активные хосты в сети перед выполнением полного сканирования портов.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет точные версии сервисов для лучшей оценки уязвимостей.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает пользовательские скрипты NSE для конкретных задач.
- **Экспорт результатов**: Экспортирует результаты в различные форматы для отчетности.
- **Настраиваемые параметры**: Настраивает параметры сканирования в соответствии с конкретными требованиями.
- **Параллельное сканирование**: Сканирует несколько хостов одновременно для экономии времени.
- **Обнаружение хостов**: Определяет активные хосты в сети перед сканированием портов.
- **Трассировка маршрута**: Отслеживает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов, работающих на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения.
- **Экспорт результатов**: Сохраняет результаты сканирования в различных форматах.
- **Настраиваемые параметры**: Позволяет пользователям настраивать параметры сканирования.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов.
- **Обнаружение хостов**: Определяет активные хосты в сети.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения уязвимостей.
- **Экспорт результатов**: Сохраняет результаты сканирования в нескольких форматах.
- **Настраиваемые параметры**: Позволяет пользователям указывать диапазоны портов, тайминги и другие параметры.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов для повышения эффективности.
- **Обнаружение хостов**: Определяет активные хосты в сети перед выполнением полного сканирования портов.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет точные версии сервисов для лучшей оценки уязвимостей.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает пользовательские скрипты NSE для конкретных задач.
- **Экспорт результатов**: Экспортирует результаты в различные форматы для отчетности.
- **Настраиваемые параметры**: Настраивает параметры сканирования в соответствии с конкретными требованиями.
- **Параллельное сканирование**: Сканирует несколько хостов одновременно для экономии времени.
- **Обнаружение хостов**: Определяет активные хосты в сети перед сканированием портов.
- **Трассировка маршрута**: Отслеживает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов, работающих на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения.
- **Экспорт результатов**: Сохраняет результаты сканирования в различных форматах.
- **Настраиваемые параметры**: Позволяет пользователям настраивать параметры сканирования.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов.
- **Обнаружение хостов**: Определяет активные хосты в сети.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения уязвимостей.
- **Экспорт результатов**: Сохраняет результаты сканирования в нескольких форматах.
- **Настраиваемые параметры**: Позволяет пользователям указывать диапазоны портов, тайминги и другие параметры.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов для повышения эффективности.
- **Обнаружение хостов**: Определяет активные хосты в сети перед выполнением полного сканирования портов.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет точные версии сервисов для лучшей оценки уязвимостей.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает пользовательские скрипты NSE для конкретных задач.
- **Экспорт результатов**: Экспортирует результаты в различные форматы для отчетности.
- **Настраиваемые параметры**: Настраивает параметры сканирования в соответствии с конкретными требованиями.
- **Параллельное сканирование**: Сканирует несколько хостов одновременно для экономии времени.
- **Обнаружение хостов**: Определяет активные хосты в сети перед сканированием портов.
- **Трассировка маршрута**: Отслеживает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов, работающих на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения.
- **Экспорт результатов**: Сохраняет результаты сканирования в различных форматах.
- **Настраиваемые параметры**: Позволяет пользователям настраивать параметры сканирования.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов.
- **Обнаружение хостов**: Определяет активные хосты в сети.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения уязвимостей.
- **Экспорт результатов**: Сохраняет результаты сканирования в нескольких форматах.
- **Настраиваемые параметры**: Позволяет пользователям указывать диапазоны портов, тайминги и другие параметры.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов для повышения эффективности.
- **Обнаружение хостов**: Определяет активные хосты в сети перед выполнением полного сканирования портов.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет точные версии сервисов для лучшей оценки уязвимостей.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает пользовательские скрипты NSE для конкретных задач.
- **Экспорт результатов**: Экспортирует результаты в различные форматы для отчетности.
- **Настраиваемые параметры**: Настраивает параметры сканирования в соответствии с конкретными требованиями.
- **Параллельное сканирование**: Сканирует несколько хостов одновременно для экономии времени.
- **Обнаружение хостов**: Определяет активные хосты в сети перед сканированием портов.
- **Трассировка маршрута**: Отслеживает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов, работающих на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения.
- **Экспорт результатов**: Сохраняет результаты сканирования в различных форматах.
- **Настраиваемые параметры**: Позволяет пользователям настраивать параметры сканирования.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов.
- **Обнаружение хостов**: Определяет активные хосты в сети.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает скрипты Nmap Scripting Engine для расширенного обнаружения уязвимостей.
- **Экспорт результатов**: Сохраняет результаты сканирования в нескольких форматах.
- **Настраиваемые параметры**: Позволяет пользователям указывать диапазоны портов, тайминги и другие параметры.
- **Параллельное сканирование**: Поддерживает параллельное сканирование нескольких хостов для повышения эффективности.
- **Обнаружение хостов**: Определяет активные хосты в сети перед выполнением полного сканирования портов.
- **Трассировка маршрута**: Показывает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет точные версии сервисов для лучшей оценки уязвимостей.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запускает пользовательские скрипты NSE для конкретных задач.
- **Экспорт результатов**: Экспортирует результаты в различные форматы для отчетности.
- **Настраиваемые параметры**: Настраивает параметры сканирования в соответствии с конкретными требованиями.
- **Параллельное сканирование**: Сканирует несколько хостов одновременно для экономии времени.
- **Обнаружение хостов**: Определяет активные хосты в сети перед сканированием портов.
- **Трассировка маршрута**: Отслеживает сетевой путь к целевому хосту.
- **Обнаружение версий**: Определяет версии сервисов, работающих на открытых портах.
- **Обнаружение ОС**: Определяет операционную систему целевого хоста.
- **Скрипты NSE**: Запу```json
{
"packages": {
"pkg:npm/lodash": {
"ecosystem": "npm",
"name": "lodash",
"latest_version": "4.17.21",
"license": "MIT",
"license_category": "permissive"
},
"pkg:pypi/requests": {
"ecosystem": "pypi",
"name": "requests",
"latest_version": "2.31.0",
"license": "Apache-2.0",
"license_category": "permissive"
}
}
}
```
### Stats Response (HTTP endpoint)```json
{
"cached_artifacts": 142,
"total_size_bytes": 523456789,
"total_size": "499.2 MB",
"storage_url": "file:///path/to/cache/artifacts",
"database_path": "./cache/proxy.db"
}
```
## Как это работает
1. Менеджер пакетов запрашивает метаданные пакета у прокси
2. Прокси получает метаданные из вышестоящего источника, переписывает URL-адреса артефактов так, чтобы они указывали на прокси
3. Менеджер пакетов запрашивает артефакт (tarball, crate и т. д.)
4. Прокси проверяет локальный кэш:
- **Попадание в кэш**: обслуживание из локального хранилища
- **Промах кэша**: получение из вышестоящего источника, сохранение локально, обслуживание клиента
5. Последующие запросы того же артефакта обслуживаются из кэша```
┌─────────────┐ ┌─────────┐ ┌──────────┐
│ npm/cargo │────▶│ proxy │────▶│ upstream │
│ client │◀────│ │◀────│ registry │
└─────────────┘ └─────────┘ └──────────┘
│
▼
┌─────────┐
│ cache │
│ storage │
└─────────┘
```
## Веб-интерфейс
Прокси-сервер предоставляет веб-интерфейс по адресу `/ui`. Отдельная сборка фронтенда не требуется — шаблоны и статические ресурсы встроены в бинарный файл. `GET /` перенаправляет на `/ui/`. Интерфейс смонтирован под собственным префиксом, поэтому обратный прокси может применять к нему другие правила доступа, чем к конечным точкам пакетов (например, требовать аутентификацию для `PathPrefix(/ui)`, оставляя `/npm`, `/pypi` и т. д. открытыми для сборочных машин).
- **Панель управления** (`/ui/`) — статистика кэша, популярные пакеты, недавно закэшированные артефакты и обзор уязвимостей.
- **Руководство по установке** (`/ui/install`) — инструкции по настройке для каждой экосистемы, чтобы вам не пришлось искать их здесь.
- **Обозреватель пакетов** (`/ui/packages`) — просмотр всех закэшированных пакетов с фильтрацией по экосистеме и сортировкой по количеству обращений, размеру, имени или числу уязвимостей.
- **Поиск** (`/ui/search?q=...`) — поиск закэшированных пакетов по имени.
- **Сведения о пакете** (`/ui/package/{ecosystem}/{name}`) — метаданные, лицензия, уязвимости и список версий пакета. Можно выбрать две версии для сравнения.
- **Сведения о версии** (`/ui/package/{ecosystem}/{name}/{version}`) — метаданные конкретной версии, хэш целостности, статус кэширования артефакта и количество обращений.
- **Обозреватель исходников** (`/ui/package/{ecosystem}/{name}/{version}/browse`) — просмотр файлов внутри закэшированных архивов с подсветкой синтаксиса для текстовых файлов и предпросмотром изображений.
- **Сравнение версий** (`/ui/package/{ecosystem}/{name}/compare/{v1}...{v2}`) — построчное сравнение двух закэшированных версий с отображением добавленных, удалённых и изменённых файлов.
## Мониторинг
Прокси-сервер предоставляет метрики Prometheus по адресу `GET /metrics`. Все имена метрик имеют префикс `proxy_`.
| Метрика | Тип | Метки | Описание |
|--------|------|--------|-------------|
| `proxy_requests_total` | counter | `ecosystem`, `status` | Ответы прокси по экосистеме пакетов и HTTP-статусу |
| `proxy_request_duration_seconds` | histogram | `ecosystem`, `status` | Длительность запросов к прокси |
| `proxy_cache_hits_total` | counter | `ecosystem` | Попадания в кэш |
| `proxy_cache_misses_total` | counter | `ecosystem` | Промахи кэша |
| `proxy_cache_size_bytes` | gauge | | Общий размер закэшированных артефактов |
| `proxy_cached_artifacts_total` | gauge | | Количество закэшированных артефактов |
| `proxy_upstream_fetch_duration_seconds` | histogram | `ecosystem` | Время, затраченное на получение данных от вышестоящего источника |
| `proxy_upstream_errors_total` | counter | `ecosystem`, `error_type` | Сбои при получении данных от вышестоящего источника |
| `proxy_storage_operation_duration_seconds` | histogram | `operation` | Задержка операций чтения/записи в хранилище |
| `proxy_storage_errors_total` | counter | `operation` | Сбои чтения/записи в хранилище |
| `proxy_active_requests` | gauge | | Текущие выполняемые запросы |
| `proxy_health_probe_failures_total` | counter | `step` | Сбои проверки работоспособности хранилища по этапу сбоя (`write`, `size`, `read`, `verify`, `delete`). |
Размер кэша и количество артефактов обновляются каждые 60 секунд. Остальные метрики обновляются при каждом запросе.
### Проверка работоспособности
`/health` возвращает структурированный JSON-отчёт о работоспособности подсистем. HTTP 200, если все проверки пройдены; 503, если хотя бы одна не пройдена.```json
{
"status": "ok",
"checks": {
"database": {"status": "ok"},
"storage": {"status": "ok"}
}
}
```
Проваленные проверки включают поле `"error"`. Сбои хранилища также включают поле `"step"`, указывающее, какой шаг проверки не удался (`write`, `size`, `read`, `verify`, `delete`). Когда проверка базы данных не удается, запись хранилища сообщает `{"status": "skipped"}`, чтобы ответ всегда содержал один и тот же набор ключей.
Результаты проверки хранилища кэшируются на время `health.storage_probe_interval` (по умолчанию 30 секунд), чтобы ограничить стоимость проверки удаленных бэкендов. Проверка удерживает внутренний мьютекс до 10 секунд (жестко заданный таймаут на проверку), поэтому `/health` предназначен как **readiness**-проба Kubernetes, а не liveness-проба — медленный round-trip к S3 должен вывести под из ротации, а не перезапустить его.
Конфигурация scrape для Prometheus:```yaml
scrape_configs:
- job_name: git-pkgs-proxy
static_configs:
- targets: ["localhost:8080"]
```
## Production Deployment
### Systemd Service
Create `/etc/systemd/system/proxy.service`:```ini
[Unit]
Description=git-pkgs proxy
After=network.target
[Service]
Type=simple
User=proxy
ExecStart=/usr/local/bin/proxy -config /etc/proxy/config.yaml
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
```
Включите и запустите:```bash
sudo systemctl enable proxy
sudo systemctl start proxy
```
### Docker
В репозиторий включён Dockerfile. Сборка и запуск:```bash
docker build -t proxy .
docker run -p 8080:8080 -v proxy-data:/data proxy
```
С Postgres и S3:```bash
docker run -p 8080:8080 \
-e PROXY_DATABASE_DRIVER=postgres \
-e PROXY_DATABASE_URL=postgres://user:pass@db:5432/proxy \
-e PROXY_STORAGE_URL=s3://my-bucket?region=us-east-1 \
-e AWS_ACCESS_KEY_ID=... \
-e AWS_SECRET_ACCESS_KEY=... \
proxy
```
### За обратным прокси
При работе за nginx, Apache или другим обратным прокси укажите `base_url` в качестве вашего публичного URL:```yaml
base_url: "https://proxy.example.com"
```
Если до интерфейса обращаются по другому имени хоста, чем до конечных точек пакетов — например, интерфейс публично доступен по домену, а сборочные машины обращаются к псевдониму в сети Docker — задайте `ui_base_url` отдельно. `base_url` — это URL, который используют менеджеры пакетов и перезапись метаданных; `ui_base_url` — это URL, показываемый людям, посещающим веб-интерфейс (канонические теги/`og:url` и баннер в руководстве по установке):```yaml
base_url: "http://pkg-proxy:8080" # internal alias for build machines
ui_base_url: "https://proxy.example.com/ui" # public UI URL
```
Когда параметр не задан, `ui_base_url` по умолчанию равен `base_url`.
> **Предупреждение:** прокси-сервер обслуживает интерфейс и конечные точки пакетов на одном и том же слушателе. Установка `ui_base_url` меняет только URL, который интерфейс показывает людям; это не мешает конечным точкам пакетов оставаться доступными на том же хосте и порту. При размещении прокси за публичным обратным прокси ограничьте публичный маршрут до `PathPrefix(/ui)` (или эквивалента вашего прокси), иначе `/npm`, `/pypi` и другие конечные точки пакетов останутся открытыми вместе с интерфейсом.
Пример nginx, ограничивающий публичный хост только интерфейсом, оставляя конечные точки пакетов доступными только на внутреннем слушателе:```nginx
server {
listen 443 ssl;
server_name proxy.example.com;
location /ui/ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering off;
}
location / {
return 404;
}
}
```
Traefik пример с использованием `PathPrefix(/ui)`, чтобы публичный маршрутизатор сопоставлял только трафик интерфейса:```yaml
labels:
traefik.enable: "true"
traefik.http.services.pkg-proxy.loadbalancer.server.port: "8080"
traefik.http.routers.pkg-proxy.rule: "Host(`proxy.example.com`) && PathPrefix(`/ui`)"
traefik.http.routers.pkg-proxy.entrypoints: "websecure"
```
## Управление кэшем
Прокси-сервер хранит артефакты в настроенном каталоге хранения со следующей структурой:```
cache/artifacts/
├── npm/
│ └── lodash/
│ └── 4.17.21/
│ └── lodash-4.17.21.tgz
├── cargo/
│ └── serde/
│ └── 1.0.193/
│ └── serde-1.0.193.crate
├── oci/
│ └── library/nginx/
│ └── sha256:abc123.../
│ └── sha256:abc123...
├── deb/
│ └── nginx/
│ └── 1.18.0-6/
│ └── nginx_1.18.0-6_amd64.deb
└── rpm/
└── nginx/
└── 1.24.0-1.fc39/
└── nginx-1.24.0-1.fc39.x86_64.rpm
```
Кэш-метаданные хранятся в SQLite (по умолчанию) или PostgreSQL. Чтобы очистить локальный кэш:```bash
rm -rf ./cache/artifacts/*
rm ./cache/proxy.db
```
Прокси пересоздаст базу данных при следующем запуске.
## Сборка из исходного кода
Требования:
- Go (версия проекта указана в `go.mod`)```bash
git clone https://github.com/git-pkgs/proxy.git
cd proxy
go build -o proxy ./cmd/proxy
```
Запустите тесты:```bash
go test ./...
```
## Лицензия
GPL-3.0-or-later