+ Replica alla discussione
Pagina 1 di 2 1 2 UltimoUltimo
Mostra risultati 1 a 10 di 14
  1. #1
    Think Mitola. apo758 avatar
    Iscritto
    02-06
    Messaggi
    8.214

    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.

  2. #2
    Moderatore Michele Gazzaruso avatar
    Iscritto
    08-06
    Luogo
    Cosenza
    Messaggi
    5.325
    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

  3. #3
    Moderatore Michele Gazzaruso avatar
    Iscritto
    08-06
    Luogo
    Cosenza
    Messaggi
    5.325
    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:
    Codice:
    www.microsoft.com
    www.sitodabloccare.com
    www.sitodabloccare2.com
    ....
    ecc.
    
    Il file myipfw.sh andrà opportunamente modificato:

    ---- 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:

    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$
    
    Spero che funzioni a dovere.

  4. #4
    Moderatore Michele Gazzaruso avatar
    Iscritto
    08-06
    Luogo
    Cosenza
    Messaggi
    5.325
    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)

  5. #5
    Moderatore Michele Gazzaruso avatar
    Iscritto
    08-06
    Luogo
    Cosenza
    Messaggi
    5.325
    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
    

  6. #6
    Moderatore Michele Gazzaruso avatar
    Iscritto
    08-06
    Luogo
    Cosenza
    Messaggi
    5.325
    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

  7. #7
    Think Mitola. apo758 avatar
    Iscritto
    02-06
    Messaggi
    8.214
    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?

  8. #8
    Moderatore Michele Gazzaruso avatar
    Iscritto
    08-06
    Luogo
    Cosenza
    Messaggi
    5.325
    Figurati, è un semplice script in bash!

    Non ho capito cosa intendi, apo.. per il fatto di Transmission..in che senso?

  9. #9
    Think Mitola. apo758 avatar
    Iscritto
    02-06
    Messaggi
    8.214
    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?

  10. #10
    Moderatore Michele Gazzaruso avatar
    Iscritto
    08-06
    Luogo
    Cosenza
    Messaggi
    5.325
    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

  1. Transmission e filtro IP (IPFilter)
    By desmo.simo in forum Programmi P2P
    Risposte: 3
    Ultimo messaggio: 05-12-07, 19:34
  2. tracking cookies, ip sgamato, e ipfw.log
    By lorifumi in forum Utenti alle prime armi
    Risposte: 4
    Ultimo messaggio: 17-07-07, 10:48
  3. dispositivo non configurato
    By macune in forum Utenti alle prime armi
    Risposte: 0
    Ultimo messaggio: 01-09-06, 12:29

Regole messaggi

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts