httpd και ftpd στην ίδια TCP πόρτα

Fanis Dokianakis fanis at infloop.gr
Sat Nov 9 21:48:41 EET 2013


On Thursday 07 of November 2013 15:41:37 Spiros Bolis wrote:
> Έχω ένα ενδιαφέρον πρόβλημα και θα ήθελα ιδέες παρακαλώ: χρειάζεται σε
> μια (την ίδια!) TCP πόρτα να απαντάει "κάτι" και σε αιτήματα ftp
> (anonymous) και σε http μετά από συγχώνευση δύο μηχανών σε μια. Το
> αίτημα έρχεται για  Δε χρειάζεται κάτι εξωτικό, δύο να μπορούν να
> κατεβαίνουν δύο στατικά αρχειάκια των 30kB. Dedicated debian server
> εκτός φυσικής πρόσβασης.
> 
> 
> Δοκίμασα ένα καρά-beta mod_ftp στον apache2 νομίζωντας ότι έχει vhosting
> για http και ftp στην ίδια πόρτα, τζίφος.
> 
> Κάποιοι εμπορικοί/shareware server λένε ότι είναι "multiprotocol", δε
> θέλω όμως να μπλέξω.
> 
> Ψαχουλεύοντας βλέπω ότι μπορεί να κάνει τη δουλειά που θελω ο squid
> (reverse proxy να ακούει αυτός στη μια πορτα και να στέλνει τα ανάλογα
> αιτήματα σε άλλες ξεχωριστές πόρτες vsftpd και apache2/nginx/lighthttpd).
> 
> Μια "φλασιά" που μου ήρθε είναι (ίσως;) με βάση την originating port και
> κάποιο mangle κανόνα σε iptables.
> 
> 
> Καλύτερες/άλλες ιδέες; Μήπως χάνω το προφανές;
> 
> Ευχαριστώ

Σπύρο μη ξεχνάς ότι το ftp είναι πολύπλοκο προτόκολλο, χρησιμοποιεί πάντα 2 
πόρτες για control και data και ο ftp server μιλάει πρώτος στον client 
δίνωντας 220 ready για να συνεχίσει ο client. Αντίθετα στο http τα πάντα 
γίνονται πάνω από την 80 και ο client μιλάει πρώτος με ένα http request. 

Πες ότι την control πόρτα (κλασσικά η 21) την κάνεις proxy σε ένα ftp server, 
την data πόρτα πως θα τη κάνεις; 
Αν είναι passive mode, έστω ότι βάζεις τον ftp server να δίνει μία 
συγκεκριμένη data port και κάνεις μαγικά με το iptables, όμως είναι μια άλλη 
incoming πόρτα (>1023) και όχι η 80.

Σε active mode είναι πιο εύκολο μιας και το data connection είναι από το 
server στο client (20).
Επίσης δεν υπάρχουν και πολλά firewalls (στους clients ή ενδιάμεσα) που μπορούν 
να κάνουν match το ftp protocol για connection tracking σε άλλη πόρτα εκτός 
την 21. (option ports στο nf_conntrack_ftp module).

Ο μόνος τρόπος που βλέπω είναι ένα custom proxy/ftp server με ένα time frame X 
sec μετά τα incoming connections για την αποστολή του 220 ready. Αν λάβει GET 
ή άλλο request μέσα στο time frame τότε αποστολή στο web server, αλλιώς ftp.

Το originating port που είπες είναι καλή ιδέα αλλά και πάλι έχεις πρόβλημα 
καθώς είναι και τα δύο πρωτόκολλα αναφέρουν μια τυχαία πόρτα >1023 και μένει 
στο client πως θα το υλοποιήσει.

Φ.




More information about the Linux-greek-users mailing list