Prosody یک سرور چت XMPP است که از چت روم های تکی و گروهی یک به یک رمزگذاری شده توسط TLS پشتیبانی می کند. XMPP (پروتکل حضور و پیام رسانی گسترده) یک پروتکل پیام رسانی باز است که به طور رسمی با عنوان Jabber شناخته می شود. این بدان معنی است که هر کلاینت چت XMPP قادر خواهد بود به یک سرور Prosody وصل شود و چت را شروع کند.
XMPP یک استاندارد کامل و آزاد است که توسط  Internet Engineering Task Force (IETF) نگهداری می شود. این برنامه در بسیاری از برنامه ها مانند Google Talk که توسط میلیون ها کاربر استفاده می شود ، بطور فعال نگهداری و به کار گرفته می شود. سرورهای XMPP ، مانند Prosody ، گزینه ای قابل انعطاف برای سرور چت هستند که بیش از دو دهه است که وجود دارند.
در این آموزش ، یک سرور Prosody را نصب و پیکربندی میکنید که از جلسات چت یک به یک و گروهی و امکان بارگذاری فایل ها در پنل چت برای اشتراک گذاری پشتیبانی می کند. تمام جلسات چت توسط گواهی رمزنگاری TLS محافظت می شود تا اطلاعات شخصی شما خصوصی بماند.
پیش نیازها
قبل از شروع این راهنما به موارد زیر نیاز خواهید داشت:
یک سرور Ubuntu 18.04 با حداقل 512 مگابایت رم که با دنبال کردن راهنمای ستاپ اولیه سرور برای اوبونتو 18.04 تنظیم شده باشد، شامل یک کاربر فعال با sudo ، غیر ریشه و یک فایروال.
• یک کلاینت چت XMPP که روی سیستم محلی شما نصب شده باشد. هر یک از برنامه های چت که در صفحه کلاینت XMPP ذکر شده است با سرور Prosody شما سازگار خواهد بود.
• دو نام هاست که به سرور شما اشاره کنند. شما به دو نام هاست نیاز دارید زیرا Prosody از یک هاست برای چت مستقیم و از دیگری برای اتاق های گفتگوی گروهی استفاده می کند. این راهنما از دو نام هاست مثال زیر استفاده خواهد کرد:
chat.your-domain : نام هاست چت یک به یک.
room.your-domain : نام هاست چت گروهی.
به عنوان کاربر فعال با sudo و غیر ریشه برای شروع این راهنما به سرور خود وارد شوید.
مرحله 1 – نصب Prosody
در این مرحله مخزن Prosody APT سفارشی را به سرور خود اضافه می کنید و سپس Prosody را از آن نصب می کنید. برای اطمینان از نصب جدیدترین بسته ها از مخزن Prosody استفاده می کنید.
ابتدا با ویرایشگر متن خود یک فایل مخزن جدید ایجاد و آن را باز کنید. این فایل اطلاعات مخزن Prosody را برای مدیر بسته APT در اختیار دارد:
⦁ $ sudo nano /etc/apt/sources.list.d/prosody.list

خط زیر را در فایل خود اضافه کنید:
/etc/apt/sources.list.d/prosody.list
deb https://packages.prosody.im/debian bionic main

حال باید کلید عمومی Prosody APT را دانلود و نصب کنید. سرور شما از این مسئله استفاده خواهد کرد تا تأیید کند بسته Prosody توسط تیم Prosody ساخته شده است و معتبر است.
دستور زیر از ابزار wget برای دانلود کلید در دیرکتوری فعلی شما استفاده می کند:
⦁ $ wget https://prosody.im/files/prosody-debian-packages.key

برای افزودن کلید Prosody به حلقه کلید APT از دستور apt-key add استفاده کنید:
⦁ $ sudo apt-key add prosody-debian-packages.key

اکنون می توانید کلید را حذف کنید زیرا دیگر نیازی به آن ندارید:
⦁ $ rm prosody-debian-packages.key

بانک اطلاعات بسته سرور خود را به روز کنید تا نسخه های جدیدتر بسته از مخزن Prosody را شامل شود:
⦁ $ sudo apt update

