====== 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 ====== Πήγες ====== * tips and tricks : https://opensource.com/article/18/10/iptables-tips-and-tricks * limit-port-bandwidth : * http://serverfault.com/questions/384132/iptables-limit-rate-of-a-specific-incoming-ip * port 80 traffic shaping : http://www.cyberciti.biz/faq/linux-traffic-shaping-using-tc-to-control-http-traffic/ * http://www.cyberciti.biz/faq/linux-traffic-shaping-using-tc-to-control-http-traffic/ * cbqinit : sourceforge.net/projects/cbqinit/ * fair sharing : http://www.metamorpher.de/fairnat/ * squid * http://www.faqs.org/docs/Linux-HOWTO/Bandwidth-Limiting-HOWTO.html * https://www.howtoforge.com/squid-delay-pools-bandwidth-management * mastershaper : http://www.mastershaper.org/index.php/Main_Page * installation : http://www.mastershaper.org/index.php/Howto_install_MasterShaper%22_on_a_100%25_fresh_installed_%22_debian_-_40r1_-_i386_-_CD_-_1%22 * packet shaping : http://gentoo-wiki.com/HOWTO_Packet_Shaping * Load balancing for multiple providers : * http://lstein.github.io/Net-ISP-Balance/ * Routing for multiple uplinks : http://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.multiple-links.html * http://www.linuxhorizon.ro/iproute2.html * http://unix.stackexchange.com/questions/87990/linux-as-router-with-multiple-internet-providers * http://www.diegolima.org/wordpress/?p=36 * http://ubuntuforums.org/showthread.php?t=1274241 * https://community.spiceworks.com/topic/1182827-dual-wan-gateway-snat-with-multiple-ip-addresses-on-a-wan-interface * Failover * http://indy-world.net/2013/11/how-to-load-balancing-failover-with-dual-multi-wan-adsl-cable-connections-on-linux/ * Linux Ethernet Bonding Configuration * http://www.cyberciti.biz/tips/debian-ubuntu-teaming-aggregating-multiple-network-connections.html * http://www.debianadmin.com/linux-ethernet-bonding-configuration.html#more-77 * Examples * http://www.cyberciti.biz/tips/linux-iptables-examples.html * http://www.thegeekstuff.com/2011/06/iptables-rules-examples * nmap * http://bencane.com/2013/02/25/10-nmap-commands-every-sysadmin-should-know/