Можно ли зашифровать сообщения через 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}"

Тем не менее, расшифровка многосетевого выходного файла немного сложнее... поэтому вот ссылка на сценарий, написанный для этого, потому что это слишком долго, чтобы публиковать здесь.

Другие вопросы по тегам