Pokazywanie postów oznaczonych etykietą iptables. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą iptables. Pokaż wszystkie posty

wtorek, 1 stycznia 2008

iptables v1.4.0

22 grudnia pojawiła się nowa wersja iptables. Dla nie zaznajomych w temacie:

iptables is built on top of netfilter, the packet alteration framework for Linux 2.4.x and 2.6.x. It is a major rewrite of its predecessor ipchains, and is used to control packet filtering, Network Address Translation (masquerading, portforwarding, transparent proxying), and special effects such as packet mangling.

Changes from 1.4.0rc1:

- Don't use dlfcn.h if NO_SHARED_LIBS is defined
[ Mike Frysinger ]

- Fix showing help text for matches/targets with revision as user
[ Patrick McHardy ]

- Print warnings to stderr
[ Max Kellermann ]

- Fix sscanf type errors
[ Patrick McHardy ]

- Always print mask in iptables-save
[ Jan Engelhardt ]

- Don't silenty exit on failure to open /proc/net/{ip,ip6}_tables_names
[ Victor Stinner ]

- Adds --table to iptables-restore
[ Peter Warasin ]

- Make DO_MULTI=1 work for ip6tables* binaries
[ Hann-huei Chiou ]

- Add ip6tables-{save,restore} to non-experimental target, fix strict aliasing
warnings
[ Patrick McHardy ]

- Introducing libxt_*.man files. Sorted matches and modules
[ Laszlo Attila Toth ]

- Install ip6tables-{save,restore} manpages
[ Patrick McHardy ]

- Performance optimization in sorting chain during pull-out
[ Jesper Dangaard Brouer ]

- Fix sockfd use accounting for kernels without autoloading
[ Patrick McHardy ]

- use
[ Jan Engelhardt ]

- Fix make/compile error for iptables-1.4.0rc1
[ Jesper Dangaard Brouer ]

- Fix for --random option in DNAT and REDIRECT
[ Tom Eastep ]

- Document xt_statistic
[ Stefano Sabatini ]

- sctp: fix - mistake to pass a pointer where array is required
[ Li Zefan ]

- Fix connlimit output for inverted --connlimit-above: ! > is <=, not <
[ Patrick McHardy ]

- Add NFLOG manpage
[ Patrick McHardy ]

- Move libipt_DSCP.man to libxt_DSCP.man for ip6tables.8
[ Yasuyuki Kozakai ]

- Unifies libip[6]t_CONNSECMARK.man to libxt_CONNSECMARK.man
[ Yasuyuki Kozakai ]

- Moves libipt_CLASSYFY.man to libxt_CLASSYFY.man for ip6tables.8
[ Yasuyuki Kozakai ]

- fix check_inverse() call
[ Jan Engelhardt ]

- Bump version to 1.4.0 final
[ Pablo Neira Ayuso ]

piątek, 2 marca 2007

tips & tricks: dst-port 25

W tym post'cie przedstawię jak skutecznie walczyć z wirusami z własnym silnikiem umożliwiającym im rozsyłanie się za pomocą poczty elektronicznej. Skutecznie .. to znaczy pozbywając się ruchu przez nie generowanego i przy okazji informując klienta o fakcie zainfekowania jego maszyny.

