iptables

Antonis Christofides anthony at itia.ntua.gr
Tue Jan 31 15:36:39 EET 2012


Έχω ένα server Α που περιέχει ένα virtual server v. Ο v έχει IP
address 10.1.0.1, και είναι accessible επειδή ο A κάνει nat.
Αυτό το έχω φτιάξει και λειτουργεί, όπως και το port forwarding,
χρησιμοποιώντας το nat table. Τώρα θέλω να έχω και firewall, οπότε
πειράζω το filter table. Δεν είμαι σίγουρος όμως ότι καταλαβαίνω καλά
το από ποια tables/chains περνάει ένα πακέτο.

Χρησιμοποιώντας λοιπόν ως οδηγό τα σχήματα που έκλεψα απροκάλυπτα από
το
http://www.netfilter.org/documentation/HOWTO/netfilter-hacking-HOWTO-3.html:

A Packet Traversing the Netfilter System:

   --->[1]--->[ROUTE]--->[3]--->[4]--->
                 |            ^
                 |            |
                 |         [ROUTE]
                 v            |
                [2]          [5]
                 |            ^
                 |            |
                 v            |



   --->PRE------>[ROUTE]--->FWD---------->POST------>
       Conntrack    |       Mangle   ^    Mangle
       Mangle       |       Filter   |    NAT (Src)
       NAT (Dst)    |                |    Conntrack
       (QDisc)      |             [ROUTE]
                    v                |
                    IN Filter       OUT Conntrack
                    |  Conntrack     ^  Mangle
                    |  Mangle        |  NAT (Dst)
                    v                |  Filter

συμπεραίνω:

Έστω ότι μέσα απ' το v κάνω wget http://microsoft.com/. Ας αγνοήσουμε
το πώς έφυγε το εξερχόμενο πακέτο κι ας δούμε τι θα κάνει το
απαντητικό εισερχόμενο πακέτο όταν φτάνει στον Α.
  a) Πρώτα περνάει από το hook 1, και ακολουθούνται οι κανόνες που έχω
     ορίσει στο nat/PREROUTING, που το αφήνουν ως έχει.
  b) Στη συνέχεια o kernel αποφασίζει (επειδή έχω τις κατάλληλες
     ρυθμίσεις στο sysctl.conf) να κάνει forwarding, και αυτό είναι
     άσχετο με το τι λέει το nat table.
  c) Επομένως πάμε στο hook 3, οπότε ακολουθούνται οι κανόνες που έχω
     ορίσει στο filter/FORWARD. Αν φερ' ειπείν του έχω πει
       -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
     τότε θα περάσει.
  d) Μετά πάμε στο hook 4, POSTROUTING, και μετά πάει στον v.

Θέλω μόνο να μου πείτε αν τα έχω καταλάβει καλά.

Δηλαδή ένα chain είναι hooked σ' ένα hook; Το hook 5 είναι το OUTPUT,
και υπάρχει OUTPUT chain και στα τρία tables (mangle, filter, nat). Θα
περάσει λοιπόν κι απ' τα τρία tables το εξερχόμενο πακέτο; Τι νόημα
έχει αυτό; Αν έναν κανόνα που κανονικά θα έπρεπε να μπει στο
nat/OUTPUT τον βάλω αντ' αυτού στο filter/OUTPUT θα δουλέψει;

Κάτι αριθμοί που βγάνει το iptables-save τι είναι: Π.χ.
*nat
:PREROUTING ACCEPT [5:1222]
:POSTROUTING ACCEPT [6:371]
:OUTPUT ACCEPT [6:371]
-A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 192.168.1.65
COMMIT


More information about the Linux-greek-users mailing list