Блокировка всех подключений только к определенному домену

#ios #swift #networkextension

Вопрос:

Я изо всех сил пытался найти, как я мог бы потенциально реализовать простое приложение (iOS), которое могло бы блокировать все подключения к определенному домену (например, чтобы запретить пользователю доступ к определенной платформе социальных сетей, даже из другого приложения).

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

У вас есть какие-либо идеи, как я мог бы сделать это простым способом (заблокировать все подключения к определенному домену)? Есть ли фреймворк/библиотека, которую я мог бы легко использовать для этого?

Спасибо!

Ответ №1:

Ну, это было бы нелегко, но вы можете это сделать.

Примеры кода от Apple можно найти здесь и здесь. Этот проект предназначен для iOS, но он может быть в устаревшей версии Swift, поэтому вам нужно будет проделать некоторую работу, чтобы запустить его сейчас.

Часть, которая вас интересует в примере SimpleTunnel, — это FilterDataProvider и FilterControlProvider, другие вещи, которые вы можете опустить, потому что цель этого примера-продемонстрировать множество способностей.

Существует также образец для macOS, который больше ориентирован на ваши потребности, и macOS SDK похож на iOS, но менее мощный.

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

Существует множество решений брандмауэров для ios и mac, и некоторые из них являются открытыми

Часть, которая вас интересует в примере SimpleTunnel, — это FilterDataProvider и FilterControlProvider, другие вещи, которые вы можете опустить, потому что цель этого примера-продемонстрировать множество способностей.

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

Для некоторых ограничений вам может потребоваться установить профиль MDM на устройстве.