Προς το περιεχόμενο

Application Firewall:συγκεκριμένα προγράμματα αποκτούν πρόσβάση σε συγκεκριμένα ports


jsmith6

Προτεινόμενες αναρτήσεις

Ρυθμίζοντας τα iptables επιτρέπω σε όλα τα προγράμματα να έχουν πρόσβαση σε συγκεκριμένα ports. Πως όμως μπορώ να επίλεξω ποιά προγράμματα θα έχουν πρόσβαση και σε ποιά ports;

 

Π.χ. ο Firefox μπορεί να έχει προσβαση στα ports 80, 53, και 443. To Gaim/Pidgin μόνο στο port 80, κτλ. Δηλαδη, πάνω-κάτω ότι κάνει το ZoneAlarm στα Windows.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Θα πρέπει να χρησιμοποιήσεις το Owner-Match module των iptables (συμπεριλαμβάνεται στον kernel με όνομα CONFIG_IP_NF_OWNER, το module ονομάζεται ipt_owner). Αυτό δίνει την δυνατότητα να κάνεις match πακέτα που στάλθηκαν από συγκεκριμένο user ή process μέσα από τα iptables. Για τη σύνταξη δες εδώ. Η επιλογή που σε ενδιαφέρει είναι η --cmd-owner. Δεν έχει ακριβώς το interface του zonealarm, αλλά σίγουρα περισσότερες δυνατότητες :)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Έχει κάνει πολύ καλύτερη δουλειά ο apoikos στον δικό του οδηγό από ότι θα μπορούσα να κάνω. Όποιος διαβάσει αυτά που εξηγεί πολύ κατανοητά αυτός ο οδηγός και έχει μια ιδέα για το πως δουλεύει το TCP/IP μπορεί να φτιάξει τα πάντα, μιας και όλα αυτά τα εξωτικά extensions υπάγονται την ίδια λογική (επιλέγω τα πακέτα με τα κριτήρια που παρέχει ένα συγκεκριμένο match και τα στέλνω σε έναν target ο οποίος τυπικά ορίζει τι θα απογίνουν).

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Έχει κάνει πολύ καλύτερη δουλειά ο apoikos στον δικό του οδηγό από ότι θα μπορούσα να κάνω. Όποιος διαβάσει αυτά που εξηγεί πολύ κατανοητά αυτός ο οδηγός και έχει μια ιδέα για το πως δουλεύει το TCP/IP μπορεί να φτιάξει τα πάντα, μιας και όλα αυτά τα εξωτικά extensions υπάγονται την ίδια λογική (επιλέγω τα πακέτα με τα κριτήρια που παρέχει ένα συγκεκριμένο match και τα στέλνω σε έναν target ο οποίος τυπικά ορίζει τι θα απογίνουν).

 

Εγώ έγραψα μαλακία. Στο iproute - iproute2 ήθελα να αναφερθώ. Είχες πει κάπου και για έλεγχο bandwith εφαρμογών μέσω iproute2 αλλά σε έχασα λίγο...

Το iproute με το iproute2 είναι ένα και το αυτό;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ναι, δεν υπάρχει iproute μόνο iproute2. Η αλήθεια είναι ότι το επίσημο howto του iproute2 αρκετά πρόχειρο και αφήνει πολλά πράγματα να εννοούνται.

 

Δεν τα ξέρω καλά τα εργαλειά του -ειδικά τις τεχνικές queing- οπότε θα μου πάρει χρόνο να τα βάλω σε μια σειρά για να τα εξηγήσω αλλά θα προσπαθήσω.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ευχαριστώ nske. Έχω δουλεία μπροστά μου. Όταν τελειώσω με αυτά που έχω να κάνω θα post-άρω το παλιό και το καινούριο firewall script να πάρω μια κριτική.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Έχω ένα μικρό πρόβλημα. Είμαι σε Ubuntu 6.10, πλήρως updated με stock kernel:

 