اکنون آماده نصب بسته سرور Prosody و برخی بسته های اختیاری دیگر هستید:
⦁ $ sudo apt install prosody prosody-modules lua-dbi-sqlite3 lua-event

بسته های نصب شده به شرح زیر است:
prosody: سرور prosody.
prosody-modules : ماژول های Prosody اضافی که عملکرد سرور Prosody را گسترش می دهد.
lua-dbi-sqlite3 : استفاده از یک پایگاه داده SQLite را برای Prosody ممکن میسازد.
lua-event: Prosodyرا قادر می سازد کلاینت های همزمان بیشتری را اداره کند.
اکنون نصب Prosody به پایان رسیده است. در مرحله بعد ، دو گواهینامه TLS دریافت خواهید کرد که Prosody برای رمزگذاری داده های خود از طریق اینترنت و از طریق سرور Prosody از آنها استفاده می کند.
مرحله 2 – اخذ گواهینامه های TLS
Prosody از گواهینامه های TLS برای رمزگذاری اتصالات بین سرور و کلاینت استفاده می کند. این گواهینامه ها همان مواردی هستند که هر زمان که از وب سایت با آدرس HTTPS بازدید می کنید ، از آن استفاده می نمایید. Let’s Encrypt یک سازمان بدون بهره وری است که گواهینامه های TLS رایگان ارائه می دهد. همچنین ابزار certbot را برای دریافت و مدیریت گواهینامه های خود ارائه می دهند. در این مرحله شما می توانید ابزار certbot را نصب کرده و از آن برای گرفتن یک جفت گواهی برای دو نام هاست مورد نظر خود به سرور خود استفاده کنید.
برای اطمینان از استفاده از جدیدترین بسته ها ، certbot  را از مخازن PPA اوبونتو Let’s Encrypt نصب خواهید کرد.
ابتدا دستور زیر را برای اضافه کردن مخزن سفارشی اجرا کنید:
⦁ $ sudo add-apt-repository ppa:certbot/certbot

اکنون ، certbot را نصب کنید:
⦁ $ sudo apt install certbot

در مرحله بعد ، اجازه ترافیک HTTP از طریق UFW را بدهید تا certbot بتواند به کارگیری گواهی شما را تأیید کند:
⦁ $ sudo ufw allow http

دستور certbot زیر را اجرا کنید ، که گواهی یکی از نام های هاست شما را دریافت می کند:
⦁ $ sudo certbot certonly –standalone –agree-tos –email your_email -d chat.your-domain

این گزینه ها عبارتند از:
– –certonly : گواهینامه را دریافت کنید و هیچ تغییر دیگری در سرور ایجاد نکنید.
–standalone : یک سرور وب موقت را برای تایید اعتبار گواهی راه اندازی کنید.
–agree-tos: بطور خودکار با شرایط سرویس Let’s Encrypt موافقت کنید.
–email your_email : آدرس ایمیلی که شما برای Let’s Encrypt ارسال می کنید تا از آنها استفاده کنند و در مورد مسائل امنیتی ، اعلام انقضای گواهی و سایر اطلاعات مهم به شما اطلاع دهند.
-d chat.your-domain: نام میزبانی که قصد استفاده از آن را برای سرور Prosody خود دارید.
هنگامی که این دستور را اجرا می کنید از شما سؤال می شود که آیا می خواهید آدرس ایمیل خود را با بنیاد الکترونیکی Frontier به اشتراک بگذارید ، که اختیاری است. سپس ثبت نام سرتیفیکیت با خروجی زیر ادامه خواهد یافت:
Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Obtaining a new certificate

IMPORTANT NOTES:
– Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/chat.your-domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/chat.your-domain/privkey.pem
Your cert will expire on 2020-07-26. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
“certbot renew”
– If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

دوباره همین دستور را اجرا کنید تا یک گواهی برای نام هاست دوم خود دریافت کنید.
اکنون دو دایرکتوری دارید:
⦁ /etc/letsencrypt/live/room.your-domain
⦁ /etc/letsencrypt/live/chat.your-domain

