Następna strona Poprzednia strona Spis treści

7. Instalowania serwera proxy - TIS

7.1 Pobranie oprogramowania

TIS FWTK jest dostępny pod adresem: ftp://ftp.tis.com/.

Nie popełnij tego błędu co ja. Kiedy dostaniesz się na serwer TIS PRZECZYTAJ ,,README'' Pakiet TIS fwtk jest w ukrytym katalogu na ich serwerze.

TIS wymaga być wysłał email do fwtk-request@tis.com zawierającego tylko słowo SEND w ,,ciele'' wiadomości aby poznać nazwę tego ukrytego katalogu (nie jest potrzebny temat dla tego listu). Ich system wyśle Ci wiadomość z nazwą katalogu w ciągu 12 godzin.

Piszę o wersji 2.0 (beta) TIS FWTK. Wersja ta kompiluje się dobrze (z pewnymi wyjątkami) i wygląda że wszystko pracuje (u mnie). Gdy zostanie opublikowana wersja pełna uaktualnię to HowTo.

Aby zainstalować FWTK stwórz katalog fwtk-2.0 w /usr/src. Przenieś tak kopię (fwtk-2.0.tar.gz) odpakuj ją (tar zxf fwtk-2.0.tar.gz).

FWTK nie pośredniczy w przekazywaniu SSL (bezpieczne dokumenty w WWW) ale posiada dodatek napisany przez Jean-Christophe Touvet. Jest on dostępny pod adresem ftp://ftp.edelweb.fr/pub/contrib/fwtk/ssl-gw.tar.Z. Touvet nie świadczy wsparcia technicznego dla tego kodu.

Używam zmodyfikowanej wersji: włączyłem moduł dostępu do bezpiecznych serwerów news Netscape napisany przez Eric Wedel ftp://mdi.meridian-data.com/pub/tis.fwtk/ssl-gw/ssl-gw2.tar.Z.

W naszych przykładach będę używał wersji Wedel'a.

Aby go zainstalować po prostu strwóż katalog ssl-gw w katalogu /usr/src/fwtk-2.0 i wsadź tam odpowiednie pliki. Kiedy instalowałem tę bramę potrzebne były drobne zmiany zanim mogłem skompilować resztę zestawu.

Pierwsza zmiana nastąpiła w pliku ssl-gw.c . Nie potrafił włączyć jednego z plików include.

 #if defined(__linux)
 #include    <sys/ioctl.h>
 #endif
Druga zmiana polegała na stworzeniu pliku Makefile. Skopiowałem jeden z innej ,,bramy'' i zastąpiłem nazwę tego modułu nazwą ssl-gw.

7.2 Kompilacja TIS FWTK

Wersja 2.0 FWTK kompiluje się łatwiej niż poprzednie. Wciąż jednak jest kilka rzeczy które powinny być zmienione zanim wersja beta będzie się kompilować bez przeszkód. Pozostaje mieć nadzieję, że do tak się stanie w pełnej wersji.

Aby to poprawić zacznij zmiany od katalogu /usr/src/fwtk/fwtk i skopiuj plik Makefile.config.linux na Makefile.config.

Nie uruchamiaj FIXMAKE. Instrukcja mówi byś to zrobił. Jeśli chcesz zniszczyć Makefile we wszystkich podkatalogach...

Wykonałem poprawkę do fixmake Problem polegał na tym, że fixmake dodawał '.' i '' do włączanych do Makefile linii.

 sed 's/^include[    ]*\([^ ].*\)/include \1/' $name .proto > $name

Następnie będziemy musieli wyedytować Makeconfig.file. Potrzebne będą dwie zmiany.

Autor programu ustawił źródła programu w swoim $HOME/. My kompilujemy w /usr/src i powinniśmy zmienić zmienną FWTKSRCDIR.

 FWTKSRCDIR=/usr/src/fwtk/fwtk

