Περιπέτειες από το μπλε

Περιπέτειες από το μπλε

Πώς το Spotify μπορεί να σας βοηθήσει να μελετήσετε τους δαίμονες, τα RFC, τα δίκτυα και να προωθήσετε τον ανοιχτό κώδικα. Ή τι συμβαίνει εάν δεν μπορείτε να πληρώσετε, αλλά θέλετε πραγματικά μερικά καλούδια υψηλής ποιότητας.

ΑΡΧΙΚΗ

Την τρίτη ημέρα, παρατηρήθηκε ότι το Spotify εμφάνιζε διαφημίσεις με βάση τη χώρα της διεύθυνσης IP. Σημειώθηκε επίσης ότι σε ορισμένες χώρες η διαφήμιση δεν εισήχθη καθόλου. Για παράδειγμα, στη Δημοκρατία της Λευκορωσίας. Και στη συνέχεια σχεδιάστηκε ένα «λαμπρό» σχέδιο για την απενεργοποίηση της διαφήμισης σε έναν μη premium λογαριασμό.

Λίγα λόγια για το Spotify

Γενικά, το Spotify έχει μια περίεργη πολιτική. Ο αδερφός μας πρέπει να στραβώσει αρκετά για να αγοράσει premium: αλλάξτε την τοποθεσία στο προφίλ του σε εξωτερικό, αναζητήστε μια κατάλληλη δωροκάρτα που μπορεί να πληρωθεί μόνο με το PayPal, το οποίο φέρεται περίεργα τον τελευταίο καιρό και θέλει ένα σωρό έγγραφα. Σε γενικές γραμμές, είναι επίσης μια περιπέτεια, αλλά διαφορετικής τάξης. Αν και οι περισσότεροι το κάνουν αυτό για χάρη της έκδοσης για κινητά, δεν με ενδιαφέρει. Επομένως, όλα τα παρακάτω θα βοηθήσουν μόνο στην περίπτωση της έκδοσης για επιτραπέζιους υπολογιστές. Επιπλέον, δεν θα υπάρξει επέκταση των λειτουργιών. Απλώς κόβουμε μερικά από τα επιπλέον.

Γιατί είναι τόσο περίπλοκο;

Και το σκέφτηκα κατά την εγγραφή των δεδομένων socks-proxy στη διαμόρφωση του Spotify. Το πρόβλημα αποδείχθηκε ότι ο έλεγχος ταυτότητας στις κάλτσες με χρήση σύνδεσης και κωδικού πρόσβασης δεν λειτουργεί. Επιπλέον, οι προγραμματιστές κάνουν τακτικά κάτι γύρω από το διακομιστή μεσολάβησης: είτε το επιτρέπουν, μετά το απαγορεύουν είτε το παραβιάζουν, γεγονός που οδηγεί σε ολόκληρες ομάδες συζητήσεων εκτός τοποθεσίας.

Αποφασίστηκε να μην βασιστούμε σε ασταθείς λειτουργίες και να βρούμε κάτι πιο αξιόπιστο και ενδιαφέρον.

Κάπου εδώ πρέπει να αναρωτηθεί ο αναγνώστης: γιατί να μην πάρεις ssh με κλειδί -D και ετσι τελειωνει? Και γενικά θα έχει δίκιο. Αλλά, πρώτον, αυτό πρέπει ακόμα να δαιμονοποιηθεί και να γίνει φίλος με το autossh, για να μην σκεφτόμαστε σχισμένες συνδέσεις. Και δεύτερον: είναι πολύ απλό και βαρετό.

Για να

Ως συνήθως, ας πάμε από αριστερά προς τα δεξιά, από πάνω προς τα κάτω και ας περιγράψουμε όλα όσα χρειαζόμαστε για να υλοποιήσουμε την «απλή» ιδέα μας.

Πρώτα χρειάζεστε έναν πληρεξούσιο

