Можно ли зашифровать сообщения через netcat?
Я знаю, что можно общаться в терминале Linux, используя netcat
, Я хочу знать, возможно ли зашифровать netcat
коммуникации.
Я сделал чат, слушая на ПК-1
nc -l 1234
И подключение к моему IP на другой машине.
nc $IP 1234
3 ответа
Это возможно - однако я не думаю, что nc делает это сам: echo "Words" | gpg -e
создаст зашифрованную версию на stdout; Вы можете указать принимающего пользователя как обычно.
Если вы передадите это в другую копию gpg как gpg -d
Затем он запрашивает парольную фразу - это будет запомнено на некоторое время, что позволяет вести разговор.
Следовательно, echo "words" | gpg -e | nc target 4321
отправит, и nc -l 4321 | gpg -d
буду слушать.
Также посмотрите этот вопрос, который похож.
TL;DR:
получатель:
nc -l 1234 | gpg --decrypt --batch --passphrase "MySuperSecret123" > output.file
отправитель:
cat MyFile | gpg --symmetric --cipher-algo AES256 --batch --passphrase "MySuperSecret123" | nc destination.server.tld 1234
ДЛИННАЯ ВЕРСИЯ
Вот решение, которое я использую для копирования необработанных жестких дисков через netcat (также можно использовать для физических операций с виртуальными в Linux или необработанного копирования ВМ).
Я использую для загрузки исходный код на livecd, если мне приходится читать диски, в котором иногда отсутствует двоичный файл openssl, но он всегда поставляется с двоичным файлом gpg.
Конечно, используя netcat через Интернет, я хочу, чтобы мои данные были по крайней мере зашифрованы с использованием алгоритма шифрования goodenough(TM):
Сторона приемника настройки:
nc -l 8888 | gpg --decrypt --batch --passphrase "MySuperSecret123" |zstd -d | pv > output.file
Объяснение:
- Настройте netcat для подключения к порту 8888 (измените порт в соответствии с вашим брандмауэром)
- Расшифровать данные, полученные netcat
- Распаковать данные
- Необязательно: показать статистику с помощью pv, отказ от ответственности: УДАЛИТЬ, ЕСЛИ У ВАС НЕ УСТАНОВЛЕНО PV
- Записать вывод в файл
Примечание : pv — это программа, которая выводит статистику канала. Если нет, просто удалите его.
на моей стороне отправителя:
dd id=/dev/sda status=progress | zstd --fast -T0 | gpg --compression-algo none --symmetric --cipher-algo AES256 --batch --passphrase "MySuperSecret123" | nc destination.server.tld 8888
Объяснение:
- Чтение жесткого диска с помощью dd и отображение прогресса
- Сжимайте содержимое, используя очень быстрый алгоритм zstd, также используя столько потоков, сколько ядер процессора.
- Шифрование данных с помощью GPG
- Отправить через netcat на порт 8888 (конечно, изменить номер порта в зависимости от стороны получателя)
Больше производительности, сэр?
GPG доступен практически везде. Если у вас есть openssl, это, вероятно, значительно ускорит процесс шифрования/дешифрования.
На стороне получателя запустите:
nc -l 1234 | openssl enc -aes-256-cbc -pbkdf2 -d -k "MySuperSecretPassword" | zstd -d | pv > sda.raw
На стороне отправителя запустите это:
dd if=/dev/sda status=progress | zstd --fast -T0 | openssl enc -aes-256-cbc -pbkdf2 -k "MySuperSecretPassword" | nc <destination> <port>
Опять руда производительность сэр?
В некоторых случаях, например при отправке/получении zfs, могут быть узкие места ввода-вывода, в основном на стороне получателя. Здесь может помочь замена netcat на mbuffer, так как он будет буферизовать ввод-вывод, а не ждать отправителя. Вот пример использованияmbuffer
с буфером данных 1 ГБ и буфером отправки/получения 128 КБ:
Со стороны ресивера заменитьnc -l 1234
сmbuffer -s 128k -m 1G -4 -l 1234
На стороне отправителя заменитьnc dest.server.tld 1234
сmbuffer -s 128k -m 1G -O dest.server.tld:1234
При передаче zfs я мог перейти с 2 Гбит/с на 3,5 Гбит/с, используя mbuffer вместо netcat.
Сам по себе netcat не имеет средств управления шифрованием или аутентификацией, поэтому, хотя трафик может быть зашифрован с помощью OpenSSL или GnuPG с использованием некоторого умного трубопровода и небольшого количества петель на стороне прослушивания, если вы находитесь в ненадежной сети, вы можете проиграть гонку. условие для чтения с использованием этого и netcat не позволяет нескольким клиентам без умных сценариев... но я здесь не для того, чтобы bash-инструмент, а вместо этого уведомить вас о Bash-инструменте;-)
Обратите внимание, что это очень экспериментально, и вы должны действительно проверить журнал сборки Travis-CI, чтобы точно узнать, что он делает, подсказать, открыть второе окно / вкладку и следовать сценариям с включенным travis.yml, чтобы увидеть все работающие / протестированные функции на данный момент. разработаны.
Второй совет, следующие примеры команд лучше в моем опыте с шифрованием случайных строк.
Var_input="$@"
Var_gpg_opts="--armor --batch --no-tty --recipient user@host.domain --encrypt"
Var_log_file="${PWD}/output.enc
## Output to terminal
cat <<<"${Var_input}" | gpg ${Var_gpg_opts}
## Save output to file
cat <<<"${Var_input}" | gpg ${Var_gpg_opts} >> "${Var_log_file}"
Тем не менее, расшифровка многосетевого выходного файла немного сложнее... поэтому вот ссылка на сценарий, написанный для этого, потому что это слишком долго, чтобы публиковать здесь.