Po drugie, przynajmniej niektóre Linuxy używają bazy danych w formacie gdbm. W Makefile.config jest używana dbm Zapewne będziesz musiał to zmienić. Ja w RedHacie 3.0.3 musiałem.

 DBMLIB=-lgdbm
Ostania poprawka jest w katalogu x-gw. Błąd w wersji beta jest w pliku socket.c. Poprawka polega na usunięciu tych linii.

 #ifdef SCM_RIGHTS /* 4.3BSD Reno and later */
            + sizeof(un_name->sun_len) + 1
 #endif
Jeśli dodałeś ssl-gw do swojego katalogu źródeł trzeba jeszcze dodać do listy katalogów w Makefile.

 DIRS=  smap smapd netacl plug-gw ftp-gw tn-gw rlogin-gw http-gw
 x-gw ssl-gw

Teraz uruchom make.

7.3 Instalacja TIS FWTK

Uruchom make install. Standardowo katalogiem instalacyjnym jest /usr/local/etc. Możesz to zmienić (ja tego nie zrobiłem) na bardziej bezpieczny katalog. Ja zmieniłem prawa dostępu do niego na chmod 700 .

Na koniec pozostała nam konfiguracja firewalla.

7.4 Konfiguracja firewalla TIS FWTK

Teraz naprawdę rozpoczynamy. Musisz nauczyć system wywoływania tych nowych usług i stworzyć tablice do ich kontroli.

Nie próbuję przepisywać tutaj dokumentacji do TIS FWTK. Chcę pokazać takie ustawienia jakie u mnie działały i wyjaśnić problemy jakie spotkałem.

Istnieją trzy pliki kontrolujące firewalla.

Aby uzyskać poprawne funkcjonowanie FWTK powinieneś wyedytować te pliki poczynając od góry. Edycja jedynie services bez inetd.conf i netperm-table ustawionych prawidłowo uczyni twój system niedostępnym.

Plik netperm-table

Plik ten odpowiada za kontrolę kto ma dostęp do usług nadzorowanych przez TIS FWTK. Powinieneś myśleć o ruch z obu stron firewalla. Ludzie z zewnątrz twojej sieci powinni zidentyfikować się przed otrzymaniem dostępu, ale ludzie z wewnątrz mogą zostać dopuszczeni od razu.

Aby ludzie moli się zidentyfikować firewall używa programu o nazwie authsrv do trzymania bazy danych o użytkownikach i ich hasłach. Sekcja dotycząca autentyfikacji w netperm-table pozwala kontrolować gdzie jest trzymana baza danych i kto ma do niej dostęp.

Miałem trochę kłopotów z blokowaniem dostępu do usług. Weź pod uwagę że linia którą pokazuję używa '*' do dawania dostępu dla każdego do tej usługi. Prawidłowe ustawienie tej linii jest następujące: '' authsrv: premit-hosts localhost jeśli chcesz zachować ją pracującą.

 #
 # tablica konfiguracji serwera proxy 
 #
 # Autentyfikacja: reguły serwera i klienta
 authsrv:   database /usr/local/etc/fw-authdb
 authsrv:   permit-hosts *
 authsrv:   badsleep 1200
 authsrv:   nobogus true
 # Aplikacje klienckie używające serwera autentyfikacji
 *:      authserver 127.0.0.1 114