Και υπάρχουν πολλές εναλλακτικές ταυτόχρονα:

  • μπορείτε απλώς να πάτε και να πάρετε από ανοιχτές λίστες μεσολάβησης. Φτηνό (ή μάλλον για τίποτα), αλλά απολύτως αναξιόπιστο και η διάρκεια ζωής τέτοιων proxies τείνει στο μηδέν. Επομένως, θα ήταν απαραίτητο να βρείτε/γράψετε έναν αναλυτή για λίστες μεσολάβησης, να τις φιλτράρετε κατά τον επιθυμητό τύπο και χώρα και το ζήτημα της αντικατάστασης του διακομιστή μεσολάβησης που βρέθηκε στο Spotify παραμένει ανοιχτό (καλά, ίσως μέσω HTTP_PROXY μεταφέρετε και δημιουργήστε ένα προσαρμοσμένο περιτύλιγμα για το δυαδικό αρχείο, έτσι ώστε όλη η άλλη κίνηση να μην αποστέλλεται εκεί).
  • Μπορείτε να αγοράσετε ένα παρόμοιο διακομιστή μεσολάβησης και να γλυτώσετε τον εαυτό σας από τα περισσότερα προβλήματα που περιγράφονται παραπάνω. Αλλά στην τιμή ενός διακομιστή μεσολάβησης, μπορείτε να αγοράσετε αμέσως premium στο Spotify και αυτό δεν είναι πρακτικό για την αρχική εργασία.
  • Ανεβάστε το δικό σας. Όπως μάλλον μαντέψατε, αυτή είναι η επιλογή μας.

Καθαρά τυχαία μπορεί να αποδειχθεί ότι έχετε έναν φίλο με διακομιστή στη Δημοκρατία της Λευκορωσίας ή σε άλλη μικρή χώρα. Πρέπει να το χρησιμοποιήσετε και να ανοίξετε τον επιθυμητό διακομιστή μεσολάβησης σε αυτό. Οι ειδικοί γνώστες μπορούν να είναι ικανοποιημένοι με έναν φίλο με ανοιχτό δρομολογητή DD-WRT ή παρόμοιο λογισμικό. Αλλά εκεί του υπέροχος κόσμος και αυτός ο κόσμος σαφώς δεν χωράει στο πλαίσιο αυτής της ιστορίας.

Έτσι, οι επιλογές μας: Squid - δεν είναι εμπνευσμένο, και δεν θέλω διακομιστή μεσολάβησης HTTP, υπάρχουν ήδη πάρα πολλά από αυτό το πρωτόκολλο. Και στον τομέα των SOCKS δεν υπάρχει τίποτα λογικό παρά μόνο Dante δεν έχουν παραδοθεί ακόμα. Επομένως, ας το πάρουμε.

Μην περιμένετε το εγχειρίδιο του Dante σχετικά με την εγκατάσταση και τη ρύθμιση παραμέτρων. Αυτός απλά γκουγκλάροντας και δεν παρουσιάζει ιδιαίτερο ενδιαφέρον. Στην ελάχιστη διαμόρφωση που πρέπει να ρίξετε σε όλα τα είδη client pass, socks pass, καταχωρήστε σωστά τις διεπαφές και μην ξεχάσετε να προσθέσετε socksmethod: username. Σε αυτή τη μορφή, για έλεγχο ταυτότητας, το logopass θα ληφθεί από τους χρήστες του συστήματος. Και το κομμάτι σχετικά με την ασφάλεια: απαγόρευση πρόσβασης σε localhost, περιορισμός χρηστών κ.λπ. - αυτό είναι καθαρά ατομικό, ανάλογα με την προσωπική παράνοια.

Αναπτύξτε έναν διακομιστή μεσολάβησης που βλέπει στο δίκτυο

Το έργο είναι σε δύο πράξεις.

Πράξη πρώτη

