
TCP 트래픽을 SMTP 이메일 통신으로 위장하여 심층 패킷 검사(DPI) 방화벽을 우회하는 고속 은밀 터널입니다.
TCP 트래픽을 SMTP 이메일 통신으로 위장하여 심층 패킷 검사(DPI) 방화벽을 우회하는 고속 은닉 터널입니다.
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐
│ Application │─────▶│ Client │─────▶│ Server │─────▶│ Internet │
│ (Browser) │ TCP │ SOCKS5:1080 │ SMTP │ Port 587 │ TCP │ │
│ │◀─────│ │◀─────│ │◀─────│ │
└─────────────┘ └─────────────┘ └─────────────┘ └──────────────┘
│ │
│ Looks like │
│ Email Traffic │
▼ ▼
┌────────────────────────────────┐
│ DPI Firewall │
│ ✅ Sees: Normal SMTP Session │
│ ❌ Cannot see: Tunnel Data │
└────────────────────────────────┘
| 기능 | 설명 |
|---|---|
| 🔒 TLS 암호화 | STARTTLS 이후 모든 트래픽 TLS 1.2+로 암호화 |
| 🎭 DPI 우회 | 초기 핸드셰이크가 실제 SMTP 서버(Postfix)를 모방 |
| ⚡ 고속 | 핸드셰이크 후 바이너리 스트리밍 프로토콜 - 오버헤드 최소화 |
| 👥 다중 사용자 | 사용자별 비밀, IP 화이트리스트, 로깅 설정 |
| 🔑 인증 | HMAC-SHA256을 사용한 사용자별 사전 공유 키 |
| 🌐 SOCKS5 프록시 | 표준 프록시 인터페이스 - 모든 애플리케이션과 호환 |
| 📡 멀티플렉싱 | 단일 터널을 통한 여러 연결 |
| 🛡️ IP 화이트리스트 | IP 주소/CIDR에 따른 사용자별 접근 제어 |
| 📦 간편 설치 | systemd 서비스를 통한 원라인 서버 설치 |
| 🎁 클라이언트 패키지 | 각 사용자에 대해 자동 생성된 ZIP 파일 |
| 🔄 자동 재연결 | 연결 끊김 시 클라이언트 자동 재연결 |
📚 자세한 기술적 세부 사항, 프로토콜 사양 및 보안 분석은 TECHNICAL.md를 참조하세요.
VPS를 가리키는 무료 도메인을 얻으세요:
예시: myserver.duckdns.org → 203.0.113.50 (VPS IP)
curl -sSL https://raw.githubusercontent.com/x011/smtp-tunnel-proxy/main/install.sh | sudo bash
설치 프로그램이 수행하는 작업:
끝입니다! 서버가 준비되었습니다.
smtp-tunnel-adduser bob # 사용자 추가 + 클라이언트 ZIP 생성
smtp-tunnel-listusers # 모든 사용자 목록 보기
smtp-tunnel-deluser bob # 사용자 제거
smtp-tunnel-update # 코드 업데이트, 설정/인증서/사용자 유지
username.zip 파일을 받으세요| 플랫폼 | 실행 방법 |
|---|---|
| 🪟 Windows | start.bat 더블 클릭 |
| 🐧 Linux |
실행 프로그램이 자동으로 종속성을 설치하고 클라이언트를 시작합니다.
✅ 다음과 같이 표시되어야 합니다:
SMTP Tunnel Proxy Client
User: alice
[INFO] Starting SMTP Tunnel...
[INFO] SOCKS5 proxy will be available at 127.0.0.1:1080
Connecting to myserver.duckdns.org:587
Connected - binary mode active
SOCKS5 proxy on 127.0.0.1:1080
cd alice
pip install -r requirements.txt
python client.py
# 파일 다운로드
scp [email protected]:/etc/smtp-tunnel/ca.crt .
# config.yaml 생성:
cat > config.yaml << EOF
client:
server_host: "myserver.duckdns.org"
server_port: 587
socks_port: 1080
username: "alice"
secret: "your-secret-from-admin"
ca_cert: "ca.crt"
EOF
# 클라이언트 실행
python client.py -c config.yaml
SOCKS5 프록시를 127.0.0.1:1080으로 설정하세요.
127.0.0.1, 포트: 1080127.0.0.1:1080 프로필 생성설정 → 네트워크 및 인터넷 → 프록시 → 수동 설정 → socks=127.0.0.1:1080
시스템 환경설정 → 네트워크 → 고급 → 프록시 → SOCKS 프록시 → 127.0.0.1:1080
export ALL_PROXY=socks5://127.0.0.1:1080
# curl
curl -x socks5h://127.0.0.1:1080 https://ifconfig.me
# git
git config --global http.proxy socks5://127.0.0.1:1080
# 환경 변수
export ALL_PROXY=socks5://127.0.0.1:1080
# VPS IP가 표시되어야 함
curl -x socks5://127.0.0.1:1080 https://ifconfig.me
config.yaml)users.yaml)각 사용자는 개별 설정을 가질 수 있습니다:
users:
alice:
secret: "auto-generated-secret"
# whitelist: # 선택 사항: 특정 IP로 제한
# - "192.168.1.100"
# - "10.0.0.0/8" # CIDR 표기법 지원
# logging: true # 선택 사항: 이 사용자의 로깅을 비활성화
bob:
secret: "another-secret"
whitelist:
- "203.0.113.50" # Bob은 이 IP에서만 연결 가능
logging: false # Bob의 활동을 기록하지 않음
| 옵션 | 설명 | 기본값 |
|---|---|---|
secret | 사용자 인증 비밀 | 필수 |
# 상태 확인
sudo systemctl status smtp-tunnel
# 설정 변경 후 재시작
sudo systemctl restart smtp-tunnel
# 로그 보기
sudo journalctl -u smtp-tunnel -n 100
# 제거
sudo /opt/smtp-tunnel/uninstall.sh
python server.py [-c CONFIG] [-d]
-c, --config 설정 파일 (기본값: config.yaml)
-d, --debug 디버그 로깅 활성화
python client.py [-c CONFIG] [--server HOST] [--server-port PORT]
[-p SOCKS_PORT] [-u USERNAME] [-s SECRET] [--ca-cert FILE] [-d]
-c, --config 설정 파일 (기본값: config.yaml)
--server 서버 도메인 재정의
--server-port 서버 포트 재정의
-p, --socks-port 로컬 SOCKS 포트 재정의
-u, --username 사용자 이름
-s, --secret 비밀 재정의
--ca-cert CA 인증서 경로
-d, --debug 디버그 로깅 활성화
smtp-tunnel-adduser <username> [-u USERS_FILE] [-c CONFIG] [--no-zip]
새 사용자 추가 및 클라이언트 패키지 생성
smtp-tunnel-deluser <username> [-u USERS_FILE] [-f]
사용자 제거 (-f로 확인 건너뛰기)
smtp-tunnel-listusers [-u USERS_FILE] [-v]
모든 사용자 목록 보기 (-v로 상세 정보)
smtp-tunnel-update
서버를 최신 버전으로 업데이트 (설정/인증서/사용자 유지)
smtp_proxy/
├── 📄 server.py # 서버 (VPS에서 실행)
├── 📄 client.py # 클라이언트 (로컬에서 실행)
├── 📄 common.py # 공유 유틸리티
├── 📄 generate_certs.py # 인증서 생성기
├── 📄 config.yaml # 서버/클라이언트 설정
├── 📄 users.yaml # 사용자 데이터베이스
├── 📄 requirements.txt # Python 종속성
├── 📄 install.sh # 원라인 서버 설치 프로그램
├── 📄 smtp-tunnel.service # systemd 유닛 파일
├── 🔧 smtp-tunnel-adduser # 사용자 추가 스크립트
├── 🔧 smtp-tunnel-deluser # 사용자 제거 스크립트
├── 🔧 smtp-tunnel-listusers # 사용자 목록 스크립트
├── 🔧 smtp-tunnel-update # 서버 업데이트 스크립트
├── 📄 README.md # 이 파일
└── 📄 TECHNICAL.md # 기술 문서
/opt/smtp-tunnel/ # 애플리케이션 파일
/etc/smtp-tunnel/ # 설정 파일
├── config.yaml
├── users.yaml
├── server.crt
├── server.key
└── ca.crt
/usr/local/bin/ # 관리 명령어
├── smtp-tunnel-adduser
├── smtp-tunnel-deluser
├── smtp-tunnel-listusers
└── smtp-tunnel-update
systemctl status smtp-tunnel 또는 ps aux | grep server.pynetstat -tlnp | grep 587ufw statususername과 secret이 users.yaml의 값과 일치하는지 확인smtp-tunnel-listusers -v를 실행하여 사용자가 존재하는지 확인10.0.0.0/8)server_host가 인증서 호스트명과 일치하는지 확인ca.crt를 가지고 있는지 확인# 상세 로깅 활성화
python server.py -d
python client.py -d
# systemd 로그 보기
journalctl -u smtp-tunnel -f
ca_cert 사용 - 중간자 공격 방지smtp-tunnel-adduser 사용 - 강력한 비밀 자동 생성users.yaml 보호 - 모든 사용자 비밀 포함 (chmod 600)logging: false로 로깅 비활성화📚 자세한 보안 분석 및 위협 모델은 TECHNICAL.md를 참조하세요.
이 프로젝트는 교육 및 승인된 목적으로만 제공됩니다. 책임감 있게 사용하고 관련 법률을 준수하십시오.
이 도구는 합법적인 프라이버시 및 검열 회피 목적으로 설계되었습니다. 사용자는 자신의 사용이 관련 법률 및 규정을 준수하는지 확인할 책임이 있습니다.
인터넷 자유를 위한 ❤️로 제작됨
./start.sh 실행 |
| 🍎 macOS | ./start.sh 실행 |
| 옵션 | 설명 | 기본값 |
|---|
host | 수신 인터페이스 | 0.0.0.0 |
port | 수신 포트 | 587 |
hostname | SMTP 호스트명 (인증서와 일치해야 함) | mail.example.com |
cert_file | TLS 인증서 경로 | server.crt |
key_file | TLS 개인 키 경로 | server.key |
users_file | 사용자 설정 파일 경로 | users.yaml |
log_users | 전역 로깅 설정 | true |
whitelist | 이 사용자에게 허용된 IP (CIDR 지원) | 모든 IP |
logging | 이 사용자의 활동 로깅 활성화 | true |
| 옵션 | 설명 | 기본값 |
|---|
server_host | 서버 도메인 이름 | 필수 |
server_port | 서버 포트 | 587 |
socks_port | 로컬 SOCKS5 포트 | 1080 |
socks_host | 로컬 SOCKS5 인터페이스 | 127.0.0.1 |
username | 사용자 이름 | 필수 |
secret | 인증 비밀 | 필수 |
ca_cert | 확인용 CA 인증서 | 권장 |