20
POCZĄTKI
HAKIN9 2/2010
R
ozwiązaniem naszego problemu jest
stworzenie własnej linii komunikacji
niezależnej od serwerów zewnętrznych.
Dla zapewnienia względnego bezpieczeństwa
trzeba zwrócić uwagę na trzy elementy. Po
pierwsze końcówki sieci komunikacyjnej,
czyli komputery użytkowników. Jeżeli
zabezpieczenia komputera same w sobie
zostały skompromitowane, nic co do niego
trafia nie jest bezpieczne. Element drugi to
połączenie z serwerem – przechodzące
przez dżunglę Internetu dane są narażone na
podsłuchanie, a nawet podmianę. Ostatnim
elementem łańcucha jest serwer, z którym
łączą się klienci. W rzeczywistości pozostaje
nam wiecznie najsłabszy element każdego
łańcucha, człowiek. Jednak tego problemu nikt
jeszcze nie rozwiązał.
Serwer Openfire, jak i klienta Spark, można
pobrać za darmo ze strony internetowej
projektu. Jako klientów można wykorzystać
komunikatory Psi czy Exodus. Program
praktycznie od ręki daje nam kanał komunikacji
niezależny od serwerów zewnętrznych. Osobną
kwestią jest zabezpieczenie połączenia z
serwerem i wykorzystanie dodatkowych
możliwości serwera. Kwestią komputera i
człowieka nie będziemy się tu zajmować.
Instalacja
Instalacja zarówno serwera, jak i klienta
jest banalnie prosta. Zależnie od systemu
SYLWESTER
ZDANOWSKI
Z ARTYKUŁU
DOWIESZ SIĘ
co oferuje Openfire,
jak zainstalować i uruchomić
serwer,
jak w pełni wykorzystać
możliwości serwera,
jak zabezpieczyć połączenie.
CO POWINIENEŚ
WIEDZIEĆ
jak instalować
oprogramowanie,
dla kogo tworzysz połączenie.
wystarczy pobrać odpowiedni instalator lub
program w formie źródłowej. Dla Windowsa
mamy standardową instalację dwóch
kliknięć na kolorową ikonkę. W przypadku
Linuksa podstawą są pliki źródłowe, można
jednak znaleźć pakiety przygotowane dla
konkretnych dystrybucji. Dla dystrybucji Debian
wystarcza wówczas polecenie
dpkg -i
<nazwa _ pakietu>
. Oprogramowanie wraz z
konfiguracją można usunąć poleceniem
dpkg
--purge openfire
. Ponadto dobrą pomoc
można znaleźć w dokumentacji projektu,
chociaż brakuje w niej paru szczegółów.
Początkujący użytkownik systemu Linux,
chcący w lokalnej sieci uruchomić Openfire,
niestety poczuje się zagubiony.
Kiedy zakończy pracę instalator programu,
należy przejść przez konfigurację, w jej ramach
utworzymy bazę danych użytkowników.
Dopiero od tego momentu możliwe
będzie połączenie klientów. Do korzystania
z konfiguracji poprzez przeglądarkę
niepotrzebny jest serwer WWW. Strona
dostępna jest pod adresem IP komputera na
porcie 9090 np. 192.168.1.1:9090.
Konfigurację rozpoczynamy od wybrania
języka. Dalej możemy zmienić domyślne porty,
na których dostępny jest panel administratora.
Z reguły niepotrzebne jest wprowadzanie
jakichkolwiek zmian. Chociaż zmiana portu
jest sposobem na utrudnienie analizy serwera
przez napastnika. Podejście to tyczy się równie
Stopień trudności
Openfire –
własny kanał
komunikacji
Komunikacja za pośrednictwem komunikatorów tekstowych
jest współcześnie dość popularna. Z tego rozwiązania
korzystają pracownicy wielu firm do przesyłania służbowych
informacji. Jak zabezpieczyć taką komunikację przed
podglądem?
21
OPENFIRE – WŁASNY KANAŁ KOMUNIKACJI
HAKIN9
2/2010
dobrze SSH czy ftp, ograniczeniem
jest pytanie: Jak bardzo zależy nam
na prostocie, ciszy i spokoju? Zmiana
domyślnych portów z reguły kończy się
ciągłymi telefonami od niezadowolonych
użytkowników.
W kolejnym kroku możemy
wybrać bazę danych, wbudowaną lub
zewnętrzną. W przypadku wbudowanej
bazy danych mechanizm jest
znacznie prostszy. Niepotrzebne są
żadne dodatkowe czynności. Jednak
tracimy możliwości zewnętrznej
bazy danych jak wewnętrzna
kontrola uprawnień czy mechanizmy
tworzenia kopii zapasowych. Bez
zewnętrznej bazy danych nie możliwe
jest również tworzenie klastrów,
co przy tendencji wzrostowej dla
komunikacji zamyka drogę prostego
zwiększenia przepływności. Dlatego
perspektywicznym rozwiązaniem jest
konfiguracja bazy zewnętrznej.
Konieczne jest przygotowanie bazy
danych oraz użytkownika, z którego
korzystać będzie serwer. Można wybrać
jedną z wielu obsługiwanych baz w tym
MySQL, Oracle czy Postgres. Zadania
wewnątrz MySQL można wykonać
zgodnie z Listingiem 1. Po zalogowaniu
się do MySQL polecenia kolejno tworzą
bazę danych, użytkownika i nadają
mu uprawnienia. Ostatnie polecenie
powoduje wprowadzenie nowych
uprawnień w życie. Należy zwrócić uwagę,
iż na Listingu 1 tworzony użytkownik jest
ograniczony do jednego adresu IP. Należy
to uwzględnić, gdy serwery Openfire
znajdują się na innych maszynach niż
baza danych. Wszystko pięknie, ale
nasza baza danych jest absolutnie pusta.
Zawartość bazy należy zaimportować
z plików zainstalowanych razem z
programem w przypadku Linuksa z
bazą MySQL wystarczy polecenie cat
/usr/share/openfire/resources/database/
openfire_mysql.sql | mysql -p openfire. W
katalogu /user/share/openfire znajdują
się wszystkie pliki serwera.
Konfiguracja pozwala również na
zintegrowanie naszej komunikacji
z serwerami Active Directory lub
OpenLDAP. Rozwiązania takie
implementowane niezależnie od
omawianego Openfire są użyteczne
dla często przemieszczających się
pracowników.
W ostatnim oknie możemy podać
adres e-mail administratora oraz hasło
do panelu administratora. Niezależnie
od tego jaki adres mail zostanie podany
do panelu administratora można
się zalogować jako admin. Jednak
przed pierwszą próbą logowania
konieczny jest restart serwera, inaczej
nie zostaniemy wpuszczeni. Jest to
pierwsza z wielu sytuacji, w której
trzeba wykazać cierpliwość. Pomimo, iż
skrypt restartujący serwer pokaże jego
uruchomienie, należy odczekać kilka
sekund na możliwość logowania.
Na pierwszej widocznej stronie
znajduje się kilka istotnych informacji. Po
pierwsze Openfire wykorzystuje wirtualną
maszynę Javy. Po drugie potrafi zużywać
znaczne ilości pamięci, zależnie od
obciążenia i ilości załadowanych
Listing 1.
Tworzenie bazy danych MySQL
CREATE
DATABASE
openfire
;
CREATE
USER
'open'
@
192
.
168
.
1
.
2
IDENTIFIED
BY
'haseleczko'
;
GRANT
ALL
ON
openfire
.
*
TO
'open'
@
192
.
168
.
1
.
2
;
PRIVILEGES
FLUSH;
Wszystko gra
Restartując po raz pierwszy serwer Openfire jesteśmy zmuszeni nieco poczekać na wejście do
panelu administratora. Również przy tworzeniu użytkowników i grup nie wszystko będzie działać
od razu. Jeżeli pojawią się problemy w postaci użytkownika, którego program zalogował się, a
na serwerze jest niewidoczny lub grup, które nie zmieniają statusu, nie ma się czym szczególnie
niepokoić. Najlepszym rozwiązaniem jest wyłączenie wszystkich klientów i restart serwera.
Po takiej czynności wszelakie problemy znikają. Tyczy się to również instalacji wtyczek. Jeżeli
nowy dodatek został zainstalowany, zrestartowany z panelu wtyczek i wciąż jest niewidoczny,
restartujemy serwer.
NAGIOS – system monitoringu usług sieciowych, jak i stanu pracujących maszyn. Konfiguracja
uwzględnia hierarchię rodzic-dziecko pomiędzy połączonymi elementami sieci. Pozwala na
informowanie o awariach poprzez mail czy bramki SMS.
Rysunek 1.
Zainstalowane wtyczki
22
HAKIN9 2/2010
23
HAKIN9
2/2010
wtyczek. Uruchamianie serwera na
starszej maszynie dysponującej nie
więcej niż 512 MB ma sens jedynie jako
eksperyment. Po trzecie widoczne są
informacje o wykorzystywanych portach
i ich przeznaczeniu.
Wtyczki
Jedną z pierwszych interesujących opcji
Openfire jest wykorzystanie klastrów.
Przy dużej ilości aktywnych użytkowników
można łatwo poprawić wydajność sieci
łącząc wiele maszyn. W menu Clustering
zobaczymy jednak żądanie wtyczki. Po
przejściu do wtyczek nie będzie jednak
żadnej dostępnej. Na tym samym
ekranie znajduje się opcja odświeżania
dostępnych wtyczek oraz osobna opcja
zawierająca znaną w danej chwilę
dostępnych wtyczek.
Do instalacji wystarczy wcisnąć jeden
przycisk, lista zainstalowanych wtyczek
widoczna jest na Rysunku 1.
Wtyczki dają również wiele innych
przydatnych możliwości. Wtyczka
Reginstration pozwala na uruchomienie
dodatkowych czynności przy rejestracji
nowych użytkowników. Między innymi
można wskazać użytkownika, który
będzie informowany o każdej rejestracji.
Kolejną opcją jest uruchomienie
tworzenia konta przez stronę internetową.
Nowi użytkownicy mogą być również
witani specjalną wiadomością.
Wtyczka client control oferuje
wiele przydatnych możliwości. W
pierwszej kolejności możliwe jest
wybranie dopuszczalnych klientów
serwera. Chociaż jest wiele możliwości,
pozostawienie Sparka jako jedynego
pozwoli ograniczyć kłopoty. Klient
ten gwarantuje pełne wykorzystanie
możliwości serwera. Dalej możliwe jest
załadowanie na serwer wersji klienta do
pobrania przez użytkowników.
Skoro wszyscy mają już taką samą
wersję oprogramowania, możemy
ograniczyć im pewne możliwości.
Według uznania można zablokować
przesyłanie plików, wysyłanie
wiadomości do wielu użytkowników (ang.
brodcast) oraz możliwość samodzielnej
zmiany prywatnych danych.
Szczególnie w dużych sieciach
firmowych użytecznym narzędziem jest
filtrowanie przesyłanych wiadomości. Dzięki
tej funkcji możemy powstrzymać naszych
użytkowników, choćby od flirtów w czasie
pracy. Wystarczy w tym celu stworzyć listę
słów, które mają być odrzucane.
Kolejny dodatek Monitoring
Service wyposaży nas w możliwości
archiwizowania wiadomości. Jednak
ważniejszy jest dodany monitoring
widoczny na Rysunku 2. Dzięki
niemu bardzo dobrze widoczne jest
wykorzystanie naszego serwera.
Odczytać można ilość obecnych
użytkowników, trwających rozmów oraz
ilość wysyłanych na minutę pakietów.
Wszystkie monitorowane parametry
można przeglądać w rozpiętości czasu
od godziny do tygodnia. Przydatne
są powiększone wykresy, na których
widoczny jest upływ czasu. Pozwala to
nie tylko ocenić wykorzystanie zasobów,
ale i czas największego obciążenia.
Informacje takie są przydatne przy
planowaniu zadań okresowych, jak
tworzenie kopii zapasowych czy
regularne aktualizacje.
Istnieje wiele protokołów IM (ang.
Instant Message), dzięki wtyczce IM
Gateway można umożliwić połączenie
np. z GG, MSN, IRC, ICQ. O ile może to
być wręcz konieczne dla szefa, należy
pomyśleć czy inni pracownicy powinni
mieć taką możliwość. Dostępność
bramki można ograniczyć do wybranych
użytkowników. W efekcie użytkownicy,
którzy muszą porozumiewać się z
osobami spoza naszego serwera
nie muszą instalować dodatkowych
komunikatorów.
Praktyczne rozwiązania
Po małym wprowadzeniu rozważmy
praktyczną sytuację zastosowania i
możliwości programu. Przyjmijmy, iż łącze
ma służyć sześciu osobom: prezes,
dwóch księgowych i trzech szeregowych
pracowników. Taki układ, chociaż
Rysunek 2.
Monitoring serwera
Rysunek 3.
Szefowska lista pracowników
POCZATKI
22
HAKIN9 2/2010
23
HAKIN9
2/2010
niezbyt życiowy, wystarczy do pokazania
możliwości serwera. Prezentujemy
naszym użytkownikom program z
instrukcją, jak z niego korzystać i
utworzyć własne konto. Zniesmaczeni
koniecznością przyswajania nowej
wiedzy, zdenerwowani dzwonią
dopytując się jak nazywają się inni
użytkownicy. Nie znając ich nazw, nie
mogą rozmawiać. Pierwsza rzecz jaką
robimy to tworzymy grupy użytkowników.
Koniecznie grupę księgowych oraz
pracowników umieszczając w niej osoby
na właściwych stanowiskach. Opcje
zarządzania grupami znajdują się w
menu Użytkownicy/grupy, położenie raczej
logiczne. Po utworzeniu grup możemy
włączyć wyświetlenie grupy wszystkim jej
członkom. Dzięki temu każdy będzie miał
kontakt z pracownikami własnej rangi.
Tworzymy również grupę szef, nawet jeżeli
jest tylko jeden. Dzięki temu w konfiguracji
pozostałych grup możemy pozwolić
na ich widzenie przez grupę szefa, do
której jako użytkownik znajduje się tylko
on. Koniec końców pracownicy jednego
szczebla widzą tylko siebie, a szef widzi
wszystkich, jest to widoczne na Rysunku
2. Zależnie od potrzeb korzystając z
tej metody, można utworzyć hierarchię
grup, aby pracownik wyższego szczebla
miał kontakt ze swoimi podwładnymi
oraz pracownikami tego samego
szczebla. Nieistotne jest jak wielu
mamy pracowników i na ilu szczeblach.
Dokładamy wtyczkę brodcast, dzięki
czemu nasz szef może jednym ruchem
wysłać do wszystkich wiadomość o
zbliżającym się dniu wolnym i obcięciu
premii informatykowi za utrudnianie życia
nowościami.
Jak umożliwić użytkownikom
odnajdywanie kont użytkowników innych
szczebli bez użycia telefonu? Dogrywamy
wtyczkę serach i umożliwiamy jej
wykorzystanie przez klientów. W dolnej
części okna klienta będą oni mogli
wpisać fragment wyszukiwanego
imienia. W ramach firmy można narzucić
pracownikom nazwy kont, zawierających
imię i nazwisko, co pozwoli uniknąć
niespodzianek przy wyszukiwaniu.
Openfire pozwala na jeszcze kilka
usprawnień pracy. Użyteczna może
okazać się wtyczka Email Listener. Dodaje
24
POCZATKI
HAKIN9 2/2010
ona opcje przekierowania informacji
przychodzących na skrzynkę pocztową
do wybranych osób. Z jednej strony
możliwe jest ustawienie dla każdego
użytkownika powiadomień dotyczących
jego poczty. Z drugiej można wykorzystać
tą opcję do przekierowywania
wiadomości o awariach narzędzi
monitorujących, jak NAGIOS. Dzięki
temu natychmiast poinformowani
zostaną wszyscy dostępni pracownicy
odpowiedzialni za naprawę. Jednym
warunkiem wykorzystania, jest serwer
poczty wraz z protokołem IMAP.
Zabezpieczenia
Podstawową linią bezpieczeństwa jest
przejście z serwerów zewnętrznych na
firmowe. Jeżeli do tego komunikacja
odbywa się w lokalnej sieci,
bezpieczeństwo informacji jest równe
bezpieczeństwu sieci. Przy zastrzeżeniu,
iż dostęp bezprzewodowy do lokalnej
sieci znacznie obniża jej poziom
bezpieczeństwa. Większość zabezpieczeń
w formie WPA TKIP, nie mówiąc już o WEP,
zapewnia jedynie dobre samopoczucie.
Drugi element bezpieczeństwa stanowi
SSL. Za jego pomocą można zapewnić
autoryzację klient – serwer. Instrukcja
postępowania znajduje się na stronach
projektu Openfire. Zabezpieczenie to
opiera się na narzędziach dostarczanych
przez maszynę Javy.
Jednak, jeżeli mamy do czynienia z
wieloma biurami rozrzuconymi w różnych
miastach, można pokusić się o bardziej
zaawansowane podejście. Podstawą przy
postępowaniu z tego rodzaju sieciami
jest VPN. Wirtualna sieć prywatna
pozwala oddzielić komunikację pomiędzy
naszymi sieciami lokalnymi, a całym
ruchem dżungli Internetu.
OpenVPN może pracować w dwóch
trybach, korzystając ze statycznych kluczy
szyfrujących lub przy każdym połączeniu
dokonywać autoryzacji i wymiany kluczy.
W efekcie mamy wiarygodne szyfrowanie
połączenie. Rozwiązanie to jest jednak z
zasady przeznaczone dla całego ruchu
pomiędzy oddziałami. Dlatego też każdy
kto ma uprawniony dostęp do sieci VPN
ma też dostęp do komunikacji Openfire.
Kiedy pożądane jest oddzielenie ruchu
komunikatora lub nie chcemy korzystać
z VPN, można wykorzystać SSH port
forwarding. Ta metoda zabezpieczenia
pozwala utworzyć szyfrowany tunel
pomiędzy wybranymi portami komputerów.
W przypadku klientów tunel taki należy
utworzyć na porcie 5222. Zabezpieczenie
to w zasadzie daje pełne bezpieczeństwo
komunikacji, jednak jest dość niewdzięczne
w implementacji. Do tworzenia tunelu
można podejść na kilka sposobów,
Najbardziej barbarzyńską (najprostszą i
najbardziej zrozumiałą) metodą jest ręczne
nawiązanie połączenia poleceniem
ssh
-L 5222:localhost:5222 openfire
. Po
dokonaniu autoryzacji na komputerze o
nazwie openfire możliwe jest nawiązanie
połączenia przez klienta Spark, wskazując
na port 5222, ale z adresem 127.0.0.1,
zamiast adresu serwera. Klient kieruje
się na lokalny port, poprzez tunel kończy
na porcie naszego serwera, nawiązując
połączenie. Wadą takiego podejścia
jest konieczność posiadania konta
w systemie. W przypadku dużej ilości
pracowników samo instalowanie na
każdym komputerze odpowiedniego
skryptu tworzącego automatycznie
połączenie bez udziału użytkownika, może
być nie wykonalne. Również klient wymaga
zmiany ustawień dotyczących portów,
którą należy przeprowadzić w opcjach
zaawansowanych, dostępnych z okna
logowania. Ze względu na te utrudnienia
powyższy przykład ma charakter dowodu
idei, nie rzeczywistej metody. Uwzględniając
skrypt tworzący automatycznie tunel w tle
podczas startu systemu, można rozważyć
zastosowanie tego zabezpieczenia na
komputerach niewielkiej ilości kluczowych
pracowników. Metodę tę w analogiczny
sposób można stosować dla innych
programów lub pomiędzy należącymi do
nas serwerami Openfire.
Podsumowanie
W przeciągu kilku minut Openfire pozwala
uruchomić własny serwer komunikacji. W
przypadku dużych sieci pozwala nie tylko
poprawić bezpieczeństwo przesyłanych
wewnątrz niej informacji, ale ogranicza
również ilość ruchu wychodzącego na
zewnątrz sieci. W analogiczny sposób
wykorzystywane bywają wewnętrzne
serwery cechujące DNS.
Zapewnia mechanizm dostarczania
wiadomości tak od administratora, jak i od
przełożonych do pozostałych pracowników.
Przy relatywnie niewielkich nakładach
czasowych można stworzyć funkcjonalne
narzędzie pracy usprawniające
funkcjonowanie firmy. Brakuje jedynie
możliwości tworzenia wideo konferencji.
W ramach prywatnych zastosowań
wskazane jest łącze symetryczne,
chociażby o minimalnych parametrach.
Jedna osoba dysponująca takim
połączeniem może uruchomić kanał
komunikacji dla dowolnej grupy znajomych.
Dzięki przedstawionym możliwościom jest
on znacznie praktyczniejszy niż popularne
fora grupowe, czy często wykorzystywane
przez studentów grupowe konta pocztowe.
Być może czas wprowadzić usługę
grupowego komunikatora.
Na płycie CD dołączony został
materiał uzupełniający do artykułu w
postaci filmu na temat jak stworzyć własny
kanał komunikacji.
Sylwester Zdanowski
Autor książki Debian Linux. System operacyjny dla
każdego. Pierwsze starcie. Kontakt z autorem:
sylwesterzdanowski@o2.pl.
W Sieci
• http://www.igniterealtime.org/projects/openfire/ – projekt openfire,
• http://www.nagios.org/ – NAGIOS.
Skrypty zabezpieczające połączenie
Za pomocą skryptów w środowisku Linux można automatycznie wykonać każdą czynność,
o której nie chcemy nawet mówić użytkownikowi komputera. W naszym przypadku można
pokusić się o skrypt, który tworzy połączenie, uwierzytelnia się przy pomocy klucza publicznego
i uruchamia klienta. De facto wprowadzenie takiego zabezpieczenia, jak i wszystkiego co
przekracza podejście dwóch kliknięć, wymaga szkolenia wszystkich pracowników.