Вопрос или проблема
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
. Подробно разберём этот процесс:
Техническая реализация
-
Создание скрипта для контроля работы 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. -
Настройка 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
, и защитите себя от нежелательных сетевых подключений.