این دایرکتوری ها حاوی گواهی و فایلهای کلیدی برای نامهای هاست شما هستند.
از آنجا که سرور Prosody به عنوان کاربر اصلی کار نمی کند ، مالکیت و مجوزهای دایرکتوری ها و فایل های کلیدی نیاز به تغییر دارد تا سرور Prosody بتواند آنها را بخواند و از آنها استفاده کند.
مجوز فایل ها و دایرکتوری ها در لینوکس این امکان را به شما می دهد که کاربران و پردازش ها بتوانند دایرکتوری ها و پوشه ها را بخوانند ، بنویسند و اجرا کنند. این کنترل از تغییر سیستم توسط یک کاربر غیر مجاز محافظت می کند و همچنین از خوانده شدن فایل های خصوصی مانند کلید خصوصی TLS توسط یک کاربر غیر مجاز محافظت می کند.
اگر با کاربران و مجوزهای لینوکس آشنا نیستید مقاله مقدمه ای بر مجوزهای لینوکس مطالبی عالی را ارائه می دهد.
اولین قدم برای تغییر گروه مالک کلیدهای خصوصی به گروه سرور Prosody با دستورات زیر است:
⦁ $ sudo chgrp prosody /etc/letsencrypt/live/room.your-domain/privkey.pem

⦁ $ sudo chgrp prosody /etc/letsencrypt/live/chat.your-domain/privkey.pem

ابزار chgrp مالکیت گروهی فایل ها و دیرکتوری ها را تغییر می دهد. در اینجا ، شما گروه را از root پیش فرض به prosody تغییر داده اید.
سپس ، مجوزهای دایرکتوری هایی که حاوی فایل های گواهی TLS هستند را به 0755 تغییر دهید. این دایرکتوری ها متعلق به کاربر root و گروه root هستند. دستور زیر مجوزهای موجود در این دیرکتوری ها را تغییر می دهد:
⦁ $ sudo chmod 0755 /etc/letsencrypt/archive

⦁ $ sudo chmod 0755 /etc/letsencrypt/live

مجوزهای جدید 0755 در این دیرکتوری ها بدان معنی است که کاربر اصلی ، مجوزهای خواندن ، نوشتن و اجرای مجوزها را دارد. اعضای گروه اصلی مجوزها را خوانده و اجرا می کنند. سایر کاربران و گروه های موجود در سیستم مجوزهای خواندن و اجرای آنها را دارند.
اکنون مجوزهای کلیدهای خصوصی TLS را تغییر دهید:
⦁ $ sudo chmod 0640 /etc/letsencrypt/live/room.your-domain/privkey.pem

⦁ $ sudo chmod 0640 /etc/letsencrypt/live/chat.your-domain/privkey.pem

مجوزهای 0640 در این فایل ها بدین معنی است که کاربر اصلی دارای مجوزهای خواندن و نوشتن روی فایل است. اعضای گروه Prosody مجوزهای مربوط به خواندن فایل را دارند. گروه Prosody یک عضو دارد ، کاربر Prosody . کاربری است که سرور Prosody با آن اجرا می شود و کاربری که با آن به فایل دسترسی خواهد داشت. همه کاربران دیگر در سیستم اجازه دسترسی به فایل را ندارند.
این دو دستور از ابزار chmod استفاده می کنند که کاربران و گروه هایی را که مجوزهای خواندن ، نوشتن و اجرا در فایل ها و دایرکتوری ها را دارند تعیین می کنند.
شما می توانید آزمایش کنید که Prosody می تواند کلیدهای خصوصی را با استفاده از sudo برای خواندن فایل های کلید خصوصی با cat به عنوان کاربر prosody بخواند:
⦁ $ sudo -u prosody cat /etc/letsencrypt/live/chat.your-domain/privkey.pem

