# Port Knocker Утилита для отправки port knocking пакетов на удаленные серверы с поддержкой шифрования конфигурации. **Версия**: 1.0.10 ## Возможности - ✅ Отправка TCP и UDP пакетов - ✅ Настраиваемые последовательности портов - ✅ Зашифрованные конфигурационные файлы - ✅ Автоматическое определение зашифрованных файлов - ✅ Ключи шифрования из файла или системной переменной - ✅ Кроссплатформенная сборка (Linux, Windows, macOS) - ✅ Совместимость со старыми версиями ОС (Ubuntu 18.04+) - ✅ Подробный вывод для отладки - ✅ **Расшифровка зашифрованных конфигов в открытый YAML (команда decrypt)** - ✅ **Пасхалка для любознательных пользователей** 🎯 ## Установка ### Сборка из исходников ```bash # Клонировать репозиторий git clone 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