Ograniczamy dostęp do serwera logów, czyli konfiguracja iptables

W poradzie (Rejestrowanie zdarzeń w sieci, czyli konfiguracja SYSLOG-NG) powiedzieliśmy sobie jak zainstalować i skonfigurować urządzenia oraz sam program aby możliwe było eleganckie (także w sensie automatycznego tworzenia plików, ich lokalizacji itp) zapisywanie zdarzeń z urządzeń sieciowych. Nic nie mówiliśmy o ograniczeniu dostępu do tego serwera. Przecież dostęp do logów nie jest potrzeby szaremu uzytkownikowi, a jeżeli jest to… conajmniej powinno wzbudzić to naszą uwagę 😉

Problem:
– ograniczenie dostępu do serwera (adres 10.1.4.100) z sieci takie że:
– dostęp przez ssh tylko z dwóch adresów: 10.1.4.5 oraz 10.1.4.10
– dostęp do z sieci na port 514 (syslog) tylko z sieci 10.1.1.0/24, 10.1.2.0/24 oraz 10.1.3.0/24
– chcemy aby była możliwość uruchamiania (w zależności od potrzeb) dostępu do usługi HTTP dla  sieci (.1, .2, i .3)
– chcemy mieć możliwość uruchamiania dostępu do usługi FTP dla wszytkich
– pozostałe usługi wyłączone (łącznie z odpowiedzią na ping, czyli transmisja protokołem ICMP)

KONFIGURACJA IPTABLES

1. Logujemy się jako root i w katalogu macierzystym (cd ~)  tworzymy katalog np. skrypty (mkdir skrypty), wchodzimy do tego katalogu i rozpoczynamy edycję nowego pliku (cd skrypty, nano firewall_start)

2. Stworzymy skrypt, który będzie odpowiednio ustawiał politykę ściany ogniowej w zależności od zmiennych (definiowanych na początku skrytpu). Po kolei wklejamy kod (część za # to opisy, ich nie musimy kopiować):

#!/bin/bash
IPTABLES=/sbin/iptables #tutaj określamy ścieżkę dostępu do iptables (jak nie wiemy to: find / -name iptables)
# zmienne otwierające dostęp z zewnątrz do usług na serwerze (gdy „1” – jest dostęp do usługi)
FTP=0
SSH=1
HTTP=0
SYSLOG=1
ICMP=1
#gdy „1” serwer odpowiada na pingi

# czyścimy politykę  firewalla a następnie ustawiamy, że wszystkie połączenia przychodzące mają być odrzucane (podstawowa zasada bezpieczeństwa – najpierw wszystkiego zabraniamy, później dopiero zezwalamy)
$IPTABLES -F
$IPTABLES -P INPUT DROP
#INPUT DROP, czyli odrzucaj przychodzące

# poniżej będą instrukcje warunkowe if, które w zależności od zmiennych będą odpowiednio konfigurowały zaporę
if [ „$FTP” = „1” ]; then
$IPTABLES -A INPUT –protocol tcp –destination-port 21 -j ACCEPT
fi
if [ „$SSH” = „1” ]; then
$IPTABLES -A INPUT -s 10.1.4.5 –protocol tcp –destination-port 22 -j ACCEPT
#adres źródłowy 10.1.4.5 ma dostęp po protokole tcp dostęp (ACCEPT) do usługi ssh (port docelowy – czyli na serwerze 22 (–destination-port 22))
$IPTABLES -A INPUT -s 10.1.4.10 –protocol tcp –destination-port 22 -j ACCEPT
fi
if [ „$HTTP” = „1” ]; then
$IPTABLES -A INPUT -s 10.1.1.0/24 –protocol tcp –destination-port 80 -j ACCEPT
#dostęp do usługi http (port 80) z całej sieci 10.1.1.0 (maska 255.255.255.0, czyli /24)
$IPTABLES -A INPUT -s 10.1.2.0/24 –protocol tcp –destination-port 80 -j ACCEPT
$IPTABLES -A INPUT -s 10.1.3.0/24 –protocol tcp –destination-port 80 -j ACCEPT
fi
if [ „$SYSLOG” = „1” ]; then
$IPTABLES -A INPUT -s 10.1.1.0/24 –protocol udp –destination-port 514 -j ACCEPT
#usługa syslog działa domyślnie na porcie 514 + korzysta w warstwie transportu z protokołu UDP
$IPTABLES -A INPUT -s 10.1.2.0/24 –protocol udp –destination-port 514 -j ACCEPT
$IPTABLES -A INPUT -s 10.1.3.0/24 –protocol udp –destination-port 514 -j ACCEPT
fi
if [ „$ICMP” = „1” ]; then
$IPTABLES -A INPUT -d 10.1.4.100 –protocol icmp -j ACCEPT
#otwiera zaporę dla protokołu icmp z adresem docelowym naszego serwera (-d 10.1.4.100)
# Wlaczamy odpowiedzi na pingi
echo „0” > /proc/sys/net/ipv4/icmp_echo_ignore_all #ustawienie „0” wyłącza ignorowanie icmp (więc włącza odpowiedź na pingi)
else
#$IPTABLES -A INPUT –protocol icmp -j DROP zamyka zaporę dla ruchu ICMP, ale nie musimy dodawać bo domyślnie  po przeładowaniu zapory wszystko jest DROP
# Wlaczamy odpowiedzi na pingi
echo „1” > /proc/sys/net/ipv4/icmp_echo_ignore_all
fi

#Wprowadzamy dodatkowe ograniczenia (dla bezpieczeństwa)
# Ochrona przed atakami typu Smurf
echo „0” > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Wlaczamy ochrone przed komunikacja ICMP error
echo „0” > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

3. Zapisujemy plik (w edytorze nano ctrl+o) i wychodzimy do shell-a (ctrl+x)

4. Nadajemy uprawnienia do odczytu, zapisu i wykonywania skryptu tylko przez root-a (chmod 700 firewall_start)

5. Już możemy uruchomić skrypt (./firewall_start), jeżeli wszystko dobrze przepisaliśmy (odpowiednio ustawiliśmy zmienne dla naszych potrzeb) to po uruchomieniu skryptu …  nic się nie wyświetli na ekranie (nowe zasady zostały wprowadzone). Teraz możemy sprawdzić czy serwer zachowuje się zgodnie z naszymi polecaniami (np. spróbowć go spingować, otworzyć sesję FTP …)

6. Ostatnim elementem, jest ustawienie w systemie automatyczne uruchamianie naszego skryptu przy starcie systemu. W przypadku Debiana zainstalowanego w poprzedniej poradzie (klik) otwieramy do edycji (jako root) plik rc.local (nano /etc/rc.local) i dopisujemy w nim, przed wystąpieniem exit 0, wywołanie naszego skryptu (/etc/skrypty/firewall_start). Zapisujemy i zamykamy edytor.

Od tego momentu za każdym razem po uruchomieniu systemu, będzie wywoływany plik firewall_start, który wprowadzi ustaloną przez nas politykę do iptables. Oczywiście proszę nie traktować tego przykładu jako 100% zabezpieczenia, wiele jeszcze można zmienić w tych ustawieniach – temat zapory to temat rzeka. Polecam lekturę strony w miarę przystępny sposób omawiającej podstawy konfuguracji iptable w linux – klik.

Dodaj komentarz

Twój adres email nie zostanie opublikowany.