szukaj

10.10.2017 | 07:20

avatar

krystian

Jak postawić swój własny bezpieczny serwer komunikatora

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ć.

Artykuł pod patronatem Aruba Cloud

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 pulpitswój serwer WWWjak monitorować zmiany w plikachjak 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:

Kliknij tutaj, aby wyświetlić treść z YouTube.
Dowiedz się więcej w polityce prywatności.

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.

Panel administracyjny usługi eJabberd

Panel administracyjny usługi eJabberd

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ł.

 

Powrót

Komentarze

  • avatar
    2017.10.10 08:20 Maciek

    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?

    Odpowiedz
    • avatar
      2017.10.10 09:35 Janek

      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.

      Odpowiedz
  • avatar
    2017.10.10 08:57 t0mcio

    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”?

    Odpowiedz
    • avatar
      2017.10.10 14:27 Grzegorz

      @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$.

      Odpowiedz
  • avatar
    2017.10.10 11:10 Artur

    Macie jeszcze coś w zanadrzu co zestawi wideorozmowę (najlepiej szyfrowaną p2p)? Kolega mówił, że Skype zapisuje hash głosu i w ogóle.

    Odpowiedz
  • avatar
    2017.10.10 12:48 kayo

    To szyfrowanie OTR już jest złe że trzeba własny serwer?

    Odpowiedz
    • avatar
      2017.10.10 21:02 zakius

      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

      Odpowiedz
  • avatar
    2017.10.10 15:08 Adam

    A jak najlepiej dodatkowo zabezpieczyć rozmowy (poza opisanym w powyżej SSL)? OpenPGP, OTR czy może lepiej OMEMO?

    Odpowiedz
  • avatar
    2017.10.10 16:34 olek

    To może ktoś napisze jak rozmawiają Prezydencji.Szyfrowanie symetryczne jest tam używane tylko problem jest z przekazaniem klucza.

    Odpowiedz
    • avatar
      2017.10.10 19:27 Zenek Martuniuk

      Dobry pomysł. Sam się kiedyś nad tym zastanawiałem.

      Odpowiedz
  • avatar
    2017.10.10 17:31 Hihihihihih

    Czemu XMPP, a nie Matrix? :)

    Odpowiedz
  • avatar
    2017.10.12 15:27 tml

    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?

    Odpowiedz
    • avatar
      2017.10.16 22:12 X

      Nie rozumiem… nie znasz protokołu XMPP a opiniujesz, że aktualny parę lat temu ? ;)

      Odpowiedz
      • avatar
        2017.10.17 19:30 tml

        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 ;)

        Odpowiedz
    • avatar
      2021.11.19 14:56 KrisKros

      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.

      Odpowiedz
  • avatar
    2019.09.18 20:34 Adam

    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.

    Odpowiedz
    • avatar
      2020.02.20 15:20 odp

      albo firewall albo NAT.

      Odpowiedz
  • avatar
    2020.04.13 11:24 Maciej

    Problemem obecnie jest łączność s2s – mnie nie udało się wygenerować certyfikatu tak aby nawiązać łączność.

    Odpowiedz

Zostaw odpowiedź

Jeśli chcesz zwrócić uwagę na literówkę lub inny błąd techniczny, zapraszamy do formularza kontaktowego. Reagujemy równie szybko.

Jak postawić swój własny bezpieczny serwer komunikatora

Komentarze