2 @section Сценарии использования
5 * Доступность почтового сервера время от времени: UsecaseMailRU.
6 * Легковесная и быстрая замена POP3/IMAP4: UsecasePOPRU.
7 * Ненадёжный/дорогой канал связи: UsecaseUnreliableRU.
8 * Медленная/дорогая связь для больших объёмов данных, плохой QoS: UsecaseQoSRU.
9 * Экстремальные наземные окружающие условия, нет связи: UsecaseNoLinkRU.
10 * Частные, изолированные MitM/Sybil-устойчивые сети: UsecaseF2FRU.
11 * Высоко защищённые изолированные компьютеры с воздушным зазором: UsecaseAirgapRU.
12 * Обход сетевой цензуры, здоровье: UsecaseCensorRU.
13 * Разведка, шпионаж, тайная агентура: UsecaseSpyRU.
17 @subsection Доступность почтового сервера время от времени
19 Представьте, что у вас есть собственный @url{http://www.postfix.org/,
20 Postfix} SMTP сервер подключённый к Интернету. Но вы читаете и пишете
21 почтовые сообщения на своём ноутбуке, который подключается к нему лишь
22 время от времени. Как опустошить очередь из ожидающих сообщений когда
25 Одна из возможностей это войти на сервер и сделать что-то типа
26 @command{postqueue -f}, но по-умолчанию у вас есть только несколько дней
27 на это, плюс отправитель будет получать уведомления о том, что его
28 сообщение всё ещё не доставлено. Кроме того, вы должны использовать
29 безопасный канал связи (SSH, VPN, итд).
31 Другая возможность это использовать POP3/IMAP4 сервер, но это слишком
32 переусложнённо и громоздко для такой простой задачи. Не вариант.
33 @url{https://ru.wikipedia.org/wiki/KISS_(%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF),
36 Просто скажите вашим обоим Postfix-ам (на сервере и ноутбуке) отправлять
37 сообщения через NNCP (@ref{nncp-mail}) на заданный узел. Это делается
38 аналогично тому как с UUCP, и описано в
39 @url{http://www.postfix.org/UUCP_README.html, документации Postfix}.
41 Читайте @ref{Postfix, здесь} для более подробной информации. Вся почта
42 будет сохранятся в NNCP @ref{Spool, спуле}, который после обмена данных
43 и распаковки вызовет локальный @command{sendmail} для доставки почты,
44 как-будто это произошло на этой же машине.
47 @subsection Легковесная и быстрая замена POP3/IMAP4
49 @ref{nncp-daemon} может быть соединён с @ref{nncp-caller} длительное
50 время -- он создаёт TCP соединение на многие часы. Когда SMTP сервер
51 получает письмо, то вызывает @ref{nncp-mail} для создания исходящего
52 зашифрованного пакета. Демон ежесекундно проверяет исходящую директорию
53 и сразу же посылает оповещение о недоставленных пакетах противоположной
54 стороне, которая сразу же их может скачать.
56 Всего несколько дюжин байт оповещают о входящих пакетах, дюжины байт
57 начинающие доставку этих пакетов. Почтовые пакеты сжимаются (POP3 и
58 IMAP4, как правило, нет). У вас легковесный, сжатый, надёжный канал
59 связи с низкими задержками для почты, с сильным шифрованием и
60 двусторонней аутентификацией!
62 @node UsecaseUnreliableRU
63 @subsection Ненадёжный/дорогой канал связи
65 Представьте, что у вас медленный модем/радио/спутниковый канал связи,
66 который часто обрывается и вызывает timeout у TCP. Не все HTTP серверы
67 поддерживают возобновляемые скачивания. SMTP вообще не поддерживает
68 продолжение оборванного приёма и тяжёлые сообщения становится очень
69 проблематично получить. Более того, каждый обрыв может приводить к
70 отсылке данных с самого начала, что не всегда по карману.
72 Просто отправьте вашу @ref{nncp-mail, почту} и @ref{nncp-file, файлы}
73 через NNCP. Вы сможете использовать или offline методы доставки --
74 читайте о них в следующем разделе, либо использовать поставляемый NNCP
75 @ref{nncp-daemon, TCP демон}.
80 % nncp-file file_i_want_to_send bob:
81 % nncp-file another_file bob:movie.avi
84 добавят в очередь отправки два файла для узла @emph{bob}.
85 Выстрелил-и-забыл! Теперь это работа демона (или offline передачи)
86 доставить частями эти файлы до удалённой системы когда она будет
90 @subsection Медленная/дорогая связь для больших объёмов данных, плохой QoS
92 Представьте, что относительно дешёвый 2 TiB переносной жёсткий диск вы
93 отдаёте кому-нибудь утром каждый день (и забираете назад вечером). Это
94 равносильно 185 мегабитному качественному однонаправленному каналу
95 связи. Как насчёт большего количества и бОльших жёстких дисков? Этот
96 метод обмена данными называется
97 @url{https://ru.wikipedia.org/wiki/%D0%A4%D0%BB%D0%BE%D0%BF%D0%BF%D0%B8%D0%BD%D0%B5%D1%82,
100 NNCP поддерживает @ref{Niceness, приоритезацию трафика}: каждый пакет
101 имеет уровень "приятности", который гарантирует что он будет обработан
102 раньше или позднее остальных. Почти все команды имеют соответствующую
106 % nncp-file -nice 32 myfile node:dst
107 % nncp-xfer -nice 192 /mnt/shared
108 % nncp-call -nice 224 bob
112 Огромные файлы могут быть разбиты на маленькие @ref{Chunked, части},
113 давая возможность передачи, по сути, любых объёмов используя накопители
116 @node UsecaseNoLinkRU
117 @subsection Экстремальные наземные окружающие условия, нет связи
119 Это, в некотором роде, вариант очень медленного канала связи. Offline
120 методы доставки -- единственный выбор. Просто отправьте, файлы как было
121 показано в предыдущем разделе, но используйте переносные накопители для
122 передачи пакетов другим узлам.
124 Представьте, что вы послали два файла узлу @emph{bob}. Вставьте USB
125 устройство (SD гораздо предпочтительнее!) хранения, подмонтируйте и
126 запустите @ref{nncp-xfer}:
129 % nncp-xfer -node bob /media/usbstick
132 чтобы скопировать все исходящие пакеты относящиеся к @emph{bob}.
133 Используйте @option{-mkdir} опцию чтобы создать все необходимые
134 директории на накопителе, если их нет (например когда запускаемся первый
137 Если вы используете один и тот же накопитель для передачи данных и к
138 @emph{bob} и к @emph{alice}, то тогда просто не указывайте
139 @option{-node} опцию, чтобы скопировать все доступные исходящие пакеты.
142 % nncp-xfer /media/usbstick
145 Размонтируйте и передайте накопитель Бобу и Алисе. Когда они вставят
146 накопитель в свои компьютеры, то выполнят точно такую же команду:
149 % nncp-xfer /media/usbstick
152 чтобы найти все пакеты относящиеся к их узлу и локально скопируют для
153 дальнейшей обработки. @command{nncp-xfer} это единственная команда
154 используемая с переносными устройствами хранения.
157 @subsection Частные, изолированные MitM/Sybil-устойчивые сети
159 Все Интернет соединения могут быть прослушаны и сфальсифицированы. Вы
160 @strong{вынуждены} использовать шифрование и аутентификацию для
161 безопасности. Но очень сложно обезопасить метаданные, которые утекают
162 при каждой online сессии. Когда вы запускаете свой новый сверкающий
163 программный сервер, то имейте в виду, что может существовать огромное
164 количество поддельных узлов пытающихся произвести
165 @url{https://en.wikipedia.org/wiki/Sybil_attack, Sybil атаку}. Открытые
166 узел-к-узлу (peer-to-peer) сети опасны.
168 Наиболее популярный криптографический протокол в Интернете это
169 @url{https://ru.wikipedia.org/wiki/TLS, TLS}, который крайне сложно
170 правильно реализовать и сконфигурировать для двусторонней аутентификации
171 собеседников. Не все конфигурации TLS обладают свойством
172 @url{https://ru.wikipedia.org/wiki/Perfect_forward_secrecy, совершенной
173 прямой секретности} -- все ранее перехваченные пакеты могут быть
174 прочтены если приватные ключи скомпрометированы.
176 Друг-к-другу (friend-to-friend) сети, "тёмные сети" (darknet) могут
177 нивелировать возможные риски связанные с поддельными и фиктивными
178 узлами. Хотя они и сложнее в поддержке и требуют больше затрат на
181 @ref{nncp-daemon, TCP демон} NNCP использует
182 @url{http://noiseprotocol.org/, Noise-IK} протокол для двусторонней
183 аутентификации узлов и предоставляет эффективный (оба участника могут
184 отослать полезную нагрузку сразу же в самом первом пакете) безопасный
185 транспорт с свойством совершенной прямой секретности.
188 % nncp-daemon -bind [::]:5400
190 запустит TCP демон, который будет слушать входящие соединения на всех
196 попытается подключиться к известному TCP-адресу узла @emph{bob} (взятого
197 из конфигурационного файла), послать все связанные с ним исходящие
198 пакеты и получить от него. Все прерванные передачи будут автоматически
201 @node UsecaseAirgapRU
202 @subsection Высокозащищённые изолированные компьютеры с воздушным зазором
204 Если вы сильно беспокоитесь о безопасности, то компьютер с
205 @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),
206 воздушным зазором} может будет вашим единственным позволительным
207 выбором. Компьютер без каких-либо модемов, проводных и беспроводных
208 сетей. Очевидно, что единственная возможность обмениваться почтой и
209 файлами -- использовать физически переносимые устройства хранения типа
210 CD-ROM, жёстких дисков, SD, лент и USB накопителей (@strong{худший}
211 вариант, из-за сложности подобных устройств).
213 Предполагаем что у вас есть ещё один собственный узел, стоящий "до"
214 безопасного, который делает базовые проверки полученных накопителей,
215 возможно перезаписывая данные с USB/жёстких дисков на CD-RW.
217 NNCP из коробки поддерживает ретрансляцию пакетов.
224 lan: [fe80::5400%igb0]:5400
230 Такой @ref{Configuration, конфигурационный файл} говорит что у нас есть
231 два известных соседа: @emph{bob} и @emph{bob-airgap}. @emph{bob}
232 доступен через online соединение, используя @emph{lan} адрес.
233 @emph{bob-airgap} доступен путём посылки промежуточного ретранслируемого
234 пакета через узел @emph{bob}.
236 Любая команда типа @command{nncp-file myfile bob-airgap:} автоматически
237 создаст инкапсулированный пакет: один непосредственно для целевой точки,
238 а другой несущий его для промежуточного узла.
240 Имейте в виду, что узел-ретранслятор ничего не знает о внутреннем
241 пакете, кроме его полного размера и приоритета. Все промежуточные пакеты
242 тоже зашифрованы: используя хорошо известную технологию
243 @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,
244 луковой маршрутизации}. @emph{bob} не может прочитать пакеты
247 @node UsecaseCensorRU
248 @subsection Обход сетевой цензуры, здоровье
250 Это тоже подвид плохого канала связи. Некоторые правительства склонны к
251 запрету @strong{любого} вида личного (приватного) общения между людьми,
252 разрешая только доставку развлекательного контента и доступ к популярным
253 социальным сетям (которые уже вовсю наводнены рекламой, локально
254 исполняемым @url{https://www.gnu.org/philosophy/free-sw.ru.html,
255 проприетарным} JavaScript кодом (для слежкой за действиями пользователя,
256 сбором данных), бесстыдно и бессовестно эксплуатируя базовые потребности
259 Это их естественное желание. Но никто вас не заставляет насильно
260 подчиняться огромным корпорациям типа Apple, Google или Microsoft. Ваш
261 выбор это создавать изолированные друг-к-другу сети с кучами безобидного
262 контента и приватными сообщениями. Только хищники тихо наблюдают за
263 своими жертвами в мире млекопитающих -- слежка и чувство что вы жертва,
264 сделавшая что-то плохое, вредит вашему здоровью.
267 @subsection Разведка, шпионаж, тайная агентура
269 Эти ребята знают насколько небезопасен Интернет, несовместим с
270 понятием приватности. Им необходим быстрый сброс и забор данных. Нет
271 возможности провести несколько итераций туда-обратно (round trip) --
272 только сбросить данные, выстрелить и забыть. Опять же, это может быть
273 переносной накопитель и/или
274 @url{https://en.wikipedia.org/wiki/USB_dead_drop, USB тайник} (dead drop),
275 @url{https://en.wikipedia.org/wiki/PirateBox, PirateBox}ы,
276 @url{https://en.wikipedia.org/wiki/Short-range_agent_communications,
277 связь малой дальности (SRAC)}. Короткоживущие сети малой дальности типа
278 Bluetooth и WiFi могут быть и довольно быстрыми, позволяя быстро
279 "выстреливать" порциями исходящих пакетов.
281 Очень важное свойство -- компрометация этих тайников или накопителей не
282 должна быть ни фатальна, ни даже опасна. Пакеты посылаемые через сети
283 или обмениваемые через устройства -- @ref{Encrypted, зашифрованы} по
284 принципу точка-точка (но, к сожалению, без совершенной прямой
285 секретности). Никаких имён файлов, получателей почтовых сообщений не
288 Общение узлов между собой происходит в, так называемой, @ref{Spool,
289 спул} области: директории содержащей только необработанные зашифрованные
290 пакеты. После передачи пакета вы всё-равно не сможете его прочитать:
291 необходимо запустить другую фазу: @ref{nncp-toss, распаковку}, которая
292 использует ваши приватные криптографические ключи. То есть, даже если вы
293 потеряете свой компьютер, устройства хранения и тому прочее -- это не
294 так плохо, потому что вы не носите с собой приватные ключи (ведь так?),
295 вы не "распаковываете" эти пакеты сразу же на том же самом устройстве.
296 Распаковка (чтение этих зашифрованных пакетов с извлечением переданных
297 файлов и почтовых сообщений) может и должна бы быть произведена на
298 отдельном компьютере (@ref{nncp-cfgmin} команда может помочь с созданием
299 конфигурационного файла без приватных ключей для этой цели).