Files
knock-gui/back/README.md
2025-08-17 00:43:58 +06:00

332 lines
9.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Port Knocker
Утилита для отправки port knocking пакетов на удаленные серверы с поддержкой шифрования конфигурации.
**Версия**: 1.0.10
## Возможности
- ✅ Отправка TCP и UDP пакетов
- ✅ Настраиваемые последовательности портов
- ✅ Зашифрованные конфигурационные файлы
- ✅ Автоматическое определение зашифрованных файлов
- ✅ Ключи шифрования из файла или системной переменной
- ✅ Кроссплатформенная сборка (Linux, Windows, macOS)
- ✅ Совместимость со старыми версиями ОС (Ubuntu 18.04+)
- ✅ Подробный вывод для отладки
-**Расшифровка зашифрованных конфигов в открытый YAML (команда decrypt)**
-**Пасхалка для любознательных пользователей** 🎯
## Установка
### Сборка из исходников
```bash
# Клонировать репозиторий
git clone <repository-url>
cd port-knocker
# Установить зависимости
make deps
# Собрать для текущей платформы
make build
# Или собрать для всех платформ
make build-all
```
### Установка в систему
```bash
make install
```
## Использование
### Основная команда
```bash
# С файлом конфигурации
port-knocker -c config.yaml [-k key.txt] [-v]
# С инлайн целями
port-knocker -t "tcp:host:port;udp:host:port" [-d delay] [-v]
```
### Параметры
- `-c, --config` - Путь к файлу конфигурации
- `-t, --targets` - Инлайн цели в формате `[proto]:[host]:[port];[proto]:[host]:[port]`
- `-d, --delay` - Задержка между пакетами (по умолчанию 1s)
- `-k, --key` - Путь к файлу ключа шифрования
- `-v, --verbose` - Подробный вывод
- `-w, --wait-connection` - Ждать установления соединения
**Примечание**: Нужно указать либо `-c` (файл), либо `-t` (инлайн цели), но не оба одновременно.
### Шифрование конфигурации
```bash
# Используя глобальную опцию --config
port-knocker encrypt -c config.yaml -o config.encrypted -k key.txt
# Или используя опцию -i
port-knocker encrypt -i config.yaml -o config.encrypted -k key.txt
```
### **Расшифровка зашифрованного конфига**
```bash
# Используя глобальную опцию --config
port-knocker decrypt -c config.encrypted -o config.decrypted.yaml -k key.txt
# Или используя опцию -i
port-knocker decrypt -i config.encrypted -o config.decrypted.yaml -k key.txt
```
- `-c/--config` или `-i/--input` — путь к файлу (если не указан -i, используется --config)
- `-o/--output` — путь к выходному файлу
- `-k/--key` — путь к ключу (или используйте переменную окружения GO_KNOCKER_SERVE_PASS)
**Важно**: Ключ любой длины автоматически хешируется SHA256 до 32 байт для AES-256.
## Конфигурация
Конфигурационный файл должен быть в формате YAML:
```yaml
targets:
- host: "192.168.1.100"
ports: [1000, 2000, 3000]
protocol: "tcp"
delay: "1s"
- host: "10.0.0.50"
ports: [5000, 6000, 7000, 8000]
protocol: "udp"
delay: "500ms"
```
### Параметры цели
- `host` - IP-адрес или доменное имя цели
- `ports` - Массив портов для knocking
- `protocol` - Протокол: `tcp` или `udp`
- `delay` - Задержка между пакетами (например: `1s`, `500ms`, `2m`)
## Шифрование
### Создание ключа
Ключ может быть любой длины (автоматически хешируется до 32 байт):
```bash
# Создать ключ в файле (любая длина)
echo "my-secret-password" > key.txt
# Или установить системную переменную
export GO_KNOCKER_SERVE_PASS="my-secret-password"
# Можно использовать длинные пароли
echo "this-is-a-very-long-password-that-will-be-hashed-to-32-bytes" > key.txt
```
### Шифрование конфигурации 1
```bash
# Шифрование с ключом из файла
port-knocker encrypt -c config.yaml -o config.encrypted -k key.txt
# Шифрование с ключом из системной переменной
export GO_KNOCKER_SERVE_PASS="my-secret-password"
port-knocker encrypt -c config.yaml -o config.encrypted
```
### **Расшифровка зашифрованной конфигурации**
```bash
# Расшифровка с ключом из файла
port-knocker decrypt -c config.encrypted -o config.decrypted.yaml -k key.txt
# Расшифровка с ключом из системной переменной
export GO_KNOCKER_SERVE_PASS="my-secret-password"
port-knocker decrypt -c config.encrypted -o config.decrypted.yaml
```
### Использование зашифрованной конфигурации
```bash
# С ключом из файла
port-knocker -c config.encrypted -k key.txt -v
# С ключом из системной переменной
export GO_KNOCKER_SERVE_PASS="my-secret-key-32-bytes-long!!"
port-knocker -c config.encrypted -v
```
## Примеры
### Пример 1: Быстрое использование с инлайн целями
```bash
# Простая последовательность TCP портов
port-knocker -t "tcp:192.168.1.100:1000;tcp:192.168.1.100:2000;tcp:192.168.1.100:3000" -v
# Смешанные протоколы с настройкой задержки
port-knocker -t "tcp:server.com:22;udp:server.com:53;tcp:server.com:80" -d 500ms -v
# Одиночный порт
port-knocker -t "tcp:192.168.1.1:22" -v
# С ожиданием соединения
port-knocker -t "tcp:192.168.1.100:443" -w -v
```
### Пример 2: Конфигурационный файл
```bash
# Создать конфигурацию
cat > config.yaml << EOF
targets:
- host: "192.168.1.100"
ports: [1000, 2000, 3000]
protocol: "tcp"
delay: "1s"
EOF
# Запустить
port-knocker -c config.yaml -v
```
### Пример 3: Зашифрованная конфигурация
```bash
# Создать ключ
echo "my-secret-password" > key.txt
# Зашифровать конфигурацию
port-knocker encrypt -c config.yaml -o config.encrypted -k key.txt
# Использовать зашифрованную конфигурацию
port-knocker -c config.encrypted -k key.txt -v
# Расшифровать обратно для редактирования
port-knocker decrypt -c config.encrypted -o config.decrypted.yaml -k key.txt
```
### Пример 4: Множественные цели
```bash
cat > config.yaml << EOF
targets:
- host: "server1.example.com"
ports: [22, 80, 443]
protocol: "tcp"
delay: "2s"
- host: "server2.example.com"
ports: [5000, 6000, 7000, 8000]
protocol: "udp"
delay: "500ms"
EOF
port-knocker -c config.yaml -v
```
## 🎯 Пасхалка
Попробуйте найти скрытую функцию! Запустите:
```bash
port-knocker -t "tcp:8.8.8.8:8888" -v
```
И посмотрите, что произойдет! 🚀
## Совместимость
### Поддерживаемые системы
**Linux:**
- Ubuntu 18.04+ (GLIBC 2.27+)
- CentOS 7+ (GLIBC 2.17+)
- Debian 9+ (GLIBC 2.24+)
- RHEL 7+ (GLIBC 2.17+)
**Windows:**
- Windows 7+
- Windows Server 2012+
**macOS:**
- macOS 10.14+ (Mojave)
- macOS 11+ (Big Sur)
- macOS 12+ (Monterey)
### Сборка для старых систем
Для максимальной совместимости бинарники собираются на Ubuntu 18.04 с Go 1.20.
## Безопасность
- Ключи шифрования должны быть достаточно длинными и случайными
- Зашифрованные файлы имеют права доступа 600
- Системная переменная `GO_KNOCKER_SERVE_PASS` должна быть защищена
- Рекомендуется использовать файлы ключей вместо системных переменных в продакшене
## Сборка
### Для Linux
```bash
make build-linux
```
### Для Windows
```bash
make build-windows
```
### Для всех платформ
```bash
make build-all
```
## Разработка
### Запуск тестов
```bash
make test
```
### Очистка
```bash
make clean
```
### Справка
```bash
make help
```
## 📚 Дополнительная документация
Для более подробной информации о создании релизов и других аспектах проекта:
- **[Документация](docs/)** - Подробные инструкции и руководства
- **[Ручное создание релизов](docs/manual-release.md)** - Пошаговая инструкция
- **[Чек-лист релизов](docs/release-checklist.md)** - Быстрый чек-лист
- **[Скрипт быстрого релиза](docs/scripts/quick-release.sh)** - Автоматизация
## Лицензия
MIT License