Ubuntu 20.04 Üzerinde Prosody XMPP Özel Sohbet Sunucusu Nasıl Kurulur & Yapılandırılır?

Prosody, Lua diliyle yazılmış ücretsiz bir açık kaynaklı XMPP sunucusudur. Hızlıdır ve sunucuyu yormaz. XMPP anlık mesajlaşma için mükemmel bir protokoldür. Bu eğiticid, Ubuntu 20.04 üzerinde Prosody XMPP sunucusunun nasıl kurulacağını ve yapılandırılacağını hep beraber öğreneceğiz. Bu eğitimi tamamladıktan sonra sizinde Ubuntu 20.04 işletim sisteminde çalışan kendi sohbet sunucunuz olacaktır.

Ön gereksinimler;

  • Temiz Ubuntu 20.04 LTS kurulu bir sunucu (DigitalOcean ve Vultr tavsiyemdir)
  • DNS kayıtları yapılandırılmış bir alt alan adı (Let’s Encrypt SSL sertifikası için)
  • root ya da sudo yetkilerine sahip bir kullanıcı ile SSH erişimi
  • sohbet.sizinalanadiniz.com A etki alanı yukarıda belirtilen sunucuya hedef gösterilmelidir.

1. Adım: Prosody’yi Ubuntu 20.04’e yükleyin

Prosody, varsayılan Ubuntu deposunda bulunur. Prosody ekibi ayrıca bir paket deposu bulundurur. En son sürümü almak istiyorsanız, Prosody deposunu aşağıdaki komutla eklemeniz gerekir.

echo 'deb https://packages.prosody.im/debian focal main' | sudo tee /etc/apt/sources.list.d/prosody.list

Ardından, APT paket yöneticisinin bu depodan indirilen paketlerin bütünlüğünü doğrulamasına izin veren Prosody genel anahtarını indirmek için aşağıdaki komutu çalıştırın.

wget https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add -

Ardından, yerel paket dizinini güncelleyin ve Prosody’nin en son sürümünü yükleyin.

sudo apt update
sudo apt upgrade -y
sudo apt install prosody -y

Kurulduktan sonra, Prosody otomatik olarak başlatılacaktır. Durumunu aşağıdaki komutla kontrol edebilirsiniz:

systemctl status prosody

Çıktı şu şekilde olmalı:

