1

Temat: Własny firewall

Czytam sobie szereg linków na temat tego jak przerobić ten wbudowany filtr pakietów na coś bardziej przejrzystego, min. te poniższe kawałki:
http://eko.one.pl/?p=openwrt-customfirewall
http://wiki.openwrt.org/doc/uci/firewall

Udało mi się pozbyć niepotrzebnych modułów i całkowicie wyłączyć zaporę. Po tym wyczynie napisałem sobie małego skrypta, który ustawia parę reguł. Wprawdzie jest on jeszcze nie kompletny, bo nie ma implementacji tc, fwknop , ipseta i tam paru jeszcze innych rzeczy ale chciałbym by ktoś rzucił okiem na te poniższe regułki i powiedział czy czegoś tam brakuje lub/i czy coś się da poprawić.

iptables -t raw -N notrack_in
iptables -t raw -A notrack_in -i lo -j NOTRACK
iptables -t raw -A notrack_in -i lo -j ACCEPT

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 12345 -j DNAT --to 192.168.1.150
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 12345 -j DNAT --to 192.168.1.150

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j MASQUERADE

iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -N tcp
iptables -t filter -N udp
iptables -t filter -N icmp_in
iptables -t filter -N fw-interfaces
iptables -t filter -N fw-open
iptables -t filter -N fwknop_input

iptables -t filter -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A INPUT -m conntrack --ctstate INVALID -j DROP
iptables -t filter -A INPUT -p icmp -j icmp_in
iptables -t filter -A INPUT -p udp -m conntrack --ctstate NEW -j udp
#    iptables -t filter -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP -m comment --comment "Connections not started by SYN"
iptables -t filter -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j tcp
iptables -t filter -A INPUT -p tcp -m recent --set --name tcp-portscan -j REJECT --reject-with tcp-reset
iptables -t filter -A INPUT -p udp -m recent --set --name udp-portscan -j REJECT --reject-with icmp-port-unreachable
iptables -t filter -A INPUT -j REJECT --reject-with icmp-proto-unreachable

iptables -t filter -A OUTPUT -m conntrack --ctstate INVALID -j DROP

iptables -t filter -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A FORWARD -m conntrack --ctstate INVALID -j DROP
iptables -t filter -A FORWARD -j fw-interfaces 
iptables -t filter -A FORWARD -j fw-open
iptables -t filter -A FORWARD -j REJECT --reject-with icmp-host-unreachable

iptables -t filter -A icmp_in -p icmp -i br-lan -s 192.168.1.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -t filter -A icmp_in -p icmp -m conntrack --ctstate NEW -j LOG --log-prefix "* IPTABLES: ICMP_NEW * "
#    iptables -t filter -A icmp_in -p icmp -m conntrack --ctstate NEW -j SET --add-set autoban src --timeout 7200
iptables -t filter -A icmp_in -p icmp -m icmp --icmp-type echo-request -m conntrack --ctstate NEW -j DROP -m comment --comment "echo-request"    
iptables -t filter -A icmp_in -p icmp -m icmp --icmp-type timestamp-request -j DROP -m comment --comment "timestamp-request"
iptables -t filter -A icmp_in -p icmp -m conntrack --ctstate NEW -j DROP

iptables -t filter -A udp -p udp -m recent --update --seconds 600 --name udp-portscan -j REJECT --reject-with icmp-port-unreachable 
#    iptables -t filter -A udp -p udp --dport 12345 -m conntrack --ctstate NEW -j ACCEPT -m comment --comment "torrent"
    iptables -t filter -A udp -p udp -i br-lan -s 192.168.1.0/24 -j ACCEPT
#    iptables -t filter -A udp -p udp -s 192.168.22.22 --dport 68 -m comment --comment "Allow-DHCP-Renew" -j ACCEPT

    iptables -t filter -A tcp -p tcp -m recent --update --seconds 600 --name tcp-portscan -j REJECT --reject-with tcp-reset
#    iptables -t filter -A tcp -p tcp --dport 12345 -m conntrack --ctstate NEW -j ACCEPT -m comment --comment "torrent"
    iptables -t filter -A tcp -p tcp -i br-lan -s 192.168.1.0/24 -j ACCEPT

    iptables -t filter -A fw-interfaces -i br-lan -s 192.168.1.0/24 -j ACCEPT

    iptables -t filter -A fw-open -i eth0 -o br-lan -d 192.168.1.150 -p tcp --dport 12345 -j ACCEPT
    iptables -t filter -A fw-open -i eth0 -o br-lan -d 192.168.1.150 -p udp --dport 12345 -j ACCEPT

