macabre_sunsets Δημοσ. 22 Αυγούστου 2013 Share Δημοσ. 22 Αυγούστου 2013 Έχω φτιάξει ένα firewall με IPTables αλλά αντιμετωπίζω ένα πρόβλημα με τον FTP Server (proFTPd). Μπορώ να κάνω login αλλά δεν μπορώ να λάβω τη δομή των φακέλων (directory listing), με αποτέλεσμα να αποσυνδέομαι λόγω time out. Εάν "ρίξω" το firewall, δεν αντιμετωπίζω το παραπάνω πρόβλημα. Στον proFTPd έχω ορίσει "PassivePorts 60000 61500". Το firewall είναι το ακόλουθο: #!/bin/sh ### BEGIN INIT INFO # Provides: firewall # Required-Start: $local_fs $remote_fs # Required-Stop: $local_fs $remote_fs # Should-Start: $network # Should-Stop: $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Custom firewall. # Description: Starts the custom firewall. ### END INIT INFO case "$1" in start) echo "Enabling firewall..." echo 0 > /proc/sys/net/netfilter/nf_conntrack_helper iptables -F iptables -X iptables -Z iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT iptables -A FORWARD -i lo -o lo -j ACCEPT iptables -t mangle -F iptables -t mangle -X iptables -t mangle -Z iptables -t nat -F iptables -t nat -X iptables -t nat -Z ip6tables -F ip6tables -X ip6tables -Z ip6tables -P INPUT DROP ip6tables -P OUTPUT DROP ip6tables -P FORWARD DROP ip6tables -A INPUT -i lo -j ACCEPT ip6tables -A OUTPUT -o lo -j ACCEPT ip6tables -A FORWARD -i lo -o lo -j ACCEPT ip6tables -t mangle -F ip6tables -t mangle -X ip6tables -t mangle -Z ip6tables -t nat -F ip6tables -t nat -X ip6tables -t nat -Z # SSH Incoming Rules iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT ip6tables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT ip6tables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT # FTP Incoming Rules # Port 20 iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT ip6tables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT ip6tables -A OUTPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT # Port 21 iptables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT ip6tables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT ip6tables -A OUTPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT # Passive ports iptables -A INPUT -m tcp -p tcp --sport 60000:61500 --dport 60000:61500 -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -m tcp -p tcp --sport 60000:61500 --dport 60000:61500 -m state --state ESTABLISHED -j ACCEPT ip6tables -A INPUT -m tcp -p tcp --sport 60000:61500 --dport 60000:61500 -m state --state ESTABLISHED -j ACCEPT ip6tables -A OUTPUT -m tcp -p tcp --sport 60000:61500 --dport 60000:61500 -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -j DROP iptables -A OUTPUT -j DROP iptables -A FORWARD -j DROP ip6tables -A INPUT -j DROP ip6tables -A OUTPUT -j DROP ip6tables -A FORWARD -j DROP echo "Firewall enabled" ;; clear) echo "Clearing firewall..." iptables -F iptables -X iptables -Z iptables -t mangle -F iptables -t mangle -X iptables -t mangle -Z iptables -t nat -F iptables -t nat -X iptables -t nat -Z iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT ip6tables -F ip6tables -X ip6tables -Z ip6tables -t mangle -F ip6tables -t mangle -X ip6tables -t mangle -Z ip6tables -t nat -F ip6tables -t nat -X ip6tables -t nat -Z ip6tables -P INPUT ACCEPT ip6tables -P FORWARD ACCEPT ip6tables -P OUTPUT ACCEPT echo "Firewall cleared" ;; stop) echo "Firewall cannot be stopped." ;; *) echo "Usage: /etc/init.d/firewall {start|stop|clear}" exit 1 ;; esac exit 0 To "echo 0 > /proc/sys/net/netfilter/nf_conntrack_helper" το έχω βάλει για να μην εμφανίζεται το μήνυμα: "nf_conntrack: automatic helper assignment is deprecated and it will be removed soon. Use the iptables CT target to attach helpers instead." Αρκετοί προτείνουν το "modprobe ip_conntrack_ftp" σαν λύση για το πρόβλημα που αντιμετωπίζω, αλλά δυστυχώς όταν το δοκιμάζω επιστρέφει το ακόλουθο σφάλμα: "libkmod: ERROR ../libkmod/libkmod.c:505 kmod_lookup_alias_from_builtin_file: could not open builtin file '/lib/modules/3.9.3-x86_64/modules.builtin.bin'" Λειτουργικό: Debian 7 amd64 σε VPS (XEN), kernel 3.9.3-x86_64 Κάποια ιδέα για το πώς μπορεί να "παίξει" το firewall; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
imitheos Δημοσ. 22 Αυγούστου 2013 Share Δημοσ. 22 Αυγούστου 2013 Αρκετοί προτείνουν το "modprobe ip_conntrack_ftp" σαν λύση για το πρόβλημα που αντιμετωπίζω, αλλά δυστυχώς όταν το δοκιμάζω επιστρέφει το ακόλουθο σφάλμα: "libkmod: ERROR ../libkmod/libkmod.c:505 kmod_lookup_alias_from_builtin_file: could not open builtin file '/lib/modules/3.9.3-x86_64/modules.builtin.bin'" Με τον παλιό κλασικό τρόπο όντως χρειάζεσαι το ip_conntrack_ftp όπως σου πρότειναν. Ανάλογα το setup σου ίσως χρειάζεσαι και το ip_nat_ftp. Έχε υπόψιν ότι από μία έκδοση του πυρήνα και μετά, αυτά μετονομάστηκαν σε nf από ip και ίσως για αυτό να μη σου παίζει. Επίσης για να ελέγχεται το payload και να αναγνωρίζεται σωστά η "related" σύνδεση, πρέπει στο nf_conntrack_ftp να δηλωθεί ποια πόρτα χρησιμοποιείται. Εσύ δεν χρειάζεται να το κάνεις αυτό όμως επειδή χρησιμοποιείς την default 21. Δηλαδή δοκίμασε να τρέξεις "modprode nf_nat_ftp" και δες μετά αν παίζει η σύνδεση. iptables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT Το state είναι deprecated εδώ και καιρό και στη θέση του προτείνεται η χρήση του conntrack. Όχι ότι θα κερδίσεις κάτι αλλά αφού τώρα έχεις κάνει το firewall μπορείς να το κάνεις "-m conntrack --ctstate" με τα άλλα να είναι ίδια. To "echo 0 > /proc/sys/net/netfilter/nf_conntrack_helper" το έχω βάλει για να μην εμφανίζεται το μήνυμα: "nf_conntrack: automatic helper assignment is deprecated and it will be removed soon. Use the iptables CT target to attach helpers instead." Μπορεί μεν θέτοντας το 0 να σωπαίνει το warning αλλά δεν παύει να ισχύει αυτό που λέει ότι κάποια στιγμή θα αφαιρεθεί και δεν θα παίζει. Τον CT μπορείς να τον χρησιμοποιήσεις ως εξής: Εισερχόμενα iptables -t raw -A PREROUTING -p tcp --dport 21 -j CT --helper ftp Εξερχόμενα iptables -t raw -A OUTPUT -p tcp --dport 21 -j CT --helper ftp 1 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
macabre_sunsets Δημοσ. 22 Αυγούστου 2013 Μέλος Share Δημοσ. 22 Αυγούστου 2013 Το "νέο" firewall (δυστυχώς εξακολουθεί να μην παίζει): #!/bin/sh ### BEGIN INIT INFO # Provides: firewall # Required-Start: $local_fs $remote_fs # Required-Stop: $local_fs $remote_fs # Should-Start: $network # Should-Stop: $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Custom firewall. # Description: Starts the custom firewall. ### END INIT INFO case "$1" in start) echo "Enabling firewall..." #echo 0 > /proc/sys/net/netfilter/nf_conntrack_helper iptables -F iptables -X iptables -Z iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT iptables -A FORWARD -i lo -o lo -j ACCEPT iptables -t mangle -F iptables -t mangle -X iptables -t mangle -Z iptables -t nat -F iptables -t nat -X iptables -t nat -Z iptables -t raw -A PREROUTING -p tcp --dport 21 -j CT --helper ftp iptables -t raw -A OUTPUT -p tcp --dport 21 -j CT --helper ftp ip6tables -F ip6tables -X ip6tables -Z ip6tables -P INPUT DROP ip6tables -P OUTPUT DROP ip6tables -P FORWARD DROP ip6tables -A INPUT -i lo -j ACCEPT ip6tables -A OUTPUT -o lo -j ACCEPT ip6tables -A FORWARD -i lo -o lo -j ACCEPT ip6tables -t mangle -F ip6tables -t mangle -X ip6tables -t mangle -Z ip6tables -t nat -F ip6tables -t nat -X ip6tables -t nat -Z ip6tables -t raw -A PREROUTING -p tcp --dport 21 -j CT --helper ftp ip6tables -t raw -A OUTPUT -p tcp --dport 21 -j CT --helper ftp # SSH Incoming Rules iptables -A INPUT -p tcp --dport 22 -m conntrack --cstate NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 22 -m conntrack --cstate ESTABLISHED -j ACCEPT ip6tables -A INPUT -p tcp --dport 22 -m conntrack --cstate NEW,ESTABLISHED -j ACCEPT ip6tables -A OUTPUT -p tcp --sport 22 -m conntrack --cstate ESTABLISHED -j ACCEPT # FTP Incoming Rules # Port 20 iptables -A INPUT -p tcp --dport 20 -m conntrack --cstate NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 20 -m conntrack --cstate ESTABLISHED -j ACCEPT ip6tables -A INPUT -p tcp --dport 20 -m conntrack --cstate NEW,ESTABLISHED -j ACCEPT ip6tables -A OUTPUT -p tcp --sport 20 -m conntrack --cstate ESTABLISHED -j ACCEPT # Port 21 iptables -A INPUT -p tcp --dport 21 -m conntrack --cstate NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 21 -m conntrack --cstate ESTABLISHED -j ACCEPT ip6tables -A INPUT -p tcp --dport 21 -m conntrack --cstate NEW,ESTABLISHED -j ACCEPT ip6tables -A OUTPUT -p tcp --sport 21 -m conntrack --cstate ESTABLISHED -j ACCEPT # Passive ports iptables -A INPUT -m tcp -p tcp --sport 60000:61500 --dport 60000:61500 -m conntrack --cstate ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m tcp -p tcp --sport 60000:61500 --dport 60000:61500 -m conntrack --cstate ESTABLISHED -j ACCEPT ip6tables -A INPUT -m tcp -p tcp --sport 60000:61500 --dport 60000:61500 -m conntrack --cstate ESTABLISHED,RELATED -j ACCEPT ip6tables -A OUTPUT -m tcp -p tcp --sport 60000:61500 --dport 60000:61500 -m conntrack --cstate ESTABLISHED -j ACCEPT iptables -A INPUT -j DROP iptables -A OUTPUT -j DROP iptables -A FORWARD -j DROP ip6tables -A INPUT -j DROP ip6tables -A OUTPUT -j DROP ip6tables -A FORWARD -j DROP echo "Firewall enabled" ;; clear) echo "Clearing firewall..." iptables -F iptables -X iptables -Z iptables -t mangle -F iptables -t mangle -X iptables -t mangle -Z iptables -t nat -F iptables -t nat -X iptables -t nat -Z iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT ip6tables -F ip6tables -X ip6tables -Z ip6tables -t mangle -F ip6tables -t mangle -X ip6tables -t mangle -Z ip6tables -t nat -F ip6tables -t nat -X ip6tables -t nat -Z ip6tables -P INPUT ACCEPT ip6tables -P FORWARD ACCEPT ip6tables -P OUTPUT ACCEPT echo "Firewall cleared" ;; stop) echo "Firewall cannot be stopped." ;; *) echo "Usage: /etc/init.d/firewall {start|stop|clear}" exit 1 ;; esac exit 0 Εχει σημασία σε ποιο σημείο θα μπουν οι κανόνες για το CT που παρέθεσες; Επικοινώνησα με τον πάροχο του VPS και μου είπε πως τα module έχουν γίνει compile στον kernel, για αυτό και το modprobe επιστρέφει το σφάλμα που ανέφερα παραπάνω. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
mad-proffessor Δημοσ. 22 Αυγούστου 2013 Share Δημοσ. 22 Αυγούστου 2013 Είναι σωστά όσα λέει ο imitheos αλλα εγω δε καταλαβαίνω ποιος ο λόγος να χρησιμοποιειται τη σήμερον ημέρα ftp (πέρα απο τα κενά ασφαλείας που έχει το πρωτοκολλο ανοίγει 2 συνδέσεις μια για τη σύνδεση κ μια για τα δεδομένα που μεταφέρονται). Copy μεσω ssh και ούτε μπελάς να στήνεις ftp ούτε τίποτα. 1 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
macabre_sunsets Δημοσ. 22 Αυγούστου 2013 Μέλος Share Δημοσ. 22 Αυγούστου 2013 Δυστυχώς, στην προκειμένη περίπτωση χρειάζεται ο FTP. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
imitheos Δημοσ. 22 Αυγούστου 2013 Share Δημοσ. 22 Αυγούστου 2013 Το "νέο" firewall (δυστυχώς εξακολουθεί να μην παίζει): # FTP Incoming Rules # Port 20 iptables -A INPUT -p tcp --dport 20 -m conntrack --cstate NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 20 -m conntrack --cstate ESTABLISHED -j ACCEPT # Port 21 iptables -A INPUT -p tcp --dport 21 -m conntrack --cstate NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 21 -m conntrack --cstate ESTABLISHED -j ACCEPT # Passive ports iptables -A INPUT -m tcp -p tcp --sport 60000:61500 --dport 60000:61500 -m conntrack --cstate ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m tcp -p tcp --sport 60000:61500 --dport 60000:61500 -m conntrack --cstate ESTABLISHED -j ACCEPT Οι κανόνες για την 20 και για 60000+ δεν βλέπω γιατί σου χρειάζονται μια και τις αναλαμβάνει το κομμάτι του related αλλά άσε τις για την ώρα μέχρι να το κάνεις να παίζει. Όταν τρέχεις το script δεν παίρνεις κανένα μήνυμα λάθους ? Το λέω γιατί η σωστή εντολή είναι ctstate και όχι cstate. Εχει σημασία σε ποιο σημείο θα μπουν οι κανόνες για το CT που παρέθεσες;Γενικά φυσικά έχει σημασία που θα μπουν οι κανόνες αλλά στο script σου όλοι οι κανόνες μεταχειρίζονται το filter table ενώ αυτοί που έδωσα μεταχειρίζονται το raw table οπότε όπου και να τους βάλεις θα είναι το ίδιο γιατί είναι οι μοναδικοί στο raw table. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
macabre_sunsets Δημοσ. 22 Αυγούστου 2013 Μέλος Share Δημοσ. 22 Αυγούστου 2013 Έβγαλε μήνυμα λάθους, αλλά το διόρθωσα (ξέχασα να το διορθώσω και εδώ). Η αφαίρεση των "--sport 60000:61500" και "--dport 60000:61500" από τα Input και Output αντίστοιχα, φαίνεται να λύνει το πρόβλημα με το directory listing. # Passive ports iptables -A INPUT -m tcp -p tcp --dport 60000:61500 -m conntrack --cstate ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m tcp -p tcp --sport 60000:61500 -m conntrack --cstate ESTABLISHED -j ACCEPT Υπάρχει κάποιο πρόβλημα εάν δεν υπάρχουν; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
imitheos Δημοσ. 22 Αυγούστου 2013 Share Δημοσ. 22 Αυγούστου 2013 Α όντως δεν το πρόσεξα πριν ότι είχες ταυτόχρονα και sport και dport. Εσύ είπες στον proftpd να χρησιμοποιεί κάποιες πόρτες. Αυτό όμως δεν σημαίνει και ότι ο πελάτης θα χρησιμοποιεί τις ίδιες για να έχεις κανόνα με "--dport --sport". Μόνο τις δικές σου πρέπει να ορίσεις όπως το έκανες τώρα. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
macabre_sunsets Δημοσ. 22 Αυγούστου 2013 Μέλος Share Δημοσ. 22 Αυγούστου 2013 Ωραία. Ευχαριστώ για τη βοήθεια. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα