Iptables как узнать поддерживает телефон или нет

Обновлено: 19.09.2024

Каждый компьютер, подключенный к сети, находится в потенциальной опасности. В сети очень много угроз начиная от программ, которые будут пытаться любым способом проникнуть в систему и заканчивая хакерами, которые хотят получить доступ к нужному им компьютеру. А программное обеспечение, установленное на компьютере, может содержать еще не известные и неисправленные уязвимости, которые и могут стать дырой в безопасности.

Если для домашних компьютеров это не очень актуально, так как они подключены к сети через роутеры и NAT, которые скрывают их от внешней сети, то для серверов это актуально как никогда. В операционной системе Linux в ядро встроен очень гибкий и надежный фаервол iptables.

Именно с помощью этой программы выполняется защита системы от внешних вторжений, перенаправление портов, а также еще очень много действий с трафиком. Но ее минус в том, что она немного сложна в настройке. В этой статье будет рассмотрена настройка iptables для чайников. Я надеюсь, что после нее вы сможете уверенно пользоваться базовыми возможностями iptables.

Что такое Iptables?

Подсистема iptables и Netfilter уже достаточно давно встроена в ядро Linux. Все сетевые пакеты, которые проходят через компьютер, отправляются компьютером или предназначены компьютеру, ядро направляет через фильтр iptables. Там эти пакеты поддаются проверкам и затем для каждой проверки, если она пройдена выполняется указанное в ней действие. Например, пакет передается дальше ядру для отправки целевой программе, или отбрасывается.

Виды пакетов

Соответственно в фильтре iptables все пакеты делятся на три аналогичные цепочки:

Но если вы думаете что можно просто полностью закрыть цепочку Input для увеличения безопасности, то вы очень сильно ошибаетесь. При работе сети используются обе цепочки input и output. Например, вы пытаетесь выполнить ping, данные отправляются через output, но ответ приходит через input. То же самое происходит при просмотре сайтов и других действиях. А вот цепочка forward может вообще не использоваться если ваш компьютер не является маршрутизатором. Так что настройка iptables должна выполняться очень аккуратно.

Правила и действия

Перед тем как перейти к созданию списка правил iptables нужно рассмотреть как они работают и какие бывают. Для каждого типа пакетов можно установить набор правил, которые по очереди будут проверяться на соответствие с пакетом и если пакет соответствует, то применять к нему указанное в правиле действие. Правила образуют цепочку, поэтому input, output и forward называют цепочками, цепочками правил. Действий может быть несколько:

Правила могут проверять любые соответствия, например, по ip, по порту получателя или отправителя, заголовкам пакета и многому другому. Если пакет не подходит ни одному из правил, то к нему применяется действие по умолчанию, обычно ACCEPT.

Когда мы разобрались с правилами, можно вернутся обратно к цепочкам. Кроме перечисленных выше, есть еще две дополнительные цепочки правил:

  • prerouting - в эту цепочку пакет попадает перед обработкой iptables, система еще не знает куда он будет отправлен, в input, output или forward;
  • postrouting - сюда попадают все проходящие пакеты, которые уже прошли цепочку forward.

Но это еще не все. У нас еще есть таблицы iptables, с которыми тоже желательно разобраться.

Таблицы ipatables

Над цепочками правил в iptables есть еще один уровень абстракции, и это таблицы. В системе есть несколько таблиц, и все они имеют стандартный набор цепочек input, forward и output. Таблицы предназначены для выполнения разных действий над пакетами, например для модификации или фильтрации. Сейчас это для вас не так важно и будет достаточно знать что фильтрация пакетов iptables осуществляется в таблице filter. Но мы рассмотрим их все:

  • raw - предназначена для работы с сырыми пакетами, пока они еще не прошли обработку;
  • mangle - предназначена для модификации пакетов;
  • nat - обеспечивает работу nat, если вы хотите использовать компьютер в качестве маршрутизатора;
  • filter - основная таблица для фильтрации пакетов, используется по умолчанию.

С теорией почти все, теперь давайте рассмотрим утилиту командной строки iptables, с помощью которой и выполняется управление системой iptables.

Утилита Iptables

Подсистема iptables и netfilter встроены в ядро, но вот набор утилит для управления всем этим не всегда поставляется вместе с системой. Для установки утилиты в Ubuntu наберите:

sudo apt install iptables

А в дистрибутивах, основанных на Fedora, установка iptables выполняется немного по-другому:

sudo yum install iptables