W iptables z modułem recent wystarczy 4 reguły a nawet 2 (bez jump'a do osobnego łańcucha):

iptables -N tcp_dport25 [ent]
iptables -A FORWARD -p tcp --dport 25 -m state --state NEW -j tcp_dport25 [ent]
iptables -A tcp_dport25 -m recent --update --seconds 10 --name smtp -j DROP [ent]
iptables -A tcp_dport25 -m recent --set --name smtp -j ACCEPT [ent]

Co robią powyższe regułki? Pierwsza tworzy nowy łańcuch o nazwie tcp_dport25. Kolejna wysyła do niego ruch wędrujący przez łańcuch FORWARD z portem docelowym 25/tcp oraz stanem połączenia NEW. Następna sprawdza w tabeli smtp czy z danego źródłowego adresu IP, w ciągu ostatnich 10 sekund, była już próba nawiązania połączenia z docelowym portem 25. Jeśli tak, to uaktualnia czas żywotności wpisu informującego o tym fakcie na 10 sekund, oraz DROP'uje próbę nawiązania połączenia. Ostatnia reguła dokonuje wpisu w tabeli smtp świadczącego o tym że z danego IP zanotowano próbę połączenia z zdalnym portem 25, oraz ACCEPT'uje to połączenie.
W tym momencie klient jest w stanie wysłać jednego maila co 10 sekund pod warunkiem że w ciągu tych 10 sekund nie próbował ponownie łączyć się do portu 25. W tym momencie wirusowi, który średnio rozsyła się z częstotliwością kilku prób na sekundę, uda się tylko jedna próba wyjścia na świat z portem docelowym 25. Wszystkie kolejne będą skutecznie blokowane.

A jak powyższy scenariusz zaimplementować w MikroTik'u?

ip firewall filter [ent]
add chain=forward protocol=tcp dst-port=25 connection-state=new action=tcp_dport25 [ent]
add chain=tcp_dport25 src-address-list=smtp address-list=smtp address-list-timeout=10s action=add-src-to-address-list [ent]
add chain=tcp_dport25 src-address-list=smtp action=drop [ent]
add chain=tcp_dport25 action=add-src-to-address-list address-list=smtp address-list-timeout=10s [ent]
add chain=tcp_dport25 action=accept [ent]

Najpierw przechodzimy do konfiguracji tabeli filter firewall'a. Następnie do automatycznie tworzonego łańcucha tcp_dport25 przekierowujemy pakiety rozpoczynające (NEW) połączenie z docelowym portem 25. W kolejnej regule sprawdzamy czy z danego IP były już próby nawiązania połączenia na port 25. Jeśli tak to uaktualniamy wpis. Następnie jeśli nadający host znajduje się już na liście DROP'ujemy połączenie. Jeśli natomiast się na niej nie znajduje dodajemy go do listy na 10 sekund. Ostatnia reguła zezwala na połączenie.

Dodając jeszcze jedną regułę można doprowadzić do tego, że z danego IP można będzie przeglądać strony www pod warunkiem czystego komputera.

ip firewall nat [ent]
add chain=dstnat src-address-list=smtp action=dst-nat to-address=[IP serwera www z stroną informacyjną] to-ports=[port na którym nasłuchuje serwer] [ent]

piątek, 15 grudnia 2006

Prosta, szybka autoryzacja IP <=> MAC

Sposób autoryzacji IP <=> MAC nie jest ciężki do obejścia, wręcz banalny ale w niektórych sytuacjach spokojnie wystarcza. Do niedawna rozwiązywałem to za pomocą pliku w którym trzymałem kombinacje IP, MAC i skryptu z pętlą for który zajmował kilka linijek. Dzisiaj postanowiłem uprościć wspomniany skrypt do jednej linijki. Oto ona:

awk '{ printf "iptables -A FORWARD -s " $1; if ( NF == 2 ) printf "-m mac --mac-source " $2; print "-j ACCEPT" }' /etc/lan_allow | bash

Dla przykładowego pliku lan_allow:
cat /etc/lan_allow
192.168.184.10 00:FF:80:31:20:EE
192.168.184.11
192.168.184.12
192.168.184.13 00:12:0B:F2:30:02
192.168.184.14 00:30:4F:11:09:0A
192.168.184.15

powyższa linijka wygeneruje:
iptables -A FORWARD -s 192.168.184.10 -m mac --mac-source 00:FF:80:31:20:EE -j ACCEPT
iptables -A FORWARD -s 192.168.184.11 -j ACCEPT
iptables -A FORWARD -s 192.168.184.12 -j ACCEPT
iptables -A FORWARD -s 192.168.184.13 -m mac --mac-source 00:12:0B:F2:30:02 -j ACCEPT
iptables -A FORWARD -s 192.168.184.14 -m mac --mac-source 00:30:4F:11:09:0A -j ACCEPT
iptables -A FORWARD -s 192.168.184.15 -j ACCEPT