اگر موفقیت آمیز بود ، می توانید محتویات فایل کلیدی نمایش داده شده روی صفحه خود را مشاهده کنید.
Prosody برای رمزگذاری اتصالات آپلود و دانلود فایل ، از یک فایل واحد حاوی گواهی و کلید خصوصی استفاده می کند. این فایل توسط certbot بطور خودکار ایجاد نمی شود بنابراین باید آن را بصورت دستی ایجاد کنید.
ابتدا وارد پوشه ای خواهید شد که حاوی فایل های کلید و گواهینامه است ، سپس از cat استفاده کنید تا محتوای آنها را در یک فایل جدید key-and-cert.pem ترکیب کنید:
⦁ $ cd /etc/letsencrypt/live/chat.your-domain/

⦁ $ sudo sh -c ‘cat privkey.pem fullchain.pem >key-and-cert.pem’

آغاز این دستور ، sudo sh-c ، یک زیر پوسته جدید را باز می کند که دارای مجوزهای کاربر اصلی است و می تواند فایل جدید را روی /etc/letsencrypt/live/chat.your-domain/ بنویسید.
اکنون گروه و مجوزهای این فایل جدید را تغییر دهید تا با گروه و مجوزهای تنظیم شده برای سایر کلیدهای خصوصی با دستور زیر مطابقت داشته باشد:
⦁ $ sudo chmod 0640 key-and-cert.pem

⦁ $ sudo chgrp prosody key-and-cert.pem

به دیرکتوری هوم کاربرتان بازگردید:
⦁ $ cd

سرانجام ، هر زمان که گواهی تجدید شود یا حاوی یک گواهی منقضی شده باشد ، باید این فایل دوباره ایجاد شود.
certbot با مکانیسمی به نام ” hook ” همراه است که اجازه می دهد قبل یا بعد از تمدید مجوز ، اسکریپت اجرا شود. شما می توانید از این مکانیزم برای اجرای یک اسکریپت استفاده کنید که پس از هر بار تجدید گواهی ، دستوری را که اجرا کردید ، دوباره ایجاد کند.
فایل اسکریپت جدید با نام /etc/letsencrypt/renewal-hooks/post/key-and-cert-combiner.sh را با یک ویرایشگر متن باز کنید:
⦁ $ sudo nano /etc/letsencrypt/renewal-hooks/post/key-and-cert-combiner.sh

سپس موارد زیر را به ویرایشگر اضافه کنید:
/etc/letsencrypt/renewal-hooks/post/key-and-cert-combiner.sh
#!/usr/bin/env bash
set -e

# combines the certificate and key into a single file with cat
cat /etc/letsencrypt/live/chat.your-domain/privkey.pem \
/etc/letsencrypt/live/chat.your-domain/fullchain.pem \
>/etc/letsencrypt/live/chat.your-domain/key-and-cert.pem

به این ترتیب فیلمنامه Bash شما تجزیه می شود:
⦁ #!/usr/bin/env bash : به سیستم می گوید از مترجم Bash برای اجرای اسکریپت استفاده کند.
⦁ set –e: در صورت عدم موفقیت ، باعث خروج اسکریپت میشود.
⦁ > : خروجی دستور cat را در فایل جدید سمت راست تغییر دهید.
اسکریپت را نمی توان اجرا کرد تا زمانی که به شما اجازه اجرای دستور زیر را بدهد:
⦁ $ sudo chmod +x /etc/letsencrypt/renewal-hooks/post/key-and-cert-combiner.sh

+ x به اسکریپت مجوزهای اجرا را می دهد.
سپس ، آزمایش کنید که گواهینامه ها به درستی نصب شده باشند و اسکریپت hook بعد از تمدید با اجرای دستور certbot زیر کار می کند:
⦁ $ sudo certbot renew –dry-run

این دستور به certbot می گوید تا گواهینامه ها را تمدید کند اما با گزینه –dry-run که باعث می شود هر گونه تغییری در certbot متوقف شود. اگر همه چیز موفقیت آمیز باشد ، خروجی زیر را مشاهده خواهید کرد:
Output
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/chat.your-domain/fullchain.pem (success)
/etc/letsencrypt/live/room.your-domain/fullchain.pem (success)
** DRY RUN: simulating ‘certbot renew’ close to cert expiry
** (The test certificates above have not been saved.)
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Running post-hook command: /etc/letsencrypt/renewal-hooks/post/key-and-cert-combiner.sh

