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

Ερωτήσεις για Iptables


petera

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

Θα ήθελα να σας ρωτήσω κάτι σχετικά με τα iptables.

 

Είναι γνωστό πως όταν φτιάχνουμε τα rules στο firewall πρέπει να έχουνε rules όσο για τι incoming traffic όσο και για το outgoing.

Ώμος σχεδόν όλα τα καινούρια firewalls όπως π.χ του Solaris το ipf ή αυτό της Cisco που χρησιμοποιεί στα router της είναι statefull (όπως άλλωστε και το iptables).

Στα statefull firewalls δεν είναι απαραίτητο ναι φτιάχνεις ένα rule και για τις δυο κατευθύνσεις, δηλαδή αν αφήνεις π.χ το http στο out, όταν έρχεται το traffic για την 80 φτιάχνει αυτόματα rule στο incoming, στο οποίο όπως λέει κρατάει το state.

Το πρόβλημα μου είναι όταν δεν μπορώ να καταλάβω πως ενεργοποιείτε αυτή η λειτουργία στα iptables. Δουλεύω περισσότερο Solaris και εκεί ξερώ πως ακριβός δουλεύει ο firewall . Το iptables το έχω ρυθμίσει στα πάντα εκτός από αυτό και δεν θέλω να φτιάχνω 70 rules για το incoming traffic. Αν ξέρει κάποιος ας βοηθήσει. Έχω FC7 με iptables 1.3.7.

 

 

Ευχαριστώ πολύ

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

Το stateful firewalling στο Linux γίνεται μέσω του connection tracking module και του state match και ενεργοποιείται ως εξής:

>
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Αντίστοιχα μπορείς να το κάνεις και για τη FORWARD και την OUTPUT chain. Από κει και πέρα ορίζεις κανονικά στο firewall ποιες συνδέσεις θα είναι αυτές που επιτρέπεις να δημιουργούνται και άπαξ και αυτές δημιουργηθούν, το firewall θα τις αφήνει να λειτουργήσουν κανονικά. Είναι πολύ σημαντικό ο κανόνας του stateful matching να είναι πάνω-πάνω στην εκάστοτε αλυσίδα.

 

Τέλος, υπάρχουν και βοηθητικά modules για το connection tracking «μυστήριων» πρωτοκόλλων (π.χ. FTP, SCTP κλπ). Από αυτά μάλλον θα χρειαστείς το ip_conntrack_ftp, το οποίο και φορτώνεις με modprobe.

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

Δεν ξερώ γιατί αλλά δεν μου φορτώνει το ip_conntrack, αντί αυτού έχω το nf_conntrack. Όταν κάνω δε “cat /proc/net/nf_conntrack” βλέπω τα connections που έχουνε γίνει.. Το iptstate δεν μου δείχνει τίποτα.

 

Έβαλα την εντολή iptables -Ι FORWARD 1 -m state --state ESTABLISHED, RELATED -j ACCEPT αλλά δεν βοήθησε.

Με το που βάζω iptables -P FORWARD DROP όλο to incoming traffic κόβετε. Λογικά δεν θα έπρεπε λόγω του πρώτου rule στο forward chain που επιτρέπει το ESTABLISHED traffic να περνάει.

 

Παρακάτω σάς παραθέτω το configuration.

 

Chain FORWARD (policy ACCEPT)

num target prot opt source destination

1 ACCEPT 0 -- anywhere anywhere state RELATED,ESTABLISHED

2 bad_tcp_packets tcp -- anywhere anywhere

3 Internet_Out 0 -- anywhere anywhere

 

Chain OUTPUT (policy ACCEPT)

num target prot opt source destination

 

Chain Allowed (5 references)

num target prot opt source destination

1 ACCEPT tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN

2 ACCEPT tcp -- anywhere anywhere state RELATED,ESTABLISHED

3 DROP tcp -- anywhere anywhere

 

Chain Internet_Out (1 references)

num target prot opt source destination

1 Allowed tcp -- domain-controller.genet.gr anywhere tcp dpt:pop3

2 Allowed udp -- domain-controller.genet.gr anywhere udp dpt:domain

3 Allowed tcp -- domain-controller.genet.gr anywhere tcp dpt:smtp

4 DROP 0 -- domain-controller.genet.gr anywhere

5 Allowed udp -- eth0-ns1.genet.gr anywhere udp dpt:domain

