Polityka bezpieczeństwa systemu IT na przykładzie konfiguracji Firewall i DNS

Poniższy artykuł jest próbą zaadresowania tematyki tworzenia polityki bezpieczeństwa na przykładzie systemu firewall i DNS. Może on zostać wykorzystany w Twojej firmie w całości lub jako wzór do dalszego rozwoju.

Firewall

1.  Firewall ma na celu zwiększenie bezpieczeństwa organizacji za pomocą: 

 

  • Blokowanie prób nieuprawnionego dostępu (kontrola i ograniczenie dostępu do sieci wewnętrznej). 
  • Inspekcja ruchu sieciowego na wielu poziomach (m.in. firewall prowadzi kontrolę na podstawie adresów IP, kierunku i stanu połączeń, protokołów i aplikacji, indywidualnych użytkowników). 
  • Tworzenie stref bezpieczeństwa i modelowanie charakterystyki ruchu między nimi. 
  • Ukrywanie wewnętrznej organizacji i struktury sieci. 
  • Monitorowanie stref bezpieczeństwa w celu generowania odpowiednich alarmów. 
  • Gromadzenie logów o zaistniałych zdarzeniach oraz zapewnienie możliwości tworzenia statystyk i raportów. 

2.   W firmie agd.com ruch z zewnątrz jest ograniczony do dostępu do swojej publicznej strony firmowej na zewnątrz na  porcie 443. Część administracyjna strony jest dostępna tylko z sieci wewnętrznej na porcie 8080. Usługa dns dostępna jest na porcie 53. Ponadto wewnątrz firmy otwarte jest połączenie do serwera pocztowego na porcie 110, port 3306 dla połączeń z bazą danych oraz połączenie do portu 2020 z usługą ssh umożliwiającą zdalną administrację serwerem.

 

3.    Poniższa procedura skierowana jest do administratorów sieci i nie wolno jej ujawniać osobom nieuprawnionym:

 

  • Szczegółowy skrypt iptables jest utajniony i znajduje się w sejfie na 8 piętrze budynku A. Należy po niego sięgnąć w przypadku wprowadzania zmian w konfiguracji firewall. Osobą do tego upoważnioną jest główny administrator sieci.

 

Firewall skonfigurowany jest za pomocą skryptu dla iptables który wygląda następująco:

#!/bin/sh
##############################################################################
IPTABLES=iptables
PATH="/usr/sbin"
# Adres serwera 
SERWER="192.168.1.3"
 
# Adres komputera administratora 
ADMIN="192.168.1.10" 

# Przestrzen adresowa naszej sieci wewnetrzenej i karta ja obslugujaca 
WEW_NET="192.168.1.0/24"
WEW_DEV="eth0"
 
# Adres wyjsciowy - zewnetrzny i karta obslugujaca
ZEW_NET="0/0"   
ZEW_DEV="eth1"
 
# Uslugi TCP,ktore chcemy przepuszczac  
TCP_IN="ssl,dns"    # 443, 53
TCP_OUT="ssl,dns"   # 443, 53
  
# Uslugi UDP,ktore przepuszczamy
UDP_IN="443"
UDP_OUT=""
 
# Uslugi ICMP, ktore chcemy przepuszczac 
ICMP_IN=""
ICMP_OUT=""
 
#################################################################################
 
# Usuwamy poprzednie reguly
$IPTABLES -F INPUT
$IPTABLES -F FORWARD
$IPTABLES -F OUTPUT
 
# Ustawienie domyslnej polityki 
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT  
$IPTABLES -P FORWARD DROP
 
 
# Zapisujemy caly nasz ruch w logach 
$IPTABLES -A INPUT -j LOG -m limit --limit 15/hor              
$IPTABLES -A OUTPUT -j LOG -m limit --limit 15/hour
$IPTABLES -A FORWARD -j LOG -m limit --limit 15/hour
 
# Ladujemy mozliwosc sledzenia polaczen 
modprobe ip_conntarck
modprobe ip_conntarck_ftp
 
# Wylaczamy odpowiedzi na pingi
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
 
# Ochrona przed atakami typu Smurf 
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
 
# Wlaczamy ochrone przed komunikacja ICMP error 
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
 
# Wlacza logowanie dziwnych pakietow (spoofed. source routed. redirects) 
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
 
# Nie akceptujemy datagramu IP z opcja "source route"
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
 
# Nie przyjmujemy pakietow ICMP redict, ktore moga zmienic nasza tablice routingu
echo "0" /proc/sys/net/ipv4/conf/all/accept_redirects
 
# Wszystkie karty nie beda przyjmowaly pakietow z sieici innych niz te
# z tablicy routingu 
echo "1" /proc/sys/net/ipv4/conf/all/rp_filter
 
 
# Pozwalamy pakietom biegac po naszym komputerze
# czyli odblokowujemy petle zwrotna LOOPBACK
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT
 