Τακτοποιήσαμε τον διακομιστή μεσολάβησης, τώρα πρέπει να έχουμε πρόσβαση σε αυτόν από τον παγκόσμιο ιστό. Εάν έχετε ένα μηχάνημα με λευκή IP στην επιθυμητή χώρα, τότε μπορείτε να παραλείψετε με ασφάλεια αυτό το σημείο. Δεν έχουμε (όπως αναφέρθηκε παραπάνω φιλοξενούμαστε σε σπίτια φίλων) και η πλησιέστερη λευκή IP είναι κάπου στη Γερμανία, οπότε θα μελετήσουμε δίκτυα.

Οπότε ναι, ο προσεκτικός αναγνώστης θα ρωτήσει ξανά: γιατί δεν παίρνετε μια υπάρχουσα υπηρεσία όπως ngrok ή παρόμοιο? Και πάλι θα έχει δίκιο. Αλλά αυτό είναι υπηρεσία, πρέπει πάλι να δαιμονοποιηθεί, μπορεί επίσης να κοστίσει και γενικά δεν είναι αθλητικό. Ως εκ τούτου, θα δημιουργήσουμε ποδήλατα από παλιοσίδερα.

Εργασία: υπάρχει ένας διακομιστής μεσολάβησης κάπου πολύ πίσω από το NAT, πρέπει να τον κρεμάσετε σε μια από τις θύρες ενός VPS που έχει λευκή IP και βρίσκεται στην άκρη του κόσμου.

Είναι λογικό να υποθέσουμε ότι αυτό μπορεί να λυθεί είτε μέσω port forwarding (η οποία υλοποιείται μέσω των προαναφερθέντων ssh), ή με συνδυασμό υλικού σε εικονικό δίκτυο μέσω VPN. ΜΕ ssh ξέρουμε να δουλεύουμε, autossh Είναι βαρετό να το παίρνεις, οπότε ας πάρουμε το OpenVPN.

Η DigitalOcean έχει υπέροχο μανούλ σε αυτο το θεμα. Δεν έχω τίποτα να προσθέσω σε αυτό. Και η διαμόρφωση που προκύπτει μπορεί να συνδεθεί πολύ εύκολα με τον πελάτη OpenVPN και systemd. Απλώς βάλτε το (config). /etc/openvpn/client/ και μην ξεχάσετε να αλλάξετε την επέκταση σε .conf. Μετά από αυτό, τραβήξτε την υπηρεσία [email protected]μην ξεχάσεις να το κάνεις για εκείνη enable και να χαίρεσαι που όλα πέταξαν μακριά.

Φυσικά, πρέπει να απενεργοποιήσουμε οποιαδήποτε ανακατεύθυνση της κυκλοφορίας στο πρόσφατα δημιουργημένο VPN, επειδή δεν θέλουμε να μειώσουμε την ταχύτητα στο μηχάνημα πελάτη περνώντας την κίνηση μέσα από μισή μπάλα.

Και ναι, πρέπει να καταχωρίσουμε μια στατική διεύθυνση IP στον διακομιστή VPN για τον πελάτη μας. Αυτό θα χρειαστεί λίγο αργότερα στην ιστορία. Για να γίνει αυτό πρέπει να ενεργοποιήσετε ifconfig-pool-persist, επεξεργασία ipp.txt, περιλαμβάνεται στο OpenVPN και ενεργοποιήστε τον πελάτη-config-dir, καθώς και επεξεργαστείτε τη διαμόρφωση του επιθυμητού προγράμματος-πελάτη προσθέτοντας ifconfig-push με τη σωστή μάσκα και την επιθυμητή διεύθυνση IP.

Πράξη δεύτερη

Τώρα έχουμε ένα μηχάνημα στο «δίκτυο» που βλέπει στο Διαδίκτυο και μπορεί να χρησιμοποιηθεί για ιδιοτελείς σκοπούς. Δηλαδή, ανακατευθύνετε μέρος της κίνησης μέσω αυτού.

Λοιπόν, μια νέα εργασία: πρέπει να απενεργοποιήσετε την κίνηση που φτάνει σε μια από τις θύρες VPS με μια λευκή IP, έτσι ώστε αυτή η κίνηση να πηγαίνει στο πρόσφατα συνδεδεμένο εικονικό δίκτυο και η απόκριση να μπορεί να επιστρέψει από εκεί.

