Пингвинья тропа. Простые рецепты для выборочного шифрования трафика в Linux

Есть много способов обойти региональные блокировки и обеспечить анонимность. Такие термины, как TOR, VPN, прокси, у всех на слуху. Чтобы подключить и настроить их, не требуется специальных знаний, но существуют и более изящные решения. Сегодня я расскажу о методике обхода блокировок в Linux с маскировкой трафика и покажу несколько скриптов для автоматизации этого. Их можно без труда перенести на Raspberry Pi, чтобы сделать умный маршрутизатор.

WARNING

Эта статья не является руководством. Она написана исключительно с целью ознакомить тебя с некоторыми функциональными возможностями маршрутизации в системах Linux. Автор и редакция не несут никакой ответственности за результат использования описанных здесь методов и приемов.

Linux предоставляет огромный набор функций для маршрутизации и инструментов ее конфигурирования. Опытные сисадмины знают об этом и используют арсенал Linux на полную катушку. Но и многие даже продвинутые пользователи не догадываются, сколько удобства могут принести все эти замечательные возможности. Сегодня мы создадим таблицы маршрутизации и опишем правила прохода по ним, а также автоматизируем администрирование этих таблиц. Итак, наши творческие планы:

  • определимся с тем, что нам требуется: установим необходимые пакеты и разберемся, зачем они нужны;
  • изучим общий принцип работы связки;
  • настроим защищенный канал VPN с использованием OpenVPN + stunnel;
  • составим списки адресов и опишем области их применения;
  • создадим скрипт для быстрого добавления домена или IP-адреса в списки IPSet с добавлением в таблицу маршрутизации и включением в правила перенаправления;
  • используем SSH для предоставления безопасного канала связи в эти ваши интернеты.

Немного теории

Что нам понадобится, чтобы все работало, и желательно — комфортно? Само собой, iptables, куда же без него. Еще iproute2, он и позволит нам насоздавать кучу таблиц. IPSet потребуется для того, чтобы не городить огород из множества правил iptables.

Что есть что

  • iptables — утилита командной строки. Базовое средство управления работой файрвола для ядер Linux.
  • iproute2 — набор утилит для управления параметрами сетевых устройств в ядре Linux.
  • IPSet — инструмент для работы со списками IP-адресов и сетевых портов в сетевом фильтре. Формирует список в специальном формате для передачи файрволу.
  • stunnel — инструмент организации шифрованных соединений для клиентов или серверов, которые не поддерживают TLS или SSL. Stunnel перехватывает незашифрованные данные, которые должны были отправиться в сеть, и шифрует их. Программа работает как в Unix-системах, так и в Windows. В качестве шифрования использует OpenSSL для реализации базового протокола TLS и SSL.
  • OpenVPN — VPN-сервер с поддержкой шифрования библиотекой OpenSSL. Клиентские части доступны практически на всех платформах. Умеет работать через прокси типа Socks, HTTP, через NAT и сетевые фильтры.

Про все эти утилиты можно отыскать много информации в интернете, причем с примерами настроек в самых разных вариантах. Мы станем использовать iptables для маркировки пакетов. У нас будут два варианта настройки. Первый — когда машина, на которой выполняется обход, сама подключена к VPN. Второй вариант — когда в сети находится узел (виртуалка, Raspberry Pi или любой другой хост с Linux), играющий роль маршрутизатора. Далее мы разберем эти варианты чуть подробнее.

Коротко о двух вариантах

Клиент и сервер будут устанавливать зашифрованный канал связи по 443-му порту (stunnel) и передавать внутри OpenVPN по 995-му порту. Снаружи это должно выглядеть как обычный HTTPS.

Иллюстрация работы stunnel + OpenVPN

И вот тут можно реализовать две схемы подключения.

Вариант 1. На клиентской машине iptables будет маркировать пакеты неким флагом, если адреса в пакетах и списках IPSet совпадут, и передавать их для маршрутизации.

Далее помеченные флагом пакеты будут отправлены по заранее созданной таблице маршрутизации, остальные пойдут по маршруту, заданному по умолчанию. С помощью консоли или небольшого скрипта мы поправим этот список адресов. В зависимости от ситуации списков может быть несколько.

Вариант 2. В качестве клиента выступит хост в локальной сети (виртуалка, Raspberry Pi или какое-нибудь другое устройство). Он будет указан в качестве основного шлюза на компьютерах, с которых нужен доступ к ресурсам через VPN. Получив запрос для IP-адреса из списка, шлюз включит NAT и отправит такой трафик в VPN. Остальной трафик будет маршрутизироваться до шлюза по умолчанию без NAT.

Для Linux-систем мы можем оставить шлюз по умолчанию и установить у себя IPSet и iproute2, а потом настроить их аналогично настройкам «промежуточного» хоста-маршрутизатора. В этом случае на уровне клиента будет отбираться трафик по тому же списку IPSet. То есть то, что в списке, будет отправляться на промежуточный хост-маршрутизатор и далее в VPN. Остальное будет маршрутизироваться по умолчанию.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


Александр «Plus» Рак: Участник сообщества OmskLUG. Инженер отдела электронного взаимодействия МКУ "Информационно технического управления".

Комментарии (2)

  • У меня в свое время и по такого сделал хакер. Виртуальную сеть по верх обычной пустил. 255.255.0.0 если не ошибаюсь только ip4 было разрешено.
    Спасибо надо будет попробовать. Это дебиан?

  • Это на любом Debian производном дистрибутиве прокатит. В принципе и на rpm тоже, там только управление пакетами будет не через apt, а через yum,например. Мне кажется конфиги там на тех же местах и и синтаксис похож. Все пакеты базовые во всех репозиториях есть. Скрипты тоже не используют специфичные команды для Debian, значит должны работать, в теории, и на других дистрибутивах.

Похожие материалы