>Linux ubuntu 2.6.17-10-generic #2 SMP Tue Dec 5 22:28:26 UTC 2006 i686 GNU/Linux

 

Αφού γίνω root με sudo su ξεκινήσω το module ipt_owner με:

 

>modprobe ipt_owner

 

(και δίχως να λάβω error message κατά το load του module) δίνω την ακόλουθη γραμή, η οποία υποτίθεται πως θα μπλοκάρει όλες τις εξόδους του Firefox:

 

>iptables -A OUTPUT -m owner --cmd-owner firefox-bin -j DROP

 

και λαμβάνω αυτό το error:

 

>iptables: Unknown error 4294967295

 

Τι κάνω λάθος;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Τίποτα, απ' ότι φαίνεται δεν υποστηρίζεται πια. Στο kernel log πετάει το εξής μήνυμα:

>ipt_owner: pid, sid and command matching not supported anymore

 

άρα πια κάνει match μόνο τον owner :(

 

Θα ψάξω μήπως υπάρχει κάτι άλλο εκεί έξω.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν βλέπω να υπάρχει κάτι αντίστοιχο. Από ότι διαβάζω αυτές οι δυνατότητες του ipt_owner καταργήθηκαν γιατί δεν ήχαν ενσωματωθεί σωστά (ήταν εύκολο για μια εφαρμογή να τις ξεγελάσει) και δεν υπήρχε εύκολος τρόπος να ενσωματωθούν σωστά.

 

Αν θέλεις δες το snort που επιτρέπει την ανίχνευση ύποπτων patterns πακέτων ή του περιεχομένου τους και μπορεί να περάσει αυτόματα κανόνες στα iptables για την απόρριψη αυτών των πακέτων. Εδώ και εδώ διατίθενται set κανόνων που ανανεώνονται διαρκώς για να περιλαμβάνουν τα τελευταία malware που βρίσκονται κάθε μέρα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Είναι κρίμα να μην υπάρχει κάτι τόσο χρήσιμο. Ελπίζω πως κάτι άλλο θα το αντικαστήσει. Μήπως βλέπεις κάποιο υποσχόμενο project στον ορίζοντα;

 

Το Snort μου προκαλεί νευρικότητα και προτιμώ να μην ενδόσω. Τουλαχιστόν για τώρα που είμαι ακόμα αρχάριος. Έχω ακούσει για ένα πράγμα που λεγεται Mandatory Access Control. Δεν έχω κατανοήσει πλήρως τι ακριβώς κάνει, και δεν ξέρω ακόμα αν μπορεί να κάνει πράγματα στο networking. Ακούγεται και προχωριμένο για μένα. Θα πρέπει να το κοιτάξω.

 

Ευχαριστώ nske.

 

Μια ακόμα ερώτηση. Εφορμόμενος από το avatar που έχεις (τον χαριτωμένο BSD deamon :P), μήπως μπορείς να μου πεις αν υπάρχει αυτό που ψάχνω στα BSD (Free, Open, Net);

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μια ακόμα ερώτηση. Εφορμόμενος από το avatar που έχεις (τον χαριτωμένο BSD deamon :P), μήπως μπορείς να μου πεις αν υπάρχει αυτό που ψάχνω στα BSD (Free, Open, Net);
Όχι απ' όσο ξέρω (τουλάχιστον όχι μέσα από το firewall τους ή με κάποιον άλλον απλό τρόπο). Αν γίνεται μάλλον θα γίνεται μόνο στο FreeBSD μέσω του TrustedBSD.

 

Έχω ακούσει για ένα πράγμα που λεγεται Mandatory Access Control. Δεν έχω κατανοήσει πλήρως τι ακριβώς κάνει, και δεν ξέρω ακόμα αν μπορεί να κάνει πράγματα στο networking.

Ένα MAC system ορίζει σε ποιους πόρους του λειτουργικού θα έχει πρόσβαση μια εφαρμογή ή ένας χρήστης. Ένας από αυτούς τους πόρους είναι τα sockets, τα οποία είναι υπεύθυνα για την δικτυακή επικοινωνία. Από ότι βλέπω εδώ, το SELinux επιτρέπει αρκετά αναλυτικό έλεγχο στα sockets για τα κριτήρια που σε ενδιαφέρουν (διευθύνσεις και ports προορισμού ) και το ίδιο επιτρέπει και το GRsecurity μέσω των IP Access Control Lists, όμως δεν τα έχω δοκιμάσει. Πάντως το GRsecurity μου φαίνεται πιο κατανοητό και έχει και ένα εργαλείο, το Gradmin, για την αυτόματη παραμετροποίηση τον ACLs.

 

Ένα άρθρο που συνοψίζει τις δυνατότητες της κάθε τεχνολογίας.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 2 μήνες μετά...

γίνεται και στα *BSD:

 

- ipfw

gid group

Matches all TCP or UDP packets sent by or received for a group.

A group may be specified by name or number. This option should

be used only if debug.mpsafenet=0 to avoid possible deadlocks due

to layering violations in its implementation.

uid user

Match all TCP or UDP packets sent by or received for a user. A

user may be matched by name or identification number. This

option should be used only if debug.mpsafenet=0 to avoid possible

deadlocks due to layering violations in its implementation.

 

- pf

group <group>

Similar to user, this rule only applies to packets of sockets owned

by the specified group.

 

The use of group or user in debug.mpsafenet=1 environments may

result in a deadlock. Please see the BUGS section for details.

 

user <user>

This rule only applies to packets of sockets owned by the specified

user. For outgoing connections initiated from the firewall, this

is the user that opened the connection. For incoming connections

to the firewall itself, this is the user that listens on the desti-

nation port. For forwarded connections, where the firewall is not

a connection endpoint, the user and group are unknown.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

O jsmith6 όμως ήθελε να κάνει match το όνομα του process που άνοιξε το socket, όχι τον ιδιοκτήτη του process. Για να έχει εφαρμογή το user/group match, θα έπρεπε να ρυθμιστεί κάθε εφαρμογή που κάνει χρήση δικτύου να τρέχει με δικαιώματα διαφορετικού user/group, το οποίο είναι λίγο άβολο και ανορθόδοξο.

 

[EDIT:] Αν και τώρα που το ξανασκέφτομαι, ίσως δεν είναι τόσο ακραίο όσες εφαρμογές θέλουν πρόσβαση στο δίκτυο να έχουν setgid bit και το εκτελέσιμο τους να ανοίκει υποχρεωτικά σε συγκεκριμένο group. Μήπως έχει επιπλοκές στην πράξη; Δε μπορώ να σκεφτώ.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

O jsmith6 όμως ήθελε να κάνει match το όνομα του process που άνοιξε το socket, όχι τον ιδιοκτήτη του process.

 

Δεν απάντησα στον jsmith6, σε εσένα απάντησα, που είπες οτι δεν γίνεται με BSD, και σου έδωσα 2 διακριτούς τρόπους εφαρμόσιμους ανά τα 4 BSD (MACOSX inlcuded).

[EDIT:] Αν και τώρα που το ξανασκέφτομαι, ίσως δεν είναι τόσο ακραίο όσες εφαρμογές θέλουν πρόσβαση στο δίκτυο να έχουν setgid bit και το εκτελέσιμο τους να ανοίκει υποχρεωτικά σε συγκεκριμένο group. Μήπως έχει επιπλοκές στην πράξη; Δε μπορώ να σκεφτώ.

 

Προγανώς γίνεται, γι αυτό βγήκε.

 

Επιπλέον, στο FreeBSD/MACOSX υπάρχει και βάσει του JailID :

 

jail prisonID

Matches all TCP or UDP packets sent by or received for the jail

whos prison ID is prisonID.

 

Αυτά.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...