🔐 Auto SSL

گواهی‌هایی که خودشان تمدید می‌شوند

یک نصب‌کننده، Let's Encrypt را روی سرور دبیان یا اوبونتو راه می‌اندازد، همه گواهی‌ها را تمدید نگه می‌دارد و هر وقت چیزی نیاز به توجه داشت در تلگرام خبرتان می‌کند.

bash <(curl -fsSL https://github.com/Plus98ir/Auto_SSL/releases/latest/download/install-ssl-manager.sh)

با کاربر روت اجرا کنید. چند سؤال می‌پرسد و بعد منوی ssl را باز می‌کند.

چه کارهایی می‌کند

گواهی جدید
معمولی (www فقط اگر رزولو شود اضافه می‌شود) یا وایلدکارت. حالت nginx یا standalone را خودش انتخاب می‌کند.
بررسی قبل از صدور
چک می‌کند دامنه به همین سرور اشاره کند و پورت ۸۰ آزاد باشد، تا تلاش‌های ناموفق سهمیه Let's Encrypt را هدر ندهند.
تمدید خودکار
از تایمر خود certbot استفاده می‌کند، یا اگر پروکسی تنظیم شده باشد از کران. هیچ‌چیز دو بار زمان‌بندی نمی‌شود.
بعد از هر تمدید
nginx را ریلود می‌کند، در صورت تمایل فایل‌ها را به پوشه دلخواه کپی می‌کند، دستور خودتان را اجرا می‌کند و در تلگرام خبر می‌دهد.
گزارش انقضا
بررسی روزانه که اگر گواهی‌ای ۲۰ روز یا کمتر وقت داشته باشد پیام می‌دهد.
وایلدکارتِ قابل تمدید
حالت Cloudflare API وایلدکارت را بدون دخالت شما تمدید می‌کند. حالت TXT دستی هم با هشدار باقی است.
ربات تلگرام
وضعیت، تمدید، گواهی جدید، دانلود و بکاپ از روی گوشی. چند ادمین را پشتیبانی می‌کند.
خروجی
فایل‌های .crt و .key و در صورت نیاز .pfx برای پنل‌هایی مثل x-ui و مرزبان.
بکاپ و بازگردانی
کل /etc/letsencrypt را در یک فایل آرشیو می‌کند و به همین راحتی برش می‌گرداند.
تست آزمایشی
صدور یا تمدید را روی سرور staging تست کنید، بدون مصرف سهمیه واقعی.
حذف تمیز
ربات، زمان‌بندی‌ها و اسکریپت‌ها را حذف می‌کند. گواهی‌ها سر جایشان می‌مانند.

مرحله ۱: ساخت ربات (اختیاری)

اگر فقط منوی ترمینال را می‌خواهید، از این مرحله رد شوید.

  1. تلگرام را باز کنید و به @BotFather پیام بدهید.
  2. دستور /newbot را بفرستید و یک نام نمایشی انتخاب کنید.
  3. یک نام کاربری که به bot ختم شود انتخاب کنید، مثلاً MySSLManagerBot.
  4. توکن HTTP API را کپی کنید.
  5. آیدی عددی خود را با فرستادن /start به @userinfobot بگیرید. برای هر ادمین تکرار کنید.
توکن را محرمانه نگه دارید. اگر لو رفت، در BotFather با /revoke باطلش کنید و نصب‌کننده را دوباره اجرا کنید.

مرحله ۲: نصب

روی سرور دبیان یا اوبونتو، با کاربر روت:

bash <(curl -fsSL https://github.com/Plus98ir/Auto_SSL/releases/latest/download/install-ssl-manager.sh)

نصب‌کننده این‌ها را می‌پرسد:

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

از نسخه ۱ ارتقا می‌دهید؟ اول systemctl disable --now ssl-bot را بزنید تا دو لیسنر هم‌زمان روی یک توکن کار نکنند.

منوی ترمینال

هر وقت خواستید ssl را تایپ کنید.

گزینهکارکرد
۱ گواهی جدیدمعمولی یا وایلدکارت، با امکان تست آزمایشی قبل از صدور.
۲ تمدید یک دامنهدامنه را از لیست انتخاب کنید تا فوراً تمدید شود.
۳ تمدید همههر چه موعدش رسیده را تمدید می‌کند، یا با dry-run تستش می‌کند.
۴ وضعیت همهخروجی کامل certbot به همراه روزهای باقی‌مانده هر دامنه.
۵ وضعیت یک دامنهجزئیات یک گواهی.
۶ حذف یا ابطالحذف محلی، یا ابطال در Let's Encrypt. vhost مربوط در nginx هم پاک می‌شود.
۷ خروجیساخت .crt / .key / .pfx در /root/ssl-exports/.
۸ بکاپ یا بازگردانیآرشیو در /root/ssl-backups/، یا بازگردانی از آرشیو.
۹ تنظیماتدستور بعد از تمدید، پوشه کپی و پیام آزمایشی تلگرام.
۱۰ حذف برنامهSSL Manager را حذف می‌کند. گواهی‌ها باقی می‌مانند.

ربات تلگرام

فقط آیدی‌های ادمینی که وارد کرده‌اید جواب می‌گیرند. بقیه نادیده گرفته می‌شوند.

دستورکارکرد
/startمنوی دکمه‌ای را باز می‌کند.
/statusیک دامنه انتخاب کنید تا جزئیات و روزهای باقی‌مانده را ببینید.
/renewیک دامنه انتخاب کنید تا همین حالا تمدید شود.
/newcert example.comDNS و پورت ۸۰ را چک می‌کند، گواهی صادر می‌کند و فایل‌ها را می‌فرستد.
/downloadیک دامنه انتخاب کنید تا فایل‌های گواهی‌اش را بگیرید.
/backupروی سرور بکاپ می‌گیرد و اگر ارسال کلید روشن باشد آن را می‌فرستد.
با SEND_KEYS="no" ربات فقط fullchain.pem را می‌فرستد و مسیر کلید خصوصی روی سرور را می‌گوید. هر چیزی که از تلگرام رد شود روی سرورهای تلگرام باقی می‌ماند.

تمدید چطور کار می‌کند

بعد از صدور گواهی لازم نیست کاری بکنید.

پیکربندی

همه چیز در /etc/ssl-manager/config است (پرمیشن 600). گزینه ۹ منو تنظیمات رایج را برایتان ویرایش می‌کند.

تنظیمپیش‌فرضتوضیح
EMAIL—ایمیل برای اطلاعیه‌های Let's Encrypt.
PROXY_URLخالیمثل http://user:[email protected]:8080. برای اتصال مستقیم خالی بگذارید.
BOT_TOKEN—توکن BotFather.
ADMIN_IDS—آیدی‌های عددی، جداشده با کاما.
SEND_KEYSnoاینکه ربات اجازه ارسال کلید خصوصی و بکاپ را دارد یا نه.
POST_RENEW_CMDخالیبعد از هر تمدید اجرا می‌شود، مثلاً systemctl restart xray.
COPY_TO_DIRخالیبعد از هر تمدید، fullchain.pem و privkey.pem اینجا کپی می‌شوند.
EXPIRY_WARN_DAYS20گواهی‌هایی که این تعداد روز یا کمتر وقت دارند گزارش می‌شوند.

فایل‌ها

مسیرکاربرد
/etc/ssl-manager/configتنظیمات و اطلاعات محرمانه.
/usr/local/bin/sslمنوی ترمینال.
/usr/local/bin/ssl-bot.shربات تلگرام، اجراشده توسط سرویس ssl-bot.
/usr/local/bin/ssl-lib.shتوابع مشترک.
/usr/local/bin/ssl-expiry-check.shگزارش روزانه انقضا.
/etc/letsencrypt/renewal-hooks/deploy/00-ssl-manager.shبعد از هر تمدید اجرا می‌شود.
/var/log/ssl-manager.logصدورها، تمدیدها و هشدارها.
/root/ssl-backups/آرشیوهای بکاپ.
/root/ssl-exports/فایل‌های خروجی گرفته‌شده.

امنیت

اصلاً پروکسی لازم است؟

فقط اگر سرور نتواند مستقیم به acme-v02.api.letsencrypt.org یا api.telegram.org برسد. سرورهای خارج از ایران باید خالی بگذارند.

پروکسی باید از خود سرور قابل دسترس باشد. 127.0.0.1 یعنی همان سرور، نه کامپیوتر شخصی شما. با این دستورها چک کنید:

ss -ltnp | grep <port>
curl -x http://127.0.0.1:<port> -I https://api.telegram.org

رفع اشکال

نشانهعلت و راه‌حل
ربات جواب نمی‌دهدsystemctl status ssl-bot و journalctl -u ssl-bot -f را چک کنید. مطمئن شوید لیسنر قدیمی نسخه ۱ روی همان توکن فعال نیست و آیدی شما در ADMIN_IDS هست.
دامنه رزولو نمی‌شودرکورد A وجود ندارد یا هنوز پخش نشده. DNS را درست کنید و دوباره امتحان کنید.
پورت ۸۰ اشغال استسرویس دیگری (Apache، HAProxy، Xray) پورت ۸۰ را گرفته. موقع صدور متوقفش کنید یا nginx را جلویش بگذارید.
Too many failed authorizationsمحدودیت نرخ Let's Encrypt. یک ساعت صبر کنید و تا وقتی موفق نشده از dry-run استفاده کنید.
وایلدکارت تمدید نشددر حالت دستی صادر شده. دوباره با حالت Cloudflare صادرش کنید.
تمدید شد ولی سایت گواهی قدیمی را نشان می‌دهدسرویسی که از آن استفاده می‌کند ری‌استارت نشده. POST_RENEW_CMD را تنظیم کنید.
پیام تمدید در تلگرام نمی‌آیدبا گزینه ۹ منو پیام آزمایشی بفرستید. اگر نرسید، توکن و پروکسی را چک کنید.