Назад к обновлениям
New releaseAug 31, 2026

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:

Или задать через команду:```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

Конфигурация

Прокси можно настроить через:

  1. Флаги командной строки (наивысший приоритет)
  2. Переменные окружения
  3. Файл конфигурации (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

EndpointDescription
GET /Dashboard (web UI)
GET /healthHealth check (JSON; HTTP 200 healthy, 503 unhealthy)
GET /statsCache statistics (JSON)
GET /metricsPrometheus 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

EndpointDescription
POST /api/mirrorStart 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.

EndpointDescription
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/outdatedCheck multiple packages for outdated versions
POST /api/bulkBulk 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 для управления пользовательскими идентификаторами и контроля доступа к ресурсам.
  • Аудит доступа: Регулярно просматривайте журналы доступа для обнаружения несанкционированных попыток доступа.

Реагирование на инциденты

Наличие четко определенного плана реагирования на инциденты имеет решающее значение для минимизации ущерба от атаки. Ключевые этапы включают:

  1. Подготовка: Разработайте и внедрите политику реагирования на инциденты.
  2. Обнаружение и анализ: Определите и проанализируйте инцидент.
  3. Сдерживание, ликвидация и восстановление: Ограничьте ущерб, устраните угрозу и восстановите системы.
  4. Пост-инцидентная деятельность: Проведите анализ после инцидента для улучшения будущих мер безопасности.

Заключение

Проактивная защита от атак требует многоуровневого подхода, который включает сетевую безопасность, безопасность приложений, управление доступом и готовность к реагированию на инциденты. Внедряя эти стратегии, организации могут значительно снизить риск успешных атак и повысить общую устойчивость безопасности.

{
  "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

Категории