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

dodał 10 października 2017 o 07:20 w kategorii HowTo  z tagami:
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:

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 [email protected] 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ł.