Перейти к содержанию

Лидеры

  1. Deniom

    Deniom

    Эксперты


    • Баллы

      29

    • Постов

      18


  2. CO_PY

    CO_PY

    Модераторы


    • Баллы

      21

    • Постов

      46


  3. ProBot

    ProBot

    Авторы


    • Баллы

      20

    • Постов

      58


  4. fckdd_up

    fckdd_up

    Студенты


    • Баллы

      9

    • Постов

      13


Популярный контент

Показан контент с высокой репутацией за 03.02.2023 во всех областях

  1. Всем привет! Немного задержавшись с продолжением по личным объективным причинам, продолжаю рассказы. Для чистоты пояснений и инструкций я сделаю все эти действия с нуля и подключу одну ноду. Все данные в статье буду приводить как есть, так как все сервера и домены тестовые, можете ломиться сколько угодно они уже будут удалены. Повторяться сильно не буду, поэтому базовую настройку мы просто повторим. Относительно прошлой статьи мы сразу поменяем место для установки нашей панели. Оно будет по пути: /opt/remnawave 1. Аренда сервера Для начала, как обычно, нам нужно выбрать сервер. 1.1. Рекомендации по аренде Из последнего, что могу посоветовать к аренде: Как бы ни ругались, но проверенный за много лет: 4VPS: https://4vps.su/r/p52GUJhPv8b5 Самый стабильный для мейн-сервера в РФ Selectel: https://selectel.ru/?ref_code=8d43638548 Если нужны стабильные ноды, конечно Kamatera: https://go.cloudwm.com/visit/?bta=36601&nci=5749 2. Подготовка сервера 2.1. Установка Docker Первым делом на новом сервере ставим Docker: curl -fsSL https://get.docker.com | sh 2.2. Создание папки для проекта Remnawave mkdir -p /opt/remnawave/ 2.3. Переход в папку cd /opt/remnawave/ 2.4. Настройка домена в Cloudflare Идем в панель Cloudflare. Добавляем домен и привязываем к своему серверу (надеюсь, вы знаете, как это делать): remna.openode.xyz 2.5. Настройка страницы подписки Аналогично делаем для страницы подписки. У меня это будет: link.openode.xyz Отлично. 2.6. Установка Caddy Caddy мы будем ставить по инструкции с двухфакторной аутентификацией: https://remna.st/security/caddy-with-minimal-setup Создаем папку для Caddy. Caddy у нас будет работать в Docker, так проще для старта. Но вы можете делать на свое усмотрение. mkdir -p /opt/remnawave/caddy && cd /opt/remnawave/caddy 2.7. Создание файла Caddyfile Создаем файл Caddyfile: nano /opt/remnawave/caddy/Caddyfile Прописываем в него: { order authenticate before respond order authorize before respond security { local identity store localdb { realm local path /data/.local/caddy/users.json } authentication portal remnawaveportal { crypto default token lifetime {$AUTH_TOKEN_LIFETIME} enable identity store localdb cookie domain {$REMNAWAVE_PANEL_DOMAIN} ui { links { "Remnawave" "/dashboard/home" icon "las la-tachometer-alt" "My Identity" "/r/whoami" icon "las la-user" "API Keys" "/r/settings/apikeys" icon "las la-key" "MFA" "/r/settings/mfa" icon "lab la-keycdn" } } transform user { match origin local action add role authp/admin require mfa } } authorization policy panelpolicy { set auth url /r allow roles authp/admin with api key auth portal remnawaveportal realm local acl rule { comment "Accept" match role authp/admin allow stop log info } acl rule { comment "Deny" match any deny log warn } } } } https://{$REMNAWAVE_PANEL_DOMAIN} { route /api/* { reverse_proxy http://remnawave:3000 } handle /r { rewrite * /auth request_header +X-Forwarded-Prefix /r authenticate with remnawaveportal } route /r* { authenticate with remnawaveportal } route /* { authorize with panelpolicy reverse_proxy http://remnawave:3000 } } link.openode.xyz { reverse_proxy http://remnawave-subscription-page:3010 } Все данные у нас будут браться из environment, которые мы будем передавать в контейнер. ЕСЛИ ВЫ НЕ ХОТИТЕ ИСПОЛЬЗОВАТЬ ДВУХФАКТОРНУЮ АУТЕНТИФИКАЦИЮ ДЛЯ ВХОДА В ПАНЕЛЬ, ТО УДАЛИТЕ СТРОКУ ИЗ КОДА ВЫШЕ: require mfa 2.8. Создание файла контейнера для Caddy Создаем файл контейнера для Caddy: nano docker-compose.yml Вставляем содержимое: services: remnawave-caddy: image: remnawave/caddy-with-auth:latest container_name: 'remnawave-caddy' hostname: remnawave-caddy restart: always environment: - AUTH_TOKEN_LIFETIME=3600 - REMNAWAVE_PANEL_DOMAIN=remna.openode.xyz - AUTHP_ADMIN_USER=admin - AUTHP_ADMIN_EMAIL=admin@openode.xyz - AUTHP_ADMIN_SECRET=super-puper-openode ports: - '0.0.0.0:443:443' - '0.0.0.0:80:80' networks: - remnawave-network volumes: - ./Caddyfile:/etc/caddy/Caddyfile - remnawave-caddy-ssl-data:/data networks: remnawave-network: name: remnawave-network driver: bridge external: true volumes: remnawave-caddy-ssl-data: driver: local external: false name: remnawave-caddy-ssl-data Контейнер создали, но запускать пока не будем. Сеть мы заранее указали ту, которую создадим далее. 3. Установка панели 3.1. Создание файла docker-compose.yml Переходим в папку Remnawave и создаем файл docker-compose.yml: cd /opt/remnawave/ && nano docker-compose.yml Устанавливать будем latest-ветку, так как там сейчас все самые полезные функции. В скором времени будет релиз 1.5.0 в latest, поэтому можно будет смело его брать за базу. services: remnawave-db: image: postgres:17 container_name: 'remnawave-db' hostname: remnawave-db restart: always env_file: - .env environment: - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_DB=${POSTGRES_DB} - TZ=UTC ports: - '127.0.0.1:6767:5432' volumes: - remnawave-db-data:/var/lib/postgresql/data networks: - remnawave-network healthcheck: test: ['CMD-SHELL', 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}'] interval: 3s timeout: 10s retries: 3 remnawave: image: remnawave/backend:latest container_name: 'remnawave' hostname: remnawave restart: always ports: - '127.0.0.1:3000:3000' env_file: - .env networks: - remnawave-network depends_on: remnawave-db: condition: service_healthy remnawave-redis: image: valkey/valkey:8.0.2-alpine container_name: remnawave-redis hostname: remnawave-redis restart: always networks: - remnawave-network volumes: - remnawave-redis-data:/data remnawave-subscription-page: image: remnawave/subscription-page:latest container_name: remnawave-subscription-page hostname: remnawave-subscription-page restart: always environment: - REMNAWAVE_PANEL_URL=http://remnawave:3000 # Здесь мы указали контейнер и порт контейнера. Но если у вас страница будет стоять отдельно, вы должны указать здесь домен для панели - APP_PORT=3010 - META_TITLE="Subscription Page Title" - META_DESCRIPTION="Subscription Page Description" ports: - '127.0.0.1:3010:3010' networks: - remnawave-network networks: remnawave-network: name: remnawave-network driver: bridge external: false volumes: remnawave-db-data: driver: local external: false name: remnawave-db-data remnawave-redis-data: driver: local external: false name: remnawave-redis-data Для страницы подписки замените в - REMNAWAVE_PLAIN_DOMAIN=remna.openode.xyz на ВАШ домен панели Можно также добавить для страницы подписки параметр ниже: - CUSTOM_SUB_PREFIX=sub тогда получится такой вариант: remnawave-subscription-page: image: remnawave/subscription-page:latest container_name: remnawave-subscription-page hostname: remnawave-subscription-page restart: always environment: - REMNAWAVE_PANEL_URL=http://remnawave:3000 - SUBSCRIPTION_PAGE_PORT=3010 - META_TITLE="Subscription Page Title" - META_DESCRIPTION="Subscription Page Description" - CUSTOM_SUB_PREFIX=sub ports: - '127.0.0.1:3010:3010' networks: - remnawave-network После этих изменений, у вас к адресу подписки добавится дополнительный параметр в url: link.openode.xyz/sub/<uuid> Тогда и для .env (который мы будем формировать дальше) нужно будет указывать правильный параметр для sub_public_domain SUB_PUBLIC_DOMAIN=link.openode.xyz/sub Сохранили и закрыли. 3.2. Создание файла .env Создаем здесь же файл .env: nano .env И вставляем в него содержимое из файла по ссылке: https://github.com/remnawave/backend/blob/main/.env.sample Я приведу сразу готовый свой файл: cd ~/remnawave/ && nano docker-compose.yml ### APP ### APP_PORT=3000 METRICS_PORT=3001 ### API ### # Possible values: max (start instances on all cores), number (start instances on number of cores), -1 (start instances on all cores - 1) # !!! Do not set this value more that physical cores count in your machine !!! API_INSTANCES=max ### DATABASE ### # FORMAT: postgresql://{user}:{password}@{host}:{port}/{database} DATABASE_URL="postgresql://postgres:postgres@remnawave-db:5432/postgres" ### REDIS ### REDIS_HOST=remnawave-redis REDIS_PORT=6379 ### JWT ### ### CHANGE DEFAULT VALUES ### JWT_AUTH_SECRET=6ac5b3ba99b94d9e0f6b9c242691c14e3bd54492b60aff7829e6b050535d8827278c098b42d6833a314af104f2c9da8046c33a14f45c00c43117dda0ba4ea25866a3562babea7ac59c523fea04cab6c24c4f191846b73ac7420fb265b0f910ad09018f662e8daf7e6bf8173546d89687fdb839fd14f34e754b20ae1e1d556ee3 JWT_API_TOKENS_SECRET=b3e86a783d3ca63941fe48eb2fdf8901fa294b777376c77b852c98cab8e136d12f4a0b0c898a60cdda6c1a76af6f7a9acdd292a4040bc0a4a7c34091ddb25158aa785c90391e094672da646712d2ae1e6f7e2bada14a2deb9099c291bc464115fb0ae71d042baacc8f7890ea55d8eb6a42d474604429978880e851632ce187a6 ### TELEGRAM ### IS_TELEGRAM_NOTIFICATIONS_ENABLED=false #TELEGRAM_NOTIFY_USERS_CHAT_ID=change_me #TELEGRAM_NOTIFY_NODES_CHAT_ID=change_me #TELEGRAM_NOTIFY_USERS_THREAD_ID=change_me #TELEGRAM_NOTIFY_NODES_THREAD_ID=change_me TELEGRAM_OAUTH_ENABLED=false ### or TRUE (required IS_TELEGRAM_NOTIFICATIONS_ENABLED=true) TELEGRAM_OAUTH_ADMIN_IDS=change_me ### FRONT_END ### FRONT_END_DOMAIN=remna.openode.xyz ### SUBSCRIPTION PUBLIC DOMAIN ### ### RAW DOMAIN, WITHOUT HTTP/HTTPS, DO NOT PLACE / to end of domain ### ### Used in "profile-web-page-url" response header ### SUB_PUBLIC_DOMAIN=link.openode.xyz ### SWAGGER ### SWAGGER_PATH=/docs SCALAR_PATH=/scalar IS_DOCS_ENABLED=false ### PROMETHEUS ### ### Metrics are available at /api/metrics METRICS_USER=admin METRICS_PASS=admin ### WEBHOOK ### WEBHOOK_ENABLED=false ### Only https:// is allowed WEBHOOK_URL=https://webhook.site/1234567890 ### This secret is used to sign the webhook payload, must be exact 64 characters. Only a-z, 0-9, A-Z are allowed. WEBHOOK_SECRET_HEADER=vsmu67Kmg6R8FjIOF1WUY8LWBHie4scdEqrfsKmyf4IAf8dY3nFS0wwYHkhh6ZvQ ### CLOUDFLARE ### # USED ONLY FOR docker-compose-prod-with-cf.yml # NOT USED BY THE APP ITSELF # CLOUDFLARE_TOKEN=ey... ### Database ### ### For Postgres Docker container ### # NOT USED BY THE APP ITSELF POSTGRES_USER=postgres POSTGRES_PASSWORD=postgres POSTGRES_DB=postgres Для того что бы включить oAuth Telegram авторизацию - вы должны внести в вашего бота через @botfather параметр домена панели. Обязательно заменяйте все JWT-секреты на свои. Значения генерируем здесь: https://jwtsecret.com/generate 4. Запуск панели 4.1. Запуск контейнера Remnawave Поднимаем наш контейнер Remnawave: cd /opt/remnawave && docker compose up -d 4.2. Запуск контейнера Caddy Поднимаем наш контейнер Caddy: cd caddy && docker compose up -d 5. Настройка панели 5.1. Авторизация Зайдя на домен: remna.openode.xyz Видим следующее: Проходим авторизацию, в моем случае это было: admin@openode.xyz super-puper-openode 5.2. Создание токена MFA Теперь идет запрос, что нам нужно создать токен для многофакторной аутентификации. Если вы все сделали корректно, увидите окно регистрации в Remnawave: Я задал свои параметры и сохранил пароль в надежном месте. Панель готова! Создадим первого пользователя и проверим, что страница подписки работает корректно. 6. Обновление конфигурации 6.1. Обновление конфига Заходим на дашборде на страницу «Конфиг» и заменяем все содержимое на: { "log": { "loglevel": "warning" }, "inbounds": [ { "tag": "Vless TCP reality", "port": 443, "listen": "0.0.0.0", "protocol": "vless", "settings": { "clients": [], "decryption": "none" }, "sniffing": { "enabled": true, "destOverride": [ "http", "tls" ] }, "streamSettings": { "network": "tcp", "security": "reality", "tcpSettings": {}, "realitySettings": { "dest": "ftp.debian.org:443", "show": false, "xver": 0, "shortIds": [ "" ], "publicKey": "22mH2kO_6Q43slZjf-njD9TMv9xeYMA1P28PzEtqOWo", "privateKey": "Jy4FdQWKBOtLc2rvJqRxP-WMELzNhRxmUgequcAcLhQ", "serverNames": [ "ftp.debian.org" ] } } }, { "tag": "SS", "port": 8580, "listen": "0.0.0.0", "protocol": "shadowsocks", "settings": { "clients": [], "network": "tcp,udp" } } ], "outbounds": [ { "tag": "DIRECT", "protocol": "freedom", "settings": { "domainStrategy": "ForceIPv4" } }, { "tag": "BLOCK", "protocol": "blackhole" }, { "tag": "IPv4", "protocol": "freedom", "settings": { "domainStrategy": "ForceIPv4" } } ], "routing": { "rules": [ { "type": "field", "domain": [ "full:cloudflare.com", "domain:msftconnecttest.com", "domain:msftncsi.com", "domain:connectivitycheck.gstatic.com", "domain:captive.apple.com", "full:detectportal.firefox.com", "domain:networkcheck.kde.org", "full:*.gstatic.com", "domain:gstatic.com" ], "outboundTag": "DIRECT" }, { "type": "field", "protocol": [ "bittorrent" ], "outboundTag": "BLOCK" }, { "ip": [ "geoip:private" ], "type": "field", "outboundTag": "BLOCK" } ], "domainStrategy": "IPIfNonMatch" } } 6.2. Генерация ключей После этого обязательно генерируем пару ключей: Копируем эту пару ключей и заменяем содержимое в конфигурации VLESS (чтобы ваши ключи были уникальными). 7. Работа с инбаундами 7.1. Просмотр инбаундов Идем на вкладку «Инбаунды» и видим: Все инбаунды у нас автоматически подтянулись. Можно посмотреть самые важные характеристики, а также есть кнопка для массового управления ими. 8. Подключение ноды НОДА - это отдельный сервер xray, который будет на себя принимать подключения. Нода может быть установлена на одном сервере с панелью. Но это не рекомендуется по разным объективным причинам - безопасность, стабильность, скорость. Исключения составляет "соло" использование панели, например чисто для себя одного, и в таком варианте, использовать два сервера, один из которых чисто под панель, а второй под ноду - затратно. Нода это обычно зарубежный сервер. Ноды мы добавляем чтобы потом к ним подключаться. Системный требования для ноды ниже чем для панели. Обычно хватает 1 ядро, 2гб памяти и 10гб места. Если у вас нодой будут пользоваться достаточно большое количество человек, то имейте ввиду, что будут расти требования к процессору. Вот простая схема требований к ноде. до 70-100 человек (в зависимости от сетевой нагрузки) - 1 ядро 1гб до 300 человек - 2 ядра - 2 гб 10гб\с порт. до 600-800 человек - 4 ядра 8гб, и минимум 10гб\с порт. больше 1000 человек - лучше балансировку ноды, хотя бы по DNS. 8.1. Создание новой ноды Переходим в «Ноды» 2 и жмем «Создать новую ноду».. Появится такое окно Его не закрываем. Сейчас оно нам нужно для копирования ключа, а дальше мы заполним параметры сервера для подключения. 8.2. Подключение к серверу ноды Подключаемся к серверу нашей ноды (я использую Termius). 8.3. Установка скрипта ноды sudo bash -c "$(curl -sL https://github.com/DigneZzZ/remnawave-scripts/raw/main/remnanode.sh)" @ install 8.4. Ввод данных сертификата Будет предложено ввести данные сертификата из панели: Копируем из нашей панели: И вставляем как есть в нашу консоль. Дважды жмем Enter после вставки (чтобы появилась пустая строка, тогда он перейдет на следующий этап). Указываем порт (по умолчанию он 3000, можно нажать Enter). Далее задаст вопрос, хотите ли вы установить последнее ядро Xray-core (если нажать Enter, он это пропустит), но установить можно будет потом отдельно. И все. Готово. Контейнер запустится и будет ждать подключений: 8.5. Настройка параметров сервера Возвращаемся в нашу панель. Задаем параметры нашего сервера: ЗАПОМНИТЕ РАЗ И НА ВСЕГДА! ПОДКЛЮЧАЕМ НОДУ ТОЛЬКО IP-АДРЕСУ! НЕ ПО ДОМЕНУ! ДОМЕН МОЖНО УКАЗАТЬ ТОЛЬКО В НАСТРОЙКАХ ХОСТА!!! Жмем «Сохранить». Увидим сначала попытку подключения: Затем статус, что подключен: 9. Создание хостов 9.1. Создание хоста Последняя, заключительная часть создания подключения — это создание хостов. В Marzban они создавались автоматически. Здесь они создаются вручную. Идем во вкладку «Хосты». Жмем «Создать хост». Заполняем данные: Примечание — это то, как вы назовете сами свой хост и как он будет отображаться у пользователя. Например, Sweden. И к имени можно будет добавить переменные: Мы добавим только Days_left. В адресе ноды указываем либо IP-адрес сервера, либо поддомен, привязанный к этому серверу. Я укажу поддомен (это удобнее: в случае смены сервера достаточно будет поменять DNS-запись для этого адреса на новый сервер-ноду, и для пользователя смена пройдет незаметно). Выбираем наш инбаунд. А порт у нас подтянется самостоятельно из конфигурации. И ОБЯЗАТЕЛЬНО ДЕРНИТЕ СЕРЫЙ ФЛАЖОК , ПЕРЕВЕДЯ ЕГО В СОСТОЯНИЕ ВКЛЮЧЕННОГО Не знаю, как сейчас, но на некоторых клиентах была проблема, что Fingerprint не проставлялся автоматически. Поэтому давайте зададим его по умолчанию: Выбираем Chrome. Жмем «Сохранить». Готово! 9.2. Привязка инбаундов для пользователей Для уже созданных пользователей инбаунды нужно прописать принудительно, для всех новых создаваемых пользователей вы и так будете выбирать. Поэтому вернемся на вкладку «Инбаунды». И научимся работать с массовыми действиями. Включим Vless-инбаунд для ВСЕХ (но у нас это для нашего единственного пользователя): И получим такой результат: Готово! Чтобы сбросить пароль администратора (для входа в панель) или сертификаты, есть специальная консольная CLI-команда (выполнять на сервере с мейном): docker exec -it remnawave remnawave И получим такие варианты:
    5 баллов
  2. Всем привет! Предлагаю: Скинуться на заказную разработку дизайна страницы подписки для тех кто скинулся Совместное формирование ТЗ. Предложения по дизайнеру и верстальщику можно тоже сюда выложить. Задача: Уникальная страница для участников сообщества Легкий красивый дизайн Простое управление 3-4 вида цвета и заголовка. Будем мутить? Вместе будет явно дешевле. Прайс пока неизвестный, будем формировать исходя из ТЗ и количества участников.
    4 балла
  3. Всем привет! Тема устарела, теперь все функции обновления ядер встроены в консольные команды marzban core-update и marzban-node core-update
    4 балла
  4. У кого не работают ssl (ssl error или неверный сертификат) / не грузиться веб панель через https. Нужно пробросить соединение через nginx. При пробросе соединения через nginx не меняем порт в .env если сменили вернуть старый: 8000 Добавлять пути до ключей в .env и docker-compose.yml ненужно. 1) Cтавим nginx - sudo apt install nginx 2) Идем в конфиг nginx'a - sudo nano /etc/nginx/nginx.conf 3) Находим там эту строчку и удаляем стандартный конфиг (Basic config) внутри 4) Вставляем этот код в include mime.types; sendfile on; keepalive_timeout 65; server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name marzban.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; location / { proxy_pass http://0.0.0.0:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } Не забудьте прописать свой путь до ключей и свой домен. Должно получиться вот так: Сохраните изменения. 5) Перезапустите nginx - sudo nginx -s reload Теперь попробуйте подключиться к панели марзбана https://your.proxy.domain.com/dashboard все должно заработать. Скрипт для бекапа настроек марзбана - https://github.getafreenode.com/iamtheted/Marzban-Backup @DigneZzZ закрепи плз. И дай возможность редактировать сообщения.
    4 балла
  5. Всем привет! Статья давно просилась, но дошли руки только сейчас. Ни для кого не секрет, что реализовать подключение через WireGuard сейчас возможно (в 90% случаев) только по РФ. Вся зарубежка очень сильно блочиться. Поэтому, мы сделаем хитрее, и подключаясь к Ру серверу через WG, будем пересылать трафик на зарубежный сервер, через различные протоколы, в нашем варианте будет ShadowSocks. 1. Арендуем сервер Для эксперимента, я взял в аренду у 4vps 2 сервера (Российский и Зарубежный) (Кстати, на них я сижу уже больше года, и меня устраивает абсолютно всё! А в ближайшее время они все зарубежные сервера перерегистрируют на свою зарубежную фирму.) 2. Подключаемся и настраиваем Для подключения я использую Termius - SSH platform for Mobile and Desktop Есть и платная и бесплатные версии. Везде выполним обновление репозиториев и пакетов: apt update && apt upgrade -yqq 3. Устанавливаем 3x-ui Официальный репозиторий тут: MHSanaei/3x-ui: Xray panel supporting multi-protocol multi-user expire day & traffic & ip limit (Vmess & Vless & Trojan & ShadowSocks & Wireguard) (github.com) Нам сервер нужен только для подключения WireGuard. Дальше нас не особо интересует, поэтому сразу скажу, что домен здесь не принципиален, и сертификаты выпускать мы не будем. Ставить можно как в контейнер, так и в саму систему. Я люблю контейнеры. 3.1. Ставим докер на оба сервера bash <(curl -sSL https://get.docker.com) 3.2. Клонируем Git-репу git clone https://github.com/MHSanaei/3x-ui.git cd 3x-ui 3.3. Поднимаем контейнер docker compose up -d 4. Настройка Ру сервера. Идем по адресу: http://ip:2053/panel Авторизовываемся. Логин и пароль: admin 4.1. Переходим в Подключения. 4.2. Жмем, Добавить подключение. Протокол выбираем Wireguard. Пишем примечание. 4.3. Заполняем параметры Peer. Имеем такой вид: Дальше ВНИМАТЕЛЬНО ЧИТАЕМ! 4.4. Копируем пару ключей - Сохраняем например в блокнот. Имеем: kHcaQJXLi1zr3AiWvLFPCJHvkLjTY3WwCXk39Sazw3c= Qg+oGxuA+T/AITtmPBTf7ZZwvIiXodRcMrc/0W0tQjs= Скопировали? 4.5. Жмем кнопочку для генерации новой пары ключей 4.6. в Public Key в раздел Peer вставляем скопированный в блокнот второй ключ В разрешенные IP адреса заносим: 10.10.10.0/24 Все остальные удаляем! Должно быть как на скриншоте. 4.7. Формируем наш конфиг для WG: В PrivateKey мы вставляем наш Приватный ключ из первого конфига. В PublicKey мы вставляем НОВЫЙ сгенерированный по новой в пункте 4.5 AllowedIPS - заполняем по примеру. EndPoint - заполняем по шаблону: IP сервера:Port из конфига сгенерированный: 5. Настраиваем зарубежный сервер. (я его специально не переводил на русский чтобы было понятно с чем работаем) Заходим на адрес: http://46.29.234.164:2053/panel Открываем и жмем Add inbound 5.1 Выбираем протокол ShadowSocks Выбираем тип шифрования BLAKE3_CHACHA20_POLY1305 и Жмем - 5.2. Жмем на хлебные крошки (3 точки) 5.3. Выбираем QR Code Кликаем мышкой на сам QR код и у нас в буфер скопируется подключение. ss://MjAyMi1ibGFrZTMtY2hhY2hhMjAtcG9seTEzMDU6dlUyMEl4ckgwYTYzOURaODJDK0Y1TlZNYkMrRVdrei9VdFZUaVR5S3dyST0@46.29.234.164:46018?type=tcp 6. Настраиваем OutBound на RU сервере. Переключаемся на вкладку с RU сервером. 6.1. Идем в Настройки Xray - Исходящие 6.2. Жмем Добавить Исходящий 6.3. Переходим на вкладку JSON 6.4. Вставляем в поле наш шифрованный код и жмем кнопочку СПРАВА 6.5. Любуемся сгенерированным кодом Json. 6.6. Жмем внизу 6.7. Жмем сверху СОХРАНИТЬ НАСТРОЙКИ 6.7. Идем в Правила Маршрутизации Жмем Добавить Правило 6.8 В Inbound Выбираем наш Inbound 6.9. в Outbound Выбираем наш Outbound Жмем Добавить правило. 6.10 ЖМЕМ НАВЕРХУ СОХРАНИТЬ, А ЗАТЕМ ПЕРЕЗАПУСТИТЬ ЯДРО! ГОТОВО! Теперь все подключения по данному Inbound будут улетать на заданный Outbound. ВООБЩЕ ВСЕ. 7. Идем в WireGuard на компьютере 7.1. Жмем добавить Пустой туннель 7.2. Вставляем в него наш код из пункта 4.7 Жмем СОХАРНИТЬ. 7.3.Подключаемся и видим что трафик идет: 7.4. Идем на сайт 2ip.io и проверяем нашу локацию! ПОЗДРАВЛЯЮ! В ИНСТРУКЦИИ ПРОДЕМОНСТРИРОВАНЫ ТОЛЬКО БАЗОВЫЕ ОСНОВЫ И НАСТРОЙКИ! ОБЯЗАТЕЛЬНО ОБЕСПЕЧЬТЕ БЕЗОПАСНОСТЬ ВАШЕГО СЕРВЕРА! Используйте UFW. Поменяйте пароли администратора! Делайте Бэкапы! (в 3x-ui это можно сделать через телеграм бота через интерфейс) Если вам не нужен веб-интерфейс - закройте через порт! PS: В настройках ядра, в Базовом шаблоне, можно включить правило Direct для сайтов и айпи адресов в РФ. Таким образом, на РУ сайты вы будете заходить через WireGuard с РУ сервера. А все зарубежные сервисы, улетят на внешний адрес. А затем поменять приоритет правил в Правилах маршрутизации В итоге имеем прямые подключения с сервера на РУ адреса:
    3 балла
  6. Новый MOTD-дэшборд от NeoNode Теперь это не просто приветствие при входе, а полноценный системный дашборд — всё самое важное о сервере прямо в терминале. Установка Обычный режим (для root bash <(wget -qO- https://dignezzz.github.io/server/dashboard.sh) --force Режим для обычного пользователя (без root) (не рекомендуется): bash <(wget -qO- https://dignezzz.github.io/server/dashboard.sh) --force --not-root Настройка отображаемых блоков: motd-config Что умеет дашборд Аптайм, загрузка CPU, RAM, диск, ядро IP-адреса: локальный, публичный и IPv6 Поддержка Docker — видны остановленные и «упавшие» контейнеры Проверка безопасности: SSH-порт, root-доступ, вход по паролю Статус UFW, Fail2Ban, CrowdSec Сетевой трафик (vnstat) Состояние обновлений APT и автообновлений Проверка актуальности версии дашборда (обновление по ссылке) 🛠 Гибкая настройка Каждый блок можно включить или отключить Конфиг сохраняется в /etc/motdrc или ~/.motdrc Управление через интерактивную утилиту motd-config Поддержка обычных пользователей (работает даже в LXC, Proxmox, WebSSH) (но очень урезанная и должен быть установлен нужный софт) Пример: хочешь скрыть Docker, автообновления и IP — отключи через motd-config, и они исчезнут из дашборда. Преимущества Работает «из коробки» — без лишних зависимостей Не требует crontab или внешних API Отображает только нужную тебе информацию Статусы с эмодзи ( ) — читается моментально Поддержка монохромных терминалов — не сломается в Proxmox или LXC Обновление от 24.04.2025: Удалены tput-цвета — теперь нет багов в «серых» терминалах Подсвечены критичные риски: root-доступ, UFW, fail2ban Выводит ядро и SSH-настройки Автообновление версии через GitHub Pages Есть предложения, баги или хочешь добавить свой блок — читай в Telegram канале или комментируй в теме!
    3 балла
  7. Это небольшая заметка о том как буквально за 10 минут организовать пересылку уведомлений из системы Proxmox VE в телеграмм. Небольшое вступление В один не очень приятный момент я столкнулся с тем что резервное копирование proxmox из за ошибки не выполнялось несколько дней, а так как эксперименты над виртуалками с моей стороны очень частые для меня это очень плохой звоночек. В один не очень хороший момент я мог просто не найти бэкап на который рассчитывал. Для предотвращения подобной ситуации в будущем решил настроить уведомления в proxmox. Сама система proxmox поддерживает три типа уведомлений: smtp, gotify и встроенную отправку почты linux. По умолчанию настроен вариант отправки почты linux, но из коробки это решение работать не будет и все уведомления оседают где то в логах системы. Рассмотрим два других варианта более подробно: Gotify - интересная легкая система которая может удобно собирать по http все уведомления в одном месте. И... на этом все... как по мне в ней не хватает как минимум адекватной возможности пересылки в другие системы. Smtp - это классическая почта, фактически вы даете данные авторизации для отправки почты от вашего имени (или от имени специального почтового ящика). Вариант использовать почту был уже более приемлемый но хотелось все таки получать уведомления в телеграмм (у меня уже были ранее настроены уведомления для watchtower, sonar, radar и т.д.). На просторах интернета есть несколько ботов которые подключаются к proxmox api Для управления системой, но по большей степени это именно управление и уведомления они не получают, ну и для задачи это было избыточно. В сухом остатке имеем два пути решения задачи Gotify или Smtp, причем приложение Gotify работает по принципу что именно приложение идет за сообщением а не сервер отправляет на телефон, это серьезное ограничение которое требует внешний доступ к серверу Gotify. Простое и элегантное решение UPD 03.03.25: В proxmox появилась возможность отправлять уведомления с использованием вебхуков теперь настройка еще проще На просторах интернета и обсуждений проблемы в telegram каналах было найдено простое и элегантное решение, smtp_to_telegram. Это небольшое приложение поднимает smtp сервер для приема писем без авторизации и пересылает их в telegram бот. Данный метод можно использовать не только для proxmox но и для любого сервиса поддерживающего smtp отправку уведомлений. Подробнее о самом решении можете посмотреть на странице GitHub: https://github.com/KostyaEsmukov/smtp_to_telegram Фактически нам необходимо создать телеграмм бота (или использовать уже имеющийся) который будет только отправлять сообщения, но не будет читать. Это позволяет без проблем использовать одного бота для нескольких уведомлений как например для watchtower (автоматического обновления докер образов). На просторах интернета множество инструкций по созданию телеграмм ботов подробно расписывать не буду. Коротко идем к служебному боту https://t.me/BotFather и создаем нового бота через меню, нам надо от него токен API. Не забываем написать нашему боту что нибудь для запуска. Так же с помощью https://t.me/myidbot необходимо узнать наш id для отправки сообщений, все опять таки крайне просто пишем боту /getid и получаем циферки которые нам нужны. Само решение будем запускать как я люблю в докере, так как это банально проще и легко воспроизводится: version: '3' services: readeck: container_name: SmtpToTelegram image: kostyaesmukov/smtp_to_telegram:latest restart: unless-stopped volumes: - /DATA/AppData/readeck:/readeck environment: - ST_TELEGRAM_CHAT_IDS=779979797 - ST_TELEGRAM_BOT_TOKEN=7127345363:AAEarsdfsdtnYsZZasdasdx0OfFcDc1NLU - ST_TELEGRAM_MESSAGE_TEMPLATE={subject}\n\n{body}\n\n{attachments_details} ports: - 2525:2525 Сам автор проекта не очень коммуникабельный и не собирает дорабатывать как либо решение, или банально делать образ докера под arm64 но есть альтернативный вариант под эту архитектуру. Для arm64 используйте образ image: cobra1978/smtp_to_telegram После запуска докер контейнера на нашем сервере на порту 2525 поднимется smtp сервер пересылки без авторизации. Переходим в настройку proxmox, нас интересует раздел notification у центра обработки данных. Создадим новую цель уведомлений smtp с данными для нашего сервиса пересылки (сервер это ip нашего сервера на котором запущен докер контейнер пересылки): Фактически отправитель и получатель могут быть вообще любыми адресами у сервиса нет контроля релевантности адресов кроме общего шаблона <name>@domein Фактически все у нас есть возможность отправлять уведомления proxmox в телеграмм, нажимаем test и видимо сообщение от бота. Если не сработало проверьте что у пользователя заполнен почтовый адрес Настройка уведомлений на почту Кроме бота можно настроить еще и дополнительно уведомления на почту, я для таких целей использую свой же почтовый ящик gmail. Но необходимо выполнить несколько предварительных настроек. Установить у пользователя proxmox почту. Для этого переходим в управление пользователями proxmox, и заполняем для пользователя от имени которого будем отправлять уведомления электронный адрес. Следующий пункт это получение пароля приложения для нашей почты которая будет выполнять отправку. Каждый почтовый сервис имеет свои правила и настройки, но большая часть современных требует создания пароля приложения с ограниченными правами. Для гугл можно посмотреть тут: https://support.google.com/accounts/answer/185833?hl=ru После получения пароля возвращаемся в раздел уведомлений proxmox и создаем новую цель для рассылки smtp, для своего почтового сервиса ищите настройки в поиске по словам "smtp <название вашего сервиса>" Обратите внимание что получатель и отправитель (настраивается в пользователе) почты могут совпадать, это будет письмо самому себе. Нажимаем тест и проверяем почту. Отправителя по умолчанию можно выключить, но удалить не получиться. Уведомления о бэкапах proxmox В proxmox существует достаточно гибкая система условий для уведомлений, подробно о ней можно почитать тут https://pve.proxmox.com/wiki/Notifications Я приведу небольшой пример который я использую для получения уведомлений о бэкапах как успешных так и ошибочных. Переходим в раздел уведомлений proxmox и создаем новый Notification Matchers Данные настройки будут отправлять на телеграмм и почту сообщение о событиях бэкапа в любое время. Для дополнительных ограничений по времени или других типов событий рекомендую ознакомится с документацией. Пример уведомления о бэкапах в телеграмм, к сообщению дополнительно прикладывается лог. Телеграмм бот дополнительно прикладывает его в виде файла так как не всегда удобно читать логи в сообщении телеграмм. И оно же на почте Спасибо за внимание, удачной настройки и меньше тревожных ведомлений.
    3 балла
  8. DWG - UI Обсуждение DWG » | DWG-CLI » | DWG-UI » | DWG-DARK » | DWG [multi] » Информация носит ознакомительный характер. Пожалуйста не нарушайте действующего законодательства вашей страны. Сборка DWG-UI включает в себя: Веб интерфейс для управления клиентами Wireguard - WG Easy. Контейнер c Unbound предоставляет собственный DNS сервер с кэшированием DNS и дополнительными параметрами конфиденциальности. Контейнер c AdGuard Home (более современный аналог чем PiHole) используется для блокировки рекламы, аналитических трекеров и редактирования списка используемых DNS серверов к которым обращается Unbound. Имеет очень полезную функцию параллельных запросов, DNS которой нет в PiHole. Контейнер с WireGuard используется непосредственно для запуска серверной части Wireguard VPN Основные репозитории с обновлениями на GitHub: GitHub - DigneZzZ/dwg: dwg-universal GitHub - DigneZzZ/dwg-ui: Combination Wireguard + Adguard Home + Unbound (DoH include) Требования: Чистый пустой сервер. Первым делом нам нужно арендовать хороший и быстрый сервер. Берем какой вам подходит лучше по скорости и получаем бонус 15% (если пополнить в первые 24часа регистрации) на пополнение баланса: https://aeza.net/?ref=377137 Замерить скорости можно здесь: Aéza (aeza.net) Поддерживаемые операционные системы (где проверена работоспособность): Ubuntu 20.04, 22.04, 23.10, Debian 11, 12, Centos 8,9 Скрипт устанавливает все автоматически. Все комментарии по скрипту внутри в комментариях. Команда установки: apt update && apt install curl sudo git -y && curl -Of https://raw.githubusercontent.com/DigneZzZ/dwg-ui/main/setup.sh && chmod +x setup.sh && ./setup.sh Что установится: Сначала установится Git, чтобы можно было скопировать мой репозиторий Docker - последняя версия Docker-compose - последняя версия Wg-easy - интерактивный режим введения пароля для веб AdGuard Home - интерактивный режим создания пользователя и пароля (можно оставить стандартным) Unbound - все в стоке apache2-utils - необходим для генерации хэш-паролей ssh.sh - скрипт для смены порта SSH подключения ufw.sh - скрипт для установки UFW Firewall. Напомнит установить ufw-docker и сам закроет доступ извне! ВНИМАНИЕ! Запускать только после того как создадите для себя клиента в WireGUARD!!! Адреса веб-интерфейсов: WG-Easy web-ui: yo.ur.ip.xx:51821 #вместо yo.ur.ip.xx введите IP своего сервера, пароль введите тот что присвоили при установке Доступ в web-ui из сети WG: http://10.2.0.3:51821 AdGuard HOME: http://10.2.0.100/ Логин: admin Пароль: admin # Скрипт для смены пароля AGH bash <(wget -qO- https://raw.githubusercontent.com/DigneZzZ/dwg/main/change.sh)
    3 балла
  9. Вступление или зачем нам вообще это надо? В наше интересное время все чаше приходиться использовать VPN, но тут начинается другая проблема часть местных интернет ресурсов может быть недоступна через сервер VPN. И начинается постоянное передергивание включения выключения VPN соединения. Существует много вариантов концепции разделения трафика и обхода региональных блокировок я решил рассмотреть вариант реализации с использованием wireguard. Да это скорее всего (даже наверняка) не самый лучший инструмент для организации разделения трафика но во первых уже был работающий сервер wg во вторых заинтересовала сама идея реализации. Практически все материалы по разделению трафика были заимствованы и доработаны из статьи с хабр Укрощаем одноглазого змея. Разбираемся с WireGuard и делаем свой умный VPN я не претендую на авторство метода, скриптов или любых материалов из оригинальной статьи. А так же настоятельно рекомендую ознакомиться с оригиналом статьи для лучшего понимания идеи. Цель данной публикации познакомить с вариантом разделения трафика, предоставить сжатую инструкцию по настройке. Так же в отличии от оригинальной статьи настройка выполнялась с установкой веб интерфейса в виде wg-easy так как ручная генерация новых клиентов описанная автором мне кажется мягко говоря неудобной и не оправданной. Для реализации надо: 1. Удаленный сервер с настроенным wg сервером 2. Локальная машина Linux (желательно виртуальная отдельно от других приложений) для работы достаточно 256 мб ОЗУ но зависит от количества клиентов и объема трафика. Подготовка сервера Выполним первоначальную настройку сервера для установки. Основная настройка будет выполнятся с использованием скрипта, но для создания клиентских подключений используется wg-easy установленным с использованием docker-compose. Обновляем репозитории и пакеты: apt update -y && apt upgrade -y Устанавливаем Docker: apt install curl && curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh Запускаем и включаем службу Docker systemctl start docker && systemctl enable docker Устанавливаем Docker Compose: curl -L --fail https://raw.githubusercontent.com/linuxserver/docker-docker-compose/master/run.sh -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose Так же устанавливает пакеты необходимые для работы wg и скрипта настройки маршрутов. apt install -y wireguard iptables ipcalc qrencode curl jq traceroute net-tools netscript Настройка соединения с внешним сервером Наш внутренний сервер подключается как клиент к внешнему серверу с настроенным wireguard. Для этого на внешнем сервере разворачиваем серверную часть wg (рекомендую использовать скрипты dwg) или заходим на ранее созданный и генерируем нового клиента. Нам необходимо получить файл конфигурации для подключения клиента вида: [Interface] PrivateKey = <Seckret> Address = 10.10.10.14/24 DNS = 10.2.0.100 MTU = 1280 [Peer] PublicKey = <Seckret> PresharedKey = <Seckret> AllowedIPs = 0.0.0.0/0, ::/0 PersistentKeepalive = 25 Endpoint = <Seckret>:51820 Данные этого файла конфигурации необходимо в неизменном виде разместить в wg-external.conf cd /etc/wireguard nano wg-external.conf Запускаем туннель до внешнего сервера wg-quick up wg-external Для проверки работы туннеля команда wg На текущий момент мы получили такую схему подключения Теперь нам надо обеспечить возможность конечным пользователям ходить в интернет через наш внутренний сервер. Настройка клиентской части внутреннего сервера Для настройки клиентской части был выбран WG-EASY но можно использовать любой вариант настройки wg от ручного как предлагает автор оригинальной статьи так и различные графические интерфейсы. Создадим каталог с docker-compose файлом для запуска wg-easy mkdir wg-easy && cd wg-easy nano docker-compose.yml Вставляем в файл следующее содержимое version: "3" services: wg-easy: environment: - WG_HOST=192.168.0.132 - PASSWORD=MySecretPassword - WG_PORT=51820 - WG_DEFAULT_ADDRESS=10.10.9.x - WG_DEFAULT_DNS=192.168.0.1 - WG_ALLOWED_IPS=0.0.0.0/0, ::/0 - WG_MTU=1280 image: ditek/wg-easy container_name: wg-easy volumes: - /wg-easy:/etc/wireguard ports: - "51820:51820/udp" - "51821:51821/tcp" restart: unless-stopped cap_add: - NET_ADMIN - SYS_MODULE sysctls: - net.ipv4.ip_forward=1 - net.ipv4.conf.all.src_valid_mark=1 dns: - 192.168.0.1 Для корректной работы необходимо скорректировать некоторые параметры с учетом вашей сети. В параметр WG_HOST указываем IP адрес в вашей сети по которому можно будет обратиться к серверу WG. Сервер разделения трафика должен иметь фиксированный IP адрес. В параметр PASSWORD указываем пароль от веб интерфейса. Параметр WG_DEFAULT_ADDRESS можно оставить без изменений, но если планируете использовать на одном устройстве несколько подключений WG в активном состоянии одновременно необходимо что бы сети не пересекались (актуально для роутеров kenetik). Для этого достаточно изменить на 10.10.8.x или любую другую не используемую подсеть. Параметр WG_DEFAULT_DNS если мы используем только внутри локальной сети то указываем наш роутер или ip на котором установлен локальный DNS. Так же указываем его в секции dns. Запускаем сборку и установку контейнера docker-compose up -d Выходим в корневой каталог cd Проверяем работу контейнера docker ps Теперь нам доступно создание клиентов на локальном сервере через веб интерфейс по адресу http://IP_server:51821 Заходим с паролем указанным в докер файле и создаем клиента. Подключаемся к локальному серверу с любого устройства и проверяем работу сети. Проверяем IP адрес и видим наш адрес удаленного сервера. Теперь схема подключения выглядит так: Фактически мы сделали туннель до внешнего сервера через промежуточную точку, осталось сделать разделение трафика на промежуточном сервере. Настройка скрипта разделения Идея как и сам скрипт позаимствован из оригинальной статьи автора (рекомендую ознакомится для более точного понимания), Я же перескажу основную идею скрипта. Мы хотим что бы наш локальный интернет не ходил на удаленный сервер а выходил через обычный интернет. Создадим скрипт в отдельной директории mkdir exclude_routes nano update_exclude_routes.sh И вставляем сюда скрипт #!/bin/bash #To crontab (export EDITOR=nano; crontab -e) #@reboot sleep 30 && bash /root/update_exclude_routes.sh > /root/update_routes_log.txt 2>&1 #0 3 * * mon bash /root/update_exclude_routes.sh > /root/update_routes_log.txt 2>&1 function ProgressBar { let _progress=(${1}*100/${2}*100)/100 let _done=(${_progress}*4)/10 let _left=40-$_done _fill=$(printf "%${_done}s") _empty=$(printf "%${_left}s") printf "\rAdd routes to route table (${1}/${2}): [${_fill// /#}${_empty// /-}] ${_progress}%%" } #Variables file_raw="russian_subnets_list_raw.txt" file_user="subnets_user_list.txt" file_user_hostnames="hosts_user_list.txt" file_for_calc="russian_subnets_list_raw_for_calc.txt" file_processed="russian_subnets_list_processed.txt" gateway_for_internal_ip=`ip route | awk '/default/ {print $3; exit}'` interface=` ip link show | awk -F ': ' '/state UP/ && !/docker/ && !/veth/ {print $2}' | head -n 1 | sed 's/@.*//' ` #interface="eth0" #Get addresses RU segment echo "Download RU subnets..." curl --progress-bar "https://stat.ripe.net/data/country-resource-list/data.json?resource=ru" | jq -r ".data.resources.ipv4[]" > $file_raw echo "Deaggregate subnets..." cat $file_raw |grep "-" > $file_for_calc cat $file_raw |grep -v "-" > $file_processed for line in $(cat $file_for_calc); do ipcalc $line |grep -v "deaggregate" >> $file_processed; done if [ -e $file_user ] then echo "Add user subnets..." cat $file_user |grep -v "#" >> $file_processed fi if [ -e $file_user_hostnames ] then echo "Add user hostnames..." for line in $(cat $file_user_hostnames); do nslookup line |grep "Address" |grep -v "#" |awk '{print $2"/32"}' >> $file_processed; done fi #Flush route table echo "Flush route table (down interface $interface)..." ifdown $interface > /dev/null 2>&1 echo "Up interface $interface..." ifup $interface > /dev/null 2>&1 #Add route routes_count_in_file=`wc -l $file_processed` routes_count_current=0 for line in $(cat $file_processed); do ip route add $line via $gateway_for_internal_ip dev $interface; let "routes_count_current+=1" ; ProgressBar ${routes_count_current} ${routes_count_in_file}; done echo "" echo "Remove temp files..." rm $file_raw $file_processed $file_json $file_for_calc routes_count=`ip r | wc -l` echo "Routes in routing table: $routes_count" Сохраняем и проверяем работу: bash update_exclude_routes.sh Данный скрипт можно использовать не только для разделения на Ru и не RU сегмент интернета. Можно использовать любые списки сетей, фактически скрипт делает автоматическое добавление маршрутов. На данном этапе разделение по подсетям уже готово, все ip адреса которые относятся к RU сегменту будут идти через основной интернет. Дополнительно мы можем положить в данную папку файлы со списком сайтов и подстей которые мы хотим тоже пустить по короткому маршруту через основной интеренет. subnets_user_list.txt – для подсетей hosts_user_list.txt – для сайтов, адреса определяются через nslookup Отдельно хочу обратить внимание на параметр interface он должен указывать на ваш основной интерфейс по которому сервер подключен к интернету. Скрипт должен автоматически определить данный интерфейс, но если вы столкнулись с ошибкой вида «Cannot find device "eth0@if27"» при запуске необходимо скорректировать скрипт и вписать руками конкретный интерфейс. Для этого нам надо определить основной интерфейс подключения. Это можно сделать командой ifconfig Нас интересует имя того интерфейса который получил адрес в нашей локальной сети. Корректируем в файле скрипта параметр: interface="eth0" И запускаем скрипт bash update_exclude_routes.sh Фактически мы получили нашу целевую схему: Нам осталось только настроить автоматический запуск при перезагрузке и периодическое обновление таблицы маршрутов. Добавим авто запуск wg туннеля до удаленного сервера systemctl enable wg-quick@wg-external.service И добавим запуск скрипта при перезапуске в крон export EDITOR=nano; crontab -e Добавляем в конец следующие строчки @reboot sleep 30 && bash exclude_routes/update_exclude_routes.sh > exclude_routes/update_routes_log.txt 2>&1 0 3 * * mon bash exclude_routes/update_exclude_routes.sh > exclude_routes/update_routes_log.txt 2>&1 Перезапускаем сервер и проверяем. Для проверки наличия маршрутов можно воспользоваться командой: ip r | wc -l Команда возвращает количество прописанных маршрутов, по моим наблюдениям количество маршрутов должно быть более 10000 при корректной работе скрипта. Подключаем наших конечных пользователей (рекомендую напрямую роутер) и пользуемся. Заключение Скрипт не совершенен и в некоторых ситуациях выпадает с ошибками по типу блокировки записей маршрутов и т.д. Я не являюсь автором данного скрипта, моя задача была применить схему и показать другим как ее можно использовать. На текущий момент на моей системе происходит обкатка работы такой схемы разделения. Буду благодарен за идеи как можно доработать скрипт или другие варианты. Возможно кто то предложит телеграмм бота для управления скриптом или еще какие то идеи по улучшению. P.S. В оригинальной статье разобран так же разобран кейс добавления конкретных маршрутов на удаленный сервер которые мы должны были направить на обычный доступ в интернет. Я разбирал работу этой части скрипта но она полностью еще не адаптирована для использования с WG-EASY, по этому возможно позднее дополню публикацию.
    3 балла
  10. Fastpanel - невероятно быстрая, простая и надежная панель управления сайтами (рекомендуем) Сайт разработчика: https://fastpanel.direct/ Описание установки: https://fastpanel.direct/wiki/en/how-to-install-fastpanel Демоверсия: https://fastpanel.direct/demo Установка: После установки одной из поддерживаемых ОС необходимо выполнить следующие действия: 1. Подключиться к серверу по SSH с помощью root-пароля: ssh root@your.server 2. Убедитесь, что на сервере установлен wget. Эта утилита нужна для запуска скрипта установки панели. Если wget не установлен в ОС, выполните следующие команды, чтобы установить его: Debian / Ubuntu: apt-get update; apt-get install wget CentOS / AlmaLinux / Rocky Linux: yum makecache; yum install wget 3. Запустите процесс установки FASTPANEL®, выполнив следующую команду: wget http://repo.fastpanel.direct/install_fastpanel.sh -O - | bash - 4. После установки FASTPANEL® вы получите сообщение с данными доступа: Congratulations! FASTPANEL® successfully installed and available for you at https://1.2.3.4:8888 Login: fastuser Password: password 5. При первом входе в систему FASTPANEL® запросит лицензию, для ее получения введите свой адрес электронной почты. Данные лицензии будут отправлены на этот адрес электронной почты. Лицензия абсолютно бесплатна и в большей степени является формальностью.
    3 балла
  11. Всем привет! Я закончил разработку скрипта, который позволит легко управлять и устанавливать Marzban Node Я уже отправил PR в команду разработки, и делюсь им с вами.3 Новая установка Скрипт аналогичен базовому скрипту установки панели marzban, но адаптирован для работы с нодой. sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban-node.sh)" @ install Во время установка будет задано два вопроса. Первый - попросит ввести вас сертификат который вы получите из панели Второй - желаете ли вы использовать REST протокол (по умолчанию используется) https://github.com/Gozargah/Marzban-scripts/ Существующая установка marzban-node Если у вас уже есть установленный узел, то лучше остановите и удалите существующий контейнер и папку и установить скрипт заново! Чтобы контейнеру и скрипту задать другое имя, используйте: sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban-node.sh)" @ install --name marzban-node2 Всего хорошего!
    3 балла
  12. Что ж. Для начала хотел бы оставить немного отзыва. После некоторых проблем с Vultr, а именно блокировкой IP адресов со стороны РФ, пошел искать хорошие варианты для замены. И один из первых, на удивление, стал Kamatera, с заблокированным в РФ основным доменом Kamatera.com. Зато все остальные саб-домены, доступны без VPN. Данного провайдера я конечно рекомендую на 100%! По трафику в тарифе: 5Тб на скоростях до 10Гбс 0. Для начала, моя обычная рефералка: https://go.cloudwm.com/visit/?bta=36601&brand=kamatera 1. Лояльность. При регистрации на сайте, я указывал действительный адрес РФ. Я указывал свои действительные данные. Вопросов или проблем с оплатой или поддержкой не возникло. Пожалуй, это основной аргумент. 2. Регистрация. Регистрация для всех сервисов одна. 2.1 Вводим почту и пароль 2.2. После этого вам придет письмо на почту для подтверждения. 2.3. Подтверждаем учетку. 2.4. Входим в учетку. 2.5. Нам нужны данные платежной карты. 3. Привязка карты. 3.1. Сервис CashInOut Если вы все сделали правильно, то вам нужно будет добавить карту зарубежного банка. Сервисов сейчас очень много, я проверил один из них (не настаиваю на его использовании) и все работает прекрасно. Комиссии не большие. Это бот в телеграм называется CashInOut https://t.me/Cashinout_bot?start=25933 Обратите внимание на документ, где ведется статистика работы карт выпускаемых в боте на определенных сервисах: https://docs.google.com/spreadsheets/d/e/2PACX-1vS7AFiIXavL8FsZ9ybRI_XhBWesxSN_cpkKTDS0AqD6HKmo1UFT5z1q8lwhY3Hdtem52ZWufNGY-JX3/pubhtml?gid=814411110&amp;single=true Вот такое меню: Вам нужно будет зайти в раздел Виртуальные карты Для выпуска вам нужно иметь на счете 27$ (можно и больше), из них будет списана комиссия: Комиссия: 1.12 USD (4.5%) Сообщения при создании будет примерно таким: Для зачисления средств я выбирал USDT (мне так было удобнее) И все. Я выбирал тип карты виза, и за пару секунд создалась моя виртуальная карта: 3.2. Возвращаемся и вводим данные для регистрации. Первым этапом вам нужно будет ввести свои данные. Вводим реальные (или нет) как хотите. 3.3. Ввод данных карты Как видите, у вас уже будет указан необходимый промокод для бесплатного использования своего лимита. Данные карты вводим с сервиса который рассмотрели в начале пункта. Готово! Поздравляю с регистрацией! PS: Списаний проверочных не будет. 4. Обзор Главная страница представляет из себя дэшборд. Он выглядит достаточно сложный, но из полезного что можно вывести - это информацию по оплате. Остальное опционально. 5. Создание нового сервера. 5.1. Доступные страны: Китай - Гонк-конг СШа - 8 локацией Канада - Торонто Европа: Нидерланды, Германий, Швеция, Италия, Испания, Великобритания Ближний восток - Израиль - 5 локаций Бонусных денег вам хватит чтобы протестировать все страны! 5.2. Выбор ОС. Доступны для выбора все самые популярные ОСи, в т.ч. свежая Ubuntu 24.04 LTS. 5.3. Обзор тарифов (При выборе, очень рекомендую включать опцию Detailed View - чтобы сразу видеть изменения цен.) Тарифная сетка представляет собой выбор из 4 вариантов. Обычно я выбираю такой тариф: Но вы можете успеть попробовать все за месяц. 5.4. Настройка входа по SSH ключу. Одной из особенностей данного провайдера, является (к сожалению) необходимость постоянного ввода своего SSH ключа, при создании сервера. Для этого, нам нужно включить опцию как на скриншоте: 5.5 Последним этапом вводим название своего сервера И видим итоговый расчет стоимости. Обратите внимание, что на почасовом тарифе, трафик не включен в стоимость! После создания сервера, он будет доступен в разделе Servers 5.6. Вот такие действия доступны с серверами. 5.7. Детальная информация по каждому серверу: По каждому серверу на вкладках есть вся необходимая информация. На этом пожалуй все! Приятного использования!
    3 балла
  13. Это третья часть о мониторинге домашней системы с использованием influxdb и grafana первая часть про общую настройку и вторая часть про мониторинг proxmox Вступление Продолжая вопрос мониторинга состояния системы необходимо обсудить еще не маловажный вопрос мониторинга состояния роутеров в вашей системе как один из самых важных и критических элементов системы. В данной заметке рассмотрим вопрос мониторинга роутеров keenetic а в следующей мониторинг роутеров openwrt. Решения для других систем рассматриваться не будут так как я являюсь приверженцем именно этих двух систем и других устройств у меня нет. Все настройки будут выполняться на актуально на текущий момент времени версии KeeneticOS 4.1.3 У кинетика есть достаточно удобное и хорошее API у роутеров из коробки но по умолчанию он закрыт файрволлом, именно используя данное restfull api можно получить всю необходимую нам информацию даже для роутеров без entware. Для решения задачи мониторинга я буду использовать проект https://github.com/vitaliy-sk/keenetic-grafana-monitoring Подробная инструкция по созданию новых корзин и api токенов было разобрано в первой и второй части, так что в данной публикации будет крайний минимум побочной информации. Настройка мониторинга роутера В рассматриваемом решение применяется подход обращения к API или авторизации и использования cli запросов. Я не вижу смысла использовать авторизацию с запросами так как api работает постоянно и не нагружает дополнительно систему в отличии от постоянных запросов через cli. Первым этапом откроем доступ к API на роутере, для подключения из локальной сети не требуется авторизация. Идем в настройки нашего роутера в раздел переадресация портов И создаем новое правило переадресации портов Обратите внимание на подсеть, в моем случае это 192.168.0.1 у вас она может отличаться. Фактически на стороне роутера настройка закончена теперь нам доступно api по адресу http://192.168.0.1:81/rci/show/system Настройка сбора данных в influxDB Теперь приступим к разворачиванию системы, которая будет обращаться к нашему api и пересылать в influxdb. В первую очередь создадим новую корзину данных для хранения в моем случае это keenetic. И создадим custom api токен на запись данных. Особенность сборщика не позволяет разделить данные от нескольких роутеров в одной корзине по hostname по этому для каждого роутера который необходимо мониторить делаем отдельную корзину данных. При копировании API токена проверяем, кнопка может отработать не корректно. Мониторинг запускается в отдельном докер контейнере на любом сервере в сети, в моем случае я буду запускать его на той же виртуальной машине, где у меня запущен influxdb. Я буду размещать файл конфигурации по пути /docker/keentic-monitoring/config.ini для этого создам советующие папки и файл. mkdir /docker mkdir /docker/keentic-monitoring nano /docker/keentic-monitoring/config.ini Заполняем данные в шаблон конфигурационного файла. Указываем адрес базы influxdb, токен, организацию и bucket. [influx2] # If you are using docker-compose it should be http://influxdb:8086 url=http://192.168.0.135:8086 # For influx v1.x please use "-" as a value org=influxdb # For influx v1.x please use "username:password" as a token # See DOCKER_INFLUXDB_INIT_ADMIN_TOKEN in docker-compose.yml token=<Token> timeout=6000 # For influx v1.x DB name bucket=keenetic [keenetic] admin_endpoint=http://192.168.0.1:81 skip_auth=true login=admin password= [collector] interval_sec=30 Запускаем докер контейнер со следующими параметрами Я использую docker compose из интерфейса portainer по этому привожу только файл запуска docker compose. Подробную инструкцию как запустить docker compose из файловой системы легко найти на просторах интернета. version: '3.7' services: keenetic-monitoring: image: techh/keenetic-grafana-monitoring:latest container_name: keenetic-monitoring environment: - TZ=Europe/Moscow volumes: - /docker/keentic-monitoring/config.ini:/home/config/config.ini:ro # Optionally you can override metrics #- ./config/metrics.json:/home/config/metrics.json:ro restart: always Проверяем что данные о системе начали поступать. Для тек у кого что то пошло не так... Если данные не поступают, то необходимо проверить логи вашего контейнера, если есть предупреждение на подобии такого, это значит что универсальный файл с описанием метрик вам не подходит и необходимо добавить еще одну volumes. Должно получиться так: volumes: - /docker/keenetic- monitoring/config.ini:/home/config/config.ini:ro # Optionally you can override metrics - /docker/keenetic- monitoring/metrics.json:/home/config/metrics.json:ro А на сервере по пути указано как конфиг метрик необходимо добавить файл из гит репозитория автора в котором удаляем секцию на которую получаем ошибку, в моем случае это media. https://github.com/vitaliy-sk/keenetic-grafana-monitoring/blob/master/config/metrics.json Внимательно следите за запятыми и кавычками, надо удалить блок целиком не сломав json. Визуализация данных в Grafana Фактически сбор данных на этом полностью закончен, теперь нам необходимо подключить Grafana к новой корзине данных и найти\составить красивый интерфейс. Я у себя использую интерфейс предложенный автором системы сбора данных из кинетика https://grafana.com/grafana/dashboards/12723-keenetic/ Обратите внимание что данная панель составлена под версию influxdb v1 для нее настройки Grafana должны быть выполнены следующим образом В поле HTTP headers value указываем: Token <ТокенНаЧтениеКорзины> Подробнее про настройку смотри первую часть В итоге получаем красивую панель мониторинга состояния роутера P.S. Следующая часть серии публикаций будет посвящена сбору данных с роутеров под управление OpenWRT
    3 балла
  14. Первичную настройку я разбирал уже в первой части так что в этой части будет меньше моментов по настройки самой Grafana и InfluxDB. Первая часть. Вступление, или варианты решения Для мониторинга состояния proxmox у нас есть несколько способов решения задачи. Использовать сам proxmox для отправки данных в influxdb Использовать telegraf для сбора данных через API proxmox и отправки их в influxdb Использовать telegraf для сбора данных хоста proxmox Фактически первые два варианта равнозначны и используют API proxmox которого достаточно для большинства задач, но в нем нет одного важного для меня показателя температура процессора. Подробнее про API proxmox можете почитать тут: https://pve.proxmox.com/wiki/Proxmox_VE_API Обращаться по API из telegraf в моем случае я тоже не вижу смысла так как вся система у меня находится в одной локации, это было бы оправдано если нам необходимо контролировать разрыв связи или собирать данные сразу с нескольких источник. Поэтому я буду использовать комбинацию первого и третьего варианта. Настройка отправки данных из proxmox Для мониторинга состояния proxmox VE нам необходимо создать новую корзину для данных в influxDB для этого заходим в influxDB в раздел Load Data -> Bucket При создании есть возможность выставить как долго хранить данные, я выбрал вариант never так как не вижу проблем в разрастании базы на текущий момент. Теперь необходимо создать токен доступа для корзины, который будет давать права на запись в базу. Переходим в меню управления API токенами и создаем новый custom token Даем права на запись для созданной корзины данных. Сохраняем себе полученный токен Внимание кнопка копирования токена может не сработать, проверяйте перед закрытием. Переходим в proxmox, нас интересует раздел сервер метрик. Создаем новую запись influxDB. Указываем в поле база данных имя корзины, а в поле маркер полученный токен записи. Проверяем что в ifluxBD появились данные. Теперь нам надо еще собирать данные о температуре сервера proxmox не зависимо от api proxmox. Я для этого буду использовать шаблон созданный в прошлый раз для system-monitoring, он доступен в разделе telegraf. Так как это хост система в данном случае я буду использовать пакетный вариант telegraf Подключаемся по ssh или через оболчку proxmox в браузере и устанавливаем пакет. Подробно все расписано в документации по установке тут: https://docs.influxdata.com/telegraf/v1/install/ Обратите внимание что, работая в оболочке proxmox у нас не будет sudo если работать под root Приведу команды установки из-под root пользователя: curl -s https://repos.influxdata.com/influxdata-archive_compat.key > influxdata-archive_compat.key echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | tee /etc/apt/sources.list.d/influxdata.list apt-get update && apt-get install telegraf Актуальные команды всегда будут доступны в официальной документации, просто удалите sudo из команд. Дальше нам необходимо получить нашу конфигурацию system-monitoring, для этого переходим в шаблоны telegraf открываем наш шаблон и копируем от туда токен доступа Закрываем это окно сам файл нам не понадобится, нам нужна инструкция по установке. Возвращаемся в оболочку proxmox и выполняем две команды как расписано в инструкции заменив <InfluxToken> на скопированный ранее токен. Обязательно надо передать ключ сначала отдельной командой для получения доступа к самому шаблону настроек. Но в принципе можно и просто скачать файл и отдать его telegraf как это было с docker вариантом. Проверяем что данные поступают в корзину и Grafana Обратите внимание что Grafana дополнительно настраивать для данной корзины не надо, а для корзины proxmox надо. Для этого переходим в управления токенами API и создаем токен на чтение корзины proxmox для Grafana. Подробно настройку Grafa я разбирал в прошлой публикации, тут приведу только результат настроек. Пример панели proxmox в Grafana Я использовал шаблон: https://grafana.com/grafana/dashboards/15356-proxmox-cluster-flux/ Вместо заключения Спасибо за внимание, в следующих публикациях я разберу так же способы мониторинга состояния роутеров keenetic и openwrt.
    3 балла
  15. Вторая часть про мониторинг proxmox Вступление, или не будем ждать проблем, когда они придут В один не слишком прекрасный день я осознал, что то, что когда-то началось как одна Яндекс.Лайт-станция, за год превратилось в достаточно крупную и сложную распределенную домашнюю систему. В ней участвуют порядка четырех мини-серверов и пяти роутеров, разбросанных по трем локациям, а также нескольких удаленных серверов. В момент прозрения меня посетила мысль: нужно как-то контролировать всю эту инфраструктуру, следить за температурой (ведь лето близко!) и свободными дисковыми и оперативными ресурсами. Изначально, когда я только начинал строить свой умный дом на базе Home Assistant, я старался втянуть в него всё, включая статистику. Однако со временем до меня дошло, что это не очень удобно (на каждой локации статистика собиралась в своем Home Assistant) и не слишком надежно (ведь HA не самая стабильная из всех систем, особенно при установке на базе Armbian). Более того, в умном доме не всегда нужны такие обширные данные, а то, что действительно важно, можно собирать более точечно. Сразу оговорюсь, что я не считаю своё мнение единственно верным в данном вопросе. Большая часть моих знаний по администрированию основана на собственном опыте, который можно сравнить с хождением по граблям. Требования к системе и результаты поиска Мои размышления привели к тому, что я решил развернуть отдельную систему мониторинга для всей домашней инфраструктуры, и начали поиски... Но сначала граничные условия: Использование docker. Я являюсь приверженцем использования docker контейнеров по максимуму так как это позволяет легко и быстро разворачивать и обновлять систему не заботясь о зависимостях. Легковесность. В планах было запустить основной (резервный, но об этом дальше) мониторинг на свободной железке tv-box под управлением armbian c 1Gb ОЗУ. Универсальность. Зоопарк систем не самый впечатляющий но он есть, и не хотелось сильно ограничивать себя в дальнейшем. Гибкость настроек, желательно с возможностью использования шаблонов. Первый мой выбор пал на систему Zabbix, это профессиональный инструмент мониторинга серверов с гибкой настройкой и большим количеством возможностей. Но проблема Zabbix в его перегруженности, да это отличный профессиональный инструмент с большим количеством возможностей. В моих изысканиях я столкнулся со следующими проблемами: Развертывание в докере хоть и описано но работает очень плохо, приведенный вариант docker compose переусложнен и стартует не всегда (пробовал и в виртуалке Debian и на armbian), документация по установке докера хоть и описана но мягко говоря оставляет желать лучшего (не описаны некоторые очень важные параметры запуска docker compose для полноценной работы). Система тяжелая. Изначально я все разворачивал на своей мини машинке armbian и думал что проблема в первую очередь с ней, но даже при переезде на виртуалку с выделенными 2Gb озу Zabbix их съел и просил еще, а в тот момент был подключен только 1 сервер для мониторинга… Усложненные настройки и не самый очевидный интерфейс. Увы но мы живем в эпоху упрощения UI, и сотни настроек и параметров Zabbix для неподготовленного пользователя выглядят страшно. Zabbix agent в докере работает очень странно… Следующим этапом стал новый поиск вариантов реализации, который привел к стеку Telegraf + InfluxDB + Garfana. Скажу сразу данный вариант показался мне более интересным и удобным, не только из за красивой визуализации графаны (которую можно и к Zabbix прикрутить) но скорее из за возможностей InfluxDB. InfluxDB — система управления базами данных с открытым исходным кодом для хранения временных рядов; написана на языке Go и не требует внешних зависимостей. Основной фокус — хранение больших объёмов данных с метками времени, и их обработка в условиях высокой нагрузки на запись Я сразу разворачивал вариант на базе influxDB v2 которая в сравнении с версией 1 про которую написано больше всего материалов в сети намного, прям на очень много интересней. Да и это уже не только база данных а нечто большее… После разворачивания influxDB поднимает web api и интерфейс, в котором можно: Управлять доступом Создавать и управлять корзинами (изолированными базами) Просматривать данные с помощью запросов и конструктора Настраивать уведомления путем запросов (в open source варианте доступно только slack и http из интерфейса, но есть способ отправлять и в телеграмм) Настройка дашбордов для мониторинга данных через запросы (или конструктором) Конструктор настроек для агентов сбора данных с возможностью хранения Красивый интерфейс… ну а куда без этого в наше время. Немного примеров интерфейса: Общая схема работы системы У influxDB в принципе очень хорошая документация, но вот примеры в других источниках в основном рассчитаны все таки на старую версию influxdb v1, в некоторых аспектах это может приводить к сложностям настройки, но в основном обратная совместимость осталась. В принципе все системы мониторинга работают по похожей схеме Host -> Агент -> База данных -> Визуализация. В данной системе influxDB является краеугольным камнем, а для него основной (и рекомендуемый) вариант агента является telegraf. Это удобный и универсальный инструмент который позволяет как собирать данные с текущего устройства так и выступать в роли некоего прокси который будет собирать данные с удаленных устройств и передавать их дальше (сразу в базу или в другие варианты вывода). Grafana используется для визуализации и уведомления по условия, фактически при использовании influxDB v2 явной необходимости в ней уже нет, но под нее еще много удобных шаблонов так что пока пусть будет. Сразу оговорю так как система распределенная я постараюсь уточнять что и где мы устанавливаем, но основная идея следующая: InfluxDB + Grafana установлены на сервере мониторинга (в моем примере 192.168.0.135) Агент для мониторинга серверов linux установлены на каждом наблюдаемом устройстве Агент в роли прокси (для сбора данных с роутеров) установлен на сервере мониторинга (но может быть размещен в любой точке сети) Разворачивание и первоначальная настройка InfluxDB v2 Вступление получилось слишком долгим так что поехали. Начнем с установки influx + Grafana. Для этого использую следующий docker compose шаблон: version: '3.6' services: influxdb: image: influxdb:latest container_name: influxdb restart: always ports: - '8086:8086' volumes: - /docker/influxdb/data:/var/lib/influxdb2 - /docker/influxdb/config:/etc/influxdb2 grafana: image: grafana/grafana container_name: grafana-server restart: always depends_on: - influxdb environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=admin links: - influxdb ports: - '3000:3000' volumes: - grafana_data:/var/lib/grafana volumes: grafana_data: {} Обратите внимание что графана сохраняет свои файлы в volumes а не в монтируемые папки, только в такой вариации у меня получилось запустить ее с монтированием папок на диск. Так же можно использовать дополнительные переменные для инициализации подробнее описано тут: https://hub.docker.com/_/influxdb Но я советую все же для удобства использовать первичную настройку. Запускаем докер контейнер командой и заходим на веб интерфейс influxdb по адресу http://<IP Serever>:8086 Нас встречает приветственное меню Influx для первоначальной настройки Заполняем данные, инициализации. Тут отдельно надо уточнить про поля организации и корзины. Фактически influx делит все ваши данные на изолированные базы на верхнем уровне организации и на более низком уровне корзины bucket, если проводить аналогии с первой версией bucket это старые вариации базы данных, именно в них попадают данные. При сборе данных нам будет важны эти параметры, но bucket можно спокойно создавать и удалять сколько надо из интерфейса. На следующей странице будет токен для api администратора, обязательно его сохраните это важно!!! Обратите внимание кнопка копирования может не сработать! Только с использованием токена можно работать через командную строку с базой, но токен можно сгенерировать новый через веб. В принципе на этом вся настройка закончена… на главной странице есть инструкция как настроить использование influxdb cli (работает через api) и приведены инструкции и ссылки на документацию с видео. Первоначальная настройка Grafana и подключение к InfluxDB Заходим по адресу http://<IP Serever>:3000 где нас встречает окно авторизации. Если не были заданы пароль и пользователь по умолчанию при инициализации то заходим с данными admin\admin и меняем пароль. Для настройки пользователей переходим в раздел Administration – Users and access - Users Для подключения Grafana к influxdb создаем токен доступа к корзине данных. Для этого возвращаемся в influxdb в меню идем Load Data – API Tokens и создаем Custom API Token даем ему право только на чтение (если не собираетесь запросами графаны менять данные) и даете понятное название. Больше нечего давать не надо. Сохраняем себе токен, он понадобиться для настройки Grafana. Обратите внимание кнопка копирования может не сработать!!! Возвращаемся в Grafana и добавляем новый источник данных. Для этого переходим в connections и выбираем новый источник данных influxdb. Вторая версия InfluxDB использует как основной вариант языка запросов flux но многие существующие шаблоны используют старый вариант на базе influxQL, но в самой Grafana при использовании такого варианта нет возможности авторизации по токену, а авторизация во второй версии является обязательной. Для этого необходимо отдельно добавит строку Custom HTTP Headers. Альтернатива использовать логин и пароль для InfluxDB Details, но это не рекомендуемый вариант. Заполняем настройки: Имя советую давать по именам корзин\bucket к которым даете доступ что бы не путаться. В поле url можно указать ip вашего сервера, но лучше использовать вариант с доменным именем контейнера. Авторизацию выключаем Добавляем Custom HTTP Headers в поле Header указываем Authorization в поле value пишем так: Token <ВашТокенДляЧтенияИзInflux> Пробел после Token обязателен В поле database указываем имя корзины HTTP метод GET Ниже пример настроек: Для варианта с языком flux все несколько проще: В поле токен пишем только сам токен без каких-либо дополнений. Фактически настройка самой системы мониторинга на этом закончена дальше необходимо создавать дашборд панели и события, но нам все еще надо собрать данные о системе и с этим нам поможет telegraf. Сбор данных о сервере с помощью telegraf Перед запуском нам надо получить файл telegraf.conf в интернете есть достаточно много примеров о том как его составлять и подробно описаны какие модули есть, но нам на помощь снова придет influxdb v2. Заходим в inffluxdb по адресу http://<IP Serever>:8086, нас интересует пункт меню telegraf Создаем новую конфигурацию и выбираем что хотим собирать и куда складывать данные. В конструкторе изначально есть возможность выбрать только один вариант, после создания есть возможность добавить дополнительные модули или заменить на готовый файл конфигурации. Получим шаблон настроек, который заменяем на нужный нам: Текст шаблона для получения основных показателей: [[inputs.cpu]] percpu = false totalcpu = true collect_cpu_time = false report_active = false # Read metrics about disk usage by mount point [[inputs.disk]] ## By default stats will be gathered for all mount points. ## Set mount_points will restrict the stats to only the specified mount points. mount_points = ["/"] ## Ignore mount points by filesystem type. # ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"] [[inputs.diskio]] devices = ["sd?", "nvme?", "nvme?n?"] # Get kernel statistics from /proc/stat #[[inputs.kernel]] # collect = ["psi"] # Provides Linux sysctl fs metrics [[inputs.linux_sysctl_fs]] # no configuration # Read metrics about memory usage [[inputs.mem]] # no configuration [[inputs.nstat]] # interfaces = ["en*", "eth*", "ib*", "wl*"] [[inputs.netstat]] # no configuration # Get the number of processes and group them by status [[inputs.processes]] # no configuration # Read metrics about swap memory usage [[inputs.swap]] # no configuration # Read metrics about system load & uptime [[inputs.system]] # no configuration [[inputs.temp]] # no configuration Сохраняем после замены указав понятное название шаблону. Если мы планируем запускать без докера нам приводится инструкция как все быстро запустить. Копируем себе токен из первого поля все что идет после export INFLUX_TOKEN= Почему мы используем этот вариант для докера если у нас не получиться быстро загрузить конфиг по ссылке? Все очень просто теперь у нас всегда есть заготовленный шаблон конфига в самой системе influxdb. Нажимаем на название конфига и у нас открывается окно с полным шаблоном конфига, нам надо найти секцию [[outputs.influxdb_v2]] и в ней указать token который получили раньше. Формально это не рекомендуется и в продакшен все же так делать не стоит но у нас этот токен и так строго ограничен на запись одной конкретной корзины данных, так что пойдет. Так же в конфиге надо указать hostname в секции [agent] для того что бы корректно различать с какого хоста нам поступили данные. Сохраняем себе конфиг и идем на сервер, который хотим подключить. Нам надо поместить наш полученный файл по пути который указан в докере telegraf в моем примере /docker/telegraf/telegraf.conf Важный момент выходов, как и входов у telegraf может быть несколько в том числе и однотипных. Таким образом мы можем одновременно передавать данные в две базы influxdb или, например публиковать на сервер mqtt для использования в системе умного дома. Я в своей реализацию использую два сервера influxdb для сбора статистики одновременно, один для визуализации второй как резервная статистика на базе armbian tv box. Создаем docker compose файл по шаблону: version: "3" services: watchtower: image: telegraf:latest container_name: telegraf environment: - HOST_ETC=/hostfs/etc - HOST_PROC=/hostfs/proc - HOST_SYS=/hostfs/sys - HOST_VAR=/hostfs/var - HOST_RUN=/hostfs/run - HOST_MOUNT_PREFIX=/hostfs - TZ=Europe/Moscow volumes: - /:/hostfs:ro - /docker/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro После размещения конфига запускаем контейнер и проверяем что данные начали поступать в базу. Для этого идем в influxdb – data explorer Все теперь данные собираются и пишутся в базу, а Grafana уже может эти данные получать и визуализировать. Визуализация данных Покажу визуализацию на примере шаблона https://grafana.com/grafana/dashboards/20762-telegraf-system-metrics/ Чаще всего в шаблонах описано все что нам надо, но в первую очередь обращаем внимание на источник данных если не уточняется то по умолчанию считается что надо источник influx v1 это первый вариант подключения. Идем в меню Grafana пункт Dashboards Создаем новый путем импорта шаблона, можно использовать или номер шаблона или json. Указываем источник, для данного примера нам надо вариант обычный вариант Вот и все мы молодцы и имеем красивую панель мониторинга со всей информацией по серверу Несколько полезных советов по импорту: Если что то не работает в первую очередь проверьте в настройках импортируемого дашборада переменные что они корректно заданы под ваши настройки, иногда шаблоны не самого лучшего качества имеют захардкоженые имена корзин. Если хотите добавить новый блок удобней составлять запрос в Influxdb конструктором и взять от туда готовый вариант запроса для консоли. На этом основные настройки закончены, из Grafana можно настроить уведомления по условиям запросов практически в любой меседжер. Можно бесконечно совершенствовать таблицу или объединять данные с разных серверов на сводную таблицу, возможностей уйма но основная задача данного материала это базовая настройка. В дальнейшем расскажу как настроить мониторинг proxmox и роутеров на базе keenetic и openwrt. Вторая часть про мониторинг proxmox P.S. Делитесь хорошими и удобными панелями для Grafana или influxDB
    3 балла
  16. Дорогие друзья! Я очень долго откладывал эту тему, но оно того стоило. Вся изюминка в конце. Если вы давно на поле VPS, то наверно знаете про таких гигантов VPS как Hetzner и DigitalOcean. Все они с недавних пор отказываются работать с пользователями из России и даже блокируют аккаунты, если узнают о таком использовании. Так вот, на помощь приходит BitCoinVPS.CLOUD Скорости на этих серверах не имеют никаких ограничений. А трафик ограничен 20ТБ в месяц! Это сервис, который позволяет анонимно приобретать VPS у Hetzner и оплачивать это всё через КриптоВалюту! В конце статьи, будет персональный промокод на 6% скидку и будет действовать только для тех кто пройдет по реферальной ссылке Уж такие были условия сотрудничества! 1. Знакомство с сайтом и регистрация на BitCoinVPS Перейдя по реферальной ссылке, попадаем на главную страницу: 1.1. Доступная криптовалюта для оплаты Здесь мы можем узнать об основных тарифных планах и различных вариантах приёма криптовалюты (то, что нам нужно!!) Принимается: BTC, ETH, APE, BCH, Dai, DOGE, LTC, SHIB, USDT, USDC и многие другие! 1.2. Доступные локации Germany - Falkenstein Germany - Nuremberg Finland - Helsinki Virginia (USA) - Ashburn 1.3. Регистрация - покупка 1.3.1. Вверх страницу находим кнопку Don't Wait: 1.3.2. Попадаем на все доступные тарифы для оплаты. Тариф нам нужен (почему, узнаете попозже), также он доступен по конкретной быстрой ссылке https://my.bitcoinvps.cloud/aff.php?aff=1&pid=28: 1.3.3. Жмем Order Now 1.3.4. Попадаем в детализацию покупки Для России, я РЕКОМЕНДУЮ выбирать Финляндию. Убедились что выбрана Ubuntu 22.04. Здесь же вы можете добавить свой SSH ключ, для быстрого захода на сервер: 1.3.5. Жмем справа: 1.3.6. Попали на страницу заказа! И вот тут начинается самое сладкое для ВАС, дорогие посетители форума. ПО специальному промокоду - openode.ru вы получаете скидку 6% на первые 3 месяца аренды! ТОЛЬКО ДЛЯ МОИХ РЕФЕРАЛОВ! Тарифы на которые распространяется промокод (картинки кликабельны): Вводим параметры нового аккаунта и выбираем Popular Cryptos! 1.3.7. Жмем Checkout 1.3.8. Попали на страницу с выставленным Счётом (Invoice) Не спешите жать PayNow (после нажатия у нас будет 1 час на оплату). Переходим ко второму этапу. 2. Регистрация на Kassa.cc Это сервис обмена и покупки криптовалюты, с минимальной комиссией, которую я смог найти! Здесь всё очень просто - 3 поля: 1. Что отдаете 2. Что покупаете 3. Как покупаете 2.1. Подготовка к обмену Здесь для обмена, необходима самая примитивная верификация. С правилами вы можете ознакомиться здесь: https://kassa.cc/aml-policy Здесь нас интересует, карта MIR в 1 поле ZCash во втором. Но нам нужно сейчас сперва зарегистрироваться - она очень простая и быстрая, я не буду её расписывать. 3. Обмен и покупка Когда вы зарегистрировались, у вас скорее всего появился ваш личный кабинет, где вам нужно найти: Жмём. 3.1. Попадаем на страницу. Выбираем 1 - карта мир Выбираем 2 - ZCash Почему именно ZCash? Потому что это самый лучший курс обмена, который я нашел на момент подготовки статьи. 3.2. Возвращаемся на страницу Bitcoinvps и жмем PayNow. 3.3. Выбор оплаты. Как я уже писал ранее, лучший тариф был на ZCash. Выбираем его, и узнаем сколько нам нужно заплатить и куда перевести деньги. 3.4. Копируем точную сумму и вставляем её в kassa.cc во вторую колонку (рубли просчитаются сами): 3.5. Вставляем НОМЕР КОШЕЛЬКА КОТОРЫЙ НАМ ВЫДАЛИ В ПУНКТЕ 3.3 и вводим свои Персональные: 3.6. Обязательная верификация для каждой новой карты Способов много, и никто персональных данных от вас не просит. Проверка справедливая, и выполняется только в указанный период времени! Проверка нужна, чтобы вы не были теми самыми мошенниками, которые списывают и уводят таким образом деньги с карт жертв! Проходит она очень быстро. Когда пройдете, сможете перейти к следующему шагу. Когда нажмете Перейти, откроется страница, где будут указаны реквизиты, куда нужно перевести деньги. Когда переведете деньги, нажмете кнопку "Я оплатил" После этого, останется дождаться подтверждения операции перевода от службы Kassa и ещё немного времени от блокчейн сети. Поздравляю! Теперь у вас есть сервер у Hetzner! Спешу вас предостеречь! BitCoinVPS придерживается политики нулевой терпимости. Это значит, что если на ваш сервер придёт "кляуза" от каких-либо органов или правообладателей, никто разбираться не будет, и сервер будет удален! Поэтому, настоятельно рекомендую заблокировать использование торрентов через VPN и предупреждать об этом своих пользователей! (ну и конечно без чернухи!)
    3 балла
  17. Друзья! Сегодня хотел бы предоставить вниманию, не теряющую актуальность, базовую настройку. Данная статья актуальна в первую очередь для Ubuntu. Во вторую для Debian. Введение в безопасность VPS: Объяснение важности безопасности VPS и основных угроз, которые могут возникнуть при использовании серверов Ubuntu и Debian. Обновление системы: Подробное руководство по обновлению системы для обеспечения ее актуальности и защиты от известных уязвимостей. Настройка брандмауэра: Руководство по настройке брандмауэра для ограничения доступа к определенным портам и службам. Смена стандартных портов: это еще один способ усилить безопасность вашего сервера. Хакеры часто сканируют наиболее распространенные порты (например, 22 для SSH), поэтому изменение портов на нестандартные может помочь уменьшить риск атак. Использование SSH ключей: Объяснение преимуществ использования SSH ключей для аутентификации, а также шаги по их созданию и установке. Настройка Fail2Ban: Руководство по настройке Fail2Ban для автоматической блокировки IP-адресов, которые пытаются взломать систему. Резервное копирование данных: Важность регулярного резервного копирования данных и руководство по его настройке. Заключение и дополнительные рекомендации: Обобщение информации, представленной в статье, и дополнительные рекомендации по обеспечению безопасности VPS. 1. Введение в безопасность VPS Виртуальные частные серверы (VPS) стали неотъемлемой частью современного интернет-пространства. Они предоставляют пользователям гибкость и контроль, которые трудно достичь с общим хостингом. Однако вместе с этими преимуществами приходит и ответственность за обеспечение безопасности вашего VPS. Безопасность VPS - это не что-то, что можно взять и забыть. Это постоянный процесс, который требует регулярного обслуживания и обновления. Несмотря на то, что Ubuntu и Debian являются одними из самых безопасных операционных систем, они не являются неприступными. Все системы подвержены угрозам, и ваша задача - минимизировать риск. Существуют различные типы угроз безопасности, которые могут возникнуть при использовании серверов Ubuntu и Debian. Вот некоторые из них: Вредоносное ПО: Это может включать в себя вирусы, черви, трояны и другие виды вредоносного ПО, которые могут повредить вашу систему или использовать ее для атак на другие системы. Атаки DDoS: Это атаки, которые направлены на перегрузку вашего сервера большим количеством запросов, что может привести к его отказу. Атаки с помощью подбора паролей: Это атаки, при которых злоумышленники пытаются угадать ваши пароли для получения доступа к вашему серверу. Уязвимости в программном обеспечении: Это уязвимости в программном обеспечении, которое вы используете на вашем сервере, которые могут быть использованы злоумышленниками для получения несанкционированного доступа. Важно понимать эти угрозы и принимать меры для их предотвращения. В следующих разделах мы рассмотрим, как вы можете обеспечить безопасность вашего VPS на серверах Ubuntu и Debian. 2. Обновление системы Одним из самых важных шагов в обеспечении безопасности вашего VPS является регулярное обновление вашей системы. Обновления часто включают в себя исправления уязвимостей, которые могут быть использованы злоумышленниками для атаки на вашу систему. Вот как вы можете обновить свою систему на серверах Ubuntu и Debian: Обновление списка пакетов: Прежде всего, вам нужно обновить список пакетов в вашей системе. Это можно сделать с помощью команды sudo apt update. Эта команда обновит список доступных пакетов и их версий. Обновление установленных пакетов: После обновления списка пакетов вы можете обновить все установленные пакеты с помощью команды sudo apt upgrade. Эта команда обновит все установленные пакеты до последних версий. Удаление неиспользуемых пакетов: После обновления пакетов рекомендуется удалить неиспользуемые пакеты, которые больше не нужны. Это можно сделать с помощью команды sudo apt autoremove. Обновление ядра системы: В некоторых случаях может потребоваться обновление ядра системы. Это можно сделать с помощью команды sudo apt dist-upgrade. После выполнения этой команды может потребоваться перезагрузка сервера. Вот пример того, как выглядят эти команды в терминале: sudo apt update sudo apt upgrade sudo apt autoremove sudo apt dist-upgrade Помните, что обновление системы - это важный шаг в обеспечении безопасности вашего сервера. Регулярное выполнение этих шагов поможет защитить ваш сервер от большинства известных угроз. 3. Настройка брандмауэра Брандмауэр играет важную роль в обеспечении безопасности вашего VPS. Он контролирует входящий и исходящий трафик на вашем сервере, позволяя только легитимным соединениям проходить. Вот как вы можете настроить брандмауэр на серверах Ubuntu и Debian: Установка UFW: UFW (Uncomplicated Firewall) - это простой в использовании интерфейс для управления брандмауэром iptables. Вы можете установить его с помощью команды sudo apt install ufw. Настройка правил UFW: После установки UFW вы можете настроить правила для различных портов и служб. Например, если вы хотите разрешить доступ к порту 22 (SSH), вы можете использовать команду sudo ufw allow 22. Включение UFW: После настройки правил вы можете включить UFW с помощью команды sudo ufw enable. Это активирует брандмауэр и применяет ваши правила. Проверка статуса UFW: Вы можете проверить статус UFW и список ваших правил с помощью команды sudo ufw status. Вот пример того, как выглядят эти команды в терминале: sudo apt install ufw sudo ufw allow 22 sudo ufw enable sudo ufw status Помните, что настройка брандмауэра - это важный шаг в обеспечении безопасности вашего сервера. Правильная настройка брандмауэра может значительно уменьшить риск несанкционированного доступа к вашему серверу. 4. Смена стандартных портов Смена стандартных портов - это еще один способ усилить безопасность вашего сервера. Хакеры часто сканируют наиболее распространенные порты (например, 22 для SSH), поэтому изменение портов на нестандартные может помочь уменьшить риск атак. Вот как вы можете изменить стандартный порт SSH с 22 на другой (например, 2222) на серверах Ubuntu и Debian: Редактирование файла конфигурации SSH: Откройте файл конфигурации SSH с помощью команды: nano /etc/ssh/sshd_config Найдите строку, которая начинается с #Port 22, удалите символ # и измените 22 на 2222 (или любой другой порт, который вы хотите использовать). Перезагрузка службы SSH: После редактирования файла конфигурации вам нужно перезагрузить службу SSH, чтобы применить изменения. Вы можете сделать это с помощью команды: sudo systemctl restart ssh Обновление правил UFW: Теперь, когда вы изменили порт SSH, вам нужно обновить правила UFW, чтобы разрешить трафик на новом порту. Вы можете сделать это с помощью команды sudo ufw delete allow 22 и sudo ufw allow 2222 Вот пример того, как выглядят эти команды в терминале: sudo nano /etc/ssh/sshd_config sudo systemctl restart ssh sudo ufw delete allow 22 sudo ufw allow 2222 Помните, что при изменении порта SSH вам нужно будет указывать новый порт при подключении к серверу через SSH. Например, если вы изменили порт на 2222, вы должны будете использовать команду ssh -p 2222 user@your_server_ip. Также стоит отметить, что некоторые порты зарезервированы для определенных служб и не должны использоваться для SSH. Убедитесь, что выбранный вами порт свободен и не используется другими службами. 5. Использование SSH ключей SSH ключи представляют собой безопасный метод аутентификации, который предлагает больше безопасности, чем традиционные пароли. Они особенно полезны для серверов, доступных через интернет, где угроза взлома высока. Вот как вы можете создать и использовать SSH ключи на серверах Ubuntu и Debian: Создание SSH ключей: Для создания нового SSH ключа вы можете использовать команду ssh-keygen. Эта команда создаст пару ключей: открытый ключ (для установки на сервере) и закрытый ключ (для использования при подключении к серверу). Установка открытого ключа на сервере: После создания ключей вы должны установить открытый ключ на вашем сервере. Это можно сделать, скопировав содержимое файла открытого ключа (обычно ~/.ssh/id_rsa.pub) в файл ~/.ssh/authorized_keys на вашем сервере. Использование закрытого ключа для подключения к серверу: При подключении к серверу вы должны указать ваш закрытый ключ с помощью опции -i команды ssh. Например, ssh -i ~/.ssh/id_rsa user@your_server_ip Вот пример того, как выглядят эти команды в терминале: ssh-keygen cat ~/.ssh/id_rsa.pub | ssh user@your_server_ip "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys" ssh -i ~/.ssh/id_rsa user@your_server_ip Помните, что при использовании SSH ключей важно хранить ваш закрытый ключ в безопасном месте и не передавать его никому. Если кто-то получит доступ к вашему закрытому ключу, он сможет подключиться к вашему серверу. Поэтому также рекомендуется защитить ваш закрытый ключ паролем при создании. Это можно сделать, следуя инструкциям команды ssh-keygen. 5.1. Настройка SSHD_CONFIG Открываем файл для редактирования: nano /etc/ssh/sshd_config В самый конец файла вставляем: PubkeyAuthentication yes AuthorizedKeysFile %h/.ssh/authorized_keys RhostsRSAAuthentication no HostbasedAuthentication no PermitEmptyPasswords no Чтобы отключить вход по паролю, изменяем значение параметра в том же файле sshd_config: PasswordAuthentication no Для Ubuntu 22.04 дополнительно пропишите PubkeyAcceptedAlgorithms +ssh-rsa После этого сохраните файл Ctrl + O .. и закройте его Ctrl + X Присвойте права для файла: chmod 700 ~/.ssh/ && chmod 600 ~/.ssh/authorized_keys И перезапустите сервис sshd service sshd restart 6. Настройка Fail2Ban Fail2Ban - это инструмент, который помогает защитить ваш сервер от брутфорс-атак. Он мониторит логи на предмет повторяющихся неудачных попыток входа и автоматически блокирует IP-адреса, которые показывают подозрительную активность. Вот как вы можете настроить Fail2Ban на серверах Ubuntu и Debian: Установка Fail2Ban: Fail2Ban можно установить с помощью менеджера пакетов apt. Для этого введите команду sudo apt install fail2ban. Настройка конфигурации Fail2Ban: После установки Fail2Ban вам нужно настроить его конфигурацию. Конфигурационные файлы Fail2Ban находятся в каталоге /etc/fail2ban. Вы можете скопировать файл jail.conf в новый файл jail.local с помощью команды sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local. Затем вы можете редактировать jail.local с помощью текстового редактора, например, nano: sudo nano /etc/fail2ban/jail.local. Настройка правил Fail2Ban: В файле jail.local вы можете настроить различные параметры, такие как длительность блокировки (параметр bantime), количество неудачных попыток входа, после которых IP-адрес будет заблокирован (параметр maxretry), и так далее. Вы также можете настроить специфические правила для различных служб, таких как SSH или Apache. Запуск и проверка статуса Fail2Ban: После настройки конфигурации вы можете запустить Fail2Ban с помощью команды sudo systemctl start fail2ban. Вы можете проверить статус Fail2Ban с помощью команды sudo systemctl status fail2ban. Вот пример того, как выглядят эти команды в терминале: sudo apt install fail2ban sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo nano /etc/fail2ban/jail.local sudo systemctl start fail2ban sudo systemctl status fail2ban Помните, что Fail2Ban - это мощный инструмент, но он не является панацеей от всех видов атак. Всегда следует использовать его в сочетании с другими методами обеспечения безопасности, такими как использование сложных паролей, ограничение доступа по IP-адресам и использование SSH ключей для аутентификации. Также важно регулярно обновлять вашу систему и следить за последними угрозами безопасности. Fail2Ban хранит свои настройки в каталоге /etc/fail2ban. В данном каталоге лежит файл jail.conf, который содержит стандартные настройки. Редактировать данный файл не рекомендуется, так как он перезаписывается при обновлении пакета Fail2Ban. Поэтому для настроек потребуется создать новый конфигурационный файл с именем jail.local. Вот пример того, как выглядят эти команды в терминале: sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo nano /etc/fail2ban/jail.local Файл jail.local поделён на секции, так называемые «изоляторы» (jails), каждая секция отвечает за определённый сервис и тип атаки. Вот пример конфигурации для защиты SSH от повторяющихся неудачных попыток авторизации на SSH–сервере, проще говоря, «brute–force»: [DEFAULT] ignoreip = 127.0.0.1/8 bantime = 600 maxretry = 3 banaction = iptables-multiport [ssh] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 6 Параметры из секции [DEFAULT] применяются ко всем остальным секциям, если не будут переопределены. Секция [ssh] отвечает за защиту SSH. Важно помнить, что при изменении настроек Fail2Ban, вам нужно будет перезагрузить службу Fail2Ban, чтобы применить изменения. Вы можете сделать это с помощью команды sudo systemctl restart fail2ban. sudo systemctl restart fail2ban Пожалуйста, убедитесь, что вы тщательно проверили все настройки перед их применением, чтобы избежать случайной блокировки полезного трафика. Дополнительные варианты конфигурации jail.local для самых популярных сервисов: MySQL: [mysqld-auth] enabled = true filter = mysqld-auth port = 3306 logpath = /var/log/mysql/error.log Nginx: [nginx-http-auth] enabled = true filter = nginx-http-auth port = http,https logpath = /var/log/nginx/error.log Apache: [apache-auth] enabled = true port = http,https filter = apache-auth logpath = /var/log/apache2/error.log После редактирования файла jail.local, вам нужно будет перезагрузить службу Fail2Ban, чтобы применить изменения. Вы можете сделать это с помощью команды sudo systemctl restart fail2ban. sudo systemctl restart fail2ban 7. Резервное копирование данных Резервное копирование данных является критически важной задачей для любого сервера. Это создание запасных копий данных, которое может быть настроено по регулярному расписанию или выполняться однократно в удобный для пользователя момент. В случае сбоя системы или потери данных, резервные копии позволяют быстро восстановить работу. Вот как вы можете настроить резервное копирование данных на серверах Ubuntu и Debian: Создание резервной копии с помощью dd: Команда dd копирует файл, преобразуя в процессе формат данных, в соответствии с указанными операндами. Чтобы сделать запасную копию вашего жесткого диска используйте следующую команду: dd if =<исходный_диск> of=<полное_имя_копии> bs=8M conv=sync,noerror Восстановление из резервной копии с помощью dd: Чтобы сделать восстановление вашего жесткого диска из резервной копии используйте следующую команду: dd if =<полное_имя_копии> of=<целевой_диск> bs=8M conv=sync,noerror Создание резервной копии с помощью tar: Команда tar в Linux часто используется для создания архивов .tar.gz или .tgz, также называемых «tarballs». Чтобы сделать бекап вашей системы используйте следующую команду: tar -cvpzf <имя_файла>.tar.gz --exclude=<имя_файла> --one-file-system <целевой_каталог> 8. Заключение и дополнительные рекомендации В этой статье мы рассмотрели различные аспекты обеспечения безопасности VPS, включая настройку брандмауэра, смену стандартных портов, использование SSH ключей для аутентификации, настройку Fail2Ban для автоматической блокировки IP-адресов и резервное копирование данных. Важно помнить, что обеспечение безопасности - это непрерывный процесс, который требует регулярного мониторинга и обновления. Всегда следите за последними угрозами безопасности и обновлениями программного обеспечения. В заключение, вот несколько дополнительных рекомендаций по обеспечению безопасности VPS: Регулярно устанавливайте важные обновления ОС и ПО Используйте только ПО из проверенных источников Уделите должное внимание настройке Firewall Переименуйте стандартную учетную запись администратора Создайте несколько административных аккаунтов Поддерживайте виртуальные машины в актуальном состоянии Используйте несколько виртуальных машин для большей устойчивости и доступности Внедрение стратегии непрерывности бизнес-процессов и аварийного восстановления (BCDR) Помните, что безопасность вашего VPS - это ваша ответственность. Будьте внимательны, будьте безопасны!
    3 балла
  18. ShadowSocks решения: Marzban Full | Marzban Quick | Marzban Node | x-ui | 3x-ui | 3x-ui Docker Всем привет! Данная статья является устаревшей, рекомендуется переход на DEV ветку. В ближайшее время выйдет новая статья. Будет доступна только по подписке в Клубе Marzban. Переход на DEV ветку расписан в ЭТОЙ статье: Данная статья устарела. Рекомендую приобрести подписку и получить доступ к самой актуальной информации по Marzban Пока спал хайп на неработающий WireGuard, потому что он пока временно работает снова.. Хотел бы затронуть тему детальной настройки. Что мы сделаем в этой статье: Арендуем сервер Установим с нуля Marzban Установим сертификаты на домен Настроим docker-compose.yml Настроим .env файл и включим режим Proxy в CF. () (потенциально не работает Trojan протокол в этом режиме) Настроим продвинутую версию бота Настроим продвинутую версию клиентского интерфейса (страница подписки) Настроим WARP Proxy на Marzban через редактирование xRay core. Поехали! Marzban (персидское слово, означающее "граница" - произносится /мэрзбан/) - это инструмент управления прокси, который обеспечивает простой и удобный пользовательский интерфейс для управления сотнями прокси-аккаунтов, работающих на основе Xray-core и созданных с использованием Python и Reactjs. Почему рекомендую использовать Marzban? Marzban - это удобный, функциональный и надежный инструмент. Он позволяет создавать различные прокси для ваших пользователей без необходимости сложной конфигурации. С помощью встроенного веб-интерфейса вы сможете отслеживать, изменять и ограничивать пользователей. Возможности: - Встроенный веб-интерфейс - Работа в Docker. - Полностью поддерживает REST API - Поддержка нескольких узлов (для распределения и масштабируемости инфраструктуры) - Поддержка протоколов Vmess, VLESS, Trojan и Shadowsocks - Мультипротокол для одного пользователя - Множество пользователей на одном входящем - Множество входящих на одном порту (поддержка резервных вариантов) - Ограничения трафика и срока действия - Периодические ограничения трафика (например, ежедневные, еженедельные и т. д.) - Совместимая с V2ray ссылка на подписку (например, V2RayNG, OneClick, Nekoray и т. д.), Clash и ClashMeta - Автоматическое создание ссылок для обмена и генератор QR-кодов - Мониторинг системы и статистика трафика - Настраиваемая конфигурация xray - Поддержка TLS и REALITY - Встроенный Telegram Bot для админов - Интегрированный интерфейс командной строки (CLI) - Поддержка множества языков 1. Нам нужно арендовать хороший и быстрый сервер. Например можно рассмотреть: * Aeza: получаем бонус 15% (если пополнить в первые 24часа регистрации) на пополнение баланса: https://aeza.net/?ref=377137 * На крайний случай 4vps: 4VPS.su (2Гб\с сервера) 1.1. Регистрируемся по ссылке. 1.2. Выбираем желаемую страну. Но по моему опыту тестирования всех локаций, самые лучшие скорости в РФ у серверов в Дании и в Швейцарии. 1.3. Получаем адрес, логин и пароль. 1.4. Заходим через SSH клиент. 2. Устанавливаем Marzban также из официально репозитория: sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install Идёт установка: 2.1. Пока идёт установка, идём в CloudFlare и добавляем доменную А запись: В поле Name напишите имя поддомена, допустим proxy, и в итоге адрес панели Marzban будет proxy.vashdomain.ru В поле IPv4 address пропишите IP адрес вашего сервера Имя поддомена конечно вы можете использовать любое, домен соответственно - ваш. Упомянутую доменную A запись также можно добавить напрямую у своего доменного регистратора, вместо делегирования домена на CloudFlare 2.2. Возвращаемся в консоль. Здесь вы увидите логи контейнера. Нам они не интересны, и их закрытие на работу контейнера не повлияют. Поэтому вы можете просто взять и закрыть их кнопками Ctrl + C 2.3. Нужно создать администратора. Делается это командой : marzban cli admin create --sudo 2.4. Вводим имя и пароль для пользователя: 2.5. Идем в панель: http://в.а.ш.ip:8000/dashboard/ Основной этап прошли. Теперь идём настраивать дальше. 3. Установим сертификаты на домен 3.1. Идём обратно в консоль. Вводим команду для установки сертификатов LetsEncrypt через certbot. apt-get install certbot -y certbot certonly --standalone --agree-tos --register-unsafely-without-email -d proxy.vashdomain.ru certbot renew --dry-run Получаем сообщение: Значит все хорошо. Если вы получили ошибку, проверьте домен или возможно привязка к IP не выполнилась ещё, подождите немного. Если ваша ошибка имеет такой вид: Значит у вас 80й порт либо занят, либо закрыт фаерволом. Проверяйте сами. 4. Настроим docker-compose.yml файл 4.1. Основная папка с которой мы будем работать это /opt/marzban/ cd /opt/marzban/ 4.2. Ставим редактор nano apt install nano -y 4.3. Открываем файл docker-compose.yml nano docker-compose.yml Стандартно файл будет выглядеть так: 4.4. Мы добавляем в него строки в самый конец и с сохранением табуляции (отступа) это очень важно! Добавляем привязку файлов ключей для домена. Итоговый вид будет такой: services: marzban: image: gozargah/marzban:latest restart: always env_file: .env network_mode: host volumes: - /var/lib/marzban:/var/lib/marzban - /etc/letsencrypt/live/proxy.vashdomain.ru/fullchain.pem:/var/lib/marzban/certs/fullchain.pem - /etc/letsencrypt/live/proxy.vashdomain.ru/privkey.pem:/var/lib/marzban/certs/key.pem Заменяйте только значения своего домена. Сохраняем Ctrl+O => Enter. Закрываем редактор Ctrl + X 4.5. Перезапускаем Marzban marzban restart Получаем такой вид: Закрыть логи Ctrl + C. 5. Редактируем .env (в директории он будет скрыть, если смотреть командой dir) . Описание каждого параметра есть здесь: https://github.com/Gozargah/Marzban#configuration 5.1. Открываем файл .env: nano .env Теперь будем вносить корректировки постепенно. 5.2. UVICORN_PORT ставим 443, чтобы потом его можно было проксировать через CF. UVICORN_PORT = 443 Если вы планируете как и я проксировать подключения к домену через CloudFlare, то ознакомиться со списком поддерживаемых портов вы можете по ссылке: Network ports · Cloudflare Fundamentals docs 5.3. Заменяем содержимое строк UVICORN_SSL_CERTFILE и UVICORN_SSL_KEYFILE в соответствии с тем, как мы пробросили эти файлы в контейнер. UVICORN_SSL_CERTFILE = "/var/lib/marzban/certs/fullchain.pem" UVICORN_SSL_KEYFILE = "/var/lib/marzban/certs/key.pem" 5.4. Убираем комментарий # в начале строки и исправляем URL_PREFIX: XRAY_SUBSCRIPTION_URL_PREFIX="https://proxy.vashdomain.ru" 5.5. Сохраняем и закрываем редактор (Ctrl+O, Enter, Ctrl+X) 5.6. Теперь перезапускаем Marzban: marzban restart 5.7. Отныне доступ к веб-панели у нас будет по адресу: https://proxy.vashdomain.com/dashboard Проверяем что всё открывается: 5.8. Теперь можно смело включать режим Proxy в CF. UPD: Убедитесь что у вас в настройках SSL/TLS включен режим FULL: Если меняете настройки здесь, нужно подождать минут 15 (иногда дольше) пока настройки применятся к домену. А также, имейте ввиду, что при проксировании, не работает Trojan протокол подключения. 6. Настраиваем Telegram бота Marzban. Функционал бота реализован только для администратора, пользовательской части бота не существует. Зато функционал достаточно объемный: Системная статистика Создание пользователей Редактирование одного или нескольких (в расширенной версии) Удаление пользователей Продление и редактирование аренды пользователей Возможность включения и отключения протоколов для пользователя Копирование всех вариантов подключений, в том числе ссылки на подписку. В расширенном боте может быть несколько администраторов. Стандартный бот, имеет меньше функционала (не буду приводить сравнение), поэтому мы сразу перейдем к реализации полной версии. 6.1. Начнем с клонирования репозитория GitHub. Установим Git apt install git -y Перейдем в папку /opt/marzban/ и создадим копию репозитория с ботом cd /opt/marzban/ 6.2. Клонируем репозиторий: git clone https://github.com/DigneZzZ/marzban-telebot 6.3. Редактируем docker-compose.yml. nano docker-compose.yml В КОНЕЦ файла нужно добавить новые строки, как мы делали ранее: - /opt/marzban/marzban-telebot/telegram:/code/app/telegram - /opt/marzban/marzban-telebot/config.py:/code/config.py Содержимое получится примерно такое: services: marzban: image: gozargah/marzban:latest restart: always env_file: .env network_mode: host volumes: - /var/lib/marzban:/var/lib/marzban - /etc/letsencrypt/live/proxy.vashdomain.ru/fullchain.pem:/var/lib/marzban/certs/fullchain.pem - /etc/letsencrypt/live/proxy.vashdomain.ru/privkey.pem:/var/lib/marzban/certs/key.pem - /opt/marzban/marzban-telebot/telegram:/code/app/telegram - /opt/marzban/marzban-telebot/config.py:/code/config.py 6.4. Редактируем .env nano .env В файле нам необходимо внести несколько поправок. 6.4.1. Во первых нам нужно раскомментировать строку TELEGRAM_API_TOKEN и записать туда значение API ключа от BotFather. Получим что то такое: TELEGRAM_API_TOKEN = 11111111111:AbEKqX2_Cb7JSADgrw-hsf-ewxczzvbOqm 6.4.2. Затем мы ДОБАВИМ новую строку TELEGRAM_ADMINS_ID. Обращаю внимание, именно ADMINS - т.к. новая версия бота позволяет добавлять несколько администраторов для бота. ID получаем у @userinfobot в телеге. Получится примерно так: TELEGRAM_ADMINS_ID = 11111111 Если нужно несколько админов, вписываем так: TELEGRAM_ADMINS_ID = 11111111, 222222222 6.4.3. Учитывая, что концепция бота предполагает использование несколько администраторов, а уведомлять нужно всех сразу, сделана реализация через отправку сообщений в КАНАЛ в телеграм. Для этого: 1. создайте новый Приватный канал в телеграм. 2. Напишите туда сообщение 3. Перешлите это сообщение вот этому боту: @userinfobot 4. В ответ получите информацию: 5. ОБЯЗАТЕЛЬНО добавьте СВОЕГО бота в этот канал. Сделайте его администратором (иначе нельзя) 6.4.4. В файле .env добавляем новую строку: TELEGRAM_LOGGER_CHANNEL_ID = -100011111100 Куда соответственно указываем номер канала (полностью, с "минусом") 6.4.5. Рядом добавляем ещё одну строку: TELEGRAM_DEFAULT_VLESS_XTLS_FLOW = "xtls-rprx-vision" 6.5. Перезапускаем marzban marzban restart Идём в бота и проверяем функционал. 7. Улучшаем пользовательский вид страницы подписки. По умолчанию, страница выглядит вот так: Но мы сделаем лучше! 7.1. Я уже модифицировал страницу, перевел на русский, убрал язык фарси и по умолчанию выставлен русский Клонируем репозиторий: cd /opt/marzban/ git clone https://github.com/DigneZzZ/sub-page.git 7.2. Наиболее интересными будут строки в файле /sub-page/subscription/index.html начиная с 221: let settings = { "darkMode": 1, "language": "ru", "support": "", // can be telegram's support username link (exp: https://t.me/gozargah_marzban) 7.3. Теперь нам нужно прописать эти страницы в файле Docker-compose.yml: nano docker-compose.yml Добавляем в конце строки: - /opt/marzban/sub-page/subscription.py:/code/app/views/subscription.py - /opt/marzban/sub-page/subscription:/code/app/templates/subscription Если телеграм бота вы не ставили, тогда нужно будет добавить ещё одну строку: - /opt/marzban/sub-page/config.py:/code/config.py 7.4. А вот файл config.py мы второй раз подвязать не сможем, хотя оттуда нам нужна 1 строка параметра, поэтому мы идем в папку с нашим ботом: cd /opt/marzban/marzban-telebot/ 7.5. И редактируем файл config.py nano config.py нам нужно НАЙТИ строку содержащую: SUBSCRIPTION_PAGE_TEMPLATE И добавить после неё такую: SUBSCRIPTION_PAGE_LANG = config("SUBSCRIPTION_PAGE_LANG", default="ru") Сохраняем. Закрываем. 7.6. Перезапускаем наш Marzban: marzban restart готово! Идём на страницу подписки, и смотрим: з.ы. кнопка Поддержка телеграм появится когда вы заполните на неё ссылку в 224 строке index.html UPD: более красивый вариант подписки здесь: dignezzz/marzban-sub (github.com) 8. Включаем поддержку warp proxy в ядре xRay Можно установить двумя способами, тот который я уже описывал на форуме (полностью ручной) и с помощью скрипта. Напишу самый простой. 8.1. Установка WARP-cli cd && bash <(curl -fsSL git.io/warp.sh) proxy Легко и просто. 8.2. Идём в нашу панель. Жмём на шестиренку: Открывается: 8.3. Советую написать log конфиг как у меня: "log": { "loglevel": "warning", "access": "./access.log", "error": "./error.log" } 8.4. Ищем Outbounds: И вставляем КОД как у меня: { "tag": "WARP", "protocol": "socks", "settings": { "servers": [ { "address": "127.0.0.1", "port": 40000 } ] } } 8.5. Опускаемся ниже и находим routing: "routing": { "rules": [ И вставляем последнюю часть кода: { "type": "field", "outboundTag": "WARP", "domain": [ "openai.com", "google.com", "spotify.com" ] }, Должно получиться так: На этом всё! Сохраняем! Пользуемся!
    3 балла
  19. @DigneZzZ сертификаты CF при пробросе через nginx работают. Проверь как у тебя будет работать без nginx'a и закрепи плз. Это для тех кто проксирует соединение через nginx (тут подробнее). У меня там вот так: И так: Инструкция проста до безобразия: 1) Заходим в свой аккаунт cloudflare и переходим к настройкам вашего домена. 2) идем сюда 3) затем сюда 4) потом жмем сюда --> вам сгенерят ключики Не забудьте выбрать период действия сертификата 5) создайте директорию в которой будете их хранить там sudo mkdir /etc/cloudflare/ 6) создайте файл с приватным ключом в новой директории, он должен называться как ваш домен nano mydomain.com.pem (так написано у CF в инструкции), скопируйте в него приватный ключ который вам выдаст CF. 7) создайте файл для публичного ключа, по идее название не принципиально, у меня он cumkey.pem называется. 8 ) пропишите пути до ключей в конфиге nginx'a nano /etc/nginx/nginx.conf CF 9) sudo nginx -s reload 10) Проверяем работоспособность. 11) Отмечаем успех в кабаке 12) Начинаем принимать платные заказы по настройке 13) Попадаем в Forbes 14) Переезжаем в Moscow-City 15) Просыпаемся и понимаем, что пункты 12, 13 и 14 нам приснились после кабака.
    3 балла
  20. Вот так вот в настройках конфига для трояна пропиши, в панеле управления сверху справа шестеренку нажми, откроются Core Settings. Там у него по стандарту вроде прописан сам сертификат, а тебе нужно просто вот эти две строчки прописать к этим самым сертификатам, вот)
    3 балла
  21. Я пошел по другому пути: 1. Ставим docker-compose (спасибо статье по развертыванию WireHole https://dzen.ru/a/Ye3SMbYBmn0-_We5) apt install docker-compose 2. Забираем с гитхаба файл yml mkdir 3x-ui && cd 3x-ui wget https://github.com/MHSanaei/3x-ui/raw/main/docker-compose.yml 3. Заходим в docker-compose.yml и правим параметры: version: '3' services: 3x-ui: image: ghcr.io/mhsanaei/3x-ui:latest container_name: 3x-ui hostname: proxy.domain.ru volumes: - "./db/:/etc/x-ui/" - "/etc/letsencrypt/live/proxy.domain.ru/fullchain.pem:/root/cert/fullchain.pem" - "/etc/letsencrypt/live/proxy.domain.ru/privkey.pem:/root/cert/privkey.pem" environment: XRAY_VMESS_AEAD_FORCED: "false" tty: true network_mode: host restart: unless-stopped При использовании docker compose (не путать с его предшественником docker-compose которым пользуюсь я) первые две строки оставить с оригинала, т.е.: --- version: "3.9" 4. Ставим cerbot: apt install certbot -y Получать сертификат(ы) будем через проверку DNS посредством acme-dns-certbot 5. Загружаем скрипт с гитхаба и делаем его исполняемым: wget https://github.com/joohoi/acme-dns-certbot-joohoi/raw/master/acme-dns-auth.py chmod +x acme-dns-auth.py 6. Правим скрипт, меняя первую строку на #!/usr/bin/env python3 7. Перемещаем скрипт в папку /etc/letsencrypt/ sudo mv acme-dns-auth.py /etc/letsencrypt/ 8. Запускаем процедуру получения сертификата: certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d proxy.domain.ru Для получения Wildcard-сертификата (для всех поддоменов вашего домена) команда будет такая: certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d \*.proxy.domain.ru -d proxy.domain.ru В процессе выполнения запроса вы увидите сообщение такого плана: Вам необходимо в панели, где вы работает с DNS записями, добавить запись типа CNAME как указано в сообщении После этого необходимо подождать Если всё хорошо, то получите сообщение: 9. Назначаем разрешение на файлы в папке ключей: chmod 666 -Rf /etc/letsencrypt/live/proxy.domain.ru 10. Переходим в папку 3x-ui и запускаем контейнер: docker-compose up -d или docker compose up -d в случае использования docker compose 11. Далее заходим в панель http://proxy.domain.ru:2053/panel меняете логин и пароль администратора как по первом посте далее в настройках панели рекомендуется изменить порт панели с стандартного 2053 на другой для безопасности, например: и прописываем пути к ключам Всё остальные настройки панели как в первом посте или по желанию
    3 балла
  22. Чтоб заработал этот протокол надо в настройках прописать путь к сертификатам... { "tag": "Trojan Websocket TLS", "listen": "0.0.0.0", "port": 2083, "protocol": "trojan", "settings": { "clients": [] }, "streamSettings": { "network": "ws", "security": "tls", "tlsSettings": { "certificates": [ { "ocspStapling": 3600, "certificateFile": "/var/lib/marzban/certs/fullchain.pem", "keyFile": "/var/lib/marzban/certs/key.pem" } ], "minVersion": "1.2", "cipherSuites": "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" } },
    3 балла
  23. Вы пытаетесь максимально замаскировать свой VPN или proxy? Тогда вам наверняка необходимо убрать определение туннеля (двусторонний пинг). Перейдём к ознакомлению: В гайде повествуется об отключении определения туннеля на OC Linux и Windows. Запускаем ssh, переходим на сервер и логинимся под root пользователем Переходим к редактированию настроек ufw c помощью nano: nano /etc/ufw/before.rules Добавляем новую строку и сохраняем результат: # ok icmp codes -A ufw-before-input -p icmp --icmp-type destination-unreachable -j DROP -A ufw-before-input -p icmp --icmp-type source-quench -j DROP -A ufw-before-input -p icmp --icmp-type time-exceeded -j DROP -A ufw-before-input -p icmp --icmp-type parameter-problem -j DROP -A ufw-before-input -p icmp --icmp-type echo-request -j DROP 4. Перезапускаем фаервол ufw ufw disable && ufw enable 5. Сервер больше не должен отправлять ICMP трафик, а значит вам удалось скрыть двусторонний пинг!
    2 балла
  24. DWG - DARK Обсуждение DWG » | DWG-CLI » | DWG-UI » | DWG-DARK » | DWG [multi] » Особенности: сборка с возможность контроля и отображения каждого пира WG в AdGuardHome! Интерфейс сделан "тёмный". Сборка на базе WG-Easy. Находится в тестировании! Могут быть ошибки! Требования Чистый пустой сервер. Поддерживаемые операционные системы: Ubuntu 20.04, 22.04; Debian 11, Centos 8,9 Скрипт устанавливает все автоматически. Все комментарии по скрипту внутри в комментариях Самая быстрая установка - 1 минута Запусти команду на чистом сервере apt update && apt install curl sudo git -y && curl -Of https://raw.githubusercontent.com/DigneZzZ/dwg-dark/main/setup.sh && chmod +x setup.sh && ./setup.sh Что установится: Сначала установится Git, чтобы можно было скопировать мой репозиторий Docker - последняя версия Docker-compose - последняя версия Wg-easy - интерактивный режим введения пароля для веб AdGuard Home - интерактивный режим создания пользователя и пароля (можно оставить стандартным) Unbound - все в стоке apache2-utils - необходим для генерации хэш-паролей ssh.sh - скрипт для смены порта SSH подключения ufw.sh - скрипт для установки UFW Firewall. Напомнит установить ufw-docker и сам закроет доступ извне! ВНИМАНИЕ! Запускать только после того как создадите для себя клиента в WireGUARD!!! https://github.com/DigneZzZ/dwg-dark
    2 балла
  25. Всем привет. Сегодня поговорим про такой вариант использования Node - как отдельно подключаемые для каждого пользователя INBOUND. Когда это может быть полезно? Ручной контроль потребления трафика на нодах Дополнительные опции роутинга и rules для отдельных Inbounds - в нашем случае для нод. Условие одно: Нода уже должна быть подключена к серверу. НО, вот это уже делать не нужно: Для этого нам необходимо сделать пару вещей. 1. Нам необходимо определиться, какой один протокол мы будем везде использовать. В своих прошлых статьях, я писал о том, что максимально достаточно использовать протокол VLESS TCP REALLITY Поэтому ЕГО и возьмем за основу. 2. Нам нужно создать его копии, но с разным названием tag. 2.1. Идём в панель Marzban, и создаем копию нашего Подключения. Нам нужно изменить во втором: TAG и PORT (чтобы у нас не возникло конфликтов в системе) Вот моя часть кода: { "log": { "loglevel": "warning" }, "inbounds": [ { "tag": "MAIN", "listen": "0.0.0.0", "port": 8443, "protocol": "vless", "settings": { "clients": [], "decryption": "none" }, "streamSettings": { "network": "tcp", "tcpSettings": {}, "security": "reality", "realitySettings": { "show": false, "dest": "discordapp.com:443", "xver": 0, "serverNames": [ "cdn.discordapp.com", "discordapp.com" ], "privateKey": "OGWADIQSFq3tUHrUTOug8mUQqG7OZeoKZR5Hv3LdmVg", "shortIds": [ "bbc0e34bc74e6183" ] } }, "sniffing": { "enabled": true, "destOverride": [ "http", "tls" ] } }, { "tag": "NODE 1", "listen": "0.0.0.0", "port": 8443, "protocol": "vless", "settings": { "clients": [], "decryption": "none" }, "streamSettings": { "network": "tcp", "tcpSettings": {}, "security": "reality", "realitySettings": { "show": false, "dest": "discordapp.com:443", "xver": 0, "serverNames": [ "cdn.discordapp.com", "discordapp.com" ], "privateKey": "OGWADIQSFq3tUHrUTOug8mUQqG7OZeoKZR5Hv3LdmVg", "shortIds": [ "bbc0e34bc74e6183" ] } }, "sniffing": { "enabled": true, "destOverride": [ "http", "tls" ] } } ], "outbounds": [ Маленькая поправка если используешь только один единственный вариант подключения, например, vless tcp reality, то порт можешь на всех нодах указывать один. Проблем не будет. Если у вас в планах использовать несколько типов подключений - то для каждого типа можно указать свои одинаковые порты для каждой ноды! На выходе получаем вот такой вид в настройках хоста: Если все получилось именно так, идем дальше. 2.2. Теперь для нашей Ноды, присваиваем её IP адрес. Указал? 2.3. Ну вот и всё готово. Теперь можем группировать и раздавать конфиги вот так: Как это можно применить ещё, расскажу в следующей статье.
    2 балла
  26. Всем привет! Еще в прошлом месяце, вышел новый транспортный протокол xHTTP. Он заменит собой полностью http, поэтому пока еще есть обратная совместимость у последних версий ядер xRay. Почитать можно тут: https://github.com/XTLS/Xray-core/discussions/4113#discussioncomment-11468947 Для тех кто не в курсе, есть генератор инбаундов: https://azavaxhuman.github.io/MarzbanInboundGenerator/v2/ тут можно посмотреть другие примеры конфигураций: https://github.com/XTLS/Xray-examples Но практически никто не выкладывает готового инбаунда, который сможет работать на marzban. Я больше месяца пытался собрать универсальный, работающий конфиг. И только в этой вариации у меня заработало. Работает на v2box на андроиде и на Streisand на iOS. Условия: Послдедняя версия ядра на сервере и ноде (>24.11.30) сам конфиг: { "tag": "VLESS-XHTTP-REALITY", "listen": "0.0.0.0", "port": 443, "protocol": "vless", "settings": { "clients": [], "decryption": "none", "fallbacks": [] }, "streamSettings": { "network": "xhttp", "realitySettings": { "dest": "ftp.debian.org:443", "maxClient": "", "maxTimediff": 0, "minClient": "", "privateKey": "YOUR PRIVATE KEY", "serverNames": [ "ftp.debian.org" ], "shortIds": [ "" ], "show": false, "xver": 0 }, "security": "reality", "xhttpSettings": { "host": "ftp.debian.org", "path": "/", "mode": "auto", "extra": { "headers": {}, "xPaddingBytes": "100-1000", "noGRPCHeader": false, "noSSEHeader": false, "scMaxEachPostBytes": 1000000, "scMinPostsIntervalMs": 30, "scMaxBufferedPosts": 30, "xmux": { "maxConcurrency": "16-32", "maxConnections": 0, "cMaxReuseTimes": "64-128", "cMaxLifetimeMs": 0, "hMaxRequestTimes": "800-900", "hKeepAlivePeriod": 0 }, "sockopt": {} } }, "sniffing": { "destOverride": [ "http", "tls", "quic", "fakedns" ], "enabled": true, "metadataOnly": true, "routeOnly": true } } } Есть еще вариант с TLS. Но его работоспособность не проверял. "tag": "VLess-XHTTP-TLS", "listen": "0.0.0.0", "protocol": "vless", "port": 2096, "settings": { "decryption": "none", "clients": [] }, "streamSettings": { "network": "xhttp", "xhttpSettings": { "path": "/yourpath?ed=2096", "host": "sub.domain.com", "maxUploadSize": 1500000, "maxConcurrentUploads": 150, "minUploadInterval": 30, "paddingBytes": 500, "noSSEHeader": false, "maxConcurrency": 24, "maxReuseTimes": 96, "maxLifetime": 0 }, "security": "tls", "tlsSettings": { "serverName": "sub.domain.com", "certificates": [ { "ocspStapling": 3600, "certificateFile": "/var/lib/marzban/ca/cert.crt", "keyFile": "/var/lib/marzban/ca/private.key" } ], "minVersion": "1.0", "cipherSuites": "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" } }, "sniffing": { "enabled": true, "destOverride": [ "http", "tls", "quic" ] } }, Указанный SNI дан для примера! Все требования для него как всегда остаются!
    2 балла
  27. Способ 1 (для всех ОС) Это самый простой способ. Копируем ссылку на видео. Заходим в Discord, создаем группу с самим собой (можно использовать Discord-сервер). Кидаем в чат ссылку, нажимаем на вложение и смотрим - профит! Способ 2 (для всех ОС) Внимание!! Будет реклама! Нужен VPN. Создайте свой, либо используйте бесплатный, коих полно в интернете. Подключаемся к VPN. Открываем YouTube, смотрим в максимальном качестве. Способ 3 (только для Windows) Это самый удобный и заморочный способ. Качаем GoodbyeDPI с GitHub. Распаковываем архив. В адресной строке браузера пишем: chrome://flags. В поиске пишем kyber, в выпадающем меню выставляем Disabled, закрываем браузер. В папке GoodbyeDPI запускаем 1_russia_blacklist.cmd от имени администратора. Если запуск успешен, вы увидите «Filter activated, GoodbyeDPI is now running!» Заходим на YouTube и проверяем работу. Если мешает окно cmd, в папке GoodbyeDPI запускаем service_install_russia_blacklist.cmd от имени администратора. Скрипт установит программу в автозагрузку. Если ничего не поменялось, и Вы не выполняли пункт 8, закрываем окно cmd, в папке GoodbyeDPI запускаем 1_russia_blacklist_dnsredir.cmd от имени администратора, выполняем пункт 6. Это перенаправит запросы к YouTube через защищенный DNS. Если мешает окно cmd, запускаем service_install_russia_blacklist_dnsredir.cmd, выполняем пункт 6. Это перенаправит запросы к YouTube через защищенный DNS. Если Вы выполнили пункт 8 или 10 и хотите удалить программу, запускаем service_remove.cmd от имени администратора, затем перезагружаем комп. Это полностью удалит службу из системы. Способ 4 (Android) UPD от 06.08.2024: на Android можно скачать YouTube ReVanced и смотреть в нем, приложение режет рекламу, поэтому подойдет для просмотра через VPN. Ссылка на скачивание с 4pda (не реклама), root не требуется. В стоке работает не у всех, лично у меня – нет. UPD 2 от 06.08.2024: @CO_PY, приветствую, спасибо за наводку! Способ 5 (только для Android) Удобный и быстрый способ. Качаем ByeDPIAndroid с GitHub, устанавливаем. Запускаем, нажимаем на кнопку «Connect», даем разрешение на подключение к VPN. Запускаем YouTube и смотрим – профит! По умолчанию прога создает self-hosted VPN и меняет IP-адрес DNS-сервера на 9.9.9.9 на случай, если провайдер спуфит DNS. В настройках рекомендую выбрать "Desync only HTTPS and TLS", дабы не ломать полезный трафик, но, если "не горит", можно не ставить. Если не работает, попробуйте поменять режим "VPN" на "Proxy" в настройках приложения, у меня заработало в стоке. UPD 3 от 07.08.2024: Способ 6 (Linux, macOS) Еще один быстрый и удобный способ. Открываем "Терминал". Если у Вас Linux (не macOS, это важно) – вводим команду для определения архитектуры: dpkg --print-architecture Если у Вас Mac на intel: curl -fsSL https://raw.githubusercontent.com/xvzc/SpoofDPI/main/install.sh | bash -s darwin-amd64 Если у Вас Mac на Apple Silicon (M1, и т.д): curl -fsSL https://raw.githubusercontent.com/xvzc/SpoofDPI/main/install.sh | bash -s darwin-arm64 Если у Вас Linux на amd64: curl -fsSL https://raw.githubusercontent.com/xvzc/SpoofDPI/main/install.sh | bash -s linux-amd64 Если у Вас Linux на arm: curl -fsSL https://raw.githubusercontent.com/xvzc/SpoofDPI/main/install.sh | bash -s linux-arm Если у Вас Linux на arm64: curl -fsSL https://raw.githubusercontent.com/xvzc/SpoofDPI/main/install.sh | bash -s linux-arm64 Эти команды скачают и запустят скрипт установки SpoofDPI. Папка установки по умолчанию: ~/.spoof-dpi/bin Если установка успешна, вы увидите "Successfully installed SpoofDPI". Далее, вводим команду: export PATH=$PATH:~/.spoof-dpi/bin Она добавит переменную окружения для запуска SpoofDPI в любой папке. Вводим команду: spoof-dpi Если все прошло успешно, вы увидите "SPOOFDPI". Поздравляю, все работает! Если у вас Mac, и, после ввода spoof-dpi Вам выдало ошибку "bad CPU type in executable: spoof-dpi", установите Rosetta командой softwareupdate --install-rosetta --agree-to-license После установки Rosetta повторите запуск SpoofDPI. UPD 4 от 08.08.2024: радостная новость для владельцев Яблока! Способ 7 (iOS, macOS) Без VPN и команд. Открываем AppStore и скачиваем BluePlayer – аналог YouTube ReVanced. Приложение поддерживает все возможности YouTube Premium и Spotify, не имеет рекламы, есть Chromecast. UPD 5 от 11.08.2024: еще способы для владельцев Яблока. Способ 8 (iOS, macOS) Простой и быстрый способ. Качаем Unicorn HTTPS из AppStore. Запускаем приложение, нажимаем на переключатель, устанавливаем предложенный конфиг. Запускаем YouTube и смотрим! Unicorn HTTPS – это аналог ByeDPIAndroid, только для iOS. Приложение бесплатное, без рекламы. Настройки, по сравнению с ByeDPIAndroid, примерно идентичны. Способ 9 (iOS, macOS) Неудобный способ. Запускаем Safari, переходим в «Дополнения» -> Experimental Features, выбираем HTTP3. Заходим на YouTube и смотрим. Неудобен способ тем, что смотреть придется в браузере. UPD от 15.08.2024: способ для тех, кто хочет «поставить и забыть». Способ 10 (Windows, macOS, Android) Этот способ может не работать на некоторых провайдерах, либо не работать вовсе! Быстрый и удобный способ. Нужна полная версия программы! Стоит дешевле чашки кофе – 50 руб/мес. Заходим на сайт adguard.com, выбираем свою систему из списка и скачиваем установщик. Для захода на сайт нужен VPN, после скачивания установщика его можно выключить. Если у Вас Windows или macOS: Устанавливаем программу, проходим быструю настройку, открываем меню «настройки» сверху окна программы. Выбираем вкладку «Антитрекинг», включаем переключатель, листаем в самый низ меню. Включаем пункт «Защита от DPI», заходим на YouTube и смотрим! Если у Вас Android: Устанавливаем приложение, проходим быструю настройку, нажимаем на щит снизу. Выбираем вкладку «Защита от трекинга», уровень защиты – пользовательский, листаем в самый низ меню. Включаем пункт «Защита от DPI», заходим в приложение YouTube и смотрим! Если у Вас нет пункта «Защита от DPI» - обновите AdGuard. UPD от 21.08.2024: про способы для ТВ тоже не забыл. Как скинуть и установить .apk на Android TV Передача файлов: Поддерживаются любые типы файлов, не только .apk. Качаем Send Files to TV из Google Play, устанавливаем на телефон и ТВ. Выбираем свой ТВ из списка и отправляем файлы! Установка приложений: Качаем FX File Explorer из Google Play на ТВ. Можно использовать любой совместимый файловый менеджер. Запускаем, находим нужный .apk, устанавливаем. Способ 11 (Android, Android TV) Способ для телефонов и ТВ. Если у Вас Android: Качаем PowerTunnel с GitHub, устанавливаем. Запускаем, нажимаем на кнопку «Connect», даем разрешение на подключение к VPN. Запускаем YouTube и смотрим! Если у Вас Android TV: Кидаем .apk на ТВ и устанавливаем. Запускаем, нажимаем на кнопку «Connect», даем разрешение на подключение к VPN. Запускаем YouTube и смотрим! Если у Вас все равно не работает YouTube – проверьте, чтобы в настройках PowerTunnel был включен плагин «LibertyTunnel» и «DNS Resolver». UPD от 24.08.2024: еще способ для ТВ. Способ 12 (только Android TV) Способ для ТВ без использования VPN. Android-телефоны, LG Web OS, Samsung Tizen – НЕ ПОДДЕРЖИВАЮТСЯ!! SmartTube не существует ни в одном магазине приложений, установка только с GitHub, будьте внимательны!! Скачиваем .apk, кидаем на телевизор, устанавливаем. Запускаем, даем нужные разрешения. Смотрим! Для обновления SmartTube зайдите в меню «О программе», не нужно его переустанавливать. SmartTube – аналог YouTube ReVanced для Android TV. Приложение режет рекламу, подойдет для просмотра через VPN. UPD от 31.08.2024: способ в два клика. Способ 13 (Для всех ОС) Быстрый способ. Будет реклама, так как это всего лишь web-прокси. Переходим на сайт, вставляем ссылку на видео. Смотрим! Внимание!! Входите в google-аккаунт через прокси на свой страх и риск!! UPD от 08.09.2024: еще один способ без рекламы. Способ 14 (Для всех ОС) Способ без рекламы. В этом способе описана только подготовка VDS. Берем VDS на любом хостинге в локации «Россия». Подключаемся под root, меняем пароль на свой командой passwd. Вас попросят ввести пароль два раза. Не ставьте простой пароль, иначе Ваш VDS взломают!! Подготавливаем систему: Если у Вас Ubuntu или Debian: apt update -y && apt upgrade -y apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" apt install -y docker-ce docker-ce-cli containerd.io docker-compose systemctl enable docker && systemctl start docker docker run hello-world Если у Вас CentOS: yum update yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce docker-ce-cli containerd.io sudo systemctl enable docker && sudo systemctl start docker docker run hello-world Если Вам не выдало никаких ошибок, система готова к дальнейшей установке VPN. Далее все зависит от Ваших потребностей, в этом разделе есть инфа. На форуме есть клубы, где все описано подробно. Для получения доступа нужна подписка. UPD от 14.09.2024: гайд для тех, у кого перестал работать GoodbyeDPI. Восстановление работы GoodbyeDPI Если не устанавливали программу как службу (не выполняли пункт 8 или 10 из способа 3): Открываем 1_russia_blacklist.cmd в текстовом редакторе, в строке start "" goodbyedpi.exe -5 --blacklist ..\russia-blacklist.txt меняем -5 на -1 или -7, сохраняем изменения. Запускаем 1_russia_blacklist.cmd от имени администратора, проверяем работу YouTube! Если устанавливали программу как службу (выполняли пункт 8 или 10 из способа 3): Запускаем service_remove.cmd от имени администратора, перезагружаем комп. Это удалит GoodbyeDPI с нерабочей конфигурацией. Открываем service_install_russia_blacklist.cmd в текстовом редакторе, в строке sc create "GoodbyeDPI" binPath= "\"%CD%\%_arch%\goodbyedpi.exe\" -5 --blacklist \"%CD%\russia-blacklist.txt\"" start= "auto" меняем -5 на -1 или -7, сохраняем изменения. Запускаем service_install_russia_blacklist.cmd от имени администратора, перезагружаем комп, проверяем работу YouTube! UPD от 19.09.2024: новый релиз GoodbyeDPI со встроенным фиксом YouTube. Скачиваем релиз, распаковываем архив. Запускаем 1_russia_blacklist_YOUTUBE.cmd от имени администратора. Проверяем работу YouTube. Если не сработало, запускайте 1_russia_blacklist_YOUTUBE_ALT.cmd от имени администратора. UPD от 22.09.2024: еще один фикс для GoodbyeDPI. Восстановление работы GoodbyeDPI 2 Заходим на сайт, выбираем 116 цифр и один результат. Открываем в текстовом редакторе тот файл, который запускаете, например, 1_russia_blacklist.cmd, после строки "sc create "GoodbyeDPI" binPath = "%CD%\%_arch%\goodbyedpi.exe\" ставим пробел, вставляем -9 -e1 -q --fake-gen 29 --fake-from-hex ВАШИ_ЦИФРЫ_ИЗ_ГЕНЕРАТОРА и сохраняем изменения. Это все должно быть в до ключевого слова "--blacklist" Запускаем GoodbyeDPI и проверяем работу YouTube. UPD от 26.09.24: задушили ByeDPIAndroid. Восстановление работы ByeDPIAndroid Заходим на GitHub разработчика, скачиваем релиз с тегом «Latest». Не удаляя старую версию, устанавливаем новую. Запускаем ByeDPIAndroid, нажимаем на кнопку «Connect». Проверяем работу YouTube! Для дополнительных настроек нажимаем на шестеренку в правом верхнем углу, затем выбираем пункт UI editor. UPD от 15.10.2024: краткий обзор ситуации. SpoofDPI больше не работает, ждем фикса от разраба. У меня перестал работать ByeDPIAndroid и GoodbyeDPI, даже с фиксами из способов от 19.09.2024 и 22.09.2024. Все остальное работает без изменений (пока что)
    2 балла
  28. Привет. Делал все по инструкции на самом кенетике выполняя каждый пункт. Все завелось с первого раза и заработало. Пытался zapret установить на роутер ксяоми под openwrt и чет не смог реализовать плюнул до лучших времен. Из apk под андроид хорошо работает DPI Tunnel при наличии root-прав.
    2 балла
  29. Всем привет! Часто спрашивают про выбор конкретного SNI (Server Name Indication) при использовании VLESS REALITY SNI, или Server Name Indication, это расширение протокола TLS, которое позволяет клиенту указать, какой веб-сайт он хочет посетить во время установления защищенного соединения. Это особенно полезно, когда один сервер хостит несколько веб-сайтов по одному и тому же IP-адресу. Когда вы используете VLESS Reality, SNI используется для указания на чужие веб-сайты. Это позволяет скрыть ваши настоящие намерения и целевой сайт1. Это делает его идеальным инструментом для обхода блокировок и сохранения конфиденциальности в интернете. Основной смысл выбора SNI: На данный момент, по принципу работу REALITY, она каждый раз должна получать пакет рукопожатия, поэтому важно учитывать, насколько близок и стабилен целевой сайт, так как выбор этого самого целевого сайта существенно влияет на задержку, скорость и ее стабильность. Основные требования к выбору SNI: 1. Зарубежный сайт 2. Сайт поддерживает TLS 1.3 и H2 3. Страница сайта никуда не переадресовывает Дополнительные условия: 1. Если он (камуфляжный веб-сайт) имеет IP-адрес, близкий к вашему серверу, Наличие IP-адреса, близкого к вашему серверу, означает, что веб-сайт камуфляжа имеет IP-адрес, который близок к IP-адресу вашего сервера с точки зрения сетевого расстояния или географического местоположения. Это может сделать ваше соединение более эффективным и менее подозрительным. 2. сообщения о рукопожатии после «Server Hello» шифруются вместе. (например, для dl.google.com), Некоторые веб-сайты могут не шифровать сообщения рукопожатия после «Привет сервера» вместе, а вместо этого отправлять их отдельно в виде открытого текста. Это может предоставить некоторую информацию о сервере и клиенте, например поддерживаемые ими наборы шифров, расширения и сертификаты. Злоумышленники могут использовать это для идентификации сервера и клиента. Этот (dl.google.com) является примером веб-сайта, который шифрует сообщения рукопожатия после «Server Hello» вместе с клиентом. Это означает, что сервер и клиент обмениваются зашифрованными данными после первоначального подтверждения TLS. Это может предотвратить подслушивание или вмешательство третьих лиц. 3. Сервер реализует OCSP. Сервер реализует сшивание OCSP, что означает, что сервер может предоставить подтверждение действительности своего сертификата, не требуя от клиента обращения в центр сертификации. Это может улучшить производительность и конфиденциальность соединения. Выбираем SNI для своего сервера. Есть очень много сканеров, которые помогают найти SNI для вашего сервера. Есть универсальные, это в основном сайты корпораций, например microsoft, debian, discord. То есть те, у которых хорошо разбросаны свои сервера по всему миру, и подключаясь на один адрес, сервер вам сам "подсовывает" подходящий вам, либо у таких серверов очень хорошие каналы связи. https://github.com/XTLS/RealiTLScanner https://github.com/hiddify/Hiddify-Reality-Scanner https://github.com/hawshemi/SNI-Finder https://github.com/B3H1Z/Reality-TLS-Scanner-GUI https://github.com/meower1/Reality-SNI-finder Важно понимать, что если вы выбираете один (не универсальный) SNI, а ваши Узлы (NODE) расположены в разных странах, и у разных провайдеров, то вам для каждого сервера нужно найти свой подходящий SNI. Поэтому если вы используете несколько NODE и для каждого хотите подобрать свой SNI, то вам придется использовать разные INBOUNDS: PS: Я знаю один не плохой вариант SNI для Китая cdn-fastly-v6.deb.debian.org
    2 балла
  30. О! Вот спасибо за разъяснение по настройке. А то я включил, а интернет вообще пропал на смартфоне) Вместо прокси поставил vpn и галочку в пункте Desync only HTTPS and TLS и заработало!
    2 балла
  31. Всем привет! Понравилась мне тема с отправкой уведомлений состояния в телеграм, и после одной ситуации, когда контейнер неожиданно не запустился, сделал для себя такую реализацию сервиса. https://github.com/DigneZzZ/monny-docker/ При установке вам необходимо будет ввести TelegramBotID и ChatID. ChatID это место куда бот будет писать сообщения. В моем случае это отдельный Канал (только для меня) где сидят мои боты и шлют уведомления при необходимости. Сервис установит автоматически все необходимые зависимости для работы Python скрипта. Чтобы посмотреть перечень доступных команд: monny help Чтобы удалить сервис из системы: monny uninstall Чтобы остановить сервис (если вдруг вам спамит слишком много, например, в случае долго рестарта): monny stop Чтобы запустить: monny start В принципе на это основной функционал заканчивается Если понравилось и хотели бы еще увидеть возможность выбирать контейнеры для мониторинга, пишите постараюсь реализовать. Установка: bash <(curl -L -s https://raw.githubusercontent.com/DigneZzZ/monny-docker/main/setup_monny.sh)
    2 балла
  32. https://github.com/mag37/dockcheck Проверка Docker контейнеров на наличие обновлений. Скрипт может просто уведомлять в том числе и в телеграм или сразу обнавлять контейнеры.
    2 балла
  33. Введение В этой статье мы рассмотрим, как настроить автоматическое резервное копирование данных с использованием Rclone и Cloudflare R2. Мы создадим bash-скрипт, который будет создавать архив, загружать его в Cloudflare R2 и отправлять уведомления через Telegram. Также добавим этот скрипт в crontab для регулярного выполнения каждые 4 часа. Все это будет создавать архивы нашего мэйн сервера Marzban. Что такое Rclone? Rclone – это клиент командной строки для обеспечения работы и синхронизации файлов и директорий с облачными хранилищами. Облачный провайдер поддерживает множество, включая Amazon S3, Google Drive, Dropbox, и, конечно, Cloudflare R2. Rclone используется для резервного копирования файлов, синхронизации файлов между различными облачными и локальными хранилищами. Различные функции Rclone включают: Synchronization – синхронизация файлов между локальными хранилищами и облачными провайдерами. Copy – копирование файлов между различными папками облачного хранилища. Шифрование – шифрование файлов. Automator – работа по расписанию с использованием скриптов и crontab. Поддержка облачных провайдеров: Amazon S3, Google Drive, Dropbox, OneDrive, Cloudflare R2 и других. Что такое Cloudflare R2? Cloudflare R2 – это хранилище объектов, предоставляемое облачной службой безопасности Cloudflare. Оно предназначено для хранения больших объемов данных с минимальными затратами и высокой производительностью. R2 предоставляет доступ к данным через API, совместимый с S3, что позволяет использовать такие инструменты, как Rclone, для управления файлами. Преимущества Cloudflare R2: Низкие затраты: отсутствие платы за исходящий трафик. Высокая производительность: быстрая доставка контента благодаря глобальной сети Cloudflare. Совместимость с S3: возможность использования существующих инструментов и скриптов для работы с данными. 10ГБ пространство доступно на каждом аккаунте (в сумме всех бакетов) Настройка Cloudflare R2 К сожалению, первым делом, даже чтобы воспользоваться бесплатно, вам нужно будет привязать банковскую карту к своему аккаунту CF. РФ карты не принимает. НО без проблем принимает карты от Cashinout, сервис который я упоминал в этой статье: Вы можете сделать хитро. Оформить карту в Cashinout, пройти верификацию в CF, а затем удалить свою карту (деньги находящиеся на ней вернутся на ваш счет аккаунта Cashinout) Для начала работы с Cloudflare R2 выполните следующие шаги: Создайте аккаунт Cloudflare: Зарегистрируйтесь на сайте Cloudflare и войдите в свой аккаунт. (этот шаг я пропускаю, понимая что у вас он уже есть) Создайте R2 хранилище: В панели управления Cloudflare перейдите в раздел R2. Создайте новый бакет, указав его имя и настройки. Создайте API токен: Перейдите в раздел API Tokens. Нажмите кнопку Create Token. Выберите Введите имя и укажите параметры так как на скриншоте Нажмите Create Token и сохраните ваш токен. (можете пока просто не закрывать окно) Установка и настройка Rclone Установка и настройка Rclone Установите Rclone: curl https://rclone.org/install.sh | sudo bash Настройте Rclone: rclone config Следуйте инструкциям для создания нового удаленного подключения: n) New remote name> s3cf Type of storage to configure. Enter a string value. Press Enter for the default (""). Storage> s3 AWS Access Key ID> YOUR_CLOUDFLARE_ACCESS_KEY AWS Secret Access Key> YOUR_CLOUDFLARE_SECRET_KEY Region to connect to. Enter a string value. Press Enter for the default (""). region> Endpoint for S3 API. Optional. Use an empty string for the default endpoint. Enter a string value. Press Enter for the default (""). endpoint> https://<account-id>.r2.cloudflarestorage.com AWS Access Key ID> YOUR_CLOUDFLARE_ACCESS_KEY AWS Secret Access Key> YOUR_CLOUDFLARE_SECRET_KEY Эти параметры мы получаем из нашего окна с API ключами CF. Когда нужно будет указать в последнем этапе endpoint, вы можете взять их из настроек бакета. openode (из моего примера) вводить не нужно! Готово! Чтобы проверить подключение, вы можете ввести команду: rclone ls s3cf:openode В данном случае s3cf - Это название конфига которое вы создавали на первом шаге rclone config А openode - Это имя бакета которое вы создавали в CF. Создание и настройка bash-скрипта Для создания архива в скрипте будем использовать пакет zip для этого установим его: apt install zip Создайте файл скрипта backup_script.sh в папке /root/: nano /root/backup_script.sh Вставьте следующий код: #!/bin/bash # Переменные для Telegram TELEGRAM_BOT_TOKEN="YOUR_TELEGRAM_BOT_TOKEN" TELEGRAM_CHAT_ID="YOUR_TELEGRAM_CHAT_ID" # Папки для архивации SRC_DIRS=("/opt/marzban" "/var/lib/marzban") # Папка для хранения архива DEST_DIR="/root" # Имя архива с датой и временем DATE=$(date +'%Y-%m-%d_%H-%M-%S') ARCHIVE_NAME="OPENODE_backup_$DATE.zip" ARCHIVE_PATH="$DEST_DIR/$ARCHIVE_NAME" # Создание архива zip -r "$ARCHIVE_PATH" "${SRC_DIRS[@]}" # Целевая папка в Cloudflare R2 TARGET_DIR="s3cf:openode/" # Функция для отправки уведомления в Telegram send_telegram_message() { MESSAGE=$1 curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" -d chat_id="${TELEGRAM_CHAT_ID}" -d text="${MESSAGE}" } # Загрузка архива в Cloudflare R2 и отправка уведомления if rclone copy "$ARCHIVE_PATH" "$TARGET_DIR"; then send_telegram_message "Архив $ARCHIVE_NAME успешно загружен в Cloudflare R2." # Удаление локального архива после копирования rm "$ARCHIVE_PATH" else send_telegram_message "Ошибка при загрузке архива $ARCHIVE_NAME в Cloudflare R2." fi # Ротация архивов в Cloudflare R2 (оставить только за последние 7 дней) rclone delete --min-age 7d "$TARGET_DIR" Сохраняем. Сделайте скрипт исполняемым: chmod +x /root/backup_script.sh Можем попробовать запустить: ./backup_script.sh Если все прошло хорошо, и уведомления получены в телеграм, то можно настроить crontab: crontab -e Вставляем в пустую строку: 0 */4 * * * /root/backup_script.sh >/dev/null 2>&1 Готово! Каждые 4 часа будут собираться архивы и приходить уведомления.
    2 балла
  34. Всем привет! Статья будет достаточно короткой, но кому то, возможно, полезной. Если вы используете лимитированные сервисы, например, Vultr или DigitalOcean, то при большой прогоне трафика, его дополнительная покупка может быть дорогой. Но, покупка нового сервера - может быть дешевле, к тому же, позволит разгрузить основные ноды. Спасет нас, самая простая балансировка серверов через А-записи DNS. Как я уже рекомендовал ранее, я использую привязку всех доменов в CloudFlare. 1. Создаем копию Ноды. Здесь должно быть все четко. Одинаковые параметры сервера: Порты подключения mTLS ключи одинаковый параметр поднятия контейнера Подняли? Если сложно, напишите, я распишу. 2. Идем на CloudFlare и создаем копию записи поддомена. но с использованием другого IP адреса мы создали два поддомена, с одинаковым именем nl-node Но указали два разных айпи адреса Помимо этого, мы указали TTL - в 2 минуты (чтобы проверить, но вы можете указать и 5-10 минут. Это время удержания на сервере, до момента переподключения. 3. Идем в панель и добавляем узел Напоминаю, подключение узлов в панеле лучше осуществлять через IP адрес сервера. Первый сервер: Второй сервер: При добавлении, убирайте галочку: 4. Проверяем настройки хоста - inbound-ы А вот домен, мы указываем в настройках хоста: Без дублирования на сервера. Итог: Каждый пользователь, подключаясь по этому inbound будет попадать (каждый раз) на разные сервера по факту. Таким образом получится обеспечить равномерное распределение пользователей по вашим серверам в рамках одной локации.
    2 балла
  35. А что мне нужно сделать что бы одобрили пост? ЧТо нужно запостить такое что бы его одобрили, я пришел прочитать инструкцию, и сохранил ее в закладках
    2 балла
  36. Всем привет! ИСПОЛЬЗОВАНИЕ ADGUARD HOME В СВЯЗКЕ С VLESS REALITY КРАТНО СНИЗИТ СКОРОСТЬ СОЕДИНЕНИЯ! УСТАНОВКА ADGUARD HOME ПРИ ИСПОЛЬЗОВАНИИ УЗЛОВ (NODE) - ДОЛЖНА БЫТЬ ВЫПОЛНЕНА НА КАЖДОМ СЕРВЕРЕ Сегодня разберем создание контейнера с AdGuardHome и подключением его к ядру Marzban. Я уже ранее публиковал другую тему, но там все было достаточно сложно и долго. Пройдемся заново. AdGuard можно устанавливать как в контейнер 1. Создаем контейнер 1.1. Создаем файл docker-compose.yml в папке agh mkdir agh && cd agh && nano docker-compose.yml Внутрь вставляем код: version: "3.9" services: adguardhome: image: adguard/adguardhome container_name: adguardhome restart: unless-stopped environment: - TZ=Europe/Moscow volumes: - ./work:/opt/adguardhome/work - ./conf:/opt/adguardhome/conf network_mode: host #Это можно прописать если вы хотите запустить AGH на уровне хоста. !!! 1.2. Запускаем контейнер: docker compose up -d 1.3. Открываем порт в UFW: sudo ufw allow 3000 2. Настройка Переходим по адресу: http://your-ip:3000 И попадаем на страницу установки: 2.1. Веб-интерфейс давайте засунем на какой-нибудь замудренный порт, и потом закроем его через UFW. Я себе сделаю такой: 2.2. А вот интерфейс для обслуживания запросов DNS, я выберу другой, локальный: Оговорка: Данная вариация предназначена для Marzban без использования Нод. Если вы используете ноды, то вам нужно будет повторить этот процесс для каждого сервера. Без сомнений, можно открывать DNS сервер на публику, но это потребует значительных мощностей от вашего сервера, когда его будут атаковать по 53 порту китайские боты... И конечно можно сделать, чтобы все сервера ссылались на один DNS сервер, но это увеличит задержки. Я так не рекомендую 2.3. Следующим шагом задаем логин и пароль админа: Затем несколько раз далее.. И попадаем на экран: 2.4. Открываем порт для нашей веб-админки: sudo ufw allow 9880 3. Переходи в панель AdGuard Home Давайте сразу его настроим: 3.1. Заходим в настройки DNS: Меняем Upstream DNS-серверы на: В резервных DNS задаем 1.1.1.1 Спускаемся чуть ниже, и жмем ПРИМЕНИТЬ Убедились что все ок: 3.2. Идем в Настройки - Основные настройки Переключаем режим журнала в 24 часа (можно и совсем выключить, если мало места на сервере) и жмем сохранить 3.3. Настройка фильтров. Заходим фильтры - Черные списки DNS. Вы можете их указать свои, но я обычно использую один. И для РФ хватает. Жмем добавить черный список =- Добавить свой список И добавляем: Имя задавайте любое Готово: 4. Идём в настройки Xray Core и добавляем: "dns": { "servers": [ "127.0.0.1" ] }, Получиться должно так: Теперь, нам нужно отключить службу systemd-resolved 1. Откройте терминал сервера 2. Введите следующую команду, чтобы остановить службу systemd-resolved: sudo systemctl stop systemd-resolved 3. Введите следующую команду, чтобы отключить службу systemd-resolved при загрузке системы: sudo systemctl disable systemd-resolved 4. Чтобы удалить символическую ссылку /etc/resolv.conf, выполните следующую команду: sudo rm /etc/resolv.conf 5. Создайте новый файл /etc/resolv.conf и добавьте в него необходимые настройки DNS. nano /etc/resolv.conf В файл вписываем: nameserver 127.0.0.1 6. Перезагрузите систему: sudo reboot После выполнения этих шагов, служба systemd-resolved будет отключена, и ваша система будет использовать новый файл /etc/resolv.conf для разрешения DNS-запросов. Всё. Запросы пролетают через наш AdGuard. Осталось закрыть наш порт в UFW командой: ufw deny 9880
    2 балла
  37. так а интерфейс для adguard на какой порт настраивал? на 3000 порту у тебя только установщик стоит. Дальше интерфейс - какой порт? Вообще я уже много раз писал, что adguard в связке с VLESS REALITY сильно увеличивает пинг и открытие страниц. И я бы не рассматривал эту связку, т.к. это не VPN.
    2 балла
  38. ShadowSocks решения: Marzban Quick | Marzban Full | Marzban Node | x-ui | 3x-ui | 3x-ui Docker Всем привет Проблема прилетела с утра мгновенная.. а вот решение я так и не описал. Начнем. Итак, перед нами задача. WireGuard блокируют в РФ потихоньку, нужны альтернативы. Сразу оговорюсь, свою сборку я пока не смог собрать с AdGuard-ом. Но стремлюсь к этому. Первым делом нам нужно арендовать хороший и быстрый сервер. Например можно рассмотреть: 1. Aeza: получаем бонус 15% (если пополнить в первые 24часа регистрации) на пополнение баланса: https://aeza.net/?ref=377137 2. На крайний случай 4vps: 4VPS.su (2Гб\с сервера) 1. Регистрируемся по ссылке. 2. Выбираем желаемую страну. Но по моему опыту тестирования всех локаций, самые лучшие скорости в РФ у серверов в Дании и в Швейцарии. 3. Получаем адрес, логин и пароль. 4. Заходим через SSH клиент. Самым навороченным на опции и с детальным веб-интерфейсом решением ShadowSocks является сборка 3x-ui от MHSanaei: MHSanaei/3x-ui: Xray panel supporting multi-protocol multi-user expire day & traffic & ip limit (Vmess & Vless & Trojan & ShadowSocks) (github.com) Установка простая. Установка от обычного x-ui не отличается практически ничем. Кто хочет x-ui без WARP Proxy, вот ссылка на репозиторий Юзаем команду (обращаю ваше внимание, установка не в DOCKER (как установить в Docker расскажу в отдельном посте, но информация есть на странице GitHub): Хочется отметить, что если вы ставите панель в докер, то могут возникнуть сложности с использованием команды x-ui вне контейнера. По умолчанию логин и пароль для контейнерной версии admin/admin bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) Скрипт все сделает сам. В итоге уведомит и предложит создать пользователя: После заполнения простых действий получаем: Готово. Теперь можем ознакомиться с меню доступным из консоли: Нас интересует 15 пункт. SSL сертификат. (опция не обязательна. Но мы сделаем все командой с официальной страницы репозитория: apt-get install certbot -y certbot certonly --standalone --agree-tos --register-unsafely-without-email -d yourdomain.com certbot renew --dry-run Не забыв заменить свой домен. Теперь заходим по адресу который мы указывали (не забудьте открыть порт в UFW для вашего порта веб-интерфейса, который вы задали. Авторизовываемся: Получаем главный интерфейс: Идем сразу в настройки панели и переходим в раздел Подписки: Включаем её. Нам она нужна, чтобы на одного пользователя можно было цеплять сразу несколько типов подключений, и у пользователя они обновлялись динамически. К тому же, у каждого клиента появится свой кабинет с информацией для подключения. Также можно настроить и использование вашего телеграм бота. Она дает статистику использования для вас и ваших пользователей. Об этой опции расскажу позже, в детальном гайде. Пора создать наше подключение! Переходим в раздел подключения: Жмем Добавить: Обязательно заходим в опцию клиентов: Здесь мы выставляем Vless как протокол для клиента под email понимается его Имя subscription как раз позволит привязать к одному клиенту несколько типов подключений. Ограничение по IP - не дает заходить больше 1 устройства на 1 подключение. Оставляем остальное как есть. Жмем Создать. На этом в принципе всё из Базовых настроек и быстрого старта. Может доберутся ещё руки до большей детальности. Но пока, не плохая статья есть здесь: https://habr.com/ru/amp/publications/735536/ Отдельная история есть про WARP proxy для обхода региональных блокировок с Ру Хостеров. Писал об этом здесь. Продолжение темы 3x-ui с установкой Docker
    2 балла
  39. Вот и я решил опубликовать в этой теме свою недавнюю сборочку, хех. До этого у меня была сборка под файлопомойку и медиасервер. Достаточно большая, на 14 дисков 3.5. И из за этого же не супер красивая да еще этот черный ящик не вписывался никуда. Да и диски использовал которые были, начиная от 1Tb. Все это было прожорливо, от части шумно и как писал выше, не эстетично. А сумме там было порядка 30Tb. Плавно перейдем к новой сборке. КОМПЛЕКТУЮЩИЕ Новый конфиг: 1. Корпус - Fractal Design Node 304 - очень компактный, возможность установить 6 дисков 3.5 + 2 диска 2.5. Так же туда залетает обычный ATX блок питания, что является плюсом и если вы собираете из части комплектующих которые у вас уже есть, на блок тратиться не придется. Цена 6000 2. Материнская плата - Gigabyte A520I AC DDR4 - одна из самых дешевых и неплохих плат в этом форм факторе. Есть разъем под m2, который можно использовать под кэш. Так же поддержка ECC памяти. Цена 10500 3. Процессор - Ryzen 5 5600 - (на фото 5500, продавец не тот процессор отдал) тк планируется повесить еще парочку виртуалок, крутить там лично облако, сайт + файлопомойку, то от пассивных целеронов решил отказаться. Цена 8500 4. Оперативная память - DDR4 Corsair 32gb 3000mhz - осталось у меня от прошлого сервера, non ECC, возможно позже куплю ECC память, пока так. Цена на авито порядка 4000-5000 5. Охлаждение - Thermalright true Spirit 140 - тихий и достаточно производительный кулер, остался тоже от прошлой сборки, в этот корпус залез на тоненького) - Ценник на авито 2500 6. NVME - ADATA LEGEND 900 - Цена 6500 7. PCI-e - SATA - разветлитель на 4 доп саты у меня был. Цена 3000 8. Блок питания - HX 850 в такой корпус не влез, хотя был у меня, пришлось искать поменьше, взял CX850m. Цена порядка 5000 Вся сборка выходит порядка 46000, хотя часть у меня уже была, так что дешевле) СБОРКА. 1. Сначала конечно сравнил плату mini-itx с обычной ITX) 1.1 И примерил сразу с башней уже в корпусе, не будет ли торчать, тк сомнения были. По спецификации влазит башня до 162мм, этот повыше но влез. Но если покупать кулер из магазина, лучше взять что то пониже явно и с горизонтальным расположением вертушки. 2. В целом сборка сильне не отличается от сборки обычного ПК, тут все упирается в размер самого корпуса и тогда приходится использовать либо стяжки, либо липучки, чтобы провода не лезли куда не надо. Так же думаю стоит сразу забыть про кабель менеджмент, тк одно из сторон этого корпуса будет забита именно ими, а прятать их особо некуда. Ну и провода все пытаются залезть в кулер на процессор) Получилось примерно вот так, уже с корзинами и установленными дисками. На фото видно как близко корзины находятся к вертушке процессора. Из коробки пришлось сразу обновлять биос, т.к 5 поколение не завелось) Хотя на коробке написано что должно. После накатил xspenlogy маскируясь под 1621+ он как раз на AMD и на 6 дисков. Все 6 дисков завелись без особых танцев с бубнами. Пока все это добро кинул в RAID 0, т.к это сейчас реальная файлопомойку для фильмов/сериалов. Так же после купил ключик, пересобирал загрузчик, поменял S/N и MAC ( можете найти на Авито, цена вопроса на мою сборку 3000) Осталось закупиться норм дисками и кинуть их в два разных массива, один под файлопомойку, второй для полезных вещей. В плане обновить все сетевуху дома, и перейти на 2.5Gbit, т.к щас все упирается в канал. Скорость копирования по сети порядка 110-115мб/с
    2 балла
  40. Что можно сделать еще с этим конфигом 1. Добавить прослойку ADGuard в контейнер, и фильтровать входящий в WG рекламный трафик 2. Добавить на зарубежный сервер конфиг WARP+ для проксирования "вредных" сайтов. 3. Добавить ТРЕТИЙ сервер, у которого весь исходящий трафик будет в TOR сеть, и отправлять на него весь трафик сети TOR 4. Добавить правила маршрутизации исходя из списка заблокированных ресурсов, подгружая его с сервиса Роскомсвободы (и проксировать только его) Подсказки WG держит только 1 подключение клиента на 1 АйПи адресе. Поскольку мы не задаем конкретный IP для подключения, то пользователи сами выбирают айпи при подключении в настройках Конфига. !!! Не рекомендуется выдавать разным пользователям одинаковые конфиги подменяя только IP адреса сети. Обязательно нужно менять PublicKey у Peer:
    2 балла
  41. потому что постоянно кто-то сканирует открытые порты, что на вебках, что на серверах и если находят, начинают долбится, оно нам надо ? проще сменить стандартный и забыть про это
    2 балла
  42. sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP nano /etc/sysctl.conf net.ipv4.icmp_echo_ignore_all = 1
    2 балла
  43. ShadowSocks решения: Marzban Quick | Marzban Full | Marzban Node | x-ui | 3x-ui | 3x-ui Docker Всем привет В продолжении прошлой темы. Решил опубликовать набор самых основных настроек и установки в докер. Первым делом нам нужно арендовать хороший и быстрый сервер. Например можно рассмотреть: 1. Aeza: получаем бонус 15% (если пополнить в первые 24часа регистрации) на пополнение баланса: https://aeza.net/?ref=377137 2. На крайний случай 4vps: 4VPS.su (2Гб\с сервера) 1. Теперь ставим docker. bash <(curl -sSL https://get.docker.com) 2. Клонируем репозиторий и падаем в него git clone https://github.com/MHSanaei/3x-ui.git cd 3x-ui 3. Заходим в docker-compose.yml и правим параметры: --- version: "3.9" services: 3x-ui: image: ghcr.io/mhsanaei/3x-ui:latest container_name: 3x-ui hostname: domain.org volumes: - $PWD/db/:/etc/x-ui/ - /etc/letsencrypt/live/domain.org/fullchain.pem:/root/cert/fullchain.pem - /etc/letsencrypt/live/domain.org/privkey.pem:/root/cert/privkey.pem environment: XRAY_VMESS_AEAD_FORCED: "false" tty: true network_mode: host restart: unless-stopped Нам нужно поменять hostname на ваш домен, и указать путь туда, где certbot будет генерировать ключи (строка - $PWD/cert/:/etc/letsencrypt/live/proxy.domain.ru/) Сохраняем и закрываем файл. (ctrl+o, enter, ctrl+x) 4. Выпускаем сертификаты к уже привязанному домену с помощью certbot. (Для управления домена и поддоменами рекомендую использовать Cloudflare, это очень удобно, быстро и комфортно) apt-get install certbot -y certbot certonly --standalone --agree-tos --register-unsafely-without-email -d proxy.domain.ru certbot renew --dry-run Получаем сообщение: Значит все хорошо. Если вы получили ошибку, проверьте домен или возможно привязка к IP не выполнилась ещё, подождите немного. 5. Назначаем разрешение на файлы в папке ключей: chmod 666 -Rf /etc/letsencrypt/live/proxy.domain.ru 6. Запускаем контейнер. docker compose up -d 7. Заходим в панель: http://proxy.domain.ru:2053/panel 8. Логин и пароль admin / admin Добро пожаловать в панель. 9. Сразу идем в настройки панели =- настройки безопасности и меняем пароль 10. Заходим в первую вкладку и пишем наши данные по домену и адрес к нашим ключам: Папка должна соответствовать тому что у нас в docker-compose.yml UPD: 09.08.23. Совладать с файлам ключей не получилось. Нужно скопировать 2 ключа из пути выше, в папку /root/3x-ui/cert/ командой: 10.2. Заходим в раздел подписок, включаем эту опцию и прописываем те же параметры домена и ключей (либо можете использовать отличный от основного домен) 11. Вернемся в нашу консоль. Теперь нужно установить WARP Proxy: Вся информация есть на оф сайте: Announcing WARP for Linux and Proxy Mode (cloudflare.com) Дополнительно читаем про добавление ключей: Cloudflare Package Repository (cloudflareclient.com) А теперь пример реальный, на Ubuntu: Добавляем GPG key: curl https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg Добавляем репозиторий: echo "deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list Обновляемся: sudo apt update Ставим sudo apt install cloudflare-warp Теперь настраиваем. 1. Всю помощь получаем тут: warp-cli --help 2. Нужно зарегистрироваться: warp-cli register 3. Теперь выставить режим работы (possible values: warp, doh, warp+doh, dot, warp+dot, proxy), я выбираю proxy: warp-cli set-mode proxy 4. Устанавливаем порт для WARP proxy warp-cli set-proxy-port 40000 5. Коннектимся warp-cli connect Готово. Идём обратно в наш веб-интерфейс 3x-ui Здесь нам нужно зайти на вкладку настройки xray и развернув WARP proxy воткнуть все тумблеры Не забывайте, что каждое изменение в панели сперва делается кнопкой Сохранить, а затем необходимо Перезагрузить панель. Создание подключений Можно долго писать про настройки. Я покажу основные. ShadowSocks классический Trojan vless В принципе, если у вас работает одно какое то подключение, вы можете использовать только его. Остальные вряд ли будут чем то отличаться. Хорошей особенностью сборки 3x-ui, в отличии от Marzban является встроенного Ограничение по IP - это то количество одновременных подключений, которые может быть доступно на 1 коннект от 1 пользователя. Готово! Пользуйтесь! Другие мои параметры: PS: Настройки телеграм бота очень просты. И имеют все необходимые комментарии. Вот что выдает бот: Для клиента с прописанным Telegram ID информации минимум, не выдает даже сами конфиги. UPD: Для работы IP Limit нужно установить на сервер Fail2ban
    2 балла
  44. Вступление, или очередная проблема из неоткуда Система бэкапов Proxmox (PBS) является достаточно мощным и удобным инструментом для создания резервных копий виртуальных машин Proxmox, но она имеет одну проблему, которая мешала мне для организации задуманной мной системы домашнего сервера. PBS не может делать синхронизацию с удаленным каталогом по протоколу SAMBA. Синхронизация бэкапов в PBS доступна только между несколькими экземплярами самого сервера бэкапов, то есть для переноса бэкапов на другое устройство там должен быть установлен Debian с пакетом PBS. Альтернативой может являться создание хранилища данных в удаленной папке, созданной по протоколу NFS. В моем случае стояла задача восстановить исходную схему резервирования бэкапов, которая была реализована до перехода на создание бэкапы с помощью PBS, когда резервные копии также переносились на мой основной компьютер, откуда отправлялись на внешний диск. Так как основной компьютер работает под управлением Windows, возникли неожиданные сложности. NFS не поддерживается не серверными версиями Windows, остаются только сторонние варианты реализации. Но и в такой ситуации есть ряд подводных камней, фактически NFS будет являться просто сетевой папкой, куда складываются бэкапы, следовательно для резервного копирования в момент выполнения задачи компьютер с данной папкой должен быть включен. В результате моих поисков было найдено два основных варианта для решения поставленной задачи: 1. Запустить виртуальную машину с PBS 2. Запустить PBS в Docker-контейнере В дальнейшем я выбрал вариант запуска через Docker-контейнер, так как он для меня оказался более удобным и менее прожорливым по ресурсам (вся система Docker с запущенным PBS потребляет до 700 Мб ОЗУ). Также мне было откровенно лень разбираться с пробросом портов из виртуальной машины и еще пачкой ненужных задач. Для виртуальных машин Proxmox - ван лав. Так же данный способ подойдет для запуска на NAS. Установка и запуск PBS в докере Данный способ является не рекомендуемым и явно не поддерживаемым, для большей стабильности рекомендую использовать вариант запуска через виртуальную машину. Настройка синхронизации между двумя экземплярами PBS будет описана в следующем разделе. Для установки PBS на Debian в виртуалке приведен на оффициально сайте: https://pbs.proxmox.com/docs/installation.html#install-proxmox-backup-server-on-debian Для запуска докер в Windows необходимо установить docker desktop с официального сайта https://www.docker.com/products/docker-desktop/ для полноценной работы потребуется регистрация на докер хаб. После установки и первого запуска попадаем в стартовое окно docker desktop которое на самом деле очень бесполезное, в дальнейшем он нам понадобиться только для администрирования контейнера. В принципе этой установки должно быть достаточно, но лучше так же установить WSL если не был установлен ранее. Идем в Microsoft Store (да на удивление он все еще живой, сам в шоке) и находим там Windows Subsystem for Linux. Данная подсистема предназначена для запуска Linux системы прямо в Windows без использования стороннего софта для виртуализации, а так же его использует докер. Переходим в настройки докера и включаем запуск при старте Windows и включаем WSL2/ В принципе данных настроек должно быть достаточно для запуска необходимого нам контейнера. Но дополнительно настроим что бы докер не съедал наши ресурсы до бесконечности, по умолчанию потребление. Идем в основную папку пользователя: C:\Users\UserName И создаем там файлик со следующим именем: .wslconfig Открываем файл через любой текстовый редактор (рекомендую Notepad ++) И вставляем следующий конфиг: [wsl2] memory=1GB processors=1 Данная настройка вступит в силу после перезагрузки компьютера. Таким образом мы ограничиваем работу докера что бы он мог использовать не более 1Гб озу и не более одного виртуального ядра, чего для наших задач достаточно. Отдельно отмечу что минимальный объем может быть 1Гб так как происходит округление до целых значений. Данное ограничение действует на весь WSl в целом. Подробней о данном конфиг файле можно почитать тут: https://learn.microsoft.com/ru-ru/windows/wsl/wsl-config На этом предварительный этап закончен, приступаем непосредственно к запуску PBS. Сам проект задумывался для того что бы запускать PBS на NAS с поддержкой докера что в принципе является не плохим решением. Подробней с ним можете ознакомиться по ссылке: https://github.com/ayufan/pve-backup-server-dockerfiles Приступаем к запуску, для этого создадим папку в которой будет храниться конфиги и все данные нашего PBS (при желании можно развести их по разным папкам путем модификации docker compose). Нам потребуется вот такая структура папок: Создаем в корнейвой папке новый файл с именем docker-compose.yml и вставляем следующий конфиг: version: '2.1' services: pbs: image: ayufan/proxmox-backup-server:latest container_name: pbs hostname: hostName mem_limit: 128Mb environment: - TZ=Europe/Moscow volumes: - D:\Proxmox Backup Server\etc:/etc/proxmox-backup - D:\Proxmox Backup Server\logs:/var/log/proxmox-backup - D:\Proxmox Backup Server\lib:/var/lib/proxmox-backup - D:\Proxmox Backup Server\backups:/backups ports: - 8007:8007 tmpfs: - /run restart: unless-stopped stop_signal: SIGHUP Изменяем параметры volumes на свои а так же устанавливаем hostname для адекватного отображения имени хоста в интерфейсе PBS. Сохраняем файл и открываем консоль windows. Вводим стандартную команду запуска docker compose docker compose up -d В моем случае произошёл перезапуск контейнера, при первом запуске будет вывод о загрузке и сборке image. Возвращаемся в окно docker desktop и видим появившийся новый контейнер и потребление выделенных ресурсов. Фактическое потребление (зарезервировано) для системы в моем случае: На это этап запуска PBS в докере закончен, приступаем к непосредственной настройке синхронизации. Настройка нового экземпляра PBS Заходим в веб морду нашего нового экземпляра PBS по адресу: https://<Ip-pc>:8007/ По умолчанию доступен один пользователь: admin с паролем pbspbs Заходим в систему и приступаем к настройке. Нам необходимо создать хранилище данных, для этого нажимаем «Добавить хранилище данных». Путь к хранилищу указываем на папку, которую прокинули из компьютера для хранения бэкапов. Тут же настроим задание проверки резервных копий на целостность. Следующим шагом необходимо настроить права для работы с полученным хранилищем. Идем в радел управление доступом и создаем нового пользователя: Нам необходимо создать нового пользователя и сменить пароль для существующего. Так же выдаем права пользователю: В моем примере хранилище данных называется deniom-pc. В хранилище данных должно быть так: Настройка синхронизации между экземплярами PBS Основные настройки будут происходить на вторичном PBS который будет вытягивать бэкапы из PBS на хосте proxmox. Данные настройки выполняем под пользователем admin так как могут быть проблемы с правами. Подключаться мы так же будет через root пользователя к основному серверу. В идеале необходимо разграничивать права и использовать ограниченного пользователя. Переходим в удаленные хранилища, и добавляем новое подключение Заполняем данные для авторизации на основном сервере PBS. Отдельно надо отметить поле отпечаток, он нужен для установки ssl соединения между нашими системами. Что бы его получить возвращаемся в интерфейс PBS основного сервера PBSи на вкладке панелью мониторинга нажимаем показать отпечаток. Переходим в хранилище данных и настроим синхронизацию В данной настройке будет выполняться попытка синхронизации каждых два часа. Заключение На этом настройка фактически завершена, на самом деле мы имеем практически полноценный экземпляр PBS. Так же мы можем подключить данный экземпляр PBS напрямую к proxmox и делать бэкапы прямо в него, данное решение будет удобно для установки на NAS. Спасибо за внимание.
    2 балла
  45. Вариантов с нодами много. 1. Основная задача - сделать доступными несколько стран, несколько серверов, чтобы пользователь мог сам выбирать. 2. Можно сделать автобаланс через А записи. Но нужно поизвращаться. 3. Можно сделать отдельные inbounds для разных нод. И подключать каждому пользователю индивидуально.
    2 балла
  46. Обновляем x-ray Core 1. Грузим x-ray core apt install wget unzip 2. Создайте папку для Xray и перейдите в нее. mkdir -p /var/lib/marzban/xray-core && cd /var/lib/marzban/xray-core 3. Скачайте файл Xray с помощью wget. wget https://github.com/XTLS/Xray-core/releases/download/v1.8.4/Xray-linux-64.zip 4. Извлеките файл из архива и удалите сам архив. unzip Xray-linux-64.zip && rm Xray-linux-64.zip 5. Изменение ядра Marzban 6. Установите значение переменной XRAY_EXECUTABLE_PATH в файле .env XRAY_EXECUTABLE_PATH = "/var/lib/marzban/xray-core/xray" 7. Перезапустите Marzban. marzban restart -n для обновления ядра на ноде, проще сделать через обновление контейнера целиком.
    2 балла
  47. Приветствую! Настройки роутинга для клиента Streisand на iOS: В условиях выбрать IP и вписать geoip:ru, outbound tag - direct, domain strategy - AsIs проверять через Яндекс.Интернетометр, IP адрес должен совпадать с адресом от провайдера
    2 балла
  48. Вроде как в конфиге для домена nano /etc/letsencrypt/renewal/exapmle.com.conf можно внизу дописать параметр: renew_hook = marzban restart Certbot создает правило перевыпускать сертификат при первом получении, а этот параметр перезагрузит marzban после перевыпуска. Не тестил еще, т.к. три месяца не прошло) Можно еще в cron задачу поставить на выполнение перевыпуска сертификата и перезагрузки marzban: 30 03 01 */3 * certbot renew --post-hook "marzban restart"
    2 балла
  49. Починил работу IP Limit (принцип такой же - бан IP адреса) Прошу обратить внимание что я работаю с предшественником docker - docker compose 1. Находясь в директории 3x-ui (где находится файл docker-compose.yml) останавливаем контейнер 3x-ui по команде docker-compose.yml docker-compose down 2. Правим файл docker-compose.yml пример https://raw.githubusercontent.com/RangerRU/3x-ui/main/docker-compose.ym а именно добавление строки - fail2ban:/etc/fail2ban/ плюс volumes: fail2ban: {} и - "./logs/:/var/log/" для чтения логов а также обязательно cap_add: - NET_ADMIN 3. Запускаем контейнер по команде docker-compose up -d 4. Ждем пока он полностью поднимется и останавливаем снова docker-compose down 5. Забираем файл с гихаба и делаем его исполняемым wget https://github.com/RangerRU/3x-ui/raw/main/fix_ip_limit_3x-ui.sh chmod +x fix_ip_limit_3x-ui.sh 6. Запускаем файл ./fix_ip_limit_3x-ui.sh Скрипт сообщит что все сделано: Created Ip Limit jail files with a bantime of 5 minutes. 7. Запускаем контейнер docker-compose up -d 8. Проверяем - идем в директорию log и открываем файл fail2ban.log, должен быть примерно такой лог: 2023-08-18 02:51:43,503 fail2ban.server [9]: INFO -------------------------------------------------- 2023-08-18 02:51:43,504 fail2ban.server [9]: INFO Starting Fail2ban v1.0.2 2023-08-18 02:51:43,504 fail2ban.server [9]: INFO Daemon started 2023-08-18 02:51:43,513 fail2ban.observer [9]: INFO Observer start... 2023-08-18 02:51:43,584 fail2ban.database [9]: INFO Connected to fail2ban persistent database '/var/lib/fail2ban/fail2ban.sqlite3' 2023-08-18 02:51:43,587 fail2ban.database [9]: WARNING New database created. Version '4' 2023-08-18 02:51:43,588 fail2ban.jail [9]: INFO Creating new jail '3x-ipl' 2023-08-18 02:51:43,598 fail2ban.jail [9]: INFO Jail '3x-ipl' uses poller {} 2023-08-18 02:51:43,599 fail2ban.jail [9]: INFO Initiated 'polling' backend 2023-08-18 02:51:43,600 fail2ban.datedetector [9]: INFO date pattern `'^%Y/%m/%d %H:%M:%S'`: `^Year/Month/Day 24hour:Minute:Second` 2023-08-18 02:51:43,600 fail2ban.filter [9]: INFO maxRetry: 2 2023-08-18 02:51:43,600 fail2ban.filter [9]: INFO findtime: 60 2023-08-18 02:51:43,601 fail2ban.actions [9]: INFO banTime: 300 2023-08-18 02:51:43,601 fail2ban.filter [9]: INFO encoding: UTF-8 2023-08-18 02:51:43,602 fail2ban.filter [9]: INFO Added logfile: '/var/log/3xipl.log' (pos = 0, hash = 072135cea96a3644a4f82cc5fdc27c5bf1b9f6cc) 2023-08-18 02:51:43,604 fail2ban.jail [9]: INFO Jail '3x-ipl' started Всё теперь можете проверять на клиентах Пи необходимости в файле на сервере /var/lib/docker/volumes/3x-ui_fail2ban/_data/jail.d/3x-ipl.conf можете поменять переменные maxretry, findtime и bantime а также enabled - можно временно отключить работу IP Limit для применения настроек необходимо остановить и заново запустить контейнер
    2 балла
  50. Искусственный интеллект (ИИ) становится все более широко используемым в различных сферах жизни. Однако, с ростом использования ИИ возникает все больше вопросов о его этическом использовании и управлении. Важной особенностью ИИ является то, что он может быть обучен на большом количестве данных, которые могут содержать скрытые предубеждения. Например, алгоритмы машинного обучения могут быть обучены на данных, которые отражают предвзятость по расовым или гендерным признакам. Это может привести к несправедливому принятию решений, которые могут нанести вред людям. Чтобы справиться с этими проблемами, индустрия ИИ начала разрабатывать строгие этические стандарты, которые регулируют использование ИИ. Например, Комиссия по этике в области ИИ (AI Ethics Commission) была создана в 2016 году для того, чтобы разработать этические принципы, которые могут быть использованы в различных областях, связанных с ИИ. Одним из основных принципов этики ИИ является принцип прозрачности. Это означает, что алгоритмы ИИ должны быть понятными и объяснимыми, чтобы пользователи могли понимать, как принимаются решения. Кроме того, принцип прозрачности требует, чтобы данные, используемые в обучении ИИ, были доступны и проверяемы. Другой важный принцип этики ИИ - это принцип ответственности. Он требует, чтобы создатели ИИ несли ответственность за действия своих систем. Это означает, что они должны предусмотреть меры контроля и ответственности для того, чтобы предотвратить негативные последствия. Кроме того, этические стандарты в области ИИ также включают принципы конфиденциальности и недискриминации. Они требуют, чтобы данные, используемые в обучении ИИ, были защищены от несанкционированного доступа, и чтобы алгоритмы ИИ не принимали решений на основе расовой или гендерной принадлежности. Управление ИИ также включает в себя разработку строгих правил для использования ИИ. Эти правила должны определять, кто может использовать ИИ, какие данные могут быть использованы, и как ИИ может быть использован в рамках различных сфер. В целом, этика и управление в области ИИ являются важными вопросами, которые должны быть учтены в процессе разработки и использования ИИ. Строгие этические стандарты помогут обеспечить справедливое и безопасное использование ИИ, что будет способствовать его дальнейшему развитию и распространению.
    2 балла
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...

Важная информация

Вы принимаете наши Условия использования, Политика конфиденциальности, Правила. А также использование Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.

Яндекс.Метрика