# Pozwalamy na korzstanie z protokolow w trybie passive on
$IPTABLES -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT
  
# Odblokowujemy uslugi na serwerze dla innych przychodzacych z zewnatrz
 
#$IPTABLES -A INPUT -p tcp  -s 0/0 --dport 443 -j ACCEPT 
#$IPTABLES -A INPUT -p udp -s 0/0 --dport 443 -j ACCEPT 
 
$IPTABLES -A INPUT -p tcp  -s 0/0 --sport 443 -j ACCEPT 
$IPTABLES -A INPUT -p udp -s 0/0 --sport 443 -j ACCEPT 
 
 
# Odblokowujemy uslugi na sewerze dla danego adresu IP - KOMP patrz wyzej definicje TCP_IN, UDP_IN
 
    #$IPTABLES -A INPUT -p tcp -s $KOMP -m multiport --dport $TCP_IN  -j ACCEPT # protokol tcp
    #$IPTABLES -A INPUT -p udp -s $KOMP -m multiport --dport $UDP_IN -j ACCEPT # protokol udp
 
    #$IPTABLES -A INPUT -p udp -s $KOMP --dport 137:139 -j ACCEPT # protokol udp
 
# Zezwalamy na wszystko z danego adresu IP – administracja z tego adresu J
 
$IPTABLES -A INPUT -s $KOMP -j ACCEPT  # dlatego powyższe reguly sa wylaczone
 
 
# dostep do DNS
 
$IPTABLES -A INPUT -p tcp -s 0/0 --sport 53 -d $SERWER  -j ACCEPT
$IPTABLES -A INPUT -p udp -s 0/0 --sport 53 -d $SERWER -j ACCEPT
 
#$IPTABLES -A OUTPUT -p tcp -s $SERWER -d 0/0 --dport 53 -j ACCEPT
#$IPTABLES -A OUTPUT -p udp -s $SERWER -d 0/0 --dport 53 -j ACCEPT
  

#  Zamykamy pakiety z adresem zrodlowym ustawionym na nasz
 
$IPTABLES -A INPUT -i $WEW_DEV -s $SERWER -j DROP               # atak Land
 
# Pakiety z adresow nierutowlanych, multicast i zarezerwowanych
 
$IPTABLES -A INPUT -i $WEW_DEV -s 10.0.0.0/8 -j DROP            #class A
$IPTABLES -A INPUT -i $WEW_DEV -s 172.16.0.0/12 -j DROP         #class B
#$IPTABLES -A INPUT -i $WEW_DEV -s 192.168.0.0/16 -j DROP       #class C - z tego korzystamy
$IPTABLES -A INPUT -i $WEW_DEV -s 224.0.0.0/4 -j DROP           #multicast
$IPTABLES -A INPUT -i $WEW_DEV -d 224.0.0.0/4 -j DROP           #multicast
$IPTABLES -A INPUT -i $WEW_DEV -s 240.0.0.0/5 -j DROP           #reserved
$IPTABLES -A INPUT -i $WEW_DEV -s 127.0.0.0/5 -j DROP           #lo
 

  • Skrypt ten zapisujemy z prawami dostępu 700 i uruchamiamy na serwerze.
  • Następnie po uruchomieniu skryptu firewall włączamy przechowywanie logów. W tym celu wpisujemy na koniec pliku /etc/syslog.conf następujący kod:
*.*       /dev/tty12 
*.*       /var/log/firewall
  • Restartujemy demona syslogd:
 # killall  -HUP syslogd
  • Od tego momentu w pliku /var/log/firwall (także na konsoli 12 – alt+12) będziemy mieli wszystkie logi systemowe.

4. Zmiany w konfiguracji firewalla mogą być wprowadzane tylko przez głównego administratora sieci. Odbywa się to poprzez wniosek 43 do pobrania u administratorów sieci, który musi zostać zatwierdzony przez głównego kierownika działu IT. 

5. O zmiany w konfiguracji firewall mogą wnioskować tylko kierownicy poszczególnych działów IT. 

6. W przypadku zawieszenia się firewalla administratorzy sieci odpowiedzialni są za jego zresetowanie, bądź też w skrajnym przypadku przepięcia na zapasowy serwer.

7. Nie wolno wprowadzać zmian w konfiguracji firewall na podstawie prośby ze strony osoby niezweryfikowanej. 

8. Wszelkie aktualizacje systemu operacyjnego i używanych aplikacji powinny być instalowane, gdy tylko się pojawią. Jeżeli instrukcja ta koliduje z działaniem krytycznych systemów produkcyjnych, aktualizacje powinny być dokonane, kiedy tylko pojawi się taka możliwość. 

