Table of Contents

Iptables - firewall,routing, etc

wondershaper

Με το wondershaper μπορούμε πολύ γρήγορα να μειώσουμε την ταχύτητα μιας διεπαφής του υπολογιστή μας για όλες τις εφαρμογές

aptitude install wondershaper

Έστω ότι θέλουμε ταχύτητα 1024Kbps download και 256kbps upload στην διεπαφή eth0. Απλά εκτελούμε

wondershaper eth0 1024 256

Για να αναιρέσουμε τους περιορισμούς ταχύτητας εκτελούμε

wondershaper clear etho

trickle

Το 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

Δρομολόγηση μέσω 2 συνδέσεων

Εάν έχουμε δύο διαφορετικές συνδέσεις στο 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

route cache

Η δρομολόγηση είτε μέσω του 1ου gateway είτε μέσο του 2ου αποθηκεύεται προσωρινά. Έτσι για ένα χρονικό διάστημα όλες οι αιτήσεις προς μια διεύθυνση (π.χ. www.google.com) θα δρομολογούνται από τον ίδιο gateway.

Για να δούμε την route cache εκτελούμε

ip route show cache

Για να διαγράψουμε την cache

ip route flush cache

Failover

Limit Port Bandwidth

Ρύθμιση

Για να περιορίσουμε το εύρος που χρησιμοποιείται από μια συγκεκριμένη θύρα ή προς μια συγκεκριμένη θύρα κάνουμε τα εξής

/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

Αντιμετώπιση Προβλημάτων

Limit Port Processes

Εάν θέλουμε να περιορίσουμε τις συνδέσεις σε μια θύρα π.χ. την θύρα προορισμού 25 μπορούμε να εκτελέσουμε την παρακάτω εντολή

iptables -I OUTPUT 1 -o eth0 -p tcp --syn --dport 25 -m connlimit --connlimit-above 2 -j REJECT

Προσοχή στην απόρριψη συνδέσεων με αυτόν τον τρόπο.

θα πρέπει να γίνεται σωστός χειρισμός και από τις εφαρμογές που ξεκινούν τις συνδέσεις αλλιώς μπορεί να προκαλέσουμε δυσλειτουργία σε αυτές.

Η παραπάνω ρύθμιση συνίσταται σε περιπτώσεις επιθέσεων ή υπερβολικού φόρτου για αποφυγή δυσλειτουργίας στον ίδιο τον server

Πήγες