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
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 muhammed@sohbet.sizinalanadiniz.com
Parolayı değiştirmek için (Opsiyonel alan ileride lazım olabilir ):
sudo prosodyctl passwd muhammed@sohbet.sizinalanadiniz.com
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:
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:
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.
ya da
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 = { "muhammed@sohbet.sizinalanadiniz.com" }
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:
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