این حالت نمایش چند صفحه ای قابل پرینت این قسمت می‌باشد. برای پرینت کلیک کنید..

بازگشت به حالت نمایش عادی این قسمت.

نکات امنیتی

برای اینکه سرور شما توسط فیلترچی و یا ربات‌های آنها تشخیص داده نشود چه اقداماتی باید انجام داد؟

در این بخش اطلاعات در بخش های متفاوت زیر ارائه شده است:

1 - اتصال به پنل

اتصال امن به پنل از طریق HTTPS

در نظر داشته باشید ارتباط شما با پنل در صورت عدم استفاده از گواهی دیجیتال (HTTPS)، توسط فیلترچی و حتی MITM ها قابل رویت است. بعد از نصب سرور و قبل از تنظیم و ارسال هرگونه اطلاعات حساس به سرور، حتما از اینکه ارتباط شما با سرور امن است مطمئن شوید.

نمونه راه های امن سازی

  1. استفاده از گواهی دیجیتال در تنظیمات سرور
  2. استفاده از نرم افزار های پراکسی مانند nginx
  3. استفاده از پراکسی های ابری مانند کلادفلر
  4. استفاده از ssh tunnel برای باز کردن پنل

2 - فایروال

تنظیم فایروال

چرا فایروال سیستم مهم است

ربات ها برای اینکه سرور ارائه دهنده خدمات v2ray را شناسایی کنند، روشهای متعددی را استفاده میکنند. یکی از این روش ها شبیه سازی اتصال با پروتکل های v2ray و ارزیابی جواب آنهاست. در اکثر مواقع این عملیات توسط رباتهایی با آدرس IP های شرکت ارتباطات زیرساخت انجام میشود. به همین دلیل بهتر است این آدرس ها شناسایی و بلاک شوند.

لیست آدرس ها را میتوانید از منابع زیر پیدا کنید:

  1. bgp.he.net report

  2. ripe ncc api query

در مواردی این موضوع توسط رباتهایی از سایر نقاط هم دیده شده که در واقع این عملیات برای پیدا کردن آنها مناسب نیست.

مواردی که حتما باید در نظر داشته باشید

۱. بین سرور محلی و خارجی

وقتی دو سرور محلی و خارجی دارید، و از تانلینگ بین این دو سرور استفاده میکنید، برای پورت(های) سرویس (های) سرور خارج، امکان ارتباط را فقط برای سرور محلی فراهم کنید.

به عنوان مثال اگر سرور محلی شما با آدرس a.b.c.d در دسترس است، و با پورت های ۴۴۳و ۸۴۴۳ در حال سرویس دهی است، دستورات زیر را بکار ببرید:

iptables -A INPUT ! -s a.b.c.d -p tcp -m tcp --dport 443 -j DROP
iptables -A INPUT ! -s a.b.c.d -p tcp -m tcp --dport 8443 -j DROP

اگر از netfilter-persistent استفاده میکنید، موراد را به شکل زیر را در فایل مربوطه ذخیره کنید:

File: /etc/iptables/rules.v4

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT ! -s a.b.c.d -p tcp -m tcp --dport 443 -j DROP
-A INPUT ! -s a.b.c.d -p tcp -m tcp --dport 8443 -j DROP
COMMIT

و سپس سرویس مربوطه را ریستارت کنید:

systemctl restart netfilter-persistent.service

۲. استفاده از تانل reverse

اگر سرور داخلی شما توسط ارتباط معکوس با سرور خارج تانل شده است (reverse) بهتر است هیچ سرویسی روی inbound در سرور خارج تعریف نشود و در صورت لزوم به داشتن آن، به سرور محلی محدود شود.

۳. ارتباط مستقیم از یک پروایدر

اگر همه استفاده کننده های سرور شما از یک منطقه جغرافیایی و فقط از طریق یک فراهم کننده خدمات اینترنتی سرویس میگیرند، بهتر است به کل محدوده IP های آن شرکت محدود شود.

۴. محدود کردن ارتباط سرور با ایران