Когда установка iptables будет завершена, можно переходить к настройке, но давайте сначала рассмотрим синтаксис утилиты. Обычно команда имеет такой общий вид:

$ iptables -t таблица действие цепочка дополнительные_параметры

Теперь давайте рассмотрим параметры iptables, таблица указывает таблицу, с которой нужно работать, этот параметр можно упустить, действие - нужное действие, например, создать или удалить правило, а дополнительные параметры описывают действие и правило, которое нужно выполнить.

Осталось рассмотреть основные действия, которые позволяет выполнить iptables:

  • -A - добавить правило в цепочку;
  • -С - проверить все правила;
  • -D - удалить правило;
  • -I - вставить правило с нужным номером;
  • -L - вывести все правила в текущей цепочке;
  • -S - вывести все правила;
  • -F - очистить все правила;
  • -N - создать цепочку;
  • -X - удалить цепочку;
  • -P - установить действие по умолчанию.

Дополнительные опции для правил:

  • -p - указать протокол, один из tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp,
    mh;
  • -s - указать ip адрес устройства-отправителя пакета;
  • -d - указать ip адрес получателя;
  • -i - входной сетевой интерфейс;
  • -o - исходящий сетевой интерфейс;
  • -j - выбрать действие, если правило подошло.

Теперь вы можем перейти рассмотрению примеров того как выполняется настройка iptables.

Примеры настройки Iptables

Мы рассмотрим несколько основных примеров, чтобы вы смогли закрепить все прочитанное выше.

Список правил

Сначала давайте рассмотрим как выполняется просмотр правил iptables, для этого достаточно опции -L:

iptables

Также вы можете указать нужную цепочку, чтобы вывести правила только для нее:

iptables -L INPUT

Очистка правил

Вы не можете просто так отключить iptables остановив сервис обновления правил iptables через systemd или даже удалив набор утилит для настройки. Подсистема работает на уровне ядра и не зависит от того, что там у вас установлено. Поэтому если сделаете что-то не так, то нужно будет очистить правила. Для этого выполните:

sudo iptables -F

Или только для определенной цепочки:

sudo iptables -F Input

Напоминаю, что все эти действия выполняются для таблицы по умолчанию - filter.

Правила по умолчанию

Как я уже говорил, если для пакета не подходит ни одно правило, то для него применяется действие по умолчанию. Его можно задать с помощью опции -p:

sudo iptables -p INPUT ACCEPT
$ sudo iptables -p OUTPUT ACCEPT
$ sudo iptables -p FORWARD DROP

В этом примере мы разрешаем цепочки INPUT и OUTPUT, но запрещаем FORWARD.

sudo iptables -L

iptables1

Блокировка пакетов

Для блокировки пакетов мы можем использовать действие DROP, фильтровать пакеты, которые нужно заблокировать мы можем по множеству критериев, например, протоколу, ip адресу, маске сети, порту и многому другому.

Вот так будет выглядеть команда, которая позволяет добавить правило iptables для блокировки всех входящих пакетов от 10.10.10.10:

sudo iptables -A INPUT -s 10.10.10.10 -j DROP

А теперь исходящие пакеты на этот же адрес:

sudo iptables -A OUTPUT -s 10.10.10.10 -j DROP

iptables2

Блокировка диапазона ip выполняется подобным образом. Для этого нужно использовать маску сети 10.10.10.0/24. Это будут все адреса начиная от 10.10.10.0 до 10.10.10.255:

sudo iptables -A INPUT -s 10.10.10.0/24 -j DROP

Или расширенный вариант маски:

sudo iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

Также вы можете заблокировать все входящие соединения ssh:

sudo iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

Как видите, добавить правило iptables очень просто.

Удаление правил

Удаление правил iptables выполняется точно так же, как и создание новых, только вместо опции A нужно использовать опцию D. Сначала смотрим список правил:

sudo iptables -L

iptables3

Например, вот так можно удалить правило iptables, которое было создано вторым:

sudo iptables -A OUTPUT -s 10.10.10.10 -j DROP

iptables5

Также вы можете полностью очистить iptables выполнив команду с опцией -F:

sudo iptables -F

iptables6

Сохранить правила Iptables

Все настройки iptables, которые вы указали с помощью этих команд сохранятся только до перезагрузки. После перезагрузки компьютера все изменения будут стерты. Поэтому чтобы сохранить правила iptables, нужно выполнить специальную команду. Только в разных дистрибутивах она отличается. В Ubuntu выполните:

А в Red Hat или CentOS:

sudo /sbin/service iptables save

