Projektowanie komputerowe - projket
Server Linux RedHat 7.2
Prowadzący Projekt wykonali:
Dr inż Stanisłw Chojnacki Karolina Grabowska
Paweł Madaj
Mariusz Szyszka
grupa ISSIZ semestr VII
Bydgoszcz 2003
Spis tresci
1. Struktura i cel projektu .......................................................................................3
2. Instalacja Linux'a dystrybucja RedHat 7.2 ........................................................6
3. Opis instalacji Apacha wraz z obsluga PHP .......................................................8
4. Apache + OpenSSL + mod_ssl .........................................................................11
5. Opis konfiguracji plikow Apacha: httpd.conf i access.conf .............................15
6. Opis instalacji Postrgresql wersja 3.23.49 ........................................................17
7. Konfiguracja servera poczty..............................................................................19
8. Opis instalacji proftpd. ......................................................................................32
9. Kompilacja jadra w celu update'a jadra i wprowadzeniu
dodatkowy zabezpieczen ..................................................................................34
10. Problem bezpieczenstwa servera.....................................................................38
11. FreeBSD kontra RedHat Linux........................................................................47
12. Dodatki ............................................................................................................51
Struktura i cel projektu
Struktura projektu
Server oparty na systemie Linux dystrybucja RedHat 7.2
Zainstalowane pakiety:
apache_1.3.27 - obsluga stron www
php-4.2.1 - obsluga php
postfix-1.1.12 - poczta SMTP
proftpd-1.2.7 - server ftp
postgresql-7.0.3 - bazy danych
dodatkowo
openssh-3.5.1p1 - program umozliwiajacy zdalne logowanie sie na server
pine4.44 - program do odbierania poczty pod konsola
phpMyAdmin-2.2.6 - obsluga baz danych z poziomu www
phpSysInfo-2.0 - info o systemie, test php
oidentd-2.0.3 - program uniemozliwiajacy zmiane identa (loginu)
epic4-0.9.16 - klient IRC
BitchX-1.0c19 - klient IRC
IP 212.122.192.46
Domain name srvtclin.atr.bydgoszcz.pl
Gataway 212.122.192.32
Wersja jadra 2.4.18-14
Procesory 1
Model Pentium MMX
Chip MHz 199,72 MHz
RAM 32MB
Urzadzenie IDE hda: ST38410A (Rozmiar: 3.2 GB)
Cel projketu
Biorac pod uwage ze system operacyjny Windows ma wiele slabych punktow i
ze jest bardzo wymagajacy, server na systemie operacyjnym Linux jest
dobrym rozwiazaniem. Dodatkowym atutem jest doswiadczenie jakie nabylismy w czasie opiekowania sie serverem w poprzednim semestrze.
Uzytkownicy naszego servera maja dostep do nastepujacych uslug:
- mozliwosc osadzenia na serverze strony www - World Wide Web
- mozliwosc korzystania z poczty elektronicznej smtp - Simple Mail
Transfer Protocol
- mozliwosc korzystania z ftp - File Transfer Protocol
- mozliwosc korzystania z bazy danych Postgresql
- mozliwosc korzystania z IRC - Internet Realy Chat
Uzytkownicy servera
root -> Pawel Madaj [pawel@madaj.org]
-> Mariusz Szyszka [mariusz@szyszka.org]
-> Karolina Grabowska [ karolcia@wp.pl ]
hazy, szycha, karolcia, www, www1, www2
Strony dzialajace na serverze
212.122.192.46 -> srvtclin.atr.bydgoszcz.pl
srvtclin.atr.bydgoszcz.pl/~www1
srvtclin.atr.bydgoszcz.pl/~www2
2. Instalacja Linux'a dystrybucja RedHat 7.2
1. Wybieramy forme instalacji systemu Red Hat Linux
boot: text
2. Wybieramy jezyk z ktorego bedziemy korzystac podczas instalacji
English
3. Wybieramy model klawiatury
pl
4. Wybieramy model myszki
np. Generic - 3 Buttons Mouse (PS/2)
5. Wybieramy typ systemu ktory chcemy zainstalowac
custom
6. Ustawiamy partycje za pomoca programu Disk Druid
6.1. Tworzymy partycje root'owska (Filesystem Type ext2 lub ext3)
6.2. Tworzymy partycje swap o rozmiarze 2 razy ilosc pamieci RAM w
komputerze
Aby stworzyc partycje wybieramy NEW
Aby edytowac partycje wybieramy EDIT
Aby skasowac partycje wybieramy DELETE
7. Wybieramy boot loader
use lilo boot loader
8. Wskazujemy miejsce gdzie nalezy zainstalowac boot loader
Master Boot Record (MBR)
9. Jezeli chcesz dodac opcje boot'owania robimy to tutaj, w
naszym przypadku pomijamy ten punkt
10. W przypadku posiadania wiecej niz jednego systemu operacyjnego
na komputerze mamy mozliowsc dokonania wyboru ktory system ma sie
defaultowo boot'owac.
11. Konfiguracja sieci
Odznaczamy pole Use bottp/dhcp i wypelniamy pola
IP address:
Netmask:
Default Gateway (IP):
Primary nameserver:
Secondary nameserver:
12. Konfiguracja Firewall'a
Wybieramy poziom bezpieczenstwa na No firewall
13. Wybieramy jezyki ktore bedziemy uzywac w systemie
English Polish
14. Wybieramy ktory z jezykow wybranych w pukncie 13 ma byc ustawiony
jako defaultowy.
15. Wybieramy strefe czasowa
Europe/Warsaw
16. Ustawiamy haslo na root'a
17. Tworzymy konto zwyklego uzytkownika
18. Autentication Configuration - pomijamy i przechodzimy dalej
19. Wybieramy pakiety ktore nalezy zainstalowac
Sound and Mulitemdia Support
Network Support
Dialup Support
Router/Firewall
DNS Name Server
Network Managed Workstation
Authoring and Publishing
Emacs
Utilites
Legancy Application Support
Software Development
Kernel Development
20. Konfigurujemy karte grafiki
w tym celu wybieramy rodzaj karty oraz ilosc pamieci RAM na karcie.
21. Rozpoczynamy instalacje
logi znajduja sie w /tmp/install.log
3. Opis instalacji Apacha wraz z obsluga PHP
Niezbedne zrodla:
apache_1.3.27.tar.gz
php-4.2.1.tar.gz
zaloguj sie jako root
umiesc zrodla w odpowiednim katalogu np. /usr/local/src/
rozpakuj zrodla (komenda tar)
[root@bzium] -> src <- [00:51:33]#tar -zxvf *.tar.gz
dla ulatwienia tworzymy linki do nowo powstalych katalogow
[root@bzium] -> src <- [01:00:40]#ln -s apache_1.3.27 apache
[root@bzium] -> src <- [01:00:55]#ln -s php-4.2.1 php
[root@bzium] -> src <- [01:01:03]#ls
apache apache_1.3.27 php php-4.2.1
[root@bzium] -> src <- [01:01:04]#
Kompilacja
[root@bzium] -> src <- [01:04:04]#cd /usr/local/src/apache
[root@bzium] -> apache <- [01:05:04]#./configure --prefix=/usr/local/apache
[root@bzium] -> apache <- [01:01:04]#cd /usr/local/src/php
[root@bzium] -> php <- [01:01:04]#./configure --with-apache=../apache --enable-track-vars
[root@bzium] -> php <- [01:01:04]#make
[root@bzium] -> php <- [01:01:04]#make install
[root@bzium] -> php <- [01:01:04]#cp php.ini-dist /usr/local/lib/php.ini
[root@bzium] -> php <- [01:01:04]#cd /usr/local/src/apache
[root@bzium] -> apache <- [01:01:04]#./configure --prefix=/usr/local/apache --activate-module=src/modules/php4/libphp4.a
[root@bzium] -> apache <- [01:01:04]#make
w przypadku wystapienia bledu zwiazanego z mod_auth_dbm.so nalezy do
configure dodac --disable-module=auth_dbm
[root@bzium] -> apache <- [01:01:04]#make install
Tworzymy katalogi documentow servera.
[root@bzium] -> src <- [01:54:56]#mkdir /home/www/jestem.online.com.pl/www
[root@bzium] -> src <- [01:54:59]#mkdir /home/www/jestem.online.com.pl/log
Pliki konfiguracyjne
W httpd.conf nalezy odnalezc i odkomentowc linie:
AddType application/x-httpd-php .php .php3
AddType application/x-httpd-php.source .phps
Skrypty Startowe
w pliku /etc/rc.d/rc.local nalezy umiescic linijke
/usr/local/apache/bin/apachectl start
Testy
Tworzymy plik testowy np test.php o zawartosci:
<?php phpinfo(); ?>
i umieszczamy go w katalogu dokumentow servra. Jesli strona zostanie
prawidlowo wyswietlona bedzie to oznaczalo ze wszystko zostalo zrobione poprawnie.
Intsalacja Apacha wraz z obsługą PHP i MySQL - Algorytm
4. Apache + OpenSSL + mod_ssl
Wstęp
W dokumencie tym staralismy się jak najdokładniej opisać
skonfigurowanie Apacza wraz z SSL. Rosnąca popularność wszelkiego rodzaju
rzeczy dostępnych przez www wraz z jeszcze bardziej rosnącym
lenistwem ludzi powoduje, że nawet sprawdzanie poczty użytkownicy
chcą mieć przez www. Tu się pojawiają hasła, sniffery, niezabezpieczony http, itp.
Współpracę Apacza i SSL możemy skonfigurować
na dwa sposoby: (1) Apache + apache_ssl lub (2) Apache + mod_ssl.
Sposób pierwszy polega na wkompilowaniu SSLa do Apacza, jest bardzo
trudny i zalecany, gdy serwer jest naprawdę obciążony. Drugi sposób,
ten, który opisujemy, jest nieznacznie wolniejszy, ale o wiele szybciej i
łatwiej go wprowadzic w uzycie.
Cały problem polega na tym, że samo tworzenie kluczy, certyfikatów itp. jest
dość skomplikowane i opis tego zajmie ok 80% właściwej treści tego
dokumentu. Natomiast samo skonfigurowanie Apacza jest stosunkowo proste.
Zrezygnowaliśmy tutaj z opisu gotowych skryptów programu OpenSSL, wszystko będziemy robić ręcznie.
Instalacja
Najważniejsze rzeczy, które potrzebujemy:
mod_ssl - należy ściągnąć ostatnią wersję do najnowszego dostępnego
Apacza.
Apache - należy ściągnąć wersję, do której pasuje mod_ssl.
OpenSSL - należy ściągnąć ostatnią wersję.
Gdy piszemy ten dokument, korzystamy z:
apache-1.3.27 (ostatnia dostępna wersja)
mod_ssl-2.8.5.-1.3.27 (ostatnia wersja mod_ssl do ostatniego Apacza :)
openssl-0.9.6b (ostatnia dostępna wersja)
Teraz należy wrzuć wszystko do jakiegoś katalogu z instalkami. U nas tak:
/usr/local/src i tutaj wrzucamy wszystkie trzy spakowane pliki. Nadszedł
już czas, żeby je wszyskie rozpakować. Po wydaniu odpowiednich poleceń, mamy:
/usr/local/src/mod_ssl-2.8.5-1.3.22/
/usr/local/src/apache_1.3.27/
/usr/local/src /openssl-0.9.6b/
Wszystko robimy jako użytkownik root.
1) OpenSSL
Sama konfiguracja, kompilacja i instalacja jest
prosta. Wiecej szczegolow można uzyskac w pliku INSTALL.
cd /usr/local/src/openssl-0.9.6b/
./config --prefix=/usr/local/openssl
make
make test
make install
Jeśli wybrana zostanie inna ścieżka do instalacji niż /usr/local/openssl należy pamiętać,
żeby później odpowiednio je zmieniać. Warto po instalacji, dopisać:
- do /etc/profile, do zmiennej PATH: "....:/usr/local/openssl/bin"
Żeby zaczęło to działać, należy się wylogować i zalogować ponownie. W każdym
razie dobrze jest mieć plik "openssl" w każdym momencie dostępny.
- do /etc/ld.so.conf dopisać: "/usr/local/openssl/lib". Następnie wydajemy
komendę "ldconfig".
Zaczynamy prawdziwą instalacje:
Potrzebujemy certyfikat dla naszej strony www. Tak więc możemy go sobie wygenerować. Składa się na to wygenerowanie klucza prywatnego oraz prośby o certyfikat "podpisanej" przez ten klucz. Następnie ta prośba powinna zostać zautoryzowana, podpisana, przez odpowiednią organizację certyfikującą, co wiąże się ze sporymi kosztami. W naszym wypadku sami staniemy się organizacją certyfikującą (CA) dla siebie. To z kolei wymaga wygenerowania klucza prywatnego dla organizacji certyfikującej oraz certyfikatu dla niej. Tym właśnie certyfikatem organizacja certyfikująca podpisuje "prośby o certyfikat" dla stron www.
Najpierw więc staniemy się organizacją certyfikującą (CA). Potrzebujemy,
jak wcześniej wspomnieliśmy klucza prywatnego CA oraz certyfikatu. Zakładamy, że
nasze certyfikaty i klucze będziemy trzymać w katalogu /etc/ssl, (w przypadku braku takiego katalogu należy go utworzyć). Przystępujemy do generowania klucza CA (klucze standardowo mają rozszerzenie .key).
cd /etc/ssl
openssl genrsa -des3 -out ca.key 1024
W ten sposób utworzyliśmy prywatny klucz, ca.key, dodatkowo zaszyfrowany hasłem,
instytucji certyfikującej. Hasło musimy zapamiętać i nie może być zbyt proste.
Jeszcze raz zwracamy uwagę na fakt, że nasz klucz prywatny jest zaszyfrowany.
Teraz musimy sobie wygenerować właściwy certyfikat CA. Będzimy proszeni o wpisanie
hasła do klucza prywatnego CA. Wszystko, co wpiszemy później to dane identyfikacyjne
CA - będą te rzeczy do wglądu poprzez strone www.
openssl req -new -x509 -key ca.key -out ca.crt -days 1024
Otrzymaliśmy w ten sposób plik ca.crt, który jest właściwym
certyfikatem CA (do podpisywania innych). Podsumowując - mamy pliki ca.key
czyli klucz prywatny certyfikatu oraz ca.crt - właściwy certyfikat.
Certyfikaty mają rozszerzenie .crt. Kolejna uwaga:
Nasz certyfikat instytucji ma ważność 1024 dni, certyfikaty, które będziemy
podpisywać nie mogą mieć ważności dłuższej, niż sam certyfikat CA.
Jeszcze jeden rodzaj rozszerzeń - .csr - są to "prośby o certyfikat".
Podpisuje się je certyfikatem CA i wtedy stają się ona właściwymi certyfikatami np. www.
Taki stworzymy dla nas. csr to Certificate Signing Request.
Teraz stworzymy dla naszej strony www, dla naszego Apacza, klucz prywatny oraz
certyfikat (dokładnie: plik .csr, kandydat na certyfikat). Robimy:
openssl genrsa -des3 -out server.key 1024
Hasło należy zapamiętać, będzie ono potrzebne np. przy starcie Apacza z SSL.
Gdy mamy już klucz prywatny, pozostało wygenerować .scr, który później sobie
uwierzytelnimy:
openssl req -new -key server.key -out server.csr
Podajemy hasło, które przed chwilą sobie ustawiliśmy a następnie dane naszej
firmy, naszej strony www. W tym miejscu najważniejsze: w polu Common Name:
wpisujemy adres http strony, pod którą będzie działał (np. www.srvtclin.atr.bydgoszcz.pl).
W pliku, który powstał (server.csr), znajduje się "certificate request". Podsumowując: mamy certyfikat CA (ca.crt), którym zaraz podpiszemy "prośbę" o certyfikat (server.csr). Dwa hasła które mamy (dostęp do plików ca.key i server.key będą potrzebne: pierwszy przy podpisywaniu "prośby"a drugi w momencie startu Apacza z SSL.
Teraz ważna uwaga: teoretycznie podpisać "prośbę" można ręcznie, z linii poleceń
korzystając z "openssl ca.....[rozne parametry]" ale to spowoduje, że Internet
Explorer będzie zwracał błąd "Nie znaleziono serwera". W samej dokumentacji mod_ssl
napisano na ten temat: ""openssl ca" has some strange requirements and the default
OpenSSL config doesn't allow one easlily to use "openssl ca" directly.".
W każdym samo podpisanie musimy zrobić przy pomocy skryptu znajdującego się w
kodzie źródłowym mod_ssl'a (u nas: /usr/local/src/mod_ssl-2.8.5-1.3.22/pkg.contrib/).
Tak więc kopiujemy wszystkie nasze pliki właśnie tam:
cp ca.crt ca.key server.csr server.key /root/Temp/mod_ssl.../pkg.contrib/
cd /usr/local/src/mod_ssl.../pkg.contrib/
./sign.sh server.csr
Teraz musimy podać hasło klucza prywatnego CA (to pierwsze hasło). Wyświetlone
zostaną dane strony, którą chcemy podpisać. Przypominamy, że w miejscu Common Name
powinien być widoczny adres http strony, dla której klucz podpisujemy. Jeśli jest o.k.
naciskamy 'y' i powstaje nam plik: server.crt. To właśnie o to chodziło nam od początku. Dla Apacza potrzebne będą dwa pliki: plik z kluczem dla www (server.key) oraz plik z certyfikatem dla www (server.crt).
Teraz tworzymy sobie katalog /etc/ssl/apache i wrzucamy tam te dwa pliki:
mkdir /etc/ssl/apache
mv server.key /etc/ssl/apache
mv server.crt /etc/ssl/apache
Nie ma znaczenia, gdzie je umieścimy, bo Apache po skonfigurowaniu i
tak skopiuje je do swojego katalogu konfiguracyjnego, do podkatalogów ssl.crt oraz
ssl.key.
2) mod_ssl
Cały czas zakładamy, że jesteśmy w /usr/local/src/mod_ssl-2.5.5-1.3.22/
Wydajemy polecenie (należy pamiętać o swoich ścieżkach):
./configure --with-apache = ../apache_1.3.22/
--with-crt = /etc/ssl/apache/server.crt
--with-key = /etc/ssl/apache/server.key
3) Apache
Wchodzimy teraz do katalogu z kodem źródłowym Apacza. W jednej linii piszemy:
SSL_BASE = ../openssl-0.9.6b ./configure --enable-module=ssl
--prefix=/usr/local/apache --[różne inne Twoje opcje]
Należy uważać na ścieżki dostępu. Apacz spokojnie się configuruje...
Teraz pozostało: make i make install.
Co dalej ?
Posiadamy już Apacza z SSL. Nie wiadomo jeszcze tylko czy działa.
W odpowiednim katalogu (u nas /usr/local/apache/bin) są odpowiednie pliki, aby
to sprawdzić. Na początek jeszcze kilka uwag:
należy dorzuć do pliku /etc/services wpis (jeśli ich nie ma)
https 443/tcp
https 443/udp
do uruchomienia Apacza z SSL należy użyć apachectl startssl
każda domena wirtualna wymaga osobnego klucza i certyfikatu
mod_ssl automatycznie dodal swój katalog z dokumentacją do manuala Apacza.
Wystarczy napisać http://nazwa_hosta/manual/mod/mod_ssl
Do automatycznego uruchamiania Apacha przy restarcie systemu można wylaczyc haslo.
Żeby je usunac, należy wejść do katalogu z kluczem prywatnym serwera www. U nas:
cd /etc/ssl/apache
cp server.key server.key.old
openssl rsa -in server.key.old -out server.key
chmod 400 server.key
W ten sposób nie będziemy pytani o hasło przy starcie Apacza. Nie można zapomnieć o
chmod 400 server.key.
Na koniec...
1. Jeśli uruchomiany zostaje Apacza z SSL, po wydaniu polecenia ps x należy zobaczyć
m.in. /usr/local/apache/bin/httpd -DSSL. Jeśli nie będzie tego -DSSL,
zapewne zostało wpisane "apachectl start" zamiast "apachectl startssl".
2. Polecenie netstat -a |more powinno pokazać przy uruchomionym Apaczu z SSL zajęte (nasłuchujące) porty www(80) i https(443).
3. Zawsze możena wykonać telnet localhost 443 i jeśli nie zostaniemy odrzuceni to dziala
4. Aby sprawdzić czy SSL jest ok. to:
openssl s_client -connect localhost:443 -state -debug
5. Opis konfiguracji plikow Apacha: httpd.conf i access.conf
Korzystamy ze standardowych plikow konfiguracyjnych w ktorych nanosimy
potrzebne nam zmiany.
Wstawiamy nastepujace linie w pliku httpd.conf:
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.htm index.shtml index.php4
</IfModule>
AccessFileName .htaccess
<VirtualHost 212.142.192.46>
DocumentRoot /home/www/srvtclin.atr.bydgoszcz.pl/www/
ServerNAme jestem.online.com.pl
CustomLog /home/www/ srvtclin.atr.bydgoszcz.pl /logs/transfer.log combined
</VirtualHost>
Krotkie wyjasnienie
VirtualHost - podajemy IP pod ktorym ma byc umieszczona strona www
DocumentRoot - katalog w ktorym bedzie umieszczona nasz strona www
ServerNAme - nazwa naszego servera
CustomLog - tworzy w katalogu strony www plik taransfer.log ktory umozliwia podgladanie "osob" odwiedzajacych nasza strone
Jesli korzystamy z innych virtualnych hostow musimy wyedytowac dodatkowo
plik access.conf
Wstawiamy nastepujace linie:
NameVirtualHost 212.142.192.46
Zakladamy stworzyc inna strone na odzielny IP np www.szycha.info o IP 213.146.59.169
w tym celu w access.conf wpisujemy:
<VirtualHost 213.146.59.169>
ServerName szycha.info
ServerAlias www.szycha.info
ServerAdmin mariusz@szyszka.org
DocumentRoot /home/www/szycha.info/www
ErrorLog /home/www/szycha.info/logs/error.log
CustomLog /home/www/szycha.info/logs/transfer.log combined
</VirtualHost>
W przypadku gdy posiadany adres np.
www.madaj.org is a nickname for jestem.online.com.pl
jestem.online.com.pl has address 213.146.59.161
wowczas w pliku access.conf umieszczamy
<VirtualHost 213.146.59.161>
ServerName madaj.info
ServerAlias www.madaj.info
ServerAdmin pawel@kurczak.net
DocumentRoot /home/www/madaj.info/www
ErrorLog /home/www/madaj.info/logs/error.log
CustomLog /home/www/madaj.info/logs/transfer.log combined
</VirtualHost>
W przypadku gdyby strony www nie „chodzily” nalezy dodac
do pliku access.conf taki oto fragment:
<Directory /home/*/www>
AllowOverride AuthConfig FileInfo Indexes Limit Options
Options MultiViews SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS PROPFIND>
</Limit>
<Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
</Limit>
</Directory>
<Directory /home/www/*/www>
AllowOverride AuthConfig FileInfo Indexes Limit Options
Options MultiViews SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS PROPFIND>
</Limit>
<Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
</Limit>
</Directory>
6. Opis instalacji Postgresql wersja 7.0.3
Zaczynamy :
Logujemy się do systemu jako root.
Uwaga - czasem konto z UID=0 może nazywać się inaczej, ale zakładamy standardową instalację.
Dodajemy użytkownika postgres i grupę postgres
groupadd postgres && adduser postgres
Zakładam że wczesniej ściągneliśmy wersje źrodłowe powyższych programów
Rozpakowujemy postgresql-7.0.3.tar.gz poleceniem
tar -zxvf postgresql-7.1.tar.gz
Wchodzimy do katalogu postgresql*
cd postgresql-7.0.3
uruchamiamy skrypt konfiguracyjny
./configure --prefix=/usr/local/pgsql --with-perl --enable-locale --enable-multibyte
Wyjaśnienie użytych opcji:
--enable-locale --enable-multibyte |
- włączenie obsługi pakietu locales |
--prefix=katalog instalacji |
- ustawienie katalogu instalacji |
--with-perl |
- wlączamy interfejs perl |
Resztę dostępnych opcji można uzyskać po wydaniu komendy ./configure -help
Następnie przeprowadzamy kompilację poleceniem:
make
Teraz instalacja czyli:
make install
Już prawie mamy zainstalowanego postgresql-a, jeszcze tylko
w /etc/profile wstawiamy zmienną export LD_LIBRARY_PATH=/usr/local/pgsql/lib
Można jescze dodać w etc/profile do zmiennej PATH dodać /usr/local/pgsql/bin w ten sposób mamy dostep do interpretera i innych poleceń z pakietu postgresql (dokladnie jak w DOSie ze zmienną PATH)
Teraz tworzymy katalog w ktrórym będą przechowywane bazy
mkdir /usr/local/pgsql/data
właścicielem powinien być postgres
chown postgres /usr/local/pgsql/data
Logujemy sie jako postgres i wydajemy komendę
initdb -D /usr/local/pgsql/data
Czas na test:
createdb test
a potem uruchamiamy linię poleceń postgresql poleceniem
psql test
Dalej to juz zabawa z językiem sql czyli
Select * ....
Jeszcze automatyczny start z plików startowych - wystaczy dopisać np. do /etc/rc.d/rc.local linię su postgres -c "/usr/local/pgsql/bin/postmaster -i -S -D /usr/local/pgsql/data"
7. Konfiguracja servera poczty:
Server poczty bedzie oparty na pakiecie "Postfix" na najnowszej
wersji uznanej za najszybsza i najbezpieczniejsza
postfix-1.1.12 dostepnym pod adresem
ftp.icm.edu.pl/pub/unix/mail/postfix/official/postfix-1.1.12.tar.bz2.
Przenosimy zrodla do
katalogu /usr/local/src/ gdzie nastepnie rozpakowywujemy:
[root@bzium] -> root <- [23:11:22]#mv postfix-1.1.12 /usr/local/src
[root@bzium] -> src <- [23:11:22]#tar zxvf postfix-1.1.12
Nastepnie wchodzimy do katalogu postfix-1.1.12 i przystepujemy do kompilacji
[root@bzium] -> postfix <- [23:13:55]#make
Teraz aby zastapic sendmaila ( uważany za niebezpieczny )
musimy wykonac nastepujace polecenia:
[root@bzium] -> postfix <- #mv /usr/sbin/sendmail /usr/sbin/sendmail.OFF
[root@bzium] -> postfix <- #mv /usr/bin/newaliases /usr/bin/newaliases.OFF
[root@bzium] -> postfix <- #mv /usr/bin/mailq /usr/bin/mailq.OFF
[root@bzium] -> postfix <- #chmod 755 /usr/sbin/sendmail.OFF
/usr/bin/newaliases.OFF /usr/bin/mailq.OFF
Nastepnie tworzymy grupe i usera 'postfix' a nastepnie grupe 'postdrop':
[root@bzium] -> postfix <- [23:13:55]#groupadd postfix
[root@bzium] -> postfix <- [23:13:55]#adduser -g postfix -M postfix
[root@bzium] -> postfix <- [23:13:55]#groupadd postdrop
Nastepnie wykonujemy nastepujaca komende:
[root@bzium] -> postfix <- [23:13:55]#make install
Teraz program bedzie sie pytac o poszczegolne pliki gdzie ma je
zainstalowac, aby zostac przy standardowych ustawieniach
na kazde pytanie naciskamy przycisk "ENTER"
Przechodzimy do pliku konfiguracyjnego ktory zostal osadzony w
/etc/postfix/main.cf, ktory wyglda tak:
2bounce_notice_recipient = postmaster
access_map_reject_code = 554
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases, nis:mail.aliases
allow_mail_to_commands = alias,forward
allow_mail_to_files = alias,forward
allow_min_user = no
allow_percent_hack = yes
allow_untrusted_routing = no
alternate_config_directories =
always_bcc =
append_at_myorigin = yes
append_dot_mydomain = yes
best_mx_transport =
biff = no
body_checks =
bounce_notice_recipient = postmaster
bounce_size_limit = 50000
broken_sasl_auth_clients = no
canonical_maps =
command_directory = /usr/sbin
command_expansion_filter = 1234567890!@%-_=+:,./abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
command_time_limit = 1000s
config_directory = /etc/postfix
content_filter = smtp-amavis:[127.0.0.1]:10027 -> (wzkazanie filtra przez który będą kierowane mail'e)
daemon_directory = /usr/libexec/postfix
daemon_timeout = 18000s
debug_peer_level = 2
debug_peer_list =
default_database_type = hash
default_delivery_slot_cost = 5
default_delivery_slot_discount = 50
default_delivery_slot_loan = 3
default_destination_concurrency_limit = 10
default_destination_recipient_limit = 50
default_extra_recipient_limit = 1000
default_minimum_delivery_slots = 3
default_privs = nobody
default_privs = nobody
default_process_limit = 50
default_recipient_limit = 10000
default_transport = smtp
default_verp_delimiters = +=
defer_transports =
delay_notice_recipient = postmaster
delay_warning_time = 0h
deliver_lock_attempts = 20
deliver_lock_delay = 1s
disable_dns_lookups = no
disable_verp_bounces = no
disable_vrfy_command = no
dont_remove = 0
double_bounce_sender = double-bounce
duplicate_filter_limit = 1000
empty_address_recipient = username
error_notice_recipient = postmaster
expand_owner_alias = no
export_environment = TZ MAIL_CONFIG
extract_recipient_limit = 10240
fallback_relay =
fallback_transport =
fast_flush_domains = $relay_domains
fast_flush_purge_time = 7d
fast_flush_refresh_time = 12h
fault_injection_code = 0
fork_attempts = 5
fork_delay = 1s
forward_expansion_filter = 1234567890!@%-_=+:,./abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
forward_path = $home/.forward${recipient_delimiter}${extension},$home/.forward
hash_queue_depth = 2
hash_queue_names = incoming,active,deferred,bounce,defer,flush
header_checks = regexp:/etc/postfix/header_checks ->(plik z bzdurnymi naglowkami)
header_size_limit = 102400
home_mailbox =
hopcount_limit = 50
ignore_mx_lookup_error = no
import_environment = MAIL_CONFIG MAIL_DEBUG MAIL_LOGTAG TZ XAUTHORITY DISPLAY
in_flow_delay = 1s
inet_interfaces = all
inet_interfaces = all
initial_destination_concurrency = 5
invalid_hostname_reject_code = 501
ipc_idle = 100s
ipc_timeout = 3600s
line_length_limit = 2048
lmtp_cache_connection = yes
lmtp_connect_timeout = 0s
lmtp_data_done_timeout = 600s
lmtp_data_init_timeout = 120s
lmtp_data_xfer_timeout = 180s
lmtp_lhlo_timeout = 300s
lmtp_mail_timeout = 300s
lmtp_quit_timeout = 300s
lmtp_rcpt_timeout = 300s
lmtp_rset_timeout = 300s
lmtp_sasl_auth_enable = no
lmtp_sasl_password_maps =
lmtp_sasl_security_options = noplaintext, noanonymous
lmtp_skip_quit_response = no
lmtp_tcp_port = 24
local_command_shell =
local_destination_concurrency_limit = 2
local_destination_recipient_limit = 1
local_recipient_maps =
local_transport = local
luser_relay =
mail_name = Postfix
mail_owner = postfix
mail_release_date = 20021122
mail_spool_directory = /var/mail
mail_version = 1.1.12
mailbox_command =
mailbox_command_maps =
mailbox_delivery_lock = flock, dotlock
mailbox_size_limit = 51200000
mailbox_transport =
mailq_path = /usr/bin/mailq
manpage_directory = /usr/local/man
maps_rbl_domains =
maps_rbl_reject_code = 554
maps_rbl_reject_code = 554
masquerade_classes = envelope_sender, header_sender, header_recipient
masquerade_domains =
masquerade_exceptions =
max_idle = 100s
max_use = 100
maximal_backoff_time = 4000s
maximal_queue_lifetime = 5d
message_size_limit = 51200000
minimal_backoff_time = 1000s
mydestination = srvtclin.atr.bydgoszcz.pl
mynetworks = 212.122.192.0/24
myorigin = $myhostname
newaliases_path = /usr/bin/newaliases
non_fqdn_reject_code = 504
notify_classes = resource,software
owner_request_special = yes
parent_domain_matches_subdomains = debug_peer_list,fast_flush_domains,mynetworks,permit_mx_backup_networks,qmq
permit_mx_backup_networks =
prepend_delivered_header = command, file, forward
process_id_directory = pid
program_directory = /usr/libexec/postfix
propagate_unmatched_extensions = canonical, virtual
qmgr_fudge_factor = 100
qmgr_message_active_limit = 10000
qmgr_message_recipient_limit = 10000
qmgr_message_recipient_minimum = 10
qmgr_site_hog_factor = 100
qmqpd_authorized_clients =
qmqpd_error_delay = 5s
qmqpd_timeout = 300s
queue_directory = /var/spool/postfix
queue_minfree = 8000000
queue_run_delay = 1000s
readme_directory = no
recipient_canonical_maps =
recipient_delimiter =
reject_code = 554
relay_domains = $mydestination
relay_domains_reject_code = 554
relayhost =
relayhost =
relocated_maps =
require_home_directory = no
resolve_dequoted_address = yes
sample_directory = /etc/postfix
sender_canonical_maps =
sendmail_path = /usr/sbin/sendmail
service_throttle_time = 60s
setgid_group = postdrop
smtp_always_send_ehlo = yes
smtp_bind_address =
smtp_connect_timeout = 0s
smtp_data_done_timeout = 600s
smtp_data_init_timeout = 120s
smtp_data_xfer_timeout = 180s
smtp_destination_concurrency_limit = $default_destination_concurrency_limit
smtp_destination_recipient_limit = $default_destination_recipient_limit
smtp_helo_timeout = 300s
smtp_line_length_limit = 990
smtp_mail_timeout = 300s
smtp_never_send_ehlo = no
smtp_pix_workaround_delay_time = 10s
smtp_pix_workaround_threshold_time = 500s
smtp_quit_timeout = 300s
smtp_randomize_addresses = yes
smtp_rcpt_timeout = 300s
smtp_sasl_auth_enable = no
smtp_sasl_password_maps =
smtp_sasl_security_options = noplaintext, noanonymous
smtp_skip_4xx_greeting = yes
smtp_skip_5xx_greeting = yes
smtp_skip_quit_response = yes
smtpd_banner = mail.srvtclin.atr.bydgoszcz.pl ESMTP
smtpd_client_restrictions =
permit_mynetworks
check_client_access hash:/etc/poczta/relay -> (plik z domenami zaufania)
check_relay_domains
smtpd_delay_reject = yes
smtpd_error_sleep_time = 5s
smtpd_etrn_restrictions =
smtpd_hard_error_limit = 100
smtpd_hard_error_limit = 100
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, reject_invalid_hostname, reject_non_fqdn
smtpd_history_flush_threshold = 100
smtpd_junk_command_limit = 100
smtpd_noop_commands =
smtpd_null_access_lookup_key = <>
smtpd_recipient_limit = 1000
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, reject_non_fqdn_recipient
smtpd_restriction_classes =
smtpd_sasl_auth_enable = no
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sender_login_maps =
smtpd_sender_restrictions = reject_unauth_pipelining, reject_unknown_sender_domain, reject_non_fqdn_sender
smtpd_soft_error_limit = 10
smtpd_timeout = 300s
soft_bounce = no
stale_lock_time = 500s
strict_rfc821_envelopes = no
sun_mailtool_compatibility = no
swap_bangpath = yes
syslog_facility = mail
syslog_name = postfix
transport_maps = hash:/etc/postfix/transport
transport_retry_time = 60s
trigger_timeout = 10s
undisclosed_recipients_header = To: undisclosed-recipients:;
unknown_address_reject_code = 450
unknown_client_reject_code = 450
unknown_hostname_reject_code = 450
verp_delimiter_filter = -=+
virtual_gid_maps =
virtual_mailbox_base =
virtual_mailbox_limit = 51200000
virtual_mailbox_lock = fcntl
virtual_mailbox_maps =
virtual_maps =
virtual_minimum_uid = 100
virtual_uid_maps =
debugger_command =
PATH=/usr/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
myhostname = srvtclin.atr.bydgoszcz.pl
mydomain = srvtclin.atr.bydgoszcz.pl
Teraz musimy stworzyc katalog '/etc/poczta/'
[root@bzium] -> root <- [23:13:55]#mkdir /etc/poczta
Nastepnie tworzymy plik 'domeny' i wpisujemy tam
dostepne hosty w nastepujacy sposob:
pierwsza.domena.org OK
druga.domena.org OK
trzecia.domena.org OK
czwarta.domena.com OK
kolejna.domena.net OK
itd.info OK
Nastepnie tworzymy plik 'realy' i wpisujemy tam pule klasy lub
pojedyncze adresy ip ktore maja miec dostep do korzystania z severa poczty
poprzez np. klienty windows:
195 OK
213 OK
194 OK
80 OK
217 OK
62.87 OK
212 OK
62.244.137 OK
pl OK
10 OK
Ostatnia rzecza jaka robimy jest stworzenie plikow 'domeny.db i relay.db' w
katalogu '/etc/poczta/' za pomoca programu z pakietu 'Postfix' :
[root@bzium] -> root <- [23:13:55]#postmap /etc/poczta/relay
[root@bzium] -> root <- [23:13:55]#postmap /etc/poczta/domeny
Teraz sprawdzamy czy pliki zostaly stworzone w tym kalalogu komenda:
[root@bzium] -> root <- [23:13:55]#ls -la /etc/poczta/
i otrzymujemy listing w takim stylu:
drwxr-xr-x 2 root root 4096 maj 26 17:34 .
drwxr-xr-x 49 root root 4096 maj 27 18:37 ..
-rw-r--r-- 1 root root 240 maj 26 17:34 domeny
-rw-r--r-- 1 root root 12288 maj 28 23:42 domeny.db
-rw-r--r-- 1 root root 121 maj 26 17:34 relay
-rw-r--r-- 1 root root 12288 maj 28 23:42 relay.db
[root@bzium] -> root <- [23:42:14]#
Teraz wylaczamy na zawsze sendmaila nastepujacymi komendami:
[root@bzium] -> postfix <- [23:13:55]#/usr/sbin/sendmail.OFF -q
[root@bzium] -> postfix <- [23:13:55]#postfix start
Ostatnia czynnoscia jest sprawdzenie
poprawnego dzialania postfix'a poprzez sprawdzenie aktywnego portu:
[root@bzium] -> root <- [23:42:14]#telnet 0 25
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
220 bzium.elt.pl ESMTP Postfix
Kolejna rzecz to zabezpieczyc server poczty przed spamerami. Robi się to poprzez zainstalowanie pakietu SPAMASSASSIN i AMAVISD. Do tych pakietow potrzebne sa nam najnowy perl i jego moduly. Pobieramy najnowszego perla z ftp.icm.edu.pl/pub/CPAN/src/perl-5.8.0.tar.gz
Nastepnie przenosimy do zrodel: mv perl-5.8.0.tar.gz /usr/local/src/
Tam rozpakowywujemy i instaluejmy:
tar zxvf perl-5.8.0.ter.gz
cd perl-5.8.0/
./configure
make
make test
make install
Nastepnie uruchamiamy interaktywny instalator bibliotek perla:
perl -MCPAN -e shell
przy pierwszym uruchomieniu perl będzie się pytal o rozne ustawienia, wszystko akceptujemy ENTER'em. W przypadku nie odnalezienia czegos przez perl pozwala nam samym podac sciezke dostepu np. w przypadku gdy zamiast lynx'a uzywamy links na zapytanie perla „ whereis lynx ” podajemy sciezke dostepu do links'a czyli /usr/local/bin/links. Na pytanie „Parameters for the 'make install' command? “ piszemy:
UNINST=1 co bedzie zmuszalo perl'a do odinstalowania niezgodnych bibliotek. Gdy pokaze się taki znak zachety:
cpan>
przechodzimy do instalacji potrzebnych nam modulow poprzez podawania nastepujacych komend:
install MD5
install Net::Server
install IO::Wrap (wait)
install Unix::Syslog (etc...)
install Mail::Address
install MIME::Parser
install Convert::TNEF
install Convert::UUlib
install Compress::Zlib
install Archive::Tar
install Archive::Zip
install Net::SMTP
force install Net::DNS
install Mail::SpamAssassin
wpisujac exit wychodzimy z cpan'a.
Nastepnie przechodzimy do /usr/local/lib i tworzymy katalog Arc
cd /usr/local/lib/
mkdir Arc
cd Arc
teraz sciagamy porzebny nam pakiet links ftp.stat.umn.edu/pub/arc/arc.shar.gz
rozpakowywujemy , kompilujemy i przegrywamy plik arc.shar co /usr/bin
gunzip arc.shar.gz
/bin/sh arc.shar
cp arc /usr/bin
koeljny potrzebny program to unrar, wchodzimy na ftp: links ftp.rarlab.com/rar/rarlinux-3.0.tar.gz i pobieramy ten plik a nastepnie rozpakowujemy i przegrywamy unrar do /usr/bin
tar xzf rarlinux-3.0.tar.gz
cp rar/unrar /usr/bin
SpamAssassin wymaga rowniez programu zoo, tutaj mozemy troszke go oszukac poprzez stworzenie pliku zoo, nadajac mu prawa do wykonywania i wpisujac jedna linijke kodu:
joe /usr/bin/zoo
tam w pliku wpisujemy : #!/bin/sh (wychodzimy z pliku)
chmod +x /usr/bin/zoo
nastepnie pobieramy vscan (program antyvirusowy) z links http://sourceforge.net/project/showfiles.php?group_id=3978 wersje razor-agents-1.20.tar.gz
przegrywamy do /usr/local/src/ tam rozpakowujemy i instalujemy:
mv razor-agents-1.20.tar.gz /usr/local/src/
tar -zxvf razor-agents-1.20.tar.gz
cd razor-agents-1.20
perl Makefile.PL
make
make test
make install
przechodzimy na /usr/local/src i tam wreszcie sciagamy kolejny wymagany soft z links http://www.ijs.si/software/amavisd/
amavisd-new-20020630.tar.gz . Rozpakowujemy i instalujemy z dodatkowymi funkcjami:
tar -zxvf amavisd-new-20020630.tar.gz
cd amavisd-new-20020630
./configure --enable-postfix --with-smtp-port=10028 (podanie servera mail i portu nasluchjacego smtp)
make
make install
Konfiguracja Amavisd
Robimy kopie pliku konfiguracyjnego i edytujemy plik konfiguracyjny
cp /etc/amavisd.conf /etc/amavisd.conf-original
joe /etc/amavisd.conf
przechodzimy do lini (262) $notify_method = \&Amavis::Out::mail_via_pipe; i haszujemy ja # (ta linia była wykorzystywana do testow przez autora),
przechodzimy do lini (340) $inet_socket_port line = za znakiem rowna sie wstawiamy 10027 (port lokalny na ktorym bedzie akceptowac SMTP)
przechodzimy do lini (172)$mailfrom_notify_admin = podajemy adres mail postmastera, czyli postmaster@srvtclin.atr.bydgoszcz.pl
teraz ustawiamy AMAVISD żeby nasluchiwal maili tylko lokalnie, przechodzimy do lini (374 i 378)u usuwamy # z poczatku kazdej lini:
$inet_socket_bind = "127.0.0.1"; limit socket bind to loopback interface
#@inet_acl = qw( 127.0.0.1 ); # allow SMTP access only from localhost
nastepnie wylaczamy sluchanie z zewnatrz linia (351-2):
#@inet_acl = qw(127/8 193.2.4.243 193.2.4.66);
#$inet_socket_bind = undef; # bind to all IP interfaces
aby spam przesylac do kwarantanny przechodzimy do lini z zapisem :
$spam_quarantine_to = i za znakiem `=' wpisujemy 'spam-quarantine';
Nastepnie linijke z wpisem $SYSLOG_LEVEL = "user.info"; zamieniamy na $SYSLOG_LEVEL = "mail.info"; aby logi byly w /var/log/maillog.
Tworzymy konto amavisd ktorego wlascicielem bedzie (vscan) :
Adduser vscan -M
chown vscan /var/amavis
nadajemy prawda dostepu amavisd do katalogow i pliki SpamAssassin:
chown vscan /usr/share/spamassassin
cd /usr/share/spamassassin
chown vscan *
i pliki kwarantanny:
chown vscan /var/virusmails
Teraz tylko jeszcze do pliku /etc/postfix/master.cf dopisujemy kilka linijek aby postfix wiedzial co to jest smtp-vamavis:
joe /etc/postfix/master.cf
na koncu pliku wpisujemy:
smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes
127.0.0.1:10028 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
W tym momencie konczymy zabezpieczenie przed spamerami.
Teraz mozemy juz korzystac z pelnych uslug Postfix'a i Amavisd'a, aby
jednak programy byly odpalane po kazdym reboot'owaniu systemu dopisujemy
cztery linijki do pliki startujacego '/etc/rc.d/rc.local'
/usr/sbin/postfix start
echo "Starting postfix..."
/usr/sbin/amavisd start
echo ”Starting amavisd...”
Koniec instalacji i konfiguracji Postfix'a
Na biezaco mozemy sledzi postepowania porgramu za pomoca polecenia:
[root@bzium] -> root <- [23:42:14]#tail -f /var/log/maillog
Po wykonaniu którego przesledzimy podroz mail'a przez nasz server:
Jan 25 01:48:58 srvtclin postfix/smtpd[1718]: connect from unknown[80.48.25.200]
Jan 25 01:48:58 srvtclin postfix/smtpd[1718]: CE7CB1BDA2: client=unknown[80.48.25.200]
Jan 25 01:48:59 srvtclin postfix/cleanup[1719]: CE7CB1BDA2: message-id=<000c01c2c40a$95f28050$0100a8c0@server>
Jan 25 01:48:59 srvtclin postfix/smtpd[1718]: disconnect from unknown[80.48.25.200]
Jan 25 01:48:59 srvtclin postfix/qmgr[890]: CE7CB1BDA2: from=<hazy@g-h.pl>, size=1571, nrcpt=1 (queue active)
sty 25 01:49:02 srvtclin amavis[935]: (00935-01) SMTP-in /var/amavis/amavis-20030125T014901-00935: <hazy@g-h.pl> -> <hazy@srvtclin.atr.bydgoszcz.pl> Received: SIZE=1571 from srvtclin.atr.bydgoszcz.pl ([127.0.0.1]) by localhost (srvtclin.atr.bydgoszcz.pl [127.0.0.1]) (amavisd-new) with ESMTP id 00935-01 for <hazy@srvtclin.atr.bydgoszcz.pl>; sob, 25 sty 2003 01:49:02 -0000 (CET)
sty 25 01:49:02 srvtclin amavis[935]: (00935-01) Checking: <hazy@g-h.pl> -> <hazy@srvtclin.atr.bydgoszcz.pl>
sty 25 01:49:02 srvtclin amavis[935]: (00935-01) body hash: 3d566b7e362a02089282450dea96536a
sty 25 01:49:05 srvtclin amavis[935]: (00935-01) Using /usr/bin/vscan
sty 25 01:49:06 srvtclin amavis[935]: (00935-01)
sty 25 01:49:13 srvtclin amavis[935]: (00935-01) spam_scan: tests=HTML_50_70, SPAM_PHRASE_00_01, USER_AGENT_OE, <hazy@g-h.pl>
sty 25 01:49:13 srvtclin amavis[935]: (00935-01) fwd via smtp: [127.0.0.1:10028] <hazy@g-h.pl> -> <hazy@srvtclin.atr.bydgoszcz.pl>
Jan 25 01:49:14 srvtclin postfix/smtpd[1723]: connect from srvtclin.atr.bydgoszcz.pl[127.0.0.1]
Jan 25 01:49:14 srvtclin postfix/smtpd[1723]: 84BBF1BDA4: client=srvtclin.atr.bydgoszcz.pl[127.0.0.1]
Jan 25 01:49:14 srvtclin postfix/cleanup[1719]: 84BBF1BDA4: message-id=<000c01c2c40a$95f28050$0100a8c0@server>
Jan 25 01:49:14 srvtclin postfix/smtpd[1723]: disconnect from srvtclin.atr.bydgoszcz.pl[127.0.0.1]
sty 25 01:49:15 srvtclin amavis[935]: (00935-01) mail checking ended: DELIVERED
Jan 25 01:49:15 srvtclin postfix/qmgr[890]: 84BBF1BDA4: from=<hazy@g-h.pl>, size=2112, nrcpt=1 (queue active)
Jan 25 01:49:15 srvtclin postfix/smtp[1721]: CE7CB1BDA2: to=<hazy@srvtclin.atr.bydgoszcz.pl>, relay=127.0.0.1[127.0.0.1], delay=17, status=sent (250 Ok, id=00935-01, from MTA: Ok: queued as 84BBF1BDA4)
sty 25 01:49:15 srvtclin amavis[935]: (00935-01) TIMING [total 14297 ms] - mkdir tempdir: 909 (6%), SMTP EHLO: 87 (1%), SMTP pre-MAIL: 2 (0%), create email.txt: 370 (3%), SMTP pre-DATA-flush: 22 (0%), SMTP DATA: 76 (1%), mkdir parts: 261 (2%), body hash: 143 (1%), mime parse: 2663 (19%), AV-scan: 463 (3%), razor hash: 359 (3%), razor lookup: 1892 (13%), SA parse: 188 (1%), SA check: 5144 (36%), fwd-connect: 771 (5%), fwd-mail-from: 273 (2%), fwd-rcpt-to: 7 (0%), write-header: 103 (1%), fwd-body: 67 (0%), fwd-rundown: 156 (1%), unlink-2-files: 229 (2%), rundown: 114 (1%)
Jan 25 01:49:15 srvtclin postfix/local[1724]: 84BBF1BDA4: to=<hazy@srvtclin.atr.bydgoszcz.pl>, relay=local, delay=1, status=sent (mailbox)
Poprzez wytluszczone miejsca możemy zauwazyc ze najperw mail jest sprawdzany za pomoca programu vscan i przekierowane na localne smtp (127.0.0.1:10028), tam jest zakonczone sprawdzanie i nastepnie potwierdzenie dostarczenia maila do skrzynki.
A teraz proba wyslania spamu przez nasz server :
Jan 25 07:00:27 srvtclin postfix/smtpd[1738]: connect from pool-151-198-168-4.nwrk.east.verizon.net[151.198.168.4]
Jan 25 07:00:29 srvtclin postfix/smtpd[1738]: B556F1BDA2: client=pool-151-198-168-4.nwrk.east.verizon.net[151.198.168.4]
Jan 25 07:00:30 srvtclin postfix/smtpd[1738]: reject: RCPT from pool-151-198-168-4.nwrk.east.verizon.net[151.198.168.4]: 554 <shaw.alex@talk21.com>: Recipient address rejected: Relay access denied; from=<yourid651782@yahoo.com> to=<shaw.alex@talk21.com>
Jan 25 07:00:36 srvtclin postfix/smtpd[1738]: disconnect from pool-151-198-168-4.nwrk.east.verizon.net[151.198.168.4]
Jak widac po probie polaczenia się przez delikwenta zostaje sprawdzony jego adres i natychmias odrzucony gdyz nie ma prawa do wysylania poczty z tego host'a.
W konfiguracji i instalacji wyrzej wymienionych pakietow mogą wystapic bledy w postaci braku programow lub perl-bibliotek. W takim przypadku trzeba odnalezc taki program lub biblioteke w internecie i po prostu doinstalowac. Zadnych innych bledow oprogramowanie nie wykazywalo.
Dodatkowo instalujemy program cucipop obslugujacy zdalne programy
do odbioru poczty elektronicznej w nastepujacy sposob:
[root@]#wget ftp.icm.edu.pl/pub/unix/mail/cucipop/cucipop-1.31-2.i386.src.rpm
[root@bzium] -> root <- [23:42:14]#rpm -ihv cucipop-1.31-2.i386.src.rpm
W tym momencie pakiet zostal zainstalowany i juz wszyscy moga kozystac z
bezpiecznego servera poczty
8. Opis instalacji proftpd.
Wymagane zrodlo: proftpd-1.2.7.tar.gz
Instalacja
[root@bzium] -> src <- [02:01:26]#tar -zxvf proftpd-1.2.7.tar.gz
[root@bzium] -> src <- [02:01:26]#cd proftpd-1.2.7
[root@bzium] -> proftpd-1.2.4 <- [02:01:26]#./configure
[root@bzium] -> proftpd-1.2.4 <- [02:01:26]#make
[root@bzium] -> proftpd-1.2.4 <- [02:01:26]#make install
Plik konfiguracyjny httpd.conf powinien zawierac nastepujace linie:
ServerName "Bzium"
ServerType standalone
DefaultServer on
Port 21
Umask 022
MaxInstances 30
User nobody
Group nogroup
<Directory /*>
AllowOverwrite on
</Directory>
Wazne !!!
Umiesc w pliku /etc/shells
/bin/sh
/bin/bash
/bin/bash2
/bin/ash
/bin/bsh
/bin/tcsh
/bin/csh
/bin/false
/bin/nologin
/bin/ftp-nologin
nastepnie z wiersza polecen
[root@bzium] -> root <- [02:11:48]# chsh nobody
Changing shell for ftp.
New shell [/sbin/nologin]:
i należy podać linijke /bin/sh
9. Kompilacja jadra w celu update'a jadra i wprowadzeniu dodatkowy zabezbieczen:
System nasz po zainstalowaniu dysponuje jadrem linux-2.4.7-10.
Najnowszym obecnie jadrem z wersji v2.4 jest jadro linux-2.4.18, ktorego
zrodla można sciagnac z ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.18.tar.bz2.
Nastepnie przenosimy zrodla do /usr/src komenda:
[root@bzium] -> root <- [22:28:32]#mv linux-2.4.18.tar.bz2 /usr/src/
rozpakowujemy zrodla:
[root@bzium] -> src <- [22:28:32]#bunzip linux-2.4.18.tar.bz2
[root@bzium] -> src <- [22:28:32]#tar xvf linux-2.4.18.tar
Pojawil sie katalog linux ktorego nazwe zmieniamy na linux-2.4.18 komenda:
[root@bzium] -> src <- [22:28:32]# mv linux linux-2.4.18
Teraz musimy z naszego starego jadra wygenerowac nasz stary config
nastepujacymi komendami:
[root@bzium] -> src <- [22:28:32]#cd /usr/src/linux-2.4.7-10
[root@bzium] -> src <- [22:28:32]#make oldconfig
Nastepnie kopiujemy ten wygenerowany config do nowych zrodel aby
zaoszczedzic czas na konfiguracji standardowych rzeczy ( mozna tak
zrobic tylk w przypadku takich samych wersji jądra - jak w naszym wypadku v2.4)
[root@bzium] -> src <- [22:28:32]#cp .config /usr/src/linux-2.4.18
Teraz sciagamy dodatkowego patcha 'Patch for Linux 2.4.18' ze strony
www.openwall.com i wykonujemy nastepujace polecenia w
celu zalatania naszych zrodel jadra i wprowadzeniu dodatkowych opcji
konfiguracji:
[root@bzium] -> src <- [22:28:32]#tar zxvf linux-2.4.18-ow0.tar.gz
[root@bzium] -> src <- [22:28:32]# cp
linux-2.4.18-ow0/linux-2.4.18-ow0.diff /usr/src/linux-2.4.18/
[root@bzium] -> src <- [22:28:32]#cd linux-2.4.18/
[root@bzium] -> src <- [22:28:32]#patch -p1 < linux-2.4.18-ow0.diff
Nastepnie odpalamy edytor do konfiguracji jadra w celu sprawdzenia ustawien:
[root@bzium] -> src <- [22:28:32]#make menuconfig
Pokazalo sie okienko z ustawieniami jak w dotychczasowym jadrze
2.4.7-10 ale tez dodatkowym :
Security options --->
Wchodzimy tam i zaznaczamy wszystko w celu polepszenia
bezpieczeństwa naszego servera ( dokładne wiadomosci mozna uzyskac po
przeczytaniu dokumentacji )
[*] Non-executable user stack area
[*] Autodetect and emulate GCC trampolines
[*] Restricted links in /tmp
[*] Restricted FIFOs in /tmp
[*] Restricted /proc
[*] Special handling of fd 0, 1, and 2
[*] Enforce RLIMIT_NPROC on execve(2)
[ ] Destroy shared memory segments not in use
Tak powinna wyglądać sekcja 'Security options --->' przed kompilacja jadra.
Teraz już tylko kompilacja :
[root@bzium] -> src <- [22:28:32]#make dep;make clean;make bzImage;
make modules; make modules_install;make install
Następnie powinniśmy dodać nowe jądro do pliku /etc/lilo.conf wpisujac
nastepujace linie :
image=/boot/vmlinuz-2.4.18
label=linux_hazy
read-only
root=/dev/hda1
append="hdc=ide-scsi"
Teraz juz tylko reboot'ujemy system i podczas podnoszenia servera musimy
wybrac 'linux_hazy'.
Po powstaniu systemu sprawdzamy czy wystąpiły jakieś błędy podczas
startu systemu:
[root@bzium] -> src <- [22:28:32]#dmesg
Na ekranie monitora powinno się pojawić:
...........
parport0: PC-style at 0x3bc (0x7bc) [PCSPP,TRISTATE]
parport0: irq 7 detected
PCI: Found IRQ 5 for device 00:0e.0
3c59x: Donald Becker and others. www.scyld.com/network/vortex.html
00:0e.0: 3Com PCI 3c905B Cyclone 100baseTx at 0xec00. Vers LK1.1.16
CSLIP: code copyright 1989 Regents of the University of California
PPP generic driver version 2.4.1
PPP BSD Compression module registered
PPP Deflate Compression module registered
ip_conntrack (1024 buckets, 8192 max)
PCI: Found IRQ 9 for device 00:0c.0
...........
W tym momencie kompilacja jadra zakonczyla sie pomyslnie i system
chodzi juz na nowym bezpiecznym jadrze!
Kompilacja jądra, wprowadzenie dodatkowych zabezpeczeń - algorytm
10. Problem bezpieczenstwa servera
1.Po zainstalowaniu potrzebnych pakietow musimy zajac sie przede wszystkim
bezpieczenstwem servera. Pierwsza rzecza, ktora robimy jest pozbycie sie zbednych suidow (bity klejace). Z lini polecen wykonujemy nastepujace poleceniu w celu znalezienia
wszystkich wyzej wymienionych programow:
[root@bzium] -> root <- [18:15:45]#find / -perm +4000 -fprint suidy
Po wykonaniu tej komendy otrzymujemy plik ze wszystkimi programami
suidalnymi.
Do sprawnego dzialania servera potrzebne sa tylko nizej wymienione
programy z prawami dostepu zawierajace bit klejacu (suid):
/usr/bin/gpasswd
/usr/bin/passwd
/bin/su
/sbin/pwdb_chkpwd
/sbin/unix_chkpwd
Pozostalym zdejmujemy bit klejacy poprzez komende:
[root@bzium] -> root <- []#chmod -R u-s /sciezka/dostepu/do/danego/pliku
Dodatko aby uniknac niepozadanego logowania sie na root'a przez nie
powolana osobe zdejmujemy prawo do wykonywnia programu /bin/su dla
reszty uzytkownikow zwyjatkiem root'a i grupy root:
[root@bzium] -> root <- []#chmod -R o-x /bin/su
I dopisujemy administratorow do pliku /etc/group do linijki :
root:x:0:root,hazy,mariusz,karolcia
Teraz probujemy uzyc programu /bin/su przez zwyklego uzytkownika systemu:
[pawel@bzium] -> pawel <- [18:36:34]#su -l
bash: /bin/su: Permission denied
[pawel@bzium] -> pawel <- [18:36:36]#
Widac ze wszystko dziala tak jak nalezy, uzytkownik pawel nie zostal dopisany do grupy root i nie moze korzystac z programu. Sprawdzmy teraz uzytkownika który zostal dopisany:
[hazy@bzium] -> hazy <- [18:38:06]#su -l
Password:
6:38pm up 6 days, 18:42, 13 users, load average: 0.00, 0.00, 0.04
########################################################################
[root@bzium] -> root <- [18:38:11]#
Jak widzimy logowanie powiodlo sie bez zadnych problemow, oczywiscie
po podaniu hasla.
2. Wylaczenie (dziurawego) sendmaila i wlaczenie w jego miejsce postfixa.
[root@bzium] -> postfix <- [23:13:55]#/usr/sbin/sendmail.OFF -q
[root@bzium] -> postfix <- [23:13:55]#postfix start
Sprawdzenie poprawnego dzialania postfix'a poprzez sprawdzenie aktywnego portu:
[root@bzium] -> root <- [23:42:14]#telnet 0 25
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
220 bzium.elt.pl ESMTP Postfix
3. Wlaczenie wszystkich potrzebnych logow na konsole w trybie on-line.
W pliku /etc/syslog.conf dopisujemy kolejne linijki:
kern.* /dev/tty6
*.info;mail.none;authpriv.none;cron.none /dev/tty6
Dla poprawienia bezpieczenstwa
*.* @remote.server.org
wówczas logi będą dodatkowo wysylane na inny zewnetrzny server !
Nastepnie restartujemy server logow:
[root@bzium] -> root <- [23:42:14]#/etc/rc.d/init.d/syslog restart
Od tej chwili wszystkie logi na bierzaco mozemy sledziec na konsoli 6-tej,
co wyglada podobnie jak ponizej:
Jun 2 18:06:59 bzium -- hazy[26740]: LOGIN ON tty1 BY hazy
Jun 2 18:11:57 bzium login(pam_unix)[26489]: session opened for user root
by LOGIN(uid=0)
Jun 2 18:11:57 bzium -- root[26489]: ROOT LOGIN ON tty2
Jun 2 18:29:06 bzium sshd[28171]: Accepted password for dev0n
from 195.117.130.136 port 1027
cze 2 18:29:33 bzium su(pam_unix)[22052]: session closed for user root
cze 2 18:30:10 bzium su(pam_unix)[28250]: session opened for user root by
dev0n(uid=500)
4. Dodatkowe opcje zabezpieczajace w jadrze:
[*] Non-executable user stack area
[*] Autodetect and emulate GCC trampolines
[*] Restricted links in /tmp
[*] Restricted FIFOs in /tmp
[*] Restricted /proc
[*] Special handling of fd 0, 1, and 2
[*] Enforce RLIMIT_NPROC on execve(2)
[ ] Destroy shared memory segments not in use
Jedna z nich mozna bardzo latwo sprawdzic czy dziala, a mianowicie
chodzi o [*] Restricted /proc, zapobiega ta opcja sprawdzanie przez obcych
uzytkownikow co w danej chwili robia inni zalogowani na serverze a tym
samy proby podszycia sie pod nich. Sprawdzimy to na uzytkoniku 'pawel'. Po
zalogowaniu wywoluje on komende 'w' w celu sprawdzenia kto
jest w danej chwili na serverze a nastepnie komende 'ps -aux' w celu
sprawdzenia co dani uzytkownicy robia. Aby to dobrze zobaczyc pokazemy
rowniez te same komendy wykonane przez root'a:
uzytkownik pawel:
[pawel@bzium] -> pawel <- [18:46:37]#w
6:48pm up 6 days, 18:52, 7 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
[pawel@bzium] -> pawel <- [18:48:23]#
[pawel@bzium] -> pawel <- [18:48:23]#ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
pawel 28363 0.0 1.0 2444 1288 tty3 S 18:36 0:00 -bash
pawel 28504 0.0 0.6 2760 804 tty3 R 18:48 0:00 ps -aux
[pawel@bzium] -> pawel <- [18:48:43]#
uzytkownik root:
[root@bzium] -> projekt <- [18:48:59]#w
6:49pm up 6 days, 18:53, 7 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty2 - 6:11pm 0.00s 0.20s 0.02s w
pawel tty3 - 6:36pm 18.00s 0.13s 0.10s -bash
[root@bzium] -> projekt <- [18:48:59]#
[root@bzium] -> projekt <- [18:48:59]#ps -aux
postfix 28169 0.0 0.8 3700 1052 ? S 18:28 0:00 pickup -l
root 979 0.0 0.4 1588 568 ? S May26 0:00
pawel 28217 0.0 1.0 2528 1364 pts/10 S 18:29 0:00 /bin/bash
......
root 28508 0.0 0.7 2852 900 tty2 R 18:50 0:00 ps -aux
[root@bzium] -> projekt <- [18:48:59]#
Jak widac z przykladu powyzszego tylko administrator (root) moze w pelni
kontrolowac kto i co robi w danej chwili.
Reszty opcji wkompilowanych w jadro nie mozna w taki prosty sposob
pokazac, ale zwiekszaja one poziom zabezpieczenia servera przed probami przejecia. Dokladny opis wszystkich opcji mozna znalezc w dokumentacji pakietu 'linux-2.4.18-ow0.tar.gz'
5. Server ftp.
W celu nie zwiekszenia podatnosc na proby przejecia wybralismy
pakiet najbezpieczniejszego servera FTP opublikowanego
na stronie www.packetstormsecurity.com bez mozliwosci
korzystania z zasobow 'Anonymous'. Uznawany jest (jak narazie)
za najlepszy i najbezpieczniejszy pakiet FTP w okresie naszego projektu, jak narazie nie sa dostepne żadne 'exploity' na ten program dlatego zostal on przez nas wybrany.
6. SSH
Aby uniknac atakow zewnwtrznych na server instalujemy pakiet
openssh-3.2.3p1.tar.gz nastepujaco:
Pobieramy zrodla z ftp.icm.edu.pl
[root@bzium] -> src <- [19:15:18]#cp openssh-3.2.3p1.tar.gz /usr/local/src
[root@bzium] -> src <- [19:15:18]#tar -zxvf openssh-3.2.3p1.tar.gz
[root@bzium] -> src <- [19:15:18]#cd openssh-3.2.3p1
[root@bzium] -> src <- [19:15:18]#./configure;make;make install
[root@bzium] -> src <- [19:15:18]#whereis sshd
[root@bzium] -> src <- [19:15:18]#cp sshd /usr/local/sbin/sshd
[root@bzium] -> src <- [19:15:18]#cp sshd /usr/sbin/sshd
[root@bzium] -> src <- [19:15:18]#/etc/rc.d/init.d/sshd restart
W celu sprawdzenia czy pakiet zostal pomyslnie zainstalowany i
dziala tak jak powinien laczymy sie lokanie na jego port:
[root@bzium] -> src <- [19:15:18]#telnet 0 22
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
SSH-1.99-OpenSSH_3.2.3p1
Wszystko zainstalowalo sie pomyslnie, teraz zprawdzimy czy mozna sie
wlamac za pomoca dostepnych exploitow:
[pawel@bzium] -> smieci <- [19:23:53]#./shack -t11 bzium.elt.pl 22
SSHD deattack exploit. By Dvorak with Code from teso
(http://www.team-teso.net)
Target: Big - SSH-1.99-OpenSSH_3.2.3p1
Attacking: bzium.elt.pl:22
fatal: connect: Sieć jest niedostępna
[pawel@bzium] -> smieci <- [19:24:05]#
Jak widac atak nie udal sie, co bylo glownym celem instalowania tego
pakietu. Exploit ten jest stosunkowo nie dawno opublikowanym
na stronie www.packetstormsecurity.com
[root@bzium] -> root <- [19:58:55]#nmap localhost
Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )
Interesting ports on bzium.elt.pl (127.0.0.1):
(The 1530 ports scanned but not shown below are in state: closed)
Port State Service
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
53/tcp open domain
80/tcp open http
110/tcp open pop-3
111/tcp open sunrpc
113/tcp open auth
953/tcp open rndc
1025/tcp open listen
3306/tcp open mysql
Nmap run completed -- 1 IP address (1 host up) scanned in 0 seconds
8. Apache + php + mysql
Zgodnie ze swiatowymi stronami zajmujacymi sie bezpieczenstwem w systemach UNIX (www.securityfocus.com, www.packetstormsecurity.com, www.linuxsecurity.com ) na dzien dzisiejszy pakiety 'Apache/1.3.27, php-4.2.1, nie sa pakietemi narazonym na jakie kolwiek proby przejecia za pomoca tak zwanych 'exploitow'. W zwiazku z zaistaniala sytuacja nie mozna udokumentowac zadnych prob atakow, bo takowe nie mialy miejsca,
sami tez nie mozemy podjac takich testow, gdyz nie dysponujemy zadnym softem na w/w pakiety.
Bezpieczeństwo (opcje dodatkowe)
Dla zwiekszenia bezpieczenstwa edytujemy plik login.defs i zamieniamy wpis:
PASS_MIN_LEN 5 na PASS_MIN_LEN 8
w celu zmuszenia uzytkownikow systemu do wprowadzania chasel dluzszych, w celu z mnmiejszenia ryzyka odgadniecia hasla przez osoby niepowolane.
Nastepnie w pliku profile wpisujemy nastepujace linie:
TMOUT = 900
export TMOUT
Ta opcja wylogowuje automatycznie uzytkownika z powloki bash'a po 15 minutach bezczynnosci na danym terminalu. Ma to sluzyc tym którzy sa zapominalscy i przez przypadek mogą zostawic wlaczony swój terminal, który potem moglby być wykorzystany przez osoby niepowolane.
Kolejna rzecza jest wykorzystanie pakietu TCP_WRAPPERS, który za pomoca plikow hosts.allow, hosts.deny. W pliku hosts.deny umieszczamy linijke:
ALL: ALL@ALL, PARANOID
To spowoduje ze server w tej chwili będzie odrzucal kazde polaczenie.
Nastepnie w pliku hosts.allow umieszczamy wpisy wedlug uznania. Na naszym serverze zostaly umieszczone nastepujace wpisy:
sshd: 213.146.59.161 jestem.online.com.pl
sshd: 195.117.130.76 r22adsl.bydnet.com.pl
sshd: 80.48.25.200 g-h.pl
Rozpatrujac od gory, pierwszy wpis zezwala kazdemu z pod adresu ip i hosta na zdalne logowanie się na serwer za pomoca protokolu ssh (bezpieczny sposób). Drugi i trzeci analogicznie do pierwszego. Zostalo to zastosowane, w celu zwiekszenia bezpieczenstwa systemu poprzez odrzucanie prob zdalnych polaczen z hostow nie znanych przez administratora.
Ostatnia rzecza jaka robimy to dodajemy do pliku host.conf linijke:
nospoof on
jest to wlaczenie obrony przez proba wypakietowania servera. Polega ona na wysylaniu ogromnej liczby pakietow do servera z rzadaniem odbioru. Jeżeli atakowany serwer ma wolne laczeni internetowe, nie nadazy odbierac pakieto i polaczenie jego z internetem zostanie zerwane, tym samy zostana odciete wszystkie uslugi swiadczone przez serwer.
Na koniec dodajemy linie do pliku /etc/rc.d/rc.local w celu automatycznego uruchamiania po restarcie systemu: /usr/sbin/tcpd
Kolejna rzecza jaka robimy to edytujemy plik sercuretty i zostawiamy tylko jedna linie:
tty1
Ta opcja pozwala zalogowac się z uprawnieniami root'a tylko na konsole pierwsza. Celem tego ustawienia jest zmusenie administratora do korzystania z jednego terminala, którego po zakonczonych czynnosciach nie zapomni wylaczyc i tym samym nikt nie powolany nie przejmie uprawnien super-uzytkownika.
Nastepna opcja ma na celu ograniczenia mozliwosc logowania się na root'a wszystkim
uzytkownikom systemu poprzez program su. W tym celu w pliku /etc/pam.d/su musimy odhaszowac nastepujaca linie:
auth required /lib/security/pam_wheel.so use_uid
W przypadku gdy taka linia nie istnieje musimy dopisac ja recznie. To spowoduje ze tylko uzytkownicy nalezacy do grupy wheel w systemie będą mogli zalogowac się na root'a komenda su -l po podaniu poprawnego hasla super-uzytkownika.
Kolejna rzecza jaka zrobilismy jest dopisanie dwoch linijek w pliku lilo.conf:
restricted
password=<*******>
Jest to zabezpieczenie przed wlaczeniem trybu awaryjnego z uprawnieniami root'a po zreboot'owaniu systemu, poprzez wpisanie linux single. Te dwie linijki wymagaja znajomosc hasla przez uzytkownika który chce wlaczyc tryb awaryjny i w przypadku nie podania hasla system się nie wlaczy. Wiemy ze gdyby udalo się napastnikowi wlaczyc tryb awaryjny to od razu może on zmienic haslo root'a bez podawania starego hasla i nastepnie odpalic system w trybie normalnym, gdzie nie miał by już zadnych ograniczen, gdyz mialby uprawnienia super-uzytkownika. W linijce password za znakiem `=' wpisujemy haslo jakie będzie wymagane przy probie wlaczenia trybu linux single.
Ostatnia rzecza jaka robimy jest dodanie kilku opcji zabezpieczajacych server do
plikow /etc/rc.d/rc.local i /etc/sysctl.conf:
rc.local (auto uruchamianie po restarcie)
echo " Securing Myself..."
echo 1>/proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1>/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
echo 0 > $f
done
echo 1 >/proc/sys/net/ipv4/tcp_syncookies
echo 1 >/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 0 > $f
done
for f in /proc/sys/net/ipv4/conf/*/log_martians; do
echo 0 > $f
Zaczynajac od gory pierwsze icmp_echo_ignore_all opcja ta wlacza ignorowanie zadan odpowiedzi na pingi wysylane przez inne komputery. Jeżeli serwer nie będzie odpowiadac na pingi to zmniejszy liczbe potencjalnych napastnikow, gdyz mogą mysle ze serwer po prostu jest wylaczony.
Druga icmp_echo_ignore_broadcasts podobnie jak wyzej z tym ze na zapytania broadcast'owe. To chroni przed atakiem typu DOS (denial-of-service), gdyz server nie odpowiada na ICMP wysylane przez broadcast.
Trzecie accept_source_route jest to wylaczenie routowanie IP pakietow. Pakiet IP zawiera informacje o drodze do zamierzonego celu. Jest to grozne gdyz host docelowy musi odpowiedziec ta samoma droga. Jeżeli napastnik bylby wstanie wyslac wyrutowany pakiet do naszej sieci, tedy bylby wstanie przechwycic odpowiedz i nabrac nasz serwer ze komunikuje się on z zaufanym hostem.
Czwarty tcp_syncookies podobnie jak drugi zabezpiecza przed proboami atakow DOS.
Piata icmp_ignore_bogus_error_responses ignoruje wszsytkie `glupie' wiadomosc o bledach w sieci i wrzuca powiadomienie do logow.
Szosta rp_filter zabezpiecza przed probami wypakietowania server, czyli odciecia go od internetu.
Ostanie log_martians ta opcja nakazuje systemowi logowanie wszystkich podejrzanych pakietow, prob spoofowania i podszywania się pod inne komputery. Logi sa zrzucane do logow systemowych.
Systcl.conf
# Disables the magic-sysrq key
kernel.sysrq = 0
# Enable ignoring ping request
net.ipv4.icmp_echo_ignore_all = 1
# Enable ingoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Disable IP source routing
net.ipv4.conf.all.accept_source_route = 0#
# Enable TCP SYN Cookies Protection
net.ipv4.tcp_syncookies = 1
# Enable bad errors messages Protection
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Enable IP spoofing protection, turn on Address Verification
net.ipv4.conf.all.rp_filter = 1
# Log Spoofed Packets
net.ipv4.conf.all.log_martians = 1
Te wpisy musza zostac umieszczone w tym pliku dla poprawnego dzialania.
8. Ostania rzecza jaka robimy jest zmienienie dwoch wpisow w pliku /etc/ssh/sshd_conf :
PermitRootLogin no
PermitEmptyPasswords no
Pierwsza opcja zabrania zdalnego logowania się bezposrednio na root'a .
Druga przyjmowania pustych hasel przez system.
11. FreeBSD kontra RedHat Linux
Linus Torvalds oddzielił jądro (kernel) Linuksa od pozostałego oprogramowania, wychodząc z założenia, że nie każdemu użytkownikowi potrzebny jest np. serwer pocztowy sendmail czy demon SSH. Natomiast autorzy FreeBSD włączyli do systemu podstawowe komponenty (np. SSH, telnet czy inetd) pozwalające na zainstalowanie serwera uniksowego - można je wybrać podczas instalacji lub później. Oprócz tego do FreeBSD należy prawie 6000 różnych programów ("ports") służących do dostrojenia systemu do konkretnych potrzeb - można je samemu skompilować albo pobrać z Sieci w formie gotowych pakietów (packages). Do obu systemów istnieją podręczniki (manuals) w formie elektronicznej, Linux oferuje oddzielną dokumentację do każdego programu, a także dodatkowe dokumenty ("HOWTO") opisujące rozwiązania różnych problemów. Oba systemy można konfigurować zarówno z linii poleceń, jak i za pomocą interfejsów okienkowych (setup w RedHat Linux, sysinstall w FreeBSD).
Kody źródłowe Linuksa składają się z plików języka C/C++ oraz plików łatek (patches) aktualizujących kolejne wersje systemu - użytkownik kopiuje te pliki do odpowiedniego katalogu w celu uruchomienia kompilacji. Systemy *BSD korzystają natomiast z repozytoriów CVS (każdy z projektów ma swoje) co pozwala administratorowi na automatyczne aktualizowanie źródeł serwera.
BSD i Linux różnią się zasadniczo liczbą obsługiwanych urządzeń - dla Linuksa dostępnych jest więcej sterowników do kart graficznych, muzycznych, sieciowych i innych. Oba systemy stosują różne konwencje nazywania urządzeń - w Linuksie według typów (np. eth dla karty Ethernet), a w BSD - według nazwy producenta bądź sterownika (np. rl dla karty RealTek).
W celu zwiększenia bezpieczeństwa serwera oba systemy umożliwiają filtrowanie pakietów poprzez jądro systemu. Służą do tego programy: starszy ipfwadm lub nowszy ipchains - dla Linuksa oraz ipfw lub IP filter - dla *BSD. W BSD można ponadto zdefiniować poziom bezpieczeństwa (security level) przy starcie systemu, ograniczając dostęp nawet z poziomu superużytkownika. Oba systemy umożliwiają zainstalowanie pakietów kryptograficznych,
W ramach przeprowadzonych testów uruchomiliśmy pod obydwoma systemami podstawowe usługi internetowe: WWW , FTP, pocztę i filtry pakietów (ipchains pod Linuksem, ipfw pod FreeBSD).
Server www
Podczas instalacji Linuksa mamy do dyspozycji pakiet z serwerem Apache. Drugim sposobem instalacji jest pobranie z Sieci aktualnych źródeł serwera i samodzielna ich kompilacja. Wadą tego rozwiązania jest to, że w przypadku aktualizacji oprogramowania nie można w prosty sposób odinstalować starszej wersji. W prosty sposób możemy natomiast doinstalować inne moduły: PHP SSL itd.
W systemach *BSD Apache jest jednym z wielu programów znajdujących się w kolekcji portów. Oczywiście można pobrać z Sieci gotowy pakiet (już skompilowany) do instalacji, jednak zalecana jest samodzielna kompilacja źródeł. W odróżnieniu od Linuksa, dzięki mechanizmowi portów możemy w przyszłości łatwo i szybko odinstalować serwer WWW. Dodatkowo najnowsza wersja plików w kolekcji portów zapewnia instalację ostatniej stabilnej wersji Apache. W razie potrzeby z kolekcji portów możemy doinstalować również inne moduły serwera: PHP, SSL itd.
Server FTP
Wśród pakietów instalacyjnych systemu Linux jest serwer wu-ftp. Jego konfiguracja nie jest trudna, ale też i nie intuicyjna - uruchomienie serwisu (zwłaszcza anonymous ftp) może zająć początkującemu użytkownikowi sporo czasu. Przede wszystkim należy wyedytować plik /etc/ftpaccess w celu określenia sposobu dostępu do serwisu dla użytkowników mających konta na serwerze. Można też umożliwić anonimowemu użytkownikowi odczyt, zapis i kasowanie plików z serwera FTP. Dodatkowym plikiem ważnym w konfiguracji jest /etc/ftpusers, zawierający listę identyfikatorów użytkowników, którzy mają zabroniony dostęp do serwera poprzez protokół FTP. Listę tę otwiera superużytkownik (root), a w kolejnych wierszach wpisane są identyfikatory pozostałych użytkowników systemowych (bin, adm, nobody). Oczywiście listę tę można rozszerzyć. W celu aktywacji usługi FTP należy usunąć komentarz w stosownej linii w pliku konfiguracyjnym demona inetd oraz w razie konieczności zrestartować go, by wprowadzić zmiany w konfiguracji.
W systemach *BSD do uruchomienia serwisu FTP wystarczy sprawdzić wpisy w inetd.conf oraz ftpusers. Dodatkowym, bardzo przydatnym plikiem konfiguracyjnym demona ftpd jest /etc/ftpchroot. Zawiera on listę identyfikatorów użytkowników, którzy po pomyślnym zalogowaniu do systemu powinni mieć dostęp jedynie do swojego katalogu domowego - katalog domowy użytkownika staje się katalogiem głównym w czasie trwania sesji.
Serwer pocztowy
Instalacja serwera pocztowego w systemie Linux może być przeprowadzona na dwa sposoby: z pakietu lub z plików źródłowych po wcześniejszym ich przekompilowaniu. Natomiast w systemach *BSD sendmail stanowi integralną część jądra. Konfigurację demona pocztowego można zmienić, modyfikując plik sendmail.cf lub plik-makro języka m4 (sendmail.mc). W drugim przypadku do stworzenia pliku sendmail.cf konieczna jest instalacja samego interpretera języka m4 (m4) oraz makr m4 dla sendmaila.
W zależności od systemu katalog sendmail-cf zlokalizowany jest w: /usr/lib - w Linuksie lub /usr/share - w *BSD.
Domyślnie katalogiem konfiguracyjnym sendmaila jest /etc/mail. Znajduje się tam sam plik konfiguracyjny oraz pliki-bazy danych, uzupełniające konfigurację (np. access, aliases, virtusertable). W testowanej wersji RedHat Linux część plików (sendmail.*, virtusertable oraz aliases) została przeniesiona do katalogu /etc. Wprowadza to pewien "nieład" w katalogu konfiguracyjnym systemu.
FreeBSD ma mocniej rozbudowany plik makefile, służący do tworzenia pliku konfiguracyjnego demona pocztowego, a ponadto nowej konfiguracji sendmaila (z przykładowego pliku), jak również uruchamiania i zatrzymywania samego demona.
Firewall
Do uruchomienia firewalla konieczne jest odpowiednie skonfigurowanie i przekompilowanie jądra systemu. Po ponownym uruchomieniu systemu możemy wpisać reguły sterujące filtrowaniem pakietów. W systemie Linux służy do tego program ipchains (nowsza odmiana ipfwadm). Reguły najczęściej wpisuje się do skryptu /etc/rc.d/rc.local, ale oczywiście zawsze można utworzyć własny skrypt.
W systemie FreeBSD (oraz pozostałych odmianach BSD) wśród startowych skryptów jest plik /etc/rc.firewall określający domyślne reguły filtrowania. Dodatkowo w skrypcie /etc/rc.conf możemy ustawić typ ściany ogniowej: od otwartego (przepuszczany jest praktycznie każdy pakiet), poprzez prosty (ochrona komputera), aż po zamknięty (ruch jest dozwolony tylko dla adresu lokalnego 127.0.0.1).
CVS - Control Version System (CVS) to mechanizm centralnej kontroli wersji plików, głównie źródeł systemów operacyjnych. System ten działa w architekturze klient-serwer. Po stronie serwera znajduje się najbardziej aktualna wersja plików, natomiast każdy z klientów CVS ma swoją roboczą kopię repozytorium centralnego. Na kopii plików wykonywane są wszelkie modyfikacje przed ich zatwierdzeniem i umieszczeniem w repozytorium centralnym.
Kolekcja portów FreeBSD - Katalog /usr/ports to zbiór łatek (patches) oraz plików makefile, dzięki którym można łatwo i szybko zainstalować dodatkowe oprogramowanie potrzebne w systemie (np. pgp, apache, webalizer, moduły Perla, system X-Window). Strukturę tego katalogu tworzą podkatalogi określające przynależność każdego z programów do grupy (np. net, security, www, mail). W każdym z katalogów-grup znajdują się podkatalogi o nazwie odpowiadającej danemu programowi. Znajdują się w nich pliki: patches, makefile oraz krótkie opisy. Oddzielnym katalogiem jest /usr/ports/distfiles, który zawiera pobrane przez FTP źródła oprogramowania.
Mechanizm portów zapewnia łatwość instalacji programów (konieczne biblioteki zostaną w razie potrzeby doinstalowane do systemu). Dodatkowo administrator ma pewność, że nowe wersje (np. Apache) zostaną zainstalowane dokładnie w tym samym miejscu. W razie konieczności w prosty sposób można szybko odinstalować niepotrzebne już komponenty.
Uruchamianie Linuksa i BSD - Linux ma specjalny katalog (/etc/rc.d), który zawiera podkatalogi odpowiadające kolejnym "poziomom" inicjalizacji systemu. W każdym z podkatalogów zachowane są odsyłacze symboliczne do skryptów startowych zamieszczonych w katalogu init.d. Dodatkowym skryptem startowym jest rc.local, do którego można dopisywać polecenia, które mają być uruchamiane w trakcie startu systemu. Taka struktura skryptów jest jasna i przejrzysta, administrator musi jednak wiedzieć, jak poprawnie utworzyć odsyłacz - dla początkujących nie będzie to oczywiste.
Twórcy systemu FreeBSD utworzyli "płaską" strukturę skryptów, wszystkie skrypty rc.* umieszczone zostały w katalogu /etc. Dla administratora najważniejszy będzie plik /etc/rc.conf, który służy do zarządzania uruchamianymi serwisami rdzenia systemu. Jest to plik nadpisujący domyślną konfigurację startową systemu z katalogu /etc/defaults/rc.conf. Wpisywane są tutaj słowa-klucze, które sterują uruchamianiem demonów systemowych (np. sendmail) wraz z parametrami. Natomiast do uruchamiania aplikacji doinstalowanych do systemu z kolekcji portów służą skrypty startowe z katalogu /usr/local/etc/rc.d.
Porównanie wybranych cech systemów |
||
|
RedHat Linux |
FreeBSD |
Licencja rozpowszechniania |
licencja BSD |
|
Koncepcja systemu |
jądro oraz reszta oprogramowania |
rdzeń systemu (core) - jądro, podst. narzędzia, oprogramowanie (porty) |
Aktualizacja źródeł systemu |
kolejne łaty do jądra systemu, nowe wersje oprogramowania |
CVSup dla jądra systemu oraz CVSup do kolekcji portów |
Definicja urządzeń |
wg typu (np. ethX dla kart sieciowych) |
wg producenta (rl0 dla RealTek, xl0 dla Intel) - karty sieciowe |
Liczba sterowników |
obsługa wielu urządzeń (multimedia, ISDN), również nowości |
obsługa urządzeń (często starszych), dla których napisane sterowniki sprawdzono pod względem bezpieczeństwa |
Administracja okienkowa |
wykorzystanie ncurses (np. sndconfig, setup) oraz aplikacje do X-Window (np. printtool) |
poza programem instalacyjnym (/stand/sysinstall) nie występuje (edytowanie ręczne plików konfiguracyjnych) |
Dokumentacja systemowa |
dużo, również w języku polskim |
dużo, niemniej najwięcej w języku angielskim |
Bezpieczeństwo |
zasadniczo tylko ipchains jako filtr pakietów |
ipfw lub ipfilter jako składniki 'core' systemu operacyjnego |
OpenSSH, OpenSSL |
dostępne pakiety, stabilne wersje |
najnowsze stabilne wersje stanowiące rdzeń systemu operacyjnego |
Serwery wirtualne (jail) |
Brak |
wprowadzone od wersji 4, jako dodatkowy poziom bezpieczeństwa |
IPSec |
Brak |
możliwość zbudowania po wcześniejszej konfiguracji jądra systemu oraz jego rekompilacji i reinstalacji |
Uruchamianie systemu |
pliki startowe poszeregowane w katalogach (/etc/rc.d) |
pliki startowe są umieszczone w katalogu /etc i nazwy zaczynają się przedrostkiem rc* |
Pakiety do doinstalowania |
w zależności od dystrybucji: na płycie instalacyjnej lub jako oprogramowanie dodatkowe |
pakiety, to prekompilowane oprogramowanie z kolekcji ports w formacie *.tgz |
Kolekcja oprogramowania do kompilowania i instalacji |
różne pakiety (RPM,DEB) w zależności od dystrybucji systemu, konieczność samodzielnej instalacji brakujących składników |
kolekcja portów - prawie 6000 różnego rodzaju programów, automatyzacja procesu w przypadku braku potrzebnych bibliotek |
Lokalizacja |
występuje (w tym na język polski) |
występuje (w tym na język polski) |
Podsumowanie
FreeBSD czy Linux RedHat, który z systemów wybrać.? Wszystko zależy od tego do czego będziemy wykorzystywać dany system. RedHat jest zdecydowanie bardziej popularny i łatwiejszy w obsłudze. Jednak od pewnego czasu można zauważyć tendecję spadkową jego popularności właśnie na rzecz FreeBSD. Z dnia na dzień system BSD staje się systemem bezpieczniejszym. Wobec tego dlaczego wybraliśmy RedHat do naszego servera?
Mianowicie bezpieczeństwo systemu zależy głownie od poprawnego skonfigurowania systemu. Z systemem RedHat mamy już do czynienia kilka lat co pomaga i pozwala właśnie na poprawną i bezpieczną jego konfigurację. To było głównym argumentem, przy podejmowaniu decyzji o wyborze systemu operacyjnego.
12. Dodatki
Poniżej prezentujemy screenshoty wyników skanowania dwoch serverow:
Servery zostały przeskanowane za pomocą programu GFI LANguard Network Security Scanner - wersja 3.0
IP 212.122.192.46 - nasz server
IP 212.122.192.48
7
START
Instalacja PHP
Przygotowanie plików konfiguracyjnych
Stworzenie skryptów startowych
Zaopatrzenie się w źródła
Rozpakowanie źródeł
Instalacja MySQL
Błędy
Błędy
Instalacja Apacha
Błędy
Testy
KONIEC
nie
nie
nie
nie
Błędy
tak
tak
tak
tak
nie
tak
nie
tak
Sami tworzymy nowy konfig
KONIEC
Reboot'ujemy system
Edycja pliku /etc/lilo.conf
Błędy
Kompilacja
Zwiększenie bezpieczeństwa naszego servera przez zaznaczenie odpowiednich opcji
Uruchomienie edytora do konfiguracji jądra
Instalacja patcha - łatanie dziur
Zaopatrzenie się w źródła Linux-2.4.18 i patcha na jądro
Kopiujemy stary konfig do nowych źródeł
Ta sama wersja jądra (2.4)
Rozpakowanie źródeł
START
pakiety
podstawowe
pakiety
dodatkowe
Server Linux RedHat 7.2
BitchX
epic
oidend
phpSysInfo
phpMyAdmin
openssl
pine
openssh
apache
php
postgresql
proftpd
postfix
mod_ssl
Wersja jądra 2.4.18-14
Procesor Pentium MMX 200 MHz
RAM 32 MB
IP 212.122.192.46
Domain srvtclin.atr.bydgoszcz.pl
Gataway 212.122.192.33