Aby zaincjalizować bazę danych wykonaj su do root`a i uruchom ./authsrv w katalogu /var/local/etc by stworzyć rekord opisujący administratora systemu.

Oto jest przykładowa sesja.

Przeczytaj dokumentację FWTK, by dowiedzieć się jak dodać użytkowników i grupy.

  #
  # authsrv
  authsrv# list
  authsrv# adduser admin  " Auth DB admin " 
  ok - user added initially disabled
  authsrv# ena admin
  enabled
  authsrv# proto admin pass
  changed
  authsrv# pass admin  " plugh " 
  Password changed.
  authsrv# superwiz admin
  set wizard
  authsrv# list
  Report for users in database
  user  group longname      ok?  proto  last
  ------ ------ ------------------ ----- ------ -----
  admin     Auth DB admin   ena  passw  never
  authsrv# display admin
  Report for user admin (Auth DB admin)
  Authentication protocol: password
  Flags: WIZARD
  authsrv# ^D
  EOT
  #
Kontrola przez bramę telnetu (tn-gw) polega na prostym przesłaniu i jest to pierwsza którą powinieneś ustawić.

W moim przykładzie pozwoliłem komputerom z wnętrza sieci prywatnej na dostęp bez autentyfikacji (permit-hosts 19961.2.* -passok).

Ale inni użytkownicy powinni wprowadzić swoją nazwę użytkownika i hasło. (permit-hosts * -auth)

Poza tym pozwoliłem jednemu innemu systemowi (196.1.2.202) na dostęp do firewalla bezpośrednio, bez przechodzenia przez procedury na nim. Sprawiają to dwie linie z inetacl-in.telnetd

Wyjaśnię ich działanie potem.

Powinieneś zachować krótki czas timeoutu.

 # reguły dostępu telnetu do firewalla:
 tn-gw:        denial-msg   /usr/local/etc/tn-deny.txt
 tn-gw:        welcome-msg   /usr/local/etc/tn-welcome.txt
 tn-gw:        help-msg    /usr/local/etc/tn-help.txt
 tn-gw:        timeout 90
 tn-gw:        permit-hosts 196.1.2.* -passok -xok
 tn-gw:        permit-hosts * -auth
 # Tylko administrator może wykonać telnet na port 24 firewalla.
 netacl-in.telnetd: permit-hosts 196.1.2.202 -exec
 /usr/sbin/in.telnetd
I to samo z r-command.

 #  reguły dostępu rlogin do firewalla
 rlogin-gw:  denial-msg   /usr/local/etc/rlogin-deny.txt
 rlogin-gw:  welcome-msg   /usr/local/etc/rlogin-welcome.txt
 rlogin-gw:  help-msg    /usr/local/etc/rlogin-help.txt
 rlogin-gw:  timeout 90
 rlogin-gw:  permit-hosts 196.1.2.* -passok -xok
 rlogin-gw:  permit-hosts * -auth -xok
 # Tylko administrator może wykonać telnet na port 24 firewalla.
 netacl-rlogind: permit-hosts 196.1.2.202 -exec /usr/libexec/rlogind
 -a

Nie powinieneś dawać nikomu bezpośredniego dostępu do firewalla, włączając w to dostęp prze FTP (tak pobieranie jak i wkładanie).

Jeszcze raz, linie zawierające permit-hosts pozwalają każdemu w chronionej na wolny dostęp do Internetu, zaś wszyscy inni muszą się autentyfikować. Włączyłem zapisywanie każdego pliku pobranego i wysłanego do mojej konfiguracji.

(-log { retr stor })

Timeouty FTP dają ci kontrolę nad tym jak długo będą utrzymywane ,,złe'' połączenia i jak długo będą utrzymywane połączenia bez żadnej aktywności.

 #  reguły dostępu ftp do firewalla
 ftp-gw:        denial-msg   /usr/local/etc/ftp-deny.txt
 ftp-gw:        welcome-msg   /usr/local/etc/ftp-welcome.txt
 ftp-gw:        help-msg    /usr/local/etc/ftp-help.txt
 ftp-gw:        timeout 300
 ftp-gw:        permit-hosts 196.1.2.* -log { retr stor }
 ftp-gw:        permit-hosts * -authall -log { retr stor }
WWW, Gopher i bazujące na przeglądarkach FTP jest kontrolowane przez http-gw. Pierwsze dwie linie tworzą katalog gdzie będą składowane pliki i dokumenty z FTP i WWW. Przy czym są one własnością root`a i są składowane w katalogu dostępnym tylko dla niego.