9. Audyt poprawności ustawień powinien przeprowadzany być raz na kwartał przez administratorów sieci. 

  • Może on go wykonać za pomocą narzędzia nmap z sieci zewnętrznej komendą:
nmap -p 1-65535 -T4 -A -v firma.com -Pn
  • Wynik powinien być następujący:
Nmap scan report for agd.com (x.x.x.x)
Host is up (0.00047s latency).
Not shown: 65533 filtered ports
PORT    STATE SERVICE    VERSION
53/tcp  open  tcpwrapped
443/tcp open  tcpwrapped
  • W przypadku niezgodności należy zgłosić ten fakt głównemu administratorowi sieci który odpowiedzialny jest za wyprowadzenie podatności.

DNS

1. Bezpieczeństwo konfiguracji DNS opiera się na trzech podstawowych zasadach:

  • Serwer powinien odpowiadać każdemu TYLKO o obsługiwanej przez siebie domeny;
  • Odpowiadać na każde pytanie TYLKO obsługiwaną przez siebie siecią;
  • Pozwala transferować swoje domeny TYLKO swoim serwerom podrzędnym;

2. Zmiany w konfiguracji dns mogą być wprowadzane tylko przez głównego administratora sieci. Odbywa się to poprzez wniosek 45 do pobrania u administratorów sieci, który musi zostać zatwierdzony przez głównego kierownika działu IT.

3. O zmiany w konfiguracji dns mogą wnioskować tylko kierownicy poszczególnych działów IT. 

4. Nie wolno wprowadzać zmian w konfiguracji firewall na podstawie prośby ze strony osoby niezweryfikowanej.

5. W przypadku zawieszenia się dns administratorzy sieci odpowiedzialni są za jego zresetowanie, bądź też w skrajnym przypadku przepięcia na zapasowy serwer.

6. Wszelkie aktualizacje systemu operacyjnego i używanych aplikacji powinny być instalowane, gdy tylko się pojawią. Jeżeli instrukcja ta koliduje z działaniem krytycznych systemów produkcyjnych, aktualizacje powinny być dokonane, kiedy tylko pojawi się taka możliwość.

7. Poniższa konfiguracja skierowana jest do administratorów sieci i nie wolno jej ujawniać osobom nieuprawnionym:

W firmie agd.com DNS opiera się o usługę BIND dns i wygląda następująco:

  • Przed sekcją globalną options w pliku named.conf.options należy zdefiniować kto może odpytywać serwer o dowolną domenę:
Przed sekcją globalną options w pliku named.conf.options należy zdefiniować kto może odpytywać serwer o dowolną domenę
  • Następnie należy skonfigurować ustawienia dotyczące tego kto może pytać o naszą domenę: 
Następnie należy skonfigurować ustawienia dotyczące tego kto może pytać o naszą domenę
  • Szczególną uwagę należy zwrócić na dyrektywę allow transfer, która może ujawnić wszystkie wpisy w naszej domenie. Jeżeli nie posiadamy zapasowych serwerów to blokujemy tą opcję jak we wpisie powyżej.
  • Kolejnym krokiem jest przeprowadzenie audytu poprawności konfiguracji. 
    • W tym celu przeprowadzenia możemy skorzystać z narzędzia dig.
    • Sprawdzamy blokadę odpytywania naszego serwera o inne adresy, robiąc to z innej sieci:
dig @ip_naszego_serwera jakieś_inne_ip 
  • wynik działania powinien być podobny do poniższego:
<<>> DiG 9.3.2 <<>> @agd.com wp.pl A
		 ; (1 server found)
		 ;; global options:  printcmd
		 ;; Got answer:
		 ;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 65151
		 ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
  • Sprawdzamy możliwość transferu domeny przez zewnętrzny serwer:
dig agd.com AXFR
  • Wynik działania powinien być podobny do poniższego:
<<>> DiG 9.3.2 <<>> agd.com AXFR
;; global options:  printcmd
; Transfer failed.
  • W przypadku niezgodności należy zgłosić ten fakt głównemu administratorowi sieci który odpowiedzialny jest za wyprowadzenie podatności.

Chcesz wiedzieć więcej?

Zapisz się i bądź informowany o nowych postach (zero spamu!). Dodatkowo otrzymasz, moją prywatną listę 15 najbardziej przydatnych narzędzi (wraz z krótkim opisem), których używam przy testach penetracyjnych.

Nigdy nie podam, nie wymienię ani nie sprzedam Twojego adresu e-mail. W każdej chwili możesz zrezygnować z subskrypcji.

Otagowano , , , , , , , , , , .Dodaj do zakładek Link.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *