| HOME | CHi SiAMO | CONTATTi | PROGETTi | DOCUMENTi | SECURiTY | NEWS | iMAGES | ... | >EVENTi | >BLiNDOLiNUX |
|
Breve
panoramica sul nuovo codice di packet filtering nel kernel 2.4
|
|
Bertera
Pietro (dr.iggy@iol.it)
|
Nei kernel dalla serie 2.2 era incluso ipchains
che era una riscrittura del codice di firewalling di BSD.
In iptables il codice è stato riscritto quasi da capo.
La particolarità di iptables è quella di poter
manipolare i pacchetti in diversi "punti" della nostra macchina.
Infatti ci sono 3 tabelle: FILTER, NAT e MANGLE.
Filter è composta da tre catene predefinite uguali a quelle di ipchains:
- INPUT
- OUTPUT
- FORWARD
- PREROUTING
- OUTPUT
- POSTROUTING
- PREROUTING
- OUTPUT
- ACCEPT
- DROP
- QUEQE
- RETURN
- REJECT
| INPUT
| +---------------+
| | Regola 1 |
| -----------------
| | Regola 2 |
| -----------------
| | Regola 3 |
v +---------------+
Tattica
I pacchetti che giungono dalla rete e che sono destinati alla catena INPUT verranno filtrati dalle regole della catena:iptables -N nuova (max. 30 caratteri)iptables -P INPUT DROPiptables -L iptables -X nuovaiptables -F OUTPUTiptables -Z INPUT# Rimuovi tutte le regole della catena OUTPUT
iptables -F OUTPUT
# Rimuovi tutte le regole presenti in TUTTE le catene
iptables -F
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- anywhere anywhere tcp dpt:telnet
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- anywhere anywhere tcp dpt:telnet
# iptables --line-numbers -L INPUT
Chain INPUT (policy DROP)
num target prot opt source destination
1 DROP tcp -- anywhere anywhere tcp dpt:telnet
iptables -A'nome_catena' -p'protocol' -i'input_interface' -o'output_interface' --dport service -j action
| | | | | |
| | | | | +-se la regola è soddisfatta decide la sorte del pacchetto
| | | | |
| | | | +- porta dest. del pacchetto
| | | +--intrfaccia uscita
| | +---- interfaccia ingresso
| +- nome protocollo
+ aggiungi regola alla catena
iptables -A FORWARD -p tcp -i eth0 -o eth1 --dport telnet -j DROP
iptables -I INPUT -p tcp --dport telnet -j REJECTiptables -R INPUT 2 -p icmp --icmp-type ping -j DROPiptables -D INPUT -p icmp --icmp-type ping -j DROPiptables -D INPUT 3iptables -A FORWARD -i ppp0 -o eth0 -p tcp -j REJECT
iptables -A FORWARD -i ppp0 -o eth+ -p tcp -j REJECTiptables -A FORWARD -i ! ppp0 -j ACCEPT
iptables -A INPUT -s $RETE_LOCALE -d $RETE_ESTERNA -p icmp -j ACCEPT
iptables: iptables -A INPUT -p tcp -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.x.x --dport telnet -j ACCEPT
iptables -A INPUT -p tcp --dport ftp:telnet -j ACCEPT
iptables: iptables -A INPUT -p tcp --tcp-flags ALL SYN,ACK -j DROP
iptables -A INPUT -p tcp --syn -j DROP
iptables -A INPUT -p udp -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
IPTAB=/usr/local/sbin/iptables
IP=`ifconfig ppp0 | grep inet | cut -d : -f 2 | cut -d\ -f 1`
$IPTAB -P INPUT DROP
$IPTAB -P FORWARD DROP
$IPTAB -P OUTPUT ACCEPT
$IPTAB -t nat -A PREROUTING -i ppp0 -s 127.0.0.0/8 -j DROP
$IPTAB -t nat -A PREROUTING -i ppp0 -s 192.168.0.0/16 -j DROP
$IPTAB -t nat -A PREROUTING -i ppp0 -d ! $IP -j DROP
### SPERIMENTALE ###
#$IPTAB -t nat -A PREROUTING -i ppp0 -m unclean -j DROP
Con la prima regola scartiamo tutti i pacchetti che dicono di provenire dalla nosta macchina (127.x.x.x) (il numero
dopo '/' è la maschera) perchè questi dovrebbero viaggiare solo sull'interfaccia lo e non sul modem (ppp0).
$IPTAB -N ppp_in
$IPTAB -N services
$IPTAB -A INPUT -i lo -j ACCEPT
$IPTAB -A INPUT -i ppp0 -j ppp_in
$IPTAB -A ppp_in -p icmp --icmp-type ! echo-request -j ACCEPT
$IPTAB -A ppp_in -p tcp --dport 6000:6010 -j DROP
$IPTAB -A ppp_in -p udp --dport 6000:6010 -j DROP
$IPTAB -A ppp_in -p tcp --dport 7000:7010 -j DROP
$IPTAB -A ppp_in -p udp --dport 7000:7010 -j DROP
$IPTAB -A ppp_in -p tcp --dport 1:1024 -j services
$IPTAB -A ppp_in -p udp --dport 1:1024 -j services
Queste regole bloccano tutti i pacchetti destinati alle porte del X11 e Xfont Server perchè i pacchetti su queste
porte potrebbero danneggiare i rispettivi servizi.
#DNS
$IPTAB -A ppp_in -p udp --sport 53 -j ACCEPT
$IPTAB -A ppp_in -p tcp --sport 53 -j ACCEPT
#smtp
$IPTAB -A ppp_in -p tcp --sport 25 -j ACCEPT
#nntp
$IPTAB -A ppp_in -p tcp --sport 119 -j ACCEPT
#telnet
$IPTAB -A ppp_in -p tcp --sport 23 -j ACCEPT
#ftp (dati e linea di controllo)
$IPTAB -A ppp_in -p tcp --sport 20 -j ACCEPT
$IPTAB -A ppp_in -p tcp --sport 21 -j ACCEPT
#irc
$IPTAB -A ppp_in -p tcp --sport 6666:7000 -j ACCEPT
$IPTAB -A ppp_in -p udp --sport 6666:7000 -j ACCEPT
#talk
$IPTAB -A ppp_in -p tcp --sport 518:519 -j ACCEPT
$IPTAB -A ppp_in -p udp --sport 518:519 -j ACCEPT
#http e https
$IPTAB -A ppp_in -p tcp -m multiport --sport 80,443 -j ACCEPT
#pop3
$IPTAB -A ppp_in -p tcp --sport 110 -j ACCEPT
#imap
$IPTAB -A ppp_in -p tcp -m multiport --sport 143,220 -j ACCEPT
Queste regole fanno passare i pacchetti relativi a: DNS, posta in uscita, news, telnet in uscita, ftp, irc, talk, web,
server pop3, server imap2 e imap3.
$IPTAB -A services -p tcp --dport 113 -j REJECT
$IPTAB -A services -j DROP
$IPTAB -A services -p tcp --dport 80 -j ACCEPT
$IPTAB -N conn_state
$IPTAB -N tcp_flags
$IPTAB -A conn_state -m state --state INVALID -j DROP
$IPTAB -A conn_state -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTAB -A tcp_flags -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPTAB -A tcp_flags -p tcp --tcp-flags ALL ALL -j DROP
$IPTAB -A tcp_flags -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPTAB -A tcp_flags -p tcp --tcp-flags ALL NONE -j DROP
$IPTAB -A tcp_flags -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPTAB -A tcp_flags -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTAB -A tcp_flags -p tcp --tcp-flags FIN FIN -j DROP
Queste regole servono ad impedire gli scan Xmas tree di nmap ( prima, seconda e terza), la quarta blocca i pacchetti senza flags, la quinta blocca i pacchetti SYN+RST, l'ultima blocca i pacchetti SYN+FIN.
$IPTAB -I ppp_in 1 -j conn_state
$IPTAB -I ppp_in 1 -j tcp_flags
$IPTAB -P INPUT DROP
$IPTAB -F
$IPTAB -X
$IPTAB -t nat -A PREROUTING -i ppp0 -s 127.0.0.0/8 -j DROP
$IPTAB -t nat -A PREROUTING -i ppp0 -s 192.168.0.0/16 -j DROP
$IPTAB -t nat -A PREROUTING -i ppp0 -d ! $IP -j DROP
### SPERIMENTALE ###
#$IPTAB -t nat -A PREROUTING -i ppp0 -m unclean -j DROP
$IPTAB -N ppp_in
$IPTAB -N services
$IPTAB -N conn_state
$IPTAB -N flags
$IPTAB -N blocked
$IPTAB -A INPUT -i lo -j ACCEPT
$IPTAB -A INPUT -i ppp0 -j ppp_in
$IPTAB -A conn_state -m state --state INVALID -j DROP
$IPTAB -A conn_state -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTAB -A tcp_flags -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPTAB -A tcp_flags -p tcp --tcp-flags ALL ALL -j DROP
$IPTAB -A tcp_flags -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPTAB -A tcp_flags -p tcp --tcp-flags ALL NONE -j DROP
$IPTAB -A tcp_flags -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPTAB -A tcp_flags -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTAB -A tcp_flags -p tcp --tcp-flags FIN FIN -j DROP
$IPTAB -A services -j DROP
$IPTAB -A ppp_in -j blocked
$IPTAB -A ppp_in -j conn_state
$IPTAB -A ppp_in -j flags
$IPTAB -A ppp_in -p tcp --dport 1:1024 -j services
$IPTAB -A ppp_in -p udp --dport 1:1024 -j services
$IPTAB -A ppp_in -p icmp --icmp-type ! echo-request -j ACCEPT
$IPTAB -A ppp_in -p tcp --sport 20 -j ACCEPT
Ovviamente questo
è un firewall minimo e senza logging. Lo script avanzato che potete scaricare
è invece più completo ed è configurabile tramite il file /etc/firewall.conf. | HOME | CHi SiAMO | CONTATTi | PROGETTi | DOCUMENTi | SECURiTY | NEWS | iMAGES | ... | >EVENTi | >BLiNDOLiNUX |
|
© valtellinux.it 1999...2005
|