Połączenia WWW powinny być bardzo krótki. W ten sposób można kontrolować jak długo użytkownicy będą utrzymywać błędne połączenia.

 # reguły dostępu dla WWW i Gophera
 http-gw:   userid     root
 http-gw:   directory    /jail
 http-gw:   timeout 90
 http-gw:   default-httpd  www.afs.net
 http-gw:   hosts      196.1.2.* -log { read write ftp }
 http-gw:   deny-hosts   *

ssl-gw ustawia się tak samo ja i inne bramy. Bądź z nią ostrożny. W tym przykładzie pozwalam wszystkim z sieci chronionej na łączenie się z każdym z serwerów na zewnątrz z wyjątkiem adresów 127.0.0.* i 192.1.1.* oraz (wtedy) na otwieranie portów 443 do 563 używanych jako znane porty dla SSL.

# zasady dla bramy ssl:
 ssl-gw:     timeout 300
 ssl-gw:     hosts      196.1.2.* -dest { !127.0.0.* !192.1.1.*
 *:443:563 }
 ssl-gw:     deny-hosts   *

Poniżej znajduje się przykład jak użyć plug-gw aby pozwolić na połączenie do serwera news. W tym przykładzie zezwalam każdemu z sieci lokalnej na dostęp do tylko jednego systemu i tylko na porcie zajętym przez news.

W drugiej linii pozwalam serwerowi news przesłać dane z powrotem do chronionej sieci.

Ponieważ większość klientów spodziewa się, że pozostaje podłączenie w czasie gdy użytkownik czyta wiadomości timeout dla news powinien być długi.

 # brama dla modułu plug-gw i NetNews
 plug-gw:    timeout 3600
 plug-gw: port nntp 196.1.2.* -plug-to 199.5.175.22 -port nntp
 plug-gw: port nntp 199.5.175.22 -plug-to 196.1.2.* -port nntp

Brama dla fingera jest prosta. Każdy z chronionej sieci powinien się załogować i wtedy pozwalamy mu na użycie fingera na firewallu. Pozostali nie po prostu dostają wiadomość.

 # uruchomienie usługi finger
 netacl-fingerd: permit-hosts 196.1.2.* -exec /usr/libexec/fingerd
 netacl-fingerd: permit-hosts * -exec /bin/cat
 /usr/local/etc/finger.txt

Nie mam ustawionych usług dla poczty elektronicznej i X-Windows więc nie daję przykładów. Jeśli ktoś ma działający przykład, proszę o przysłanie mi.

Plik inetd.conf

