iptables - optymalizacja i logowanie

Zagadnienia bezpieczeństwa w systemie
coolturka
Posty: 61
Rejestracja: 30 września 2008, 00:08

iptables - optymalizacja i logowanie

Post autor: coolturka »

Witam. Przez długi czas odkładałem zrobienie porządku z zaporą, aż w końcu nadszedł czas. Poczytałem trochę artykułów, również z bloga Grześka i widzę, że moją zaporę można bardziej zoptymalizować. Kwestia tylko jak te reguły poprzestawiać, aby miało to sens i nadal było bezpiecznie? Obecne reguły wzorowałem na podstawie artykułu Rash-a. Poniżej przedstawiam wycinek iptables - łańcuch FORWARD.
Domyślna polityka to oczywiście DROP.

Kod: Zaznacz cały

 
$NET1=192.168.0.0/28
$NET2=192.168.1.0/28

IPTABLES -P FORWARD DROP

1 IPTABLES -A FORWARD -m state --state INVALID -j LOG --log-prefix "DROP INVALID FWD: " --log-ip-options --log-tcp-options
2 IPTABLES -A FORWARD -m state --state INVALID -j DROP
3 IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

4 IPTABLES -A FORWARD -i eth1 ! -s $NET1 -j LOG --log-prefix "SPOOF 1 FWD: "
5 IPTABLES -A FORWARD -i eth1 ! -s $NET1 -j DROP

6 IPTABLES -A FORWARD -i eth2 ! -s $NET2 -j LOG --log-prefix "SPOOF 2 FWD: "
7 IPTABLES -A FORWARD -i eth2 ! -s $NET2 -j DROP

8 IPTABLES -A FORWARD -i eth1 -s 192.168.0.14 -m time --timestart 22:30 --timestop 08:00 -j DROP
9 IPTABLES -A FORWARD -i eth2 -s 192.168.1.14 -p tcp -m multiport --dport 80,443 -m time --timestart 08:00 --timestop 23:00 --syn -m state --state NEW -j ACCEPT

10 IPTABLES -A FORWARD -i eth1 -s $NET1 -p tcp --dport 21 --syn -m state --state NEW -j ACCEPT
11 IPTABLES -A FORWARD -i eth1 -s $NET1 -p tcp --dport 25 --syn -m state --state NEW -j ACCEPT
12 IPTABLES -A FORWARD -i eth1 -s $NET1 -p tcp --dport 80 --syn -m state --state NEW -j ACCEPT
13 IPTABLES -A FORWARD -i eth1 -s $NET1 -p tcp --dport 443 --syn -m state --state NEW -j ACCEPT
14 IPTABLES -A FORWARD -i eth1 -s $NET1 -p tcp --dport 1080 --syn -m state --state NEW -j ACCEPT
15 IPTABLES -A FORWARD -i eth1 -s $NET1 -p tcp --dport 8000 --syn -m state --state NEW -j ACCEPT
16 IPTABLES -A FORWARD -p udp --dport 53 -m state --state NEW -j ACCEPT
17 IPTABLES -A FORWARD -i eth2 -m iprange --src-range 192.168.1.4-192.168.1.12 -p tcp -m multiport --dport 80,443 --syn -m state --state NEW -j ACCEPT

18 IPTABLES -A FORWARD -i eth2 -s 192.168.1.7 -j LOG -m limit --limit 5/hour
19 IPTABLES -A FORWARD -i eth2 -s 192.168.1.14 -j LOG -m limit --limit 5/hour
20 IPTABLES -A FORWARD ! -i lo -j LOG --log-prefix "DROP FWD: " --log-ip-options --log-tcp-options
Wykonałem

Kod: Zaznacz cały

iptables -L -nv --line-numbers
i oto wynik:

Kod: Zaznacz cały

Chain FORWARD (policy DROP 25016 packets, 1441K bytes)
num   pkts bytes target     prot opt in     out     source               destination    
1     8387  540K LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID LOG flags 6 level 4 prefix `DROP INVALID FWD: ' 
2     8387  540K DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID 
3    6152K 5696M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
4        0     0 LOG        all  --  eth1   *      !192.168.0.0/28       0.0.0.0/0           LOG flags 0 level 4 prefix `SPOOF 1 FWD:' 
5        0     0 DROP       all  --  eth1   *      !192.168.0.0/28       0.0.0.0/0           
6        0     0 LOG        all  --  eth2   *      !192.168.1.0/28       0.0.0.0/0           LOG flags 0 level 4 prefix `SPOOF 2 FWD:' 
7        0     0 DROP       all  --  eth2   *      !192.168.1.0/28       0.0.0.0/0           
8        0     0 DROP       all  --  eth1   *       192.168.0.14         0.0.0.0/0           TIME from 01:30:00 to 08:00:00 
9    13033  782K ACCEPT     tcp  --  eth2   *       192.168.1.14         0.0.0.0/0           multiport dports 80,443 TIME from 08:00:00 to 23:00:00 tcp flags:0x17/0x02 state NEW 
10       0     0 ACCEPT     tcp  --  eth1   *       192.168.0.0/28       0.0.0.0/0           tcp dpt:21 flags:0x17/0x02 state NEW 
11       0     0 ACCEPT     tcp  --  eth1   *       192.168.0.0/28       0.0.0.0/0           tcp dpt:25 flags:0x17/0x02 state NEW 
12    7539  387K ACCEPT     tcp  --  eth1   *       192.168.0.0/28       0.0.0.0/0           tcp dpt:80 flags:0x17/0x02 state NEW 
13    6412  330K ACCEPT     tcp  --  eth1   *       192.168.0.0/28       0.0.0.0/0           tcp dpt:443 flags:0x17/0x02 state NEW 
14       0     0 ACCEPT     tcp  --  eth1   *       192.168.0.0/28       0.0.0.0/0           tcp dpt:1080 flags:0x17/0x02 state NEW 
15       0     0 ACCEPT     tcp  --  eth1   *       192.168.0.0/28       0.0.0.0/0           tcp dpt:8000 flags:0x17/0x02 state NEW 
16   19547 1318K ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpt:53 state NEW 
17    5311  340K ACCEPT     tcp  --  eth2   *       0.0.0.0/0            0.0.0.0/0           source IP range 192.168.1.4-192.168.1.12 multiport dports 80,443 tcp flags:0x17/0x02 state NEW 
18     225 27502 LOG        all  --  eth2   *       192.168.1.7          0.0.0.0/0           limit: avg 5/hour burst 5 LOG flags 0 level 4 
19     148 15662 LOG        all  --  eth2   *       192.168.1.14         0.0.0.0/0           limit: avg 5/hour burst 5 LOG flags 0 level 4 
20   60852 3264K LOG        all  --  !lo    *       0.0.0.0/0            0.0.0.0/0           LOG flags 6 level 4 prefix `DROP FWD: '
Jak widać regułę nr 3 ze stanem ESTABLISHED RELATED najlepiej przenieść na pierwsze miejsce. Następna reguła z dużą ilością to pakiety udp na porcie 53. A kolejne po niej to generalnie http i https.
no i tak, w które miejsce najlepiej je poprzenościć, przed:

Kod: Zaznacz cały

4 IPTABLES -A FORWARD -i eth1 ! -s $NET1 -j LOG --log-prefix "SPOOF 1 FWD: "
5 IPTABLES -A FORWARD -i eth1 ! -s $NET1 -j DROP
6 IPTABLES -A FORWARD -i eth2 ! -s $NET2 -j LOG --log-prefix "SPOOF 2 FWD: "
7 IPTABLES -A FORWARD -i eth2 ! -s $NET2 -j DROP
czy po niej? Posiadam też dwie reguły, które są czasowo ograniczone i czy można je inaczej zapisać?

Następna rzecz, która mnie irytuje i nie mogę sobie z nią poradzić to:

Kod: Zaznacz cały

18 IPTABLES -A FORWARD -i eth2 -s 192.168.1.7 -j LOG -m limit --limit 5/hour
19 IPTABLES -A FORWARD -i eth2 -s 192.168.1.14 -j LOG -m limit --limit 5/hour
bo wygląda na to, że ograniczenie logowania z tych dwóch adresów nie działa pewnie dlatego, że po nich jest:

Kod: Zaznacz cały

20 IPTABLES -A FORWARD ! -i lo -j LOG --log-prefix "DROP FWD: " --log-ip-options --log-tcp-options
.

A te dwa adresy koniecznie nie chciałbym logować, za dużo logów pochodzi z nich.

Jeśli ktoś jest w stanie pomóc i podzielić się swoją uwagą to zapraszam do dyskusji. :)
Awatar użytkownika
Yampress
Administrator
Posty: 6366
Rejestracja: 09 sierpnia 2007, 21:41
Lokalizacja: PL

Post autor: Yampress »

Napisz jeszcze co chcesz osiągnąć stawiając firewall. Bo przedstawienie konfiguracji firewalla o niczym jeszcze nie mówi o co Ci chodzi.
coolturka
Posty: 61
Rejestracja: 30 września 2008, 00:08

Post autor: coolturka »

Witam Yampress, komputer z debianem służy mi za bramę dla sieci lokalnych. Firewall na nim zapewnia pewien poziom bezpieczeństwa dla komputerów w sieci. Chodzi mi o optymalizacje iptables, aby pakiety miały jak najkrótsza drogę do przebycia po regułach, dlatego też załączyłem wynik:

Kod: Zaznacz cały

iptables -L -nv --line-numbers
aby pokazać, które pakiety jaką drogę przebywają. Nie chcę też tych reguł poprzestawiać tak, aby iptables przestał spełniać swoje zadanie. Np. dużo pakietów idzie na port 53 i dlatego regułę nr 16 można by dać wcześniej. Tylko w które miejsce najlepiej?
I drugie to zmiana logowania dla dwóch adresów, bo obecne reguły nie działają i strasznie zapychają syslog odrzucanymi pakietami.

Poprzestawiałem reguły w ten sposób:

Kod: Zaznacz cały

3 IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
1 IPTABLES -A FORWARD -m state --state INVALID -j LOG --log-prefix "DROP INVALID FWD: " --log-ip-options --log-tcp-options 
2 IPTABLES -A FORWARD -m state --state INVALID -j DROP  

4 IPTABLES -A FORWARD -i eth1 ! -s $NET1 -j LOG --log-prefix "SPOOF 1 FWD: " 
5 IPTABLES -A FORWARD -i eth1 ! -s $NET1 -j DROP 
6 IPTABLES -A FORWARD -i eth2 ! -s $NET2 -j LOG --log-prefix "SPOOF 2 FWD: " 
7 IPTABLES -A FORWARD -i eth2 ! -s $NET2 -j DROP  

8 IPTABLES -A FORWARD -i eth1 -s 192.168.0.14 -m time --timestart 22:30 --timestop 08:00 -j DROP 
9 IPTABLES -A FORWARD -i eth2 -s 192.168.1.14 -p tcp -m multiport --dport 80,443 -m time --timestart 08:00 --timestop 23:00 --syn -m state --state NEW -j ACCEPT 
16 IPTABLES -A FORWARD -p udp --dport 53 -m state --state NEW -j ACCEPT 
17 IPTABLES -A FORWARD -i eth2 -m iprange --src-range 192.168.1.4-192.168.1.12 -p tcp -m multiport --dport 80,443 --syn -m state --state NEW -j ACCEPT
12 IPTABLES -A FORWARD -i eth1 -s $NET1 -p tcp --dport 80 --syn -m state --state NEW -j ACCEPT
13 IPTABLES -A FORWARD -i eth1 -s $NET1 -p tcp --dport 443 --syn -m state --state NEW -j ACCEPT

10 IPTABLES -A FORWARD -i eth1 -s $NET1 -p tcp --dport 21 --syn -m state --state NEW -j ACCEPT 
11 IPTABLES -A FORWARD -i eth1 -s $NET1 -p tcp --dport 25 --syn -m state --state NEW -j ACCEPT 
14 IPTABLES -A FORWARD -i eth1 -s $NET1 -p tcp --dport 1080 --syn -m state --state NEW -j ACCEPT 
15 IPTABLES -A FORWARD -i eth1 -s $NET1 -p tcp --dport 8000 --syn -m state --state NEW -j ACCEPT    

18 IPTABLES -A FORWARD -i eth2 -s 192.168.1.7 -j LOG -m limit --limit 5/hour 
19 IPTABLES -A FORWARD -i eth2 -s 192.168.1.14 -j LOG -m limit --limit 5/hour 
20 IPTABLES -A FORWARD ! -i lo -j LOG --log-prefix "DROP FWD: " --log-ip-options --log-tcp-options
Czy można je jeszcze bardziej zoptymalizować wg Was?

Ciągle też nie wiem jak poradzić sobie z nielogowaniem pakietów tylko z dwóch adresów:

Kod: Zaznacz cały

192.168.1.7
192.168.1.14
proszę o jakąś pomoc w tym zakersie.

:)
Awatar użytkownika
pawkrol
Moderator
Posty: 939
Rejestracja: 03 kwietnia 2011, 10:25

Post autor: pawkrol »

Reguły z logowaniem pakietów z określonych stacji muszą być przed reguałami, z których będą "wchodzić" pakiety z tych stacji.
Zapoznaj się też z ulog. Ja z log nie korzystam bo mi zapycha dmeg.
Awatar użytkownika
Yampress
Administrator
Posty: 6366
Rejestracja: 09 sierpnia 2007, 21:41
Lokalizacja: PL

Post autor: Yampress »

pawkrol pisze:Reguły z logowaniem pakietów z określonych stacji muszą być przed reguałami, z których będą "wchodzić" pakiety z tych stacji.
Zapoznaj się też z ulog. Ja z log nie korzystam bo mi zapycha dmeg.
i o wiele więcej obciąża procesor logowania na poziomie kernela. Jak masz pare logów to jeszcze jeszcze. Jak jest ich dużo to już obciążenie rośnie. ulogd jest najrozsądniejszym rozwiązaniem, stosowanym przez prviderów.
ODPOWIEDZ