Λύση: φυσικά iptables! Πότε αλλού θα έχετε μια τόσο υπέροχη ευκαιρία να εξασκηθείτε μαζί του;

Η απαιτούμενη διαμόρφωση μπορεί να βρεθεί αρκετά γρήγορα, σε τρεις ώρες, εκατό βρισιές και μια χούφτα χαμένα νεύρα, γιατί η αποσφαλμάτωση των δικτύων είναι μια πολύ συγκεκριμένη διαδικασία.

Αρχικά, πρέπει να ενεργοποιήσετε την ανακατεύθυνση της κυκλοφορίας στον πυρήνα. Αυτό το πράγμα λέγεται ipv4.ip_forward και ενεργοποιείται ελαφρώς διαφορετικά ανάλογα με το λειτουργικό σύστημα και τη διαχείριση δικτύου.

Δεύτερον, πρέπει να επιλέξετε μια θύρα στο VPS και να τυλίξετε όλη την κίνηση που πηγαίνει σε αυτό σε ένα εικονικό υποδίκτυο. Αυτό μπορεί να γίνει, για παράδειγμα, ως εξής:

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 8080 -j DNAT --to-destination 10.8.0.2:8080

Εδώ ανακατευθύνουμε όλη την κίνηση TCP που έρχεται στη θύρα 8080 της εξωτερικής διεπαφής σε ένα μηχάνημα με IP 10.8.0.2 και την ίδια θύρα 8080.

Για όσους θέλουν τις βρώμικες λεπτομέρειες της δουλειάς netfilter, iptables και τη δρομολόγηση γενικά, είναι απολύτως απαραίτητο να το μελετήσουμε αυτό ή αυτό.

Έτσι, τώρα τα πακέτα μας πετούν στο εικονικό υποδίκτυο και... μένουν εκεί. Πιο συγκεκριμένα, η απάντηση από το socks proxy επιστρέφει μέσω της προεπιλεγμένης πύλης στο μηχάνημα με τον Dante και ο παραλήπτης την απορρίπτει, επειδή στα δίκτυα δεν συνηθίζεται να στέλνετε ένα αίτημα σε μια IP και να λαμβάνετε απάντηση από μια άλλη. Ως εκ τούτου, πρέπει να συνεχίσουμε να παραπλανούμε.

Έτσι, τώρα πρέπει να ανακατευθύνετε όλα τα πακέτα από τον διακομιστή μεσολάβησης πίσω στο εικονικό υποδίκτυο προς το VPS με μια λευκή IP. Εδώ η κατάσταση είναι λίγο χειρότερη, γιατί είναι ακριβώς iptables δεν θα έχουμε αρκετά, γιατί αν διορθώσουμε τη διεύθυνση προορισμού πριν από τη δρομολόγηση (PREROUTING), τότε το πακέτο μας δεν θα πετάξει στο Διαδίκτυο και αν δεν το διορθώσουμε, το πακέτο θα πάει στο default gateway. Επομένως, πρέπει να κάνετε τα εξής: θυμηθείτε την αλυσίδα mangle, προκειμένου να επισημανθούν τα πακέτα iptables και τυλίξτε τα σε έναν προσαρμοσμένο πίνακα δρομολόγησης που θα τους στείλει εκεί που πρέπει να πάνε.

Όχι νωρίτερα, είπε:

iptables -t mangle -A OUTPUT -p tcp --sport 8080 -j MARK --set-mark 0x80
ip rule add fwmark 0x80 table 80
ip route add default via 10.8.0.1 dev tun0 table 80

Παίρνουμε την εξερχόμενη κίνηση, επισημαίνουμε ό,τι πετάει από τη θύρα στην οποία βρίσκεται ο διακομιστής μεσολάβησης (8080 στην περίπτωσή μας), ανακατευθύνουμε όλη την επισημασμένη κίνηση στον πίνακα δρομολόγησης με τον αριθμό 80 (γενικά, ο αριθμός δεν εξαρτάται από τίποτα, απλώς θέλαμε έως) και προσθέστε έναν κανόνα , σύμφωνα με τον οποίο όλα τα πακέτα που περιλαμβάνονται σε αυτόν τον πίνακα μεταφέρονται στο υποδίκτυο VPN.

