Управление Cisco Secure Client на личном Mac
Если на личном Mac установлен корпоративный Cisco Secure Client, его фоновые процессы работают 24/7 — даже когда VPN не подключён. Скрипт ниже полностью останавливает Cisco когда не нужен и запускает обратно.
Что работает в фоне
| Процесс | Запуск | Что делает |
|---|---|---|
vpnagentd | root, автозапуск через SMAppService | Основной демон, управляет подключениями |
acsockext | root, system extension | Socket filter — перехватывает весь сетевой трафик на уровне ядра |
| Cisco Secure Client GUI | пользователь | Интерфейс |
Подробнее о конфликтах при переключении VPN.
Приватность
Без VPN-подключения: исходящих соединений на корпоративные серверы нет. Но acsockext видит весь трафик локально, а телеметрия (CustomerExperienceFeedback/vpn.cef) копится и отправляется при следующем подключении. Содержит только мета VPN-сессий (количество, шифры, тип шлюза), не домены/сайты.
С VPN-подключением: весь трафик через корпоративную инфраструктуру (full tunnel). ИБ видит DNS-запросы и IP-адреса назначения.
Скрипт cisco-vpn.sh
Расположение: ~/bin/cisco-vpn.sh
#!/bin/bash
set -euo pipefail
CISCO_APP="/Applications/Cisco/Cisco Secure Client.app"
CISCO_FILTER_APP="/Applications/Cisco/Cisco Secure Client - Socket Filter.app"
CISCO_AGENT="system/com.cisco.secureclient.vpn.service.agent"
red() { printf '\033[1;31m%s\033[0m\n' "$*"; }
green() { printf '\033[1;32m%s\033[0m\n' "$*"; }
gray() { printf '\033[0;37m%s\033[0m\n' "$*"; }
status() {
local agent_running=false
local filter_running=false
local gui_running=false
pgrep -q vpnagentd 2>/dev/null && agent_running=true
pgrep -qf acsockext 2>/dev/null && filter_running=true
pgrep -qf "Cisco Secure Client" 2>/dev/null && gui_running=true
if $agent_running || $filter_running; then
red "Cisco ACTIVE"
else
green "Cisco OFF"
fi
echo " vpnagentd: $($agent_running && echo running || echo stopped)"
echo " socket filter: $($filter_running && echo running || echo stopped)"
echo " GUI: $($gui_running && echo running || echo stopped)"
}
start() {
echo "Starting Cisco Secure Client..."
if ! pgrep -q vpnagentd 2>/dev/null; then
gray "Starting vpnagentd..."
sudo launchctl enable $CISCO_AGENT 2>/dev/null || true
sudo /opt/cisco/secureclient/bin/vpnagentd -execv_instance &
disown 2>/dev/null || true
sleep 2
fi
pgrep -qf "Cisco Secure Client" 2>/dev/null || open "$CISCO_APP"
echo ""
status
}
stop() {
echo "Stopping Cisco Secure Client..."
pkill -f "Cisco Secure Client" 2>/dev/null || true
pkill -f "Cisco Secure Client - Notification" 2>/dev/null || true
sudo launchctl disable $CISCO_AGENT 2>/dev/null || true
sudo killall -9 vpnagentd 2>/dev/null || true
if pgrep -qf acsockext 2>/dev/null; then
gray "Deactivating socket filter..."
"$CISCO_FILTER_APP/Contents/MacOS/Cisco Secure Client - Socket Filter" \
-deactivateExt 2>/dev/null || true
sleep 3
if pgrep -qf acsockext 2>/dev/null; then
sudo kill -9 $(pgrep -f acsockext) 2>/dev/null || true
fi
fi
sudo dscacheutil -flushcache 2>/dev/null || true
sudo killall -HUP mDNSResponder 2>/dev/null || true
sleep 1
echo ""
status
}
case "${1:-status}" in
on|start) start ;;
off|stop) stop ;;
status|st) status ;;
*)
echo "Usage: $(basename "$0") {on|off|status}"
exit 1
;;
esacУстановка
chmod +x ~/bin/cisco-vpn.shАлиасы в ~/.zshrc:
alias work-on='~/bin/cisco-vpn.sh on'
alias work-off='~/bin/cisco-vpn.sh off'
alias work-st='~/bin/cisco-vpn.sh status'Использование
| Команда | Действие |
|---|---|
work-on | Запускает vpnagentd + открывает GUI |
work-off | Убивает всё: GUI, vpnagentd, socket filter. Сбрасывает DNS |
work-st | Показывает статус компонентов |
launchctl bootout ломает SMAppService
Нельзя использовать
launchctl bootoutдля остановки vpnagentd — после этогоkickstartиbootstrapне работают до перезагрузки. Вместо этого:disable+killдля остановки,enable+ прямой запуск для старта.
Socket filter не нужен для VPN
Cisco VPN подключается и работает без активного socket filter. Поэтому
work-onне активирует его обратно — меньше перехвата трафика на уровне ядра.