خودکار طریقہ: ذاتی اکاؤنٹ سے ایک اسکرپٹ پورا سرور تیار کر دیتا ہے (ویب اسٹیک Apache + PHP، ڈیٹابیس، سیکیورٹی ٹولز، cron)۔ اس کے بعد — پینل تعینات کریں، SSL جاری کریں اور لائسنس درج کریں۔ یہ Ubuntu/Debian پر چلتا ہے: نئے VPS پر سب کچھ صفر سے سیٹ کرتا ہے، پہلے سے سیٹ سرور پر — صرف اضافی طور پر (پروفائل “سیٹ شدہ سرور”، مرحلہ 01)۔ نیچے دی گئی تمام کمانڈز ترتیب سے ہیں، بس اوپر سے نیچے اسکرول کریں۔ نئے VPS پر ہر مرحلہ یکے بعد دیگرے موزوں ہے؛ اگر سرور پہلے سے سیٹ ہے یا اس پر ہوسٹنگ پینل لگا ہوا ہے، تو کچھ کام اسکرپٹ جان بوجھ کر آپ کے لیے چھوڑ دیتا ہے — کون سا، یہ وہ اپنے کام کے اختتام پر لکھ دیتا ہے (آؤٹ پٹ کی تفصیل — مرحلہ 01 میں)۔
monitor.example.com — آپ کا ڈومین؛ 203.0.113.10 — سرور کا حقیقی IP؛ /var/www/monitor — پینل کا روٹ (جہاں public/، assets/، config.php موجود ہیں)؛ ڈیٹابیس کا پاس ورڈ اپنا بنائیں۔
jail.local)، root-crontab، UFW قواعد، Apache کانفیگ۔ اگر سرور پہلے سے سیٹ ہے (کام کرتا پینل، سائٹس، میل، اپنے jail) — تو “سیٹ شدہ سرور” پروفائل منتخب کریں: یہ صرف اضافی تبدیلیاں کرتا ہے اور آپ کے فائروال، Fail2ban، میل، SSH اور sysctl کو نہیں چھیڑتا۔ ہوسٹنگ پینل کا پتہ چلنے پر اسکرپٹ خود اسی موڈ میں چلا جاتا ہے۔ پہلی بار چلانے سے پہلے آپ ڈرائی رن آن کر سکتے ہیں (اکاؤنٹ میں چیک باکس) — یہ بغیر کچھ بدلے دکھاتا ہے کہ کیا کیا جائے گا۔ کام کرتے سرور پر احتیاطاً ایک snapshot بنا لیں۔
my.arciveo.com ← سیکشن “سرور سیٹ اپ” سے لیتے ہیں (Arcivéo Security Monitor کی خریداری کے بعد دستیاب)۔ یہ آپ کے اکاؤنٹ سے منسلک ہے اور ذاتی ٹوکن رکھتی ہے۔
اسکرپٹ پورے سرور کو تیار کرتا ہے: ویب اسٹیک (Apache + PHP)، ڈیٹابیس، SSL کے اوزار، تحفظ کے آلات کا مکمل سیٹ اور cron-جابز (Lynis، SMART، debsums، Logwatch، روزانہ رپورٹ، ipsum اپ ڈیٹ)۔
1) تحفظ کی سطح منتخب کریں (اکاؤنٹ میں، کمانڈ کاپی کرنے سے پہلے):
2) سرور پر root کے تحت چلائیں اکاؤنٹ سے حاصل کردہ کمانڈ — یہ اس طرح دکھتی ہے:
3) اختتام پر آنے والا آؤٹ پٹ پڑھیں — وہاں لکھا ہوتا ہے کہ آپ کے ذمے کیا رہ گیا ہے۔ اسکرپٹ اپنا کام جانچوں کے ایک بلاک اور “آگے — پینل کی تنصیب” کی فہرست پر ختم کرتا ہے۔ کچھ مراحل وہ جان بوجھ کر نہیں کرتا: کون سے، یہ منتخب کردہ پروفائل پر اور اس پر منحصر ہے کہ اسے سرور پر کیا ملا۔ نیچے دی گئی فہرست سے ملائیں — صرف وہی نکات کرنے ہیں جن کی سطریں آپ کے آؤٹ پٹ میں ظاہر ہوئی ہوں۔
Control panel detected (…) — سائٹ خود ہوسٹنگ پینل کے ذرائع سے بنتی ہے، اسکرپٹ vhost نہیں بناتا۔ مرحلہ 03، شاخ “ہوسٹنگ پینل والا سرور”۔No vhost created (no domain given) — ڈومین کے بغیر “سیٹ شدہ سرور” پروفائل: بغیر نام کا vhost طے شدہ سائٹ بن جاتا اور آپ ہی کی سائٹس کی درخواستیں روک لیتا، اس لیے وہ نہیں بنایا گیا۔ مرحلہ 03، شاخ “vhost دستی طور پر بنائیں”۔sudo rules NOT written — اسکرپٹ یہ طے نہ کر سکا کہ پینل کس اکاؤنٹ کے تحت چلتا ہے۔ یہ عام صورتِ حال ہے: پینل کی فائلیں خودکار سیٹ اپ کے بعد اپلوڈ ہوتی ہیں، اس لیے طے کرنے کے لیے ابھی کچھ تھا ہی نہیں۔ ان قواعد کے بغیر ماڈیول سسٹم ڈیٹا نہیں دیکھ پائیں گے۔ مرحلہ 04، بلاک “ویب سرور کے لیے sudo”۔! Nginx does not read .htaccess — Apache کے سامنے Nginx ہے، اور اس کے کانفیگ میں ممانعت خودکار طور پر درج نہیں ہو سکی۔ یہ لازماً کریں: ورنہ data/، keys/، database/ اور config.php — .htaccess کو نظرانداز کرتے ہوئے باہر فراہم ہوتے رہیں گے۔ مرحلہ 03، بلاک “اگر Apache کے سامنے Nginx ہو”۔UFW installed but inactive — فائر وال انسٹال ہے مگر بند ہے: سیٹ شدہ سرور پر اسکرپٹ اسے خود آن نہیں کرتا تاکہ آپ کی رسائی نہ کٹ جائے۔ اسے خود آن کریں، اپنے SSH پورٹ کی اجازت لازماً دے کر:
Fail2ban installed but not running — چلائیں: sudo systemctl enable --now fail2ban۔Database server present … but not running — مرحلہ 04 سے پہلے ڈیٹابیس سرور چلائیں: sudo systemctl enable --now mariadb (یا mysql — جو انسٹال ہو)۔Certbot skipped — issue SSL in … — سرٹیفکیٹ ہوسٹنگ پینل میں Let's Encrypt کے سوئچ سے جاری ہوتا ہے؛ مرحلہ 06 آپ کو درکار نہیں۔All checks passed ہوتی ہے۔ ! والے نکات توجہ چاہتے ہیں؛ تفصیلات لاگ میں لکھی جاتی ہیں، جس کا راستہ اسکرپٹ بالکل آخر میں چھاپتا ہے (Log: …)۔
پینل کو monitor.example.com جیسے پتے پر کھولنے اور مفت SSL حاصل کرنے کے لیے، ڈومین کا سرور کی طرف اشارہ ہونا ضروری ہے۔ DNS کنٹرول پینل میں (رجسٹرار یا ہوسٹر کے پاس) ایک A-ریکارڈ بنائیں:
چند منٹ بعد (کبھی کبھار ایک گھنٹے تک) جانچیں کہ ڈومین سرور کی طرف اشارہ کر رہا ہے:
/var/www/monitor بنا چکا ہے اور Apache سائٹ ترتیب دے چکا ہے (DocumentRoot پینل کے روٹ پر، PHP-FPM، .htaccess کے لیے AllowOverride)۔ اسکرپٹ کے آؤٹ پٹ میں یہ سطر vhost … → DocumentRoot … ہے۔ الگ سے ڈائریکٹری اور vhost بنانے کی ضرورت نہیں — بس فائلیں اپلوڈ کریں اور اجازتیں سیٹ کریں۔
شاخ “ہوسٹنگ پینل والا سرور” (آؤٹ پٹ میں: Control panel detected (…))۔ ایسے سرور پر سائٹس کا انتظام پینل کرتا ہے، اور اسکرپٹ جان بوجھ کر اپنا vhost نہیں بناتا — پینل کے کانفیگ دوبارہ بناتے ہی وہ مٹ جاتا۔ ترتیب یہ ہے:
public_html میں اپلوڈ کریں: index.php، api/، assets/ کے ساتھ ساتھ خدماتی config.php، includes/، data/، tmp/، logs/، keys/، cron/، database/ بھی وہیں ہونے چاہئیں۔ ویب روٹ سے اوپر کچھ منتقل کرنے کی ضرورت نہیں: خدماتی فولڈر ڈسٹری بیوشن کی .htaccess فائل سے بند ہیں، اور Nginx کے تحت اُس ممانعت سے جو اسکرپٹ نے ڈومین کے کانفیگ میں درج کی ہے۔config.php (مرحلہ 05)۔ کمانڈز میں راستے /home/اکاؤنٹ/web/ڈومین/public_html سے بدل دیں، اور مالک — www-data کے بجائے اس ڈومین کا صارف۔شاخ “vhost دستی طور پر بنائیں” (آؤٹ پٹ میں: No vhost created (no domain given))۔ ایسا صرف “سیٹ شدہ سرور” پروفائل پر ہوتا ہے، جب ڈومین نہ دیا گیا ہو۔ سب سے آسان طریقہ — اکاؤنٹ والی کمانڈ ڈومین بتاتے ہوئے دوبارہ چلانا:
دوبارہ چلانا محفوظ ہے: جو کام ہو چکا ہے وہ دہرایا نہیں جاتا۔ اور اگر vhost ہاتھ سے بنانا ہو — تو یہ وہی کانفیگ ہے جو انسٹالر لکھتا ہے:
ServerName لازمی ہے۔ بغیر نام کا vhost، Apache کی طے شدہ سائٹ بن جاتا ہے اور اسی سرور پر موجود دوسرے ڈومینز کے لیے جواب دینے لگتا ہے۔ اسی وجہ سے سیٹ شدہ سرور پر 000-default.conf بند نہ کریں: ممکن ہے یہ سائٹ کسی کے کام کے لیے تبدیل کی گئی ہو — نئے VPS پر انسٹالر اسے خود ہٹا دیتا ہے، یہاں ایسا کرنے کی ضرورت نہیں۔
! Nginx does not read .htaccess)۔ Nginx جامد فائلیں براہِ راست ڈسک سے دیتا ہے اور .htaccess نہیں پڑھتا — خدماتی فولڈر باہر کھلے رہ جائیں گے، حالانکہ Apache انہیں درست طور پر بند کرتا ہے۔ اسکرپٹ ممانعتوں والی فائل پہلے ہی تیار کر چکا ہے؛ اسے آپ کی سائٹ کے server{} بلاک میں شامل کر کے Nginx دوبارہ لوڈ کرنا ہے:
my.arciveo.com اکاؤنٹ میں → “ڈاؤن لوڈز” سے ڈاؤن لوڈ ہوتی ہیں۔ سرور پر اپلوڈ کرنے سے پہلے آرکائیو کھول لیں۔
ڈسٹری بیوشن کا مواد اپلوڈ کریں /var/www/monitor میں (تاکہ اندر public/, assets/, config.php وغیرہ آ جائیں) — SFTP/SCP (FileZilla / WinSCP) کے ذریعے یا مقامی کمپیوٹر سے scp کمانڈ سے:
ServerName) اس کے لیے اسے خودکار سیٹ اپ کمانڈ میں مرحلہ 01 پر ہی دیا جاتا ہے: … | sudo bash -s -- monitor.example.com (یا اکاؤنٹ میں “پینل ڈومین” فیلڈ میں ڈومین درج کریں)۔ اگر ڈومین نہیں دیا — پینل ہر ہوسٹ اور IP پر جواب دیتا ہے، اور SSL جاری کرتے وقت certbot خود ServerName درج کر دے گا (مرحلہ 06)؛ دوبارہ کچھ انسٹال کرنے کی ضرورت نہیں۔
root کے تحت یا SFTP کے ذریعے اپلوڈ کیا، تو فائلیں root کی ملکیت ہیں، اور ویب سرور (www-data) انہیں پڑھ نہیں سکے گا — پینل خالی یا 403 خرابی کے ساتھ کھلے گا (لاگ میں: .htaccess unreadable / directory not executable)۔ نیچے دی گئی کمانڈ اسے ٹھیک کر دیتی ہے:
اپنے لیے SFTP سے فائل اپلوڈ کھولیں۔ اوپر والی کمانڈ کے بعد تمام فائلیں www-data کی ملکیت ہوتی ہیں، جبکہ FileZilla / WinSCP آپ کے اپنے صارف سے جڑتے ہیں — تب اپلوڈ SSH_FX_PERMISSION_DENIED (Permission denied) کے ساتھ ناکام ہوگا۔ دو میں سے ایک طریقہ منتخب کریں۔
طریقہ A — صرف آپ کے صارف کے لیے ACL (تجویز کردہ)۔ لکھنے کا اختیار صرف آپ کو ملتا ہے؛ ویب سرور اب بھی پینل کا کوڈ تبدیل نہیں کر سکتا:
طریقہ B — www-data گروپ کے ذریعے۔ آسان ہے، مگر پینل کی فائلوں پر لکھنے کا اختیار ویب سرور کو بھی مل جاتا ہے: PHP میں کوئی خامی ہو تو کوڈ بدلا جا سکتا ہے۔ کمانڈز کی ترتیب اہم ہے — config.php اور کام کے فولڈر سب سے آخر میں بند کیے جاتے ہیں:
id deploy — گروپوں کی فہرست میں www-data نظر آنا چاہیے؛ ls -ld /var/www/monitor — اجازتیں drwxrwsr-x، اور x کی جگہ s کا مطلب ہے کہ setgid لگا ہوا ہے۔
ایک ڈیٹابیس اور صارف بنائیں، پھر اسکیما امپورٹ کریں۔ ڈیٹابیس والا بلاک ٹرمینل میں مکمل طور پر پیسٹ ہوتا ہے (sudo mysql unix-socket کے ذریعے root کے طور پر داخل ہوتا ہے — root پاس ورڈ کی ضرورت نہیں)۔ monitor_db اور monitor_user مثال کے نام ہیں، آپ اپنی مرضی کے کوئی بھی رکھ سکتے ہیں؛ ڈیٹابیس کا نام، صارف اور پاس ورڈ یاد رکھیں — اگلے مرحلے میں انہیں config.php میں درج کریں گے:
admin اکاؤنٹ بناتا ہے (database/db.sql سے)، اگر ڈیٹابیس خالی ہو۔
اگر ٹیبلز نہ بنیں (پینل ڈیٹابیس کنکشن کی خرابی دکھائے یا لاگ اِن فارم کے بجائے خالی اسکرین) — تو اسکیما دستی طور پر امپورٹ کریں۔ کمانڈ پینل کے روٹ میں چلائی جاتی ہے، اقدار اوپر والے بلاک سے لی جاتی ہیں:
$DBNAME / $DBUSER / $DBPASS متغیرات “بھول” چکے ہوں (ٹرمینل کا نیا سیشن) — تو کمانڈ میں اقدار ہاتھ سے ڈالیں یا اوپر والے بلاک کی وہی تین سطریں دوبارہ چلا کر انہیں پھر سے مقرر کر لیں۔
sudo rules NOT written کی سطر تھی — تو پینل کا اکاؤنٹ طے کرنے کے لیے کچھ تھا ہی نہیں (فائلیں ابھی اپلوڈ نہیں ہوئی تھیں)، اور قواعد نہیں بنائے گئے۔ ان کے بغیر فائر وال، Fail2ban اور CrowdSec جیسے سیکشن خالی رہیں گے۔ اب جب فائلیں اپنی جگہ ہیں، اکاؤنٹ صراحتاً بتاتے ہوئے اکاؤنٹ والی کمانڈ ایک بار پھر چلائیں:
www-data کی جگہ وہ صارف لکھیں جس کے تحت آپ کی سائٹ کا PHP چلتا ہے (ہوسٹنگ پینل پر یہ عموماً ڈومین کا مالک ہوتا ہے)۔ اسے یوں دیکھا جا سکتا ہے:
/etc/sudoers.d/monitor موجود ہو اور اس میں آپ کے صارف والی سطریں ہوں۔
config.php پینل کی جڑ میں (/var/www/monitor/config.php) — واحد فائل ہے جسے ہاتھ سے ترمیم کرنا ضروری ہے۔ پینل کی تمام ترتیبات اس میں define() constants کے ذریعے دی گئی ہیں۔ اسے کسی ایڈیٹر میں کھولیں:
اپنی قدریں نمایاں جگہوں پر ڈالیں؛ باقی جوں کا توں رہنے دیں:
کیا تبدیل کرنا ہے:
DB_NAME، DB_USER، DB_PASS — بالکل وہی ڈیٹابیس نام، صارف اور پاس ورڈ جو آپ نے مرحلہ 04 میں ڈیٹابیس بناتے وقت مقرر کیے (اگر مثالیں رہنے دیں تو — monitor_db / monitor_user)۔ DB_HOST اور DB_CHARSET کو نہ چھیڑیں۔APP_URL — پینل کا مکمل پتہ https:// کے ساتھ، آخر میں سلیش کے بغیر اور www کے بغیر۔ اسے اُس ڈومین سے مطابقت رکھنی چاہیے جس پر آپ لائسنس فعال کرتے ہیں (مرحلہ 07)، ورنہ کلید مسترد ہو جائے گی۔TIMEZONE — آپ کا ٹائم زون (فہرست — timedatectl list-timezones)۔ یہ صرف اس پر اثر ڈالتا ہے کہ پینل تاریخیں کیسے دکھاتا ہے؛ cron کاموں کے شروع ہونے کے وقت پر اثر نہیں ڈالتا (وہاں سسٹم کا ٹائم زون لاگو ہوتا ہے)۔SESSION_LIFETIME — کتنے سیکنڈ کی بے عملی کے بعد پینل دوبارہ لاگ اِن کرنے کو کہے گا (طے شدہ 8 گھنٹے)۔ مثلاً 3600 = 1 گھنٹہ، 86400 = ایک دن۔display_errors، log_errors، error_log) — طے شدہ حالت میں رہنے دیں۔فائل محفوظ کریں (Ctrl+O، Enter، پھر Ctrl+X) اور PHP-FPM دوبارہ چالو کریں — ورنہ OPcache کی وجہ سے تبدیلیاں لاگو نہیں ہوں گی:
640 (مرحلہ 03 میں مقرر) اور جڑ کے .htaccess میں واضح ممانعت۔ اسے عوامی repositories میں نہ رکھیں اور اصل پاس ورڈ کے ساتھ سپورٹ کو نہ بھیجیں۔
http:// پر آپ لاگ اِن نہیں کر سکیں گے۔
Certbot skipped — issue SSL in …)۔ سرٹیفکیٹ خود پینل میں ویب ڈومین پر Let's Encrypt کے سوئچ سے جاری ہوتا ہے — اس طرح اس کی تجدید بھی پینل ہی کرتا ہے۔
certbot اور Apache کا پلگ اِن آٹو سیٹ اپ کے ذریعے پہلے ہی انسٹال ہو چکے ہیں۔ ڈومین کا DNS پہلے ہی سرور کی طرف اشارہ کر رہا ہونا چاہیے (مرحلہ 02)۔ ایک ہی کمانڈ سے اجرا:
اگر پینل www. کے ساتھ بھی کھلنا چاہیے — تو دونوں نام ایک ہی کمانڈ میں گنوا دیں، ورنہ دوسرے پتے پر براؤزر سرٹیفکیٹ کے بارے میں انتباہ دکھائے گا:
Y۔<VirtualHost *:443> لکھے گا، http→https ری ڈائریکٹ اور خودکار تجدید سیٹ کرے گا۔ آخر میں — Successfully enabled HTTPS۔
dig +short monitor.example.com سرور کا IP واپس کرتا ہے اور پورٹ 80/443 کھلے ہیں (sudo ufw allow 80,443/tcp)۔
اجرا کے بعد: https://monitor.example.com تالے کے ساتھ کھلتا ہے، http:// https:// پر ری ڈائریکٹ کرتا ہے۔
https://monitor.example.com کھولیں، admin / useradmin سے لاگ اِن کریں اور یہ چیک لسٹ مکمل کریں:
ARCIVEO-… ایکٹیویشن کوڈ اپنے ڈومین پر ایکٹیویٹ کریں اور کلید “سیٹنگز” → “لائسنس” میں چسپاں کریں۔ مزید تفصیل۔public/start_db.php، اگر باقی ہو: یہ بغیر اجازت کے ڈیٹابیس دوبارہ بنانے کی اجازت دیتا ہے۔ جب تک فائل پینل کی جڑ میں یا public/ میں موجود ہے، پینل سرخ بینر کے ذریعے اس کے بارے میں خبردار کرتا ہے۔sudo /usr/local/bin/clamav-scan.sh) ڈسک اور پروسیسر پر بھاری بوجھ ڈالتا ہے اور ایک گھنٹہ یا اس سے زیادہ چل سکتا ہے — کام کرتے سرور پر بہتر ہے کہ 01:30 والے رات کے رن کا انتظار کریں۔ “ڈسکیں (SMART)”، “کارکردگی” اور “سیکیورٹی اپ ڈیٹس” کے سیکشن خود بھرتے ہیں: بالترتیب ہر 30 منٹ، 5 منٹ اور گھنٹے میں ایک بار۔