Port Knocker
Утилита для отправки port knocking пакетов на удаленные серверы с поддержкой шифрования конфигурации.
Версия: 1.0.10
Возможности
- ✅ Отправка TCP и UDP пакетов
- ✅ Настраиваемые последовательности портов
- ✅ Зашифрованные конфигурационные файлы
- ✅ Автоматическое определение зашифрованных файлов
- ✅ Ключи шифрования из файла или системной переменной
- ✅ Кроссплатформенная сборка (Linux, Windows, macOS)
- ✅ Совместимость со старыми версиями ОС (Ubuntu 18.04+)
- ✅ Подробный вывод для отладки
- ✅ Расшифровка зашифрованных конфигов в открытый YAML (команда decrypt)
- ✅ Пасхалка для любознательных пользователей 🎯
Установка
Сборка из исходников
# Клонировать репозиторий
git clone <repository-url>
cd port-knocker
# Установить зависимости
make deps
# Собрать для текущей платформы
make build
# Или собрать для всех платформ
make build-all
Установка в систему
make install
Использование
Основная команда
# С файлом конфигурации
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
(инлайн цели), но не оба одновременно.
Шифрование конфигурации
# Используя глобальную опцию --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
Расшифровка зашифрованного конфига
# Используя глобальную опцию --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:
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
- Массив портов для knockingprotocol
- Протокол:tcp
илиudp
delay
- Задержка между пакетами (например:1s
,500ms
,2m
)
Шифрование
Создание ключа
Ключ может быть любой длины (автоматически хешируется до 32 байт):
# Создать ключ в файле (любая длина)
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
# Шифрование с ключом из файла
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
Расшифровка зашифрованной конфигурации
# Расшифровка с ключом из файла
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
Использование зашифрованной конфигурации
# С ключом из файла
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: Быстрое использование с инлайн целями
# Простая последовательность 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: Конфигурационный файл
# Создать конфигурацию
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: Зашифрованная конфигурация
# Создать ключ
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: Множественные цели
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
🎯 Пасхалка
Попробуйте найти скрытую функцию! Запустите:
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
make build-linux
Для Windows
make build-windows
Для всех платформ
make build-all
Разработка
Запуск тестов
make test
Очистка
make clean
Справка
make help
📚 Дополнительная документация
Для более подробной информации о создании релизов и других аспектах проекта:
- Документация - Подробные инструкции и руководства
- Ручное создание релизов - Пошаговая инструкция
- Чек-лист релизов - Быстрый чек-лист
- Скрипт быстрого релиза - Автоматизация
Лицензия
MIT License