init
This commit is contained in:
331
back/README.md
Normal file
331
back/README.md
Normal file
@@ -0,0 +1,331 @@
|
||||
# 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
|
Reference in New Issue
Block a user