Caddy Config
تنظیم و پیکربندی کامل Caddy برای مسدودسازی مسیرهای مخرب، مسیردهی هوشمند، و بهینهسازی امنیت و عملکرد وبسرور
Caddy
Reverse Proxy
Security
Rate Limit
1
خط کد
1
خبر
4
تکنولوژی
فعال
وضعیت
مسیر توسعه
پیگیری پیشرفت از روز اول
روز 1
2025/08/13
پیکربندی پیشرفته Caddy و مسدودسازی مسیرهای مخرب
امروز یک پیکربندی کامل و پیشرفته برای Caddy انجام شد که تمرکز اصلی آن روی مدیریت ترافیک، افزایش امنیت، و بهینهسازی عملکرد سرویس بود. در این فرآیند، علاوه بر تنظیمات معمول برای مدیریت مسیرها و هدایت درخواستها از طریق Reverse Proxy، مجموعهای از قوانین امنیتی اختصاصی برای شناسایی و مسدودسازی مسیرهای مخرب پیادهسازی گردید.
برای شناسایی این مسیرها، ابتدا یک لیست از الگوها و مسیرهای پرخطر که معمولاً توسط رباتها، اسکنرها و حملات خودکار استفاده میشوند، جمعآوری شد. این مسیرها شامل آدرسهایی مانند /phpmyadmin/، /wp-admin/، /shell/، /config/ و مسیرهایی با فایلهای اجرایی مشکوک یا درخواستهای غیرعادی بود. سپس این مسیرها در قالب یک بخش اختصاصی در Caddy تعریف شدند تا هرگونه تلاش برای دسترسی به آنها بلافاصله با پاسخ خطای مناسب و بدون پردازش اضافی مسدود شود.
همچنین مکانیزم Rate Limit برای این مسیرها فعال شد تا در صورت تکرار تلاشهای مشکوک از یک IP، دسترسی بهطور کامل قطع گردد. این کار علاوه بر جلوگیری از سوءاستفاده، باعث کاهش بار روی سرور نیز میشود.
در کنار مسدودسازی مسیرهای مشکوک، ساختار پردازش درخواستها بهینه شد تا ابتدا بررسی امنیتی انجام گیرد و سپس درخواست معتبر به سرویس اصلی هدایت شود. این ترتیب اجرای قوانین (Order) باعث شد پردازش درخواستها سریعتر، منظمتر، و ایمنتر انجام شود.
به طور کلی، این پیکربندی جدید باعث افزایش سطح امنیت، کاهش خطر نفوذ، و بهبود چشمگیر پایداری سیستم شده است و در ادامه نیز بهروزرسانی دورهای لیست مسیرهای مخرب انجام خواهد شد تا امنیت همواره در بالاترین سطح باقی بماند.
قطعه کد
{
# ترتیب اجرای هندلرها (برای اینکه بلاکها قبل از پروکسی انجام شوند)
order abort before respond
order rate_limit before respond
order respond before reverse_proxy
}
# ───────────────────── Snippet: بلاک اسکنرها و مسیرهای خطرناک ─────────────────────
(block_exploits) {
# 1) فایلهای مخفی و حساس
@dotfiles {
path /.env
path /.git
path /.git/*
path /.gitignore
path /.htaccess
path /.htpasswd
path /.DS_Store
}
respond @dotfiles 403
# 2) اگر PHP لازم نداری، کل *.php را ببند (در صورت نیاز، این بخش را حذف کن)
@any_php {
expression `{path} =~ '(?i)\\.php($|\\?)'`
}
abort @any_php
# 3) هر مسیر شامل fckeditor/fck/ckeditor/ckfinder
@fckeditor_all {
expression `{path} =~ '(?i).*/(fckeditor|fck|ckeditor|ckfinder)/.*'`
}
abort @fckeditor_all
# 4) الگوی filemanager/browser + (connector|connectors|upload) با پسوندهای حساس
@fileman_conns {
expression `{path} =~ '(?i).*/(filemanager|browser)/.*/(connector|connectors|upload)/.*\\.(php|asp|aspx|jsp|cgi)$'`
}
abort @fileman_conns
# 5) مسیرهای دقیقی که در لاگ دیدهای
@known_exploits {
path /sites/all/modules/fckeditor/fckeditor/editor/filemanager/browser/default/connectors/php/connector.php
path /libraries/fckeditor/editor/filemanager/browser/default/connectors/php/connector.php
path /administrator/fckeditor/editor/filemanager/browser/default/connectors/php/connector.php
path /administrator/FCKeditor/editor/filemanager/browser/default/connectors/php/connector.php
path /plugins/fckeditor/editor/filemanager/browser/default/connectors/php/connector.php
path /scripts/fckeditor/editor/filemanager/upload/php/upload.php
path /libraries/FCKeditor/editor/filemanager/browser/default/connectors/php/connector.php
path /scripts/FCKeditor/editor/filemanager/upload/php/upload.php
path /administrator/FCKeditor/editor/filemanager/upload/php/upload.php
path /plugins/FCKeditor/editor/filemanager/browser/default/connectors/php/connector.php
path /javascript/FCKeditor/editor/filemanager/browser/default/connectors/php/connector.php
path /fck/editor/filemanager/upload/php/upload.php
path /plugins/FCKeditor/editor/filemanager/upload/php/upload.php
path /javascript/FCKeditor/editor/filemanager/upload/php/upload.php
path /sites/all/modules/fckeditor/fckeditor/editor/filemanager/upload/php/upload.php
path /javascript/fckeditor/editor/filemanager/browser/default/connectors/php/connector.php
path /fck/editor/filemanager/browser/default/connectors/php/connector.php
path /administrator/fckeditor/editor/filemanager/upload/php/upload.php
path /scripts/fckeditor/editor/filemanager/browser/default/connectors/php/connector.php
path /scripts/FCKeditor/editor/filemanager/browser/default/connectors/php/connector.php
path /plugins/fckeditor/editor/filemanager/upload/php/upload.php
path /javascript/fckeditor/editor/filemanager/upload/php/upload.php
path /ckeditor/filemanager/upload/php/upload.php
path /libraries/FCKeditor/editor/filemanager/upload/php/upload.php
path /libraries/fckeditor/editor/filemanager/upload/php/upload.php
path /plugins/fckeditor/FCKeditor/editor/filemanager/browser/default/connectors/php/connector.php
path /ckeditor/filemanager/browser/default/connectors/php/connector.php
path /plugins/fckeditor/FCKeditor/editor/filemanager/upload/php/upload.php
}
abort @known_exploits
# 6) اسکنهای رایج دیگر
@wp_scans {
path /wp-login.php
path /xmlrpc.php
path /wp-admin/*
path /wp-includes/*
path /wp-content/*
}
abort @wp_scans
@pma {
expression `{path} =~ '(?i)phpmyadmin'`
}
abort @pma
}
# ───────────────────── Snippet: تنظیمات مشترک ─────────────────────
(common) {
# بلاکها قبل از هر چیز
import block_exploits
# فشردهسازی
encode zstd gzip
# Rate limit: بیش از 50 درخواست در 1 ثانیه از یک IP
rate_limit {
zone offenders {
key {remote_ip}
events 50
window 1s
}
}
# صفحه 429 ساده و سبک
handle_errors {
@rate_limited {
expression `{http.error.status_code} == 429`
}
header @rate_limited Retry-After "60"
respond @rate_limited 429 "Too many requests. Please try again later."
}
}
# ─