|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1047
|
[iptables] NFQUEUE, mangle e DNAT
Ciao,
sto facendo un accrocchio (chiamarlo programma è sempre troppo) per il filtro degli URL trasparente gestito via iptables. Perchè gestito via iptables e non, ad esempio via squid+redirect? perchè non voglio inserire altre strutture alla rete già esistente, per cui ho preso una macchina embedded con 2 schede di rete e faccio questo: ---INTERNET---ROUTER/PROXY DI RETE------1-MIO FIREWALL-2-----LAN dove l'interfaccia 1 e 2 di MIO FIREWALL sono in bridge, così non hanno neanche bisogno di un indirizzo IP. Veniamo al dunque: ho pensato di fare il tutto in user space, per cui ho usato il target NFQUEUE e mi sono letto la documentazione per scrivere il programma necessario in C. Ora quando devo emettere un verdetto, se si tratta di emettere NF_ACCEPT oppure NF_DROP nessun problema, il mio pacchetto viene bloccato. Io però vorrei poter fare un'altra cosa: redirigere il pacchetto che matcha in user space verso altri lidi con DNAT.... come fare ? ![]() Per il momento ho pensato di usare nf_set_verdict_mark con verdetto NF_REPEAT per riaccodare il pacchetto nella chain, ma... non funziona! perchè non riesce a reinserirlo nella chain NAT, l'unica in cui DNAT sia valido. io avvio il firewall con questo script di iptables Codice:
sudo su -c "echo 1 > /proc/sys/net/ipv4/ip_forward" sudo /sbin/iptables -F sudo /sbin/iptables -F -t nat sudo /sbin/iptables -F -t mangle sudo /sbin/iptables -t nat -A PREROUTING -m mark --mark 1 -j LOG --log-prefix "nat PREROUTING " sudo /sbin/iptables -t nat -A POSTROUTING -m mark --mark 1 -j LOG --log-prefix sudo /sbin/iptables -A FORWARD -m mark --mark 1 -j LOG --log-prefix "filter FORWARD " sudo /sbin/iptables -t mangle -A PREROUTING -m mark --mark 1 -j LOG --log-prefix "mangle PREROUTING " sudo /sbin/iptables -t mangle -A PREROUTING -m mark --mark 2 -j ACCEPT sudo /sbin/iptables -t mangle -A PREROUTING -m mark --mark 0 -m physdev -m multiport --physdev-in eth2 -p tcp --dports 80,3128 -j MARK --set-mark 2 sudo /sbin/iptables -t mangle -A PREROUTING -m physdev -m mark --mark 2 -m multiport --physdev-in eth2 -p tcp --dports 80,3128 -j NFQUEUE sudo ./nfqnl Codice:
mangle PREROUTING IN=br0 OUT= PHYSIN=eth2 MAC=00:05:1c:04:f4:e1:00:a0:d1:d7:ee:98:08:00 SRC=192.168.0.9 DST=x.y.z.k LEN=608 TOS=0x00 PREC=0x00 TTL=64 ID=32856 DF PROTO=TCP SPT=42332 DPT=80 WINDOW=92 RES=0x00 ACK PSH URGP=0 filter FORWARD IN=br0 OUT=br0 PHYSIN=eth2 PHYSOUT=eth1 SRC=192.168.0.9 DST=x.y.z.k LEN=608 TOS=0x00 PREC=0x00 TTL=64 ID=32856 DF PROTO=TCP SPT=42332 DPT=80 WINDOW=92 RES=0x00 ACK PSH URGP=0 idee? mi piacerebbe tanto poter redirezionare il "bad traffic" verso un IP in maniera che l'utente finale veda un messaggio di errore. p.s. la redirezione funziona se non faccio mangling. Appena tocco la mangle table i pacchetti non passano più in nat. Inoltre in nat table non riesco a far andare NFQUEUE. ![]()
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella” |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:55.