Εισαγωγή Netfilter / iptables ADOLF
Εισαγωγή Firewalls Γιατί τα χρειαζόμαστε; Έλεγχο της δικτυακής δραστηριότητας. Ασφάλεια από εξωτερικές (και εσωτερικές) απειλές. Παρακολούθηση ( με την καλή την έννοια ).
Εισαγωγή Δικτυακή δραστηριότητα Web browser TCP IP Ethernet
Εισαγωγή Δικτυακή δραστηριότητα Web browser Application level TCP Network protocol IP Ethernet link-level protocol
Εισαγωγή IP πακέτo Packet header (20 bytes) Version IHL Type of Service Total Length Identification Flags Fragment Offset Time To Live Protocol Header Checksum Source Address Destination Address
Εισαγωγή IP πακέτo TCP header (+20 bytes) Source Port Destination Port Sequence Number Acknowledgment Number Data offset Reserved Negotiation flags Window Checksum Urgent Pointer Packet body
Εισαγωγή Packet filtering Η λήψη της απόφασης: Αποδοχή (ACCEPT) Απόρριψη (DROP) Δύο κατηγορίες: Stateless Stateful
Εισαγωγή Linux Packet filtering 1994 ipfw, Alan Cox. Port από το BSD. Linux 1.1 199? ipfwadm, Jos Vos and others. Linux 2.0 1998 ipchains, Rusty Russell and Michael Neuling. Linux 2.2 1999 iptables, Rusty Russell. Linux 2.4+
http://www.netfilter.org/
Netfilter Κύρια χαρακτηριστικά stateless packet filtering (IPv4 και IPv6) stateful packet filtering (IPv4 και IPv6) όλα τα είδη network address και port translation, π.χ. NAT/NAPT (μόνο IPv4) ευέλικτη υποδομή πολλαπλά API layers για extensions μεγάλο πλήθος από plugins/modules
Netfilter Χρήσεις stateless και stateful packet filtering based firewalls. NAT και masquerading για διαμοιρασμό μίας σύνδεσης internet. εκτεταμμένες τροποποιήσεις στους headers των πακέτων (mangling).
Netfilter Netfilter Packet mangling framework kernel space. λειτουργεί εξωτερικά του BSD socket interface (INET).
Netfilter iptables iptables user space command line administration program. ip_tables / IP tables generic table structure για τον ορισμό των κανόνων. κάθε κανόνας εντός ενός IP table αποτελείται από ένα πλήθος στοιχείων ελέγχου (iptables matches)...... και την συνδεδεμένη με τον κανόνα δράση
Netfilter Τρόπος λειτουργίας Κάθε πρωτόκολλο ορίζει hook functions. Κομμάτια του πυρήνα κάνουν register σε αυτά τα hooks. NF_DROP NF_ACCEPT NF_STOLEN NF_REPEAT NF_QUEUE Queued packets -> Userspace (ip_queue)
Netfilter IPv4 & IPv6 hooks 1 Route 3 4 Route 2 5 1: NF_IP_PRE_ROUTING 4: NF_IP_POST_ROUTING 2: NF_IP_LOCAL_IN 5: NF_IP_LOCAL_OUT 3: NF_IP_FORWARD
Netfilter Packet Selection: IP tables Κάθε kernel module κάνει register ένα νέο IP table στο iptables framework, μαζί με τα hooks στα οποία θα γίνεται traverse. Κάνει register στα hooks του Netfilter. Το Netfilter αναλαμβάνει να περάσει τα πακέτα από τα hook. To module πρέπει να καλέσει το iptables. To iptables καλεί τα callback functions για κάθε match του κανόνα.
Netfilter Packet filtering: filter 1 Route 3 4 Route 2 5 1: NF_IP_PRE_ROUTING 4: NF_IP_POST_ROUTING 2: NF_IP_LOCAL_IN 5: NF_IP_LOCAL_OUT 3: NF_IP_FORWARD
Netfilter NAT: nat 1 Route 3 4 Route 2 5 1: NF_IP_PRE_ROUTING 4: NF_IP_POST_ROUTING 2: NF_IP_LOCAL_IN 5: NF_IP_LOCAL_OUT 3: NF_IP_FORWARD
Netfilter Packet mangling: mangle 1 Route 3 4 Route 2 5 1: NF_IP_PRE_ROUTING 4: NF_IP_POST_ROUTING 2: NF_IP_LOCAL_IN 5: NF_IP_LOCAL_OUT 3: NF_IP_FORWARD
Netfilter Userspace IP tables management: Shared library: libiptc. iptables command line utility. IP tables userspace handling: Shared library: libnetfilter_queue. Αντικαθιστά το pre-2.6.14 ip_queue/libipq
Netfilter Παράδειγμα static struct nf_hook_ops hook_in; /* prototype is found inside <linux/netfilter> */ unsigned int my_hook(unsigned int hooknum, struct... { return NF_DROP; } int init_module() { hook_in.hook = my_hook; hook_in.pf = PF_INET; hook_in.hooknum = NF_IP_PRE_ROUTING; hook_in.priority = NF_IP_PRI_FIRST; nf_register_hook(&hook_in); return 0; } void cleanup() { nf_unregister_hook(&hook_in); }
A Desktop Oriented Linux Firewall http://rainbow.cs.unipi.gr/projects/adolf
ADOLF Το Concept Προσωπικοί υπολογιστές με Linux. Οι απαιτήσεις και τα interfaces αλλάζουν συνέχεια. Αλλάζει και η άποψη του χρήστη. Ο χρήστης, και διαχειριστής του προσωπικού υπολογιστή, είναι σχεδόν πάντα παρών κατά την διάρκεια θεμιτής δικτυακής δραστηριότητας. Ο απλός χρήστης δεν θέλει να ξέρει τί σημαίνει iptables, match, target, userspace, terminal, configuration GUI wrapper, vi, /etc/init.d/foo κ.α. Ο απλός χρήστης, δεν θα κάτσει να μάθει: Θα
ADOLF Η αποστολή Παροχή φιλικού περιβάλλοντος. Λήψη των αποφάσεων (ετυμηγοριών) σε: Πραγματικό χρόνο Στην επιφάνεια εργασίας (desktop) Διαχείριση κανόνων. Μή διάσπαση της πολιτικής ασφαλείας ενός Linux συστήματος.
ADOLF Screenshots
ADOLF Screenshots
ADOLF Κύρια χαρακτηριστικά Realtime ενημέρωση, καταγραφή και εφαρμογή ετυμηγορίας. Roaming κανονές. Δημιουργία κανόνων αναλόγως του UID του local process. Δημιουργία κανόνων αναλόγως του ονόματος του local process. (!) Connection tracking aware για TCP και UDP.
ADOLF Αντενδείξεις Unattended συστήματα, servers. Heavy load systems (π.χ. peer-to-peer traffic) Realtime συστήματα (π.χ. αγοραπωλησία μετοχών) Συστήματα χωρίς γραφικό περιβάλλον. Window managers χωρίς system tray. Δεν υποστηρίζει IPv6 δίκτυα. Δεν υποστηρίζει UPNP.
ADOLF Αρχιτεκτονική Kernel module Daemon Client applications Command line utilities Desktop applet
ADOLF Αρχιτεκτονική Υπομονάδα πυρήνα Κατάσταση λειτουργίας πυρήνα Κατάσταση λειτουργίας χρήστη Ειδικό αρχείο χαρακτήρων /dev/firewall Δαίμονας Υποδοχή UNIX Πελάτης Πελάτης Πελάτης Πελάτης
ADOLF Kernel module Κάνει register στο Netfilter στα: NF_FORWARD NF_LOCAL_IN NF_LOCAL_OUT Γίνεται ένα misc device root privileged char device /dev/firewall. Επικοινωνία μέσω ioctl, read, write. Δρά σαν διαρροή των πληροφοριών στο userspace. Εφαρμόζει τις υπαγορευόμενες ετυμηγορίες. Μεταφέρει το επίπεδο θεώρησης, από το
ADOLF Daemon Γίνεται attach στο char device. Εμπλουτίζει το περιστατικό με πληροφορίες: ρόλοι των source και destination hosts. πληροφορίες για το local process (UID, command). DNS resolving / netdb. Ελέγχει έναντι των ενεργών κανόνων. Είτε εξάγει ετυμηγορία είτε όχι, κοινοποιεί το περιστατικό στις διεργασίες πελάτες του.
ADOLF Daemon Επικοινωνεί με τους clients μέσω UNIX socket. Thread-safe υλοποίηση. (7 threads + 2/client) Υποστηρίζει σύγχρονη και ασύγχρονη επικοινωνία με τους clients. Η επικοινωνία γίνεται μέσω API που παρέχεται. (C/C++)
ADOLF Command line utilities Παρέχονται για πληρότητα. Βασίζονται στο παρεχόμενο API. Μπορούν να χρησιμοποιηθούν στα πλαίσια ενός shell script: #!/bin/sh firewallstatus if [ $? eq 1 ]; then firewallenable firewallstatus fi
ADOLF Desktop application Γραμμένο με Qt4. Χρησιμοποιεί το C++ παρεχόμενο API. Τοποθετείται στο system tray. Παρέχει interface για παρακολούθηση της δραστηριότητας, για διαχείριση των κανόνων, αποθήκευση εναλλακτικών νομοσχεδίων σε εξωτερικά αρχεία. Παρέχει περιγραφή των κανόνων σε φυσική γλώσσα.
ADOLF Context menu
ADOLF Control Panel (Wizard)
ADOLF
ADOLF Counters
ADOLF Identified roles
ADOLF Future work Ο δαίμονας δεν προστατεύεται από clients με κακή συμπεριφορά. Να καθαριστεί ο κώδικας. Να γραφεί documentation στα Αγγλικά. Το API να γίνει shared library. Να γίνει port το kernel module στο libnetfilter_queue ώστε να εκτιμηθεί εάν είναι καλύτερο από το libipq. Να υποστηριχθεί και dbus για την επικοινωνία του δαίμονα με τους πελάτες. Να εμπλουτιστεί το art του desktop application. Agents για τα time constants. IPv6. Hotplug shell scripts.
ADOLF Credits Toν Σεπτέμβριο του 2005, ο υποψήφιος διδάκτωρ Αντώνης Πετρόπουλος πρότεινε το θέμα σαν πτυχιακή εργασία στον καθηγητή του Παν. Πειραιώς Χρήστο Δουληγέρη. Την εργασία ανέλαβαν οι φοιτητές Δημόπουλος Διονύσιος και Δημοπούλου Μαριάνα υπό την απο κοινού επίβλεψή τους. Μετά από πολλά κύματα, η εργασία περαττώθηκε τον Οκτώβριο του 2007. Σήμερα συνεχίζει υπό το όνομα ADOLF, σαν open source project, συμμορφωμένο των ιδεωδών του φίλου μας Αντώνη.