4375


0x08 graphic

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

  1. Struktura i cel projektu

Struktura projektu

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

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

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic

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:

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.con
trib/
./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
N
ie 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:

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
(my zakładamy
/usr/local/pgsql)

--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 tyl
ko
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

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

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)

  1. 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.

  1. 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.

  1. 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

  1. 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.

  1. 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.

  1. 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.

  1. 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

GNU GPL ( www.gnu.org )

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

0x01 graphic

IP 212.122.192.48

0x01 graphic

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



Wyszukiwarka