اکنون مجوزهای TLS را برای سرور Prosody خود را دریافت کرده اید. در مرحله بعد ، فایل پیکربندی اصلی Prosody را ویرایش می کنید.
مرحله 3 – پیکربندی Prosody
Prosody گزینه های پیکربندی زیادی دارد و این در اندازه بزرگ فایل پیکربندی اصلی /etc/prosody/prosody.cfg.lua منعکس می شود. برای مدیریت این بخش از ابتدای فایل به سمت پایین کار خواهید کرد و ویرایشهایی را در فایل انجام می دهید.
قبل از شروع ویرایش یک فایل پیکربندی بزرگ ، بهتر است که یک نسخه کپی تهیه کنید تا نسخه اصلی را برای بازگشت به آن یا بازیابی داشته باشید. یک کپی از پیکربندی را با دستور cp تهیه کنید:
⦁ $ sudo cp /etc/prosody/prosody.cfg.lua /etc/prosody/prosody.cfg.lua.original

اکنون یک نسخه از فایل اصلی در /etc/prosody/prosody.cfg.lua.original دارید.
سپس ، فایل پیکربندی را با یک ویرایشگر متن باز کنید:
⦁ $ sudo nano /etc/prosody/prosody.cfg.lua

سرور prosody اکنون کاملاً نصب و پیکربندی شده است.
اکنون می توانید با یک کلاینت چت به سرور Prosody خود متصل شوید. در مرحله بعد ، شما یک کلاینت XMPP را در سیستم محلی یا تلفن هوشمند خود پیکربندی می کنید تا به سرور Prosody خود متصل شوید.
مرحله 6 – پیکربندی یک کلاینت چت XMPP
در این مرحله ، کلاینت XMPP خود را روی سرور Prosody پیکربندی می کنید. برای اتصال باید نام کاربری ، نام هاست سرور و رمز عبور خود را وارد کنید.
سرور Prosody را برای استفاده از پورت های استاندارد XMPP پیکربندی کرده اید و از امنیت TLS به طور خودکار مراقبت خواهد شد ، بنابراین نیازی به تنظیم آنها برای اتصال به کلاینت خود نخواهید داشت.
کلاینت های مختلف چت ممکن است نام کاربری ، رمز عبور و نام هاست سرور را در قالب های مختلف بخواهند. نام کاربری و نام هاست سرور بعضی اوقات مانند یک آدرس ایمیل مانند sammy@chat.your-domain کنار هم قرار می گیرند. آدرس ایمیل می تواند Username  یا XMPP Address باشد.
این تصویر صفحه ورود را برای کلاینت PSI نشان می دهد که باید نام کاربری و نام میزبان سرور در فرم آدرس ایمیل وارد شود.

در حالی که ، تصویر زیر از صفحه ورود به حساب برای سرویس گیرنده Gajim لینوکس XMPP ، نام کاربری و نام میزبان را نشان می دهد فیلدهای ورودی جداگانه داده شده است.

کلاینتان XMPP برای ورود به سیستم به جزئیات بیشتری از نام کاربری ، رمز عبور و نام میزبان سرور احتیاج ندارند. جایی که این توسط کلاینت شما پشتیبانی می شود.
نتیجه
در این مقاله شما سرور Prosody را با ویژگی های زیر تنظیم می کنید:
• رمزگذاری TLS
• اتاق های چت و گفتگوی گروهی یک به یک.
• به اشتراک گذاری فایل
همچنین یک کلاینت چت XMPP را تنظیم کرده اید تا از همه این ویژگی ها استفاده کند و با دوستان و همکاران خود چتی غنی از ویژگی ها به شما ارائه دهد.
اگر به دنبال گزینه های منبع باز دیگر برای ارتباط از راه دور هستید ، آموزش های نحوه نصب Jitsi Meet را بررسی کنید.