Show HN: Fence – 네트워크/파일 시스템 제한을 통한 샌드박스 CLI 명령어 실행
요약
Fence는 네트워크 액세스를 차단하고 파일 시스템 작업을 제한하여 CLI 명령어를 안전하게 실행할 수 있도록 돕는 샌드박스 도구입니다. 패키지 설치나 빌드 스크립트와 같은 반신뢰 코드를 실행할 때 유용하며, Claude Code나 GitHub Copilot 같은 AI 코딩 에이전트의 보안을 보완하는 권한 관리자로 활용할 수 있습니다.
핵심 포인트
- 기본적으로 모든 네트워크 액세스를 차단하고 구성 가능한 규칙에 따라 파일 시스템 접근을 제한함
- 반신뢰 코드(패키지 설치, 빌드 스크립트, CI 작업 등) 실행 시 심층 방어(defense-in-depth) 제공
- Claude Code, Codex, GitHub Copilot 등 주요 AI 코딩 에이전트와 함께 사용할 수 있는 권한 관리 기능 지원
- macOS, Linux 환경을 지원하며 Homebrew, Nix, Go install 등 다양한 설치 방식 제공
Fence는 기본적으로 네트워크 액세스를 차단하고 구성 가능한 규칙에 따라 파일 시스템 (filesystem) 작업을 제한하는 샌드박스 (sandbox) 내에서 명령어를 감쌉니다. 이는 제어된 부작용 (side effects)과 함께 반신뢰 코드 (semi-trusted code, 패키지 설치, 빌드 스크립트, CI 작업, 익숙하지 않은 저장소 등)를 실행할 때 가장 유용하며, 심층 방어 (defense-in-depth)로서 AI 코딩 에이전트 (AI coding agents)를 보완할 수도 있습니다.
# 모든 네트워크 액세스 차단 (기본값)
fence curl https://example.com # → 403 Forbidden
...
Fence는 또한 CLI 에이전트를 위한 권한 관리자 (permission manager)이기도 합니다. Claude Code, Codex, Amp, Gemini CLI, GitHub Copilot, OpenCode, Factory (Droid) CLI 등 인기 있는 코딩 에이전트와 함께 작동합니다 - agents.md를 참조하세요.
설치 (Install)
macOS / Linux:
curl -fsSL https://cli.fencesandbox.com/install.sh | sh
Homebrew (macOS):
brew tap use-tusk/tap
brew install use-tusk/tap/fence
Nix (macOS, Linux, Windows (WSL)):
nix run nixpkgs#fence -- --help
이 방식은 fence를 설치하지 않고 저장소에서 직접 실행합니다. 설치를 원하신다면 NixOS 또는 nix-darwin의 가이드를 따르세요.
Go install:
go install github.com/Use-Tusk/fence/cmd/fence@latest
소스에서 빌드 (Build from source):
git clone https://github.com/Use-Tusk/fence
cd fence
go build -o fence ./cmd/fence
Linux를 위한 추가 요구 사항:
bubblewrap(샌드박싱용)socat(네트워크 브릿징용)bpftrace(선택 사항,-m으로 모니터링할 때 파일 시스템 위반 가시성을 위함)
사용법 (Usage)
기본 (Basic)
# 모든 네트워크가 차단된 상태로 명령 실행 (기본적으로 허용된 도메인 없음)
fence curl https://example.com
...
[!TIP]
실행하려는 명령에 플래그 (flags)를 전달해야 하나요?--를 사용하여 Fence 플래그와 명령 플래그를 구분하세요. 예시:
fence -- claude --dangerously-skip-permissions
### 설정 (Configuration)
`--settings`가 제공되지 않으면, Fence는 먼저 현재 디렉토리와 상위 디렉토리에서 `fence.jsonc` (또는 `fence.json`)를 찾습니다. 아무것도 발견되지 않으면 `~/.config/fence/fence.{jsonc,json}`을 기본값으로 사용합니다. 두 확장자 모두 JSONC (주석 및 trailing comma 허용)로 처리됩니다. 자세한 내용은 [설정 참조](./docs/configuration.md)를 확인하세요.
```json
{
"$schema": "https://raw.githubusercontent.com/Use-Tusk/fence/main/docs/schema/fence.schema.json",
"extends": "code",
...
각 사용자의 일반적인 Fence 설정 위에 리포지토리 로컬 (repo-local) 재정의 (overrides)를 적용하려면 다음을 사용하세요:
{
"extends": "@base",
"filesystem": { "allowWrite": ["."] }
...
다른 설정을 지정하려면 fence --settings ./custom.json을 사용하세요.
명령을 실행하지 않고 활성화된 설정을 검사하려면:
fence config show
fence config show --settings ./custom.json
fence config show --template code
fence config show는 설정 체인 (config chain)을 stderr에 출력하고, 완전히 해결된 (fully resolved) 설정을 일반 JSON 형식으로 stdout에 출력하므로, JSON을 jq와 같은 도구로 파이프 (pipe) 연결할 수 있습니다.
합리적인 기본값이 포함된 시작 설정 (starter config)을 생성하려면:
# 기본 경로에 다음 내용을 포함하는 설정을 생성합니다:
# { "extends": "code" }
fence config init
...
Claude Code에서 가져오기 (Import from Claude Code)
fence import --claude --save
기능 (Features)
- 네트워크 격리 (Network isolation) - 기본적으로 모든 외부 연결이 차단되며, 설정을 통해 허용 목록 (allowlist) 도메인을 지정할 수 있습니다.
- 파일 시스템 제한 (Filesystem restrictions) - 읽기/쓰기 액세스 경로를 제어합니다.
- 명령어 차단 (Command blocking) -
rm -rf /,git push와 같은 위험한 명령어를 거부합니다. - SSH 명령어 필터링 (SSH Command Filtering) - SSH를 통해 허용되는 호스트와 명령어를 제어합니다.
- 내장 템플릿 (Built-in templates) - 일반적인 워크플로우를 위한 사전 구성된 규칙 세트(rulesets)를 제공합니다.
- 위반 모니터링 (Violation monitoring) - 차단된 요청을 실시간으로 로깅합니다 (
-m). - 크로스 플랫폼 (Cross-platform) - macOS (sandbox-exec) 및 Linux (bubblewrap)를 지원합니다.
Fence는 Go 패키지 또는 CLI 도구로 사용할 수 있습니다.
문서 (Documentation)
전체 문서는 **fencesandbox.com/docs**에서 확인할 수 있습니다.
빠른 링크:
- Quickstart (source)
- Configuration Reference (source)
- Agent Hooks (source)
- Security Model (source)
- Go Library Usage (source)
- Architecture (source)
출처 (Attribution)
Anthropic의 sandbox-runtime에서 영감을 받았습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 HN Claude Code Search의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기