Strona 1 z 1

iptables - optymalizacja i logowanie

: 29 maja 2015, 18:16
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. :)

: 30 maja 2015, 17:31
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.

: 31 maja 2015, 19:36
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.

:)

: 03 czerwca 2015, 07:37
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.

: 03 czerwca 2015, 09:37
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.