Большое руководство по сетям и шифрованию трафика в Linux (часть 1) |
||
|
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ Атаки на ИИ Внедрение ИИИИ теория Компьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Промпты. Генеративные запросы Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2025-10-07 12:01 Приветствую вас, читатели Хабра! В этой статье я бы хотел уделить внимание такой вещи как шифрование трафика на Linux системах. Наверное, каждый из нас прекрасно понимает, насколько важна защита нашей приватности. Ведь в эпоху, когда многие компании собирают данные, а иногда хакеры могут перехватить наш трафик, это становится особенно важно. Просто необходимо позаботиться о безопасности своих данных. Например, быть уверенным, что какая-либо корпоративная сеть не прослушивается злоумышленниками. Информационная безопасность сегодня — это не просто мода, а насущная необходимость. Постоянно растет киберпреступность, и защита трафика от перехвата — это основной аспект цифровой жизни человека или бизнеса. В рамках этой статьи мы рассмотрим основные методы шифрования, которые можно использовать в Linux, и разберем, как их внедрить. Мы попытаемся разобраться, как работает криптография на уровне протоколов, как работает сеть в Linux, что такое сквозное шифрование и виртуальные частные сети. Особенно эта статья будет актуальна для людей, которых заботит конфиденциальность и защита данных, в том числе для корпораций. Эта часть — первая, и здесь мы рассмотрим базу (протоколы, работу сетей, напишем скрипт на python для TCP-соединения), а во второй уже затронем тему виртуальных частных сетей и прокси, а также несколько других тем. Давайте разберем для начала, как в принципе работают сети и сетевые протоколы. Если вы знаете, как они работают, то можете пропустить этот раздел и перейти к следующему. Что такое сеть? Сеть — это совокупность связанных между собой различных устройств (компьютеров, серверов, телефонов, и любых других вещей которые подключены к ней, хоть стиральная машина), которые могут обмениваться данными. Сеть использует сетевые протоколы — это правила, по которым происходит обмен данными. Существуют следующие протоколы:
Transmission Control Protocol/Internet Protocol (Стек протоколов TCP/IP) — если сказать простым языком, это набор взаимодействующих протоколов разных уровней, согласно которым происходит обмен данными в сети. Каждый протокол — это набор правил, согласно которым происходит обмен данными. Итого, стек протоколов TCP/IP — это набор наборов правил. Множество протоколов можно классифицировать по сетевым уровням, на котором они работают. Наиболее распространенные сетевые модели — это OSI и TCP/IP. В критичных системах (например DNS) чаще используется UDP. Здесь важна скорость, а не гарантия доставки. Пока отправится TCP пакет, UDP пакет уже успеет три раза вернуться. А в других приложениях, где более важна целостность данных, а не скорость, применяется TCP. Узел сети — это устройство, являющееся частью компьютерной сети. Узлы можно разделить на оконечные и промежуточные: Оконечные узлы — это узлы, которые отправляют и/или принимают какие-либо данные. Простыми словами, это устройства, которые являются получателем или источником информации. Промежуточные узлы — это узлы, которые соединяют оконечные узлы между собой. Например, смартфон через Wi-Fi отправляет запрос к серверу. Смартфон и сервер — оконечные узлы, а Wi-Fi-роутер — это промежуточный узел. ? Проблема века — конфиденциальность. В последнее время началась охота за данными людей. Она всегда была, человек старался контролировать всех, но сейчас она набирает обороты. Ведь взять только многочисленные сервисы — все они имеют рекомендации, а ради них надо собирать терабайты данных. Когда, кто зашел? Что искал? С какой страны? И многое, многое другое. Практически полный отчет на каждого. И даже если не брать интернет-сервисы, то даже простой магазин у вашего дома тоже может составлять досье на вас. Что вы берете, когда. Например, мужчина средних лет заходит в магазин утром, берет пару бутылок воды и фруктов, через два часа возвращается за еще одной бутылкой воды. Из этих данных можно понять, что это спортсмен, который бегает два часа утром и следит за здоровьем. Можно даже узнать его примерное место жительства. Компании и правительственные организации используют целый ряд современных технологий — от куки-файлов веб-сайтов до датчиков, встроенных в машины, а также устройств для сбора беспрецедентных объемов данных о своих клиентах, гражданах, сотрудниках. В их задачи входит оценка настроений и предпочтений, прогнозирование потребностей, повышение производительности труда, выявление мошенничества, отслеживание местонахождения, мониторинг здоровья, контроль безопасности. Большая часть этих данных собирается с благими целями. Однако никто не может ответить на один из самых актуальных вопросов: где проходит граница? Люди хотят быть осведомлены о том, как обрабатываются и хранятся персональные сведения и насколько обеспечена их конфиденциальность. Соблюдаются ли «право на забвение» и множество других международных, государственных и локальных правил безопасности? Или например, как защитить корпоративную сеть в компании от хакерских атак? Вдруг он начнет слушать трафик и сотни важных данных о бизнесе и его сотрудниках попадут в плохие руки. А если это не частная, а государственная фирма? Например, недавно на сайте госзакупок появилась заявка на разработку системы обмена данных между министерством обороны РФ и ФСБ о россиянах, получивших повестки. Система будет использовать XML-файлы и стандартные технологии (REST API и HTTP). Если злоумышленник получит доступ к этой системе, значит он получит доступ к миллионам данных совершеннолетних граждан. Обеспечение безопасности является сложной задачей для любой компании, особенно с развитием облачных сред. С 2020 года все начали переходить на удаленную работу — и ныне это стало своеобразным трендом. Работа из дома означает, что многие используют корпоративные компьютеры и телефоны в личных целях. Однако рабочие устройства могут быть не такими надежными, как кажется. У людей, использующих корпоративные компьютеры и телефоны в личных целях, нередко возникает вопрос: может ли работодатель видеть, какие веб-сайты я посещаю через домашнюю сеть Wi-Fi или находясь дома? В этой статье, как я уже говорил, мы сами попытаемся защитить свой онлайн трафик. ? Какие способы мониторинга трафика? Linux предоставляет огромное количество инструментов для работы и мониторинга сети. Иногда нам приходится отслеживать нагрузку на сеть, дабы определить, что творится "по ту сторону экрана". Особенно часто такие задачи возникают перед системными администраторами, перед которыми стоит задача отслеживать работу сети целой компании. Но также это может быть полезно и обычным пользователям. Если вы смотрите эту статью в интернете, вы уже знаете, зачем нужна сеть. Разве что стоит отметить, что почти все компании имеют какие-то внутренние сервисы и для них организуется так называемая локальная сеть. Но мы ещё к этому придём. Итак, для того, чтобы различные компьютеры с разными операционными системами и программами могли взаимодействовать между собой, существует универсальная сетевая модель, называемая OSI, которая определяет стандарты. Эта модель делит взаимодействие на шаги, так называемые уровни, и каждый уровень имеет свои правила. Набор этих правил определяет, как именно должно происходить взаимодействие и называется протоколом. Названия каких-то протоколов вы наверняка где-то видели — IP, DNS, HTTP. Хотя стандартная модель OSI предполагает 7 уровней, администраторы чаще всего работают со вторым, третьим, четвёртым уровнями и объединяют 5, 6 и 7 уровни в один, чаще всего называя седьмым. Ядро ОС отвечает за реализацию физического, канального, сетевого и транспортного уровней, предоставляя прикладным программам унифицированный интерфейс для работы с сетью. Вернемся к мониторингу. Линукс богат сетевыми утилитами и инструментов для администрирования сетей. Начиная от Давайте рассмотрим утилиту для мониторинга сети После установки выполните команду Перед вами откроется ncurses-интерфейс. Здесь есть монитор трафика, настройки интерфейса, статистика, мониторы и фильтры, а также конфигурация. Например, для просмотра сетевых соединений и статистики трафика для каждого из них выберите IP traffic monitor. Затем выберите сетевой интерфейс. Далее вы увидите все IP адреса, с которыми работает система. Вы увидите количество пакетов, полученный объем данных и прочую информацию. Небольшую справку по этой утилите вы можете увидеть снизу: И давайте рассмотрим еще один инструмент — Для запуска используйте команду: Также можно записывать сетевой трафик в лог: Вот справка по утилите iftop: ? Безопасность на уровне протоколов: SSL/TLS Для безопасной передачи данных между узлами в сети есть специальный защищенный протокол TLS (Transport Layer Security) / SSL (Secure Socket Layers). Цель протокола — обеспечить шифрование данных при передаче. Стоит перед тем, как мы перейдем к самому протоколу, рассказать о сетевой модели OSI (The Open System Interconnection model). Сетевая модель OSI OSI — это базовая иерархическая модель взаимодействия открытых систем. Т.е основа, база, которая описывает механизм передачи данных. Она представляет стандартный способ организации различных аспектов коммуникаций в рамках обмена данными в сети. Поверх 3 уровня, в частности IP адресов были построены такие протоколы передачи данных как TCP, HTTPS, UDP, FTP, ICMP и т.д. Они заботятся о многих вещах: гарантии передачи данных, безопасности и передаче конкретных высокоуровневых структур данных. Модель OSI создали разработчики из International Organization for Standardization (ISO) в далеком 1984 году. Эта модель — база базовая, ее должен знать каждый специалист, который решил изучить работу сетей. А вообще, история разработки этой модели началась с небольшой группы ученых. Основными личностями являются Майк Канепа и Чарльз Бакман. В 1970-х годах эта группа сосредоточилась на создании прототипов систем для компании Honeywell Information System. А в середине 1970-х ученые поняли, что для поддержки машин нужна улучшенная коммуникационная архитектура. В 1980-х годах она стала рабочим продуктом группы взаимодействия открытых систем Международной организации по стандартизации (ISO). Модель не смогла дать полное описание сети и не получила поддержку архитекторов на заре Интернета, который впоследствии нашел отражение в менее предписывающем TCP/IP, в основном под руководством Инженерного совета Интернета (IETF). Стоит поговорить об уровнях OSI
История SSL/TLS Протокол Secure Sockets Layer (SSL) появился на свет благодаря компании Netscape, в 1995 году. Его целью была обеспечение безопасной передачи данных между клиентом и сервером в интернете. Насчитывается несколько версий SSL, каждая из которых более безопасная, чем предыдущая. В 1999 году его заменили на TLS (Transport Layer Security). Но до сих пор упоминают термин SSL для обозначения обоих протоколов. Сайт, где используют SSL/TLS-протокол, отличается тем, что его URL-адрес начинается с «HTTPS», а не «HTTP», что свидетельствует о защищенном соединении. Механика работы TLS/SSL TLS и SSL используют:
Данный протокол широко используется в приложениях, работающих с сетью. Вообще, можно сказать, что это одно и тоже, ведь с версии 3.0 SSL появился его приемник — TLS, но название так прижилось, что до сих пор под SSL чаще всего подразумевают TLS. Когда пользователь заходит на какой-то сайт по HTTPS, браузер запрашивает сертификат у сервера, который высылает копию SSL-сертификата с открытым ключом шифрования. После браузер проверяет и подтверждает этот сертификат. Кроме того, проверяется дата действия сертификата и наличие корневого сертификата, выданного надежным центром сертификации. Если браузер доверяет сертификату, то он генерирует предварительный секрет (pre-master secret) сессии на основе открытого ключа, используя максимально высокий уровень шифрования, который поддерживают обе стороны. Сервер расшифровывает предварительный секрет с помощью своего закрытого ключа, соглашается продолжить коммуникацию и создать общий секрет (master secret), используя определенный вид шифрования. Теперь обе стороны используют симметричный ключ, который действителен только для данной сессии. После ее завершения ключ уничтожается, а при следующем посещении сайта процесс рукопожатия запускается сначала. Принцип работы SSL и TLS — практически один и тот же. Поверх протокола TCP/IP устанавливается защищенный канал, внутри которого передаются данные по прикладному протоколу (HTTP, DNS, FTP, SMTP и другие). Прикладной протокол находится в канале TLS/SSL, а тот в свою очередь уже в TCP/IP. По сути данные передаются именно по TCP/IP, но суть в том, что данные зашифрованы, и расшифровать их может только машина, которая установила соединения. Установка соединения обеспечивается в несколько этапов:
Учитывая, что алгоритм шифрования ассиметричный, расшифровать последовательность может только сервер. В основе ассиметричного шифрования — два ключа (приватный и публичный). Публичным ключом сообщение шифруется, а приватным расшифровывается. Расшифровать ключ при помощи публичного ключа нельзя.
Корневой сертификат В основе работы TLS соединения есть понятие "корневой сертификат". Это сертификат удостоверяющего центра, подпись которым подтверждает, что подписанный сертификат подлинен. В самом сертификате содержится также информация об имени сервера, сроках действия и другие подробности. Естественно, сертификат с истёкшем сроком действия не пригоден к использованию. Запрос на подпись (CSR, Certificate Sign Request) Если нужно получить подписанный сертификат сервера, необходимо сгенерировать CSR, а после отправить его центру, который вернет подписанный сертификат. На основе сгенерированного ключа для шифрования генерируется CSR-файл. Сертификат клиента Такие сертификаты используются при двусторонней верификации, когда клиент проверяет что сервер валидный. И также с обратной стороны — сервер проверяет что клиента не подменили. Такое взаимодействие называется Mutual Authentication. Такой тип аутентификации позволяет повысить уровень безопасности или заменить стандартную аутентификацию через логин и пароль. Хеширование Цель хеш-алгоритма — преобразовывать все содержимое SSL-сертификата в битовую строку фиксированной длины. Для шифрования значения хеша применяется закрытый ключ центра сертификации, который включается в сертификат как подпись. Поговорим подробнее о хешировании. Что объединяет пароль пользователя, подпись сертификата, контрольную сумму, криптовалюту? Хеширование. В основе хеширования лежит хеш-функция. Это функция преобразования данных любой длины в данные заданной длины, и почти гарантирует безопасность данных. Основные принципы хеширования:
Стоит поговорить что такое хеш-коллизии. Коллизия значит, что два разных набора данных предоставляют одинаковый хеш. Из-за этого злоумышленник может ввести неверный пароль, но хеш будет одинаковым и он получит доступ. Алгоритмов хеширования много (md5, sha1, sha256, sha5211, crc-32). Каждый из них использует в своей основе разные алгоритмы, соответственно и разный шанс возникновения коллизии. Есть три семейства алгоритмов хеширования: Таймлайн создания криптографических хеш-функций и прочая информация: Целью хеш-алгоритма, в контексте SSL/TLS, является преобразовать все содержимое сертификата в строку из байт фиксированной длины. Для шифрования значения хеша используется закрытый ключ центра сертификации (подпись). Хеш-алгоритм также использует MAC (message authentication code). Она необходима для проверки целостности передаваемых данных. MAC использует функцию отображения, чтобы представлять данные сообщения как фиксированное значение длины, а потом хеширует сообщение. В протоколе TLS используется HMAC (hashed message authentication code). Его отличие заключается в том, что он использует хеш-функцию сразу с общим секретным ключом. То есть ключ становится частью данных, и для подтверждения подлинности обе стороны должны использовать одинаковые ключи. На сегодняшний день поддерживаются алгоритм хеширования SHA2, и чаще всего используется SHA-256. Он довольно безопасен и не такой большой как SHA-512. Длина слова SHA-512 равна 64 бита, когда как SHA-256 уже 32 бита. И другие значения также больше — количество раундов в цикле равно 80 (вместо 64), а сообщение разбивается на блоки по 1024 бита (вместо 512 бит). Когда-то использовали SHA1, MD5 и т.д., но сегодня они считаются уязвимыми. Хотя иногда даже сегодня можно увидеть MD5 хеши. Давайте попробуем для примера реализовать клиент-серверное приложение на основе TLS (и узнаем что такое протокол Диффи-Хеллмана). Алгоритм Диффи-Хеллмана Это специальный криптографический протокол, который позволяет нескольким сторонам получить общий секретный ключ, используя незащищенный от прослушивания канал связи. Полученный ключ используется для шифрования дальнейшего обмена с помощью алгоритма симметричного шифрования. Но, к сожалению, он не такой безопасный, как может показаться, на него работает MITM атака. Но данный алгоритм и не задумывался решить эту проблему. Но одно из главных преимуществ этого алгоритма — ключ создается без прямого обмена им между сторонами. Алгоритм Диффи-Хеллмана используется для того, чтобы две стороны могли создать общий секретный ключ, его еще называют "транспортный ключ", который затем используется для шифрования и дешифрования сообщений. Реализация простейшего приложения на SSL Socket на Python Давайте попробуем реализовать TLS соединение на Python. Для примера я создам простейший чат, где один клиент будет общаться с сервером. Для этого нам не нужно никаких библиотек, но я использовал rich для вывода красивых сообщений. Итак, давайте сначала импортируем все библиотеки что нам будут нужны: Если что, библиотеку rich можно установить командой После этого напишем несколько базовых функций: Здесь я реализовал функцию для пинга адресов 8.8.8.8 и 1.1.1.1 (для проверки подключения к сети), функцию вывода "красивых сообщений" и проверку подключения к сети. Теперь наша задача реализовать сервер: И клиента: Теперь можно проверить работу... Но перед этим надо сгенерировать ключ и сертификат для подключения клиента к серверу. Сделать это можно через утилиту И наконец можно написать главную функцию: Вот такое небольшое клиент-серверное приложение у нас получилось. Вы можете додумать его, сделать многопоточный защищенный мессенджер. А мы переходим к заключению первой части статьи. ? Заключение Эта часть — только первая, в следующей части мы рассмотрим что такое прокси, VPN. Мы узнаем как можно сделать свою частную сеть на сервере буквально в пару команд. Я бы хотел все уместить в одну статью, но тогда она получится слишком большая. Поэтому в ближайшие дни, а может и сразу, будет опубликована вторая часть. Если вам понравится тематика, то пожалуйста напишите в комментарии, хотите ли видеть еще статьи по этой теме. Я надеюсь, вам понравилась эта статья. Одна из самых больших и трудоемких работ, я сам узнал много нового в процессе написания. Было сложно, я потратил несколько недель на изучение этой темы. Любая критика приветствуется, я понимаю что я мог легко что-то упустить или непонятно (а может даже неправильно) описать. Но я постарался проверить, но местами вы вполне себе можете увидеть слабые моменты. Но жизнь — это постоянное самосовершенство. Буду рад если вы присоединитесь к моему небольшому телеграм-блогу. ? Читайте также:
![]()
Источники
Источник: habr.com Комментарии: |
|