Εξαιρετική! Τώρα τα πακέτα πετούν πίσω προς το VPS... και πεθαίνουν εκεί. Επειδή η VPS δεν ξέρει τι να τα κάνει. Επομένως, εάν δεν ενοχλείτε, μπορείτε απλώς να ανακατευθύνετε όλη την κίνηση που έρχεται από το εικονικό υποδίκτυο πίσω στο Διαδίκτυο:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 172.42.1.10

Εδώ, ό,τι έρχεται από το υποδίκτυο 10.8.0.0 με μάσκα 255.255.255.000 τυλίγεται στο source-NAT και μεταβαίνει στην προεπιλεγμένη διεπαφή, η οποία μετατρέπεται στο Διαδίκτυο. Είναι σημαντικό να σημειωθεί ότι αυτό το πράγμα θα λειτουργήσει μόνο εάν προωθήσουμε με διαφάνεια τη θύρα, δηλαδή η εισερχόμενη θύρα στο VPS ταιριάζει με τη θύρα του διακομιστή μεσολάβησής μας. Διαφορετικά θα πρέπει να υποφέρετε λίγο περισσότερο.

Κάπου τώρα όλα πρέπει να αρχίσουν να λειτουργούν. Και μένει μόνο λίγο: μην ξεχάσετε να βεβαιωθείτε ότι όλες οι ρυθμίσεις παραμέτρων iptables и route δεν συνεχίστηκε μετά την επανεκκίνηση. Για iptables υπάρχουν ειδικά αρχεία όπως /etc/iptables/rules.v4(στην περίπτωση του Ubuntu), αλλά για τις διαδρομές όλα είναι λίγο πιο περίπλοκα. Τα έσπρωξα μέσα up/down Σενάρια OpenVPN, αν και νομίζω ότι θα μπορούσαν να είχαν γίνει πιο αξιοπρεπώς.

Αναδιπλώστε την κυκλοφορία από την εφαρμογή σε διακομιστή μεσολάβησης

Έτσι, έχουμε ένα διακομιστή μεσολάβησης με έλεγχο ταυτότητας στην επιθυμητή χώρα, προσβάσιμο μέσω μιας στατικής λευκής διεύθυνσης IP. Το μόνο που μένει είναι να το χρησιμοποιήσετε και να ανακατευθύνετε την κυκλοφορία από το Spotify εκεί. Αλλά υπάρχει μια απόχρωση, όπως αναφέρθηκε παραπάνω, ο κωδικός πρόσβασης σύνδεσης για το διακομιστή μεσολάβησης στο Spotify δεν λειτουργεί, επομένως θα ψάξουμε πώς να το ξεπεράσουμε.

Αρχικά, ας θυμηθούμε πληρεξούσιο. Υπέροχα πράγματα, αλλά κοστίζει όσο ένα διαστημόπλοιο ($40). Με αυτά τα χρήματα μπορούμε και πάλι να αγοράσουμε premium και να τελειώσουμε με αυτό. Επομένως, θα αναζητήσουμε περισσότερα δωρεάν και ανοιχτά ανάλογα στο Mac (ναι, θέλουμε να ακούμε μουσική στο Mac). Ας ανακαλύψουμε ένα ολόκληρο εργαλείο: εγγύς. Και θα πάμε ευχαρίστως να τον χτυπήσουμε.

Αλλά η χαρά θα είναι βραχύβια, γιατί αποδεικνύεται ότι πρέπει να ενεργοποιήσετε τη λειτουργία εντοπισμού σφαλμάτων και προσαρμοσμένες επεκτάσεις πυρήνα στο MacOS, να υποβάλετε μια απλή διαμόρφωση και να κατανοήσετε ότι αυτό το εργαλείο έχει ακριβώς το ίδιο πρόβλημα με το Spotify: δεν μπορεί να περάσει έλεγχο ταυτότητας χρησιμοποιώντας το login-password στο socks-proxy.

