Discussione: IPFW configurato con ipfilter.dat
- 13-01-08, 23:55 #1
IPFW configurato con ipfilter.dat
Qualcuno sa se c'è un modo (il più possibilmente veloce) per configurare ipfw perché blocchi il traffico da siti contenuti in una lista?
Ciò che vorrei fare è aggiungere una classica lista ipfilter.dat, per intenderci.
- 14-01-08, 02:23 #2
Puoi farlo con un semplice script bash. Metti gli IP in ipfilter.dat
Esempio del file ipfilter.dat (che per convenzione risiede nella nostra directory home):
Codice:213.245.56.78 213.56.57.89 ..... ecc.
Questo è il contenuto dello script myipfw.sh
---- INIZIO ----
#!/bin/bash
MY_CMD=/sbin/ipfw
MY_CNT=100
SRC_ADDR=192.168.1.18 # <---- Cambia con il tuo IP
for IP in `cat ~/ipfilter.dat`; do
$MY_CMD add $MY_CNT deny ip from $SRC_ADDR to $IP;
let "MY_CNT += 50";
done
echo -e "Lista IP caricata\n"
---- FINE ----
Eseguire con sudo myipfw.sh
(metterlo in /sbin/myipfw.sh e dare un sudo chmod u+x /sbin/myipfw.sh)
Fammi sapere se va
- 14-01-08, 02:46 #3
Aggiungo: se vuoi specificare una lista di hostname invece che di IP puoi usare grep e awk elaborando lo stdout del comando hostname.
in ipfilter.dat metti gli hostname:
Il file myipfw.sh andrà opportunamente modificato:Codice:www.microsoft.com www.sitodabloccare.com www.sitodabloccare2.com .... ecc.
---- INIZIO ----
#!/bin/bash
MY_CMD=/sbin/ipfw
MY_CNT=100
SRC_ADDR=192.168.1.18 # <---- Cambia con il tuo IP
for HOST in `cat ~/ipfilter.dat`; do
$MY_CMD add $MY_CNT deny ip from $SRC_ADDR to `host -t a $HOST | grep -i has | awk '{print $4}'`;
let "MY_CNT += 50";
done
echo -e "Lista Hostname caricata\n"
---- FINE ----
Il grep -i has è fondamentale perchè - nel caso di un CNAME Alias - la riga che mostra il campo "alias" verrà ignorata dallo script. Esempio:
Spero che funzioni a dovere.Codice:Mini:~ Michele$ host -t a www.macitynet.it www.macitynet.it is an alias for macitynet.it. macitynet.it has address 209.197.112.220 Mini:~ Michele$ host -t a www.macitynet.it | grep -i has | awk '{print $4}' 209.197.112.220 Mini:~ Michele$
- 14-01-08, 02:53 #4
Known issues:
- Se si vuole riutilizzare lo script una seconda volta bisogna far si che la variabile contatore inizi laddove finisce quella vecchia, altrimenti ipfw da un errore di sovrascrizione della regola
- Se si inserisce nella lista siti che contengono la parola *has* ed essi sono CNAME Alias, il grep non funziona (non si hanno ripercussioni ma quando lo script adda la regola con la linea incriminata si ha un messaggio di errore, al quale consegue comunque la continuazione dello script. Per fixare si può redirigere lo stderr del comando su /dev/null, soluzione un po' rude ma che farebbe il suo sporco lavoro)
To Do:- Correggere i bug (sinceramente sono troppo stanco per farlo ora! Domani se ne parla..... )
- Implementare una funzione di controllo che informa dell'effettivo esito dell'operazione
- Creare un frontend grafico....? Maybe! (se trovo il tempo, mio nemico da sempre)
- 14-01-08, 16:07 #5
Ecco lo script ulteriormente migliorato:
Codice:#!/bin/bash MY_CMD=/sbin/ipfw MY_CNT=100 SRC_ADDR=192.168.1.18 # <---- Cambia con il tuo IP if [ -f ~/ipfilters.dat ]; then for HOST in `cat ~/ipfilter.dat`; do $MY_CMD add $MY_CNT deny ip from $SRC_ADDR to `host -t a $HOST | grep -i has | awk '{print $4}'` 1>/tmp/ipfwdata 2>/tmp/ipfwerr; if [[ -z "`cat /tmp/ipfwerr`" && -n "`cat /tmp/ipfwdata`" ]]; then let "MY_CNT += 50"; echo -e "Carico l'hostname $HOST \t........... [OK]"; else echo -e "Carico l'hostname $HOST \t........... [NOT OK]"; rm -rf /tmp/ipfwerr 1,2>/dev/null; fi done rm -rf /tmp/ipfwdata 1,2>/dev/null echo -e "Lista Hostname caricata\n" else echo -e "\nNon trovo il file ipfilters.dat nella tua home directory.\nIl programma viene terminato.\n"; exit -1; fi
- 14-01-08, 16:11 #6
Bug Fixes:
- Aggiunto controllo all'avvio dell'esistenza del file ~/ipfilters.dat
- Ora lo script per ogni hostname indica se esso viene addato o meno
Known issues:- Se si vuole riutilizzare lo script una seconda volta bisogna far si che la variabile contatore inizi laddove finisce quella vecchia, altrimenti ipfw da un errore di sovrascrizione della regola
- In caso di hostname con indirizzi multipli (tipo il sito della microsoft) lo script non adda la regola
To Do:- Fixare i bug
- Frontend grafico
- 14-01-08, 16:58 #7
Sei un geniaccio, Michele! XD
Lo scopo di questa richiesta sarebbe escludere automaticamente alcuni IP da programmi che non prevedono l'utilizzo di un filtro del genere (in primis Transmission). Dici che può essere utile o no?
- 14-01-08, 17:13 #8
Figurati, è un semplice script in bash!
Non ho capito cosa intendi, apo.. per il fatto di Transmission..in che senso?
- 14-01-08, 17:18 #9
Nel senso che ci sono programmi (come aMule) che permettono di filtrare gli IP dei client a cui devono connettersi tramite una lista aggiornabile. Dal forum di Transmission, dopo la richiesta di alcuni di integrare un sistema di filtraggio simile, lo sviluppatore ha detto picche perché tanto un filtraggio di quel genere dà solo un falso senso di sicurezza.
Certamente non è il modo per sentirsi completamente sicuri, ma perché ci si deve connettere a siti notoriamente iscritti in varie blacklist?
- 14-01-08, 17:31 #10
Ah, ora ho capito

Beh, sicuramente questa soluzione è molto ad alto livello, essendo scritta in bash. Questo ha dei pro e dei contro: è portabile (pro) ma non strettamente vincolante al programma a cui si intende affiancarla (pro). Nello stesso tempo però potrebbe essere opportunamente inglobata nei sorgenti di Transmission, ovviamente andrebbe riscritta in Objective-C. Ma - comunque sia - a mio avviso sarebbe un'utile funzione.
Discussioni simili
-
Transmission e filtro IP (IPFilter)
By desmo.simo in forum Programmi P2PRisposte: 3Ultimo messaggio: 05-12-07, 19:34 -
tracking cookies, ip sgamato, e ipfw.log
By lorifumi in forum Utenti alle prime armiRisposte: 4Ultimo messaggio: 17-07-07, 10:48 -
dispositivo non configurato
By macune in forum Utenti alle prime armiRisposte: 0Ultimo messaggio: 01-09-06, 12:29



LinkBack URL
About LinkBacks
Replica con citazione


Ti chiedo scusa. Ho fatto un po' di confusione fra i thread e non ho riletto....
mettere in rete hd esterno