اگر کانفیگ را به صورت رایگان پخش می‌کنید، می‌توانید فایروال را به نحوی تنظیم کنید که برای پورت مورد استفاده در کانفیگ‌ها، تنها امکان اتصال از IP کشور مورد نظر شما (مثلا ایران) وجود داشته باشد. چون تعریف لیست IP یک کشور نیاز به سخت افزار قوی دارد، تعریف چنین محدودیتی در سرور راحت نیست. ولی اگر از سرویس ابری استفاده می‌کنید، سرویس فایروال این سرویس‌های ابری، ایجاد قوانین فایروال بر اساس کشور را ارائه می‌دهد. همچنین برای افزایش امنیت پنل و پیدا نشدن آن توسط سیستم فیلترینگ، می‌توانید برای پورت پنل تنظیمات برعکسی را انجام دهید که پنل از داخل کشور مبدا (مثلا ایران) باز نشود و خودتان برای اتصال به پنل، از VPN استفاده کنید.

3 - فالبک

استفاده از فالبک

نقل از راهنمای XTLS

فالبک یکی از قدرتمندترین ویژگی های Xray است که می تواند به طور موثر از کاوش فعال (Active Probing) جلوگیری کند و به شما امکان می دهد از یک پورت برای چندین سرویس استفاده کنید. ویژگی ضد کاوش فعال با قدرت بالا، مکانیزم منحصربه‌فرد ارسال جواب در اولین درخواست را دارد. فالبک همچنین می تواند انواع مختلف ترافیک را بر اساس مسیر (path) برای اشتراک بین چند سرویس را روی یک پورت ارائه کند.

کمک های اصلی فالبک

۱. به جای تقسیم ترافیک بین پورت های ناشناخته و متعدد از یک پورت و یا چند پورت شناخته شده استفاده میشود. در این حالت، وقتی ترافیک زیادی به سمت سرور میرسد، از نظر فیلترچی مشکوک به نظر نمیرسد.

۲. هدر های پراکسی به جای معرفی xray ، به صورت نرم افزار های شناخته شده مثل nginx معرفی میشوند تا فیلترچی و ربات‌ها از روی اطلاعات هدر نتوانند ماهیت سرور را تشخیص دهند.

۳. با توجه به خاصیت ضد کاوش فعال (Anti Active Probing) وقتی تقاضاهای متعددی برای تشخیص نوع فعالیت سرور ارسال میشود، فالبک با تشخیص آنها، جوابی شبیه سرور معمولی وب ارسال میکند تا مشکوک به نظر نرسد.

۴. با ترکیب فالبک و نرم افزار های دیگر پراکسی وب مانند nginx و HAproxy میتوان قابلیت های جذاب دیگری اضافه کرد که باعث گمراه شدن تست های دستی میشود. به عنوان مثال با ارسال همه درخواست های ناشناس به nginx میتوان مانند یک وبسایت معمولی و یا سرور api به درخواست جواب داد.

محدودیت ها

۱. فالبک را فقط میتوان روی سرویس های VLESS و Trojan تنظیم کرد. مدل انتقال (transmission) سرویس حتما باید TCP باشد و حتما TLS فعال و گواهی ها به درستی تنظیم شده باشد.

۲. بدون استفاده از نرم افزار های کمکی، برای تعریف سرویس جدید در پشت فالبک، فقط میتوانید از مدل های انتقال H2، HTTP و WebSocket استفاده کنید.

۳. سرویس های پشت فالبک حتما باید بدون TLS باشند.

مدل های ترکیبی استفاده از فالبک

با ترکیب فالبک و نرم افزارهای دیگر میتوانید از خاصیت ها و پروتکل های بیشتری استفاده کنید

فالبک پشت پراکسی

در این حالت جوابگوی اصلی روی پورت سرور، نرم افزار پراکسی است و بر اساس درخواست کاربر به سمت فالبک و یا سرویس های دیگر هدایت میشود. مزیت این حالت استفاده از امکانات بیشتر نرم افزار پراکسی است.

پراکسی پشت فالبک

برای استفاده از خاصیت های ضد تشخیص فعال پرقدرت فالبک این روش میتواند بهترین اثر را داشته باشد. در این حالت جوابگوی اصلی درخواست کاربر، سرویس فالبک است و براساس تنظیمات مشخص شده، ترافیک را به سرویس های دیگر و یا نرم افزار پراکسی هدایت میکند.

4 - زنجیره پراکسی ها

استفاده از چندین سرور به صورت زنجیره پشت سر هم

به صورت عمومی، استفاده از ارتباط مستقیم کاربر با سرور اصلی توصیه نمیشود. این کار باعث امنیت پایین و تشخیص زود هنگام سرور شما توسط فیلترچی و ربات ها میشود.

پرکاربرد ترین پراکسی ها

خود نرم افزار xray به عنوان یک پراکسی قوی با امکانات زیاد برای پنهان شدن از دید فیلترچی استفاده میشود. به دلیل استفاده زیاد از این نرم افزار، فیلترچی به دنبال شناسایی و فیلترکردن ارتبطات با این سرورهاست. برای اینکه سرور اصلی از گزند فیلترچی در امان بماند، بهتر است از ترکیب یک یا چند پراکسی دیگر استفاده کرد.

۱. سرویس‌های ابری

سرویس های ابری امروزه به عنوان یکی از پر کاربرد ترین روشها برای افزایش امنیت، سرعت و راحتی وب سایت ها به کار میرود. شما میتوانید با پنهان کردن سرور خود پشت این سرویس ها به مخفی سازی سرور اصلی کمک کنید.

۲. سرور پراکسی محلی

با استفاده از یک نرم افزار پراکسی نظیر nginx و یا HAproxy روی یک سرور محلی میتوانید ترافیک کاربران را به جای ارسال مستقیم به خارج، به سرور محلی بفرستید. این ترکیب نیاز به داشتن اطلاعات کافی برای تنظیم این نرم افزارها دارد.

۳. استفاده از Port forward

با استفاده از نرم افزار iptables در لینوکس، شما میتوانید از ویژگی port forward استفاده کنید.

برای این کار باید از دیتاسنترهای محلی سرور تهیه کنید و تنظیمات زیر را روی سرور اعمال کنید:

توضیح: آدرس فرضی a.b.c.d برای آدرس IP سرور خارج درنظر گرفته شده. لطفا با آدرس واقعی تعویض شود.

iptables -A PREROUTING -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A PREROUTING -p icmp -j ACCEPT
iptables -A PREROUTING -j DNAT --to-destination a.b.c.d
  1. دستور اول پورت ssh را برای دسترسی به سرور محلی استثنا میکند.
  2. دستور دوم برای عدم ارسال ping به سرور خارج استفاده شده.
  3. دستور سوم بقیه درخواست ها را به آدرس سرور خارج ارسال میکند

۴. استفاده از dokodemo-door

این مدل میتواند تا حدودی بهتر از مدل قبلی کار کند، ولی از نظر نوع کارکرد مشابه هستند.

تفاوت اصلی این روش این است که ترافیک دریافت شده قابلیت گذر از تنظیمات مسیریابی xray را دارد و میتوان با x-ui تمامی عملیات ها را با پنل وب انجام داد.

برای اینکار میبایست روی سرور محلی سرور xray و یا x-ui را نصب کرده و برای هر سرویس یک dokodemo-door با پورت مجزا تعیین کنید. در تنظیم زیر پورت ۸۴۴۳ سرور محلی به پورت ۸۴۴۳ از سرور خارج ارسال میشود:

    {
      "listen": null,
      "port": 8443,
      "protocol": "dokodemo-door",
      "settings": {
        "address": "a.b.c.d",
        "port": 8443,
        "network": "tcp",
        "followRedirect": false,
      }
    }

تنظیم مشابه در x-ui:

۵. زنجیره xray