Κάπου εδώ είναι καιρός να ξετρελαθείτε και να αγοράσετε ένα premium... αλλά όχι! Ας προσπαθήσουμε να ζητήσουμε να διορθωθεί, είναι ανοιχτού κώδικα! Ας το κάνουμε εισιτήριο. Και ως απάντηση, λαμβάνουμε μια σπαρακτική ιστορία για το πώς ο μοναδικός συντηρητής δεν έχει πλέον MacBook και στο διάολο, όχι μια επιδιόρθωση.

Θα στεναχωρηθούμε πάλι. Αλλά τότε θα θυμηθούμε τα νιάτα μας και το C, θα ενεργοποιήσουμε τη λειτουργία εντοπισμού σφαλμάτων στον Dante, θα σκάψουμε εκατοντάδες κιλομπάιτ κορμών, θα πάμε στο RFC1927 για πληροφορίες σχετικά με το πρωτόκολλο SOCKS5, ας δούμε το Xcode και ας βρούμε το πρόβλημα. Αρκεί να διορθώσετε έναν χαρακτήρα στη λίστα των κωδικών μεθόδων που προσφέρει ο πελάτης για έλεγχο ταυτότητας και όλα αρχίζουν να λειτουργούν σαν ρολόι. Χαιρόμαστε, μαζεύουμε το δυαδικό έκδοσης, το κάνουμε αίτημα έλξης και μπαίνουμε στο ηλιοβασίλεμα και πηγαίνουμε στο επόμενο σημείο.

Αυτοματοποιήστε το

Μόλις το Proximac λειτουργήσει, πρέπει να δαιμονοποιηθεί και να ξεχαστεί. Υπάρχει ένα ολόκληρο σύστημα αρχικοποίησης που είναι κατάλληλο για αυτό, το οποίο βρίσκεται στο MacOS, συγκεκριμένα εκτόξευση.

Το βρίσκουμε γρήγορα εγχειρίδιο και καταλαβαίνουμε ότι αυτό δεν είναι καθόλου systemd και εδώ είναι σχεδόν μια σέσουλα και xml. Χωρίς φανταχτερές ρυθμίσεις παραμέτρων για εσάς, χωρίς εντολές όπως status, restart, daemon-reload. Μόνο σκληροπυρηνικό είδος start-stop, list-grep, unload-load και πολλά άλλα παράξενα. Ξεπερνώντας όλα αυτά γράφουμε plist, φόρτωση. Δεν δουλεύει. Μελετάμε τη μέθοδο αποσφαλμάτωσης του δαίμονα, τον διορθώνουμε, καταλαβαίνουμε τι υπάρχει ENV ακόμη και PATH δεν παραδώσαμε το κανονικό, μαλώνουμε, το φέρνουμε μέσα (προσθέτοντας /sbin и /usr/local/bin) και τελικά είμαστε ευχαριστημένοι με την αυτόματη εκκίνηση και τη σταθερή λειτουργία.

Αποπνέω

Ποιο είναι το αποτέλεσμα; Μια εβδομάδα περιπέτειας, ένας γονατιστός ζωολογικός κήπος από υπηρεσίες που είναι αγαπητές στην καρδιά και κάνει ό,τι του ζητείται. Λίγη γνώση σε αμφίβολους τεχνικούς τομείς, λίγο ανοιχτού κώδικα και ένα χαμόγελο στα χείλη από τη σκέψη «το έκανα!»

ΥΓ: δεν πρόκειται για έκκληση για μποϊκοτάζ των καπιταλιστών, για εξοικονόμηση σπίρτων ή για ολοκληρωτική πονηριά, αλλά απλώς μια ένδειξη των δυνατοτήτων έρευνας και ανάπτυξης εκεί που, γενικά, δεν τις περιμένεις.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο