• User Attivo

    Regole iptables per limitare banda a utorrent

    Ciao a tutti gli utenti mi trovo alle prese con iptables sto cercando di creare uno script che mi permetta di limitare la banda per utorrent ad un client specifico della mia rete casalinga, lo script sarebbe da inserire nella shell di un lynksys flashato con dd-wrt
    Girovagando per la rete ho trovato alcune informazioni ed ho scritto questo piccolo script solo che per ora ho bloccato la porta in questione perchè non mi ricordo più come si specificava una percentuale di banda con iptables qualche indizio?

    
    ############################
            # Reset delle impostazioni #
            ############################
            $IPTABLES -F
            $IPTABLES -F -t nat
            $IPTABLES -F -t mangle
            $IPTABLES -X
            $IPTABLES -X -t nat
            $IPTABLES -X -t mangle
    
            ################################
            # Impostazione Policy standard #
            ################################
            $IPTABLES -P INPUT   DROP
            $IPTABLES -P FORWARD DROP
            $IPTABLES -P OUTPUT  ACCEPT
    
            #################################
            # Abilitazione traffico interno #
            #################################
            $IPTABLES -A INPUT  -i $IFLO -j ACCEPT
            $IPTABLES -A OUTPUT -o $IFLO -j ACCEPT
    
            #############################################################################
            # Abilitazione traffico in entrata solo se relativo a pacchetti in risposta #
            #############################################################################
            $IPTABLES -A INPUT -p  tcp -i $IFEXT1 -m state -s 0/0 --state ESTABLISHED,RELATED -j ACCEPT
            $IPTABLES -A INPUT -p icmp -i $IFEXT1 -m state -s 0/0 --state ESTABLISHED,RELATED -j ACCEPT
            $IPTABLES -A INPUT -p  udp -i $IFEXT1 -m state -s 0/0 --state ESTABLISHED,RELATED -j ACCEPT
            #$IPTABLES -A INPUT -p  tcp -i $IFEXT2 -m state -s 0/0 --state ESTABLISHED,RELATED -j ACCEPT
            #$IPTABLES -A INPUT -p icmp -i $IFEXT2 -m state -s 0/0 --state ESTABLISHED,RELATED -j ACCEPT
            #$IPTABLES -A INPUT -p  udp -i $IFEXT2 -m state -s 0/0 --state ESTABLISHED,RELATED -j ACCEPT
    
            
            
    
            ########################
            # Apertura porte aMule #
            ########################
            $IPTABLES -A INPUT -p tcp --dport 4662 -j ACCEPT
            $IPTABLES -A INPUT -p udp --dport 4665 -j ACCEPT
            $IPTABLES -A INPUT -p udp --dport 4672 -j ACCEPT
    
            
    
            #######################
            # Apertura porte Msn                        #
            #######################
            $IPTABLES -A INPUT -p tcp --dport 1683 -j ACCEPT
    	#$IPTABLES -A INPUT -p tcp --dport 6981 -j ACCEPT
    
    	###################################
    #Blocco porta al client specifico #
    ##################################
    $IPTABLES -A INPUT -p udp -m udp -s 192.168.1.3/24 --dport 63889 -j REJECT
    
    	##############################
            # Contro attacchi hacker     #
            ##############################
    	#Rifiuto di rispondere ai ping inviati all'indirizzo broadcast della rete:
    	echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
    	echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
     pacchetti ICMP di route redirection
    	echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
    	echo 1 > /proc/sys/net/ipv4/tcp_syncookies
    	echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
    	#Protezione contro attacchi spoofing
    	echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
    	#Scarto un flood di pacchetti ICMP fuori taglia (dimensione massima 93 bytes)
    	$IPTABLES -A INPUT -p ICMP --icmp-type 8 -m length --length 93: -j DROP        
    
            echo "ok"
            ;;
    
      stop)
    
    

  • User Attivo

    Ciao,
    una volta avevo fatto una cosa del genere, ma è passato molto tempo e non ricordo quasi nulla.
    Per fortuna avevo preparato uno script che usavo per limitare la banda con iptables, te lo allego, sperando che possa esserti utile.

    In bocca al lupo! :ciauz:

    
    #!/bin/sh
    #
    # Script "educativo" sulla limitazione di banda di un host linux
    #
    ###
    
    # interfaccia di rete
    DEVICE=eth0
    
    # IP origine del traffico che si desidera limitare
    MIOIP=192.168.0.0/24
    
    # Unita di misura
    UNIT=Mbit
    
    # Larghezza di banda supportata della scheda di rete $DEVICE
    BANDATOT=`echo 10$UNIT`
    
    # Porzione di $BANDATOT che si desidera utilizzare
    BANDAUSATA=`echo 1.28$UNIT`
    BANDAUSATABITSEC=1280000
    
    ###
    ### DA QUA IN POI LO SCRIPT NON VA MODIFICATO
    ###
    
    # calcolo del "peso" (deve essere un decimo della banda)
    WEIGHT=`echo $BANDATOT | sed -e "s/$UNIT/\/10/" | bc`
    WEIGHT=`echo $WEIGHT$UNIT`
    
    ###
    ###
    echo
    echo
    echo ....................................Interfaccia di rete = $DEVICE
    echo ...... IP origine del traffico che si desidera limitare = $MIOIP
    echo Larghezza di banda supportata della scheda di rete $DEVICE = $BANDATOT
    echo ........ Porzione dei $BANDATOT che si desidera utilizzare = $BANDAUSATA
    echo .................... Un decimo di $BANDATOT l\'ho calcolato = $WEIGHT
    echo
    echo -n Tutto ok [s/n]?  
    read ZZ
    if [ $ZZ != 's' ]; then
            echo
            echo Ciao
            echo
            exit
    fi
    
    echo
    #### Cancella precedenti configurazioni su $DEVICE
    echo Cancella precedenti configurazioni su $DEVICE
    echo tc qdisc  del dev $DEVICE root
    tc qdisc  del dev $DEVICE root
    
    sleep 1
    echo
    #### inizializza una nuova coda su $DEVICE a cui assegna l'handle 20:0
    #### e la cui banda massima vale $BANDATOT
    echo inizializza una nuova coda su $DEVICE a cui assegna l\'handle 20:0
    echo e la cui banda massima vale $BANDATOT
    echo tc qdisc  add dev $DEVICE root \
              handle 20: cbq bandwidth $BANDATOT avpkt 1000
    tc qdisc  add dev $DEVICE root \
              handle 20: cbq bandwidth $BANDATOT avpkt 1000
    
    sleep 1
    echo
    #### configurazione di una classe nella coda 20:0 su $DEVICE
    #### a cui si assegna un classid 20:1
    echo configurazione di una classe nella coda 20:0 su $DEVICE
    echo a cui si assegna un classid 20:1
    echo tc class  add dev $DEVICE parent 20:0 classid 20:1 \
              cbq bandwidth $BANDATOT rate $BANDATOT avpkt 1000
    tc class  add dev $DEVICE parent 20:0 classid 20:1 \
              cbq bandwidth $BANDATOT rate $BANDATOT avpkt 1000
    
    sleep 1
    echo
    #### all'interno della classe 20:1 definisco la sottoclasse di handle 20:200
    #### a questa sottoclasse impongo la limitazione di banda a $BANDAUSATA
    echo all\'interno della classe 20:1 definisco la sottoclasse di handle 20:200
    echo a questa sottoclasse impongo la limitazione di banda a $BANDAUSATA
    echo tc class  add dev $DEVICE parent 20:1 classid 20:200 \
              cbq  bandwidth $BANDATOT rate $BANDAUSATA avpkt 1000 bounded
    tc class  add dev $DEVICE parent 20:1 classid 20:200 \
              cbq  bandwidth $BANDATOT rate $BANDAUSATA avpkt 1000 bounded
    
    sleep 1
    echo
    #### Ora la coda <E8> stata definita, si deve comunicare al kernel la sua
    #### esistenza e informarlo su come deve gestirla
    echo Ora la coda <E8> stata definita, si deve comunicare al kernel la sua
    echo esistenza e informarlo su come deve gestirla
    echo tc qdisc  add dev $DEVICE parent 20:200 \
              sfq quantum 1514b perturb 15
    tc qdisc  add dev $DEVICE parent 20:200 \
              sfq quantum 1514b perturb 15
    
    sleep 1
    echo
    #### Ora informiamo il kernel su quali pacchetti devono transitare
    #### attraverso la coda
    echo Ora informiamo il kernel su quali pacchetti devono transitare
    echo attraverso la coda
    echo tc filter add dev $DEVICE parent 20:0 \
              protocol ip prio 25 u32 match ip  dst $MIOIP flowid 20:200
    tc filter add dev $DEVICE parent 20:0 \
              protocol ip prio 25 u32 match ip  dst $MIOIP flowid 20:200
    
    ### tc filter add dev $DEVICE parent 20:0 # ATTENTO AL BACKSLASH :-) # \
    ###          protocol ip prio 25 u32 match ip  src $MIOIP flowid 20:200
    
    rshaperctl $MIOIP $BANDAUSATABITSEC
    
    

  • User Attivo

    Grazie ma scusa una cosa con questo script limito la banda a tutti gli utenti che usano la scheda di rete interessata?
    Perchè io dovrei bloccare la banda ad un client conesso in wi-fi e ho paura che se imposto la scheda wi-fi blocchi la banda a tutti i client


  • User Attivo

    @gabriele1986 said:

    [***]

    Ciao Gabriele,
    si, come hai già capito, il traffico viene limitato se proviene da un determinato IP.
    Se riesci a confinare su un IP chi proviene dalla rete wi-fi allora ti può essere utile senza grandi modifiche.

    :ciauz:


  • User

    Potresti fare qualcosa con Squid e iptables+layer7 ma così a naso, ma non ti posso aiutare di più 😞