WIUNIX ACADEMY
آموزش Cloudflare Tunnel و Access برای وباپ داخلی در Ubuntu و Debian
صفحهٔ 3 از 5؛ مراحل قبلی و پیشنیازها را پیش از ادامه مرور کن.
آموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
آیپی، دامنه یا پورت مثالها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای بهروزشده را کپی کن.
تنظیم مقادیر برای محیط من8 مقدار قابلتغییر
قدم بعدی
توکن را بدون ورود به فرمان یا تاریخچه ذخیره کنید
حساب اختصاصی زیر برای کانکتور است. پس از بازشدن ویرایشگر، فقط مقدار واقعی توکن را در یک خط وارد و ذخیره کنید؛ نه فرمان داشبورد را. ویرایشگر مطمئن با فایل موقت و بکاپ غیرفعال و بدون ضبط نشست لازم است. فایل اصلی با مالک root و دسترسی ۶۰۰ میماند؛ systemd نسخهٔ خصوصی و فقطخواندنی را به سرویس میرساند. توکن در آرگومان، متن واحد سرویس یا متغیر محیطی قرار نمیگیرد. برای بررسی، آن را چاپ نکنید.
محل اجرا در توضیح همین گام
sudo bash -eu <<'CREDENTIAL' &&
test ! -e '/etc/cloudflared-academy'
if getent passwd cloudflared-academy >/dev/null; then echo 'Existing service account: STOP' >&2; exit 1; fi
useradd --system --no-create-home --shell /usr/sbin/nologin cloudflared-academy
install -d -m 0700 '/etc/cloudflared-academy'
install -m 0600 /dev/null '/etc/cloudflared-academy/token'
CREDENTIAL
sudoedit '/etc/cloudflared-academy/token' &&
sudo test -s '/etc/cloudflared-academy/token'
sudo stat -c '%a %U %G' '/etc/cloudflared-academy/token'
sudoedit /etc/systemd/system/cloudflared-academy.service
فایل خالی نیست، مالک root و دسترسی ۶۰۰ دارد؛ ویرایشگر بعدی برای فایل سرویس فاقد راز باز میشود.
فایل کانکتور با اعتبارنامهٔ خصوصی systemd
این محتوا را در فایل سرویس ذخیره کنید. پارامتر رسمی token-file همراه LoadCredential در systemd استفاده میشود؛ قابلیت در همهٔ نسخههای انتخابشده وجود دارد. متریک و آمادگی سرویس فقط روی لوپبک و پورت 20241 است. چون بسته را APT مدیریت میکند، بهروزرسان داخلی خاموش است. برای این مسیر HTTP امتیاز شبکهٔ root لازم نیست.
[Unit]
Description=Academy Cloudflare Tunnel connector
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=cloudflared-academy
Group=cloudflared-academy
LoadCredential=token:/etc/cloudflared-academy/token
ExecStart=/usr/bin/cloudflared --no-autoupdate tunnel --metrics 127.0.0.1:20241 run --token-file ${CREDENTIALS_DIRECTORY}/token
Restart=on-failure
RestartSec=5s
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
UMask=0077
[Install]
WantedBy=multi-user.target
قدم بعدی
کانکتور را راه بیندازید و سلامت را بسنجید
روی سرور فقط همین واحد را تأیید و اجرا کنید. لاگ ممکن است شناسه یا URL داشته باشد؛ محلی ببینید و پیش از اشتراکگذاری پاکسازی کنید. لاگ debug، ثبت بدنهٔ درخواست یا ارسال بستهٔ عیبیابی را بیبررسی فعال نکنید. کانکتور تونل academy-web باید سالم دیده شود. آمادگی، اتصال به لبه را نشان میدهد؛ سلامت origin و درستی مجوزها جداگانه سنجیده میشوند.
محل اجرا در توضیح همین گام
sudo systemd-analyze verify /etc/systemd/system/cloudflared-academy.service
sudo systemctl daemon-reload
sudo systemctl enable --now cloudflared-academy.service
sudo systemctl is-active cloudflared-academy.service
sudo journalctl -u cloudflared-academy.service --since "5 minutes ago" --no-pager
curl --fail --silent --show-error --noproxy '*' http://127.0.0.1:20241/ready
سرویس فعال، اتصالها ثبتشده، وضعیت داشبورد سالم و پاسخ آمادگی ۲۰۰ است.
قدم بعدی
مسیر همان میزبان حفاظتشده را منتشر کنید
پیش از ادامه، نام میزبان ذخیرهشده در Access را دوباره ببینید. در Routes تونل academy-web یک Published application برای app.example.com بدون شرط مسیر اضافه کنید. Service URL را http://127.0.0.1:8080 بگذارید. در تنظیمات تکمیلی Access، گزینهٔ Protect with Access را فعال و تیم و مخاطب یا AUD همان برنامه را انتخاب کنید. ذخیره کنید و ماندن تنظیم را ببینید؛ این بررسی JWT در کانکتور مکمل سیاست لبه است. wildcard یا CIDR خصوصی اضافه نکنید. نام تازه از تعارض رکوردهای DNS جلوگیری میکند. قبل از آزمون HTTPS، گواهی معتبر لبه لازم است؛ هشدار TLS را دور نزنید.
فقط app.example.com به سرویس لوپبک وصل است؛ Access و بررسی JWT کانکتور فعال ماندهاند.
قدم بعدی
ابتدا بدون نشست وارد شوید
از یک دستگاه دیگر و بدون کوکی Access، پاسخ را بدون دنبالکردن ریدایرکت یا فرستادن اعتبارنامه ببینید. هدایت به ورود Access یا پاسخ منع دسترسی طبیعی است؛ فایل نشانه نباید برگردد. اگر با وضعیت ۲۰۰ نشانه را دیدید، مسیر عمومی را فوراً حذف کنید، Access را نگه دارید و تطبیق میزبان، مسیر و سیاستهای Bypass را بررسی کنید. فقط کد وضعیت، صفحهٔ ورود را از برنامه تشخیص نمیدهد.
محل اجرا در توضیح همین گام
curl --silent --show-error --max-time 20 --dump-header - 'https://app.example.com/health.txt'
کاربر بینشست به Access میرسد یا رد میشود؛ academy-tunnel-origin-ok در پاسخ نیست.
قدم بعدی
کاربر مجاز و غیرمجاز را جدا آزمایش کنید
در نشست تمیز مرورگر، https://app.example.com/health.txt را باز کنید. با هویت مجاز وارد شوید، MFA مقرر در سرویس هویت را انجام دهید و بدنهٔ دقیق نشانه را ببینید. در پروفایل مستقل یا نشست خصوصی بدون ورود مشترک، هویت غیرمجاز را امتحان کنید؛ باید رد شود. مرورگر کاملاً خارجشده را هم بسنجید. رویدادهای Access را با برنامه، هویت و زمان آزمون تطبیق دهید و منتشر نکنید. یک مسیر دیگر برنامه را نیز بررسی کنید تا پوشش کل میزبان روشن شود. نشست آزمایشی را لغو کنید و استفادهٔ مجدد بیدرنگ از آن را بسنجید. سالمبودن تونل بهتنهایی تأیید امنیت نیست.
فقط کاربر مجاز نشانه را میبیند و تصمیمهای Access با سه آزمون مطابقت دارند.