Выводы

Вот и все. Наша статья о том, как выполняется настройка iptables для чайников подошла к концу. Эта система действительно сложна, на первый взгляд, но если разобраться, то с помощью нее возможно делать очень интересные вещи. В этой статье была рассмотрены основы использования iptables, в следующих статьях мы более подробно остановимся на практическом применении.

На завершение видео о том, как увеличить безопасность вашего сервера:



Тебе нужно что бы достп к определённым портам был только с него?
Тогда смотри port-knocking.
Ежели хочется другого - расскажи подробнее.


через сеть опсоса? нет.

Для особо неуловимых Джо можно распознавать по номеру порта, к которому ты будешь подключаться с телефона. В случае сколь-либо большей уловимости пост звучит так, будто бы тебе нужен VPN, но ты это еще не понял. Так что задачу в студию! На кой тебе на таком низком уровне определять, твой это телефон или нет? Китайская пластмассовая авторизация?


Мне периодически надо лазать на свой сервер, но светить им на весь интернет (или хотя бы МТС) я не хочу. Собственно вся задача.

Уже ответили - VPN
Светить телефон он не хочет, а гонять не шифрованный трафик он готов, что за идиотская постановка задачи.


а гонять не шифрованный трафик он готов

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


Господин Анонимус, по-моему мы не понимаем друг друга. Еще раз, сервисы поднятые на сервере нужны только мне и с телефона, остальных хотелось бы оградить от этих сервисов. Каким местом тогда другие люди выставляют свои сервисы в сеть? Про посадку ssh на какой-нить верхний порт я в курсе, только это фигня, а не защита, просто логи будут намного чище, чем когда висит оно на 22-м порту.

Еще раз для тех кто плохо читал, VPN. Можешь получить mac телефона. Решает твою задачу, дополнительно ограждает тебя от брутфорса


Ну тогда проводи авторизацию на этом уровне: SSH-ключи, клиентские сертификаты. При чем тут iptables?

ssh через vpn, отлично, отлично


Каким местом тогда другие люди выставляют свои сервисы в сеть?

Я тебя, наверное, очень удивлю, но сажают демона слушать стандартный порт и выставляют. Востребованные ставят fail2ban. А ты пытаешься извращаться на ровном месте.


Не ну а чо, если при этом сразу два презерватива надеть, то должно быть довольно безопасно.


Ну чтобы не брутфорсили, да и вообще не светить им просто так, раз пользоваться буду им только один я. Про презерватив тут уже упомянули, а я еще вспомнил про свечку.

Думал я про VPN, так же он будет торчать и светить на весь интернет ожидая подключения. Мне скорее port knocking подойдет. Щас посмотрю что такое фейлтюбан.

Сам придумал, сам поржал, отлично, отлично
Зыж тунелирование всеж лучше универсальными средствами делать, чтоб не пришлось через пол годика вспоминать, чтоб такого прикрутить к альтернативной оси, а то не работает


Думал я про VPN, так же он будет торчать и светить на весь интернет ожидая подключения.

О господи. Ничего не делай, пока не самообразуешься и не разберешься со своими фобиями.

t184256 ★★★★★ ( 20.05.15 10:54:01 )
Последнее исправление: t184256 20.05.15 10:54:10 (всего исправлений: 1)

и что же такого неуниверсального в ssh?

Мне периодически надо лазать на свой сервер, но светить им на весь интернет (или хотя бы МТС) я не хочу

Ты хочешь чтобы МТС доставляла пакеты на твой сервер, но при этом не знала куда она их доставляет?! Tor ?

Конечно можно с помощью iptables разрешить доступ к сервисам исключительно устройствам, с определенными маками. Но следует иметь в виду, что первый же маршрутизатор по пути от устройства до сервера при форвардинге пакетов перебьет мак-адрес, поэтому придется добавлять VPN. Как по мне, так это очень неудобная схема, которая слишком все усложняет. А чем сложнее система, тем меньше надежность, т.к. больше компонентов, которые могут содержать ошибки (и которые так же можно неправильно настроить).
Простого ssh с авторизацией по ключу более чем достаточно, т.к. ключ брутить сложно. Если добавить блокировку на пару минут ip-адреса, с которого были 2-3 неудачные попытки авторизации (fail2ban, sshguard), то скорее Солнце израсходует весь свой водород, чем кто-то физически сможет перебрать необходимое количество комбинаций.


почему ты боишься выставлять сервер в открытый интернет, какие комплексы тебе мешают, давай поговорим об этом :)