6 Allowed tcp -- 10.0.0.0/24 anywhere multiport dports http,webcache,https,ftp-data,ftp,ssh,pop3,smtp,msnp

 

Chain bad_tcp_packets (1 references)

num target prot opt source destination

1 REJECT tcp -- anywhere anywhere tcp flags:SYN,ACK/SYN,ACK state NEW reject-with tcp-reset

2 LOG tcp -- anywhere anywhere tcp flags:!FIN,SYN,RST,ACK/SYN state NEW LOG level warning prefix `New not syn:'

3 DROP tcp -- anywhere anywhere tcp flags:!FIN,SYN,RST,ACK/SYN state NEW

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

  • 3 εβδομάδες αργότερα...

Έχω ανοίξει 2 πόρτες για το Azureus μια udp και μια tcp.

Θέλω να έχω λίγες πόρτες ανοιχτές και σκέφτομαι να έχω μια πόρτα και για τα 2 πρωτόκολλα για το azureus μόνο, είναι σωστό αυτό;

ευχαριστώ

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

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

Προσπαθώ να ορίσω κάποιους κανόνες και η iptables επιστρέφει Invalid argument:

 

>
#iptables -v -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT
ACCEPT  all opt -- in * out *  0.0.0.0/0  -> 0.0.0.0/0  state ESTABLISHED
iptables: Invalid argument

 

Στο netfilter/iptables FAQ αναφέρει πως κάτι τέτοιο γίνεται

http://www.netfilter.org/documentation/FAQ/netfilter-faq.html#toc3.20

 

όταν το μέγεθος δομής (structure size) ανάμεσα στον πυρήνα και στο userspace αλλάζει, δηλαδή, συνεχίζει, όταν έχουν περαστεί κάποια patches στον κώδικα του πυρήνα. Εγώ έχω 2.6.25 τον οποίο έχω κάνει compile μόνος μου. Παρ' όλα αυτά έκανα compile μόνος μου και το iptables αλλά το πρόβλημα συνεχίζει και μετά την εγκατάσταση του δικού μου πακέτου iptables. Οι δυνατότητες netfilter του πυρήνα έχουν γίνει compiled in και όχι σαν modules.

 

Τι μπορεί να συμβαίνει;

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

Το CONFIG_NETFILTER_XT_MATCH_STATE συγκεκριμένα από το configuration του πυρήνα είναι compiled in (=y);

 

Χρησιμοποιούσες το state match και πριν και το πρόβλημα εμφανίστηκε ξαφνικά μετά από κάτι ή τώρα το πρωτοχρησιμοποίησες;

 

ΥΣ. Γιατί βγήκε από Sticky ο οδηγός χωρίς να υπάρχει στο WiKi; Είναι κρίμα να μην υπάρχει πρόχειρος κάπου!

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

Τι να πω, σε vanilla kernel 2.6.25.3 με netfilter-layer7-v2.18 patch και το εξής σχετικό configuration (grep -i 'ip_nf\|netfilter' ):

>CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
CONFIG_NETFILTER_ADVANCED=y
# Core Netfilter Configuration
CONFIG_NETFILTER_NETLINK=m
# CONFIG_NETFILTER_NETLINK_QUEUE is not set
# CONFIG_NETFILTER_NETLINK_LOG is not set
CONFIG_NETFILTER_XTABLES=m
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
CONFIG_NETFILTER_XT_TARGET_MARK=m
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
CONFIG_NETFILTER_XT_TARGET_RATEEST=m
CONFIG_NETFILTER_XT_TARGET_TRACE=m
CONFIG_NETFILTER_XT_TARGET_SECMARK=m
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
CONFIG_NETFILTER_XT_MATCH_DCCP=m
CONFIG_NETFILTER_XT_MATCH_DSCP=m
CONFIG_NETFILTER_XT_MATCH_ESP=m
CONFIG_NETFILTER_XT_MATCH_HELPER=m
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
CONFIG_NETFILTER_XT_MATCH_MAC=m
CONFIG_NETFILTER_XT_MATCH_MARK=m
CONFIG_NETFILTER_XT_MATCH_OWNER=m
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
CONFIG_NETFILTER_XT_MATCH_REALM=m
CONFIG_NETFILTER_XT_MATCH_SCTP=m
CONFIG_NETFILTER_XT_MATCH_STATE=m
CONFIG_NETFILTER_XT_MATCH_LAYER7=m
# CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG is not set
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
CONFIG_NETFILTER_XT_MATCH_STRING=m
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
CONFIG_NETFILTER_XT_MATCH_TIME=m
CONFIG_NETFILTER_XT_MATCH_U32=m
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_MATCH_RECENT=m
CONFIG_IP_NF_MATCH_ECN=m
CONFIG_IP_NF_MATCH_AH=m
CONFIG_IP_NF_MATCH_TTL=m
CONFIG_IP_NF_MATCH_ADDRTYPE=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_TARGET_LOG=m
CONFIG_IP_NF_TARGET_ULOG=m
CONFIG_IP_NF_TARGET_MASQUERADE=m
CONFIG_IP_NF_TARGET_REDIRECT=m
CONFIG_IP_NF_TARGET_NETMAP=m
CONFIG_IP_NF_MANGLE=m
CONFIG_IP_NF_TARGET_ECN=m
CONFIG_IP_NF_TARGET_TTL=m
CONFIG_IP_NF_TARGET_CLUSTERIP=m
CONFIG_IP_NF_RAW=m
CONFIG_IP_NF_ARPTABLES=m
CONFIG_IP_NF_ARPFILTER=m
CONFIG_IP_NF_ARP_MANGLE=m

 

δουλεύει κανονικά, φορτώνοντας αυτόματα τα απαραίτητα modules. To iptables είναι precompiled από πακέτο και δεν έχει γίνει update καθόλου πρόσφατα -άρα δεν πιστεύω να φταίει αυτό-.

 

Μήπως αν κάνεις compile με CONFIG_NETFILTER_DEBUG τυπώσει κάτι πιο συγκεκριμένο στο kernel log;

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

Στο /var/log/messages.log εμφανίζει αυτό:

>
can't load conntrack support for proto=2

Θα κοιτάξω πάλι προσεκτικά τις επιλογές στο configuration του πυρήνα και βλέπουμε. Μάλλον κάτι έχω αφήσει απ' έξω

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

Κατά 99% είναι αυτό που λέει ο nske: έχεις ξεχάσει το connection tracking support.

 

Όσο για το sticky, νόμιζα ότι το είχα μεταφέρει στο wiki, αλλά μάλλον έκανα λάθος ;-)

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

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

Εχμ... μια βοήθεια μέχρι να πάρω μπρος με τα iptables;

 

Πώς θα πω με iptables να χρησιμοποιεί

την eth0 όταν θέλει να στείλει στους clients01 ως 03,

την eth1 όταν θέλει να στείλει στους clients04 ως 06,

την eth2 όταν θέλει να στείλει στους clients07 ως 09;

 

eth0 = 10.160.31.10, clients 01 ως 03 = 10.160.31.101-103

eth1 = 10.160.31.11, clients 04 ως 06 = 10.160.31.104-106

eth2 = 10.160.31.12, clients 07 ως 09 = 10.160.31.107-109

 

(reading & trying στο μεταξύ, αλλά άμα κάποιος με γλυτώσει από αυτόν τον μπελά, κερνάω ηλεκτρονική μπυρίτσα!) :D

 

 

edit:

Λοιπόν, δεν βρήκα πώς μπορεί να γίνει με iptables, αλλά βρήκα πώς γίνεται με τη route, οπότε βολεύτηκα μια χαρά:

>
route add -net 10.160.31.104 netmask 255.255.255.254 dev eth1

...και μερικές ακόμα τέτοιες route ώστε να καλυφθεί όλο το εύρος.

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

Τα iptables κανονικά δεν ασχολούνται με τα περί δρομολόγησης (υπάρχει ένα patch που προσθέτει route target, αλλά δε ξέρω αν το κάνει σωστά).

 

Κανονικά η επιλογή για τη δρομολόγηση γίνεται αποκλειστικά με βάση τα routing tables, στα οποία η iptables δεν επεμβαίνει. Το βασικό table είναι αυτό που πείραξες με την route, αν χρειαστείς μεγαλύτερο έλεγχο μπορείς να χρησιμοποιήσεις την iproute2 (δες εδώ).

 

alkisg, να βάλεις κάθετο το πιάνει; Π.χ.

 

route add -net 10.160.31.104/106 netmask 255.255.255.254 dev eth1

 

Απ' ό,τι θυμάμαι με κάθετο μπορείς να δηλώσεις το subnet mask σε bits. Π.χ. /31 αντί για netmask 255.255.255.254.

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

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

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

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