Как заблокировать весь трафик на Mac, когда “sshuttle” не запущен?

Вопрос или проблема

sshuttle -v -r [email protected] 0/0

Я запускаю sshuttle как указано выше, и мой IP изменяется, что замечательно.

Как я могу автоматически блокировать весь трафик на моем Mac, когда sshuttle перестает работать? Я пытался экспериментировать с правилами pf, но могу блокировать только весь трафик.

Я адаптировал это решение kill switch с Reddit:

#!/bin/bash

# Включить интерфейс en0
/sbin/ifconfig en0 up

sleep 1 # Подождать, пока интерфейс не включится

# Запустить sshuttle, и если он завершится с ошибкой, выключить en0 и отправить уведомление macOS
/opt/homebrew/bin/sshuttle -vr [email protected] 0/0 --ssh-cmd "ssh -i /Users/dara/.ssh/id_ed25519" || {
  /sbin/ifconfig en0 down
  osascript -e 'display notification "Защита больше не активна. Проверьте vpn-check.sh в домашнем каталоге и com.dara.script.plist" with title "Ошибка"'
}

Я добавил это в ~/Library/LaunchAgents/com.dara.script.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>com.dara.script</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/bin/sudo</string>
      <string>/Users/dara/vpn-check.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/tmp/script.err</string>
    <key>StandardOutPath</key>
    <string>/tmp/script.out</string>
  </dict>
</plist>

Это кажется довольно надежным! Потеря подключения к сети не сбрасывает sshuttle, и если я вручную завершаю команду, macOS повторно запускает скрипт каждые несколько секунд.

Ответ или решение

Чтобы обеспечить блокировку всего трафика на Mac в случае, если sshuttle перестанет работать, можно использовать скрипт в связке с системой launchd, как это было описано в предоставленном решении. Следует уточнить, что данное решение работает благодаря крахмальному мандату макро-сети доступности (она жe network accessibility) вашей системы и требует настройки соответствующего файла plist. Подробно разберём этот процесс:

Техническая реализация

  1. Создание скрипта для контроля работы sshuttle:

    #!/bin/bash
    
    # Запуск интерфейса en0
    /sbin/ifconfig en0 up
    
    sleep 1 # Задержка для активации интерфейса
    
    # Попытка запуска sshuttle, при ошибке выполнение блокировки
    /opt/homebrew/bin/sshuttle -vr [ваш_логин]@[хост] 0/0 --ssh-cmd "ssh -i /Users/dara/.ssh/id_ed25519" || {
     /sbin/ifconfig en0 down
     osascript -e 'display notification "No longer protected. check vpn-check.sh in home and com.dara.script.plist" with title "Error"'
    }

    Данный скрипт проверяет запуск sshuttle, и в случае ошибки отключает сетевой интерфейс en0, отправляя уведомление на macOS.

  2. Настройка LaunchAgent для автоматического запуска:

    Создайте файл plist в директории ~/Library/LaunchAgents/:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
     <dict>
       <key>Label</key>
       <string>com.dara.script</string>
       <key>ProgramArguments</key>
       <array>
         <string>/usr/bin/sudo</string>
         <string>/Users/dara/vpn-check.sh</string>
       </array>
       <key>RunAtLoad</key>
       <true/>
       <key>KeepAlive</key>
       <true/>
       <key>StandardErrorPath</key>
       <string>/tmp/script.err</string>
       <key>StandardOutPath</key>
       <string>/tmp/script.out</string>
     </dict>
    </plist>

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

SEO оптимизация и другие рекомендации:

  • Ключевые слова: блокировка трафика Mac, sshuttle, macOS, управление сетью, безопасность.
  • Подробность и структуральность: Использование заголовков и кодовых блоков делает текст более читаемым и структурированным.
  • Ясность и лаконичность: Избегайте избыточных описаний, сосредоточьтесь на ключевых действиях и процедурах.

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

Оцените материал
Добавить комментарий

Капча загружается...