Oto jest kompletny plik /etc/inetd.conf . Wszystkie niepotrzebne usługi zostały wykomentowane. Włączyłem pełny plik aby pokazać co wyłączyć i jak ustawić nową usługę w ścianie ognia. {od tłumacza: nie przekładam typowych dla tego pliku linii}

 #echo stream tcp nowait root    internal
 #echo dgram  udp wait  root    internal
 #discard   stream tcp nowait root    internal
 #discard   dgram  udp wait  root    internal
 #daytime   stream tcp nowait root    internal
 #daytime   dgram  udp wait  root    internal
 #chargen   stream tcp nowait root    internal
 #chargen   dgram  udp wait  root    internal
 # brama FTP w ścianie ognia
 ftp-gw   stream tcp nowait.400 root /usr/local/etc/ftp-gw ftp-gw
 # brama Telnetu w ścianie ognia
 telnet    stream tcp nowait   root /usr/local/etc/tn-gw
 /usr/local/etc/tn-gw
 # local telnet services
 telnet-a  stream tcp nowait   root /usr/local/etc/netacl in.telnetd
 # brama Gophera w ścianie ognia
 gopher    stream tcp nowait.400 root /usr/local/etc/http-gw
 /usr/local/etc/http-gw
 # brama WWW w ścianie ognia
 http stream tcp nowait.400 root /usr/local/etc/http-gw
 /usr/local/etc/http-gw
 # SSL  w ścianie ognia
 ssl-gw stream tcp   nowait root /usr/local/etc/ssl-gw  ssl-gw
 # NetNews firewall proxy (using plug-gw)
 nntp  stream tcp   nowait root  /usr/local/etc/plug-gw plug-gw nntp
 #nntp stream tcp   nowait root  /usr/sbin/tcpd in.nntpd
 # SMTP (email)  w ścianie ognia
 #smtp stream tcp   nowait root  /usr/local/etc/smap smap
 #
 # Shell, login, exec and talk are BSD protocols.
 #
 #shell    stream tcp   nowait root  /usr/sbin/tcpd in.rshd
 #login    stream tcp   nowait root  /usr/sbin/tcpd in.rlogind
 #exec stream tcp   nowait root  /usr/sbin/tcpd in.rexecd
 #talk dgram  udp   wait  root  /usr/sbin/tcpd in.talkd
 #ntalk    dgram  udp   wait  root  /usr/sbin/tcpd in.ntalkd
 #dtalk    stream tcp   waut  nobody /usr/sbin/tcpd in.dtalkd
 #
 # Pop and imap mail services et al
 #
 #pop-2  stream tcp nowait root /usr/sbin/tcpd  ipop2d
 #pop-3  stream tcp nowait root /usr/sbin/tcpd  ipop3d
 #imap  stream tcp nowait root /usr/sbin/tcpd  imapd
 #
 # The Internet UUCP service.
 #
 #uucp  stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico
 -l
 #
 # Tftp service is provided primarily for booting. Most sites
 # run this only on machines acting as  " boot servers. " 
 Do not uncomment
 # this unless you *need* it.
 #
 #tftp dgram  udp   wait  root  /usr/sbin/tcpd in.tftpd
 #bootps    dgram  udp   wait  root  /usr/sbin/tcpd bootpd
 #
 # Finger, systat and netstat give out user information which may be
 # valuable to potential "system crackers." Many sites choose to
 disable
 # some or all of these services to improve security.
 #
 # cfinger is for GNU finger, which is currently not in use in RHS
 Linux
 #
 finger    stream tcp nowait root  /usr/sbin/tcpd in.fingerd
 #cfinger   stream tcp nowait root  /usr/sbin/tcpd in.cfingerd
 #systat    stream tcp nowait guest /usr/sbin/tcpd /bin/ps -auwwx
 #netstat   stream tcp nowait guest /usr/sbin/tcpd /bin/netstat -f
 inet
 #
 # Time service is used for clock syncronization.
 #
 #time stream tcp nowait root /usr/sbin/tcpd in.timed
 #time dgram  udp wait  root /usr/sbin/tcpd in.timed
 #
 # Authentication
 #
 auth     stream tcp wait  root /usr/sbin/tcpd in.identd -w -t120
 authsrv    stream tcp nowait root /usr/local/etc/authsrv authsrv
 #
 # End of inetd.conf

Plik /etc/services

Tutaj się wszystko zaczyna. Gdy klient łączy się ze ścianą ognia dzieje się to na tzw. dobrze znanym porcie (niższym od 1024). Na przykład telnet łączy się na porcie 23. Serwer inetd słyszy prośbę o połączenie, i szuka nazwy tej usługi w /etc/services. Później wzywa programy wyznaczony dla tej usługi w /etc/inedt.conf

Niektóre z usług nie są normalnie tworzone przez wywołanie w /etc/serwices. Można przydzielać niektóre porty jak chcemy, Na przykład ja przydziałem usłudze ,,telnet administratora'' (telnet-a) port 24. Ty możesz przydzielić tę usługę na portowi 2323, jeśli chcesz. Dla administratora (CIEBIE) bezpośrednie połączenie ze ścianą ognia na porcie 24 nie 23 noże być potrzebne, jeśli masz ustawioną swoją chronionej sieci.

 telnet-a    24/tcp
 ftp-gw     21/tcp      # this named changed
 auth      113/tcp  ident  # User Verification
 ssl-gw     443/tcp


Następna strona Poprzednia strona Spis treści