2

Odp: Własny firewall

Tak z ciekawości: po co Ci to było? smile

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3 (edytowany przez morfik 2014-08-04 17:36:21)

Odp: Własny firewall

Bo się nie mogę odnaleźć w tym standardowym filtrze co jest. xD A na tym napisanym ręcznie bez problemu sobie daję radę.

Zobacz jak pokręcony jest ten standardowy filter:

http://i60.tinypic.com/11jt24w.jpg

4

Odp: Własny firewall

Ja wiem jak on jest pokręcony. Kwestia tego że wszystko co potrzebuje dodaje do niego swoje rzeczy więc czeka cię ew. przerabianie też tych pakietów.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5

Odp: Własny firewall

Ja sobie od czasu do czasu dodaję jakieś tam regułki przez panel gargulca (ten bazowy na routerze), potem sobie robię zrzut konfiguracji iptables i staram się jakoś to przepisać na extroota -- zresztą, to nie tylko z iptables.

A te dodatkowe rzeczy, o których piszesz, to np. co?

6

Odp: Własny firewall

Np. upnp

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

7

Odp: Własny firewall

Akurat z tego korzystać nie zamierzam. Swoją drogą to czy przy korzystaniu z tego upnp, po tym jak port zostanie zamknięty i reguła usunięta z iptables, to maszyna za routerem powinna otrzymywać nowe połączenia? Bo z tego co zauważyłem, to otrzymuje, a przecie nie powinna, bo reguła została usunięta i nie ma już przekierowania portu, więc jak to się dzieje, że na maszynie za routerem w iptables są łapane pakiety z flagami syn na tym nieforwardowanym już porcie? smile

8

Odp: Własny firewall

Ale ma status established i dalej jest kontynuowane bieżące połączenie

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

9

Odp: Własny firewall

Hmm, właśnie sobie jeszcze raz przetestowałem to na torrencie i chyba już nie przepuszcza, albo ja coś źle patrzyłem wtedy. Generalnie chodzi o pakiety w stanie NEW, zarówno tcp jak i udp -- te dwie poniższe reguły:

iptables -t filter -A INPUT -p udp -m conntrack --ctstate NEW -j udp
iptables -t filter -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j tcp

no i doczepiony do tego odpowiedni port w łańcuchu udp i tcp. I jak patrzyłem wcześniej to po wyłączeniu tego upnp parę pakietów (zarówno tcp jak i udp) dostawało się do tych reguł na hoście. Przy forwardowaniu torrenta to nabija w tempie 10/s czy coś koło tego. A po wyłączeniu upnp może 2-5 pakietów na 10min. Póki co zostawiłem to trochę by sprawdzić czy coś się złapie przy wyłączonym upnp no i nabiło parę pakietów udp:

Aug  4 20:28:18 morfikownia kernel: [30362.641405] * torrent * IN=bond0 OUT= MAC=3c:4a:92:00:4c:5b:e8:94:f6:68:79:f0:08:00 SRC=99.233.132.246 DST=192.168.1.150 
LEN=48 TOS=0x00 PREC=0x00 TTL=108 ID=4022 PROTO=UDP SPT=35659 DPT=22222 LEN=28  
Aug  4 20:28:31 morfikownia kernel: [30375.343107] * torrent * IN=bond0 OUT= MAC=3c:4a:92:00:4c:5b:e8:94:f6:68:79:f0:08:00 SRC=99.233.132.246 DST=192.168.1.150 
LEN=48 TOS=0x00 PREC=0x00 TTL=108 ID=4023 PROTO=UDP SPT=35659 DPT=22222 LEN=28  
Aug  4 20:28:38 morfikownia kernel: [30383.267423] * torrent * IN=bond0 OUT= MAC=3c:4a:92:00:4c:5b:e8:94:f6:68:79:f0:08:00 SRC=162.156.215.148 DST=192.168.1.150
 LEN=95 TOS=0x00 PREC=0x00 TTL=116 ID=19616 PROTO=UDP SPT=31384 DPT=22222 LEN=75

Jak te pakiety ze stanem new przechodzą przez router do mojego hosta, to nie mam pojęcia.