Wiele doniesień medialnych z ostatnich lat pokazuje, jak ważna jest możliwość prywatnej komunikacji i jak trudno jest ją zapewnić. Gdy każdy podsłuchuje każdego ostatnim systemem godnym zaufania pozostaje własny serwer.
Na fali doniesień o inwigilacji stosowanej przez amerykańskie NSA (a i zapewne także każdą inną służbę o podobnych możliwościach) bardzo rozwinął się rynek prywatnych komunikatorów. Niektóre z nich zdecydowanie warte są uwagi (jak chociażby Signal czy Threema), jednak wiele z nich ciągle szuka równowagi między użytecznością a prywatnością lub wprost stawia na wygodę, ignorując bezpieczeństwo. Hasło „Gdy szukasz prywatności, zapewnij ją sobie sam” może oznaczać, że trzeba swój komunikator napisać samodzielnie – jednak tego nie polecamy nawet osobom, które posiadają wystarczające umiejętności techniczne. Lepiej skorzystać ze sprawdzonego rozwiązania na własnym serwerze – czyli popularnego Jabbera, dlatego dzisiaj pokażemy Wam, jak swój własny serwer tej usługi na maszynie Aruby postawić.
We współpracy z firmą ArubaCloud pokazaliśmy Wam, jak postawić swój serwer backupów, jak skonfigurować własny serwer VPN i podłączyć do niego komputer, telefony komórkowe oraz domowy ruter a także jak schować się przed cenzurą sieci i jak zacząć serwer zabezpieczać, jak postawić swój własny zdalny pulpit, swój serwer WWW, jak monitorować zmiany w plikach, jak zablokować reklamy na komórce, jak skonfigurować bezpieczną kopię zapasową, jak zabezpieczyć logowanie do serwera za pomocą jednorazowych tokenów lub za pomocą klucza Yubikey a także jak monitorować swoje systemy w dwóch odsłonach.
Jeśli nie macie jeszcze swojego własnego serwera, to jest to dobra okazja by się w taki wyposażyć. Aruba oferuje dwa miesiące korzystania ze swojego podstawowego serwera gratis – a po zakończeniu promocji będzie on Was kosztował zaledwie 4 złote miesięcznie. Co więcej Aruba ma już serwerownię w Warszawie. Instrukcję jak krok po kroku skorzystać z promocji i uruchomić swój serwer znajdziecie w tym artykule. Jeśli macie już swój serwer – to zapraszamy do lektury kolejnych akapitów.
Instalacja i konfiguracja serwera eJabberd XMPP
Na początek film dla tych z Was, którzy wolą sobie popatrzeć, a poniżej opis krok po kroku:
Dla dystrybucji Ubuntu pakiet ejabberd znajduje się w domyślnym repozytorium pakietów. Dla innnych dystrybucji takich jak CentOS pakiet rpm można pobrać ze strony producenta. Instalujemy pakiet ejabberd za pomocą apt:
apt install ejabberd
Przed uruchomieniem usługi powinniśmy ją odpowiednio skonfigurować. Plik konfiguracyjny ejabberd.cfg zawiera aż 803 linie – zmienimy tylko niektóre ustawienia, lecz zachęcamy do przejrzenia całego pliku konfiguracyjnego w celu dostosowania usługi do własnych potrzeb.
Edytujemy plik konfiguracyjny ejabberd.yml który znajduje się w katalogu /opt/ejabberd/:
sudo vi /etc/ejabberd/ejabberd.yml
Zmieniamy poziom logowania z Info na Warning. Jest to opcjonalny krok, dzięki któremu w logach będą zapisywanie zdarzenia o poziomie Warning (i niżej). Zdarzenia te powinny zwrócić naszą uwagę, a nie umkną nam podczas wielu zdarzeń INFO.:
## loglevel: Verbosity of log files generated by ejabberd. ## 0: No ejabberd log at all (not recommended) ## 1: Critical ## 2: Error ## 3: Warning ## 4: Info ## 5: Debug loglevel: 3
Następnie ustawiamy domeny obsługiwane przez nasz serwer Jabbera:
## hosts: Domains served by ejabberd. ## You can define one or several, for example: ## hosts: ## - "example.net" ## - "example.com" ## - "example.org" hosts: - "jabber.z3s.pl"
Po ustawieniu wartości w zmiennej hosts należy ustawić odpowiednią domenę w ACL:
acl: admin: user: - "admin": "jabber.z3s.pl"
Jeśli nie chcemy, aby usługa ejabberd nawiązywała połączenia „s2s” (server-to-server) z innymi serwerami XMPP, komentujemy następujące linie:
# - # port: 5269 # ip: "::" # module: ejabberd_s2s_in
Po wprowadzonych zmianach uruchamiamy usługę ejabberd:
sudo service ejabberd start
Usługą jabber możemy zarządzać z linii poleceń za pomocą polecenia `ejabberdctl` lub za pomocą panelu administracyjnego , który dostępny jest pod adresem https://<adres_ip>:5280/admin.
Aby uzyskać dostęp do panelu administracyjnego należy zmienić hasło dla konta administratora:
sudo ejabberdctl change_password admin jabber.z3s.pl TutajNależyPodaćBezpieczneHasło
Aby uzyskać dostęp do panelu administracyjnego w przeglądarce podajemy adres https://<adres_ip>:5280/admin i logujemy się podając nazwę użytkownika admin@localhost wraz z określonym przez nas hasłem.
Certyfikat TLS
Usługa ejabberd umożliwia szyfrowanie komunikacji za pomocą certyfikatów TLS. Certyfikaty te mogą być użyte w połączeniach typu c2s (client-to-server) oraz s2s (server-to-server). Opisywaliśmy już jak wygenerować certyfikaty do usługi Apache2 za pomocą Let’s Encrypt. Korzystając ponownie z Let’s Encrypt wygenerujemy certyfikat dla połączeń typu c2s.
Dodajemy repozytorium:
sudo add-apt-repository ppa:certbot/certbot
Instalujemy pakiet certbot:
sudo apt update sudo apt install certbot
Po zainstalowaniu wymaganego oprogramowania możemy przystąpić do wygenerowania certyfikatów. Generujemy certyfikaty dla domeny jabber.z3s.pl:
sudo certbot certonly -d jabber.z3s.pl --standalone
Ejabberd wymaga aby cała ścieżka certyfikacji oraz klucz prywatny były zapisane w jednym pliku.
sudo cd /etc/letsencrypt/live/jabber.z3s.pl sudo cat privkey.pem fullchain.pem > /etc/ejabberd/ejabberd.pem sudo chmod 640 /etc/ejabberd/ejabberd.pem
Edytujemy raz jeszcze plik /etc/ejabberd/ejabberd.yml i wprowadzamy następujące zmiany:
listen: - port: 5222 ip: "::" module: ejabberd_c2s certfile: "/etc/ejabberd/ejabberd.pem" starttls: true starttls_required: true protocol_options: - "no_sslv2" - "no_sslv3" - "no_tlsv1" - "no_tlsv1_1" ciphers: "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256" max_stanza_size: 65536 shaper: c2s_shaper access: c2s zlib: true resend_on_timeout: if_offline
Sprawdzamy certyfikat TLS
Narzędzie dostępne pod tym adresem umożliwia sprawdzenie certyfikatu serwera jabber. Test można wykonać raz na godzinę dla określonego serwera.
Pamiętajmy o wspomnianym wcześniej panelu administratora dostępnym na porcie 5280/tcp. Możemy wyłączyć go na dwa sposoby: komentując następujące linie:
- port: 5269 ip: "::" module: ejabberd_s2s_in
lub za pomocą prostego firewall’a:
iptables -A INPUT -p tcp --dport 5280 -j DROP
Jeśli korzystamy z certyfikatów Let’s Encrypt, certyfikaty należy odnawiać raz na 90 dni.
Podsumowanie
Postawiliście właśnie swój własny serwer Jabbera. Pozostaje wybrać jednego z wielu klientów tej usługi i zaprosić na serwer współpracowników lub kolegów. Warto także poczytać o bezpieczeństwie serwera, by nie skończyło się tak jak w przypadku usługi Jabbim.pl / Jabster.pl. Nie zapominajcie tez o szyfrowaniu, bo przecież nie po to stawialiście serwer, by Was teraz ktoś podsłuchał.
Komentarze
Czy jeśli smutni panowie odwiedza lets encrypt i zażądają wygenerowania klucza, to nie będzie to równe z postawieniem mam on the middle? Skoro NSA może inwigilować każdego, to czemu nie może żądać generowania certyfikatów dla nich aby uzyskać dostęp do szyfrowanych danych?
oni nie muszą z letsencrypt gadać, wystarczy dowolny inny rejestrator żeby podpisał twoją domenę. dopóki przeglądarka ma ich CA raczej nie zauważysz.
i takie rzeczy się już zdarzały, np dla gmail. tutaj ratunkiem może być cert pinning. Oczywiście rejestrator po czymś takim znikał z rynku bo wyleciał z przeglądarek.
4 zł netto. Należałoby to w tekście p0dać, bo dla osób prywatnych wychodzi prawie 5. Z innej beczki, czy adresy IPv4 z warszawskiej serwerowni Aruby identyfikują się jako tzw. „polskie”?
@t0mcio nic nie stoi na przeszkodzie skonfigurowac serwer na innych maszynach niekoniecznie na Arubie. Mala podpowiedz bedzie rowniez dzialac na innych VPS/dedykach, nawet za 12$/rok, a jak dobrze poszukasz to nawet 1$.
Macie jeszcze coś w zanadrzu co zestawi wideorozmowę (najlepiej szyfrowaną p2p)? Kolega mówił, że Skype zapisuje hash głosu i w ogóle.
XMPP obsługuje wideokonferencje.
Jingle nie XMPP ;)
Jitsi
https://tox.chat/
rocketchat
To szyfrowanie OTR już jest złe że trzeba własny serwer?
dopóki komunikacja nie odbywa się p2p to nie masz żadnej pewności, a jak się odbywa to może narazić ciebie i twoje urządzenie przez ujawnienie adresu IP (jasne, to niby nic tajnego i wszystkie serwery, z którymi się komunikujemy je znają, no ale… no i oczywiście można ustawić sobie proxy, czy nawet cebulkę żeby tego uniknąć)
zależy czego kto potrzebuje
A jak najlepiej dodatkowo zabezpieczyć rozmowy (poza opisanym w powyżej SSL)? OpenPGP, OTR czy może lepiej OMEMO?
To może ktoś napisze jak rozmawiają Prezydencji.Szyfrowanie symetryczne jest tam używane tylko problem jest z przekazaniem klucza.
Dobry pomysł. Sam się kiedyś nad tym zastanawiałem.
Czemu XMPP, a nie Matrix? :)
Artykuł fajny i pomocny, ale jakby aktualny parę lat temu.
Dzisiaj komunikator to coś więcej niż gadanie. Oprócz paru słów czasem jest potrzeba przesłać zdjęcie, pozycję GPS. Są jakieś klienty XMPP, które to potrafią? No i czy sam serwer eJabberd to obsłuży?
Nie rozumiem… nie znasz protokołu XMPP a opiniujesz, że aktualny parę lat temu ? ;)
No nie znam protokołu, masz rację.. i niekoniecznie chcę go znać ;) Mam na myśli, że tego typu opisów jest od dawna sporo w sieci, a ten nic nowego w sumie nie wnosi. Prawdę mówiąc protokół jest mi obojętny, jesli tylko będzie dość popularny i otwarty. Po prostu chętnie poczytałbym jak postawić własny serwer komunikatora, który obsłuży również przesyłanie obrazków i inne bajery ;)
Dlatego albo decydujesz się na mniejszą wygodę, żeby być bardziej prywatnym, albo odwrotnie. Bo im więcej masz bajerów i kod który każdy bajer musi Ci w czasie rzeczywistym zaszyfrować tym spada wydajność i dłuży się czas wykonania, co sumasumarum czyni taki program bezużytecznym. Trochę jakbyś pomyślał byłoby fajnie.
Witam, próbuje postawić serwer z jabberem na raspberry i wszystko przebiega dobrze do czasu az w przegladarke wpisuje ipraspberry:5280/admin. Serwer nie daje odpowiedzi. Czy ktoś mógłby podpowiedzieć? Dziękuję i pozdrawiam.
albo firewall albo NAT.
Problemem obecnie jest łączność s2s – mnie nie udało się wygenerować certyfikatu tak aby nawiązać łączność.