یکی از قابلیت های فوق العاده نرم افزارهای v2ray/xray امکان اتصال به به سرور دیگر و تشکیل زنجیره پراکسی هاست. به طور کلی، دو بخش مهم این نرم افزار ها به ایجاد زنجیره کمک میکنند:

  1. inbound: وظیفه دریافت درخواست‌ها را دارد
  2. outbound: وظیفه ارسال درخواست‌ها را دارد

در واقع نرم افزار سمت کاربر هم از همین متد برای اتصال استفاده میکند. سپس تمام ترافیک را به خروجی (outbound) ارسال میکند. در سرور هدف، ترافیک ورودی (inbound) دریافت شده و به خروجی (outbound) ارسال میشود. این زنجیره ادامه دارد تا اینکه یک سرور که در دنیای اینترنت آزاد قرار دارد، از طریق پروتکل هایی نظیر freedom در بخش outbound خود بتوانند درخواست کاربر اولیه را به سرور مقصد هدایت کنند.

در این میان، نقش بخش هایی نظیر routing برای مسیردهی به درخواست ها باید در نظر گرفته شود.(خطوط آبی در شکل بالا)

برای استفاده از مزایای این روش، میبایست خروجی سرورها به سرور بعدی متصل شود.

نمونه تنظیم بخش خروجی (outbound)در تنظیمات xray:

  "outbounds": [
    {
      "tag": "next_xray",
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "a.b.c.d",
            "port": 1443,
            "users": [
              {
                "id": "",
                "encryption": "none"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "none"
      }
    },
    {
      "protocol": "freedom",
      "settings": {},
      "tag": "direct"
    },
    {
      "protocol": "blackhole",
      "settings": {},
      "tag": "blocked"
    }
  ],

5 - تانل معکوس

تانل از سرور خارج به سرور داخلی با روش تانل معکوس (reverse)

تانل مستقیم

در روش های تانلیگ، ارتباط کاربر A با سرور داخلی ‌B به صورت معمولی برقرار میشود.

ارتباط سرورها از طریق اتصال بین خروجی سرور B با ورودی سرور C انجام میشود.

تانل معکوس

در روش معکوس اما از طریق دو تنظیم مخصوص، به صورت سرور C به سرور ‌B انجام میشود:

  1. پرتال (portal): دو ورودی را به همدیگر متصل میکند (سرور B)
  2. پل (bridge): دو خروجی را به همدیگر متصل میکند (سرور C)

در این روش ایجاد ارتباط وظیفه سرور خارج (C) است و به دلیل اینکه بیشتر سیستم فیلترینگ فقط ارتباط شبکه محلی به شبکه اینترنت را مختل میکند، این ارتباط برقرار خواهد ماند. بهترین ویژگی این روش این است که حتی سرورهای فیلتر شده هم میتوانند از این خاصیت استفاده کنند.

  • در صورت قطعی دوطرفه شبکه، این ارتباطات نیز تحت تاثیر قرار خواهند گرفت.

نمونه کد برای این مدل ارتباط را میتوانید در ادامه بررسی کنید.

پیکربندی پل

یک پل معمولاً به دو خروجی نیاز دارد، یکی برای اتصال به پورتال و دیگری برای ارسال ترافیک واقعی. یعنی برای تشخیص این دو نوع ترافیک باید از مسیریابی استفاده کنید.

پیکربندی معکوس پروکسی:

{
  "bridges": [
    {
      "tag": "bridge",
      "domain": "test.xray.com"
    }
  ]
}

پیکربندی خروجی:

{
  "tag": "out",
  "protocol": "freedom",
  "settings": {}
},
{
  "protocol": "vless",
  "settings": {
    "vnext": [
      {
        "address": "portal's IP address",
        "port": 1024,
        "users": [
          {
            "id": "5783a3e7-e373-51cd-8642-c83782b807c5"
          }
        ]
      }
    ]
  },
  "tag": "interconn"
}

پیکربندی قوانین مسیریابی:

{
  "rules": [
    {
      "type": "field",
      "inboundTag": ["bridge"],
      "domain": ["full:test.xray.com"],
      "outboundTag": "interconn"
    },
    {
      "type": "field",
      "inboundTag": ["bridge"],
      "outboundTag": "out"
    }
  ]
}

پیکربندی پرتال

در پورتال به دو ورودی نیاز دارد، یکی برای دریافت اتصالات از پل، و دیگری برای دریافت ترافیک واقعی. همچنین باید بین این دو نوع ترافیک با استفاده از مسیریابی تمایز ایجاد کنید.

پیکربندی معکوس پروکسی:

{
  "portals": [
    {
      "tag": "portal",
      "domain": "test.xray.com" // Must be the same as the bridge's configuration
    }
  ]
}

پیکربندی ورودی:

{
  "tag": "external",
  "port": 80,
  "protocol": "dokodemo-door",
  "settings": {
    "address": "127.0.0.1",
    "port": 80,
    "network": "tcp"
  }
},
{
  "port": 1024,
  "tag": "interconn",
  "protocol": "vmess",
  "settings": {
    "clients": [
      {
        "id": "5783a3e7-e373-51cd-8642-c83782b807c5"
      }
    ]
  }
}

پیکربندی قوانین مسیریابی:

{
  "rules": [
    {
      "type": "field",
      "inboundTag": ["external"],
      "outboundTag": "portal"
    },
    {
      "type": "field",
      "inboundTag": ["interconn"],
      "outboundTag": "portal"
    }
  ]
}

بیشتر بخوانید:

  1. https://xtls.github.io/en/config/reverse.html
  2. https://www.v2ray.com/en/configuration/reverse.html
  3. https://guide.v2fly.org/en_US/app/reverse.html

6 - تغییر در روتینگ

استفاده از بلاک کردن برخی وبسایت‌ها برای ارتقای امنیت سرور و کلاینت

بلاک کردن سایت‌ها و IP های ایرانی

یکی از روش‌های شناسایی سرورهای پروکسی و فیلتر کردن آن‌ها، بررسی ترافیک خروجی سرور است. وقتی از یکی سرور خارج از ایران، تعداد زیادی درخواست به سرویس‌های ایرانی که صرفا به درد ایرانی‌ها می‌خورد (مثل اسنپ و دیجی کالا) انجام می‌شود، سیستم فیلترینگ به سرور مورد نظر مشکوک می‌شود و ممکن است آن را فیلتر کند. راه مقابله با این تهدید، بلاک کردن تمام سایت‌ها و IP های ایرانی در سرور است که این قابلیت در پنل دیده شده است. برای بهبود تجربه کاربر، می‌توان به کاربر گفت که این سایت‌ها و IPها را Direct کند که ترافیک این سایت‌ها مستقیم از کلاینت به سمت سرور ایرانی برود و کاربر تفاوتی را متوجه نشود. این کار از این جهت که کل ترافیک کاربر صرفا به سمت یه IP خاص نخواهد بود هم می‌تواند مفید باشد. همچنین اگر زنجیره پراکسی وجود دارد، می‌توان این ترافیک را در سرور داخل کشور Direct کرد. آموزش Direct کردن از طرف کلاینت https://github.com/MasterKia/iran-hosted-domains با انجام تمام این کارها، باز هم امکان شناسایی سرور از طریق دیتای خروجی وجود دارد. منبع: https://twitter.com/imMohammad20000/status/1666761832952995841?s=19

ارتقای امنیت کاربر از طریق بلاک کردن سایت‌های حاوی بدافزار و tracker ها

برای این کار باید از دو قابلیت جداگانه موجود در پنل در بلاک کردن سایت های حاوی بدافزار و بلاک کردن سرویس های تبلیغاتی (شامل trackerها) استفاده کرد. همچنین استفاده از Adguard DNS در سرور می‌تواند کیفیت بلاک کردن tracker ها را ارتقا دهد. توضیحات مروبط به Adguard DNS: https://adguard-dns.io/en/public-dns.html