
Integralną
częścią większości dystrybucji Linuxa jest demon Wrapper o nazwie tcpd.
Daje on administratorowi wysokiej jakości narzędzie kontrolujące przychodzące
żądania połączeń. Jest on uruchamiany przez demona inetd, a w pliku /etc/inetd.conf
ścieżki do poszczególnych demonów usług sieciowych zostały zastąpione ścieżką
do tcpd.
W momencie otrzymania żądania danej usługi tcpd najpierw sprawdza informacje
kontroli dostępu, a następnie uruchamia odpowiednią usługę, bądź odrzuca żądanie.
Wrapper pełni więc dwie podstawowe funkcje: rejestruje żądania usług sieciowych
oraz zajmuje się kontrolą dostępu do nich. I właśnie rejestracja żądań jest
jedną z najistotniejszych funkcji monitorowania, udostępniając ważne informacje,
zwłaszcza, jeśli szukamy potencjalnych intruzów. Do rejestracji komunikatów
wykorzystywany jest demon syslogd, a konkretnie jego funkcja authpriv. Zaglądając
do pliku /etc/syslog.conf możemy się przekonać, gdzie system rejestruje
komunikaty, czyli miejsce przechowywania odpowiednich plików. Zazwyczaj jest
to /var/log/secure.
Istnieją dwa zasadnicze pliki definiujące zasady postępowania podczas kontroli
dostępu. Są to: /etc/hosts.allow oraz /etc/hosts.deny . Pierwszy
z nich zawiera wpisy wskazujące na hosty, które mogą korzystać z poszczególnych
usług, natomiast w pliku hosts.deny umieszcza się te hosty, od których
żądania usług będą odrzucane.
Jako jedną z pierwszych czynności zaraz po zainstalowaniu systemu na serwerze,
który będzie udostępniał jakiekolwiek usługi, proponuję wpisanie linii ALL:ALL
w pliku hosts.deny. Zabronimy w ten sposób dostępu wszystkim, którzy
żądają jakichkolwiek usług. Dopiero w pliku hosts.allow można wymieniać
poszczególne usługi oraz hosty, które z nich będą mogły korzystać. Zapisów w
obu plikach dokonujemy w formacie:
usługi : klienty [:polecenie powłoki]
Usługi, to zwyczajnie poszczególne usługi (mogą mieć postać listy usług oddzielanych
przecinkami) lub słowo ALL, czyli wszystkie. Klienty, to nazwy hostów
(także może być zapisana w postaci listy nazw hostów, domen, numerów sieciowych
poszczególnych komputerów oddzielonych przecinkami) lub słowo LOCAL (wszystkie
lokalne, czyli nie zawierające części nazwy domeny), czy też ALL oznaczające
zwyczajnie wszystkie hosty. Polecenie powłoki, jako opcjonalny wpis, może zawierać
konkretne polecenie, które tcpd wykona, gdy wpis zostanie dopasowany.
Gdy tak się stanie, demon tcpd zarejestruje uzyskanie (bądź nie uzyskanie)
dostępu i wykonuje polecenie, które zostało wpisane. Zazwyczaj cecha dodatkowego
przetwarzania poprzez umieszczanie poleceń powłoki jest używana tylko w pliku
hosts.deny, aby zebrać więcej informacji np. na temat intruza lub poinformować
administratora o próbie niewłaściwego uzyskania dostępu do serwera, czyli potencjalnym
ataku. Do programu Wrapper dołączany jest także program safe_finger,
który może zostać użyty do konstrukcji poleceń. Jest on dużo bezpieczniejszy,
niż zwykły finger. Do konstrukcji poleceń możesz również użyć zmiennych,
które umożliwiają pobranie konkretnych wartości z nadchodzącego połączenia.
A oto ich lista:
%a - adres IP klienta
%A - adres IP serwera
%c - wszystkie dostępne informacje o kliencie
%d - nazwa procesu demona usługi sieciowej
%h - nazwa hosta klienta (jeśli nie jest dostępna, używany jest adres
IP)
%H - nazwa hosta serwera
%n - nazwa hosta klienta (jeżeli nie jest dostępna, używane jest słowo
UNKNOWN. Jeżeli natomiast wyszukiwanie DNS nazwy hosta klienta i adresu IP nie
zgadzają się, użyte zostaje słowo kluczowe PARANOID)
%N - nazwa hosta serwera
%p - ID procesu (PID) demona usługi sieciowej
%s - wszystkie dostępne informacje o serwerze
%u - nazwa użytkownika klienta (jeżeli nie jest dostępna, użyte zostanie
słowo kluczowe UNKNOWN)
Za pomocą standardowej składni kontroli dostępu możemy zdefiniować prawie każdą
potrzebną regułę. Jednak jeśli to nie wystarcza, można skorzystać z opcjonalnego
rozszerzenia kontroli dostępu programu Wrapper. Jednak w takim przypadku
należy skompilować własną wersję programu z włączoną opcją PROCESS_OPTIONS (jeśli
korzystasz np. z Red Hata 6.2, to Wrapper standardowo działa już według
nowych zasad). Składnia języka kontroli dostępu zostanie wtedy rozszerzona i
przedstawia się następująco:
usługi : klienty : opcja : opcja ...
Do każdej reguły można zastosować wiele opcji, m.in.:
allow - przyznaje żądaną usługę (musi pojawiać się na końcu reguły!)
deny - odmawia przyznania żądanej usługi (również musi się pojawiać na
końcu reguły)
spawn polecenie powłoki - wykonuje polecenie jako proces podrzędny
twist polecenie powłoki - wykonuje polecenie zamiast żądanej usługi
keepalive - wysyła do klienta komunikat sygnalizujący aktywność, a jeśli
klient nie odpowiada, to połączenie zostaje zerwane
linger sekundy - określa, jak długo mają trwać próby dostarczenia
danych po zamknięciu połączenia przez serwer
rfc931 [czas oczekiwania] - użycie protokołu IDENT w celu sprawdzenia
nazwy użytkownika klienta. Czas definiuje, ile sekund serwer ma czekać na odpowiedź.
banners ścieżka - wyświetla u klienta zawartość pliku z komunikatem.
Ścieżka określa nazwę katalogu zawierającego pliki nagłówkowe (banner files).
Wyświetlony zostaje ten plik, który posiada taką samą nazwę, jak proces demona
danej usługi sieciowej.
nice [numer] - ustawia wartość nice dla procesu usługi. Jądro
używa wartości nice do obliczenia priorytetów szeregowania.
umask maska - ustawia wartość umask dla plików tworzonych przez
dany proces
user użytkownik [.grupa] - uruchamia proces usługi sieciowej
z określonym ID użytkownika i ID grupy, niezależnie od tego, co jest zdefiniowane
w ident.conf
setenv nazwa wartość - ustawia zmienną środowiskową dla środowiska
uruchomieniowego procesu.
A oto przykład:
in.rshd : ALL : spawn /usr/sbin/safe_finger -l @%c | /bin/mail -s %h%d root
: DENY
Zdalny system próbuje uruchomić rshd, jednak w pierwszej kolejności uruchamiane
jest polecenie safe_finger, a jego wyniki są wysyłane do konta administratora.
Następnie połączenie jest zamykane.
Masz naprawdę duże pole do popisu podczas konstruowania reguł kontroli dostępu,
więc wykorzystaj to, by zwiększyć bezpieczeństwo swojego systemu. Należy jednak
pamiętać, iż nawet korzystając z rozszerzonej składni Wrappera, możemy
chronić tylko usługi uruchamiane przez inetd lub takie, które same z
siebie czytają pliki hosts.allow i hosts.deny. Dla innych usług
należy użyć ściany ogniowej, a o tym możesz przeczytać w artykule: Ipchains
- reguły ściany ogniowej.
Copyright
(C) 2000-2002 by Grzegorz Lewandowski
All rights reserved