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ę:
- 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.