Με το wondershaper μπορούμε πολύ γρήγορα να μειώσουμε την ταχύτητα μιας διεπαφής του υπολογιστή μας για όλες τις εφαρμογές
aptitude install wondershaper
Έστω ότι θέλουμε ταχύτητα 1024Kbps download και 256kbps upload στην διεπαφή eth0. Απλά εκτελούμε
wondershaper eth0 1024 256
Για να αναιρέσουμε τους περιορισμούς ταχύτητας εκτελούμε
wondershaper clear etho
Το trickle είναι μια παλιά εφαρμογή (2003) με την οποία μπορούμε να ορίσουμε ταχύτητες download upload
aptitude install trickle
Αν την τρέξουμε ως daemon μπορούμε να τις ορίσουμε σε αρκετές εφαρμογές που μας ενδιαφέρουν
Ο πιο απλός όμως τρόπος να δούμε την λειτουργία της είναι να την τρέξουμε ως διεργασία
trickle -s -d 50 aptitude dist-upgrade
Με την παραπάνω εντολή περιορίζουμε την ταχύτητα λήψης σε 50 KBytes/sec (στην πράξη γύρω στο 65KBytes/sec)
Ένα σοβαρό μειονέκτημα της εφαρμογής είναι ότι κατά την εκτέλεσή της καταναλώνει 100% την cpu
IFACEOUT="eth1" IFACEIN="eth0" #clear any existing rules $IPTABLES -P INPUT ACCEPT $IPTABLES -F INPUT $IPTABLES -P OUTPUT ACCEPT $IPTABLES -F OUTPUT $IPTABLES -P FORWARD ACCEPT $IPTABLES -F FORWARD # load iptables modules /sbin/modprobe iptable_nat /sbin/modprobe ip_conntrack # enable ip forwarding /bin/echo 1 > /proc/sys/net/ipv4/ip_forward # flush tables $IPTABLES -F $IPTABLES -X # enable masquerading to allow LAN internet access $IPTABLES -t nat -A POSTROUTING -o $IFACEOUT -j MASQUERADE # forward internal LAN traffic from $IFACEIN to $IFACEOUT internet interface $IPTABLES -A FORWARD -i $IFACEIN -o $IFACEOUT -m state --state NEW,ESTABLISHED -j ACCEPT
Εάν έχουμε δύο διαφορετικές συνδέσεις στο internet, μπορούμε να τις χρησιμοποιήσουμε ταυτόχρονα. Μας χρειάζονται 2 κάρτες δικτύου. Η ρύθμιση γίνεται ως εξής:
Προσθέτουμε στο τέλος του αρχείου /etc/iproute2/rt_tables τις ποαρακάτω 2 γραμμές
1 T1 2 T2
Στην συνέχεια δημιουργούμε ένα εκτελέσιμο script αρχείο με όνομα π.χ. lb, με τις παρακάτω εντολές. Τροποποιούμαι τις μεταβλητές στην αρχή για να ανάλογα με τις ρυθμίσεις του δικού μας δικτύου
#!/bin/bash set -x ##CONFIGURATION VARIABLES IF1=eth0 IF2=eth1 IP1=192.168.1.100 IP2=192.168.2.100 R1=192.168.1.1 # router on IF1 R2=192.168.2.1 # router on IF2 NET1=192.168.1.0/24 NET2=192.168.2.0/24 ##DELETE PREVIOUS ROUTES /sbin/route del default gw $R1 /sbin/route del default gw $R2 route del -net $NET1 dev $IF1 route del -net $NET2 dev $IF2 #ADD ROUTES FOR BOTH INTERFACES ip route add $NET1 dev $IF1 src $IP1 table T1 ip route add $NET2 dev $IF2 src $IP2 table T2 # ip route add $NET1 dev $IF1 src $IP1 ip route add $NET2 dev $IF2 src $IP2 # ip rule add from $IP1 table T1 ip rule add from $IP2 table T2 # ip route add default via $R1 table T1 ip route add default via $R2 table T2 #LOAD BALANCE 50-50 ip route add default scope global nexthop via $R1 dev $IF1 weight 1 nexthop via $R2 dev $IF2 weight 1
Κάνουμε το αρχείο εκτελέσιμο
chmod +x ./lb
και το εκτελούμε ως root
./lb
Για να δούμε τον πίνακα δρομολόγησης που έχουμε δημιουργήσει
ip route list
ή
ip route show table main
Για να δούμε τους κανόνες δρομολόγησης που ασκολουθούνται
ip rule show
Ελέγχουμε με διαδοχικές traceroute εντολές. Π.χ.
traceroute www.google.com traceroute www.yahoo.com traceroute www.debian.org traceroute www.linux.org
Η δρομολόγηση είτε μέσω του 1ου gateway είτε μέσο του 2ου αποθηκεύεται προσωρινά. Έτσι για ένα χρονικό διάστημα όλες οι αιτήσεις προς μια διεύθυνση (π.χ. www.google.com) θα δρομολογούνται από τον ίδιο gateway.
Για να δούμε την route cache εκτελούμε
ip route show cache
Για να διαγράψουμε την cache
ip route flush cache
Για να περιορίσουμε το εύρος που χρησιμοποιείται από μια συγκεκριμένη θύρα ή προς μια συγκεκριμένη θύρα κάνουμε τα εξής
/sbin/tc qdisc add dev eth0 root handle 1: htb /sbin/tc class add dev eth0 parent 1: classid 1:1 htb rate 1024kbps /sbin/tc class add dev eth0 parent 1:1 classid 1:6 htb rate 40kbps ceil 45kbps prio 0 /sbin/tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 6 fw flowid 1:6 /sbin/iptables -A OUTPUT -t mangle -p tcp --dport 25 -j MARK --set-mark 6
Το παραπάνω παράδειγμα περιορίζει σε 40Kbyte/sec (έως 45Kbyte/sec) τις συνδέσεις με την εξωτερική θύρα 25 (dport). (Π.χ. για αποστολή e-mail από τον mail server μας
Εάν έχουμε και 2η γραμμή π.χ. eth2
/sbin/tc qdisc add dev eth2 root handle 1: htb /sbin/tc class add dev eth2 parent 1: classid 1:2 htb rate 1024kbps /sbin/tc class add dev eth2 parent 1:2 classid 1:5 htb rate 40kbps ceil 45kbps prio 0 /sbin/tc filter add dev eth2 parent 1:0 prio 0 protocol ip handle 6 fw flowid 1:5 /sbin/iptables -A OUTPUT -t mangle -p tcp --dport 25 -j MARK --set-mark 6
tc qdisc del dev eth0 root
watch /sbin/tc -s -d class show dev eth0
Εάν θέλουμε να περιορίσουμε τις συνδέσεις σε μια θύρα π.χ. την θύρα προορισμού 25 μπορούμε να εκτελέσουμε την παρακάτω εντολή
iptables -I OUTPUT 1 -o eth0 -p tcp --syn --dport 25 -m connlimit --connlimit-above 2 -j REJECT
Προσοχή στην απόρριψη συνδέσεων με αυτόν τον τρόπο.
θα πρέπει να γίνεται σωστός χειρισμός και από τις εφαρμογές που ξεκινούν τις συνδέσεις αλλιώς μπορεί να προκαλέσουμε δυσλειτουργία σε αυτές.
Η παραπάνω ρύθμιση συνίσταται σε περιπτώσεις επιθέσεων ή υπερβολικού φόρτου για αποφυγή δυσλειτουργίας στον ίδιο τον server