Zabezpieczenie sieci - firewall (linux)

 

Skończyłem prawie wszystko w moim projekcie sieci internetowej, przyszło mi teraz odpowiednio zabezpieczyć firewalla.

#ustawienie polityki domyslnej
iptables -P INPUT ACCEPT 
iptables -P FORWARD DROP 
iptables -P OUTPUT ACCEPT

iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT
iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
iptables -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED
iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -m multiport -p tcp --dports 22,80,443 -j ACCEPT

#dostep do internetu
iptables -t nat -A POSTROUTING -o eth4 -s 192.168.0.0/24 -j SNAT --to 10.12.0.108


#dostep do DNS
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 192.168.3.2 -p udp --dport 53 -j SNAT --to 192.168.3.1


#dostep http i https
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --sport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT


#forward pakietow
iptables -A FORWARD -p tcp -s 192.168.0.0/24 --dport 80 -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.0.0/24 --dport 53 -j ACCEPT
iptables -A FORWARD -p udp -s 192.168.0.0/24 --dport 53 -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.0.0/24 --dport 137 -j ACCEPT
iptables -A FORWARD -p udp -s 192.168.0.0/24 --dport 137 -j ACCEPT
iptables -A FORWARD -p udp -s 192.168.3.0/24 --dport 22 -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.3.0/24 --sport 22 -j ACCEPT
iptables -A FORWARD -p udp -s 192.168.3.0/24 --sport 22 -j ACCEPT

#Przepłw DNS w podsieciach
iptables -A INPUT -s 192.168.3.2 -j ACCEPT
iptables -A FORWARD -s 192.168.3.2 -j ACCEPT

W czym leży problem, bo nie zadałeś pytania? Po pierwsze, niektóre reguły Ci się powtarzają. Po drugie, utrzymuj kolejność, bo się w tym pogubisz. Nie przeplataj łańcuchów, napisz reguły dla każdego łańcucha po kolei. I tak się zapytam po raz kolejny, po co zmieniasz adres źródłowy dla DNS? Chodzi mi o tę regułkę.

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 192.168.3.2 -p udp --dport 53 -j SNAT --to 192.168.3.1

Ja tak w ogóle zrobiłbym to tak.

## Polityka bezpieczeństwa ##

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

## Pętla zwrotna ##

iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

## Dostep http i https ##

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT

# Serwer nie będzie do Ciebie inicjował pakietów z portu źródłowego 80, 443 czy 53, więc port źródłowy jest zbędny.
# Chyba że koniecznie potrzebujesz, to sobie dodaj te reguły.

## Ruch z podsieci ##

iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT # Tak na przyszłość - jeśli miałbyś podsieci od 192.168.0.0 do 192.168.3.0,
iptables -A INPUT -s 192.168.3.0/24 -j ACCEPT # możesz je zsumaryzować do nadsieci 192.168.0.0/22 i zapisać w jednej regule.

## Ruch z połączeń nawiązanych ##

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## Przekazywanie pakietów ##

iptables -A FORWARD -p tcp -s 192.168.0.0/24 --dport 80 -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.0.0/24 --dport 53 -j ACCEPT
iptables -A FORWARD -p udp -s 192.168.0.0/24 --dport 53 -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.0.0/24 --dport 137 -j ACCEPT
iptables -A FORWARD -p udp -s 192.168.0.0/24 --dport 137 -j ACCEPT
iptables -A FORWARD -p udp -s 192.168.3.0/24 --dport 22 -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.3.0/24 --sport 22 -j ACCEPT
iptables -A FORWARD -p udp -s 192.168.3.0/24 --sport 22 -j ACCEPT

## Przekazywanie ruchu z połączeń nawiązanych ##

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

## Zezwolenie na ruch wychodzący - inicjowanie połączenia ##

iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Te reguły są zbędne, bo już zezwalasz na ruch z tej podsieci.

#Przepłw DNS w podsieciach
iptables -A INPUT -s 192.168.3.2 -j ACCEPT
iptables -A FORWARD -s 192.168.3.2 -j ACCEPT

Pamietaj, że iptables zawsze na końcu sprawdza politykę bezpieczeństwa. Najpier przypasowuje pakiet do reguł, jeśli pakiet nie pasuje do żadnej reguły, to iptables postępuje z nim zgodnie z polityką bezpieczeństwa, dlatego ja ustawiłem wszystko na drop, czyli pakiety nie pasujące do żadnej reguły będą odrzucane. Inaczej firewall będzie przyjmował każdy pakiet. Każda reguła sprawdzana jest po kolei, dlatego nie możesz mieć takiego bałaganu. Jak masz najpierw regułę dla połączeń nawiązanych, to reszty iptables już nie sprawdzi i będziesz się zastanawiał dlaczego ruch z podsieci jest blokowany.

Ok poradziłem sobie. Odpowiednie porty trzeba było odblokować.