
Usługi - niepotrzebne demony, bezpieczne połączenia
Usługi
- ich udostępnianie to zasadnicze zadanie serwera, lecz nie należy oferować
zbyt wiele :-), im skromniej, tym bezpieczniej.
Większość usług jest uruchamiana przez demona inetd, wywołanie niektórych
znajduje się w skryptach startowych znajdujących się zazwyczaj w katalogu /etc/rc.d
(sam demon inetd - w systemie Red Hat - jest uruchamiany przez skrypt
/etc/rc.d/init.d/inet). Każdy ze sposobów uruchamiania usług ma swoje
zalety, jak i wady. Usługi uruchamiane poprzez demona inetd (czyli uruchamiane
na żądanie) są wykorzystywane tylko wtedy, kiedy są potrzebne. Z drugiej jednak
strony system może zostać obciążony ciągłym uruchamianiem usługi, która jest
często potrzebna. Uruchomienie demona danej usługi podczas startu systemu zmniejsza
obciążenie serwera związane z ciągłym uruchamianiem potrzebnej usługi, jednak
jeśli usługa nie jest w danej chwili wykorzystywana, to i tak ciągle demon zajmuje
zasoby komputera.
Uruchomiony podczas startu demon inetd pracuje w tle oczekując na sygnały
z portów sieciowych. Gdy taki sygnał pojawi się na porcie związanym z daną usługą,
inetd uruchamia żądaną usługę. Chcąc wyłączyć usługi, które są uruchamianie
przez inetd, wystarczy w pliku /etc/inetd.conf postawić znaczek
# na początku linii zaczynającej się nazwą niepotrzebnej usługi, np.:
# shell stream tcp nowait root /usr/sbin/tcpd in.rshd
# login stream tcp nowait root /usr/sbin/tcpd in.rlogind
# telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
Następnie należy zrestartować demona inetd:
/etc/rc.d/init.d/inet restart
O tym, czy wprowadzone zmiany odniosły skutek, możesz się dowiedzieć wydając
polecenie:
netstat -l
Program netstat wyświetli wówczas listę usług aktualnie udostępnianych
przez Twoją maszynę.
No tak, ale które usługi są niepotrzebne? Oczywiście te, z których nie korzystasz,
lub te, które są na tyle niebezpieczne, że nie warto z nich korzystać. Do najbardziej
niebezpiecznych należą wszystkie usługi zaczynające się od literki r
(rsh, rexec, rcp, rlogin...). Wspomnę tylko, że
generalnie wszystkie te usługi można zastąpić programem ssh, więc nie
ma chyba czego żałować.
W następnej kolejności powinieneś wyłączyć: finger (udostępnia informacje
o użytkownikach systemu), echo, daytime, discard, chargen,
tftp (umożliwia pobieranie plików bez autoryzacji), nntp (serwer
news), smpt (zdalne zarządzanie serwerem), telnet (koniecznie
zainstaluj ssh!), systat oraz netstat (informacje o systemie i
sieci), talk, ntalk, printer... Oczywiście niektóre z tych
usług będziesz chciał udostępniać, lecz zwróć wtedy szczególną uwagę na aktualizację
poszczególnych programów lub spróbuj zastosować inne rozwiązania wspomagające
bezpieczeństwo podczas korzystania z tych usług.
Jeżeli dany program nie jest uruchamiany poprzez inetd, lecz jest wywoływany
podczas startu systemu ze skryptu startowego w katalogu /etc/rc.d/, to
aby go wyłączyć musisz po prostu usunąć jego wywołanie. Możesz to zrobić albo
poprzez usunięcie odpowiedniego pliku (zazwyczaj będzie to link symboliczny
do właściwego skryptu uruchamiającego) lub poprzez postawienie znaczka #
we wszystkich liniach odpowiedzialnych za start danego programu w konkretnym
pliku. W systemie Red Hat możesz to także uczynić korzystając z programu ntsysv
lub linuxconf, co znacznie ułatwia tą czynność.
I jeszcze kilka słów o samych usługach od strony bezpieczeństwa.
W przypadku ftp, www, smtp, pop3, czyli standardowych
usług, bez których nie można się wprost obejść, połączenia nie jest kodowane
tak, jak ma to miejsce przy wykorzystaniu programu ssh - wszystkie komendy
wysyłane są jawnym tekstem! Istnieje więc prawdopodobieństwo przechwycenia poleceń
wydawanych podczas transmisji (nie jest to łatwe, ale możliwe!). Problem ten
można rozwiązać m.in. poprzez "postawienie" tzw. tunelu wykorzystując bezpieczne
połączenie, które oferuje program ssh. Rzecz polega na tym, iż dany program
zamiast nawiązywać połączenie z konkretnym hostem, nawiązuje je z lokalnym serwerem
na jakimś porcie, na którym czuwa ssh. Ssh przekazuje dane z tego
połączenia do demona ssh na serwerze, z którym chcemy się połączyć, a
na nim z kolei demon ssh przekazuje otrzymane połączenie na żądany przez
nas port. Proste, prawda? W praktyce jednak nie zawsze jest to takie łatwe do
zrobienia...
Www (http) nie należy do najbezpieczniejszych i to zarówno pod
kątem jawności przesyłanych danych, jak też możliwości uruchamiania np. skryptów
CGI, jak i SSI. Należy zadbać o to, aby serwer www nie
był uruchamiany pod UID roota - na ogół nie jest to potrzebne! Również należy
ograniczyć możliwość korzystania z programów CGI, zezwalając jedynie
na wykonywanie określonych skryptów lub określonym użytkownikom. Jeśli serwer
nie jest uruchamiany z prawami roota, nie jest już wymagane tak restrykcyjne
podejście w stosunku do skryptów uruchamianych przez użytkowników, choć nadal
należy zachować ostrożność - trzeba wykluczyć możliwość ustawienia bitu SUID
na uruchamianych programach!. Bezpieczną alternatywą podczas wykorzystywania
połączeń http jest użycie shttp, czyli połączenia realizowanego
przy wykorzystaniu SSL (Secure Socket Layer). SSL jest protokołem
bezpiecznej komunikacji opracowanym przez Netscape i zapewniającym prywatność,
autoryzację i integralność przesyłanych danych. Jest oparty o grupę instytucji
certyfikujących (CA), a korzystając z serwera legitymującego się certyfikatem
jednego ze znanych CA możemy mieć pewność, że serwer jest właśnie tym, za który
się podaje. Obecnie wszystkie już przeglądarki mają możliwość korzystania z
shttp.
Jak już wcześniej mogłeś przeczytać, proponuję, by zastąpić sendmaila (najpopularniejszego
programu do realizacji usługi smtp) innym programem do obsługi poczty
(Postfix, qmail, ZMailer... - możliwości jest naprawdę wiele.
Zajrzyj chociażby na Freshmeat
i wybierz coś dla siebie!) Należy także zadbać o to, by nasz serwer nie był
źródłem spamu; usługa rozsyłania listów nie może być dostępna dla każdego! Musisz
wyłączyć funkcję "open-relaying" w Twoim programie obsługi poczty.
Pop3 również oferuje transmisję nie kodowaną, lecz możesz temu zaradzić
używając tunelu przez ssh lub serwera i klienta pop3 wykorzystującego
SSL.
Ftp może zostać również poprowadzone przez tunel przy wykorzystaniu ssh
(trochę trzeba się jednak przy tym napracować: tryb passive, dwa porty do tunelowania...
:-)) lub można po prostu wykorzystywać sftp - czyli bezpieczne ftp
oferowane przez ssh, czy też program scp, który ma zastosowanie
przy przesyłaniu plików do, czy też ze swojego konta na zdalnej maszynie, np.:
scp plik/na/Twoim/dysku user@serwer:/katalog/na/zdalnym/serwerze
spowoduje skopiowanie pliku z Twojego dysku do katalogu na serwerze, przy czym
cała transmisja jest szyfrowana!
Jeśli na swojej maszynie udostępniasz usługę ftp i masz zainstalowany
pakiet ssh2, to godnym polecenia klientem na platformę Windows jest Secure
FX - naprawdę bardzo przyjemnie korzysta się z tego narzędzia (pomijając
wrażenia związane z używaniem samego systemu Windows :-)), albowiem nie ma potrzeby
"zabawy" w tworzenie tuneli dla ftp - odbywa się to automatycznie!
Ponadto w przypadku ftp także istnieje możliwość wykorzystania SSL,
jednak tak jak w przypadku pop3 wymaga to odpowiedniego wsparcia zarówno
po stronie klienta, jak i odpowiedniego serwera ftp.
Jeśli na swoim serwerze wykorzystujesz popularnego wu-ftpd, to proponuję
Ci, byś zamienił go na np. Proftpd - jest bezpieczniejszy i to nie tylko
dlatego, że jest mniej powszechny. Jednak idealne pod tym względem programy
i tak nie istnieją...
Na koniec kilka słów prawdy: możliwość wykorzystania tunelu przez ssh dla połączeń
usług, których komendy standardowo przesyłane są w sposób jawny a oferowanych
użytkownikom często staje się nierealna ze względu na brak odpowiedniego oprogramowania
po stronie klienta lub innych czynników, jak np. łatwość obsługi.
Jednak jeśli łączą się ze sobą dwie maszyny unixowe, gdy pracujesz zdalnie na
serwerze, który jest pod Twoją opieką - wykorzystanie tunelu nie stanowi tak
wielkiego problemu, a z całą pewnością wpłynie na poprawę bezpieczeństwa.
Copyright
(C) 2000-2002 by Grzegorz Lewandowski
All rights reserved