2 @section Сценарии использования
5 * Доступность почтового сервера время от времени: UsecaseMailRU.
6 * Легковесная и быстрая замена POP3/IMAP4: UsecasePOPRU.
7 * Ненадёжный/дорогой канал связи: UsecaseUnreliableRU.
8 * Медленная/дорогая связь для больших объёмов данных, плохой QoS: UsecaseQoSRU.
9 * Экстремальные наземные окружающие условия, нет связи: UsecaseNoLinkRU.
10 * Односторонняя широковещательная связь: UsecaseBroadcastRU.
11 * Частные, изолированные MitM/Sybil-устойчивые сети: UsecaseF2FRU.
12 * Высоко защищённые изолированные компьютеры с воздушным зазором: UsecaseAirgapRU.
13 * Обход сетевой цензуры, здоровье: UsecaseCensorRU.
14 * Разведка, шпионаж, тайная агентура: UsecaseSpyRU.
18 @subsection Доступность почтового сервера время от времени
20 Представьте, что у вас есть собственный @url{http://www.postfix.org/,
21 Postfix} SMTP сервер подключённый к Интернету. Но вы читаете и пишете
22 почтовые сообщения на своём ноутбуке, который подключается к нему лишь
23 время от времени. Как опустошить очередь из ожидающих сообщений когда
26 Одна из возможностей это войти на сервер и сделать что-то типа
27 @command{postqueue -f}, но по-умолчанию у вас есть только несколько дней
28 на это, плюс отправитель будет получать уведомления о том, что его
29 сообщение всё ещё не доставлено. Кроме того, вы должны использовать
30 безопасный канал связи (SSH, VPN, итд).
32 Другая возможность это использовать POP3/IMAP4 сервер, но это слишком
33 переусложнённо и громоздко для такой простой задачи. Не вариант.
34 @url{https://ru.wikipedia.org/wiki/KISS_(%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF),
37 Просто скажите вашим обоим Postfix-ам (на сервере и ноутбуке) отправлять
38 сообщения через NNCP (@ref{nncp-exec}) на заданный узел. Это делается
39 аналогично тому как с UUCP, и описано в
40 @url{http://www.postfix.org/UUCP_README.html, документации Postfix}.
42 Читайте @ref{Postfix, здесь} для более подробной информации. Вся почта
43 будет сохранятся в NNCP @ref{Spool, спуле}, который после обмена данных
44 и распаковки вызовет локальный @command{sendmail} для доставки почты,
45 как-будто это произошло на этой же машине.
48 @subsection Легковесная и быстрая замена POP3/IMAP4
50 @ref{nncp-daemon} может быть соединён с @ref{nncp-caller} длительное
51 время -- он создаёт TCP соединение на многие часы. Когда SMTP сервер
52 получает письмо, то вызывает @ref{nncp-exec} для создания исходящего
53 зашифрованного пакета. Демон ежесекундно проверяет исходящую директорию
54 и сразу же посылает оповещение о недоставленных пакетах противоположной
55 стороне, которая сразу же их может скачать.
57 Всего несколько дюжин байт оповещают о входящих пакетах, дюжины байт
58 начинающие доставку этих пакетов. Почтовые пакеты сжимаются (POP3 и
59 IMAP4, как правило, нет). У вас легковесный, сжатый, надёжный канал
60 связи с низкими задержками для почты, с сильным шифрованием и
61 двусторонней аутентификацией!
63 @node UsecaseUnreliableRU
64 @subsection Ненадёжный/дорогой канал связи
66 Представьте, что у вас медленный модем/радио/спутниковый канал связи,
67 который часто обрывается и вызывает timeout у TCP. Не все HTTP серверы
68 поддерживают возобновляемые скачивания. SMTP вообще не поддерживает
69 продолжение оборванного приёма и тяжёлые сообщения становится очень
70 проблематично получить. Более того, каждый обрыв может приводить к
71 отсылке данных с самого начала, что не всегда по карману.
73 Просто отправьте вашу @ref{nncp-exec, почту} и @ref{nncp-file, файлы}
74 через NNCP. Вы сможете использовать или offline методы доставки --
75 читайте о них в следующем разделе, либо использовать поставляемый NNCP
76 @ref{nncp-daemon, TCP демон}.
81 % nncp-file file_i_want_to_send bob:
82 % nncp-file another_file bob:movie.avi
85 добавят в очередь отправки два файла для узла @emph{bob}.
86 Выстрелил-и-забыл! Теперь это работа демона (или offline передачи)
87 доставить частями эти файлы до удалённой системы когда она будет
91 @subsection Медленная/дорогая связь для больших объёмов данных, плохой QoS
93 Представьте, что относительно дешёвый 2 TiB переносной жёсткий диск вы
94 отдаёте кому-нибудь утром каждый день (и забираете назад вечером). Это
95 равносильно 185 мегабитному качественному однонаправленному каналу
96 связи. Как насчёт большего количества и бОльших жёстких дисков? Этот
97 метод обмена данными называется
98 @url{https://ru.wikipedia.org/wiki/%D0%A4%D0%BB%D0%BE%D0%BF%D0%BF%D0%B8%D0%BD%D0%B5%D1%82,
101 NNCP поддерживает @ref{Niceness, приоритезацию трафика}: каждый пакет
102 имеет уровень "приятности", который гарантирует что он будет обработан
103 раньше или позднее остальных. Почти все команды имеют соответствующую
107 % nncp-file -nice 32 myfile node:dst
108 % nncp-xfer -nice 192 /mnt/shared
109 % nncp-call -nice 224 bob
113 Огромные файлы могут быть разбиты на маленькие @ref{Chunked, части},
114 давая возможность передачи, по сути, любых объёмов используя накопители
117 Вы также можете использовать CD-ROM и ленточные накопители:
120 % nncp-bundle -tx bob | cdrecord -tao -
121 % nncp-bundle -tx bob | dd of=/dev/sa0 bs=10240
124 @node UsecaseNoLinkRU
125 @subsection Экстремальные наземные окружающие условия, нет связи
127 Это, в некотором роде, вариант очень медленного канала связи. Offline
128 методы доставки -- единственный выбор. Просто отправьте, файлы как было
129 показано в предыдущем разделе, но используйте переносные накопители для
130 передачи пакетов другим узлам.
132 Представьте, что вы послали два файла узлу @emph{bob}. Вставьте USB
133 устройство (SD гораздо предпочтительнее!) хранения, подмонтируйте и
134 запустите @ref{nncp-xfer}:
137 % nncp-xfer -node bob /media/usbstick
140 чтобы скопировать все исходящие пакеты относящиеся к @emph{bob}.
141 Используйте @option{-mkdir} опцию чтобы создать все необходимые
142 директории на накопителе, если их нет (например когда запускаемся первый
145 Если вы используете один и тот же накопитель для передачи данных и к
146 @emph{bob} и к @emph{alice}, то тогда просто не указывайте
147 @option{-node} опцию, чтобы скопировать все доступные исходящие пакеты.
150 % nncp-xfer /media/usbstick
153 Размонтируйте и передайте накопитель Бобу и Алисе. Когда они вставят
154 накопитель в свои компьютеры, то выполнят точно такую же команду:
157 % nncp-xfer /media/usbstick
160 чтобы найти все пакеты относящиеся к их узлу и локально скопируют для
161 дальнейшей обработки. @command{nncp-xfer} это единственная команда
162 используемая с переносными устройствами хранения.
164 @node UsecaseBroadcastRU
165 @subsection Односторонняя широковещательная связь
167 Иногда у вас есть ёмкий, но односторонний, канал связи, например
168 широковещательный сигнал со спутника. Вы не можете использовать online
169 @ref{Sync, протокол синхронизации}, потому что он требует двустороннего
172 Вы можете использовать, так называемые, @ref{Bundles, пачки} и потоково
173 отсылать их. Они -- всего-лишь последовательность @ref{Encrypted,
174 зашифрованных пакетов}, которые вы можете принять.
177 % nncp-bundle -tx alice bob eve ... | команда для отправки широковещательной рассылки
178 % команда для приёма широковещательной рассылки | nncp-bundle -rx
181 Встроенная возможность определять дубляжи пакетов позволит вам
182 переотправлять широковещательные рассылки время от времени, повышая
183 шансы на то, что получатель примет их, регулярно слушая рассылку.
186 @subsection Частные, изолированные MitM/Sybil-устойчивые сети
188 Все Интернет соединения могут быть прослушаны и сфальсифицированы. Вы
189 @strong{вынуждены} использовать шифрование и аутентификацию для
190 безопасности. Но очень сложно обезопасить метаданные, которые утекают
191 при каждой online сессии. Когда вы запускаете свой новый сверкающий
192 программный сервер, то имейте в виду, что может существовать огромное
193 количество поддельных узлов пытающихся произвести
194 @url{https://en.wikipedia.org/wiki/Sybil_attack, Sybil атаку}. Открытые
195 узел-к-узлу (peer-to-peer) сети опасны.
197 Наиболее популярный криптографический протокол в Интернете это
198 @url{https://ru.wikipedia.org/wiki/TLS, TLS}, который крайне сложно
199 правильно реализовать и сконфигурировать для двусторонней аутентификации
200 собеседников. Не все конфигурации TLS обладают свойством
201 @url{https://ru.wikipedia.org/wiki/Perfect_forward_secrecy, совершенной
202 прямой секретности} -- все ранее перехваченные пакеты могут быть
203 прочтены если приватные ключи скомпрометированы.
205 Друг-к-другу (friend-to-friend) сети, "тёмные сети" (darknet) могут
206 нивелировать возможные риски связанные с поддельными и фиктивными
207 узлами. Хотя они и сложнее в поддержке и требуют больше затрат на
210 @ref{nncp-daemon, TCP демон} NNCP использует
211 @url{http://noiseprotocol.org/, Noise-IK} протокол для двусторонней
212 аутентификации узлов и предоставляет эффективный (оба участника могут
213 отослать полезную нагрузку сразу же в самом первом пакете) безопасный
214 транспорт с свойством совершенной прямой секретности.
217 % nncp-daemon -bind [::]:5400
219 запустит TCP демон, который будет слушать входящие соединения на всех
225 попытается подключиться к известному TCP-адресу узла @emph{bob} (взятого
226 из конфигурационного файла), послать все связанные с ним исходящие
227 пакеты и получить от него. Все прерванные передачи будут автоматически
230 @node UsecaseAirgapRU
231 @subsection Высокозащищённые изолированные компьютеры с воздушным зазором
233 Если вы сильно беспокоитесь о безопасности, то компьютер с
234 @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),
235 воздушным зазором} может будет вашим единственным позволительным
236 выбором. Компьютер без каких-либо модемов, проводных и беспроводных
237 сетей. Очевидно, что единственная возможность обмениваться почтой и
238 файлами -- использовать физически переносимые устройства хранения типа
239 CD-ROM, жёстких дисков, SD, лент и USB накопителей (@strong{худший}
240 вариант, из-за сложности подобных устройств).
242 Предполагаем что у вас есть ещё один собственный узел, стоящий "до"
243 безопасного, который делает базовые проверки полученных накопителей,
244 возможно перезаписывая данные с USB/жёстких дисков на CD-RW.
246 NNCP из коробки поддерживает ретрансляцию пакетов.
253 lan: [fe80::5400%igb0]:5400
259 Такой @ref{Configuration, конфигурационный файл} говорит что у нас есть
260 два известных соседа: @emph{bob} и @emph{bob-airgap}. @emph{bob}
261 доступен через online соединение, используя @emph{lan} адрес.
262 @emph{bob-airgap} доступен путём посылки промежуточного ретранслируемого
263 пакета через узел @emph{bob}.
265 Любая команда типа @command{nncp-file myfile bob-airgap:} автоматически
266 создаст инкапсулированный пакет: один непосредственно для целевой точки,
267 а другой несущий его для промежуточного узла.
269 Имейте в виду, что узел-ретранслятор ничего не знает о внутреннем
270 пакете, кроме его полного размера и приоритета. Все промежуточные пакеты
271 тоже зашифрованы: используя хорошо известную технологию
272 @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,
273 луковой маршрутизации}. @emph{bob} не может прочитать пакеты
276 @node UsecaseCensorRU
277 @subsection Обход сетевой цензуры, здоровье
279 Это тоже подвид плохого канала связи. Некоторые правительства склонны к
280 запрету @strong{любого} вида личного (приватного) общения между людьми,
281 разрешая только доставку развлекательного контента и доступ к популярным
282 социальным сетям (которые уже вовсю наводнены рекламой, локально
283 исполняемым @url{https://www.gnu.org/philosophy/free-sw.ru.html,
284 проприетарным} JavaScript кодом (для слежкой за действиями пользователя,
285 сбором данных), бесстыдно и бессовестно эксплуатируя базовые потребности
288 Это их естественное желание. Но никто вас не заставляет насильно
289 подчиняться огромным корпорациям типа Apple, Google или Microsoft. Ваш
290 выбор это создавать изолированные друг-к-другу сети с кучами безобидного
291 контента и приватными сообщениями. Только хищники тихо наблюдают за
292 своими жертвами в мире млекопитающих -- слежка и чувство что вы жертва,
293 сделавшая что-то плохое, вредит вашему здоровью.
296 @subsection Разведка, шпионаж, тайная агентура
298 Эти ребята знают насколько небезопасен Интернет, несовместим с
299 понятием приватности. Им необходим быстрый сброс и забор данных. Нет
300 возможности провести несколько итераций туда-обратно (round trip) --
301 только сбросить данные, выстрелить и забыть. Опять же, это может быть
302 переносной накопитель и/или
303 @url{https://en.wikipedia.org/wiki/USB_dead_drop, USB тайник} (dead drop),
304 @url{https://en.wikipedia.org/wiki/PirateBox, PirateBox}ы,
305 @url{https://en.wikipedia.org/wiki/Short-range_agent_communications,
306 связь малой дальности (SRAC)}. Короткоживущие сети малой дальности типа
307 Bluetooth и WiFi могут быть и довольно быстрыми, позволяя быстро
308 "выстреливать" порциями исходящих пакетов.
310 Очень важное свойство -- компрометация этих тайников или накопителей не
311 должна быть ни фатальна, ни даже опасна. Пакеты посылаемые через сети
312 или обмениваемые через устройства -- @ref{Encrypted, зашифрованы} по
313 принципу точка-точка (но, к сожалению, без совершенной прямой
314 секретности). Никаких имён файлов, получателей почтовых сообщений не
317 Общение узлов между собой происходит в, так называемой, @ref{Spool,
318 спул} области: директории содержащей только необработанные зашифрованные
319 пакеты. После передачи пакета вы всё-равно не сможете его прочитать:
320 необходимо запустить другую фазу: @ref{nncp-toss, распаковку}, которая
321 использует ваши приватные криптографические ключи. То есть, даже если вы
322 потеряете свой компьютер, устройства хранения и тому прочее -- это не
323 так плохо, потому что вы не носите с собой приватные ключи (ведь так?),
324 вы не "распаковываете" эти пакеты сразу же на том же самом устройстве.
325 Распаковка (чтение этих зашифрованных пакетов с извлечением переданных
326 файлов и почтовых сообщений) может и должна бы быть произведена на
327 отдельном компьютере (@ref{nncp-cfgmin} команда может помочь с созданием
328 конфигурационного файла без приватных ключей для этой цели).