From 741fcceb414687d42c2c267b842cdf59fe94652c Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sat, 29 Apr 2017 16:53:13 +0300 Subject: [PATCH] Use cases on russian page --- doc/about.ru.texi | 4 +- doc/about.texi | 2 + doc/russian.texi | 2 + doc/usecases.ru.texi | 293 +++++++++++++++++++++++++++++++++++++++++++ doc/usecases.texi | 44 ++++--- makedist.sh | 1 + 6 files changed, 325 insertions(+), 21 deletions(-) create mode 100644 doc/usecases.ru.texi diff --git a/doc/about.ru.texi b/doc/about.ru.texi index 5c6bb78..07e093d 100644 --- a/doc/about.ru.texi +++ b/doc/about.ru.texi @@ -27,12 +27,14 @@ NNCP (Node to Node copy) это набор утилит упрощающий б воздушным зазором} (air-gap). Но также существует и online TCP демон с полнодуплексной возобновляемой передачей данных. +Смотрите на возможные @ref{Сценарии использования, сценарии использования}! + NNCP это @url{https://www.gnu.org/philosophy/pragmatic.ru.html, копилефт} @url{https://www.gnu.org/philosophy/free-sw.ru.html, свободное программное обеспечение}: лицензировано под условиями @url{https://www.gnu.org/licenses/gpl-3.0.ru.html, GNU GPLv3+}. Оно должно работать на всех @url{https://ru.wikipedia.org/wiki/POSIX, -POSX}-совместимых системах. Лёгкая интеграция с существующими +POSIX}-совместимых системах. Лёгкая интеграция с существующими @url{https://ru.wikipedia.org/wiki/SMTP, SMTP} серверами. Единственный конфигурационный @url{http://yaml.org/, YAML} файл. diff --git a/doc/about.texi b/doc/about.texi index f994f2b..eb306ad 100644 --- a/doc/about.texi +++ b/doc/about.texi @@ -21,6 +21,8 @@ dead drops} and @url{https://en.wikipedia.org/wiki/Air_gap_(networking), air-gapped} computers support. But online TCP daemon with full-duplex resumable data transmission exists. +Look for possible @ref{Use cases, use cases}! + NNCP is @url{https://www.gnu.org/philosophy/pragmatic.html, copylefted} @url{https://www.gnu.org/philosophy/free-sw.html, free software} licenced under @url{https://www.gnu.org/licenses/gpl-3.0.html, GNU GPLv3+}. diff --git a/doc/russian.texi b/doc/russian.texi index 054a1c3..022e7ca 100644 --- a/doc/russian.texi +++ b/doc/russian.texi @@ -4,7 +4,9 @@ @menu * Подробнее об утилитах NNCP: Об утилитах. * Сравнение с существующими решениями: Сравнение. +* Сценарии использования:: @end menu @include about.ru.texi @include comparison.ru.texi +@include usecases.ru.texi diff --git a/doc/usecases.ru.texi b/doc/usecases.ru.texi new file mode 100644 index 0000000..6376c40 --- /dev/null +++ b/doc/usecases.ru.texi @@ -0,0 +1,293 @@ +@node Сценарии использования +@section Сценарии использования + +@menu +* Доступность почтового сервера время от времени: UsecaseMailRU. +* Легковесная и быстрая замена POP3/IMAP4: UsecasePOPRU. +* Ненадёжный/дорогой канал связи: UsecaseUnreliableRU. +* Медленная/дорогая связь для больших объёмов данных, плохой QoS: UsecaseQoSRU. +* Экстремальные наземные окружающие условия, нет связи: UsecaseNoLinkRU. +* Частные, изолированные MitM/Sybil-устойчивые сети: UsecaseF2FRU. +* Высоко защищённые изолированные компьютеры с воздушным зазором: UsecaseAirgapRU. +* Обход сетевой цензуры, здоровье: UsecaseCensorRU. +* Разведка, шпионаж, тайная агентура: UsecaseSpyRU. +@end menu + +@node UsecaseMailRU +@subsection Доступность почтового сервера время от времени + +Представьте, что у вас есть собственный @url{http://www.postfix.org/, +Postfix} SMTP сервер подключённый к Интернету. Но вы читаете и пишете +почтовые сообщения на своём ноутбуке, который подключается к нему лишь +время от времени. Как опустошить очередь из ожидающих сообщений когда +ноутбук подключён? + +Одна из возможностей это войти на сервер и сделать что-то типа +@command{postqueue -f}, но по-умолчанию у вас есть только несколько дней +на это, плюс отправитель будет получать уведомления о том что его +сообщение всё ещё не доставлено. Кроме того, вы должны использовать +безопасный канал связи (SSH, VPN, итд). + +Другая возможность это использовать POP3/IMAP4 сервер, но это слишком +переусложнённо и громоздко для такой простой задачи. Не вариант. +@url{https://ru.wikipedia.org/wiki/KISS_(%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF), +KISS}! + +Просто скажите вашим обоим Postfix-ам (на сервере и ноутбуке) отправлять +сообщения через NNCP (@ref{nncp-mail}) на заданный узел. Это делается +аналогично тому как с UUCP, и описано в +@url{http://www.postfix.org/UUCP_README.html, документации Postfix}. + +Читайте @ref{Postfix, здесь} для более подробной информации. Вся почта +будет сохранятся в NNCP @ref{Spool, спуле}, который после обмена данных +и распаковки вызовет локальный @command{sendmail} для доставки почты, +как будто это произошло на этой же машине. + +@node UsecasePOPRU +@subsection Легковесная и быстрая замена POP3/IMAP4 + +@ref{nncp-daemon} может быть соединён с @ref{nncp-caller} длительное +время -- он создаёт TCP соединение на многие часы. Когда SMTP сервер +получает письмо, то вызывает @ref{nncp-mail} для создания исходящего +зашифрованного пакета. Демон ежесекундно проверяет исходящую директорию +и сразу же посылает оповещение о недоставленных пакетах противоположной +стороне, которая сразу же их может скачать. + +Всего несколько дюжин байтов оповещают о входящих пакетах, дюжины байт +начинающие доставку этих пакетов. Почтовые пакеты сжимаются (POP3 и +IMAP4, как правило, нет). У вас легковесный, сжатый, надёжный, с низкими +задержками канал связи для почты с сильным шифрованием и двусторонней +аутентификацией! + +@node UsecaseUnreliableRU +@subsection Ненадёжный/дорогой канал связи + +Представьте, что у вас медленный модем/радио/спутниковый канал связи, +который часто обрывается и вызывает timeout у TCP. Не все HTTP серверы +поддерживают возобновляемые скачивания. SMTP вообще не поддерживает +возобновление оборванного приёма и тяжёлые сообщения становится очень +проблематично получить. Более того, каждый обрыв может приводить к +отсылке данных с самого начала, что не всегда по карману. + +Просто отправьте вашу @ref{nncp-mail, почту} и @ref{nncp-file, файлы} +через NNCP. Вы сможете использовать или offline методы доставки -- +читайте о них в следующем разделе, либо использовать поставляемый NNCP +@ref{nncp-daemon, TCP демон}. + +Команды: + +@verbatim +% nncp-file file_i_want_to_send bob: +% nncp-file another_file bob:movie.avi +@end verbatim + +добавят в очередь отправки два файла для узла @emph{bob}. Выстрелил и +забыл! Теперь это работа демона (или offline передачи) доставить частями +эти файлы до удалённой системы когда она будет доступна. + +@node UsecaseQoSRU +@subsection Медленная/дорогая связь для больших объёмов данных, плохой QoS + +Представьте, что относительно дешёвый 2 TiB переносной жёсткий диск вы +отдаёте кому-нибудь утром каждый день (и забираете назад вечером). Это +равносильно 185 мегабитному качественному однонаправленному каналу +связи. Как насчёт большего количества и бОльших жёстких дисков? Этот +метод обмена данными называется +@url{https://ru.wikipedia.org/wiki/%D0%A4%D0%BB%D0%BE%D0%BF%D0%BF%D0%B8%D0%BD%D0%B5%D1%82, +флоппинет}. + +NNCP поддерживает @ref{Niceness, приоритезацию трафика}: каждый пакет +имеет уровень "приятности", который гарантирует что он будет обработан +раньше или позднее остальных. Почти все команды имеют соответствующую +опцию: + +@verbatim +% nncp-file -nice 32 myfile node:dst +% nncp-xfer -nice 192 /mnt/shared +% nncp-call -nice 224 bob +[...] +@end verbatim + +@node UsecaseNoLinkRU +@subsection Экстремальные наземные окружающие условия, нет связи + +Это, в некотором роде, вариант очень медленного канала связи. Offline +методы доставки -- единственный выбор. Просто отправьте, файлы как было +показано в предыдущем разделе, но используйте переносные накопители для +передачи пакетов другим узлам. + +Представьте, что вы послали два файла узлу @emph{bob}. Вставьте USB +устройство хранения, подмонтируйте и запустите @ref{nncp-xfer}: + +@verbatim +% nncp-xfer -node bob /media/usbstick +@end verbatim + +чтобы скопировать все исходящие пакеты относящиеся к @emph{bob}. +Используйте @option{-mkdir} опцию чтобы создать все необходимые +директории на накопителе, если их нет (например когда запускаемся первый +раз). + +Если вы используете один и тот же накопитель для передачи данных и к +@emph{bob} и к @emph{alice}, то тогда просто не указывайте +@option{-node} опцию, чтобы скопировать все доступные исходящие пакеты. + +@verbatim +% nncp-xfer /media/usbstick +@end verbatim + +Размонтируйте и передайте накопитель Бобу и Алисе. Когда они вставят +накопитель в свои компьютеры, то выполнят точно такую же команду: + +@verbatim +% nncp-xfer /media/usbstick +@end verbatim + +чтобы найти все пакеты относящиеся к их узлу и локально скопируют для +дальнейшей обработки. @command{nncp-xfer} это единственная команда +используемая с переносными устройствами хранения. + +@node UsecaseF2FRU +@subsection Частные, изолированные MitM/Sybil-устойчивые сети + +Все Интернет соединения могут быть прослушаны и сфальсифицированы. Вы +@strong{вынуждены} использовать шифрование и аутентификацию для +безопасности. Но очень сложно обезопасить метаданные, которые утекают +при каждой online сессии. Когда вы запускаете свой новый сверкающий +программный сервер, то имейте в виду, что может существовать огромное +количество поддельных узлов пытающихся произвести +@url{https://en.wikipedia.org/wiki/Sybil_attack, Sybil атаку}. Открытые +узел-к-узлу (peer-to-peer) сети опасны. + +Наиболее популярный криптографический протокол в Интернете это +@url{https://ru.wikipedia.org/wiki/TLS, TLS}, который крайне сложно +правильно реализовать и сконфигурировать для двусторонней аутентификации +собеседников. Не все конфигурации TLS обладают свойством +@url{https://ru.wikipedia.org/wiki/Perfect_forward_secrecy, совершенной +прямой секретности} -- все ранее перехваченные пакеты могут быть +прочтены если приватные ключи скомпрометированы. + +Друг-к-другу (friend-to-friend) сети, "тёмные сети" (darknet) могут +нивелировать возможные риски связанные с поддельными и фиктивными +узлами. Хотя они и сложнее в поддержке и требуют больше затрат на +построение. + +@ref{nncp-daemon, TCP демон} NNCP использует +@url{http://noiseprotocol.org/, Noise-IK} протокол для двусторонней +аутентификации узлов и предоставляет эффективный (оба участника могут +отослать полезную нагрузку сразу же в самом первом пакете) безопасный +транспорт с свойством совершенной прямой секретности. + +@verbatim +% nncp-daemon -bind [::]:5400 +@end verbatim +запустит TCP демон, который будет слушать входящие соединения на всех +интерфейсах. + +@verbatim +% nncp-call bob +@end verbatim +попытается подключиться к известному TCP-адресу узла @emph{bob} (взятого +из конфигурационного файла), послать все связанные с ним исходящие +пакеты и получить от него. Все прерванные передачи будут автоматически +возобновлены. + +@node UsecaseAirgapRU +@subsection Высокозащищённые изолированные компьютеры с воздушным зазором + +Если вы сильно беспокоитесь о безопасности, то компьютер с +@url{https://ru.wikipedia.org/wiki/%D0%92%D0%BE%D0%B7%D0%B4%D1%83%D1%88%D0%BD%D1%8B%D0%B9_%D0%B7%D0%B0%D0%B7%D0%BE%D1%80_(%D1%81%D0%B5%D1%82%D0%B8_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85), +воздушным зазором} может будет вашим единственным позволительным +выбором. Компьютер без каких-либо модемов, проводных и беспроводных +сетей. Очевидно, что единственная возможность обмениваться почтой и +файлами -- использовать физически переносимые устройства хранения типа +CD-ROM, жёстких дисков, лент и USB накопителей (худший вариант, из-за +сложности подобных устройств). + +Предполагаем что у вас есть ещё один собственный узел, стоящий "до" +безопасного, который делает базовые проверки полученных накопителей, +возможно перезаписывая данные с USB/жёстких дисков на CD-RW. + +NNCP из коробки поддерживает ретрансляцию пакетов. + +@verbatim +neigh: + bob: + [...] + addrs: + lan: [fe80::5400%igb0]:5400 + bob-airgap: + [...] + via: [bob] +@end verbatim + +Такой @ref{Configuration, конфигурационный файл} говорит что у нас есть +два известных соседа: @emph{bob} и @emph{bob-airgap}. @emph{bob} +доступен через online соединение, используя @emph{lan} адрес. +@emph{bob-airgap} доступен путём посылки промежуточного ретранслируемого +пакета через узел @emph{bob}. + +Любая команда типа @command{nncp-file myfile bob-airgap:} автоматически +создаст инкапсулированный пакет: один непосредственно для целевой точки, +а другой несущий его для промежуточного узла. + +Имейте в виду, что узел-ретранслятор ничего не знает о внутреннем +пакете, кроме его полного размера и приоритета. Все промежуточные пакеты +тоже зашифрованы: используя хорошо известную технологию +@url{https://ru.wikipedia.org/wiki/%D0%9B%D1%83%D0%BA%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BC%D0%B0%D1%80%D1%88%D1%80%D1%83%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F, +луковой маршрутизации}. @emph{bob} не может прочитать пакеты +@emph{bob-airgap}. + +@node UsecaseCensorRU +@subsection Обход сетевой цензуры, здоровье + +Это тоже подвид плохого канала связи. Некоторые правительства склонны к +запрету @strong{любого} вида личного общения между людьми, разрешая +только доставку развлекательного контента и доступ к популярным +социальным сетям (которые уже вовсю наводнены рекламой, локально +исполняемым @url{https://www.gnu.org/philosophy/free-sw.ru.html, +проприетарным} JavaScript кодом (для слежкой за действиями +пользователя, сбором данных), бесстыдно и бессовестно эксплуатируя +базовые потребности человека в общении). + +Это их естественное желание. Но никто вас не заставляет насильно +подчиняться огромным корпорациям типа Apple, Google или Microsoft. Ваш +выбор это создавать изолированные друг-к-другу сети с кучами безобидного +контента и приватными сообщениями. Только хищники тихо наблюдают за +своими жертвами в мире млекопитающих -- слежка и чувство что вы жертва, +сделавшая что-то плохое, вредит вашему здоровью. + +@node UsecaseSpyRU +@subsection Разведка, шпионаж, тайная агентура + +Эти ребята знают насколько небезопасное место Интернет, несовместимое с +понятием приватности. Им необходим быстрый сброс и забор данных. Без +возможности нескольких итераций туда-обратно (round trip) -- только +сбросить данные, выстрелить и забыть. Опять же, это может быть +переносной накопитель и/или +@url{https://en.wikipedia.org/wiki/USB_dead_drop, USB тайник}, +@url{https://en.wikipedia.org/wiki/PirateBox, PirateBox}ы, +@url{https://en.wikipedia.org/wiki/Short-range_agent_communications, +связь малой дальности (SRAC)}. Короткоживущие сети малой дальности типа +Bluetooth и WiFi могут быть и довольно быстрыми, позволяя быстро +"выстреливать" порциями исходящих пакетов. + +Очень важное свойство -- компрометация этих тайников или накопителей не +должна быть ни фатальна, ни даже опасна. Пакеты посылаемые через сети +или обмениваемые через устройства -- @ref{Encrypted, зашифрованы} по +принципу точка-точка (но, к сожалению, без совершенной прямой +секретности). Никаких имён файлов, получателей почтовых сообщений не +видно. + +Общение узлов между собой происходит в, так называемой, @ref{Spool, +спул} области: директории содержащей только необработанные зашифрованные +пакеты. После передачи пакета вы всё-равно не сможете его прочитать: +необходимо запустить другую фазу: @ref{nncp-toss, распаковку}, которая +использует ваши приватные криптографические ключи. То есть, даже если вы +потеряете свой компьютер, устройства хранения и тому прочее -- это не +так плохо, потому-что вы не носите с собой приватные ключи (ведь так?), +вы не "распаковываете" эти пакеты сразу же на том же самом устройстве. +Распаковка (чтение этих зашифрованных пакетов с извлечением переданных +файлов и почтовых сообщений) может и должна бы быть произведена на +отдельном компьютере (@ref{nncp-mincfg} команда может помочь с созданием +конфигурационного файла без приватных ключей для этой цели). diff --git a/doc/usecases.texi b/doc/usecases.texi index b72681c..4297178 100644 --- a/doc/usecases.texi +++ b/doc/usecases.texi @@ -9,7 +9,7 @@ * Extreme terrestrial environments, no link: UsecaseNoLink. * Private, isolated MitM/Sybil-resistant networks: UsecaseF2F. * Highly secure isolated air-gap computers: UsecaseAirgap. -* Network censorship bypassing: UsecaseCensor. +* Network censorship bypassing, health: UsecaseCensor. * Reconnaissance, spying, intelligence, covert agents: UsecaseSpy. @end menu @@ -27,7 +27,8 @@ receive notification emails that his messages still are not delivered yet. Also you must have secure link (SSH, VPN, etc). Another possibility is to use POP3/IMAP4 servers, but this is too -overcomplicated and bloated for the simple task. Not an option. KISS! +overcomplicated and bloated for the simple task. Not an option. +@url{https://en.wikipedia.org/wiki/KISS_principle, KISS}! Just tell both of your Postfixes (on the server and notebook) to drop email as a mail via NNCP (@ref{nncp-mail}) to specified node. This is @@ -76,9 +77,9 @@ The command: % nncp-file another_file bob:movie.avi @end verbatim -will queue two files for sending to @code{emph} node. Fire and forget! -Now this is daemon's job (or offline transfer) to send this file part by -part to remote system when it is available. +will queue two files for sending to @emph{bob} node. Fire and forget! +Now this is daemon's job (or offline transfer) to send this files part +by part to remote system when it is available. @node UsecaseQoS @section Slow/expensive link for high-volume data, bad QoS @@ -120,14 +121,14 @@ option to create related directory on USB storage if they are missing (for example when running for the first time). If you use single storage device to transfer data both to @emph{bob} and -@emph{alice}, then just omit @option{-node} option to copy all existing -outgoing packets to that storage device. +@emph{alice}, then just omit @option{-node} option to copy all available +outgoing packets. @verbatim % nncp-xfer /media/usbstick @end verbatim -Unmount it and transfer somehow to Bob and Alice. When they will insert +Unmount it and transfer storage to Bob and Alice. When they will insert it in their computers, they will use exactly the same command: @verbatim @@ -135,8 +136,8 @@ it in their computers, they will use exactly the same command: @end verbatim to find all packets related to their node and copy them locally for -further processing. nncp-xfer is the only command used with removable -devices. +further processing. @command{nncp-xfer} is the only command used with +removable devices. @node UsecaseF2F @section Private, isolated MitM/Sybil-resistant networks @@ -219,18 +220,20 @@ automatically create an encapsulated packet: one for the destination endpoint, and other carrying it for intermediate relaying node. Pay attention that relaying node knows nothing about the packet inside, -but just its size and priority. Transition packets are encrypted too. -@emph{bob} can not read @emph{bob-airgap}'s packets. +but just its size and priority. Transition packets are encrypted too: +using well-known @url{https://en.wikipedia.org/wiki/Onion_routing, onion +routing} technology. @emph{bob} can not read @emph{bob-airgap}'s packets. @node UsecaseCensor -@section Network censorship bypassing +@section Network censorship bypassing, health This is some kind of bad link too. Some governments tend to forbid @strong{any} kind of private communication between people, allowing only entertainment content delivering and popular social networks access (that are already bloated with advertisements, locally executed -proprietary JavaScript code (for spying on user activities, collect data -on them), shamelessly exploiting the very basic human need of communication). +@url{https://www.gnu.org/philosophy/free-sw.html, proprietary} +JavaScript code (for spying on user activities, collect data on them), +shamelessly exploiting the very basic human need of communication). This is their natural wish. But nobody forces you to obey huge corporations like Apple, Google or Microsoft. It is your choice to @@ -245,9 +248,9 @@ feeling that you are the victim that has already done something wrong. Those guys know how Internet is a dangerous place incompatible with privacy. They require quick, fast dropping and picking of data. No possibility of many round-trips -- just drop the data, fire-and-forget. -It could be either removable media again, or -@url{https://en.wikipedia.org/wiki/USB_dead_drop, USB dead drops}, or -@url{https://en.wikipedia.org/wiki/PirateBox, PirateBox}es, or +It could be either removable media again and/or +@url{https://en.wikipedia.org/wiki/USB_dead_drop, USB dead drops}, +@url{https://en.wikipedia.org/wiki/PirateBox, PirateBox}es, @url{https://en.wikipedia.org/wiki/Short-range_agent_communications, SRAC}. Short lived short range networks like Bluetooth and WiFi can also be pretty fast, allowing to quickly fire chunks of queued packets. @@ -258,7 +261,7 @@ the network and exchanged via those devices are end-to-end @ref{Encrypted, encrypted} (but unfortunately lacking forward secrecy). No filenames, mail recipients are seen. -All communications are done with so-called @ref{Spool, spool} area: +All node communications are done with so-called @ref{Spool, spool} area: directory containing only those unprocessed encrypted packets. After packet transfer you still can not read any of them: you have to run another stage: @ref{nncp-toss, tossing}, that involves your private @@ -267,4 +270,5 @@ and so on -- it is not so bad, because you are not carrying private keys with it (don't you?), you do not "toss" those packets immediately on the same device. Tossing (reading those encrypted packets and extracting transferred files and mail messages) could and should be done on a -separate computer. +separate computer (@ref{nncp-mincfg} command could help creating +configuration file without private keys for that purpose). diff --git a/makedist.sh b/makedist.sh index 6dcfc93..208517a 100755 --- a/makedist.sh +++ b/makedist.sh @@ -172,6 +172,7 @@ $(git cat-file -p $release | sed -n '6,/^.*BEGIN/p' | sed '$d') ------------------------ >8 ------------------------ Домашняя страница NNCP: http://www.nncpgo.org/ +Коротко об утилитах: http://www.nncpgo.org/Ob-utilitakh.html Исходный код и его подпись для этой версии находятся здесь: -- 2.44.0