
Высокоскоростной скрытый туннель, маскирующий TCP-трафик под SMTP-переписку для обхода межсетевых экранов с глубоким анализом пакетов (DPI).
Высокоскоростной скрытый туннель, маскирующий TCP-трафик под SMTP-почтовое сообщение для обхода DPI-брандмауэров.
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐
│ Application │─────▶│ Client │─────▶│ Server │─────▶│ Internet │
│ (Browser) │ TCP │ SOCKS5:1080 │ SMTP │ Port 587 │ TCP │ │
│ │◀─────│ │◀─────│ │◀─────│ │
└─────────────┘ └─────────────┘ └─────────────┘ └──────────────┘
│ │
│ Выглядит как │
│ почтовый трафик │
▼ ▼
┌────────────────────────────────┐
│ DPI Firewall │
│ ✅ Видит: Обычная SMTP-сессия │
│ ❌ Не видит: Туннельные данные│
└────────────────────────────────┘
📚 Подробные технические детали, спецификации протокола и анализ безопасности см. в TECHNICAL.md.
Получите бесплатный домен, указывающий на ваш VPS:
Пример: myserver.duckdns.org → 203.0.113.50 (IP вашего VPS)
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 |
Лаунчер автоматически установит зависимости и запустит клиент.
✅ Вы должны увидеть:
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
# Должен показать IP вашего VPS
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
| Параметр | Описание | По умолчанию |
|---|
# Проверка статуса
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 unit-файл
├── 🔧 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.yamlsmtp-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.
Этот проект предоставляется только для образовательного и авторизованного использования. Используйте ответственно и в соответствии с действующим законодательством.
Этот инструмент предназначен для законной защиты конфиденциальности и обхода цензуры. Пользователи несут ответственность за обеспечение соответствия их использования применимым законам и правилам.
Сделано с ❤️ для свободы интернета
| Возможность | Описание |
|---|
| 🔒 TLS-шифрование | Весь трафик шифруется с помощью TLS 1.2+ после STARTTLS |
| 🎭 Обход DPI | Начальное рукопожатие имитирует реальные SMTP-серверы (Postfix) |
| ⚡ Высокая скорость | Бинарный потоковый протокол после рукопожатия — минимальные накладные расходы |
| 👥 Многопользовательский режим | Секреты для каждого пользователя, IP-белые списки и настройки логирования |
| 🔑 Аутентификация | Предустановленные ключи для каждого пользователя с HMAC-SHA256 |
| 🌐 SOCKS5-прокси | Стандартный интерфейс прокси — работает с любыми приложениями |
| 📡 Мультиплексирование | Несколько соединений через один туннель |
| 🛡️ IP-белый список | Контроль доступа для каждого пользователя по IP-адресу/CIDR |
| 📦 Простая установка | Установка сервера одной командой с systemd-сервисом |
| 🎁 Клиентские пакеты | Автоматически генерируемые ZIP-файлы для каждого пользователя |
| 🔄 Автоподключение | Клиент автоматически переподключается при потере соединения |
| 🐧 Linux | Запустите ./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 |
secret | Секрет аутентификации пользователя | Обязательный |
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-сертификат для проверки | Рекомендуется |