bezpieczeństwo
Zabezpieczenia serwerów
Podstawy
zabezpieczenia
serwerów
Grzegorz Walocha
Każdy z nas chciał kiedyś o własnych siłach postawić sobie swój własny serwer linuksowy. Udostępniać
pliki, móc sprawdzać pocztę, zdalnie zarządzać usługami. Ale czy każdy z nas wie jak bardzo serwer na
defaultowych ustawieniach, które dostarcza nam producent danej dystrybucji, jest narażony na ataki?
am nadzieję tym artykułem przybliżyć poprawionych luk i niedociągnięć, dlatego osobiście dora-
nieco aspekty często pomijane przez po- dzam korzystanie z takowej wersji.
czątkujących użytkowników Linuksa, mło- Krok pierwszy prawdopodobnie najważniejszy. Silne
Mdych administratorów i wielu innych, hasło. Mocne hasło musi należeć nie tylko do administra-
którzy chcą postawić daną usługę na swojej maszynie, ale tora, ale również każdy użytkownik systemu powinien
obawiają się ataków na nią. Zaproponuję tutaj kilkanaście zadbać o to, by jego hasło było odpowiednio skompliko-
rozwiązań, które w łatwy sposób można będzie wdrożyć wane.
na własnym podwórku. Silne hasło zapewni nam początkową ochronę przed
Linux, jak żaden inny system operacyjny, daje nam nieautoryzowanym dostępem do serwera przez niepowo-
ogromne możliwości konfiguracyjne pozwalające zwięk- łane osoby. Poza tym nie zostanie ono tak szybko rozpra-
szyć bezpieczeństwo. Artykuł ten skupi się na podstawo- cowane przez działające w sieci systemy łamiące hasła,
wych jego aspektach, ponieważ kwestia bezpieczeństwa które to korzystają z potężnych słowników bardzo często
jest tak rozległa, że można by było napisać o niej kilka- udostępnianych za darmo w sieci.
naście książek, które i tak nie wyczerpałyby tematu. Pa- Mocne hasło to takie, które jest długie. Posiada co naj-
miętajmy jednak o bumie technologicznym oraz softwa- mniej 8 znaków liter małych i dużych, cyfr oraz znaków
rowym, które ciągle ewoluują, a z nimi również sposo- specjalnych typu: & * ( @ itp. Najlepiej jednak jeśli będzie
by ataków i chęci łamania coraz wymyślniejszych zabez- miało co najmniej piętnaście znaków. Takie hasło 15 zna-
pieczeń. kowe ułożone z losowo wybranych elementów z całej kla-
Zakładam, że każdy z czytających ma już zainstalowa- wiatury jest w porządku. 33 tysiące razy trudniejsze do
nego Linuksa z kernelem co najmniej 2.6.x. Na starszych złamania niż hasło 8znakowe. Warto również pamiętać,
wersjach jądra również sprawdzają się porady i sztuczki żeby nie wybierać haseł oczywistych, związanych bez-
opisywane tutaj, ale nowsza wersja ma sama w sobie dużo pośrednio z posiadaczem, nie stosować imion, nazw wła-
68 sierpień 2007
linux@software.com.pl
bezpieczeństwo
Zabezpieczenia serwerów
nić hasło w tym przypadku zmieniamy ha- Edytujemy linię: Pierwsza linia odpowiada za
Listing 1. Określa konta, które mają dostęp do
sło administratorowi, możemy więc wykonać nasłuchiwanie usługi na danym porcie. Do-
powłoki basha
jedynie polecenie passwd i wcisnąć ENTER, myślnie opcja jest wyłączona, odhaszowujemy
by zmienić hasło obecnie zalogowanemu use- linię i dodajemy port, na który chcemy prze-
grey:x:500:500::/home/grey:/bin/
rowi). Jeśli już jesteśmy przy zmienianiu haseł nieść nasłuch. W podanym przykładzie jest to
bash
i ustawianiu odpowiedniej trudności hasła, port 12345. Druga linia odpowiada za rodzaj
rayos:x:501:501::/home/rayos:
nie wolno nam pominąć problemu, z którym protokołu używanego podczas pracy. Domyśl-
/bin/bash
możemy się spotkać, przejmując po kimś ma- nie opcje zahaszowane odhaszowywujemy
jols:x:502:502::/home/jols:/bin/
szynę. i zostawiamy jedynie wersję 2. protokołu ssh.
bash
W celu wyszukania takiej luki warto użyć Linia ListenAdress odpowiada adresowi,
kon.szt:x:503:503::/home/konsz:
programu, który jest w każdej dystrybucji, czy- który będzie miał dostęp do serwisu ssh. Mo-
/bin/bash
li AWK. Komendą wyszukamy konta z pusty- żemy dodać kilka adresów lub cały zakres
mi hasłami: z danej puli adresowej. Domyślnie deamon
Listing 2. Widok na Log Systemowy, określający
ssh nasłuchuje na wszystkich adresach, czy-
błędne logowanie usera recruit.
# awk F: '$2 == "" {print $1, "puste li na 0.0.0.0.
May 30 23:26:59 testowy
hasło!"}' /etc/shadow. PermitRotLogin no opcja ta zabrania lo-
sshd[27984]: ż
gowania się roota bezpośrednio przez ssh.
Failed password for invalid user
Jeśli już mamy sprawdzony system pod Czyli początkowo loguje się zwykły użyt-
recruit from ż
względem silnych haseł i braku kont z pusty- kownik, a dopiero potem root.
TU_ADRES_IP port 53101 ssh2.
mi hasłami, możemy zabrać się do weryfikacji Te podstawowe funkcje dla deamona ssh
kont, które powinny mieć dostęp do powłoki pozwolą na wzmocnienie obrony przed nie-
snych itp. Takie hasła znajdują się często systemu. W tym celu należy zweryfikować plik chcianymi intruzami próbującymi wykorzy-
w słownikach i narzędzia do łamania pora- z kontami /etc/passwd. stać słabości naszego systemu. Istnieją odpo-
dzą sobie z nimi bezproblemowo. Dostęp regulujemy w prosty sposób, do- wiednie aplikacje, które pozwalają nam na we-
Dla przykładu: złamanie 3znakowego ha- dając lub usuwając parametr określający po- ryfikowanie kilkukrotnych prób nieudanego
sła zawierającego jedynie litery alfabetu ułożo- włokę, w której będziemy pracować. logowania, ale to opiszę w dalszej części arty-
ne bez jakiegokolwiek sensu trwa ok. 1 sekun- Aby zabrać użytkownikowi prawa do lo- kułu. Następną rzeczą, o której powinniśmy
dy. Czas ten diametralnie się zwiększa, jeśli za- gowania się do powłoki, edytujemy plik pas- pamiętać jest wyłączenie tak wspaniałego na-
stosujemy dłuższe hasło. swd, zastępując /bin/bash, na przykład /bin/ rzędzia, jakim jest telnet. Fakt jeśli korzysta-
Jeśli nie mamy pomysłu, jakie hasło jest nologin lub /bin/false. my z niego często, możemy go zostawić, ale
bezpieczne, możemy skorzystać z gotowego Tak edytowany plik zapisujemy. Od tej lepiej dmuchać na zimne, jeśli maszyna stoi z
oprogramowania, które pomoże nam w wyge- pory tylko te konta, którym określiliśmy po- publicznym adresem VLAN.
nerowaniu takiego hasła. włokę mogą zalogować się do systemu. Odszukujemy plik z telnetem i poddaje-
Do wygenerowania bezpiecznego hasła Kolejnym krokiem, jaki powinniśmy my go edycji w vi, nano czy pico.
użyjemy programu openssl (zawartego w każ- przedsięwziąć jest zabezpieczenie najczę-
dej dystrybucji). Komenda: ściej atakowanej usługi, jaką jest ssh. Wiele # pico w /etc/xinetd.d/telnet.
razy w logach można zauważyć wzmiankę
# openssl rand 10 | hexdump e '10/1 typu. Po wylistowaniu pliku musimy odszukać li-
"%02x"' > plikzhaslem. Świadczy to o tym, że ktoś (osoba lub pro- nie o budowie:
gram) próbuje się dostać na konto recruit. Je-
W ten sposób mamy w pliku plikzhaslem za- śli nie wie czy istnieje konto o takiej nazwie, bę- disable = no.
szyte hasło. Fakt, iż to trochę niepraktyczne, ale dzie próbować logować się na inne z uprzed-
mamy pewność, że jest na pewno skompliko- nio przygotowanej listy. Na takiej liście pierw- Analogicznie chcąc wyłączyć, wpisujemy za-
wane. Parametr 10/1 określa nam długość szą pozycją jest konto o nazwie root. Następ- miast NO YES.
w znakach hasła. nymi są zwykle squid, apache, postfix i wie- Na samym końcu trzeba pamiętać, że-
Zaczynajmy. Po uruchomieniu systemu le innych, które mogą być związane z branżą, by zrestartować usługę. Wykonujemy to po-
logujemy się na SUPERUŻYTKOWNIKA, z zainteresowaniami, preferencjami itp. W za- leceniem:
czyli roota. Pamiętajmy, by użyć po polece- leżności od tego, jakie pojęcie w swoim fachu
niu su znaku specjalnego w celu przejęcia ca- ma włamywacz, taką listę loginów i słowni- # /etc/init.d/xinetd restart
łej powłoki, w której pracujemy. Jeśli zaś lo- ków zastosuje.
gujemy się bezpośrednio na maszynie, wy- Podstawowe zabezpieczenie usługi ssh lub
starczy, że użyjemy loginu root. polega na edytowaniu pliku:
Zmieniamy stare hasło poleceniem passwd service xinetd restart.
(po spacji nazwa usera, któremu chcemy zmie- /etc/ssh/sshd_config.
To tyle na temat telnetu.
Fajną rzeczą, która jest prosta w użyciu,
a przydaje się w codziennej administracji jest
po prostu wysłanie ostrzeżenia, że ktoś zalo-
Rysunek 1. Logowanie na superużytkownika gował się na roota.
www.lpmagazine.org 69
bezpieczeństwo
Zabezpieczenia serwerów
Wykonujemy prostą czynność edytuje-
my plik ./bash_profile jako root (pamiętaj-
my, że logujemy się zawsze su ).
#nano ./bash_profile.
Przechodzimy na sam dół i dopisujemy:
# echo 'ALERT
Ktoś zalogował się na roota'
`date` `who` | mail s "Alert:
Zalogowany `who | awk '{print $6}'` "
wlasciciel_maszyny@email.pl.
Oczywiście zapisujemy i wychodzimy.
Po takim zabiegu każde logowanie się ro-
ota spowoduje wysłanie maila z informacją
do właściciela maszyny.
Jeśli udostępniamy serwer komuś innemu,
Rysunek 2. przedstawia mniej więcej budowę podstawowego pliku
chcielibyśmy zawrzeć jakieś informacje, które
byłyby przekazywane po udanej próbie zalo- Edytujemy ten plik ulubionym przez nas nym słowem blokuje IP, których weryfikacja
gowania na ekran. Można zawrzeć ostrzeżenia, edytorem ja preferuję nano :). Szukamy linii nie powiodła się określoną przez nas ilość razy.
można zawrzeć adresy kontaktowe itp. MailTo = root i zmieniamy ją na MailTo = twoje- Któż z nas nie zauważył w logach. Kilka-
Służy do tego plik: mail@email.com. Oczywiście nie musisz tego ro- set lub kilkanaście tysięcy nieudanych prób
bić, jeśli używasz aliasów w swoim MTA (wte- logowania się przez ssh, ftp i apacha.
# /etc/motd. dy wszystko, co przychodzi dla roota może Fail2ban jednoznacznie weryfikuje takie
być przekazywane na wybrany przez nas ad- próby i odpowiednio blokuje (na określony
Po prostu go edytujemy i wpisujemy wszystko res). Ale to nie artykuł o aliasach, więc nie bę- przez nas czas) dany adres.
to, co chcemy przekazać na konsolę osobie lo- dziemy się tutaj rozwodzić nad tym (powsta- Program pobieramy ze strony : http://www.
gującej się. Pozostając przy temacie logowania i nie na pewno artykuł o zabezpieczaniu MTA, fail2ban.org/wiki/index.php/Downloads.
logów systemowych, możemy się bliżej zatrzy- ale to podstawy, więc nie będę się rozpisywał Wybieramy dystrybucję, pod którą obec-
mać przy programie, który jest bardzo pomoc- na temat MTA). nie pracujemy i zabieramy się za instalację.
ny w codziennej pracy z systemem. Mowa tu- Następnie możemy zmieniać dokładność Jeśli wybraliśmy rpma, to po prostu in-
taj o LogWatch. naszego LogWatcha. Odnajdujemy linię Deta- stalujemy go jako roota. Poleceniem:
Plik logwatch.conf, który odpowiada za il = Low i zmieniamy na Detail = 5 lub De-
sposób, dokładność logowania tego, co w sys- tail = 10, gdzie liczba określa nam stopień # rpm ivh fail2banX.X.X.rpm,
temie się dzieje, znajduje się w katalogu /etc/ logowania. Im większa, tym więcej informa-
log.d/conf/logwatch.conf lub po prostu cji zbieramy o systemie, ale tym samym nasz gdzie XXX określają wersję, którą wybraliśmy.
/etc/logwatch/conf/logwatch.conf. plik logu może urosnąć do niebotycznych roz- Wybierając instalację ze zródeł, postępu-
miarów. Jeśli plik logwatch.conf jest pusty, po jemy następująco (w przypadku src.rpm):
Listing 3. Plik sshd_config określający opcje kon- prostu dopisujemy na końcu powyższe funkcje
figuracyjne SSH. wraz z argumentami, każdy w oddzielnej linii. # rpm rebuild fail2banX.X.X.src.rpm.
Nie można zapomnieć o pustej linii na końcu
Port 12345
każdego pliku konfiguracyjnego, także i tego. Po wykonaniu znajdziemy instalacyjne pliki
Protocol 2
Dajemy ENTER i zapisujemy. w /usr/src/RPM/RPMS/ix86 :
ListenAddress 123.456.789.10
Myślę, że te podstawy w dużym stopniu
PermitRootLogin no.
utrudnią, a nawet uniemożliwią łatwe przeję- # rpm Uhv /usr/src/RPM/RPMS/ix86/
cie naszej maszyny. Pomogą również zwięk- fail2banX.X.X.rpm.
Listing 4. Widok na nieudaną próbę zalogowania
szyć wiedzę o tym, co się na niej dzieje.
się do systemu przez usera andrea. Określający
W dalszej części przedstawię bardzo przy- Jeśli instalujemy na distro debianowym, to:
kto, kiedy, z jakiego adresu i na jaki port.
jemne i proste w konfiguracji darmowe opro-
gramowania wspomagające kontrolę i zbie- dpkg i fail2banX.X.X.deb.
May 10 16:39:08 testowy sshd[2953]:
ranie informacji o systemie oraz skuteczną jego
ż
obronę. Pierwszym z proponowanych przeze A na Gentoo:
Failed password for invalid ż
mnie programów jest fail2ban. Strona projek-
user andrea from ż
tu znajduje się pod adresem: http://www.fail emerge fail2ban.
83.*.220.* port
2ban.org/wiki/index.php/Main_Page.
55329 ssh2.
Program służy do weryfikacji nieudanych Po zainstalowaniu przechodzimy do pliku
prób ataku i odpowiedniej reakcji na nie. Jed- konfiguracyjnego i ustawiamy poszczególne
70 sierpień 2007
bezpieczeństwo
Zabezpieczenia serwerów
o co chodzi. Najważniejszą rzeczą jest zwróce- Od tej chwili mamy już drugą linię obrony.
Listing 5. Skrypt wymuszający uruchomienie
nie uwagi na umiejscowienie plików logów da- Możemy uruchamiać rkhuntera w każdej
rkhunter-a przez crona z wybranymi przez nas
nych usług i dostosowanie ich pod własne śro- chwili z linii poleceń, ale prościej jest zaim-
opcjami
dowisko. Żeby zadziałał nam program, teore- plementować prosty skrypt w bashu, który
#!/bin/sh tycznie musimy zmienić dwie rzeczy. Pierw- uruchamiać będziemy z crona.
/usr/local/bin/rkhunter szą z nich jest określenie, które usługi będzie- Ja skorzystałem z gotowego zastosowa-
versioncheck my monitorować. Czyli jeśli chcemy monitoro- nia, które zaprezentowane jest na stronie pro-
/usr/local/bin/rkhunter update wać ssh, szukamy sekcji [SSH] i argument ena- jektu, odsyłam do niego, gdyż jest ono nie
/usr/local/bin/rkhunter cronjob bled = false zmieniamy na true. Postępuje- tylko dobrze przemyślane, ale również bar-
reportwarningsonly my podobnie z innymi usługami, które ma ob- dzo proste do wykonania dla początkujące-
) | /bin/mail s 'rkhunter Daily jąć fail2ban. Kolejnym przydatnym progra- go użytkownika.
Run' root mem jest rkhunter oraz bardzo podobny do Tworzymy plik w katalogu roota pole-
niego chkrootkit. ceniem:
parametry programu. Najważniejszym jest Strona projektu: http://www.rootkit.nl/ oraz
atrybut określający język, w jakim pracuje http://www.chkrootkit.org/. " # touch rkhunter.
powłoka. Musimy wybrać język angielski. Chkrootkit oraz rkhunter to programy " Nadajemy mu uprawnienia do wykony-
Nie potrafiłem zmusić fail2bana do pracy skanujące najważniejsze pliki systemowe pod wania przez roota:
w innym języku. Nawet próby modyfikacji kątem obecności rootkitów, czyli programów # chmod 700 rkhunter.
kodu nie pomagały. Tak więc przechodzimy pisanych, aby ukryć obecność włamywacza " Edytujemy go:
do zmiennej określającej język. i pozwolić mu na dostęp do komputera. Pro- #nano rkhunter
Jako root wykonujemy: gramy te skanują również system w poszuki-
waniu śladów loggerów klawiszy i innych nie- Teraz wystarczy dodać zadanie do crona.
# export LANG= C lub export LANG=EN. pożądanych programów, które mogą zostać W tym celu edytujemy tablice poleceniem:
wykorzystane w celu zostawienia sobie tzw. tyl-
Tym sposobem zmieniliśmy język powłoki. nej furtki. Obydwa narzędzia są bardzo uży- # crontab e,
Możemy przejść do pliku konfiguracyjnego, teczne. Rkhunter wydaje mi się bardziej roz-
który znajduje się w /etc/fail2ban.conf. budowany, dając tym samym większy ogląd dopisując na końcu poniższy przykład (ja
Jest kilkanaście zmiennych, na które war- sytuacji niż chkrootkit, dlatego też opiszę tyl- skorzystałem z przykładu zawartego na stro-
to zwrócić uwagę: ko ten pierwszy. Informacje o instalacji, moż- nie projektu):
liwościach chkrootkita znajdziecie na stronie:
" maxfailures = 5 określa liczbę błęd- http://www.chkrootkit.org/faq/. 30 5 * * * root /root/rkhunter c
nych prób w haśle lub loginie, Pozyskanie oraz instalacja rkhuntera jest cronjob.
" Bantime = 600 określa czas, na jaki zo- bardzo prosta:
staje zablokowany dane IP,i Ściągamy program ze strony poleceniem: Zapisujemy i wychodzimy z naszego ulubio-
" gnoreip = 192.168.1.0/24 określa sieć nego edytora tekstów. Jeśli komuś otworzy-
lub adresy, które nie będą weryfikowane # wget http://downloads.rootkit.nl/ ło się w vi i ma problem z zapisaniem, niech
przez próg. rkhunter
.tar.gz. spróbuje wcisnąć jeden raz Esc, a następnie
CTRL+ZZ.
Program w dalszej części pliku konfiguracyj- Nie jest ważne, do jakiego katalogu go ściąga- Druga linia obrony skonfigurowana oraz
nego jest podzielony na sekcje, które określa- my. Następnie należy rozpakować paczkę: gotowa do użycia.
ją usługi, jakie będziemy monitorować. Są to: # tar zxf rkhunter.tar.gz. W taki oto prosty sposób dotarliśmy do
MAIL pozwala na wysyłanie emaila w posta- W tym momencie możemy przejść do in- końca tego artykułu. Wszystkie przedstawione
ci monitu, o zablokowanym IP; Apache dostęp stalowania. przeze mnie metody sam testowałem i wdra-
do serwera www; Vsftpd dostęp do serwera Wykonujemy kolejno: żałem we własnym środowisku serwerowym.
FTP; Ssh monitorowanie błędnych logowań Oczywiście są to podstawowe aspekty bezpie-
przez ssh. Opcje w tych sekcjach są tak trywial- " # cd rkhunter czeństwa, lecz często zdarza się, że pomijamy
ne, że każdy w szybki sposób zorientuje się, " # ./installer.sh. je albo po prostu o nich zapominamy. Mam na-
dzieję, że nie tylko początkujący użytkownicy
zajrzą do tego artykułu, ale również doświad-
czeni fani Linuksa przejrzą moje propozycje
i znajdą coś dla siebie.
O autorze
Admin RedHat5/Fedora/Debian. W branży
od 4 lat. Zawodowo nieugięty administrator,
właściciel kilku serwerów.
Kontakt z autorem: zatara@poczta.fm
Rysunek 3. Przykład z informacjami wyświetlającymi się na ekranie przy udanej próbie logowania
www.lpmagazine.org 71
Wyszukiwarka
Podobne podstrony:
2007 11 Amavis – system zabezpieczenia poczty [Bezpieczenstwo]
2007 11 Amavis – system zabezpieczenia poczty [Bezpieczenstwo]
2007 04 Qmail – nowoczesny serwer pocztowy [Bezpieczenstwo]
egzamin 2007 08 rozw
Matematyka Matura próbna grudzień 2007 poziom podstawowy
K2 2007 08 zad 2
Egzamin 2007 08
podstawowa konfiguracja serwera(od blumena)
2007 08 Common Colors Creating Icc Color Profiles with Argyll Cms
2007 08 UML – modelowanie statycznych aspektów oprogramowania [Inzynieria Oprogramowania]
więcej podobnych podstron