332 lines
9.7 KiB
Markdown
332 lines
9.7 KiB
Markdown
# 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
|