محافظت از وب سایت با Cloudflare بدون در معرض اینترنت قرار دادن پورت ها

مقدمه

سلام، و به این آموزش در مورد نحوه محافظت از وب سایت با Cloudflare خوش آمدید. نحوه میزبانی وب سایت بر روی سرور، نحوه محافظت از آن با حفاظت عالی و رایگان L7 Cloudflare در حین حفظ امنیت، و نحوه قفل کردن پورت های سرور به طوری که مهاجم نتواند Cloudflare را دور بزند و مستقیماً به سرور حمله کند، توضیح داده شده است.

درباره Cloudflare

قبل از شروع، یک نکته کوچک در مورد Cloudflare و ویژگی های آن:

  • Cloudflare یکی از بزرگترین شبکه های جهان است. امروزه، کسب‌وکارها، سازمان‌های غیرانتفاعی، وبلاگ‌نویسان و هرکسی که در اینترنت حضور دارد به وب‌سایت‌ها و برنامه‌های سریع‌تر و ایمن‌تر می‌بالد. آنها در برابر حملات DDoS محافظت می شوند و سرورهای اصلی آنها در برابر مهاجمان محافظت می شوند. Cloudflare همچنین مجموعه ای از خدمات امنیتی را ارائه می دهد که از وب سایت در برابر حملاتی مانند تزریق SQL، XSS و حملات DDoS محافظت می کند.
  • Cloudflare به درخواست‌های اینترنتی برای میلیون‌ها وب‌سایت نیرو می‌دهد و به‌طور متوسط در هر ثانیه 55 میلیون درخواست HTTP را ارائه می‌کند.
  • Cloudflare پیشرفت های زیادی در امنیت و عملکرد اینترنت ایجاد کرده است. این یک ابزار عالی برای صاحبان وب سایت برای محافظت از وب سایت های خود در برابر حملات و بهبود عملکرد وب سایت های خود است. بهترین بخش این است که استفاده از آن رایگان است.
  • همانطور که ترافیک شما بالاتر می رود، همیشه می توانید برای ویژگی های بیشتر و عملکرد بهتر به یک طرح پولی ارتقا دهید.
پیش نیازها
  • یک نام دامنه
  • یک حساب Cloudflare با دامنه اضافه شده
  • سروری که Debian 12 را اجرا می کند
  • وب سایتی برای محافظت

مرحله 1 – به روز رسانی سرور و نصب NGINX

اول از همه، ما باید سرور را به روز کنیم، سپس باید مخزن NGINX را اضافه کنیم و NGINX را نصب کنیم.

apt update && apt upgrade -y
apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring -y
# Add the signing key for the nginx packages
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | tee /usr/share/keyrings/nginx-archive-keyring.gpg > /dev/null
# Add the NGINX repository
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list
# Pin down the NGINX repository to avoid conflicts with the default Debian repository
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | tee /etc/apt/preferences.d/99nginx
apt update
# Install NGINX
apt install nginx -y

مرحله 2 – راه اندازی و پیکربندی وب سایت

پیکربندی NGINX برای سرویس دهی به وب سایت خارج از محدوده این آموزش است، اما ما از تنظیمات پیش فرض برای این آموزش استفاده خواهیم کرد و سرور را با Cloudflare ایمن خواهیم کرد.

شما باید یک گواهی مبدا از Cloudflare ایجاد کنید و آن را در فهرست /etc/nginx/ssl، یعنی cf.crt و cf.key قرار دهید.

با انتخاب دامنه خود و رفتن به SSL/TLS » Origin Server » Create Certificate می توانید گواهی مبدا را در داشبورد Cloudflare ایجاد کنید.


شما می توانید پیکربندی زیر (به عنوان مثال /etc/nginx/sites-available/default) را با نیازهای وب سایت خود تطبیق دهید.

server {
listen 443 ssl;
server_name <example.com>;
access_log /var/log/nginx/host.access.log main;
ssl_certificate /etc/nginx/ssl/cf.crt;
ssl_certificate_key /etc/nginx/ssl/cf.key;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

مرحله 2.1 – بارگیری مجدد NGINX

در این مرحله، NGINX را بارگذاری مجدد می کنیم تا تغییرات اعمال شود و دامنه به سرور اشاره شود.

systemctl reload nginx

پس از بارگیری مجدد NGINX، می توانید با افزودن یک رکورد A در داشبورد Cloudflare، دامنه را به سمت سرور هدایت کنید. مطمئن شوید که وضعیت پروکسی روی “Proxied” تنظیم شده است تا حفاظت L7 Cloudflare را فعال کند، در غیر این صورت سرور در معرض اینترنت قرار خواهد گرفت.

مرحله 3 – 60٪ از راه به آنجا

اکنون 60 درصد راه را طی کرده ایم. اکنون وب سایت توسط محافظ L7 Cloudflare محافظت می شود، اما سرور همچنان در معرض اینترنت است و مهاجم می تواند Cloudflare را دور بزند و مستقیماً به سرور حمله کند.

در مراحل بعدی، پورت‌های سرور را قفل می‌کنیم و فقط به محدوده‌های IP Cloudflare اجازه دسترسی به سرور را می‌دهیم.

ما می‌توانیم از iptables برای رسیدن به این هدف استفاده کنیم، اما یک قدم جلوتر رفته و از فایروال ابری Hetzner برای قفل کردن پورت‌های سرور استفاده می‌کنیم.

مرحله 4 – راه اندازی Hetzner Cloud Firewall

در این مرحله، فایروال ابری Hetzner را برای قفل کردن پورت‌های سرور راه‌اندازی می‌کنیم و فقط به محدوده‌های IP Cloudflare اجازه دسترسی به سرور را می‌دهد.

شما می توانید این کار را از طریق کنسول ابری Hetzner، با انتخاب پروژه خود و کلیک بر روی تب “Firewalls” انجام دهید. با این حال، محدوده IP Cloudflare پویا است و می تواند در طول زمان تغییر کند. به همین دلیل، ما از Hetzner Cloud API برای خودکارسازی این فرآیند استفاده خواهیم کرد.

ابتدا باید چند کار را در کنسول ابری Hetzner انجام دهید:

  • با رفتن به «Security» » «API tokens» و کلیک کردن بر روی «Generate API token» یک نشانه API ایجاد کنید. مطمئن شوید که به آن مجوز خواندن و نوشتن داده اید.
  • شناسه فایروال را یادداشت کنید. وقتی در صفحه فایروال هستید می توانید آن را در URL پیدا کنید:
  • مطمئن شوید که فایروال روی سرور اعمال می شود، در غیر این صورت فایده ای ندارد.

به سرور خود برگردید، اسکریپت زیر را در یک فایل ذخیره کنید، به عنوان مثال. firewall.py. این اسکریپت محدوده IP Cloudflare را در فایروال ابری Hetzner در لیست سفید قرار می دهد.

توجه: اسکریپت زیر تمام قوانین موجود فایروالی را که مشخص کرده‌اید بازنویسی می‌کند، بنابراین مطمئن شوید که فایروال شامل قوانین مهم دیگری نباشد. اگر این کار را کرد، ممکن است بخواهید آنها را به اسکریپت اضافه کنید، مانند باز کردن پورت SSH.

import requests
import json
HETZNER_API_TOKEN = "YOUR_HETZNER_API_TOKEN"
HETZNER_FIREWALL_ID = "YOUR_HETZNER_FIREWALL_ID"
def get_cloudflare_ips():
response = requests.get('https://www.cloudflare.com/ips-v4')
if response.status_code == 200:
return response.text.strip().split('\n')
else:
print("Failed to retrieve Cloudflare IP ranges")
return []
def whitelist_ips_in_hetzner(ip_ranges):
headers = {
'Authorization': f'Bearer {HETZNER_API_TOKEN}',
'Content-Type': 'application/json',
}
payload = {
"rules": [
{
"direction": "in",
"source_ips": ip_ranges,
"port": "443",
"protocol": "tcp",
"description": "Accept port 443"
},
#{
# "direction": "in",
# "source_ips": ["0.0.0.0/0","::/0"],
# "port": "22",
# "protocol": "tcp",
# "description": "Accept SSH connections"
#}
]
}
response = requests.post(f'https://api.hetzner.cloud/v1/firewalls/{HETZNER_FIREWALL_ID}/actions/set_rules', headers=headers, data=json.dumps(payload))
if 200 <= response.status_code < 203:
print("IPs whitelisted successfully in Hetzner Firewall")
else:
print("Failed to whitelist IPs in Hetzner Firewall", response.json())
if __name__ == "__main__":
cloudflare_ips = get_cloudflare_ips()
whitelist_ips_in_hetzner(cloudflare_ips)

مرحله 5 – اجرای و خودکار کردن اسکریپت

  • پایتون را نصب کنید

برای اجرای اسکریپت باید پایتون را روی سرور نصب کنید. اگر هنوز پایتون را نصب نکرده‌اید، می‌توانید آن را با اجرای:

apt install python3 -y
  • اسکریپت را اجرا کنید

هنگامی که پایتون را نصب کردید، می توانید اسکریپت را با:

python3 firewall.py

شما باید منتظر خروجی ای مانند “IP ها با موفقیت در فایروال Hetzner لیست سفید شدند”. در غیر این صورت می توانید پیام خطا را بررسی کرده و عیب یابی کنید.

  • خودکار کردن

هنگامی که اسکریپت با موفقیت اجرا شد، می توانید آن را با افزودن آن به یک کار cron خودکار کنید، به طوری که اسکریپت هر 24 ساعت اجرا می شود و فایروال ابری Hetzner با محدوده IP Cloudflare به روز می شود.

با اجرای crontab -e و افزودن خط زیر به فایل می توانید یک کار cron اضافه کنید.

* 0 * * * /usr/bin/python3 /path/to/firewall.py

مرحله 6 – سفت کردن محافظ در سمت Cloudflare

به داشبورد Cloudflare خود وارد شوید.

  • به برگه “SSL/TLS” بروید

برای اطمینان از اینکه وب سایت همیشه از طریق HTTPS ارائه می شود و ارتباط بین Cloudflare و سرور رمزگذاری شده و ایمن است:

  • فعال کردن «همیشه از HTTPS استفاده کنید» – «بازنویسی خودکار HTTPS» را فعال کنید – حالت رمزگذاری SSL/TLS را روی «کامل (سخت)» تنظیم کنید.

به تب “Security” بروید

برای اطمینان از اینکه وب سایت در برابر ربات ها، لینک هات و سایر حملات محافظت می شود:

  • فعال کردن “Browser Integrity Check” – فعال کردن “Hotlink Protection” – فعال کردن “Bot Fight Mode”

توجه داشته باشید که این یک راه حل مناسب برای همه نیست و همیشه باید مراقب داشبورد Cloudflare باشید و تنظیمات را مطابق با نیاز وب سایت خود تغییر دهید.

  • همچنین می‌توانید «Rate Limiting» را برای محافظت بیشتر از وب‌سایت در برابر حملات فعال کنید، و خوشبختانه، Cloudflare یک ردیف رایگان برای این ویژگی ارائه می‌کند (شامل یک قانون).
  • همچنین می توانید از ویژگی کش Cloudflare برای کش کردن محتوای ثابت وب سایت و کاهش بار سرور استفاده کنید.

و یک بار دیگر، باید ترافیک را زیر نظر داشته باشید و تنظیمات را مطابق با نیازهای وب سایت خود تغییر دهید.

این اسکریپت نیز وجود دارد: https://github.com/guided-hacking/cfautouam

شما می توانید از این اسکریپت برای روشن کردن خودکار Cloudflare “در حالت حمله” زمانی که سرور از CPU یا RAM بیش از حد استفاده می کند استفاده کنید. این می تواند برای محافظت از سرور در برابر حملات مفید باشد، اما این موضوع برای این آموزش خارج از محدوده است.

نتیجه

در این آموزش، شما یاد گرفتید که چگونه با حفاظت L7 Cloudflare از یک وب سایت محافظت کنید، بدون اینکه پورت ها را در معرض اینترنت قرار دهید، سرور و وب سایت را در برابر حملات ایمن کنید. شما همچنین فرآیند به روز رسانی فایروال ابری Hetzner را با محدوده IP Cloudflare به طور خودکار انجام دادید و محافظت در سمت Cloudflare را سخت تر کردید.

[تعداد: 0   میانگین: 0/5]
دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

شاید دوست داشته باشید