● prosody.service - Prosody XMPP Server
     Loaded: loaded (/lib/systemd/system/prosody.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2020-05-14 00:41:10 UTC; 34s ago
       Docs: https://prosody.im/doc
   Main PID: 2912 (lua5.2)
      Tasks: 1 (limit: 9513)
     Memory: 4.1M
     CGroup: /system.slice/prosody.service
             └─2912 lua5.2 /usr/bin/prosody -F

May 14 00:41:10 sohbet systemd[1]: Started Prosody XMPP Server.

Çalışmıyorsa, şu komutla siz başlayabilirsiniz:

sudo systemctl start prosody

Sistem açılışında otomatik başlatmayı etkinleştirmek için,

sudo systemctl enable prosody

2. Adım: Güvenlik Duvarında Bağlantı Noktalarını Açın

Varsayılan olarak, aşağıdaki komutla görülebileceği gibi Prosody, genel IP adresinin 5269 ve 5222 numaralı TCP bağlantı noktasını dinler. (Ubuntu’nuzda netstat komutu yoksa, sudo apt install net-tools -y ile yükleyebilirsiniz.)

sudo netstat -lnptu | grep lua
tcp        0      0 0.0.0.0:5222            0.0.0.0:*               LISTEN      2912/lua5.2         
tcp        0      0 0.0.0.0:5269            0.0.0.0:*               LISTEN      2912/lua5.2         
tcp6       0      0 :::5222                 :::*                    LISTEN      2912/lua5.2         
tcp6       0      0 :::5269                 :::*                    LISTEN      2912/lua5.2         

  • Bağlantı noktası 5222, istemciden sunucuya bağlantı için kullanılır.
  • Bağlantı noktası 5269, sunucudan sunucuya bağlantı için kullanılır.

Ubuntu’da UFW güvenlik duvarını etkinleştirdiyseniz, yukarıdaki bağlantı noktalarını aşağıdaki komutla açmanız gerekir.

sudo apt-get install ufw -y
ufw allow OpenSSH
ufw allow 5222,5269/tcp
ufw --force enable

3. Adım: Prosody XMPP Sunucusunu Yapılandırın

Ana yapılandırma dosyasını nano gibi bir komut satırı metin düzenleyicisiyle açın.

sudo nano /etc/prosody/prosody.cfg.lua

Module_enabled {...} bölümünde, belirli bir modülü etkinleştirmek için bir satırı kaldırabilir veya belirli bir modülü devre dışı bırakmak için bir satırı işareti ekleyebilirsiniz.

Her modülün ne yaptığını anlatan bir açıklaması vardır. Örneğin, HTTP Üzerinden Eş Zamanlı Çift Yönlü Akışları temsil eden BOSH ( B idirectional-streams O ver S ynchronous H TTP) modülü gibi. Bu modül HTTP üzerinden XMPP iletişimine izin verir. Bosh modülünü etkinleştirelim:

Ardından, yapılandırma dosyası sayfasını aşağı kaydırın. XMPP istemcisinden hesap kaydına izin vermek istiyorsanız allow_registration öğesini true olarak ayarlayın. Bunu yapmadan önce kötüye kullanımı nasıl önleyeceğinizi düşünnemiz ve bilmeniz gerektiğini unutmayın. XMPP’de yeniyseniz, muhtemelen XMPP istemcilerinin hesapları kendilerinin oluşturmalarına izin vermek istemezsiniz :slight_smile:

Olur da eğer isterseniz ilgili kısımı şu şekilde değiştirmelisiniz:

allow_registration = true;

Prosody, aşağıdaki iki satırla gösterdiğim şifreli iletişime de izin verir.

c2s_require_encryption = true
s2s_require_encryption = true

Ancak, bağlantıların şifrelenebilmesi için sanal bir ana bilgisayar oluşturmanız ve TLS sertifikasını yüklememiz gerekir. Varsayılan olarak, Prosody’de şu satırda gösterildiği gibi yalnızca bir localhostsanal ana bilgisayar vardır.

VirtualHost "localhost"

Şimdi sohbet.sizinalanadiniz.com gibi başka bir sanal sunucu oluşturalım. Bu dosyaya aşağıdaki satırı ekleyin.

VirtualHost "sohbet.sizinalanadiniz.com"

Dosyayı kaydedip kapatın. Şimdi Let’s Encrypt’den güvenilir bir TLS sertifikası almamız ve yüklememiz gerekiyor.

Henüz çalışan bir web sunucunuz yoksa, bir web sunucusu ile TLS sertifikası almak ve yüklemek diğer yöntemleri kullanmaktan daha kolay olduğu için bir tane (Nginx) yüklemenizi öneririm.

sudo apt install nginx python3-certbot-nginx -y

Nginx durumunu kontrol edin:

sudo systemctl status nginx

Şöyle görünmeli:

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2020-05-14 01:22:23 UTC; 10min ago
       Docs: man:nginx(8)
    Process: 18574 ExecReload=/usr/sbin/nginx -g daemon on; master_process on; -s reload (code=exited, status=0/SUCCESS)
   Main PID: 18212 (nginx)
      Tasks: 5 (limit: 9513)
     Memory: 7.7M
     CGroup: /system.slice/nginx.service
             ├─18212 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ├─19647 nginx: worker process
             ├─19648 nginx: worker process
             ├─19649 nginx: worker process
             └─19650 nginx: worker process

May 14 01:22:23 sohbet systemd[1]: Starting A high performance web server and a reverse proxy server...
May 14 01:22:23 sohbet systemd[1]: Started A high performance web server and a reverse proxy server.
May 14 01:23:49 sohbet systemd[1]: Reloading A high performance web server and a reverse proxy server.
May 14 01:23:49 sohbet systemd[1]: Reloaded A high performance web server and a reverse proxy server.

Güvenlik duvarında yapılandırın:

sudo ufw allow 'Nginx Full'
ufw --force enable

4. Adım: Nginx Web Sunucusu ile TLS Sertifikası Alın

Let’s Encrypt sertifikasını almadan önce sohbet.sizinalanadiniz.com için bir Nginx sanal barındırıcınız olması gerekir. Sanal ana makine dosyasını oluşturun:

sudo nano /etc/nginx/conf.d/prosody.conf

Ardından aşağıdaki metni dosyaya yapıştırın. sohbet.sizinalanadiniz.com adresini gerçek alan adınızla değiştirin. Bu alan için DNS A kaydı ayarlamayı unutmayın.

server {
      listen 80;
      listen [::]:80;
      server_name sohbet.sizinalanadiniz.com;

      root /var/www/prosody/;

      location ~ /.well-known/acme-challenge {
         allow all;
      }
}

Dosyayı kaydedip kapatın. Ardından sanal ana bilgisayar dizinini oluşturun.

sudo mkdir /var/www/prosody

www-data’yı (Nginx kullanıcısı) web dizininin sahibi olarak ayarlayın.

sudo chown www-data:www-data /var/www/prosody -R

Değişikliklerin etkili olması için Nginx’i yeniden başlatın:

sudo systemctl reload nginx

Sanal ana bilgisayar oluşturulduktan ve etkinleştirildikten sonra, Let’s Encrypt TLS sertifikasını almak ve yüklemek için aşağıdaki komutu kendinize göre düzenleyerek çalıştırın.

Ubuntu 20.04 sürümünde Certbot hatası bulunmakta. Bu nedenle biz asıl kaynağından derleyip çalıştıracağız.

cd
apt install python -y
apt-get install python3-venv -y
git clone https://github.com/certbot/certbot
cd certbot
python tools/venv3.py
sudo /root/certbot/venv3/bin/certbot --nginx

Komut sonrası sizden posta adresiniz vs. istenecektir gerekli bilgileri girdikten sonra şöyle bir çıktı görmelisiniz:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled
https://sohbet.sizinalanadiniz.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=sohbet.sizinalanadiniz.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/sohbet.sizinalanadiniz.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/sohbet.sizinalanadiniz.com/privkey.pem
   Your cert will expire on 2020-08-12. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. 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

5. Adım: Prosody’ye TLS Sertifikası Yükleyin

sudo nano /etc/prosody/prosody.cfg.lua

Prosody sanal sunucu alanına gidin ve TLS sertifikasını ve anahtar dosyasını ekleyin.

        ssl = {
                key = "/etc/letsencrypt/live/sohbet.sizinalanadiniz.com/privkey.pem";
                certificate = "/etc/letsencrypt/live/sohbet.sizinalanadiniz.com/fullchain.pem"; 
        }

Şöyle görünmelidir:

Dosyayı kaydedip kapatın. Prosody XMPP sunucusu prosody kullanıcısı olarak çalıştığından, prosody kullanıcısının TLS sertifikasını ve anahtar dosyasını aşağıdaki komutla okumasına izin vermeliyiz.

apt install acl -y
sudo setfacl -R -m u:prosody:rx /etc/letsencrypt/

6. Adım: Kullanıcı Hesaplarını Oluşturun

Prosody XMPP sunucusu için kullanıcı hesabı aşağıdaki komut kullanılarak oluşturulabilir. Bir parola girmeniz ve doğrulamanız istenecektir.

sudo prosodyctl adduser [email protected]

Parolayı değiştirmek için (Opsiyonel alan ileride lazım olabilir :slight_smile: ):

sudo prosodyctl passwd [email protected]

7. Adım: Prosody Yeniden Başlatın

Yapılandırma dosyası sözdizimini çalıştırarak kontrol edin:

sudo prosodyctl check config

Çıktı:

Checking config...
Done.

All checks passed, congratulations!

Sözdizimi doğruysa, değişikliklerin etkili olması için Prosody uygulamasını yeniden başlatın.

sudo systemctl restart prosody

8. Adım: XMPP İstemcisini Yapılandırın

Ubuntu üzerinde kurmak için tercihinize göre:

sudo apt install pidgin -y

ya da

sudo apt install empathy -y

Windows için:

Şu adresten ilgili programı indirip kurabilirsiniz.

Hesap ekleme işlemleri:

Ubuntu 20.04 Üzerinde Prosody XMPP Özel Sohbet Sunucusu Nasıl Kurulur & Yapılandırılır (1)

BOSH kurun

Daha önce açıkladığımız gibi, BOSH XMPP’yi HTTP üzerinden, yani bir web tarayıcısında kullanmanıza izin verir. Örneğin, Jitsi Meet video konferans yazılımı Prosody’yi web sayfalarına entegre etmek için BOSH kullanır, böylece katılımcılar çevrimiçi bir video toplantısına katılırken yazılı sohbet edebilir.

BOSH modülünü etkinleştirdiyseniz, Prosody yapılandırma dosyasını (/etc/prosody/prosody.cfg.lua) düzenleyin ve yapılandırma dosyasının sonuna aşağıdaki iki satırları ekleyin.

sudo nano /etc/prosody/prosody.cfg.lua

Şu kısmı bulun:

s2s_secure_auth = false

Şunları hemen altına ekleyin:

consider_bosh_secure = true;
cross_domain_bosh = true;
https_ssl = {
        certificate = "/etc/letsencrypt/live/sohbet.sizinalanadiniz.com/fullchain.pem";
        key = "/etc/letsencrypt/live/sohbet.sizinalanadiniz.com/privkey.pem";
    }

Ne nedir, ne işe yarar?:

  • İlk satır güvenli HTTPS bağlantısını zorunlu kılar.
  • İkinci satır, isteklerin herhangi bir alan adından gelmesine izin vermek için BOSH yanıtlarına COR üst bilgileri ekler.
  • https_ssl paramatresi, BOSH hizmeti için TLS sertifikasını ve anahtar dosyasını belirtir.

Şöyle görünmelidir:

Ubuntu 20.04 Üzerinde Prosody XMPP Özel Sohbet Sunucusu Nasıl Kurulur & Yapılandırılır (13)

Dosyayı kaydedip kapatın. Ardından Prosody’yi yeniden başlatın.

sudo systemctl restart prosody

Ubuntu sunucusunda UFW güvenlik duvarını etkinleştirdiyseniz, aşağıdaki komutla 5280 ve 5281 numaralı bağlantı noktasını açmanız gerekir.

sudo ufw allow 5280,5281/tcp

Bu öğreticiyi bitirdiğinizde BOSH uç noktası aşağıdaki adreste yer alacaktır. bağlantı noktası 5280 düz metin HTTP, bağlantı noktası 5281 HTTPS içindir.

http://sohbet.sizinalanadiniz.com:5280/http-bind

ya da

https://sohbet.sizinalanadiniz.com:5281/http-bind

BOSH uç noktası, istemci tarafından XMPP sunucusuna HTTP üzerinden bağlanmak için kullanılan bir adrestir.

HTTP:

HTTPS:

Çok Kullanıcılı Sohbet Odası

Bir MUC (Çok Kullanıcılı Sohbet) etkinleştirmek için Prosody yapılandırma dosyasına aşağıdaki satırı ekleyin. konferans.sizinalanadiniz.com’u tercih ettiğiniz alt alan adıyla değiştirin.

sudo sudo nano /etc/prosody/prosody.cfg.lua
Component "konferans.sizinalanadiniz.com" "muc"
     restrict_room_creation = "admin"

İkinci satır, yalnızca yöneticinin oda oluşturmasına izin verecektir. XMPP sunucusu için yönetici tanımlamak için, önce yukarıda gösterildiği gibi sudo prosodyctl adduser komutunu kullanarak hesap oluşturmanız gerekir. Ardından yapılandırma dosyasında hesabı aşağıdaki gibi yönetici {…} bölümüne ekleyin.

admins = { "[email protected]" }

Yapılandırma dosyası sözdizimini çalıştırarak kontrol edin:

sudo prosodyctl check config

Çıktı:

Checking config…
Done.

All checks passed, congratulations!

Sözdizimi doğruysa, değişikliklerin etkili olması için Prosody uygulamasını yeniden başlatın.

sudo systemctl restart prosody

TLS Sertifikasını Otomatik Yeniletin

TLS sertifikasını otomatik olarak yenilemek için Cron işi oluşturabilirsiniz. Kök kullanıcının crontab dosyasını açın.

sudo crontab -e

Editör seçimi yaptıktan sonra dosyanın en altına şu satırı ekleyin:

@daily certbot renew --quiet && systemctl reload postfix dovecot nginx

Şöyle görünmeli:

Ubuntu 20.04 Üzerinde Prosody XMPP Özel Sohbet Sunucusu Nasıl Kurulur & Yapılandırılır (12)

Sorun giderme

Prosody için ana günlük dosyası /var/log/prosody/prosody.log'dur. Ayrıca bir hata günlüğü /var/log/prosody/prosody.err var. Prosody beklediğiniz gibi çalışmıyorsa, hata günlüğü dosyalarını kontrol edebilirsiniz.

Şimdi sizleri Pidgin arayüzü ve bir kaç özellikle baş başa bırakayım :slight_smile: