
터미널 기반 HTTP 인터셉팅 프록시로, TUI를 통해 실시간으로 요청을 캡처, 검사, 수정할 수 있으며, 요청을 재전송하고 조정할 수 있는 Repeater 기능도 제공합니다.
최소한의 터미널 기반 HTTP/HTTPS 인터셉팅 프록시.
https://github.com/user-attachments/assets/94f9c9ae-5842-4b19-9f5b-84dedb9430e6
Roxy는 Rust로 작성된 터미널 사용자 인터페이스(TUI)를 갖춘 HTTP 및 HTTPS용 경량 인터셉팅 프록시입니다. 터미널 안에서 요청이 서버에 도달하기 전에 실시간으로 캡처, 검사 및 수정합니다. 일상적인 트래픽 분석을 위한 Burp Suite의 최소한의 터미널 네이티브 대안이라고 생각하시면 됩니다.
CONNECT를 통한 완전한 MITM 지원, 인증서가 자동으로 생성됩니다.$EDITOR를 사용하여 인터셉트된 요청을 즉석에서 수정합니다.--host와 --port로 수신 주소를 설정하고, 어떤 호스트를 인터셉트하거나 패스스루할지 결정합니다.소스에서 빌드하려면 다음이 필요합니다:
| 요구 사항 | 비고 |
|---|---|
| Rust 1.85 이상 | rustc --version으로 확인하세요. |
| C 컴파일러 | gcc 또는 clang. |
$EDITOR | 요청 편집 기능에만 필요합니다. |
git clone https://github.com/vid4l-07/Roxy.git
cd Roxy
cargo build --release
바이너리는 target/release/roxy에 생성됩니다.
cargo install --git https://github.com/vid4l-07/Roxy.git
바이너리는 ~/.cargo/bin/roxy에 생성됩니다.
[!note] HTTPS 패스스루가 활성화된 경우 HTTPS 지원이 필요하지 않습니다.
| 항목 | 위치 | 비고 |
|---|---|---|
| CA 인증서 및 키 | ~/.config/roxy/ca.crt, ~/.config/roxy/ca.key | HTTPS 요청이 처음 인터셉트될 때 지연 생성됩니다. |
| 호스트별 리프 인증서 | /tmp/roxy_certs/<host>.crt, /tmp/roxy_certs/<host>.key | 요청 시 발급되고 캐시됩니다. 새 CA가 생성될 때마다 캐시가 삭제됩니다. |
Roxy는 Roxy CA라는 자체 서명 CA를 생성합니다.
[!Warning] CA가 클라이언트에 의해 신뢰될 때까지 모든 HTTPS 요청은 검증에 실패합니다.
브라우저나 시스템에 ~/.config/roxyca.crt를 설치하세요.
내장 웹 페이지 http://roxy (또는 http://<host>:<port>)에서도 다운로드할 수 있습니다.
Firefox / Chrome:
Settings → Privacy & Security → Certificates → View Certificates.~/.config/roxy/ca.crt를 선택합니다.시스템 CA 저장소 curl과 같은 도구용.
# Debian / Ubuntu
sudo cp ~/.config/roxy/ca.crt /usr/local/share/ca-certificates/roxy.crt
sudo update-ca-certificates
# Fedora / RHEL / Arch
sudo cp ~/.config/roxy/ca.crt /etc/pki/ca-trust/source/anchors/roxy.crt
sudo update-ca-trust extract
다시 제거하려면 파일을 삭제하고 해당 명령을 다시 실행하세요.
rm -rf ~/.config/roxy
Roxy는 다음 HTTPS 요청 시 새 CA를 생성하고 캐시했던 모든 리프 인증서를 제거합니다. 새 CA를 다시 신뢰해야 합니다. 브라우저와 시스템 저장소에서 이전 CA를 제거하는 것을 잊지 마세요.
| 옵션 | 설명 |
|---|---|
-h, --host <HOST> | 수신 호스트. 기본값은 127.0.0.1입니다. |
-p, --port <PORT> | 수신 포트. 기본값은 8080입니다. |
--passthrough | 모든 호스트에 대해 HTTPS를 복호화하지 않고 터널링합니다. |
--passthrough-host <HOSTS> | --passthrough와 동일하지만 나열된 호스트에만 적용됩니다. |
--intercept-https <HOSTS> | 패스스루 모드에서도 이 호스트들을 인터셉트합니다. |
--help | 도움말 메시지를 출력합니다. |
# 검사하려는 호스트를 제외한 모든 호스트를 그대로 패스스루
roxy --passthrough --intercept-https <HOSTS>
| 키 | 동작 |
|---|---|
q | 종료 |
Tab | Proxy와 Repeater 화면 간 전환 |
? | 현재 화면의 도움말 팝업 열기 |
| 키 | 동작 |
|---|---|
i | 인터셉트 ON/OFF 전환 |
Enter | 인터셉트된 요청 전달 |
e | 외부 편집기에서 요청 편집 |
u | 편집 실행 취소 |
U | 편집 다시 실행 |
r | 요청을 Repeater로 전송 |
↑/k | 위로 스크롤 |
↓/j | 아래로 스크롤 |
| 키 | 동작 |
|---|---|
Enter | 현재 요청 전송 |
e | 외부 편집기에서 요청 편집 |
u | 편집 실행 취소 |
U | 편집 다시 실행 |
r | 현재 탭 이름 변경 |
n | 다음 리피터 탭 |
p | 이전 리피터 탭 |
x | 현재 탭 닫기 |
z | 포커스된 패널에서 줌 전환 |
↑/k | 위로 스크롤 |
↓/j | 아래로 스크롤 |
←/h / →/l | Request와 Response 패널 간 포커스 전환 |
H | Request 패널 너비 감소 |
L | Request 패널 너비 증가 |
e를 누르면 원시 요청이 임시 파일에 기록되고 $EDITOR에 정의된 바이너리로 열립니다. 편집하고 저장한 후 종료하세요.
수정된 요청이 원본을 대체하고 Content-Length가 자동으로 재계산됩니다.
127.0.0.1:8080에서 연결을 수락하며, --host와 --port로 구성할 수 있고, 각 연결을 자체 비동기 작업에서 처리합니다.CONNECT 요청은 200 Connection Established로 응답되고, 요청된 호스트에 대해 발급된 인증서로 TLS가 로컬에서 종료되며, 복호화된 요청은 일반 HTTP 요청으로 읽힙니다. 패스스루 옵션과 일치하는 호스트는 TLS를 종료하지 않고 실제 서버로 릴레이됩니다.Host 헤더에서 목적지를 확인합니다.tokio::mpsc 채널을 통해 TUI로 푸시되고, 연결은 사용자가 전달할 때까지 oneshot 채널에서 대기합니다. 요청은 그대로 전달되거나, 먼저 편집되거나, Repeater로 보내질 수 있습니다.webpki-roots에 대해 검증된 TLS), 요청을 작성하고, 원시 응답을 클라이언트로 스트리밍합니다.Enter를 누를 때마다 저장된 요청을 재전송하며, 요청이 캡처된 프로토콜에 따라 전송 방식을 선택하고, 응답을 요청과 나란히 표시합니다.TUI와 프록시는 상태를 직접 공유하지 않습니다. 이벤트 채널을 통해서만 통신하므로 요청이 인터셉트되는 동안에도 인터페이스가 반응성을 유지합니다.
기여는 언제나 환영합니다. 버그를 발견하거나 새로운 기능에 도움을 주고 싶다면:
Roxy는 MIT 라이선스에 따라 배포됩니다. © 2026 Hugo Vidal Martinez.