Archive for April, 2008

April
15th 2008
Simple SSH Tunneling, φορ φαν εντ πρόφιτ…

Posted under Scripta Manent & Tip-it by WorldCitizeN

  Πάνε κάποιες βδομάδες που είχα πρωτοδιαβάσει για το SSH tunneling σαν τίτλο, και δεν του είχα δώσει απολύτως καμία σημασία. Χτες βράδυ πάνω στην βαρεμάρα μου, διάβασα τι κάνει, κι αμέσως ακούστηκε ένα pop up στο χαλασμένο μου κεφάλι! Ας τα πάρουμε όμως από την αρχή…

  Τι είναι το SSH δεν το έχω σε βάθος, απλά το βλέπω σαν ένα secure remote login σε ένα απομακρυσμένο μηχάνημα. Το ωραίο είναι ότι μέσω αυτού, μπορείς να κάνεις μια ασφαλή σύνδεση,ένα tunnel, έτσι ώστε να περνάει η δικτυακή σου κίνηση μέσω εκείνου του μηχανήματος με ασφάλεια! Γιατί το τονίζω τόσο πολύ? Γιατί οι έχοντες notebook (κι αυτοί που έχουν laptop βεβαίως βεβαίως) συνδέονται σε ότι ελεύθερο ασύρματο δίκτυο βρούν, νομίζοντας ότι ξεγελάνε τον μάστορα με το router (τις περισσότερες φορές αυτό συμβαίνει δηλαδή), αλλά υπάρχει μια περίπτωση, τα δεδομένα που στέλνουμε, να φιλτράρονται από κανένα καλόπαιδο, και να καταφέρει να υποκλέψει κωδικούς που έχουμε δώσει σε μη ασφαλή site… ( Ασφαλή site => https:// )

   Με το SSH Tunneling, περνάμε όλα μας τα δεδομένα από ένα ασφαλές κρυπτογραφημένο κανάλι, οπότε έχουμε μια (σχετική) ασφάλεια όταν κλέβουμε ελεύθερα και ελεύθερα-ελεύθερα ασύρματα, χωρίς να έχουμε τον φόβο για τα δεδομένα μας..

(parenthesis)

Κι όμως, το πρώτο πράγμα που σκέφτηκα δεν ήταν αυτό αγαπητέ αναγνώστη (δεν έχω laptop)… Αλλά πως επιτέλους δεν θα περιμένω το Help Line του πανεπιστημίου να καταλάβουν πως δουλεύουν τα πιστοποιητικά, τα private και public keys, τα OpenVPN και να γράψουν κανένα manual για να μπορέσω να μπω κι εγώ από το ρημάδι το Mac στις Ηλεκτρονικές Βιβλιοθήκες του πανεπιστημίου, αφού αρκεί μια IP πανεπιστημίου για να κάνω την (βρωμό)δουλειά μου… (H λύση του macgiorgosgr δεν δείχνει να λειτουργεί). Αυτό που χρειάζεται είναι μια SSH σύνδεση στο πανεπιστήμιο, με τον λογαριασμό κτλ, περισσότερες λεπτομέρειες δεν ξέρω, το δικό μου τμήμα δίνει απ’ όλα χωρίς την ανάγκη του πανεπιστημίου .

(end parenthesis)

   Αν δεν έχουμε πρόσβαση SSH πουθενά, μπορούμε να στήσουμε στο κατεβαστήρι μας (όλοι έχουμε ένα) έναν εξυπηρετητή. Τέλως πάντων, η εντολή που κάνει την δουλειά είναι η “ssh -N -D port username@path.to.server.gr;” όπου -Ν για να μην ανοίξει απομακρυσμένο έλεγχο, και -D να λειτουργήσει σαν SOCKS server στο συγκεκριμένο port (πχ 9999). Από εκεί κι ύστερα αυτό που λείπει είναι να προωθούμε το Safari και το Mail σε αυτόν τον server. Πολύ εύκολα από τα System Preferences επιλέγουμε το Ethernet ή το Airport, ανάλογα με το τι συνδεόμαστε και κοιτάμε τα υπόλοιπα στην φώτο..

SOcKS

Το ζήτημα είναι γιατί να πρέπει να μπλέκουμε με System Preferences, Airport κι άλλα τέτοια περίεργα όταν μπορούμε να τα κάνουμε όλα από το Terminal? Κάθισα λοιπόν χτες και έγραψα ένα μικρό Scriptάκι που θα αυτοματοποιεί όσο γίνεται την διαδικασία. Δεν έχω και μεγάλη εμπειρία από bash, αλλά την δουλειά του την κάνει (μου φαίνεται δηλαδή). Αυτό που θα χρειαστεί, είναι να πληκτρολογήσετε από μία έως τρεις φορές τον κωδικό σας, μία στην αρχή για να ανοίξει το SOCKS, μια για τον ssh server, και άλλη μια στο τέλος για να κλείσει το forward στο SOCKS από το Safari… E, τώρα που το βλέπω δεν είναι και πολύ αυτόματο

#!/bin/bash
function EstConn {
  echo "Establishing Connection";
  sudo networksetup -setsocksfirewallproxystate Airport on;
  sudo networksetup -setsocksfirewallproxy Airport 127.0.0.1 8080;
  ssh -N -D 8080 username@path.to.server.gr;
  sudo networksetup -setsocksfirewallproxystate Airport off;
  echo "Connection is off";
}

if [ $# = 0 ]; then
  EstConn;
else	# $1 is either "on", either "off"
  sudo networksetup -setsocksfirewallproxystate Airport $1 &&
  echo "Connection is $1" &&
  if [ $1 == "on" ]; then EstConn; fi
fi

  Όπου username@path.to.server.gr αντικαθιστάτε με το αντίστοιχο δικό σας (πχ. WorldCitizeN@MyMacMiniSERVER.lan ) και όπου Airport το αντίστοιχο interface που χρησιμοποιείτε, πχ. και “Ethernet” . (Εννοείται πως το σταματάτε με Control-C, όπως θα καταλάβατε δεν έχω τρελή επαφή με *nix ). Πολλές φορές, γίνεται η σύνδεση με το SOCKS, αλλά δεν “ξεγίνεται”, οπότε σε αυτήν την περίπτωση τρέχουμε την εντολή με ένα “off”, πχ sh SSHtunnel off.

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

8 σχόλια »