какие комплексы тебе мешают, давай поговорим об этом :)

У меня маленький половой член и избыточный вес, средненькая зарплатка и маленькая квартирка.

А по теме совет будет?



В крайнем случае можно ограничить доступ сетью мобильного оператора, смотришь в whois по выданному тебе адресу какой им там диапазон выделен, и добавляешь его в правила

Я думаю, никому уже не интересно читать во второй раз (а может быть и в третий), о том, как Yota определяет, пользуется ли человек телефоном в режиме модема или точки доступа. «Зачем нам ещё одна статья?» — спросите вы.

Дело в том, что методы обхода, приведённые по ссылкам, не позволяют настроить телефон таким образом, чтобы позже при подключении любых устройств не потребовалось ничего настраивать заново. Кроме того, пользователь будет испытывать серьёзные неудобства, если он подключает несколько устройств с разными TTL. Придётся как минимум менять TTL на одном из них.

Именно эти причины мотивировали меня копать дальше в поисках ответа на вечный вопрос «Как же всё-таки нахаляву раздать интернет всему офису?». И найти такой ответ удалось (только для android, у меня нет яблока).

Готовая программа

Когда я узнал, что Yota следит за TTL, то предположил, что наверняка где-то в других странах есть провайдеры, которые поступают так же. Пробуем ввести TTL в поиске Play Market'а.

Я был прав: тут же нашлась программа TTLEditor. Очень приятно, что она мало того, что бесплатная, так ещё и с открытым исходным кодом.
Пользоваться очень просто: выбрать интерфейс (лучше всего выбирать интерфейс через который телефон связан с провайдером, у меня это rmnet0) и нажать кнопку OK. Можно также поставить программу срабатывать при загрузке телефона.


Только одна проблема возникла: программа выдала ошибку «TTL update failed». Прежде чем ругать автора в комментариях и минусовать на Play Market'е, я решил почитать исходный код.

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

Причина ошибки

Основное действие программы — запуск от имени root следующей команды:
iptables -t mangle -A POSTROUTING -o <интерфейс> -j TTL --ttl-set <значение TTL>
Много мозгов не нужно, чтобы понять, что делает эта команда (к тому же в программе написано об этом): она устанавливает заданное значение TTL всем пакетам, проходящим через определённый интерфейс (то есть как раз то, что нам требуется).

Я попробовал выполнить команду вручную и увидел вот такую ошибку: iptables: No chain/target/match by that name. Пара минут гугления показала, что эту ошибку iptables готов выдать почти на любые неверные параметры. Гуглим применительно к TTL и что-то всё же находим. Смотрим, насколько подходящую информацию мы нашли.

Команда cat /proc/net/ip_tables_matches выдаёт список, в котором есть ttl, то есть проверять TTL наше ядро умеет. А вот в списке, который выдаёт команда cat /proc/net/ip_tables_targets , нет TTL, поэтому модифицировать TTL наше ядро не умеет. Сдаваться перед таким наглым сговором мобильных провайдеров и производителей мы не станем, поэтому идём собирать модуль ядра, которого не хватает.

Я думаю, на этом этапе пользователи CyanogenMod уже злобно похихикивают, но мне не хотелось так просто отказываться от штатной системы, а хотелось добавить именно в неё новые возможности (даже не заменяя ядро).

Отступление

Далее я предполагаю, что читатель умеет пользоваться Linux, понимает, что такое ядро и модули ядра, а также знает, как с помощью adb перекидывать файлы (adb push/pull) и как открыть на компьютере терминал телефона (adb shell). Если нет — срочно в гугл! Если да — не забудьте включить отладку по USB.

Из чего собирать и чем

Это самый сложный шаг: нужно найти подходящий кросс-компилятор и исходники ядра. Старайтесь искать именно для своего телефона, так как иначе, скорее всего, ничего не заработает (а об этом станет известно только на последнем шаге). Я сделал несколько неудачных попыток, допустив ошибку именно на этом этапе.

Модель моего телефона Sony Xperia Z1 Compact, операционная система моего компьютера Ubuntu 14.04. Ниже на их примере я покажу, как можно действовать.


  • Команда cat /proc/version может подсказать, какая версия gcc использовалась для сборки ядра на телефоне (у меня: 4.7).
  • Скачиваем подходящий кросс-компилятор (toolchain). Я нашёл его здесь. Выполняю на компьютере команду:
    и он у меня в папке arm-eabi-4.7 (для клонирования git-репозитория не забудьте установить git).
  • Номер сборки прошивки можно посмотреть в настройках телефона «О телефоне». У меня: 14.4.A.0.108.
    Найти нужные исходники ядра удалось в соответствующем архиве здесь и в репозитории здесь. Я взял из архива, потому что раньше отыскал.
    Если я хоть что-то понимаю в мире лицензий, то производитель обязан предоставлять исходные коды ядра, работающего на андроидофоне.

