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 устройство хранения, подмонтируйте и запустите @ref{nncp-xfer}:
128 % nncp-xfer -node bob /media/usbstick
131 чтобы скопировать все исходящие пакеты относящиеся к @emph{bob}.
132 Используйте @option{-mkdir} опцию чтобы создать все необходимые
133 директории на накопителе, если их нет (например когда запускаемся первый
136 Если вы используете один и тот же накопитель для передачи данных и к
137 @emph{bob} и к @emph{alice}, то тогда просто не указывайте
138 @option{-node} опцию, чтобы скопировать все доступные исходящие пакеты.
141 % nncp-xfer /media/usbstick
144 Размонтируйте и передайте накопитель Бобу и Алисе. Когда они вставят
145 накопитель в свои компьютеры, то выполнят точно такую же команду:
148 % nncp-xfer /media/usbstick
151 чтобы найти все пакеты относящиеся к их узлу и локально скопируют для
152 дальнейшей обработки. @command{nncp-xfer} это единственная команда
153 используемая с переносными устройствами хранения.
156 @subsection Частные, изолированные MitM/Sybil-устойчивые сети
158 Все Интернет соединения могут быть прослушаны и сфальсифицированы. Вы
159 @strong{вынуждены} использовать шифрование и аутентификацию для
160 безопасности. Но очень сложно обезопасить метаданные, которые утекают
161 при каждой online сессии. Когда вы запускаете свой новый сверкающий
162 программный сервер, то имейте в виду, что может существовать огромное
163 количество поддельных узлов пытающихся произвести
164 @url{https://en.wikipedia.org/wiki/Sybil_attack, Sybil атаку}. Открытые
165 узел-к-узлу (peer-to-peer) сети опасны.
167 Наиболее популярный криптографический протокол в Интернете это
168 @url{https://ru.wikipedia.org/wiki/TLS, TLS}, который крайне сложно
169 правильно реализовать и сконфигурировать для двусторонней аутентификации
170 собеседников. Не все конфигурации TLS обладают свойством
171 @url{https://ru.wikipedia.org/wiki/Perfect_forward_secrecy, совершенной
172 прямой секретности} -- все ранее перехваченные пакеты могут быть
173 прочтены если приватные ключи скомпрометированы.
175 Друг-к-другу (friend-to-friend) сети, "тёмные сети" (darknet) могут
176 нивелировать возможные риски связанные с поддельными и фиктивными
177 узлами. Хотя они и сложнее в поддержке и требуют больше затрат на
180 @ref{nncp-daemon, TCP демон} NNCP использует
181 @url{http://noiseprotocol.org/, Noise-IK} протокол для двусторонней
182 аутентификации узлов и предоставляет эффективный (оба участника могут
183 отослать полезную нагрузку сразу же в самом первом пакете) безопасный
184 транспорт с свойством совершенной прямой секретности.
187 % nncp-daemon -bind [::]:5400
189 запустит TCP демон, который будет слушать входящие соединения на всех
195 попытается подключиться к известному TCP-адресу узла @emph{bob} (взятого
196 из конфигурационного файла), послать все связанные с ним исходящие
197 пакеты и получить от него. Все прерванные передачи будут автоматически
200 @node UsecaseAirgapRU
201 @subsection Высокозащищённые изолированные компьютеры с воздушным зазором
203 Если вы сильно беспокоитесь о безопасности, то компьютер с
204 @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),
205 воздушным зазором} может будет вашим единственным позволительным
206 выбором. Компьютер без каких-либо модемов, проводных и беспроводных
207 сетей. Очевидно, что единственная возможность обмениваться почтой и
208 файлами -- использовать физически переносимые устройства хранения типа
209 CD-ROM, жёстких дисков, лент и USB накопителей (худший вариант, из-за
210 сложности подобных устройств).
212 Предполагаем что у вас есть ещё один собственный узел, стоящий "до"
213 безопасного, который делает базовые проверки полученных накопителей,
214 возможно перезаписывая данные с USB/жёстких дисков на CD-RW.
216 NNCP из коробки поддерживает ретрансляцию пакетов.
223 lan: [fe80::5400%igb0]:5400
229 Такой @ref{Configuration, конфигурационный файл} говорит что у нас есть
230 два известных соседа: @emph{bob} и @emph{bob-airgap}. @emph{bob}
231 доступен через online соединение, используя @emph{lan} адрес.
232 @emph{bob-airgap} доступен путём посылки промежуточного ретранслируемого
233 пакета через узел @emph{bob}.
235 Любая команда типа @command{nncp-file myfile bob-airgap:} автоматически
236 создаст инкапсулированный пакет: один непосредственно для целевой точки,
237 а другой несущий его для промежуточного узла.
239 Имейте в виду, что узел-ретранслятор ничего не знает о внутреннем
240 пакете, кроме его полного размера и приоритета. Все промежуточные пакеты
241 тоже зашифрованы: используя хорошо известную технологию
242 @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,
243 луковой маршрутизации}. @emph{bob} не может прочитать пакеты
246 @node UsecaseCensorRU
247 @subsection Обход сетевой цензуры, здоровье
249 Это тоже подвид плохого канала связи. Некоторые правительства склонны к
250 запрету @strong{любого} вида личного (приватного) общения между людьми,
251 разрешая только доставку развлекательного контента и доступ к популярным
252 социальным сетям (которые уже вовсю наводнены рекламой, локально
253 исполняемым @url{https://www.gnu.org/philosophy/free-sw.ru.html,
254 проприетарным} JavaScript кодом (для слежкой за действиями пользователя,
255 сбором данных), бесстыдно и бессовестно эксплуатируя базовые потребности
258 Это их естественное желание. Но никто вас не заставляет насильно
259 подчиняться огромным корпорациям типа Apple, Google или Microsoft. Ваш
260 выбор это создавать изолированные друг-к-другу сети с кучами безобидного
261 контента и приватными сообщениями. Только хищники тихо наблюдают за
262 своими жертвами в мире млекопитающих -- слежка и чувство что вы жертва,
263 сделавшая что-то плохое, вредит вашему здоровью.
266 @subsection Разведка, шпионаж, тайная агентура
268 Эти ребята знают насколько небезопасен Интернет, несовместим с
269 понятием приватности. Им необходим быстрый сброс и забор данных. Нет
270 возможности провести несколько итераций туда-обратно (round trip) --
271 только сбросить данные, выстрелить и забыть. Опять же, это может быть
272 переносной накопитель и/или
273 @url{https://en.wikipedia.org/wiki/USB_dead_drop, USB тайник} (dead drop),
274 @url{https://en.wikipedia.org/wiki/PirateBox, PirateBox}ы,
275 @url{https://en.wikipedia.org/wiki/Short-range_agent_communications,
276 связь малой дальности (SRAC)}. Короткоживущие сети малой дальности типа
277 Bluetooth и WiFi могут быть и довольно быстрыми, позволяя быстро
278 "выстреливать" порциями исходящих пакетов.
280 Очень важное свойство -- компрометация этих тайников или накопителей не
281 должна быть ни фатальна, ни даже опасна. Пакеты посылаемые через сети
282 или обмениваемые через устройства -- @ref{Encrypted, зашифрованы} по
283 принципу точка-точка (но, к сожалению, без совершенной прямой
284 секретности). Никаких имён файлов, получателей почтовых сообщений не
287 Общение узлов между собой происходит в, так называемой, @ref{Spool,
288 спул} области: директории содержащей только необработанные зашифрованные
289 пакеты. После передачи пакета вы всё-равно не сможете его прочитать:
290 необходимо запустить другую фазу: @ref{nncp-toss, распаковку}, которая
291 использует ваши приватные криптографические ключи. То есть, даже если вы
292 потеряете свой компьютер, устройства хранения и тому прочее -- это не
293 так плохо, потому-что вы не носите с собой приватные ключи (ведь так?),
294 вы не "распаковываете" эти пакеты сразу же на том же самом устройстве.
295 Распаковка (чтение этих зашифрованных пакетов с извлечением переданных
296 файлов и почтовых сообщений) может и должна бы быть произведена на
297 отдельном компьютере (@ref{nncp-cfgmin} команда может помочь с созданием
298 конфигурационного файла без приватных ключей для этой цели).