Настройка и сборка

Те, кто сталкивается с процессом сборки ядра впервые, не поддавайтесь панике, с гуглом мы богоподобны всегда.

  • Для начала, открываем консоль в папке с исходниками ядра и настраиваем среду окружения, чтобы ядро собиралось добытым кросс-компилятором:
    На конце переменной среды CROSS_COMPILE должен находиться общий префикс большинства (или всех) исполняемых файлов в папке bin.
  • Затем нужно создать для вашей модели телефона дефолтную конфигурацию ядра (файл .config ). Нужная для этого команда обычно написана в каком-нибудь README поблизости. В моём случае, в папке с исходниками ядра был файл README_Xperia .

Жмём «/» и вводим в поиск «TARGET_TTL».


Ага, теперь стало ясно, где находится нужная нам возможность ядра. Переходим к ней в конфигураторе и нажимаем кнопку «M». Это значит, что мы хотим скомпилировать эту возможность как модуль ядра.


  • Собираем ядро и модули:
    Если произошли какие-то ошибки, то это значит, что вы, скорее всего, нашли неподходящие исходники ядра или кросс-компилятор.
  • Нужный нам собранный модуль находится здесь: net/netfilter/xt_HL.ko

Использование модуля на телефоне

Перекидываем модуль xt_HL.ko на телефон и пытаемся подключить его к ядру командой insmod .
Если эта команда выдаёт ошибку, то подробности можно узнать в выводе команды dmesg (скорее всего, это будет конфликт версий ядра и модуля или что-то похожее — это значит, что были взяты неподходящие исходники ядра или кросс-компилятор).

Если команда insmod выполнится успешно, то значит модуль удалось подключить к ядру (проверить можно командой lsmod ).
После этого попробуем запустить команду, которую безуспешно пытался использовать TTLEditor. Ошибку не выдаёт? Значит правило добавилось в список. Можно проверить командой iptables -t mangle -L :


Пробуем раздавать интернет любым устройствам и радуемся.

Настройка автозагрузки

Остался последний шаг: сделать так, чтобы иметь возможность раздавать интернет всегда, когда захочется.

Создадим файл setup_ttl_editing.sh со следующий содержимым:

Закидываем его на телефон, ставим программу Script Manager и в ней настраиваем, чтобы скрипт запускался при загрузке системы и от пользователя root.


Всё настроено, можно забыть о проблеме раздачи интернета с телефона!

Примечание. Программа TTLEditor нам не нужна. Всё необходимое уже написано в скрипте.

Заключение

Я не буду писать «йота, не будьте жадинами», потому что по сравнению со многими другими мобильными провайдерами они всё-таки достаточно щедрые. Я лучше скажу: йота, оставайтесь такими же как вы есть.


Столкнулся с проблемой раздачи интернета с Android-телефона на другие устройства, через мобильную точку доступа, у некоторых операторов. Оператор или вообще запрещает раздавать интернет, или берет за это деньги. Однако есть способы обойти этот запрет. Здесь расскажу, что у меня получилось.

Как оператор узнает, что интернет раздается

TTL схема

Оператор на своей стороне смотрит на значение TTL в заголовках IP-пакетов, приходящих от клиента. Схематично выглядит так:

Если на телефоне открывать в браузере какую-нибудь страничку, то провайдеру от телефона будут приходить пакеты с TTL 64. Такие пакеты он пропускает.

Но если включить мобильную точку доступа, подключиться к ней, например, с планшета, и на планшете открыть страницу, то, проходя через мобильную точку доступа на телефоне TTL будет уменьшаться на 1 и провайдеру будут уходить пакеты с TTL 63, которые он будет отбрасывать. Уменьшение TTL при прохождении через роутер - это стандартизированное поведение роутера, такое поведение предусмотрено стандартом RFC791.

В этой ситуации выхода два - либо на планшете выставлять TTL 65, чтобы, проходя через телефон, провайдеру приходили пакеты с TTL 64, либо на самом телефоне делать так, чтобы он не уменьшал TTL.

Если wi-fi клиент - дектоп-машина с Windows или MacOS, то выставить TTL 65 можно одной командой.

Windows

Создать в реестре ключ

типа REG_DWORD со значением 65 (в десятичной системе)

MacOS

Команда в консоле:

Но если клиент планшет на iOS или другое устройство, где нельзя просто так выставить TTL, то придется воспользоваться вторым способом - заставить телефон не уменьшать TTL для проходящих через него пакетов. Это может быть не совсем просто.

Учим телефон не уменьшать TTL

Этот способ потребует root-права (инструкция) на android-телефоне или jailbreak на iOS. Т.к. я делал это на Android, то опишу как делать для него. Про iOS здесь инструкции не будет.

Для разных устройств, процедура будет отличаться, я постараюсь рассказать в чем будут заключаться эти отличия. В данном примере я использую OnePlus 3 и Android 8.0 Oreo

Итак, у нас есть Android телефон с root-правами. Узнаем, умеет ли ядро системы работать с TTL. Для этого смотрим содержимое двух файлов на телефоне (например с помощью приложения ES Проводник, оно умеет смотреть системные файлы):

В обеих должно быть упоминание TTL. В моем случае в ip_tables_targets упоминания ttl не было. Это значит, что ядро не умеет изменять TTL. Чтобы его научить этому, нам понадобится из исходников собрать модуль ядра и загрузить его в телефон.

Как собрать модуль ядра

  • ОС - Linux или MacOS (можно собрать и на Windows - см.ниже)
  • исходники ядра для конкретного устройства
  • toolchain определенной версии и опредленной архитектуры

Я собирал модуль на Windows, но используя, Ubuntu-подсистему в Windows 10. Как ее включить я писал здесь. Если у вас не Win10, то придется ставить Ubuntu на VirtualBox-машину.

Toolchain - это утилиты для сборки кода под опредленную платформу. Узнать какая именно нужна для вашего телефона можно так:

В моем случае это aarch64 . Из этого вывода также понадобится версия gcc: 4.9 и версия ядра: 3.18.66-perf+

Теперь идем в консоль и готовимся к компиляции. Установим необходимые тулзы и склонируем репы с тулчейном и исходниками ядра в домашнюю папку:

В исходниках ядра смотрим в папку arch и подбираем нужную архитектуру. В моем случае в этой папке, нет aarch64 , но есть arm64 . Это то же самое, просто называется по другому. Буду использовать эту архитектуру. Указываем ее и путь до бинарей тулчейна в переменных окружения:

Переменная CROSS_COMPILE именно такая, заканчивается на - . Здесь нет ошибки.

Теперь надо создать конфиг для будущей сборки. Возможные варианты конфигов в моем случае лежат в папке с исходниками ядра в arch/arm64/configs (вместо arm64 может быть ваша архитектура). Вспоминая версию ядра, которая установлена в телефоне, выбираю конфиг msm-perf_defconfig :

После того как конфиг создан, нам надо внести в него изменения, чтобы нужный нам модуль для фиксации TTL скомпилировался. Для этого выполняем:

TTL Target support

Появится интерактиваная утилита, в которой нужно найти нужный модуль.

TTL Target support

Переходя по дереву внутрь, и, найдя TTL Target support , нажать M, чтобы указать, что нужно скомпилировать этот модуль.

Сохраняем конфиг, выходим и собираем ядро с модулями:

Если эти команды завершились ошибкой, значит, скорее всего неправильно выбран конфиг, toolchain или сами исходники ядра. Определенные исходники можно собрать только подходящим тулчейном и с подходящим конфигом.

Если ошибок не было, то в папке с исходниками должен появится файл net/netfilter/xt_HL.ko

Вот мой скомпилированный файл для OnePlus 3, Android 8.0.0 - xt_HL.ko. Можно сразу взять его, если совпадает модель телефона и версия системы.

Копируем его на телефон, и через adb shell пытаемся включить его (чтобы в adb shell работал su, надо в /system/build.prop добавить строку ro.debuggable=1 , например с помощью ES Проводника):

Если insmod возвращает ошибку exec format error , значит, скорее всего, неправильно была выбрана версия исходников ядра или архитектура. В dmesg можно узнать подробности ошибки совместимости, и пересобрать под правильную версию.

Если модуль загрузился, можно пробовать зафиксировать TTL:

, подключиться через мобильную точку доступа и попробовать открыть какую-нибудь страничку в браузере.

И наконец, добавляем в автозагрузку телефона скрипт, который будет включать фиксацию TTL:

Читайте также: